@sdcorejs/angular 21.1.6 → 21.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/README.md +10 -0
  2. package/assets/scss/core/menu.scss +18 -0
  3. package/assets/scss/core/utilities/_misc.scss +15 -0
  4. package/assets/scss/sd-core.scss +1 -0
  5. package/fesm2022/sdcorejs-angular-components-anchor.mjs +37 -13
  6. package/fesm2022/sdcorejs-angular-components-anchor.mjs.map +1 -1
  7. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs +2 -2
  8. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs.map +1 -1
  9. package/fesm2022/sdcorejs-angular-components-badge.mjs +15 -2
  10. package/fesm2022/sdcorejs-angular-components-badge.mjs.map +1 -1
  11. package/fesm2022/sdcorejs-angular-components-button.mjs +2 -2
  12. package/fesm2022/sdcorejs-angular-components-button.mjs.map +1 -1
  13. package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs +1 -1
  14. package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs.map +1 -1
  15. package/fesm2022/sdcorejs-angular-components-code-editor.mjs +3 -3
  16. package/fesm2022/sdcorejs-angular-components-code-editor.mjs.map +1 -1
  17. package/fesm2022/sdcorejs-angular-components-data-state.mjs +3 -3
  18. package/fesm2022/sdcorejs-angular-components-data-state.mjs.map +1 -1
  19. package/fesm2022/sdcorejs-angular-components-editor.mjs +2 -2
  20. package/fesm2022/sdcorejs-angular-components-editor.mjs.map +1 -1
  21. package/fesm2022/sdcorejs-angular-components-form-generic.mjs +324 -192
  22. package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
  23. package/fesm2022/sdcorejs-angular-components-history.mjs +4 -4
  24. package/fesm2022/sdcorejs-angular-components-history.mjs.map +1 -1
  25. package/fesm2022/sdcorejs-angular-components-import-excel.mjs +13 -5
  26. package/fesm2022/sdcorejs-angular-components-import-excel.mjs.map +1 -1
  27. package/fesm2022/sdcorejs-angular-components-inform.mjs +3 -3
  28. package/fesm2022/sdcorejs-angular-components-inform.mjs.map +1 -1
  29. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs +164 -8
  30. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs.map +1 -1
  31. package/fesm2022/sdcorejs-angular-components-modal.mjs +30 -18
  32. package/fesm2022/sdcorejs-angular-components-modal.mjs.map +1 -1
  33. package/fesm2022/sdcorejs-angular-components-org-chart.mjs +60 -13
  34. package/fesm2022/sdcorejs-angular-components-org-chart.mjs.map +1 -1
  35. package/fesm2022/sdcorejs-angular-components-preview.mjs +27 -17
  36. package/fesm2022/sdcorejs-angular-components-preview.mjs.map +1 -1
  37. package/fesm2022/sdcorejs-angular-components-query-bar.mjs +192 -30
  38. package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
  39. package/fesm2022/sdcorejs-angular-components-query-builder.mjs +187 -127
  40. package/fesm2022/sdcorejs-angular-components-query-builder.mjs.map +1 -1
  41. package/fesm2022/sdcorejs-angular-components-section.mjs +16 -2
  42. package/fesm2022/sdcorejs-angular-components-section.mjs.map +1 -1
  43. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs +83 -24
  44. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs.map +1 -1
  45. package/fesm2022/sdcorejs-angular-components-splitter.mjs +57 -21
  46. package/fesm2022/sdcorejs-angular-components-splitter.mjs.map +1 -1
  47. package/fesm2022/sdcorejs-angular-components-stepper.mjs +2 -2
  48. package/fesm2022/sdcorejs-angular-components-stepper.mjs.map +1 -1
  49. package/fesm2022/sdcorejs-angular-components-tab-router.mjs +68 -20
  50. package/fesm2022/sdcorejs-angular-components-tab-router.mjs.map +1 -1
  51. package/fesm2022/sdcorejs-angular-components-tab.mjs +3 -2
  52. package/fesm2022/sdcorejs-angular-components-tab.mjs.map +1 -1
  53. package/fesm2022/sdcorejs-angular-components-table.mjs +542 -255
  54. package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
  55. package/fesm2022/sdcorejs-angular-components-tree.mjs +80 -17
  56. package/fesm2022/sdcorejs-angular-components-tree.mjs.map +1 -1
  57. package/fesm2022/sdcorejs-angular-components-upload-file.mjs +48 -13
  58. package/fesm2022/sdcorejs-angular-components-upload-file.mjs.map +1 -1
  59. package/fesm2022/sdcorejs-angular-components.mjs +6 -1
  60. package/fesm2022/sdcorejs-angular-components.mjs.map +1 -1
  61. package/fesm2022/sdcorejs-angular-configurations.mjs.map +1 -1
  62. package/fesm2022/sdcorejs-angular-directives.mjs +45 -8
  63. package/fesm2022/sdcorejs-angular-directives.mjs.map +1 -1
  64. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +40 -29
  65. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
  66. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs +5 -5
  67. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs.map +1 -1
  68. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs +67 -50
  69. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs.map +1 -1
  70. package/fesm2022/sdcorejs-angular-forms-chip.mjs +57 -43
  71. package/fesm2022/sdcorejs-angular-forms-chip.mjs.map +1 -1
  72. package/fesm2022/sdcorejs-angular-forms-date-range.mjs +232 -61
  73. package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
  74. package/fesm2022/sdcorejs-angular-forms-date.mjs +96 -24
  75. package/fesm2022/sdcorejs-angular-forms-date.mjs.map +1 -1
  76. package/fesm2022/sdcorejs-angular-forms-datetime.mjs +131 -27
  77. package/fesm2022/sdcorejs-angular-forms-datetime.mjs.map +1 -1
  78. package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs +40 -16
  79. package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs.map +1 -1
  80. package/fesm2022/sdcorejs-angular-forms-input-color.mjs +16 -5
  81. package/fesm2022/sdcorejs-angular-forms-input-color.mjs.map +1 -1
  82. package/fesm2022/sdcorejs-angular-forms-input-number.mjs +24 -9
  83. package/fesm2022/sdcorejs-angular-forms-input-number.mjs.map +1 -1
  84. package/fesm2022/sdcorejs-angular-forms-input.mjs +58 -10
  85. package/fesm2022/sdcorejs-angular-forms-input.mjs.map +1 -1
  86. package/fesm2022/sdcorejs-angular-forms-models.mjs +227 -6
  87. package/fesm2022/sdcorejs-angular-forms-models.mjs.map +1 -1
  88. package/fesm2022/sdcorejs-angular-forms-radio.mjs +4 -4
  89. package/fesm2022/sdcorejs-angular-forms-radio.mjs.map +1 -1
  90. package/fesm2022/sdcorejs-angular-forms-select.mjs +136 -38
  91. package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
  92. package/fesm2022/sdcorejs-angular-forms-switch.mjs +18 -3
  93. package/fesm2022/sdcorejs-angular-forms-switch.mjs.map +1 -1
  94. package/fesm2022/sdcorejs-angular-forms-textarea.mjs +51 -62
  95. package/fesm2022/sdcorejs-angular-forms-textarea.mjs.map +1 -1
  96. package/fesm2022/sdcorejs-angular-forms-time-range.mjs +57 -12
  97. package/fesm2022/sdcorejs-angular-forms-time-range.mjs.map +1 -1
  98. package/fesm2022/sdcorejs-angular-forms-time.mjs +16 -5
  99. package/fesm2022/sdcorejs-angular-forms-time.mjs.map +1 -1
  100. package/fesm2022/sdcorejs-angular-forms-tree-select.mjs +100 -9
  101. package/fesm2022/sdcorejs-angular-forms-tree-select.mjs.map +1 -1
  102. package/fesm2022/sdcorejs-angular-forms.mjs +91 -46
  103. package/fesm2022/sdcorejs-angular-forms.mjs.map +1 -1
  104. package/fesm2022/sdcorejs-angular-handlers.mjs +18 -3
  105. package/fesm2022/sdcorejs-angular-handlers.mjs.map +1 -1
  106. package/fesm2022/sdcorejs-angular-i18n.mjs +490 -68
  107. package/fesm2022/sdcorejs-angular-i18n.mjs.map +1 -1
  108. package/fesm2022/sdcorejs-angular-interceptors.mjs +87 -29
  109. package/fesm2022/sdcorejs-angular-interceptors.mjs.map +1 -1
  110. package/fesm2022/sdcorejs-angular-modules-auth.mjs +25 -15
  111. package/fesm2022/sdcorejs-angular-modules-auth.mjs.map +1 -1
  112. package/fesm2022/sdcorejs-angular-modules-icon.mjs +2 -2
  113. package/fesm2022/sdcorejs-angular-modules-icon.mjs.map +1 -1
  114. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs +32 -3
  115. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs.map +1 -1
  116. package/fesm2022/sdcorejs-angular-modules-layout.mjs +332 -111
  117. package/fesm2022/sdcorejs-angular-modules-layout.mjs.map +1 -1
  118. package/fesm2022/sdcorejs-angular-modules-permission.mjs +177 -40
  119. package/fesm2022/sdcorejs-angular-modules-permission.mjs.map +1 -1
  120. package/fesm2022/sdcorejs-angular-pipes.mjs +62 -28
  121. package/fesm2022/sdcorejs-angular-pipes.mjs.map +1 -1
  122. package/fesm2022/sdcorejs-angular-services-api.mjs +123 -13
  123. package/fesm2022/sdcorejs-angular-services-api.mjs.map +1 -1
  124. package/fesm2022/sdcorejs-angular-services-cache.mjs +53 -3
  125. package/fesm2022/sdcorejs-angular-services-cache.mjs.map +1 -1
  126. package/fesm2022/sdcorejs-angular-services-confirm.mjs +25 -73
  127. package/fesm2022/sdcorejs-angular-services-confirm.mjs.map +1 -1
  128. package/fesm2022/sdcorejs-angular-services-excel.mjs +12 -10
  129. package/fesm2022/sdcorejs-angular-services-excel.mjs.map +1 -1
  130. package/fesm2022/sdcorejs-angular-services-loading.mjs +75 -84
  131. package/fesm2022/sdcorejs-angular-services-loading.mjs.map +1 -1
  132. package/fesm2022/sdcorejs-angular-services-notify.mjs +46 -5
  133. package/fesm2022/sdcorejs-angular-services-notify.mjs.map +1 -1
  134. package/fesm2022/sdcorejs-angular-services-storage.mjs +4 -0
  135. package/fesm2022/sdcorejs-angular-services-storage.mjs.map +1 -1
  136. package/fesm2022/sdcorejs-angular-services.mjs +0 -1
  137. package/fesm2022/sdcorejs-angular-services.mjs.map +1 -1
  138. package/fesm2022/sdcorejs-angular-utilities-extensions.mjs +225 -80
  139. package/fesm2022/sdcorejs-angular-utilities-extensions.mjs.map +1 -1
  140. package/fesm2022/sdcorejs-angular-utilities-models.mjs +1 -63
  141. package/fesm2022/sdcorejs-angular-utilities-models.mjs.map +1 -1
  142. package/fesm2022/sdcorejs-angular.mjs +17 -10
  143. package/fesm2022/sdcorejs-angular.mjs.map +1 -1
  144. package/package.json +32 -25
  145. package/types/sdcorejs-angular-components-anchor.d.ts +3 -1
  146. package/types/sdcorejs-angular-components-badge.d.ts +1 -0
  147. package/types/sdcorejs-angular-components-ckeditor-styles.d.ts +1 -1
  148. package/types/sdcorejs-angular-components-form-generic.d.ts +44 -33
  149. package/types/sdcorejs-angular-components-import-excel.d.ts +1 -0
  150. package/types/sdcorejs-angular-components-mini-editor.d.ts +1 -1
  151. package/types/sdcorejs-angular-components-modal-resizable.d.ts +92 -0
  152. package/types/sdcorejs-angular-components-modal.d.ts +3 -2
  153. package/types/sdcorejs-angular-components-org-chart.d.ts +6 -0
  154. package/types/sdcorejs-angular-components-preview.d.ts +1 -0
  155. package/types/sdcorejs-angular-components-query-bar.d.ts +55 -17
  156. package/types/sdcorejs-angular-components-query-builder.d.ts +150 -98
  157. package/types/sdcorejs-angular-components-section.d.ts +3 -0
  158. package/types/sdcorejs-angular-components-tab-router.d.ts +19 -19
  159. package/types/sdcorejs-angular-components-table.d.ts +251 -109
  160. package/types/sdcorejs-angular-components-tree.d.ts +48 -30
  161. package/types/sdcorejs-angular-components-upload-file.d.ts +6 -3
  162. package/types/sdcorejs-angular-components.d.ts +6 -1
  163. package/types/sdcorejs-angular-configurations.d.ts +1 -2
  164. package/types/sdcorejs-angular-forms-autocomplete.d.ts +5 -2
  165. package/types/sdcorejs-angular-forms-chip-calendar.d.ts +10 -0
  166. package/types/sdcorejs-angular-forms-date-range.d.ts +14 -2
  167. package/types/sdcorejs-angular-forms-date.d.ts +13 -2
  168. package/types/sdcorejs-angular-forms-datetime.d.ts +13 -2
  169. package/types/sdcorejs-angular-forms-entity-picker.d.ts +9 -3
  170. package/types/sdcorejs-angular-forms-input-color.d.ts +4 -0
  171. package/types/sdcorejs-angular-forms-input-number.d.ts +3 -0
  172. package/types/sdcorejs-angular-forms-input.d.ts +3 -0
  173. package/types/sdcorejs-angular-forms-models.d.ts +119 -4
  174. package/types/sdcorejs-angular-forms-select.d.ts +27 -4
  175. package/types/sdcorejs-angular-forms-switch.d.ts +7 -1
  176. package/types/sdcorejs-angular-forms-textarea.d.ts +5 -3
  177. package/types/sdcorejs-angular-forms-time-range.d.ts +22 -1
  178. package/types/sdcorejs-angular-forms-tree-select.d.ts +36 -5
  179. package/types/sdcorejs-angular-forms.d.ts +22 -13
  180. package/types/sdcorejs-angular-i18n.d.ts +95 -16
  181. package/types/sdcorejs-angular-interceptors.d.ts +13 -3
  182. package/types/sdcorejs-angular-modules-auth.d.ts +1 -1
  183. package/types/sdcorejs-angular-modules-keycloak.d.ts +1 -0
  184. package/types/sdcorejs-angular-modules-layout.d.ts +94 -28
  185. package/types/sdcorejs-angular-modules-permission.d.ts +66 -4
  186. package/types/sdcorejs-angular-pipes.d.ts +27 -5
  187. package/types/sdcorejs-angular-services-api.d.ts +21 -1
  188. package/types/sdcorejs-angular-services-cache.d.ts +11 -1
  189. package/types/sdcorejs-angular-services-notify.d.ts +1 -1
  190. package/types/sdcorejs-angular-services.d.ts +0 -1
  191. package/types/sdcorejs-angular-utilities-extensions.d.ts +83 -61
  192. package/types/sdcorejs-angular-utilities-models.d.ts +2 -76
  193. package/types/sdcorejs-angular.d.ts +11 -2
  194. package/fesm2022/sdcorejs-angular-components-base.mjs +0 -23
  195. package/fesm2022/sdcorejs-angular-components-base.mjs.map +0 -1
  196. package/fesm2022/sdcorejs-angular-components-document-builder.mjs +0 -5038
  197. package/fesm2022/sdcorejs-angular-components-document-builder.mjs.map +0 -1
  198. package/fesm2022/sdcorejs-angular-models.mjs +0 -6
  199. package/fesm2022/sdcorejs-angular-models.mjs.map +0 -1
  200. package/fesm2022/sdcorejs-angular-services-docx.mjs +0 -291
  201. package/fesm2022/sdcorejs-angular-services-docx.mjs.map +0 -1
  202. package/fesm2022/sdcorejs-angular-services-license.mjs +0 -97
  203. package/fesm2022/sdcorejs-angular-services-license.mjs.map +0 -1
  204. package/types/sdcorejs-angular-components-base.d.ts +0 -11
  205. package/types/sdcorejs-angular-components-document-builder.d.ts +0 -252
  206. package/types/sdcorejs-angular-models.d.ts +0 -2
  207. package/types/sdcorejs-angular-services-docx.d.ts +0 -27
  208. package/types/sdcorejs-angular-services-license.d.ts +0 -12
@@ -1,71 +1,9 @@
1
- import { EMPTY_STR } from '@sdcorejs/utils/constants';
2
- export { EMPTY_STR, VALIDATION_PATTERNS } from '@sdcorejs/utils/constants';
3
- import { StringUtilities } from '@sdcorejs/utils/fns';
4
- import { resolveMaybeAsync, normalizeAsync } from '@sdcorejs/utils/models';
5
- export { normalizeAsync, resolveMaybeAsync } from '@sdcorejs/utils/models';
6
-
7
1
  const DefaultSdIconSet = 'material-icons-outlined';
8
2
  const DefaultSdMaterialIconSet = 'material-icons-outlined';
9
3
 
10
- // `name` và `errorMessage` chứa i18n KEY (không phải chuỗi đã dịch).
11
- /** @deprecated Use `VALIDATION_PATTERNS` from `@sdcorejs/utils/constants` instead. */
12
- const SdPatternCommons = [
13
- { type: 'EMAIL', name: 'core.validator.email.name', regex: StringUtilities.REGEX_EMAIL, errorMessage: 'core.validator.email.error' },
14
- { type: 'PHONE', name: 'core.validator.phone.name', regex: StringUtilities.REGEX_PHONE, errorMessage: 'core.validator.phone.error' },
15
- {
16
- type: 'PHONE_VN',
17
- name: 'core.validator.phone-vn.name',
18
- regex: StringUtilities.REGEX_VN_PHONE,
19
- errorMessage: 'core.validator.phone-vn.error',
20
- },
21
- { type: 'IDVN', name: 'core.validator.cccd.name', regex: StringUtilities.REGEX_VN_ID, errorMessage: 'core.validator.cccd.error' },
22
- {
23
- type: 'PASSPORT',
24
- name: 'core.validator.passport.name',
25
- regex: StringUtilities.REGEX_PASSPORT,
26
- errorMessage: 'core.validator.passport.error',
27
- },
28
- {
29
- type: 'IDVN_OR_PASSPORT',
30
- name: 'core.validator.id-vn.name',
31
- regex: StringUtilities.REGEX_VN_ID_OR_PASSPORT,
32
- errorMessage: 'core.validator.id-vn.error',
33
- },
34
- { type: 'TIME', name: 'core.validator.time.name', regex: StringUtilities.REGEX_TIME, errorMessage: 'core.validator.time.error' },
35
- ];
36
-
37
- /** @deprecated Use {@link EMPTY_STR} from `@sdcorejs/utils/constants` instead */
38
- const SD_EMPTY_STR = EMPTY_STR;
39
-
40
- /** @deprecated Use {@link resolveMaybeAsync} from `@sdcorejs/utils/models` instead */
41
- const SdResolveMaybeAsync = resolveMaybeAsync;
42
- /** @deprecated Use {@link normalizeAsync} from `@sdcorejs/utils/models` instead */
43
- const SdNormalizeAsync = normalizeAsync;
44
-
45
- // `display` chứa i18n KEY (không phải chuỗi đã dịch).
46
- // Consumer phải gọi i18n.t(display) trước khi render ra UI.
47
- // @deprecated Use `OPERATORS` from `@sdcorejs/utils/constants` instead.
48
- // Note: OPERATORS has translated display labels; SdOperators uses i18n keys.
49
- const SdOperators = [
50
- { value: 'EQUAL', symbol: '=', display: 'core.operator.equal.display' },
51
- { value: 'NOT_EQUAL', symbol: '≠', display: 'core.operator.not-equal.display' },
52
- { value: 'GREATER_THAN', symbol: '>', display: 'core.operator.greater-than.display' },
53
- { value: 'LESS_THAN', symbol: '<', display: 'core.operator.less-than.display' },
54
- { value: 'GREATER_OR_EQUAL', symbol: '≥', display: 'core.operator.greater-or-equal.display' },
55
- { value: 'LESS_OR_EQUAL', symbol: '≤', display: 'core.operator.less-or-equal.display' },
56
- { value: 'CONTAIN', symbol: 'join_inner', display: 'core.operator.contain.display' },
57
- { value: 'NOT_CONTAIN', symbol: 'join', display: 'core.operator.not-contain.display' },
58
- { value: 'START_WITH', symbol: 'line_start_circle', display: 'core.operator.start-with.display' },
59
- { value: 'END_WITH', symbol: 'line_end_circle', display: 'core.operator.end-with.display' },
60
- { value: 'IN', symbol: 'checklist_rtl', display: 'core.operator.in.display' },
61
- { value: 'NOT_IN', symbol: 'event_list', display: 'core.operator.not-in.display' },
62
- { value: 'NULL', symbol: 'motion_photos_off', display: 'core.operator.null.display' },
63
- { value: 'NOT_NULL', symbol: 'adjust', display: 'core.operator.not-null.display' },
64
- ];
65
-
66
4
  /**
67
5
  * Generated bundle index. Do not edit.
68
6
  */
69
7
 
70
- export { DefaultSdIconSet, DefaultSdMaterialIconSet, SD_EMPTY_STR, SdNormalizeAsync, SdOperators, SdPatternCommons, SdResolveMaybeAsync };
8
+ export { DefaultSdIconSet, DefaultSdMaterialIconSet };
71
9
  //# sourceMappingURL=sdcorejs-angular-utilities-models.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"sdcorejs-angular-utilities-models.mjs","sources":["../../../projects/sdcorejs-angular/utilities/models/src/icon.model.ts","../../../projects/sdcorejs-angular/utilities/models/src/pattern.model.ts","../../../projects/sdcorejs-angular/utilities/models/src/empty.model.ts","../../../projects/sdcorejs-angular/utilities/models/src/maybe-async.model.ts","../../../projects/sdcorejs-angular/utilities/models/src/operator.model.ts","../../../projects/sdcorejs-angular/utilities/models/sdcorejs-angular-utilities-models.ts"],"sourcesContent":["export type SdIconSet = 'material-icons' | 'material-icons-outlined' | 'material-icons-round' | 'material-icons-sharp' | 'lucide';\nexport type SdMaterialIconSet = Exclude<SdIconSet, 'lucide'>;\nexport const DefaultSdIconSet: SdIconSet = 'material-icons-outlined';\nexport const DefaultSdMaterialIconSet: SdMaterialIconSet = 'material-icons-outlined';\n","import type { ValidationPatternType, ValidationPattern } from '@sdcorejs/utils/models';\nimport { VALIDATION_PATTERNS } from '@sdcorejs/utils/constants';\nimport { StringUtilities } from '@sdcorejs/utils/fns';\nexport type { ValidationPatternType, ValidationPattern };\nexport { VALIDATION_PATTERNS };\n\n/**\n * @deprecated Use {@link ValidationPatternType} from `@sdcorejs/utils/models` instead.\n * Note: member names changed — PHONE_VN → VN_PHONE, IDVN → VN_ID, IDVN_OR_PASSPORT → VN_ID_OR_PASSPORT.\n */\nexport type SdPatternType = 'EMAIL' | 'PHONE' | 'PHONE_VN' | 'IDVN' | 'PASSPORT' | 'IDVN_OR_PASSPORT' | 'TIME';\n\n/**\n * @deprecated Use {@link ValidationPattern} from `@sdcorejs/utils/models` instead.\n * Note: `regex` field renamed to `pattern` to align with Angular `Validators.pattern()`.\n */\nexport interface SdPatternCommon {\n type: SdPatternType;\n name: string;\n regex: string;\n errorMessage: string;\n}\n\n// `name` và `errorMessage` chứa i18n KEY (không phải chuỗi đã dịch).\n/** @deprecated Use `VALIDATION_PATTERNS` from `@sdcorejs/utils/constants` instead. */\nexport const SdPatternCommons: SdPatternCommon[] = [\n { type: 'EMAIL', name: 'core.validator.email.name', regex: StringUtilities.REGEX_EMAIL, errorMessage: 'core.validator.email.error' },\n { type: 'PHONE', name: 'core.validator.phone.name', regex: StringUtilities.REGEX_PHONE, errorMessage: 'core.validator.phone.error' },\n {\n type: 'PHONE_VN',\n name: 'core.validator.phone-vn.name',\n regex: StringUtilities.REGEX_VN_PHONE,\n errorMessage: 'core.validator.phone-vn.error',\n },\n { type: 'IDVN', name: 'core.validator.cccd.name', regex: StringUtilities.REGEX_VN_ID, errorMessage: 'core.validator.cccd.error' },\n {\n type: 'PASSPORT',\n name: 'core.validator.passport.name',\n regex: StringUtilities.REGEX_PASSPORT,\n errorMessage: 'core.validator.passport.error',\n },\n {\n type: 'IDVN_OR_PASSPORT',\n name: 'core.validator.id-vn.name',\n regex: StringUtilities.REGEX_VN_ID_OR_PASSPORT,\n errorMessage: 'core.validator.id-vn.error',\n },\n { type: 'TIME', name: 'core.validator.time.name', regex: StringUtilities.REGEX_TIME, errorMessage: 'core.validator.time.error' },\n];\n","import { EMPTY_STR } from '@sdcorejs/utils/constants';\nexport { EMPTY_STR };\n\n/** @deprecated Use {@link EMPTY_STR} from `@sdcorejs/utils/constants` instead */\nexport const SD_EMPTY_STR = EMPTY_STR;\n","import type { MaybeAsync } from '@sdcorejs/utils/models';\nimport { resolveMaybeAsync, normalizeAsync } from '@sdcorejs/utils/models';\nexport type { MaybeAsync };\nexport { resolveMaybeAsync, normalizeAsync };\n\n/** @deprecated Use {@link MaybeAsync} from `@sdcorejs/utils/models` instead */\nexport type SdMaybeAsync<T> = MaybeAsync<T>;\n/** @deprecated Use {@link resolveMaybeAsync} from `@sdcorejs/utils/models` instead */\nexport const SdResolveMaybeAsync = resolveMaybeAsync;\n/** @deprecated Use {@link normalizeAsync} from `@sdcorejs/utils/models` instead */\nexport const SdNormalizeAsync = normalizeAsync;\n","import type { Operator, OperatorHasData, OperatorNoData } from '@sdcorejs/utils/models';\nexport type { Operator, OperatorHasData, OperatorNoData };\n\n/** @deprecated Use {@link Operator} from `@sdcorejs/utils/models` instead */\nexport type SdOperator = Operator;\n/** @deprecated Use {@link OperatorHasData} from `@sdcorejs/utils/models` instead */\nexport type SdOperatorHasData = OperatorHasData;\n/** @deprecated Use {@link OperatorNoData} from `@sdcorejs/utils/models` instead */\nexport type SdOperatorNoData = OperatorNoData;\n\n// `display` chứa i18n KEY (không phải chuỗi đã dịch).\n// Consumer phải gọi i18n.t(display) trước khi render ra UI.\n// @deprecated Use `OPERATORS` from `@sdcorejs/utils/constants` instead.\n// Note: OPERATORS has translated display labels; SdOperators uses i18n keys.\nexport const SdOperators: {\n value: Operator;\n symbol?: string;\n display: string;\n}[] = [\n { value: 'EQUAL', symbol: '=', display: 'core.operator.equal.display' },\n { value: 'NOT_EQUAL', symbol: '≠', display: 'core.operator.not-equal.display' },\n { value: 'GREATER_THAN', symbol: '>', display: 'core.operator.greater-than.display' },\n { value: 'LESS_THAN', symbol: '<', display: 'core.operator.less-than.display' },\n { value: 'GREATER_OR_EQUAL', symbol: '≥', display: 'core.operator.greater-or-equal.display' },\n { value: 'LESS_OR_EQUAL', symbol: '≤', display: 'core.operator.less-or-equal.display' },\n { value: 'CONTAIN', symbol: 'join_inner', display: 'core.operator.contain.display' },\n { value: 'NOT_CONTAIN', symbol: 'join', display: 'core.operator.not-contain.display' },\n { value: 'START_WITH', symbol: 'line_start_circle', display: 'core.operator.start-with.display' },\n { value: 'END_WITH', symbol: 'line_end_circle', display: 'core.operator.end-with.display' },\n { value: 'IN', symbol: 'checklist_rtl', display: 'core.operator.in.display' },\n { value: 'NOT_IN', symbol: 'event_list', display: 'core.operator.not-in.display' },\n { value: 'NULL', symbol: 'motion_photos_off', display: 'core.operator.null.display' },\n { value: 'NOT_NULL', symbol: 'adjust', display: 'core.operator.not-null.display' },\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;AAEO,MAAM,gBAAgB,GAAc;AACpC,MAAM,wBAAwB,GAAsB;;ACoB3D;AACA;AACO,MAAM,gBAAgB,GAAsB;AACjD,IAAA,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,eAAe,CAAC,WAAW,EAAE,YAAY,EAAE,4BAA4B,EAAE;AACpI,IAAA,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,2BAA2B,EAAE,KAAK,EAAE,eAAe,CAAC,WAAW,EAAE,YAAY,EAAE,4BAA4B,EAAE;AACpI,IAAA;AACE,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,IAAI,EAAE,8BAA8B;QACpC,KAAK,EAAE,eAAe,CAAC,cAAc;AACrC,QAAA,YAAY,EAAE,+BAA+B;AAC9C,KAAA;AACD,IAAA,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,eAAe,CAAC,WAAW,EAAE,YAAY,EAAE,2BAA2B,EAAE;AACjI,IAAA;AACE,QAAA,IAAI,EAAE,UAAU;AAChB,QAAA,IAAI,EAAE,8BAA8B;QACpC,KAAK,EAAE,eAAe,CAAC,cAAc;AACrC,QAAA,YAAY,EAAE,+BAA+B;AAC9C,KAAA;AACD,IAAA;AACE,QAAA,IAAI,EAAE,kBAAkB;AACxB,QAAA,IAAI,EAAE,2BAA2B;QACjC,KAAK,EAAE,eAAe,CAAC,uBAAuB;AAC9C,QAAA,YAAY,EAAE,4BAA4B;AAC3C,KAAA;AACD,IAAA,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,EAAE,KAAK,EAAE,eAAe,CAAC,UAAU,EAAE,YAAY,EAAE,2BAA2B,EAAE;;;AC5ClI;AACO,MAAM,YAAY,GAAG;;ACG5B;AACO,MAAM,mBAAmB,GAAG;AACnC;AACO,MAAM,gBAAgB,GAAG;;ACAhC;AACA;AACA;AACA;AACO,MAAM,WAAW,GAIlB;IACJ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,6BAA6B,EAAE;IACvE,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,iCAAiC,EAAE;IAC/E,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,oCAAoC,EAAE;IACrF,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,iCAAiC,EAAE;IAC/E,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,wCAAwC,EAAE;IAC7F,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,qCAAqC,EAAE;IACvF,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,+BAA+B,EAAE;IACpF,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,mCAAmC,EAAE;IACtF,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,kCAAkC,EAAE;IACjG,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,gCAAgC,EAAE;IAC3F,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,0BAA0B,EAAE;IAC7E,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,8BAA8B,EAAE;IAClF,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,4BAA4B,EAAE;IACrF,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,gCAAgC,EAAE;;;AChCpF;;AAEG;;;;"}
1
+ {"version":3,"file":"sdcorejs-angular-utilities-models.mjs","sources":["../../../projects/sdcorejs-angular/utilities/models/src/icon.model.ts","../../../projects/sdcorejs-angular/utilities/models/sdcorejs-angular-utilities-models.ts"],"sourcesContent":["export type SdIconSet = 'material-icons' | 'material-icons-outlined' | 'material-icons-round' | 'material-icons-sharp' | 'lucide';\nexport type SdMaterialIconSet = Exclude<SdIconSet, 'lucide'>;\nexport const DefaultSdIconSet: SdIconSet = 'material-icons-outlined';\nexport const DefaultSdMaterialIconSet: SdMaterialIconSet = 'material-icons-outlined';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"AAEO,MAAM,gBAAgB,GAAc;AACpC,MAAM,wBAAwB,GAAsB;;ACH3D;;AAEG;;;;"}
@@ -1,16 +1,23 @@
1
- import '@sdcorejs/angular/configurations';
2
- import '@sdcorejs/angular/utilities';
3
- import '@sdcorejs/angular/pipes';
4
- import '@sdcorejs/angular/directives';
5
- import '@sdcorejs/angular/services';
6
- import '@sdcorejs/angular/interceptors';
7
- import '@sdcorejs/angular/handlers';
8
- import '@sdcorejs/angular/components';
9
- import '@sdcorejs/angular/forms';
10
- import '@sdcorejs/angular/modules';
1
+ export * from '@sdcorejs/angular/configurations';
2
+ export * from '@sdcorejs/angular/i18n';
3
+ export * from '@sdcorejs/angular/utilities';
4
+ export * from '@sdcorejs/angular/pipes';
5
+ export * from '@sdcorejs/angular/directives';
6
+ export * from '@sdcorejs/angular/services';
7
+ export * from '@sdcorejs/angular/interceptors';
8
+ export * from '@sdcorejs/angular/handlers';
9
+ export * from '@sdcorejs/angular/components';
10
+ export * from '@sdcorejs/angular/forms';
11
+ export * from '@sdcorejs/angular/modules';
11
12
 
12
13
  /*
13
14
  * Public API Surface of sd-angular
15
+ *
16
+ * why: these were previously bare `import '...'` statements, which meant the primary
17
+ * entry point re-exported NOTHING — `import { SdButton } from '@sdcorejs/angular'`
18
+ * resolved to nothing for every symbol, and the built FESM bundle was 517 bytes with
19
+ * no `export` statement. Deep imports (`@sdcorejs/angular/components/button`) remain
20
+ * the recommended path for bundle size; this barrel exists so the root import works.
14
21
  */
15
22
 
16
23
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"sdcorejs-angular.mjs","sources":["../../../projects/sdcorejs-angular/src/public-api.ts","../../../projects/sdcorejs-angular/src/sdcorejs-angular.ts"],"sourcesContent":["/*\n * Public API Surface of sd-angular\n */\nimport '@sdcorejs/angular/configurations';\nimport '@sdcorejs/angular/utilities';\nimport '@sdcorejs/angular/pipes';\nimport '@sdcorejs/angular/directives';\nimport '@sdcorejs/angular/services';\nimport '@sdcorejs/angular/interceptors';\nimport '@sdcorejs/angular/handlers';\nimport '@sdcorejs/angular/components';\nimport '@sdcorejs/angular/forms';\nimport '@sdcorejs/angular/modules';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;AAAA;;AAEG;;ACFH;;AAEG"}
1
+ {"version":3,"file":"sdcorejs-angular.mjs","sources":["../../../projects/sdcorejs-angular/src/public-api.ts","../../../projects/sdcorejs-angular/src/sdcorejs-angular.ts"],"sourcesContent":["/*\n * Public API Surface of sd-angular\n *\n * why: these were previously bare `import '...'` statements, which meant the primary\n * entry point re-exported NOTHING — `import { SdButton } from '@sdcorejs/angular'`\n * resolved to nothing for every symbol, and the built FESM bundle was 517 bytes with\n * no `export` statement. Deep imports (`@sdcorejs/angular/components/button`) remain\n * the recommended path for bundle size; this barrel exists so the root import works.\n */\nexport * from '@sdcorejs/angular/configurations';\nexport * from '@sdcorejs/angular/i18n';\nexport * from '@sdcorejs/angular/utilities';\nexport * from '@sdcorejs/angular/pipes';\nexport * from '@sdcorejs/angular/directives';\nexport * from '@sdcorejs/angular/services';\nexport * from '@sdcorejs/angular/interceptors';\nexport * from '@sdcorejs/angular/handlers';\nexport * from '@sdcorejs/angular/components';\nexport * from '@sdcorejs/angular/forms';\nexport * from '@sdcorejs/angular/modules';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;AAAA;;;;;;;;AAQG;;ACRH;;AAEG"}
package/package.json CHANGED
@@ -1,7 +1,24 @@
1
1
  {
2
2
  "name": "@sdcorejs/angular",
3
- "version": "21.1.6",
3
+ "version": "21.2.0",
4
+ "description": "Angular component library: data table, query bar/builder, 20+ signal-based form controls, layout, auth and workflow services. Standalone, OnPush, signals-first. Published in parallel lines for Angular 19, 20 and 21.",
5
+ "keywords": [
6
+ "angular",
7
+ "angular-components",
8
+ "component-library",
9
+ "ui-components",
10
+ "angular-material",
11
+ "signals",
12
+ "standalone-components",
13
+ "data-table",
14
+ "forms",
15
+ "query-builder"
16
+ ],
17
+ "author": "SDCoreJS",
4
18
  "license": "MIT",
19
+ "engines": {
20
+ "node": ">=20.11.0"
21
+ },
5
22
  "repository": {
6
23
  "type": "git",
7
24
  "url": "git+https://github.com/sdcorejs/sdcorejs-angular.git"
@@ -11,18 +28,22 @@
11
28
  "url": "https://github.com/sdcorejs/sdcorejs-angular/issues"
12
29
  },
13
30
  "peerDependencies": {
31
+ "@angular/animations": "^19.0.0 || ^20.0.0 || ^21.0.0",
32
+ "@angular/cdk": "^19.0.0 || ^20.0.0 || ^21.0.0",
14
33
  "@angular/common": "^19.0.0 || ^20.0.0 || ^21.0.0",
15
34
  "@angular/core": "^19.0.0 || ^20.0.0 || ^21.0.0",
35
+ "@angular/forms": "^19.0.0 || ^20.0.0 || ^21.0.0",
16
36
  "@angular/material": "^19.0.0 || ^20.0.0 || ^21.0.0",
17
- "@angular/material-date-fns-adapter": "^19.0.0 || ^20.0.0 || ^21.0.0"
37
+ "@angular/material-date-fns-adapter": "^19.0.0 || ^20.0.0 || ^21.0.0",
38
+ "@angular/platform-browser": "^19.0.0 || ^20.0.0 || ^21.0.0",
39
+ "@angular/router": "^19.0.0 || ^20.0.0 || ^21.0.0",
40
+ "rxjs": "^7.8.0"
18
41
  },
19
42
  "dependencies": {
20
43
  "@sdcorejs/angular-material-datetime": "1.0.3",
21
44
  "@sdcorejs/utils": "1.1.4",
22
45
  "@lucide/angular": "^1.22.0",
23
46
  "@ckeditor/ckeditor5-angular": "11.1.2",
24
- "@omer-go/docx-parser-converter-ts": "^1.0.0",
25
- "@bjorn3/browser_wasi_shim": "^0.4.2",
26
47
  "ckeditor5": "48.0.0",
27
48
  "chart.js": "^4.5.1",
28
49
  "date-fns": "^3.6.0",
@@ -32,7 +53,13 @@
32
53
  "prismjs": "^1.30.0",
33
54
  "tslib": "^2.8.0"
34
55
  },
35
- "sideEffects": false,
56
+ "sideEffects": [
57
+ "**/*.css",
58
+ "**/*.scss",
59
+ "./fesm2022/sdcorejs-angular-components-chart.mjs",
60
+ "./fesm2022/sdcorejs-angular-components-code-editor.mjs",
61
+ "./fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs"
62
+ ],
36
63
  "module": "fesm2022/sdcorejs-angular.mjs",
37
64
  "typings": "types/sdcorejs-angular.d.ts",
38
65
  "exports": {
@@ -67,10 +94,6 @@
67
94
  "types": "./types/sdcorejs-angular-components-badge.d.ts",
68
95
  "default": "./fesm2022/sdcorejs-angular-components-badge.mjs"
69
96
  },
70
- "./components/base": {
71
- "types": "./types/sdcorejs-angular-components-base.d.ts",
72
- "default": "./fesm2022/sdcorejs-angular-components-base.mjs"
73
- },
74
97
  "./components/breadcrumb": {
75
98
  "types": "./types/sdcorejs-angular-components-breadcrumb.d.ts",
76
99
  "default": "./fesm2022/sdcorejs-angular-components-breadcrumb.mjs"
@@ -95,10 +118,6 @@
95
118
  "types": "./types/sdcorejs-angular-components-data-state.d.ts",
96
119
  "default": "./fesm2022/sdcorejs-angular-components-data-state.mjs"
97
120
  },
98
- "./components/document-builder": {
99
- "types": "./types/sdcorejs-angular-components-document-builder.d.ts",
100
- "default": "./fesm2022/sdcorejs-angular-components-document-builder.mjs"
101
- },
102
121
  "./components/editor": {
103
122
  "types": "./types/sdcorejs-angular-components-editor.d.ts",
104
123
  "default": "./fesm2022/sdcorejs-angular-components-editor.mjs"
@@ -311,10 +330,6 @@
311
330
  "types": "./types/sdcorejs-angular-interceptors.d.ts",
312
331
  "default": "./fesm2022/sdcorejs-angular-interceptors.mjs"
313
332
  },
314
- "./models": {
315
- "types": "./types/sdcorejs-angular-models.d.ts",
316
- "default": "./fesm2022/sdcorejs-angular-models.mjs"
317
- },
318
333
  "./modules": {
319
334
  "types": "./types/sdcorejs-angular-modules.d.ts",
320
335
  "default": "./fesm2022/sdcorejs-angular-modules.mjs"
@@ -359,18 +374,10 @@
359
374
  "types": "./types/sdcorejs-angular-services-confirm.d.ts",
360
375
  "default": "./fesm2022/sdcorejs-angular-services-confirm.mjs"
361
376
  },
362
- "./services/docx": {
363
- "types": "./types/sdcorejs-angular-services-docx.d.ts",
364
- "default": "./fesm2022/sdcorejs-angular-services-docx.mjs"
365
- },
366
377
  "./services/excel": {
367
378
  "types": "./types/sdcorejs-angular-services-excel.d.ts",
368
379
  "default": "./fesm2022/sdcorejs-angular-services-excel.mjs"
369
380
  },
370
- "./services/license": {
371
- "types": "./types/sdcorejs-angular-services-license.d.ts",
372
- "default": "./fesm2022/sdcorejs-angular-services-license.mjs"
373
- },
374
381
  "./services/loading": {
375
382
  "types": "./types/sdcorejs-angular-services-loading.d.ts",
376
383
  "default": "./fesm2022/sdcorejs-angular-services-loading.mjs"
@@ -30,13 +30,15 @@ declare class SdAnchor implements OnDestroy {
30
30
  ellipsis: _angular_core.InputSignalWithTransform<boolean, unknown>;
31
31
  overScroll: _angular_core.InputSignalWithTransform<boolean, unknown>;
32
32
  hideNav: _angular_core.InputSignalWithTransform<boolean, unknown>;
33
+ hideNavOnMobile: _angular_core.InputSignalWithTransform<boolean, unknown>;
33
34
  color: _angular_core.InputSignal<Color>;
35
+ readonly navHidden: _angular_core.Signal<boolean>;
34
36
  activeSectionId: _angular_core.WritableSignal<string>;
35
37
  constructor();
36
38
  scrollSectionByClick(idSectionTarget: string): void;
37
39
  ngOnDestroy(): void;
38
40
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdAnchor, never>;
39
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdAnchor, "sd-anchor", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "sidebarWidth": { "alias": "sidebarWidth"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; "overScroll": { "alias": "overScroll"; "required": false; "isSignal": true; }; "hideNav": { "alias": "hideNav"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; }, {}, ["sections"], ["*"], true, never>;
41
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdAnchor, "sd-anchor", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "sidebarWidth": { "alias": "sidebarWidth"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; "overScroll": { "alias": "overScroll"; "required": false; "isSignal": true; }; "hideNav": { "alias": "hideNav"; "required": false; "isSignal": true; }; "hideNavOnMobile": { "alias": "hideNavOnMobile"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; }, {}, ["sections"], ["*"], true, never>;
40
42
  }
41
43
 
42
44
  export { SdAnchor, SdAnchorItem };
@@ -22,6 +22,7 @@ declare class SdBadge {
22
22
  size: _angular_core.InputSignalWithTransform<Size, Size | null | undefined>;
23
23
  readonly click: EventEmitter<Event>;
24
24
  onClick: (event: Event) => void;
25
+ onActivateKey: (event: Event) => void;
25
26
  effectiveColor: _angular_core.Signal<Color>;
26
27
  baseColorClasses: _angular_core.Signal<{
27
28
  'c-primary': boolean;
@@ -7,7 +7,7 @@ import * as i0 from '@angular/core';
7
7
  * - CKEditor's CSS must be global (applies to body-rendered overlays, dialogs, balloons),
8
8
  * which means whichever Angular component declares it must use ViewEncapsulation.None.
9
9
  * - Switching encapsulation on the main editor components (`<sd-editor>`, `<sd-mini-editor>`,
10
- * `<sd-document-builder>`) would un-scope all their local styles too.
10
+ * `<sd-mini-editor>`) would un-scope all their local styles too.
11
11
  * - Instead, this tiny no-render component owns the global CSS. The editor components embed
12
12
  * `<sd-ckeditor-styles>` at the top of their template; the CSS is injected once into <head>
13
13
  * the first time any editor instance mounts. Editor components themselves keep
@@ -3,7 +3,7 @@ import { InjectionToken, OnDestroy, OnInit, AfterViewInit, QueryList } from '@an
3
3
  import { SdSearch, SdCustomValidator } from '@sdcorejs/angular/forms/models';
4
4
  import { SdTableColumn, SdTableOption, SdTable } from '@sdcorejs/angular/components/table';
5
5
  import { SdUploadFile } from '@sdcorejs/angular/components/upload-file';
6
- import { Operator as Operator$1, ValidationPatternType, Color } from '@sdcorejs/utils/models';
6
+ import { Operator, ValidationPatternType, Color } from '@sdcorejs/utils/models';
7
7
  import { SdUnwrapSignal } from '@sdcorejs/angular/utilities/models';
8
8
  import { CdkDropList, CdkDragMove, CdkDragDrop, CdkDragEnter, CdkDragSortEvent, CdkDrag } from '@angular/cdk/drag-drop';
9
9
  import { FormGroup } from '@angular/forms';
@@ -17,7 +17,7 @@ type SdFormRenderEntity = Record<string, any> & {
17
17
  sdRaw?: Record<string, any>;
18
18
  };
19
19
 
20
- interface SdFormGenericSelectionItem<T = any> {
20
+ interface SdFormGenericSelectionItem<T = unknown> {
21
21
  value: string;
22
22
  display: string;
23
23
  disabled?: boolean;
@@ -28,8 +28,8 @@ interface SdFormGenericSelectionStaticItem {
28
28
  value: string;
29
29
  label: string;
30
30
  }
31
- type SdFormGenericDefinitionSelection<T = any, TArgs = any> = SelectionValues<T> | SelectionLazyValues<T> | SelectionValuesKey<TArgs> | SelectionLazyValuesKey<TArgs>;
32
- interface SelectionVariables<T = any> {
31
+ type SdFormGenericDefinitionSelection<T = unknown, TArgs = unknown> = SelectionValues<T> | SelectionLazyValues<T> | SelectionValuesKey<TArgs> | SelectionLazyValuesKey<TArgs>;
32
+ interface SelectionVariables<T = unknown> {
33
33
  items?: {
34
34
  value: Extract<keyof T, string>;
35
35
  display: string;
@@ -57,10 +57,10 @@ interface SelectionLazyValuesKey<TArgs> extends SelecttionBase {
57
57
  lazyValuesKey: string;
58
58
  args?: TArgs;
59
59
  }
60
- interface SelectionValues<T = any> extends SelecttionBase {
60
+ interface SelectionValues<T = unknown> extends SelecttionBase {
61
61
  values: (args: SdFormGenericArgs) => Promise<SdFormGenericSelectionItem<T>[]>;
62
62
  }
63
- interface SelectionLazyValues<T = any> extends SelecttionBase {
63
+ interface SelectionLazyValues<T = unknown> extends SelecttionBase {
64
64
  lazyValues: (searchArgs: Parameters<SdSearch>[0], args: SdFormGenericArgs) => Promise<SdFormGenericSelectionItem<T>[]>;
65
65
  }
66
66
 
@@ -74,13 +74,13 @@ interface SdFormGenericExpressionCondition {
74
74
  key: string;
75
75
  type: 'condition';
76
76
  field?: string;
77
- operator: Operator$1;
77
+ operator: Operator;
78
78
  value: any;
79
79
  dayInfo: DayInfo;
80
80
  }
81
- type Operator = 'EQUAL' | 'NOT_EQUAL' | 'GREATER_THAN' | 'LESS_THAN' | 'GREATER_OR_EQUAL' | 'LESS_OR_EQUAL' | 'NULL' | 'NOT_NULL';
82
- declare const Operators: {
83
- value: Operator;
81
+ type SdFormGenericOperator = 'EQUAL' | 'NOT_EQUAL' | 'GREATER_THAN' | 'LESS_THAN' | 'GREATER_OR_EQUAL' | 'LESS_OR_EQUAL' | 'NULL' | 'NOT_NULL';
82
+ declare const SdFormGenericOperators: {
83
+ value: SdFormGenericOperator;
84
84
  symbol?: string;
85
85
  display: string;
86
86
  }[];
@@ -107,16 +107,16 @@ interface DayInfo {
107
107
  related?: 'LASTDAY' | 'NEXTDAY' | 'LASTWEEK' | 'NEXTWEEK' | 'LASTMONTH' | 'NEXTMONTH';
108
108
  relatedValue?: number;
109
109
  }
110
- declare const DayInfoTypes: {
110
+ declare const SD_DAY_INFO_TYPES: {
111
111
  value: string;
112
112
  display: string;
113
113
  }[];
114
- declare const DayInfoPreviouses: {
114
+ declare const SD_DAY_INFO_PREVIOUSES: {
115
115
  value: string;
116
116
  display: string;
117
117
  format: (n: number) => string;
118
118
  }[];
119
- declare const GetDatetimeValue: (value: string) => string | undefined;
119
+ declare const sdGetDatetimeValue: (value: string) => string | undefined;
120
120
  interface AttributeValues {
121
121
  value: string;
122
122
  display: string;
@@ -126,20 +126,24 @@ interface AttributeValues {
126
126
  display: string;
127
127
  }[];
128
128
  }
129
- declare const AttributeOperators: Record<Attribute['type'], {
130
- value: Operator;
129
+ declare const SD_ATTRIBUTE_OPERATORS: Record<Attribute['type'], {
130
+ value: SdFormGenericOperator;
131
131
  symbol?: string;
132
132
  display: string;
133
133
  }[]>;
134
- declare const GetAttributes: (components: (SdFormGenericComponent | SdFormGenericGroup)[]) => Attribute[];
135
- declare const TemplateToCondition: (template: string | undefined | null, entity: Record<string, any>) => string | undefined;
136
- declare const EvaluateExpression: (condition: SdFormGenericExpression | SdFormGenericExpressionCondition, entity: Record<string, any>) => boolean | undefined;
137
- declare const ExpressionToJavascriptExpression: (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => string | undefined;
134
+ declare const sdGetAttributes: (components: (SdFormGenericComponent | SdFormGenericGroup)[]) => Attribute[];
135
+ declare const sdTemplateToCondition: (template: string | undefined | null, entity: Record<string, any>) => string | undefined;
136
+ declare const sdEvaluateExpression: (condition: SdFormGenericExpression | SdFormGenericExpressionCondition, entity: Record<string, any>) => boolean | undefined;
137
+ declare const sdExpressionToJavascriptExpression: (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => string | undefined;
138
138
 
139
139
  type SdFormGenericValidation = ValidationExpression | ValidationFunction;
140
140
  interface ValidationBase {
141
141
  alert: 'warning' | 'error';
142
142
  }
143
+ declare const ValidationAlerts: {
144
+ value: string;
145
+ display: string;
146
+ }[];
143
147
  interface ValidationExpression extends ValidationBase {
144
148
  type: 'expression';
145
149
  expression: SdFormGenericExpression;
@@ -179,9 +183,9 @@ interface SdFormGenericLayout {
179
183
  columns: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
180
184
  mobileColumns?: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
181
185
  }
182
- declare const GenerateId: () => string;
183
- declare const GenerateKey: () => string;
184
- declare const SdFormatComponent: (component: SdFormGenericComponent | SdFormGenericGroup) => void;
186
+ declare const sdGenerateId: () => string;
187
+ declare const sdGenerateKey: () => string;
188
+ declare const sdFormatComponent: (component: SdFormGenericComponent | SdFormGenericGroup) => void;
185
189
  interface SdFormGenericVariable {
186
190
  id: string;
187
191
  key: string;
@@ -333,7 +337,7 @@ interface FormRenderComponentTableColumnValues {
333
337
  query?: Record<string, any>;
334
338
  }
335
339
  type SdFormGenericTableColumn<T = any> = TableColumnString<T> | TableColumnNumber<T> | TableColumnBool<T> | TableColumnDate<T> | TableColumnDatetime<T> | TableColumnRadio<T> | TableColumnValues<T> | TableColumnImage<T> | TableColumnFile<T>;
336
- declare const TableColumnTypes: {
340
+ declare const SD_TABLE_COLUMN_TYPES: {
337
341
  value: string;
338
342
  display: string;
339
343
  }[];
@@ -463,17 +467,17 @@ interface FormBuilderComponent {
463
467
  group: FormBuilderComponentGroup;
464
468
  name: string;
465
469
  }
466
- declare const FormBuilderComponents: FormBuilderComponent[];
470
+ declare const SD_FORM_BUILDER_COMPONENTS: FormBuilderComponent[];
467
471
  /** Lookup: component type → Material icon + label, used by attribute panel header. */
468
- declare const COMPONENT_ICONS: Record<string, {
472
+ declare const SD_COMPONENT_ICONS: Record<string, {
469
473
  symbol: string;
470
474
  label: string;
471
475
  }>;
472
- declare const GetComponentAttributes: (components: (SdFormGenericComponent | SdFormGenericGroup)[]) => {
476
+ declare const sdGetComponentAttributes: (components: (SdFormGenericComponent | SdFormGenericGroup)[]) => {
473
477
  value: string;
474
478
  display: string;
475
479
  }[];
476
- declare const GetVariableAttributes: (variables: SdFormGenericVariable[]) => {
480
+ declare const sdGetVariableAttributes: (variables: SdFormGenericVariable[]) => {
477
481
  value: string;
478
482
  display: string;
479
483
  }[];
@@ -525,7 +529,7 @@ interface SdFormGenericDefinitionHtmlQuery {
525
529
  }[];
526
530
  }
527
531
 
528
- interface IWorkflowConfigurationForm<TSelectionArgs = any> {
532
+ interface IWorkflowConfigurationForm<TSelectionArgs = unknown> {
529
533
  templates: SdFormGenericTemplate[];
530
534
  selections: SdFormGenericDefinitionSelection<any, TSelectionArgs>[] | (() => SdFormGenericDefinitionSelection<any, TSelectionArgs>[]) | (() => Promise<SdFormGenericDefinitionSelection[]>);
531
535
  getValues?: (key: string, selectionArgs?: TSelectionArgs) => Promise<SdFormGenericSelectionItem[]>;
@@ -595,7 +599,7 @@ declare class TableComponent implements AfterViewInit, OnDestroy, OnInit {
595
599
  readonly modelChange: _angular_core.OutputEmitterRef<any[]>;
596
600
  tableOption?: SdTableOption;
597
601
  row: any;
598
- columnValues: Record<string, SdFormGenericSelectionItem[] | SdSearch$1>;
602
+ columnValues: Record<string, SdFormGenericSelectionItem[] | SdSearch$1<SdFormGenericSelectionItem>>;
599
603
  formRenderColumn: Record<string, SdFormGenericTableColumn>;
600
604
  fileKeys: string[];
601
605
  imageKeys: string[];
@@ -604,6 +608,11 @@ declare class TableComponent implements AfterViewInit, OnDestroy, OnInit {
604
608
  ngOnInit(): void;
605
609
  ngAfterViewInit(): void;
606
610
  ngOnDestroy(): void;
611
+ /**
612
+ * Tiêu đề của side-drawer phải nói đúng tác vụ đang làm — trước đây nó cứng là "Chi tiết" cho cả
613
+ * thêm mới lẫn sửa, còn dòng "Tạo mới/cập nhật" thì rơi vào thân drawer vì gắn nhầm slot.
614
+ */
615
+ get detailTitle(): string;
607
616
  onDetail: (row?: any) => void;
608
617
  onCancel: () => void;
609
618
  onAccept: (addable?: boolean) => void;
@@ -797,7 +806,7 @@ declare class SdFormBuilder implements OnInit, OnDestroy {
797
806
  placeholderColumnsFor: (item: FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup | DragDropRowItem | undefined) => number;
798
807
  /** True nếu component có expression điều kiện — drives the "conditional" status chip. */
799
808
  hasConditional: (item: SdFormGenericComponent | SdFormGenericGroup) => boolean;
800
- /** Map SdColor preset → 2 CSS var names cho header-bg và header-fg của group card. */
809
+ /** Map Color preset → 2 CSS var names cho header-bg và header-fg của group card. */
801
810
  groupColorVars: (color: string | undefined | null) => {
802
811
  bg: string;
803
812
  fg: string;
@@ -805,6 +814,7 @@ declare class SdFormBuilder implements OnInit, OnDestroy {
805
814
  /** Segmented Design/Preview toggle (replaces play_circle/stop_circle). */
806
815
  setMode: (preview: boolean) => void;
807
816
  /** Mở canvas thiết kế riêng cho 1 group (chỉ children của nó). Snapshot để Cancel revert. */
817
+ onEnterGroupEditKeydown: (group: SdFormGenericGroup, event: KeyboardEvent) => void;
808
818
  enterGroupEdit: (group: SdFormGenericGroup) => void;
809
819
  /** OK: giữ thay đổi children, quay về canvas chính. */
810
820
  confirmGroupEdit: () => void;
@@ -817,6 +827,7 @@ declare class SdFormBuilder implements OnInit, OnDestroy {
817
827
  /** Xoá component theo scope hiện tại (top-level hoặc children của group đang Detail). */
818
828
  removeComponent: (id: string) => void;
819
829
  selectComponent: (item?: SdFormGenericComponent | SdFormGenericGroup) => void;
830
+ onPaletteItemKeydown: (item: FormBuilderComponent, event: KeyboardEvent) => void;
820
831
  onClickedOutside: (e: any) => void;
821
832
  clickFormContentEmpty: () => void;
822
833
  drop: (event: CdkDragDrop<any[]>) => void;
@@ -867,7 +878,7 @@ declare class SdFeelExpression implements OnInit {
867
878
  modal?: SdModal;
868
879
  form: FormGroup<{}>;
869
880
  attributeOperators: Record<"string" | "number" | "boolean" | "datetime" | "values", {
870
- value: _sdcorejs_angular_components_form_generic.Operator;
881
+ value: _sdcorejs_angular_components_form_generic.SdFormGenericOperator;
871
882
  symbol?: string;
872
883
  display: string;
873
884
  }[]>;
@@ -905,5 +916,5 @@ declare class SdFormRenderService {
905
916
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<SdFormRenderService>;
906
917
  }
907
918
 
908
- export { AttributeOperators, COMPONENT_ICONS, DayInfoPreviouses, DayInfoTypes, EvaluateExpression, ExpressionToJavascriptExpression, FormBuilderComponents, GenerateId, GenerateKey, GetAttributes, GetComponentAttributes, GetDatetimeValue, GetVariableAttributes, Operators, SD_FORM_GENERIC_CONFIGURATION, SdFeelExpression, SdFormBuilder, SdFormRender, SdFormRenderService, SdFormatComponent, TableColumnTypes, TemplateToCondition };
909
- export type { Attribute, DayInfo, FormBuilderComponent, FormBuilderComponentGroup, FormRenderComponentTableColumnValues, ISdFormGenericConfiguration, IWorkflowConfigurationForm, Operator, SdFormGeneric, SdFormGenericArgs, SdFormGenericBreak, SdFormGenericCheckbox, SdFormGenericChecklist, SdFormGenericChipCalendar, SdFormGenericChipString, SdFormGenericComponent, SdFormGenericComponentBase, SdFormGenericDatetime, SdFormGenericDefinitionHtml, SdFormGenericDefinitionSelection, SdFormGenericDefinitionTable, SdFormGenericExpression, SdFormGenericExpressionCondition, SdFormGenericGroup, SdFormGenericHtml, SdFormGenericLayout, SdFormGenericNumber, SdFormGenericRadio, SdFormGenericSelect, SdFormGenericSelectionItem, SdFormGenericSelectionStaticItem, SdFormGenericTable, SdFormGenericTableColumn, SdFormGenericTemplate, SdFormGenericTextarea, SdFormGenericTextfield, SdFormGenericUpload, SdFormGenericValues, SdFormGenericVariable, SdFormRenderConfiguration, SdFormRenderEntity };
919
+ export { SD_ATTRIBUTE_OPERATORS, SD_COMPONENT_ICONS, SD_DAY_INFO_PREVIOUSES, SD_DAY_INFO_TYPES, SD_FORM_BUILDER_COMPONENTS, SD_FORM_GENERIC_CONFIGURATION, SD_TABLE_COLUMN_TYPES, SdFeelExpression, SdFormBuilder, SdFormGenericOperators, SdFormRender, SdFormRenderService, ValidationAlerts, sdEvaluateExpression, sdExpressionToJavascriptExpression, sdFormatComponent, sdGenerateId, sdGenerateKey, sdGetAttributes, sdGetComponentAttributes, sdGetDatetimeValue, sdGetVariableAttributes, sdTemplateToCondition };
920
+ export type { Attribute, DayInfo, FormBuilderComponent, FormBuilderComponentGroup, FormRenderComponentTableColumnValues, ISdFormGenericConfiguration, IWorkflowConfigurationForm, SdFormGeneric, SdFormGenericArgs, SdFormGenericBreak, SdFormGenericCheckbox, SdFormGenericChecklist, SdFormGenericChipCalendar, SdFormGenericChipString, SdFormGenericComponent, SdFormGenericComponentBase, SdFormGenericDatetime, SdFormGenericDefinitionHtml, SdFormGenericDefinitionSelection, SdFormGenericDefinitionTable, SdFormGenericExpression, SdFormGenericExpressionCondition, SdFormGenericGroup, SdFormGenericHtml, SdFormGenericLayout, SdFormGenericNumber, SdFormGenericOperator, SdFormGenericRadio, SdFormGenericSelect, SdFormGenericSelectionItem, SdFormGenericSelectionStaticItem, SdFormGenericTable, SdFormGenericTableColumn, SdFormGenericTemplate, SdFormGenericTextarea, SdFormGenericTextfield, SdFormGenericUpload, SdFormGenericValidation, SdFormGenericValidationConfiguration, SdFormGenericValidationFunction, SdFormGenericValues, SdFormGenericVariable, SdFormRenderConfiguration, SdFormRenderEntity };
@@ -139,6 +139,7 @@ declare class SdImportExcel implements OnInit, OnDestroy {
139
139
  accept: () => void;
140
140
  setValidation: (validations: SdImportExcelValidation[]) => void;
141
141
  view: (showing?: "ALL" | "SUCCESS" | "WARNING" | "ERROR") => void;
142
+ onDownloadTemplateKeydown: (event: KeyboardEvent) => void;
142
143
  downloadTemplate: () => Promise<void>;
143
144
  export: () => Promise<void>;
144
145
  onClosed: () => void;
@@ -18,7 +18,7 @@ interface SdMiniEditorMentionConfig {
18
18
  attributes?: Record<string, string>;
19
19
  };
20
20
  }
21
- type SdMiniEditorMentionItem<T = any> = MentionFeedObjectItem & {
21
+ type SdMiniEditorMentionItem<T = unknown> = MentionFeedObjectItem & {
22
22
  data?: T;
23
23
  };
24
24
  interface SdMiniEditorOption {