@sdcorejs/angular 21.0.8 → 21.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/README.md +270 -140
  2. package/assets/scss/core/utilities/_grid.scss +25 -19
  3. package/fesm2022/sdcorejs-angular-components-anchor.mjs +15 -18
  4. package/fesm2022/sdcorejs-angular-components-anchor.mjs.map +1 -1
  5. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs.map +1 -1
  6. package/fesm2022/sdcorejs-angular-components-avatar.mjs.map +1 -1
  7. package/fesm2022/sdcorejs-angular-components-badge.mjs +0 -1
  8. package/fesm2022/sdcorejs-angular-components-badge.mjs.map +1 -1
  9. package/fesm2022/sdcorejs-angular-components-button.mjs +6 -7
  10. package/fesm2022/sdcorejs-angular-components-button.mjs.map +1 -1
  11. package/fesm2022/sdcorejs-angular-components-chart.mjs.map +1 -1
  12. package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs.map +1 -1
  13. package/fesm2022/sdcorejs-angular-components-code-editor.mjs +1 -1
  14. package/fesm2022/sdcorejs-angular-components-code-editor.mjs.map +1 -1
  15. package/fesm2022/sdcorejs-angular-components-document-builder.mjs +17 -26
  16. package/fesm2022/sdcorejs-angular-components-document-builder.mjs.map +1 -1
  17. package/fesm2022/sdcorejs-angular-components-editor.mjs +7 -2
  18. package/fesm2022/sdcorejs-angular-components-editor.mjs.map +1 -1
  19. package/fesm2022/sdcorejs-angular-components-form-generic.mjs +712 -427
  20. package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
  21. package/fesm2022/sdcorejs-angular-components-import-excel.mjs +35 -18
  22. package/fesm2022/sdcorejs-angular-components-import-excel.mjs.map +1 -1
  23. package/fesm2022/sdcorejs-angular-components-inform.mjs +0 -1
  24. package/fesm2022/sdcorejs-angular-components-inform.mjs.map +1 -1
  25. package/fesm2022/sdcorejs-angular-components-mini-editor.mjs.map +1 -1
  26. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs.map +1 -1
  27. package/fesm2022/sdcorejs-angular-components-modal.mjs +21 -14
  28. package/fesm2022/sdcorejs-angular-components-modal.mjs.map +1 -1
  29. package/fesm2022/sdcorejs-angular-components-operator.mjs +1 -1
  30. package/fesm2022/sdcorejs-angular-components-operator.mjs.map +1 -1
  31. package/fesm2022/sdcorejs-angular-components-org-chart.mjs.map +1 -1
  32. package/fesm2022/sdcorejs-angular-components-preview.mjs +33 -29
  33. package/fesm2022/sdcorejs-angular-components-preview.mjs.map +1 -1
  34. package/fesm2022/sdcorejs-angular-components-query-bar.mjs +15 -28
  35. package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
  36. package/fesm2022/sdcorejs-angular-components-query-builder.mjs +2 -3
  37. package/fesm2022/sdcorejs-angular-components-query-builder.mjs.map +1 -1
  38. package/fesm2022/sdcorejs-angular-components-quick-action.mjs.map +1 -1
  39. package/fesm2022/sdcorejs-angular-components-section.mjs +0 -1
  40. package/fesm2022/sdcorejs-angular-components-section.mjs.map +1 -1
  41. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs +3 -3
  42. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs.map +1 -1
  43. package/fesm2022/sdcorejs-angular-components-splitter.mjs +4 -4
  44. package/fesm2022/sdcorejs-angular-components-splitter.mjs.map +1 -1
  45. package/fesm2022/sdcorejs-angular-components-stepper.mjs.map +1 -1
  46. package/fesm2022/sdcorejs-angular-components-tab-router.mjs +31 -31
  47. package/fesm2022/sdcorejs-angular-components-tab-router.mjs.map +1 -1
  48. package/fesm2022/sdcorejs-angular-components-tab.mjs.map +1 -1
  49. package/fesm2022/sdcorejs-angular-components-table.mjs +800 -855
  50. package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
  51. package/fesm2022/sdcorejs-angular-components-tree.mjs.map +1 -1
  52. package/fesm2022/sdcorejs-angular-components-upload-file.mjs +6 -6
  53. package/fesm2022/sdcorejs-angular-components-upload-file.mjs.map +1 -1
  54. package/fesm2022/sdcorejs-angular-components-view.mjs +3 -9
  55. package/fesm2022/sdcorejs-angular-components-view.mjs.map +1 -1
  56. package/fesm2022/sdcorejs-angular-configurations.mjs.map +1 -1
  57. package/fesm2022/sdcorejs-angular-directives.mjs +2 -7
  58. package/fesm2022/sdcorejs-angular-directives.mjs.map +1 -1
  59. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +0 -3
  60. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
  61. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs.map +1 -1
  62. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs +2 -2
  63. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs.map +1 -1
  64. package/fesm2022/sdcorejs-angular-forms-chip.mjs +2 -2
  65. package/fesm2022/sdcorejs-angular-forms-chip.mjs.map +1 -1
  66. package/fesm2022/sdcorejs-angular-forms-date-range.mjs +11 -5
  67. package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
  68. package/fesm2022/sdcorejs-angular-forms-date.mjs +2 -4
  69. package/fesm2022/sdcorejs-angular-forms-date.mjs.map +1 -1
  70. package/fesm2022/sdcorejs-angular-forms-datetime.mjs +2 -6
  71. package/fesm2022/sdcorejs-angular-forms-datetime.mjs.map +1 -1
  72. package/fesm2022/sdcorejs-angular-forms-input-color.mjs +4 -4
  73. package/fesm2022/sdcorejs-angular-forms-input-color.mjs.map +1 -1
  74. package/fesm2022/sdcorejs-angular-forms-input-number.mjs +1 -1
  75. package/fesm2022/sdcorejs-angular-forms-input-number.mjs.map +1 -1
  76. package/fesm2022/sdcorejs-angular-forms-input.mjs.map +1 -1
  77. package/fesm2022/sdcorejs-angular-forms-label.mjs +0 -1
  78. package/fesm2022/sdcorejs-angular-forms-label.mjs.map +1 -1
  79. package/fesm2022/sdcorejs-angular-forms-models.mjs.map +1 -1
  80. package/fesm2022/sdcorejs-angular-forms-radio.mjs +12 -2
  81. package/fesm2022/sdcorejs-angular-forms-radio.mjs.map +1 -1
  82. package/fesm2022/sdcorejs-angular-forms-select.mjs +45 -14
  83. package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
  84. package/fesm2022/sdcorejs-angular-forms-switch.mjs.map +1 -1
  85. package/fesm2022/sdcorejs-angular-forms-textarea.mjs +2 -2
  86. package/fesm2022/sdcorejs-angular-forms-textarea.mjs.map +1 -1
  87. package/fesm2022/sdcorejs-angular-handlers.mjs +3 -6
  88. package/fesm2022/sdcorejs-angular-handlers.mjs.map +1 -1
  89. package/fesm2022/sdcorejs-angular-i18n.mjs +11 -7
  90. package/fesm2022/sdcorejs-angular-i18n.mjs.map +1 -1
  91. package/fesm2022/sdcorejs-angular-interceptors.mjs +0 -2
  92. package/fesm2022/sdcorejs-angular-interceptors.mjs.map +1 -1
  93. package/fesm2022/sdcorejs-angular-modules-auth.mjs +14 -38
  94. package/fesm2022/sdcorejs-angular-modules-auth.mjs.map +1 -1
  95. package/fesm2022/sdcorejs-angular-modules-authom.mjs +14 -14
  96. package/fesm2022/sdcorejs-angular-modules-authom.mjs.map +1 -1
  97. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs +22 -11
  98. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs.map +1 -1
  99. package/fesm2022/sdcorejs-angular-modules-layout.mjs +30 -27
  100. package/fesm2022/sdcorejs-angular-modules-layout.mjs.map +1 -1
  101. package/fesm2022/sdcorejs-angular-modules-permission.mjs +5 -12
  102. package/fesm2022/sdcorejs-angular-modules-permission.mjs.map +1 -1
  103. package/fesm2022/sdcorejs-angular-pipes.mjs +71 -17
  104. package/fesm2022/sdcorejs-angular-pipes.mjs.map +1 -1
  105. package/fesm2022/sdcorejs-angular-services-api.mjs +0 -2
  106. package/fesm2022/sdcorejs-angular-services-api.mjs.map +1 -1
  107. package/fesm2022/sdcorejs-angular-services-cache.mjs +5 -11
  108. package/fesm2022/sdcorejs-angular-services-cache.mjs.map +1 -1
  109. package/fesm2022/sdcorejs-angular-services-confirm.mjs +16 -21
  110. package/fesm2022/sdcorejs-angular-services-confirm.mjs.map +1 -1
  111. package/fesm2022/sdcorejs-angular-services-docx.mjs +2 -8
  112. package/fesm2022/sdcorejs-angular-services-docx.mjs.map +1 -1
  113. package/fesm2022/sdcorejs-angular-services-excel.mjs +2 -2
  114. package/fesm2022/sdcorejs-angular-services-excel.mjs.map +1 -1
  115. package/fesm2022/sdcorejs-angular-services-license.mjs +5 -12
  116. package/fesm2022/sdcorejs-angular-services-license.mjs.map +1 -1
  117. package/fesm2022/sdcorejs-angular-services-notify.mjs +70 -87
  118. package/fesm2022/sdcorejs-angular-services-notify.mjs.map +1 -1
  119. package/fesm2022/sdcorejs-angular-services-storage.mjs +6 -15
  120. package/fesm2022/sdcorejs-angular-services-storage.mjs.map +1 -1
  121. package/fesm2022/sdcorejs-angular-utilities-data-state.mjs.map +1 -1
  122. package/fesm2022/sdcorejs-angular-utilities-extensions.mjs +47 -5
  123. package/fesm2022/sdcorejs-angular-utilities-extensions.mjs.map +1 -1
  124. package/fesm2022/sdcorejs-angular-utilities-models.mjs +18 -3
  125. package/fesm2022/sdcorejs-angular-utilities-models.mjs.map +1 -1
  126. package/fesm2022/sdcorejs-angular.mjs.map +1 -1
  127. package/package.json +2 -2
  128. package/types/sdcorejs-angular-components-document-builder.d.ts +2 -2
  129. package/types/sdcorejs-angular-components-form-generic.d.ts +45 -23
  130. package/types/sdcorejs-angular-components-import-excel.d.ts +2 -2
  131. package/types/sdcorejs-angular-components-mini-editor.d.ts +4 -4
  132. package/types/sdcorejs-angular-components-modal.d.ts +1 -1
  133. package/types/sdcorejs-angular-components-query-builder.d.ts +4 -4
  134. package/types/sdcorejs-angular-components-tab-router.d.ts +3 -3
  135. package/types/sdcorejs-angular-components-table.d.ts +8 -11
  136. package/types/sdcorejs-angular-components-view.d.ts +1 -1
  137. package/types/sdcorejs-angular-forms-chip-calendar.d.ts +2 -2
  138. package/types/sdcorejs-angular-forms-chip.d.ts +2 -2
  139. package/types/sdcorejs-angular-forms-date-range.d.ts +2 -0
  140. package/types/sdcorejs-angular-forms-input-color.d.ts +2 -1
  141. package/types/sdcorejs-angular-forms-select.d.ts +10 -2
  142. package/types/sdcorejs-angular-modules-auth.d.ts +7 -9
  143. package/types/sdcorejs-angular-modules-permission.d.ts +5 -6
  144. package/types/sdcorejs-angular-pipes.d.ts +22 -4
  145. package/types/sdcorejs-angular-services-confirm.d.ts +3 -3
  146. package/types/sdcorejs-angular-services-license.d.ts +2 -3
  147. package/types/sdcorejs-angular-services-notify.d.ts +4 -5
  148. package/types/sdcorejs-angular-services-storage.d.ts +2 -3
  149. package/types/sdcorejs-angular-utilities-extensions.d.ts +9 -1
@@ -150,7 +150,7 @@ interface QbDateModeOption {
150
150
  icon: string;
151
151
  }
152
152
  /** Stable option list for the date-mode select (module ref — never reallocated). */
153
- declare const QB_DATE_MODES: ReadonlyArray<QbDateModeOption>;
153
+ declare const QB_DATE_MODES: readonly QbDateModeOption[];
154
154
  /** One value-source option for field-to-field comparison UI. */
155
155
  interface QbValueSourceOption {
156
156
  value: QbValueSource;
@@ -159,12 +159,12 @@ interface QbValueSourceOption {
159
159
  icon: string;
160
160
  }
161
161
  /** Stable option list for choosing between a literal value and another field. */
162
- declare const QB_VALUE_SOURCE_OPTIONS: ReadonlyArray<QbValueSourceOption>;
162
+ declare const QB_VALUE_SOURCE_OPTIONS: readonly QbValueSourceOption[];
163
163
  /** Stable combined direction×unit option list (token `'unit:direction'`). */
164
- declare const QB_RELATIVE_UNIT_OPTIONS: ReadonlyArray<{
164
+ declare const QB_RELATIVE_UNIT_OPTIONS: readonly {
165
165
  value: string;
166
166
  display: string;
167
- }>;
167
+ }[];
168
168
  /** Shared empty option array — stable ref for fallbacks (avoids per-call allocation). */
169
169
  declare const QB_EMPTY_OPTIONS: SdQueryBuilderFieldOption[];
170
170
 
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Type, ElementRef, ChangeDetectorRef, OnDestroy } from '@angular/core';
2
+ import { InjectionToken, Type, ElementRef, ChangeDetectorRef, OnDestroy } from '@angular/core';
3
3
  import { Color } from '@sdcorejs/utils/models';
4
4
  import { Subject, BehaviorSubject } from 'rxjs';
5
5
  import { CdkDragDrop } from '@angular/cdk/drag-drop';
@@ -22,6 +22,7 @@ interface SdTab {
22
22
  tabInfoChanges: Subject<SdTabInfo>;
23
23
  beforeClose?: () => boolean | Promise<boolean>;
24
24
  }
25
+ declare const SD_TAB: InjectionToken<SdTab>;
25
26
 
26
27
  declare class SdTabRouterNavComponent {
27
28
  tabRouterNav: i0.Signal<ElementRef<any> | undefined>;
@@ -87,7 +88,6 @@ declare class SdTabRouterService {
87
88
  currentTabChanges: BehaviorSubject<SdTab | undefined>;
88
89
  newTabs: BehaviorSubject<SdTab | undefined>;
89
90
  updateTabs: BehaviorSubject<SdTab | undefined>;
90
- constructor();
91
91
  addBuilder: (builder: SdTabComponentBuilder) => void;
92
92
  get currentTab(): SdTab | undefined;
93
93
  get currentKey(): string | null;
@@ -100,5 +100,5 @@ declare class SdTabRouterService {
100
100
  static ɵprov: i0.ɵɵInjectableDeclaration<SdTabRouterService>;
101
101
  }
102
102
 
103
- export { SdTabComponent, SdTabRouterOutletComponent, SdTabRouterService };
103
+ export { SD_TAB, SdTabComponent, SdTabRouterOutletComponent, SdTabRouterService };
104
104
  export type { SdTab, SdTabComponentArgs, SdTabComponentBuilder, SdTabInfo };
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { TemplateRef, Signal, EventEmitter, ChangeDetectorRef, InjectionToken, OnInit, AfterViewInit, OnDestroy } from '@angular/core';
2
+ import { TemplateRef, Signal, EventEmitter, ChangeDetectorRef, InjectionToken, AfterViewInit, OnDestroy } from '@angular/core';
3
3
  import { SdBadge } from '@sdcorejs/angular/components/badge';
4
4
  import { SdSearch } from '@sdcorejs/angular/forms';
5
5
  import { Operator, NestedKeyOf, Order, PagingReq, Color } from '@sdcorejs/utils/models';
@@ -60,6 +60,7 @@ interface SdTableColumnBase<T = any> {
60
60
  filter?: {
61
61
  disabled?: boolean;
62
62
  default?: any;
63
+ onChange?: (value: any, column?: SdTableColumn<T>, columnFilter?: Record<string, any>) => void;
63
64
  operator?: {
64
65
  default?: Operator;
65
66
  enable?: boolean;
@@ -81,7 +82,7 @@ interface SdTableColumnNumber<T = any> extends SdTableColumnBase<T> {
81
82
  field: NestedKeyOf<T>;
82
83
  type: 'number';
83
84
  useBadge?: UseBadgeFunc<T>;
84
- filter?: SdTableColumnBase['filter'] & {
85
+ filter?: SdTableColumnBase<T>['filter'] & {
85
86
  type?: 'split-number';
86
87
  };
87
88
  }
@@ -98,7 +99,7 @@ interface SdTableColumnDate<T = any> extends SdTableColumnBase<T> {
98
99
  field: NestedKeyOf<T>;
99
100
  type: 'date' | 'datetime' | 'time';
100
101
  useBadge?: UseBadgeFunc<T>;
101
- filter?: SdTableColumnBase['filter'] & {
102
+ filter?: SdTableColumnBase<T>['filter'] & {
102
103
  type?: 'daterange' | 'date' | 'split-date';
103
104
  };
104
105
  }
@@ -1146,7 +1147,7 @@ declare class MatPaginatorIntlCro extends MatPaginatorIntl {
1146
1147
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MatPaginatorIntlCro, never>;
1147
1148
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<MatPaginatorIntlCro>;
1148
1149
  }
1149
- declare class SdTable<T = unknown> implements OnInit, AfterViewInit, OnDestroy {
1150
+ declare class SdTable<T = unknown> implements AfterViewInit, OnDestroy {
1150
1151
  #private;
1151
1152
  autoIdInput: _angular_core.InputSignal<string | null | undefined>;
1152
1153
  autoId: _angular_core.Signal<string | undefined>;
@@ -1182,14 +1183,13 @@ declare class SdTable<T = unknown> implements OnInit, AfterViewInit, OnDestroy {
1182
1183
  filterRegister: TableFilterRegister;
1183
1184
  key: string;
1184
1185
  columnOperator: Record<string, Operator>;
1185
- columnFilter?: Record<string, any>;
1186
- cacheValues: Record<string, any[]>;
1186
+ columnFilter?: NonNullable<TableFilterValue['columnFilter']>;
1187
+ cacheValues: Record<string, unknown[]>;
1187
1188
  treeRevision: _angular_core.WritableSignal<number>;
1188
1189
  exporting: _angular_core.WritableSignal<boolean>;
1189
1190
  exportTitle: _angular_core.WritableSignal<string>;
1190
1191
  tableConfiguration: ISdTableConfiguration | null;
1191
1192
  constructor();
1192
- ngOnInit(): void;
1193
1193
  ngAfterViewInit(): void;
1194
1194
  ngOnDestroy(): void;
1195
1195
  getFilterRequest: () => SdTableFilterRequest;
@@ -1229,10 +1229,7 @@ declare class SdTable<T = unknown> implements OnInit, AfterViewInit, OnDestroy {
1229
1229
  groupContext: (header: SdTableItem<T>) => SdTableGroupDefContext<T>;
1230
1230
  rowStyle: (row: SdTableItem<T>, index?: number) => Record<string, string> | null;
1231
1231
  clearFilter: () => void;
1232
- setFilter: (args: {
1233
- columnFilter?: Record<string, any>;
1234
- externalFilter?: Record<string, any>;
1235
- }) => void;
1232
+ setFilter: (args?: Pick<TableFilterValue, "columnFilter" | "externalFilter">) => void;
1236
1233
  get dataItems(): T[];
1237
1234
  get selectedItems(): T[];
1238
1235
  detectChanges: () => void;
@@ -21,7 +21,7 @@ declare class SdView {
21
21
  * why: `input.required()` forces the parent to bind `[display]` (compile error otherwise),
22
22
  * so the component never has to guess a fallback string from `value`.
23
23
  */
24
- display: _angular_core.InputSignal<string | null | undefined>;
24
+ display: _angular_core.InputSignal<unknown>;
25
25
  /** When set, the value renders as a link (`<a [sdHref]>`) instead of plain text. */
26
26
  hyperlink: _angular_core.InputSignal<string | null | undefined>;
27
27
  /** Label template handed down by a parent control (wins over `label` + `#sdLabel`). */
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { AfterViewInit, ElementRef, TemplateRef } from '@angular/core';
2
+ import { AfterViewInit, OnDestroy, ElementRef, TemplateRef } from '@angular/core';
3
3
  import { FormGroup, FormControl, FormGroupDirective, NgForm } from '@angular/forms';
4
4
  import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
5
5
  import { ErrorStateMatcher } from '@angular/material/core';
@@ -15,7 +15,7 @@ declare class SdChipCalendarErrorStateMatcher implements ErrorStateMatcher {
15
15
  constructor(formControl: FormControl);
16
16
  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean;
17
17
  }
18
- declare class SdChipCalendar implements AfterViewInit {
18
+ declare class SdChipCalendar implements AfterViewInit, OnDestroy {
19
19
  #private;
20
20
  menuTrigger: _angular_core.Signal<MatMenuTrigger | undefined>;
21
21
  calendar: _angular_core.Signal<MatCalendar<Date> | undefined>;
@@ -1,5 +1,5 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { PipeTransform, AfterViewInit, ElementRef, TemplateRef } from '@angular/core';
2
+ import { PipeTransform, AfterViewInit, OnDestroy, ElementRef, TemplateRef } from '@angular/core';
3
3
  import { FormGroup, FormControl, FormGroupDirective, NgForm } from '@angular/forms';
4
4
  import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete';
5
5
  import { MatChipInputEvent } from '@angular/material/chips';
@@ -21,7 +21,7 @@ declare class SdChipErrorStateMatcher implements ErrorStateMatcher {
21
21
  constructor(formControl: FormControl);
22
22
  isErrorState(control: FormControl | null, form: FormGroupDirective | NgForm | null): boolean;
23
23
  }
24
- declare class SdChip implements AfterViewInit {
24
+ declare class SdChip implements AfterViewInit, OnDestroy {
25
25
  #private;
26
26
  autoIdInput: _angular_core.InputSignalWithTransform<string | undefined, string | null | undefined>;
27
27
  autoId: _angular_core.Signal<string | undefined>;
@@ -21,6 +21,8 @@ declare class SdDateRange implements OnDestroy, OnInit {
21
21
  private formConfig;
22
22
  autoIdInput: _angular_core.InputSignal<string | null | undefined>;
23
23
  autoId: _angular_core.Signal<string | undefined>;
24
+ fromAutoId: _angular_core.Signal<string | undefined>;
25
+ toAutoId: _angular_core.Signal<string | undefined>;
24
26
  readonly dataDisabled: _angular_core.Signal<"true" | "false">;
25
27
  readonly dataInvalid: _angular_core.Signal<"true" | "false">;
26
28
  readonly dataEmpty: _angular_core.Signal<"true" | "false">;
@@ -19,6 +19,7 @@ declare class SdInputColor {
19
19
  readonly required: _angular_core.InputSignalWithTransform<boolean, unknown>;
20
20
  readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
21
21
  readonly readonly: _angular_core.InputSignalWithTransform<boolean, unknown>;
22
+ readonly hideInlineError: _angular_core.InputSignalWithTransform<boolean, unknown>;
22
23
  /** Display mode — forwarded to the inner `<sd-input>`. `'inline'` = borderless inline-edit; disabled `'inline'` → static. */
23
24
  readonly viewed: _angular_core.InputSignalWithTransform<SdViewed, SdViewedInput>;
24
25
  readonly valueModel: _angular_core.ModelSignal<string | null | undefined>;
@@ -31,7 +32,7 @@ declare class SdInputColor {
31
32
  onPickerChange: (ev: Event) => void;
32
33
  clear: (ev?: Event) => void;
33
34
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdInputColor, never>;
34
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdInputColor, "sd-input-color", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "autoId": { "alias": "autoId"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; }, never, never, true, never>;
35
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdInputColor, "sd-input-color", never, { "label": { "alias": "label"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "appearance": { "alias": "appearance"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "name": { "alias": "name"; "required": false; "isSignal": true; }; "autoId": { "alias": "autoId"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "readonly": { "alias": "readonly"; "required": false; "isSignal": true; }; "hideInlineError": { "alias": "hideInlineError"; "required": false; "isSignal": true; }; "viewed": { "alias": "viewed"; "required": false; "isSignal": true; }; "valueModel": { "alias": "model"; "required": false; "isSignal": true; }; }, { "valueModel": "modelChange"; "sdChange": "sdChange"; }, never, never, true, never>;
35
36
  }
36
37
 
37
38
  export { SD_INPUT_COLOR_HEX_PATTERN, SdInputColor };
@@ -10,10 +10,14 @@ import { Size } from '@sdcorejs/utils/models';
10
10
 
11
11
  interface SdSelectFooterActionContext {
12
12
  searchText: string;
13
+ filteredItems: unknown[];
14
+ selectedItems: unknown[];
13
15
  }
16
+ type SdSelectFooterActionWhenFn = (ctx: SdSelectFooterActionContext) => boolean | Promise<boolean>;
17
+ type SdSelectFooterActionWhen = 'always' | 'empty' | 'has-result' | SdSelectFooterActionWhenFn;
14
18
  declare class SdSelectFooterActionDirective {
15
19
  readonly templateRef: TemplateRef<any>;
16
- readonly when: _angular_core.InputSignal<"always" | "empty" | "has-result">;
20
+ readonly when: _angular_core.InputSignal<SdSelectFooterActionWhen>;
17
21
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdSelectFooterActionDirective, never>;
18
22
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<SdSelectFooterActionDirective, "ng-template[sdSelectFooterAction]", never, { "when": { "alias": "when"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
19
23
  }
@@ -109,6 +113,8 @@ declare class SdSelect<T extends object | string | number = Record<string, unkno
109
113
  readonly searchText: _angular_core.WritableSignal<string>;
110
114
  readonly footerActionContext: Signal<{
111
115
  searchText: string;
116
+ filteredItems: T[];
117
+ selectedItems: T[];
112
118
  }>;
113
119
  readonly visibleFooterActions: Signal<SdSelectFooterActionDirective[]>;
114
120
  normalizedValue: Signal<string | number | boolean | (string | number | boolean)[] | null | undefined>;
@@ -128,6 +134,8 @@ declare class SdSelect<T extends object | string | number = Record<string, unkno
128
134
  clear: ($event?: any) => void;
129
135
  onClick: () => void;
130
136
  focus: () => void;
137
+ /** Clears the panel search/filter input and resets `searchText`. */
138
+ clearSearch: () => void;
131
139
  /** Open the select panel programmatically (anchors to the mat-select trigger). */
132
140
  open: () => void;
133
141
  onOpenedChange: (isOpened: boolean) => void;
@@ -136,4 +144,4 @@ declare class SdSelect<T extends object | string | number = Record<string, unkno
136
144
  }
137
145
 
138
146
  export { SdSelect, SdSelectFooterActionDirective };
139
- export type { SdSelectFooterActionContext };
147
+ export type { SdSelectFooterActionContext, SdSelectFooterActionWhen, SdSelectFooterActionWhenFn };
@@ -16,14 +16,14 @@ interface SdAuthInfo<T = any> {
16
16
 
17
17
  declare class SdAuthService {
18
18
  #private;
19
- private authConfiguration;
20
19
  getAuthInfo?: Signal<SdAuthInfo | undefined>;
21
20
  signout$?: Observable<void>;
22
21
  changePassword$?: Observable<void>;
23
- constructor(authConfiguration: ISdAuthConfiguration);
22
+ private readonly authConfiguration;
23
+ constructor();
24
24
  signout: () => void;
25
25
  changePassword: () => void;
26
- static ɵfac: i0.ɵɵFactoryDeclaration<SdAuthService, [{ optional: true; }]>;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdAuthService, never>;
27
27
  static ɵprov: i0.ɵɵInjectableDeclaration<SdAuthService>;
28
28
  }
29
29
 
@@ -43,20 +43,18 @@ interface IAuthConfigurationGuard {
43
43
  }
44
44
 
45
45
  declare class SdAuthGuard implements CanActivate {
46
- private authConfiguration;
46
+ private readonly authConfiguration;
47
47
  protected readonly router: Router;
48
- constructor(authConfiguration: ISdAuthConfiguration, router: Router);
49
48
  canActivate: (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => _angular_router.MaybeAsync<_angular_router.GuardResult>;
50
- static ɵfac: i0.ɵɵFactoryDeclaration<SdAuthGuard, [{ optional: true; }, null]>;
49
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdAuthGuard, never>;
51
50
  static ɵprov: i0.ɵɵInjectableDeclaration<SdAuthGuard>;
52
51
  }
53
52
 
54
53
  declare class SdPortalGuard implements CanActivate {
55
- private authConfiguration;
54
+ private readonly authConfiguration;
56
55
  protected readonly router: Router;
57
- constructor(authConfiguration: ISdAuthConfiguration, router: Router);
58
56
  canActivate: (route: ActivatedRouteSnapshot, state: RouterStateSnapshot) => _angular_router.MaybeAsync<_angular_router.GuardResult>;
59
- static ɵfac: i0.ɵɵFactoryDeclaration<SdPortalGuard, [{ optional: true; }, null]>;
57
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdPortalGuard, never>;
60
58
  static ɵprov: i0.ɵɵInjectableDeclaration<SdPortalGuard>;
61
59
  }
62
60
 
@@ -18,9 +18,9 @@ import { CanActivate, CanActivateChild, ActivatedRouteSnapshot, RouterStateSnaps
18
18
  interface ISdPermissionConfiguration {
19
19
  /**
20
20
  * Khóa định danh cấu hình.
21
- * Dùng để phân biệt khi hệ thống mở rộng theo nhiều profile permission.
22
- *
23
- * Lưu ý: `undefined` cũng được xem là một key hợp lệ (cấu hình mặc định).
21
+ * Dùng để phân biệt khi hệ thống mở rộng theo nhiều profile permission.
22
+ *
23
+ * Lưu ý: `undefined` cũng được xem là một key hợp lệ (cấu hình mặc định).
24
24
  */
25
25
  key?: string;
26
26
  /**
@@ -88,9 +88,8 @@ declare class SdPermissionDirective {
88
88
 
89
89
  declare class SdPermissionGuard implements CanActivate, CanActivateChild {
90
90
  #private;
91
- private configuration;
92
- private permissionService;
93
- constructor(configuration: ISdPermissionConfiguration | ISdPermissionConfiguration[], permissionService: SdPermissionService);
91
+ private readonly configuration;
92
+ private readonly permissionService;
94
93
  canActivate: (next: ActivatedRouteSnapshot, state: RouterStateSnapshot) => Promise<boolean>;
95
94
  canActivateChild: (activatedRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot) => Promise<boolean>;
96
95
  static ɵfac: i0.ɵɵFactoryDeclaration<SdPermissionGuard, never>;
@@ -1,15 +1,27 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { PipeTransform } from '@angular/core';
3
- import { ISdCoreConfiguration } from '@sdcorejs/angular/configurations';
4
3
  import * as _angular_platform_browser from '@angular/platform-browser';
5
4
  import { DomSanitizer } from '@angular/platform-browser';
6
5
  import { Observable } from 'rxjs';
7
6
 
7
+ declare class SdFormatDatePipe implements PipeTransform {
8
+ transform(value: unknown, format?: string): string | null;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdFormatDatePipe, never>;
10
+ static ɵpipe: i0.ɵɵPipeDeclaration<SdFormatDatePipe, "sdFormatDate", true>;
11
+ static ɵprov: i0.ɵɵInjectableDeclaration<SdFormatDatePipe>;
12
+ }
13
+
14
+ declare class SdFormatDatetimePipe implements PipeTransform {
15
+ transform(value: unknown, format?: string): string | null;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdFormatDatetimePipe, never>;
17
+ static ɵpipe: i0.ɵɵPipeDeclaration<SdFormatDatetimePipe, "sdFormatDatetime", true>;
18
+ static ɵprov: i0.ɵɵInjectableDeclaration<SdFormatDatetimePipe>;
19
+ }
20
+
8
21
  declare class SdFormatNumberPipe implements PipeTransform {
9
22
  private readonly coreConfiguration;
10
- constructor(coreConfiguration: ISdCoreConfiguration | undefined);
11
23
  transform(value: any, digits?: number, format?: '1,234,567.89' | '1.234.567,89'): string | null;
12
- static ɵfac: i0.ɵɵFactoryDeclaration<SdFormatNumberPipe, [{ optional: true; }]>;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdFormatNumberPipe, never>;
13
25
  static ɵpipe: i0.ɵɵPipeDeclaration<SdFormatNumberPipe, "sdFormatNumber", true>;
14
26
  static ɵprov: i0.ɵɵInjectableDeclaration<SdFormatNumberPipe>;
15
27
  }
@@ -40,4 +52,10 @@ declare class SdEmptyPipe implements PipeTransform {
40
52
  static ɵpipe: i0.ɵɵPipeDeclaration<SdEmptyPipe, "sdEmpty", true>;
41
53
  }
42
54
 
43
- export { SdEmptyPipe, SdFormatNumberPipe, SdSafeHtmlPipe, SdTimeDifferentPipe };
55
+ declare class SdViewPipe implements PipeTransform {
56
+ transform(value: unknown): string;
57
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdViewPipe, never>;
58
+ static ɵpipe: i0.ɵɵPipeDeclaration<SdViewPipe, "sdView", true>;
59
+ }
60
+
61
+ export { SdEmptyPipe, SdFormatDatePipe, SdFormatDatetimePipe, SdFormatNumberPipe, SdSafeHtmlPipe, SdTimeDifferentPipe, SdViewPipe };
@@ -34,12 +34,12 @@ interface DialogData {
34
34
  };
35
35
  }
36
36
  declare class DialogConfirmComponent {
37
- dialogRef: MatDialogRef<DialogConfirmComponent>;
38
- data: DialogData;
39
37
  value: any;
40
38
  required: boolean;
41
39
  id: string;
42
- constructor(dialogRef: MatDialogRef<DialogConfirmComponent>, data: DialogData);
40
+ readonly dialogRef: MatDialogRef<any, any>;
41
+ readonly data: DialogData;
42
+ constructor();
43
43
  onCancel: () => void;
44
44
  onAccept: () => void;
45
45
  static ɵfac: i0.ɵɵFactoryDeclaration<DialogConfirmComponent, never>;
@@ -1,12 +1,11 @@
1
- import { ISdCoreConfiguration } from '@sdcorejs/angular/configurations';
2
1
  import * as i0 from '@angular/core';
3
2
 
4
3
  declare class SdLicenseService {
5
4
  #private;
6
5
  private readonly coreConfiguration;
7
- constructor(coreConfiguration: ISdCoreConfiguration | undefined);
6
+ constructor();
8
7
  enforceLicense: () => void;
9
- static ɵfac: i0.ɵɵFactoryDeclaration<SdLicenseService, [{ optional: true; }]>;
8
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdLicenseService, never>;
10
9
  static ɵprov: i0.ɵɵInjectableDeclaration<SdLicenseService>;
11
10
  }
12
11
 
@@ -1,5 +1,4 @@
1
1
  import * as i0 from '@angular/core';
2
- import { ApplicationRef, EnvironmentInjector } from '@angular/core';
3
2
 
4
3
  type ToastType = 'success' | 'info' | 'warning' | 'error';
5
4
  interface ToastData {
@@ -37,11 +36,11 @@ interface NotifyOption {
37
36
 
38
37
  declare class SdNotifyService {
39
38
  #private;
40
- private appRef;
41
- private injector;
42
- private document;
43
39
  readonly toasts: i0.WritableSignal<ToastData[]>;
44
- constructor(appRef: ApplicationRef, injector: EnvironmentInjector, document: Document);
40
+ private readonly appRef;
41
+ private readonly injector;
42
+ private readonly document;
43
+ constructor();
45
44
  success(message: string, option?: NotifyOption): void;
46
45
  info(message: string, option?: NotifyOption): void;
47
46
  warning(message: string | string[], option?: NotifyOption): void;
@@ -23,10 +23,9 @@ declare const SD_STORAGE_CONFIG: InjectionToken<ISdStorageConfiguration>;
23
23
 
24
24
  declare class SdStorageService {
25
25
  #private;
26
- private configuration;
27
- constructor(configuration: ISdStorageConfiguration);
26
+ private readonly configuration;
28
27
  create<T = any>(key: string | object, option?: SdStorageOption<T>): SdStorage<T>;
29
- static ɵfac: i0.ɵɵFactoryDeclaration<SdStorageService, [{ optional: true; }]>;
28
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdStorageService, never>;
30
29
  static ɵprov: i0.ɵɵInjectableDeclaration<SdStorageService>;
31
30
  }
32
31
 
@@ -84,4 +84,12 @@ declare const hslToHex: (h: number, s: number, l: number) => string;
84
84
  /** @deprecated Use {@link ColorUtilities.rgbToHex} from `@sdcorejs/utils/fns` instead */
85
85
  declare const rgbToHex: (r: number, g: number, b: number) => string;
86
86
 
87
- export { SdUtilities, StringUtilities, hslToHex, rgbToHex };
87
+ type PlainObject = Record<PropertyKey, unknown>;
88
+ declare const ObjectUtilities: {
89
+ isPlainObject: (value: unknown) => value is PlainObject;
90
+ clone: <T>(value: T) => T;
91
+ merge: <T extends PlainObject, U extends PlainObject>(target: T, source: U) => T & U;
92
+ deepMerge: <T extends PlainObject>(...sources: T[]) => T;
93
+ };
94
+
95
+ export { ObjectUtilities, SdUtilities, StringUtilities, hslToHex, rgbToHex };