@sdcorejs/angular 19.0.10 → 19.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/README.md +32 -23
  2. package/assets/STYLE-GUIDE.md +58 -72
  3. package/assets/scss/core/_inline-edit.scss +1 -1
  4. package/assets/scss/core/color.scss +56 -45
  5. package/assets/scss/core/form.scss +21 -9
  6. package/assets/scss/core/utilities/_base.scss +3 -3
  7. package/assets/scss/core/utilities/_border.scss +1 -1
  8. package/assets/scss/themes/default.scss +46 -32
  9. package/assets/scss/themes/material-theme.scss +8 -87
  10. package/components/badge/src/badge.component.d.ts +5 -16
  11. package/components/button/src/button.component.d.ts +6 -4
  12. package/components/form-generic/src/components/form-builder/components/group/attribute/group-attribute.component.d.ts +1 -0
  13. package/components/form-generic/src/components/form-builder/form-builder.component.d.ts +9 -1
  14. package/components/inform/src/inform.component.d.ts +2 -8
  15. package/components/modal/src/modal.component.d.ts +1 -1
  16. package/components/modal-resizable/src/modal-resizable.component.d.ts +1 -1
  17. package/components/query-bar/src/query-bar.component.d.ts +1 -0
  18. package/components/query-builder/src/query-builder.component.d.ts +6 -6
  19. package/components/query-builder/src/query-builder.model.d.ts +3 -3
  20. package/components/section/src/section.component.d.ts +1 -5
  21. package/components/side-drawer/src/side-drawer.component.d.ts +1 -1
  22. package/components/table/src/components/command/desktop-command.component.d.ts +0 -1
  23. package/components/table/src/models/table-command.model.d.ts +3 -3
  24. package/components/table/src/models/table-option-selector.model.d.ts +5 -5
  25. package/components/table/src/services/table-filter/table-filter.model.d.ts +0 -2
  26. package/components/tree/src/tree.model.d.ts +3 -2
  27. package/fesm2022/sdcorejs-angular-components-anchor.mjs +5 -6
  28. package/fesm2022/sdcorejs-angular-components-anchor.mjs.map +1 -1
  29. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs +10 -11
  30. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs.map +1 -1
  31. package/fesm2022/sdcorejs-angular-components-badge.mjs +15 -13
  32. package/fesm2022/sdcorejs-angular-components-badge.mjs.map +1 -1
  33. package/fesm2022/sdcorejs-angular-components-button.mjs +10 -11
  34. package/fesm2022/sdcorejs-angular-components-button.mjs.map +1 -1
  35. package/fesm2022/sdcorejs-angular-components-code-editor.mjs +4 -5
  36. package/fesm2022/sdcorejs-angular-components-code-editor.mjs.map +1 -1
  37. package/fesm2022/sdcorejs-angular-components-document-builder.mjs +3 -3
  38. package/fesm2022/sdcorejs-angular-components-document-builder.mjs.map +1 -1
  39. package/fesm2022/sdcorejs-angular-components-editor.mjs +4 -5
  40. package/fesm2022/sdcorejs-angular-components-editor.mjs.map +1 -1
  41. package/fesm2022/sdcorejs-angular-components-form-generic.mjs +117 -46
  42. package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
  43. package/fesm2022/sdcorejs-angular-components-history.mjs +2 -2
  44. package/fesm2022/sdcorejs-angular-components-history.mjs.map +1 -1
  45. package/fesm2022/sdcorejs-angular-components-import-excel.mjs +5 -7
  46. package/fesm2022/sdcorejs-angular-components-import-excel.mjs.map +1 -1
  47. package/fesm2022/sdcorejs-angular-components-inform.mjs +5 -15
  48. package/fesm2022/sdcorejs-angular-components-inform.mjs.map +1 -1
  49. package/fesm2022/sdcorejs-angular-components-mini-editor.mjs +2 -2
  50. package/fesm2022/sdcorejs-angular-components-mini-editor.mjs.map +1 -1
  51. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs +5 -6
  52. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs.map +1 -1
  53. package/fesm2022/sdcorejs-angular-components-modal.mjs +25 -7
  54. package/fesm2022/sdcorejs-angular-components-modal.mjs.map +1 -1
  55. package/fesm2022/sdcorejs-angular-components-org-chart.mjs +4 -5
  56. package/fesm2022/sdcorejs-angular-components-org-chart.mjs.map +1 -1
  57. package/fesm2022/sdcorejs-angular-components-preview.mjs +7 -8
  58. package/fesm2022/sdcorejs-angular-components-preview.mjs.map +1 -1
  59. package/fesm2022/sdcorejs-angular-components-query-bar.mjs +27 -28
  60. package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
  61. package/fesm2022/sdcorejs-angular-components-query-builder.mjs +5 -5
  62. package/fesm2022/sdcorejs-angular-components-query-builder.mjs.map +1 -1
  63. package/fesm2022/sdcorejs-angular-components-section.mjs +7 -12
  64. package/fesm2022/sdcorejs-angular-components-section.mjs.map +1 -1
  65. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs +3 -4
  66. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs.map +1 -1
  67. package/fesm2022/sdcorejs-angular-components-splitter.mjs +2 -2
  68. package/fesm2022/sdcorejs-angular-components-splitter.mjs.map +1 -1
  69. package/fesm2022/sdcorejs-angular-components-stepper.mjs +3 -4
  70. package/fesm2022/sdcorejs-angular-components-stepper.mjs.map +1 -1
  71. package/fesm2022/sdcorejs-angular-components-tab-router.mjs +5 -6
  72. package/fesm2022/sdcorejs-angular-components-tab-router.mjs.map +1 -1
  73. package/fesm2022/sdcorejs-angular-components-tab.mjs +3 -4
  74. package/fesm2022/sdcorejs-angular-components-tab.mjs.map +1 -1
  75. package/fesm2022/sdcorejs-angular-components-table.mjs +28 -32
  76. package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
  77. package/fesm2022/sdcorejs-angular-components-tree.mjs +6 -8
  78. package/fesm2022/sdcorejs-angular-components-tree.mjs.map +1 -1
  79. package/fesm2022/sdcorejs-angular-components-upload-file.mjs +8 -9
  80. package/fesm2022/sdcorejs-angular-components-upload-file.mjs.map +1 -1
  81. package/fesm2022/sdcorejs-angular-components-view.mjs +2 -2
  82. package/fesm2022/sdcorejs-angular-components-view.mjs.map +1 -1
  83. package/fesm2022/sdcorejs-angular-directives.mjs +1 -1
  84. package/fesm2022/sdcorejs-angular-directives.mjs.map +1 -1
  85. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +5 -7
  86. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
  87. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs +2 -2
  88. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs.map +1 -1
  89. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs +7 -9
  90. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs.map +1 -1
  91. package/fesm2022/sdcorejs-angular-forms-chip.mjs +5 -7
  92. package/fesm2022/sdcorejs-angular-forms-chip.mjs.map +1 -1
  93. package/fesm2022/sdcorejs-angular-forms-date-range.mjs +7 -9
  94. package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
  95. package/fesm2022/sdcorejs-angular-forms-date.mjs +6 -8
  96. package/fesm2022/sdcorejs-angular-forms-date.mjs.map +1 -1
  97. package/fesm2022/sdcorejs-angular-forms-datetime.mjs +465 -343
  98. package/fesm2022/sdcorejs-angular-forms-datetime.mjs.map +1 -1
  99. package/fesm2022/sdcorejs-angular-forms-inline-text.mjs +4 -5
  100. package/fesm2022/sdcorejs-angular-forms-inline-text.mjs.map +1 -1
  101. package/fesm2022/sdcorejs-angular-forms-input-number.mjs +5 -7
  102. package/fesm2022/sdcorejs-angular-forms-input-number.mjs.map +1 -1
  103. package/fesm2022/sdcorejs-angular-forms-input.mjs +5 -7
  104. package/fesm2022/sdcorejs-angular-forms-input.mjs.map +1 -1
  105. package/fesm2022/sdcorejs-angular-forms-label.mjs +4 -5
  106. package/fesm2022/sdcorejs-angular-forms-label.mjs.map +1 -1
  107. package/fesm2022/sdcorejs-angular-forms-radio.mjs +2 -4
  108. package/fesm2022/sdcorejs-angular-forms-radio.mjs.map +1 -1
  109. package/fesm2022/sdcorejs-angular-forms-select.mjs +6 -8
  110. package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
  111. package/fesm2022/sdcorejs-angular-forms-switch.mjs +2 -2
  112. package/fesm2022/sdcorejs-angular-forms-switch.mjs.map +1 -1
  113. package/fesm2022/sdcorejs-angular-forms-textarea.mjs +5 -7
  114. package/fesm2022/sdcorejs-angular-forms-textarea.mjs.map +1 -1
  115. package/fesm2022/sdcorejs-angular-modules-icon.mjs +523 -0
  116. package/fesm2022/sdcorejs-angular-modules-icon.mjs.map +1 -0
  117. package/fesm2022/sdcorejs-angular-modules-layout.mjs +29 -29
  118. package/fesm2022/sdcorejs-angular-modules-layout.mjs.map +1 -1
  119. package/fesm2022/sdcorejs-angular-modules.mjs +1 -0
  120. package/fesm2022/sdcorejs-angular-modules.mjs.map +1 -1
  121. package/fesm2022/sdcorejs-angular-services-confirm.mjs +85 -5
  122. package/fesm2022/sdcorejs-angular-services-confirm.mjs.map +1 -1
  123. package/fesm2022/sdcorejs-angular-services-excel.mjs +22 -14
  124. package/fesm2022/sdcorejs-angular-services-excel.mjs.map +1 -1
  125. package/fesm2022/sdcorejs-angular-services-loading.mjs +1 -1
  126. package/fesm2022/sdcorejs-angular-services-loading.mjs.map +1 -1
  127. package/fesm2022/sdcorejs-angular-utilities-models.mjs +3 -2
  128. package/fesm2022/sdcorejs-angular-utilities-models.mjs.map +1 -1
  129. package/forms/datetime/src/datetime.component.d.ts +4 -4
  130. package/forms/datetime/src/material-datetime/index.d.ts +14 -0
  131. package/forms/datetime/src/material-datetime/lib/core/date-adapter.d.ts +10 -0
  132. package/forms/datetime/src/material-datetime/lib/core/date-formats.d.ts +18 -0
  133. package/forms/datetime/src/material-datetime/lib/core/default-options.d.ts +13 -0
  134. package/forms/datetime/src/material-datetime/lib/datetime-picker/datetime-picker-actions.component.d.ts +5 -0
  135. package/forms/datetime/src/material-datetime/lib/datetime-picker/datetime-picker-apply.directive.d.ts +7 -0
  136. package/forms/datetime/src/material-datetime/lib/datetime-picker/datetime-picker-cancel.directive.d.ts +7 -0
  137. package/forms/datetime/src/material-datetime/lib/datetime-picker/datetime-picker-input.directive.d.ts +24 -0
  138. package/forms/datetime/src/material-datetime/lib/datetime-picker/datetime-picker-now.directive.d.ts +7 -0
  139. package/forms/datetime/src/material-datetime/lib/datetime-picker/datetime-picker-toggle.directive.d.ts +8 -0
  140. package/forms/datetime/src/material-datetime/lib/datetime-picker/datetime-picker.component.d.ts +39 -0
  141. package/forms/datetime/src/material-datetime/lib/native/native-date-adapter.d.ts +15 -0
  142. package/forms/datetime/src/material-datetime/lib/native/native-date-formats.d.ts +2 -0
  143. package/forms/datetime/src/material-datetime/lib/native/provide-native.d.ts +3 -0
  144. package/forms/datetime/src/material-datetime/lib/time-spinner/time-spinner.component.d.ts +31 -0
  145. package/modules/icon/index.d.ts +1 -0
  146. package/modules/icon/src/icon.component.d.ts +101 -0
  147. package/modules/icon/src/icon.model.d.ts +59 -0
  148. package/modules/icon/src/icon.provider.d.ts +33 -0
  149. package/modules/icon/src/index.d.ts +3 -0
  150. package/modules/index.d.ts +1 -0
  151. package/package.json +10 -5
  152. package/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.d.ts +17 -0
  153. package/services/confirm/src/lib/confirm.service.d.ts +32 -1
  154. package/services/excel/src/lib/spreadsheet-formula-injection.util.d.ts +5 -0
  155. package/utilities/models/src/icon.model.d.ts +4 -2
  156. package/forms/datetime/src/popup/sd-datetime-picker.component.d.ts +0 -37
  157. package/forms/datetime/src/popup/sd-time-spinner.component.d.ts +0 -41
@@ -1,101 +1,22 @@
1
1
  @use '@angular/material' as mat;
2
- @use './default.scss' as default;
3
- @use 'sass:map';
4
2
 
5
- // --------------------------------------------------
6
- // Palette M2 — generated từ hex color
7
- // --------------------------------------------------
8
- $custom-primary-palette: mat.m2-define-palette(
9
- (
10
- 50: #f0f1f5,
11
- 100: #d7dcea,
12
- 200: #abbce3,
13
- 300: #6e90e3,
14
- 400: #346aea,
15
- 500: #2a66f4,
16
- 600: #0645db,
17
- 700: #0131a3,
18
- 800: #00216d,
19
- 900: #001546,
20
- contrast: (
21
- 400: white,
22
- 500: white,
23
- 600: white,
24
- 700: white,
25
- 800: white,
26
- 900: white,
27
- ),
28
- )
29
- );
30
-
31
- $custom-accent-palette: mat.m2-define-palette(
32
- (
33
- 50: #f1f3f1,
34
- 100: #dce5dd,
35
- 200: #bbd3bc,
36
- 300: #8fc291,
37
- 400: #67b76a,
38
- 500: #4caf50,
39
- 600: #3a8c3d,
40
- 700: #29692c,
41
- 800: #1c471e,
42
- 900: #132f14,
43
- contrast: (
44
- 700: white,
45
- 800: white,
46
- 900: white,
47
- ),
48
- )
49
- );
50
-
51
- $custom-warn-palette: mat.m2-define-palette(
52
- (
53
- 50: #f5f0f0,
54
- 100: #ead9d6,
55
- 200: #e4b0aa,
56
- 300: #e6786b,
57
- 400: #ee4430,
58
- 500: #f82c13,
59
- 600: #d11801,
60
- 700: #9a1100,
61
- 800: #680b00,
62
- 900: #440700,
63
- contrast: (
64
- 600: white,
65
- 700: white,
66
- 800: white,
67
- 900: white,
68
- ),
69
- )
70
- );
71
-
72
- // --------------------------------------------------
73
- // Theme
74
- // --------------------------------------------------
75
- $custom-theme: mat.m2-define-light-theme(
76
- (
77
- color: (
78
- primary: $custom-primary-palette,
79
- accent: $custom-accent-palette,
80
- warn: $custom-warn-palette,
81
- ),
82
- density: -3,
83
- )
84
- );
85
-
86
- @include mat.all-component-themes($custom-theme);
87
-
88
- // Fix paginator density riêng về 0 để không bị lệch
89
3
  html {
4
+ color-scheme: light;
5
+
90
6
  @include mat.theme(
91
7
  (
92
8
  color: (
93
9
  theme-type: light,
94
10
  primary: mat.$azure-palette,
95
- tertiary: mat.$blue-palette,
11
+ tertiary: mat.$green-palette,
96
12
  ),
97
13
  typography: Roboto,
98
14
  density: 0,
99
15
  )
100
16
  );
101
17
  }
18
+
19
+ body {
20
+ background: var(--mat-sys-surface);
21
+ color: var(--mat-sys-on-surface);
22
+ }
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter } from '@angular/core';
2
+ import { type SdIconSet } from '@sdcorejs/angular/modules/icon';
2
3
  import { Color, Size } from '@sdcorejs/utils/models';
3
- import { MaterialIconFontSet } from '@sdcorejs/angular/utilities/models';
4
4
  import * as i0 from "@angular/core";
5
5
  export type SdBadgeType = 'tag' | 'round' | 'icon';
6
6
  export declare class SdBadge {
@@ -13,7 +13,7 @@ export declare class SdBadge {
13
13
  info: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
14
14
  warning: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
15
15
  error: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
16
- fontSet: import("@angular/core").InputSignalWithTransform<MaterialIconFontSet, MaterialIconFontSet | null | undefined>;
16
+ fontSet: import("@angular/core").InputSignalWithTransform<SdIconSet | undefined, SdIconSet | null | undefined>;
17
17
  title: import("@angular/core").InputSignal<string | number | null | undefined>;
18
18
  description: import("@angular/core").InputSignal<string | null | undefined>;
19
19
  tooltip: import("@angular/core").InputSignal<string | null | undefined>;
@@ -32,7 +32,7 @@ export declare class SdBadge {
32
32
  }>;
33
33
  iconColorClasses: import("@angular/core").Signal<{
34
34
  'c-primary': boolean;
35
- 'c-black400': boolean;
35
+ 'c-secondary': boolean;
36
36
  'c-info': boolean;
37
37
  'c-success': boolean;
38
38
  'c-warning': boolean;
@@ -42,11 +42,8 @@ export declare class SdBadge {
42
42
  'c-sm': boolean;
43
43
  'c-md': boolean;
44
44
  'c-lg': boolean;
45
- 'material-icons': boolean;
46
- 'material-icons-outlined': boolean;
47
- 'material-icons-round': boolean;
48
- 'material-icons-sharp': boolean;
49
45
  }>;
46
+ iconCssSize: import("@angular/core").Signal<"18px" | "24px" | "16px">;
50
47
  containerSizeClasses: import("@angular/core").Signal<{
51
48
  'c-badge--sm': boolean;
52
49
  'c-badge--md': boolean;
@@ -62,10 +59,6 @@ export declare class SdBadge {
62
59
  'c-sm': boolean;
63
60
  'c-md': boolean;
64
61
  'c-lg': boolean;
65
- 'material-icons': boolean;
66
- 'material-icons-outlined': boolean;
67
- 'material-icons-round': boolean;
68
- 'material-icons-sharp': boolean;
69
62
  }>;
70
63
  containerCombinedClasses: import("@angular/core").Signal<{
71
64
  'c-badge--sm': boolean;
@@ -80,7 +73,7 @@ export declare class SdBadge {
80
73
  }>;
81
74
  iconCombinedClasses: import("@angular/core").Signal<{
82
75
  'c-primary': boolean;
83
- 'c-black400': boolean;
76
+ 'c-secondary': boolean;
84
77
  'c-info': boolean;
85
78
  'c-success': boolean;
86
79
  'c-warning': boolean;
@@ -88,10 +81,6 @@ export declare class SdBadge {
88
81
  'c-sm': boolean;
89
82
  'c-md': boolean;
90
83
  'c-lg': boolean;
91
- 'material-icons': boolean;
92
- 'material-icons-outlined': boolean;
93
- 'material-icons-round': boolean;
94
- 'material-icons-sharp': boolean;
95
84
  }>;
96
85
  static ɵfac: i0.ɵɵFactoryDeclaration<SdBadge, never>;
97
86
  static ɵcmp: i0.ɵɵComponentDeclaration<SdBadge, "sd-badge", never, { "type": { "alias": "type"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "primary": { "alias": "primary"; "required": false; "isSignal": true; }; "secondary": { "alias": "secondary"; "required": false; "isSignal": true; }; "success": { "alias": "success"; "required": false; "isSignal": true; }; "info": { "alias": "info"; "required": false; "isSignal": true; }; "warning": { "alias": "warning"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "fontSet": { "alias": "fontSet"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "click": "click"; }, never, never, true, never>;
@@ -1,18 +1,19 @@
1
1
  import { OnDestroy, OnInit } from '@angular/core';
2
2
  import { Color } from '@sdcorejs/utils/models';
3
- import { MaterialIconFontSet } from '@sdcorejs/angular/utilities/models';
3
+ import { type SdIconSet } from '@sdcorejs/angular/modules/icon';
4
4
  import * as i0 from "@angular/core";
5
- export type SdButtonType = 'fill' | 'light' | 'outline' | 'link';
5
+ export type SdButtonType = 'fill' | 'light' | 'outline' | 'text';
6
6
  export type SdButtonSize = 'sm' | 'md' | 'lg';
7
7
  export type SdButtonHtmlType = 'button' | 'submit' | 'reset';
8
+ export type SdButtonColor = Color | 'black';
8
9
  export declare class SdButton implements OnInit, OnDestroy {
9
10
  #private;
10
11
  private el;
11
12
  autoIdInput: import("@angular/core").InputSignal<string | null | undefined>;
12
13
  type: import("@angular/core").InputSignalWithTransform<SdButtonType, SdButtonType | null | undefined>;
13
- color: import("@angular/core").InputSignalWithTransform<Color, Color | null | undefined>;
14
+ color: import("@angular/core").InputSignalWithTransform<SdButtonColor, SdButtonColor | null | undefined>;
14
15
  size: import("@angular/core").InputSignalWithTransform<SdButtonSize, SdButtonSize | null | undefined>;
15
- fontSet: import("@angular/core").InputSignalWithTransform<MaterialIconFontSet, MaterialIconFontSet | null | undefined>;
16
+ fontSet: import("@angular/core").InputSignalWithTransform<SdIconSet | undefined, SdIconSet | null | undefined>;
16
17
  title: import("@angular/core").InputSignal<string | null | undefined>;
17
18
  width: import("@angular/core").InputSignal<string | null | undefined>;
18
19
  tooltip: import("@angular/core").InputSignal<string | null | undefined>;
@@ -28,6 +29,7 @@ export declare class SdButton implements OnInit, OnDestroy {
28
29
  'c-sm': boolean;
29
30
  'c-md': boolean;
30
31
  'c-lg': boolean;
32
+ 'c-black': boolean;
31
33
  'c-disabled': boolean;
32
34
  'c-block': boolean;
33
35
  }>;
@@ -17,6 +17,7 @@ export declare class GroupAttribute {
17
17
  pickIcon: (icon: string) => void;
18
18
  pickColor: (color: (typeof COLOR_PRESETS)[number]) => void;
19
19
  symbolForChild: (c: SdFormGenericComponent) => string;
20
+ labelForChild: (c: SdFormGenericComponent) => string;
20
21
  static ɵfac: i0.ɵɵFactoryDeclaration<GroupAttribute, never>;
21
22
  static ɵcmp: i0.ɵɵComponentDeclaration<GroupAttribute, "group-attribute", never, { "group": { "alias": "group"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
22
23
  }
@@ -17,6 +17,7 @@ interface ResizeState {
17
17
  rowId: string;
18
18
  columns: string;
19
19
  }
20
+ type RowInsertionEdge = 'before' | 'after';
20
21
  export declare class SdFormBuilder implements OnInit, OnDestroy {
21
22
  #private;
22
23
  readonly popupViewJSON: import("@angular/core").Signal<SdModal | undefined>;
@@ -51,6 +52,9 @@ export declare class SdFormBuilder implements OnInit, OnDestroy {
51
52
  * Trigger class `.fb-shell--dragging` để ẩn hover/actions/resize toàn diện, không phụ thuộc :has(). */
52
53
  readonly isAnyDragging: import("@angular/core").WritableSignal<boolean>;
53
54
  readonly dragSource: import("@angular/core").WritableSignal<"row" | "palette" | "canvas" | "resize" | undefined>;
55
+ readonly draggedPaletteItem: import("@angular/core").WritableSignal<FormBuilderComponent | undefined>;
56
+ readonly rowInsertionEdge: import("@angular/core").WritableSignal<RowInsertionEdge>;
57
+ readonly inlineDropTargetRow: import("@angular/core").WritableSignal<DragDropRowItem | undefined>;
54
58
  readonly resizeState: import("@angular/core").WritableSignal<ResizeState | undefined>;
55
59
  readonly isResizing: import("@angular/core").Signal<boolean>;
56
60
  expand: boolean;
@@ -60,7 +64,7 @@ export declare class SdFormBuilder implements OnInit, OnDestroy {
60
64
  private lastDragPointer?;
61
65
  /** Handler chung cho mọi cdkDragStarted — set signal global true. */
62
66
  onAnyDragStarted: () => void;
63
- onPaletteDragStarted: () => void;
67
+ onPaletteDragStarted: (item?: FormBuilderComponent) => void;
64
68
  onRowDragStarted: () => void;
65
69
  onAnyDragMoved: (event: CdkDragMove<any>) => void;
66
70
  /** Handler chung cho mọi cdkDragEnded — set signal global false (dùng setTimeout 0
@@ -79,6 +83,7 @@ export declare class SdFormBuilder implements OnInit, OnDestroy {
79
83
  placeholderSymbolFor: (item: FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup | DragDropRowItem | undefined) => string;
80
84
  placeholderTitleFor: (item: FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup | DragDropRowItem | undefined) => string;
81
85
  placeholderMetaFor: (item: FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup | DragDropRowItem | undefined) => string;
86
+ placeholderColumnsFor: (item: FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup | DragDropRowItem | undefined) => number;
82
87
  /** True nếu component có expression điều kiện — drives the "conditional" status chip. */
83
88
  hasConditional: (item: SdFormGenericComponent | SdFormGenericGroup) => boolean;
84
89
  /** Map SdColor preset → 2 CSS var names cho header-bg và header-fg của group card. */
@@ -109,6 +114,9 @@ export declare class SdFormBuilder implements OnInit, OnDestroy {
109
114
  onMouseover: (event: MouseEvent, rowItem: DragDropRowItem) => void;
110
115
  isRowFull: (row: DragDropRowItem) => boolean;
111
116
  isRowInlineDropLocked: (row: DragDropRowItem) => boolean;
117
+ shouldShowRowInsertionPlaceholder: (row: DragDropRowItem, edge?: RowInsertionEdge) => boolean;
118
+ onRowItemsDropEntered: (row: DragDropRowItem) => void;
119
+ onRowItemsDropExited: (row: DragDropRowItem) => void;
112
120
  canEnterRowDropList: (drag: CdkDrag<FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup>, drop: CdkDropList<(SdFormGenericComponent | SdFormGenericGroup)[]>) => boolean;
113
121
  onFocus: (event: FocusEvent) => void;
114
122
  xuLyKeoCheo: (dragItem?: SdFormGenericComponent | SdFormGenericGroup) => void;
@@ -1,7 +1,7 @@
1
1
  import { ElementRef } from '@angular/core';
2
2
  import { Color } from '@sdcorejs/utils/models';
3
- import { MaterialIconFontSet } from '@sdcorejs/angular/utilities/models';
4
3
  import { SdInformActionDirective } from './inform-action.directive';
4
+ import { type SdIconSet } from '@sdcorejs/angular/modules/icon';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class SdInform {
7
7
  #private;
@@ -16,7 +16,7 @@ export declare class SdInform {
16
16
  description: import("@angular/core").InputSignal<string | undefined>;
17
17
  icon: import("@angular/core").InputSignal<string | undefined>;
18
18
  hideIcon: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
19
- fontSet: import("@angular/core").InputSignalWithTransform<MaterialIconFontSet, MaterialIconFontSet | null | undefined>;
19
+ fontSet: import("@angular/core").InputSignalWithTransform<SdIconSet | undefined, SdIconSet | null | undefined>;
20
20
  closable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
21
21
  actionLabel: import("@angular/core").InputSignal<string | undefined>;
22
22
  lineClamp: import("@angular/core").InputSignal<number | undefined>;
@@ -38,12 +38,6 @@ export declare class SdInform {
38
38
  'c-error': boolean;
39
39
  }>;
40
40
  effectiveIcon: import("@angular/core").Signal<string | null>;
41
- fontSetClasses: import("@angular/core").Signal<{
42
- 'material-icons': boolean;
43
- 'material-icons-outlined': boolean;
44
- 'material-icons-round': boolean;
45
- 'material-icons-sharp': boolean;
46
- }>;
47
41
  hasActionSlot: import("@angular/core").Signal<boolean>;
48
42
  clampLines: import("@angular/core").Signal<number | null>;
49
43
  showToggle: import("@angular/core").Signal<boolean>;
@@ -26,5 +26,5 @@ export declare class SdModal {
26
26
  open: () => void;
27
27
  close: () => void;
28
28
  static ɵfac: i0.ɵɵFactoryDeclaration<SdModal, never>;
29
- static ɵcmp: i0.ɵɵComponentDeclaration<SdModal, "sd-modal", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "view": { "alias": "view"; "required": false; "isSignal": true; }; "modalClass": { "alias": "modalClass"; "required": false; "isSignal": true; }; "lazyLoadContent": { "alias": "lazyLoadContent"; "required": false; "isSignal": true; }; "hideClose": { "alias": "hideClose"; "required": false; "isSignal": true; }; "disableBackdropClose": { "alias": "disableBackdropClose"; "required": false; "isSignal": true; }; }, { "sdClosed": "sdClosed"; }, never, ["[sdHeaderLeft]", "[sdHeaderRight]", "[sdHeader]", "*", "[sdFooterLeft]", "[sdFooterRight]", "[sdFooter]"], true, never>;
29
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdModal, "sd-modal", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "view": { "alias": "view"; "required": false; "isSignal": true; }; "modalClass": { "alias": "modalClass"; "required": false; "isSignal": true; }; "lazyLoadContent": { "alias": "lazyLoadContent"; "required": false; "isSignal": true; }; "hideClose": { "alias": "hideClose"; "required": false; "isSignal": true; }; "disableBackdropClose": { "alias": "disableBackdropClose"; "required": false; "isSignal": true; }; }, { "sdClosed": "sdClosed"; }, never, ["[sdHeaderLeft]", "[sdHeaderRight]", "*", "[sdFooterLeft]", "[sdFooterRight]"], true, never>;
30
30
  }
@@ -25,5 +25,5 @@ export declare class SdModalResizable {
25
25
  onFocus: () => void;
26
26
  onBlur: () => void;
27
27
  static ɵfac: i0.ɵɵFactoryDeclaration<SdModalResizable, never>;
28
- static ɵcmp: i0.ɵɵComponentDeclaration<SdModalResizable, "sd-modal-resizable", never, { "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; }, { "editingChanged": "editingChanged"; }, never, ["[sdTitle]", "[sdBody]", "[sdFooter]"], true, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdModalResizable, "sd-modal-resizable", never, { "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; }, { "editingChanged": "editingChanged"; }, never, ["[sdTitle]", "[sdBody]", "[sdFooterLeft]", "[sdFooterRight]"], true, never>;
29
29
  }
@@ -132,6 +132,7 @@ export declare class SdQueryBar {
132
132
  /** Swap the field of an existing chip — reset operator + value to the new field's defaults. */
133
133
  changeFilterField(index: number, field: SdQueryField): void;
134
134
  updateFilter(index: number, patch: Partial<Filter>): void;
135
+ updateFilterData(index: number, data: unknown): void;
135
136
  removeFilter(index: number): void;
136
137
  clearAll(): void;
137
138
  setLogic(value: SdQueryLogic): void;
@@ -37,11 +37,11 @@ export declare class SdQueryBuilder {
37
37
  readonly resolvedAutoId: import("@angular/core").Signal<string | undefined>;
38
38
  readonly fieldByKey: import("@angular/core").Signal<Record<string, SdQueryBuilderField>>;
39
39
  /** Stable option list for the date-mode select. */
40
- readonly dateModes: readonly import("@sdcorejs/angular/components/query-builder").QbDateModeOption[];
40
+ readonly dateModes: import("@sdcorejs/angular/components/query-builder").QbDateModeOption[];
41
41
  /** Stable option list for the literal-vs-field operand select. */
42
- readonly valueSourceOptions: readonly import("@sdcorejs/angular/components/query-builder").QbValueSourceOption[];
42
+ readonly valueSourceOptions: import("@sdcorejs/angular/components/query-builder").QbValueSourceOption[];
43
43
  /** Stable combined unit×direction option list for the relative select. */
44
- readonly relativeUnitOptions: readonly {
44
+ readonly relativeUnitOptions: {
45
45
  value: string;
46
46
  display: string;
47
47
  }[];
@@ -81,7 +81,7 @@ export declare class SdQueryBuilder {
81
81
  setBetweenFrom(rule: QbRule, raw: any): void;
82
82
  /** Set the upper bound of a BETWEEN rule's `{ from, to }` value. */
83
83
  setBetweenTo(rule: QbRule, raw: any): void;
84
- setValueSource(rule: QbRule, source: QbValueSource): void;
84
+ setValueSource(rule: QbRule, source: unknown): void;
85
85
  setCompareField(rule: QbRule, key: any): void;
86
86
  /** The field metadata for a rule's current `field` key (or undefined if unset). */
87
87
  fieldOf(rule: QbRule): SdQueryBuilderField | undefined;
@@ -103,7 +103,7 @@ export declare class SdQueryBuilder {
103
103
  /** Current date-value mode of a rule, derived from its value (no separate state). */
104
104
  dateMode(rule: QbRule): QbDateMode;
105
105
  /** Switch a date/datetime rule's value mode, reseeding the value for the new mode. */
106
- setDateMode(rule: QbRule, mode: QbDateMode): void;
106
+ setDateMode(rule: QbRule, mode: unknown): void;
107
107
  /** Read the offset amount of a relative rule (default 1). */
108
108
  relativeAmount(rule: QbRule): number;
109
109
  /** Set the offset amount (clamped to an integer >= 1). */
@@ -111,7 +111,7 @@ export declare class SdQueryBuilder {
111
111
  /** Read the `'unit:direction'` token of a relative rule (default `'day:previous'`). */
112
112
  relativeUnitDirValue(rule: QbRule): string;
113
113
  /** Set the offset unit + direction from a `'unit:direction'` token. */
114
- setRelativeUnitDir(rule: QbRule, token: string): void;
114
+ setRelativeUnitDir(rule: QbRule, token: unknown): void;
115
115
  /** Build a `data-autoid` for an inner control under this builder's `autoId` prefix. */
116
116
  autoIdFor(suffix: string): string;
117
117
  static ɵfac: i0.ɵɵFactoryDeclaration<SdQueryBuilder, never>;
@@ -147,7 +147,7 @@ export interface QbDateModeOption {
147
147
  icon: string;
148
148
  }
149
149
  /** Stable option list for the date-mode select (module ref — never reallocated). */
150
- export declare const QB_DATE_MODES: readonly QbDateModeOption[];
150
+ export declare const QB_DATE_MODES: QbDateModeOption[];
151
151
  /** One value-source option for field-to-field comparison UI. */
152
152
  export interface QbValueSourceOption {
153
153
  value: QbValueSource;
@@ -156,9 +156,9 @@ export interface QbValueSourceOption {
156
156
  icon: string;
157
157
  }
158
158
  /** Stable option list for choosing between a literal value and another field. */
159
- export declare const QB_VALUE_SOURCE_OPTIONS: readonly QbValueSourceOption[];
159
+ export declare const QB_VALUE_SOURCE_OPTIONS: QbValueSourceOption[];
160
160
  /** Stable combined direction×unit option list (token `'unit:direction'`). */
161
- export declare const QB_RELATIVE_UNIT_OPTIONS: readonly {
161
+ export declare const QB_RELATIVE_UNIT_OPTIONS: {
162
162
  value: string;
163
163
  display: string;
164
164
  }[];
@@ -8,13 +8,9 @@ export declare class SdSection {
8
8
  iconColor: import("@angular/core").InputSignal<Color>;
9
9
  collapsed: import("@angular/core").ModelSignal<boolean>;
10
10
  collapsible: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
11
- /** @deprecated Use `collapsible` instead. */
12
- collapsable: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
13
- readonly isCollapsible: import("@angular/core").Signal<boolean>;
14
11
  hideHeader: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
15
- noPaddingBody: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
16
12
  constructor();
17
13
  toggleCollapse: () => void;
18
14
  static ɵfac: i0.ɵɵFactoryDeclaration<SdSection, never>;
19
- static ɵcmp: i0.ɵɵComponentDeclaration<SdSection, "sd-section", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subTitle": { "alias": "subTitle"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconColor": { "alias": "iconColor"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "collapsable": { "alias": "collapsable"; "required": false; "isSignal": true; }; "hideHeader": { "alias": "hideHeader"; "required": false; "isSignal": true; }; "noPaddingBody": { "alias": "noPaddingBody"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; }, never, ["[sdHeaderLeft]", "[sdHeaderRight]", "*"], true, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdSection, "sd-section", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "subTitle": { "alias": "subTitle"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "iconColor": { "alias": "iconColor"; "required": false; "isSignal": true; }; "collapsed": { "alias": "collapsed"; "required": false; "isSignal": true; }; "collapsible": { "alias": "collapsible"; "required": false; "isSignal": true; }; "hideHeader": { "alias": "hideHeader"; "required": false; "isSignal": true; }; }, { "collapsed": "collapsedChange"; }, never, ["[sdHeaderLeft]", "[sdHeaderRight]", "*", "[sdFooterLeft]", "[sdFooterRight]"], true, never>;
20
16
  }
@@ -25,5 +25,5 @@ export declare class SdSideDrawer {
25
25
  stopLoading: () => void;
26
26
  preventScroll: (event: Event) => void;
27
27
  static ɵfac: i0.ɵɵFactoryDeclaration<SdSideDrawer, never>;
28
- static ɵcmp: i0.ɵɵComponentDeclaration<SdSideDrawer, "sd-side-drawer", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "hideClose": { "alias": "hideClose"; "required": false; "isSignal": true; }; "disableBackdropClose": { "alias": "disableBackdropClose"; "required": false; "isSignal": true; }; "drawerClass": { "alias": "drawerClass"; "required": false; "isSignal": true; }; "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; }, { "sdClosed": "sdClosed"; }, never, ["[sdHeaderLeft]", "[sdHeaderRight]", "*", "[sdFooter]"], true, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdSideDrawer, "sd-side-drawer", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "hideClose": { "alias": "hideClose"; "required": false; "isSignal": true; }; "disableBackdropClose": { "alias": "disableBackdropClose"; "required": false; "isSignal": true; }; "drawerClass": { "alias": "drawerClass"; "required": false; "isSignal": true; }; "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; }, { "sdClosed": "sdClosed"; }, never, ["[sdHeaderLeft]", "[sdHeaderRight]", "*", "[sdFooterLeft]", "[sdFooterRight]"], true, never>;
29
29
  }
@@ -2,7 +2,6 @@ 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
- readonly defaultIconFontSet: import("@sdcorejs/angular/utilities").MaterialIconFontSet;
6
5
  readonly autoIdInput: import("@angular/core").InputSignal<string | null | undefined>;
7
6
  readonly item: import("@angular/core").InputSignal<SdTableItem<any>>;
8
7
  readonly itemIndex: import("@angular/core").InputSignal<number>;
@@ -1,4 +1,4 @@
1
- import { MaterialIconFontSet } from '@sdcorejs/angular/utilities/models';
1
+ import { type SdIconSet } from '@sdcorejs/angular/modules/icon';
2
2
  import { Color } from '@sdcorejs/utils/models';
3
3
  export interface SdTableCommandOption<T = any> {
4
4
  align?: 'left' | 'right';
@@ -8,7 +8,7 @@ export type SdTableCommand<T = any> = SdTableCommandNormal<T> | SdTableCommandCh
8
8
  export interface SdTableCommandNormal<T = any> {
9
9
  color?: Color;
10
10
  icon?: string | ((rowData: T) => string);
11
- fontSet?: MaterialIconFontSet;
11
+ fontSet?: SdIconSet;
12
12
  title?: string | ((rowData: T) => string);
13
13
  disabled?: boolean | ((rowData: T) => boolean);
14
14
  hidden?: boolean | ((rowData: T) => boolean | Promise<boolean>);
@@ -17,7 +17,7 @@ export interface SdTableCommandNormal<T = any> {
17
17
  }
18
18
  export interface SdTableCommandChildren<T = any> {
19
19
  icon?: string | ((rowData: T) => string);
20
- fontSet?: MaterialIconFontSet;
20
+ fontSet?: SdIconSet;
21
21
  title?: string | ((rowData: T) => string);
22
22
  disabled?: boolean | ((rowData: T) => boolean);
23
23
  hidden?: boolean | ((rowData: T) => boolean | Promise<boolean>);
@@ -42,13 +42,13 @@ export type SdTableAction<T = any> = SdTableActionNormal<T> | SdTableActionChild
42
42
  export interface SdTableActionNormal<T = any> {
43
43
  /**
44
44
  * Tên icon hiển thị trên action button.
45
- * Giá trị này được render qua `mat-icon`, vì vậy nên dùng đúng tên glyph của Material Icons.
45
+ * Giá trị này được render qua `sd-icon`, vì vậy nên dùng đúng tên glyph của configured icon set.
46
46
  * Tra cứu icon tại: https://fonts.google.com/icons
47
47
  */
48
48
  icon?: string;
49
49
  /**
50
- * Font set của Material icon.
51
- * Kiểu thực tế lấy từ `SdButton['fontSet']` và chỉ hỗ trợ các giá trị thuộc `MaterialIconFontSet`,
50
+ * Font set của icon.
51
+ * Kiểu thực tế lấy từ `SdButton['fontSet']` và chỉ hỗ trợ các giá trị thuộc `SdIconSet`,
52
52
  * ví dụ: `material-icons`, `material-icons-outlined`, `material-icons-round`,
53
53
  * `material-icons-sharp`.
54
54
  * Nếu không truyền, `SdButton` sẽ dùng font set mặc định của nó.
@@ -79,11 +79,11 @@ export interface SdTableActionNormal<T = any> {
79
79
  interface SdTableActionChildren<T = any> {
80
80
  /**
81
81
  * Tên icon của action cha (group action).
82
- * Giá trị nên là tên glyph Material Icons: https://fonts.google.com/icons
82
+ * Giá trị nên là tên glyph configured icon set: https://fonts.google.com/icons
83
83
  */
84
84
  icon?: string;
85
85
  /**
86
- * Font set của Material icon cho action cha.
86
+ * Font set của icon cho action cha.
87
87
  * Dùng cùng kiểu dữ liệu với `SdButton['fontSet']`.
88
88
  */
89
89
  fontSet?: SdUnwrapSignal<SdButton['fontSet']>;
@@ -48,8 +48,6 @@ export interface SdTableOptionFilter<T = any> {
48
48
  manualFilter?: boolean;
49
49
  /** Có thể thu gọn bộ lọc hay không */
50
50
  collapsible?: boolean;
51
- /** @deprecated Use `collapsible` instead. */
52
- collapsable?: boolean;
53
51
  /** Ẩ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 */
54
52
  hideExternalFilterToolbar?: boolean;
55
53
  /** Hàm xử lý khi trigger clear filter từ external filter */
@@ -1,6 +1,7 @@
1
1
  import { Signal, TemplateRef } from '@angular/core';
2
2
  import { SdButton } from '@sdcorejs/angular/components/button';
3
- import { MaterialIconFontSet, SdUnwrapSignal } from '@sdcorejs/angular/utilities/models';
3
+ import { type SdIconSet } from '@sdcorejs/angular/modules/icon';
4
+ import { SdUnwrapSignal } from '@sdcorejs/angular/utilities/models';
4
5
  import { Color } from '@sdcorejs/utils/models';
5
6
  export type SdTreeDataSource<TItem = any> = TItem[] | Signal<TItem[]> | (() => TItem[] | Promise<TItem[]>);
6
7
  export type SdTreeLoadType = 'static' | 'lazy';
@@ -58,7 +59,7 @@ export interface SdTreeCommand<T = any> {
58
59
  title: string | ((item: T) => string);
59
60
  icon?: string | ((item: T) => string | undefined | null);
60
61
  color?: Color;
61
- fontSet?: MaterialIconFontSet;
62
+ fontSet?: SdIconSet;
62
63
  disabled?: boolean | ((item: T) => boolean);
63
64
  hidden?: boolean | ((item: T) => boolean);
64
65
  click: (item: T) => void;