@sdcorejs/angular 21.1.2 → 21.1.4

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 (177) hide show
  1. package/README.md +127 -807
  2. package/fesm2022/sdcorejs-angular-components-anchor.mjs +14 -14
  3. package/fesm2022/sdcorejs-angular-components-anchor.mjs.map +1 -1
  4. package/fesm2022/sdcorejs-angular-components-audit-diff.mjs +332 -0
  5. package/fesm2022/sdcorejs-angular-components-audit-diff.mjs.map +1 -0
  6. package/fesm2022/sdcorejs-angular-components-badge.mjs +1 -0
  7. package/fesm2022/sdcorejs-angular-components-badge.mjs.map +1 -1
  8. package/fesm2022/sdcorejs-angular-components-breadcrumb.mjs +121 -0
  9. package/fesm2022/sdcorejs-angular-components-breadcrumb.mjs.map +1 -0
  10. package/fesm2022/sdcorejs-angular-components-data-state.mjs +68 -0
  11. package/fesm2022/sdcorejs-angular-components-data-state.mjs.map +1 -0
  12. package/fesm2022/sdcorejs-angular-components-document-builder.mjs +18 -23
  13. package/fesm2022/sdcorejs-angular-components-document-builder.mjs.map +1 -1
  14. package/fesm2022/sdcorejs-angular-components-editor.mjs +6 -4
  15. package/fesm2022/sdcorejs-angular-components-editor.mjs.map +1 -1
  16. package/fesm2022/sdcorejs-angular-components-form-generic.mjs +633 -886
  17. package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
  18. package/fesm2022/sdcorejs-angular-components-import-excel.mjs +26 -41
  19. package/fesm2022/sdcorejs-angular-components-import-excel.mjs.map +1 -1
  20. package/fesm2022/sdcorejs-angular-components-job-progress.mjs +97 -0
  21. package/fesm2022/sdcorejs-angular-components-job-progress.mjs.map +1 -0
  22. package/fesm2022/sdcorejs-angular-components-mini-editor.mjs +10 -20
  23. package/fesm2022/sdcorejs-angular-components-mini-editor.mjs.map +1 -1
  24. package/fesm2022/sdcorejs-angular-components-modal.mjs +61 -4
  25. package/fesm2022/sdcorejs-angular-components-modal.mjs.map +1 -1
  26. package/fesm2022/sdcorejs-angular-components-preview.mjs +1438 -218
  27. package/fesm2022/sdcorejs-angular-components-preview.mjs.map +1 -1
  28. package/fesm2022/sdcorejs-angular-components-query-bar.mjs +9 -17
  29. package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
  30. package/fesm2022/sdcorejs-angular-components-query-builder.mjs +1 -1
  31. package/fesm2022/sdcorejs-angular-components-query-builder.mjs.map +1 -1
  32. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs +39 -2
  33. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs.map +1 -1
  34. package/fesm2022/sdcorejs-angular-components-tab-router.mjs +76 -52
  35. package/fesm2022/sdcorejs-angular-components-tab-router.mjs.map +1 -1
  36. package/fesm2022/sdcorejs-angular-components-tab.mjs +48 -4
  37. package/fesm2022/sdcorejs-angular-components-tab.mjs.map +1 -1
  38. package/fesm2022/sdcorejs-angular-components-table.mjs +123 -89
  39. package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
  40. package/fesm2022/sdcorejs-angular-components-tree.mjs +188 -18
  41. package/fesm2022/sdcorejs-angular-components-tree.mjs.map +1 -1
  42. package/fesm2022/sdcorejs-angular-components-upload-file.mjs +17 -23
  43. package/fesm2022/sdcorejs-angular-components-upload-file.mjs.map +1 -1
  44. package/fesm2022/sdcorejs-angular-components.mjs +4 -0
  45. package/fesm2022/sdcorejs-angular-components.mjs.map +1 -1
  46. package/fesm2022/sdcorejs-angular-directives.mjs +29 -41
  47. package/fesm2022/sdcorejs-angular-directives.mjs.map +1 -1
  48. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +9 -8
  49. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
  50. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs +20 -71
  51. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs.map +1 -1
  52. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs +8 -4
  53. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs.map +1 -1
  54. package/fesm2022/sdcorejs-angular-forms-chip.mjs +8 -4
  55. package/fesm2022/sdcorejs-angular-forms-chip.mjs.map +1 -1
  56. package/fesm2022/sdcorejs-angular-forms-date-range.mjs +18 -14
  57. package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
  58. package/fesm2022/sdcorejs-angular-forms-date.mjs +48 -70
  59. package/fesm2022/sdcorejs-angular-forms-date.mjs.map +1 -1
  60. package/fesm2022/sdcorejs-angular-forms-datetime.mjs +62 -528
  61. package/fesm2022/sdcorejs-angular-forms-datetime.mjs.map +1 -1
  62. package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs +384 -0
  63. package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs.map +1 -0
  64. package/fesm2022/sdcorejs-angular-forms-input-color.mjs +5 -3
  65. package/fesm2022/sdcorejs-angular-forms-input-color.mjs.map +1 -1
  66. package/fesm2022/sdcorejs-angular-forms-input-number.mjs +16 -11
  67. package/fesm2022/sdcorejs-angular-forms-input-number.mjs.map +1 -1
  68. package/fesm2022/sdcorejs-angular-forms-input.mjs +297 -59
  69. package/fesm2022/sdcorejs-angular-forms-input.mjs.map +1 -1
  70. package/fesm2022/sdcorejs-angular-forms-models.mjs +155 -2
  71. package/fesm2022/sdcorejs-angular-forms-models.mjs.map +1 -1
  72. package/fesm2022/sdcorejs-angular-forms-radio.mjs +44 -66
  73. package/fesm2022/sdcorejs-angular-forms-radio.mjs.map +1 -1
  74. package/fesm2022/sdcorejs-angular-forms-select.mjs +8 -21
  75. package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
  76. package/fesm2022/sdcorejs-angular-forms-switch.mjs +19 -64
  77. package/fesm2022/sdcorejs-angular-forms-switch.mjs.map +1 -1
  78. package/fesm2022/sdcorejs-angular-forms-textarea.mjs +8 -6
  79. package/fesm2022/sdcorejs-angular-forms-textarea.mjs.map +1 -1
  80. package/fesm2022/sdcorejs-angular-forms-time-range.mjs +277 -0
  81. package/fesm2022/sdcorejs-angular-forms-time-range.mjs.map +1 -0
  82. package/fesm2022/sdcorejs-angular-forms-time.mjs +307 -0
  83. package/fesm2022/sdcorejs-angular-forms-time.mjs.map +1 -0
  84. package/fesm2022/sdcorejs-angular-forms-tree-select.mjs +210 -0
  85. package/fesm2022/sdcorejs-angular-forms-tree-select.mjs.map +1 -0
  86. package/fesm2022/sdcorejs-angular-forms.mjs +73 -4
  87. package/fesm2022/sdcorejs-angular-forms.mjs.map +1 -1
  88. package/fesm2022/sdcorejs-angular-i18n.mjs +355 -10
  89. package/fesm2022/sdcorejs-angular-i18n.mjs.map +1 -1
  90. package/fesm2022/sdcorejs-angular-interceptors.mjs +12 -17
  91. package/fesm2022/sdcorejs-angular-interceptors.mjs.map +1 -1
  92. package/fesm2022/sdcorejs-angular-modules-icon.mjs.map +1 -1
  93. package/fesm2022/sdcorejs-angular-modules-layout.mjs +861 -80
  94. package/fesm2022/sdcorejs-angular-modules-layout.mjs.map +1 -1
  95. package/fesm2022/sdcorejs-angular-modules.mjs +0 -1
  96. package/fesm2022/sdcorejs-angular-modules.mjs.map +1 -1
  97. package/fesm2022/sdcorejs-angular-pipes.mjs +5 -7
  98. package/fesm2022/sdcorejs-angular-pipes.mjs.map +1 -1
  99. package/fesm2022/sdcorejs-angular-services-api.mjs +407 -137
  100. package/fesm2022/sdcorejs-angular-services-api.mjs.map +1 -1
  101. package/fesm2022/sdcorejs-angular-services-cache.mjs +515 -105
  102. package/fesm2022/sdcorejs-angular-services-cache.mjs.map +1 -1
  103. package/fesm2022/sdcorejs-angular-services-confirm.mjs +5 -7
  104. package/fesm2022/sdcorejs-angular-services-confirm.mjs.map +1 -1
  105. package/fesm2022/sdcorejs-angular-services-docx.mjs +7 -10
  106. package/fesm2022/sdcorejs-angular-services-docx.mjs.map +1 -1
  107. package/fesm2022/sdcorejs-angular-services-loading.mjs +340 -66
  108. package/fesm2022/sdcorejs-angular-services-loading.mjs.map +1 -1
  109. package/fesm2022/sdcorejs-angular-services-notify.mjs +7 -10
  110. package/fesm2022/sdcorejs-angular-services-notify.mjs.map +1 -1
  111. package/fesm2022/sdcorejs-angular-services-persistence.mjs +899 -0
  112. package/fesm2022/sdcorejs-angular-services-persistence.mjs.map +1 -0
  113. package/fesm2022/sdcorejs-angular-services-storage.mjs +324 -122
  114. package/fesm2022/sdcorejs-angular-services-storage.mjs.map +1 -1
  115. package/fesm2022/sdcorejs-angular-services-task.mjs +389 -0
  116. package/fesm2022/sdcorejs-angular-services-task.mjs.map +1 -0
  117. package/fesm2022/sdcorejs-angular-services-unsaved-changes.mjs +255 -0
  118. package/fesm2022/sdcorejs-angular-services-unsaved-changes.mjs.map +1 -0
  119. package/fesm2022/sdcorejs-angular-services-viewport.mjs +76 -0
  120. package/fesm2022/sdcorejs-angular-services-viewport.mjs.map +1 -0
  121. package/fesm2022/sdcorejs-angular-services.mjs +4 -0
  122. package/fesm2022/sdcorejs-angular-services.mjs.map +1 -1
  123. package/package.json +50 -5
  124. package/types/sdcorejs-angular-components-audit-diff.d.ts +74 -0
  125. package/types/sdcorejs-angular-components-badge.d.ts +1 -1
  126. package/types/sdcorejs-angular-components-breadcrumb.d.ts +53 -0
  127. package/types/sdcorejs-angular-components-data-state.d.ts +44 -0
  128. package/types/sdcorejs-angular-components-document-builder.d.ts +5 -5
  129. package/types/sdcorejs-angular-components-form-generic.d.ts +89 -103
  130. package/types/sdcorejs-angular-components-import-excel.d.ts +4 -14
  131. package/types/sdcorejs-angular-components-job-progress.d.ts +38 -0
  132. package/types/sdcorejs-angular-components-mini-editor.d.ts +9 -9
  133. package/types/sdcorejs-angular-components-modal.d.ts +7 -1
  134. package/types/sdcorejs-angular-components-preview.d.ts +181 -28
  135. package/types/sdcorejs-angular-components-side-drawer.d.ts +7 -1
  136. package/types/sdcorejs-angular-components-tab.d.ts +9 -2
  137. package/types/sdcorejs-angular-components-table.d.ts +8 -7
  138. package/types/sdcorejs-angular-components-tree.d.ts +24 -2
  139. package/types/sdcorejs-angular-components-upload-file.d.ts +5 -4
  140. package/types/sdcorejs-angular-components.d.ts +4 -0
  141. package/types/sdcorejs-angular-directives.d.ts +10 -8
  142. package/types/sdcorejs-angular-forms-autocomplete.d.ts +3 -4
  143. package/types/sdcorejs-angular-forms-checkbox.d.ts +4 -8
  144. package/types/sdcorejs-angular-forms-date-range.d.ts +6 -7
  145. package/types/sdcorejs-angular-forms-date.d.ts +3 -3
  146. package/types/sdcorejs-angular-forms-datetime.d.ts +3 -3
  147. package/types/sdcorejs-angular-forms-entity-picker.d.ts +128 -0
  148. package/types/sdcorejs-angular-forms-input-color.d.ts +3 -1
  149. package/types/sdcorejs-angular-forms-input-number.d.ts +4 -2
  150. package/types/sdcorejs-angular-forms-input.d.ts +76 -11
  151. package/types/sdcorejs-angular-forms-models.d.ts +86 -3
  152. package/types/sdcorejs-angular-forms-radio.d.ts +12 -8
  153. package/types/sdcorejs-angular-forms-switch.d.ts +4 -7
  154. package/types/sdcorejs-angular-forms-time-range.d.ts +98 -0
  155. package/types/sdcorejs-angular-forms-time.d.ts +117 -0
  156. package/types/sdcorejs-angular-forms-tree-select.d.ts +76 -0
  157. package/types/sdcorejs-angular-forms.d.ts +15 -5
  158. package/types/sdcorejs-angular-i18n.d.ts +68 -2
  159. package/types/sdcorejs-angular-interceptors.d.ts +5 -6
  160. package/types/sdcorejs-angular-modules-icon.d.ts +2 -3
  161. package/types/sdcorejs-angular-modules-layout.d.ts +288 -15
  162. package/types/sdcorejs-angular-modules.d.ts +0 -1
  163. package/types/sdcorejs-angular-pipes.d.ts +2 -2
  164. package/types/sdcorejs-angular-services-api.d.ts +68 -24
  165. package/types/sdcorejs-angular-services-cache.d.ts +52 -16
  166. package/types/sdcorejs-angular-services-confirm.d.ts +3 -2
  167. package/types/sdcorejs-angular-services-docx.d.ts +2 -3
  168. package/types/sdcorejs-angular-services-loading.d.ts +16 -8
  169. package/types/sdcorejs-angular-services-persistence.d.ts +159 -0
  170. package/types/sdcorejs-angular-services-storage.d.ts +26 -8
  171. package/types/sdcorejs-angular-services-task.d.ts +104 -0
  172. package/types/sdcorejs-angular-services-unsaved-changes.d.ts +83 -0
  173. package/types/sdcorejs-angular-services-viewport.d.ts +42 -0
  174. package/types/sdcorejs-angular-services.d.ts +4 -0
  175. package/fesm2022/sdcorejs-angular-modules-authom.mjs +0 -360
  176. package/fesm2022/sdcorejs-angular-modules-authom.mjs.map +0 -1
  177. package/types/sdcorejs-angular-modules-authom.d.ts +0 -70
@@ -104,6 +104,8 @@ declare const EN_MESSAGES: {
104
104
  readonly 'core.form.input.maxlength': "Maximum characters: {max}";
105
105
  readonly 'core.form.input.invalid-pattern': "Invalid format";
106
106
  readonly 'core.form.input.exceeded': "Exceeded maximum characters";
107
+ readonly 'core.form.input.mask-incomplete': "The value is incomplete";
108
+ readonly 'core.form.input.mask-invalid': "The value contains invalid characters";
107
109
  readonly 'core.form.autocomplete.required': "Please enter information";
108
110
  readonly 'core.form.chip.required': "Please enter information";
109
111
  readonly 'core.form.chip.minlength': "Please enter at least {min} values";
@@ -127,6 +129,62 @@ declare const EN_MESSAGES: {
127
129
  readonly 'core.form.datetime.invalid-format': "Invalid format";
128
130
  readonly 'core.form.datetime.now': "Now";
129
131
  readonly 'core.form.datetime.confirm': "Confirm";
132
+ readonly 'core.form.entity-picker.placeholder': "Select an entity";
133
+ readonly 'core.form.entity-picker.modal-title': "Select entity";
134
+ readonly 'core.form.entity-picker.value': "Value";
135
+ readonly 'core.form.entity-picker.clear': "Clear selection";
136
+ readonly 'core.form.entity-picker.add': "Add";
137
+ readonly 'core.form.entity-picker.cancel': "Cancel";
138
+ readonly 'core.form.entity-picker.apply': "Apply";
139
+ readonly 'core.form.tree-select.placeholder': "Select a tree item";
140
+ readonly 'core.form.tree-select.modal-title': "Select tree item";
141
+ readonly 'core.form.tree-select.clear': "Clear selection";
142
+ readonly 'core.form.tree-select.search': "Search tree";
143
+ readonly 'core.form.tree-select.cancel': "Cancel";
144
+ readonly 'core.form.tree-select.apply': "Apply";
145
+ readonly 'core.component.tree.retry': "Retry";
146
+ readonly 'core.service.unsaved-changes.message': "You have unsaved changes. Discard them and continue?";
147
+ readonly 'core.component.job-progress.status.idle': "Ready";
148
+ readonly 'core.component.job-progress.status.queued': "Queued";
149
+ readonly 'core.component.job-progress.status.running': "In progress";
150
+ readonly 'core.component.job-progress.status.succeeded': "Completed";
151
+ readonly 'core.component.job-progress.status.failed': "Failed";
152
+ readonly 'core.component.job-progress.status.cancelled': "Cancelled";
153
+ readonly 'core.component.job-progress.cancel': "Cancel";
154
+ readonly 'core.component.job-progress.retry': "Retry";
155
+ readonly 'core.component.audit-diff.label': "Audit changes";
156
+ readonly 'core.component.audit-diff.field': "Field";
157
+ readonly 'core.component.audit-diff.before': "Before";
158
+ readonly 'core.component.audit-diff.after': "After";
159
+ readonly 'core.component.audit-diff.empty': "No changes";
160
+ readonly 'core.component.audit-diff.kind.added': "Added";
161
+ readonly 'core.component.audit-diff.kind.removed': "Removed";
162
+ readonly 'core.component.audit-diff.kind.changed': "Changed";
163
+ readonly 'core.component.audit-diff.kind.unchanged': "Unchanged";
164
+ readonly 'core.component.audit-diff.value.label': "Value";
165
+ readonly 'core.component.audit-diff.value.not-set': "Not set";
166
+ readonly 'core.component.audit-diff.value.undefined': "Undefined";
167
+ readonly 'core.component.audit-diff.value.null': "Null";
168
+ readonly 'core.component.audit-diff.value.true': "Yes";
169
+ readonly 'core.component.audit-diff.value.false': "No";
170
+ readonly 'core.form.time.required': "Please enter a time";
171
+ readonly 'core.form.time.invalid': "Enter a valid time in HH:mm format";
172
+ readonly 'core.form.time.min': "Time must not be earlier than {min}";
173
+ readonly 'core.form.time.max': "Time must not be later than {max}";
174
+ readonly 'core.form.time.step': "Time must align to a {step}-minute interval";
175
+ readonly 'core.form.time.open-picker': "Open time picker";
176
+ readonly 'core.form.time.confirm': "Confirm";
177
+ readonly 'core.form.time.clear': "Clear time";
178
+ readonly 'core.form.time-range.required': "Please enter both start and end times";
179
+ readonly 'core.form.time-range.incomplete': "Enter both times or enable an open-ended range";
180
+ readonly 'core.form.time-range.range': "Start time must not be later than end time";
181
+ readonly 'core.form.time-range.invalid': "Enter valid times in HH:mm format";
182
+ readonly 'core.form.time-range.min': "Times must not be earlier than {min}";
183
+ readonly 'core.form.time-range.max': "Times must not be later than {max}";
184
+ readonly 'core.form.time-range.step': "Times must align to a {step}-minute interval";
185
+ readonly 'core.form.time-range.from': "From";
186
+ readonly 'core.form.time-range.to': "To";
187
+ readonly 'core.form.time-range.clear': "Clear time range";
130
188
  readonly 'core.form.time-spinner.hour': "Hour";
131
189
  readonly 'core.form.time-spinner.minute': "Minute";
132
190
  readonly 'core.form.time-spinner.second': "Second";
@@ -256,6 +314,15 @@ declare const EN_MESSAGES: {
256
314
  readonly 'core.component.form-builder.show-less': "Show less";
257
315
  readonly 'core.component.inform.show-more': "Show more";
258
316
  readonly 'core.component.inform.show-less': "Show less";
317
+ readonly 'core.component.data-state.loading.title': "Loading";
318
+ readonly 'core.component.data-state.loading.message': "Please wait while the data is being loaded.";
319
+ readonly 'core.component.data-state.empty.title': "No data";
320
+ readonly 'core.component.data-state.empty.message': "There is no data to display yet.";
321
+ readonly 'core.component.data-state.error.title': "Unable to load data";
322
+ readonly 'core.component.data-state.error.message': "An error occurred. Please try again.";
323
+ readonly 'core.component.data-state.forbidden.title': "Access denied";
324
+ readonly 'core.component.data-state.forbidden.message': "You do not have permission to view this content.";
325
+ readonly 'core.component.data-state.retry': "Try again";
259
326
  readonly 'core.component.form-builder.row-overflow': "Cannot move to this row because the total size exceeds 12 columns";
260
327
  readonly 'core.component.form-builder.upload-source.all': "All";
261
328
  readonly 'core.component.form-builder.upload-source.photo-library': "Pick from library";
@@ -370,14 +437,13 @@ declare const EN_MESSAGES: {
370
437
  readonly 'core.component.preview-pdf.error.unknown.body': "Please retry or download the original file to view it.";
371
438
  readonly 'core.component.preview-pdf.error.retry': "Retry";
372
439
  readonly 'core.component.preview-pdf.error.download-raw': "Download original";
373
- readonly 'core.component.preview-pdf.deferred.outline': "Outline will be added in a future version.";
374
- readonly 'core.component.preview-pdf.deferred.search': "Search will be added in a future version.";
375
440
  readonly 'core.component.preview-pdf.search': "Search";
376
441
  readonly 'core.component.preview-pdf.search-placeholder': "Search in document...";
377
442
  readonly 'core.component.preview-pdf.search-case': "Match case";
378
443
  readonly 'core.component.preview-pdf.search-whole': "Whole word";
379
444
  readonly 'core.component.preview-pdf.search-no-results': "No results";
380
445
  readonly 'core.component.preview-pdf.search-results-count': "{count} results for \"{term}\"";
446
+ readonly 'core.component.preview-pdf.search-truncated': "Showing the first {count} matches. Refine your search to see fewer results.";
381
447
  readonly 'core.component.preview-pdf.search-prev': "Previous match";
382
448
  readonly 'core.component.preview-pdf.search-next': "Next match";
383
449
  readonly 'core.component.preview-pdf.search-close': "Close search";
@@ -1,15 +1,13 @@
1
1
  import { HttpInterceptor, HttpRequest, HttpHandler, HttpEvent } from '@angular/common/http';
2
- import * as i0 from '@angular/core';
3
- import { Injector } from '@angular/core';
4
- import { MatSnackBar } from '@angular/material/snack-bar';
5
2
  import { Observable } from 'rxjs';
6
- import { SdAuthService } from '@sdcorejs/angular/modules';
3
+ import * as i0 from '@angular/core';
7
4
 
8
5
  declare class SdNoInternetInterceptor implements HttpInterceptor {
9
6
  #private;
10
7
  private snackBar;
11
8
  private injector;
12
- constructor(snackBar: MatSnackBar, injector: Injector);
9
+ /** Inserted by Angular inject() migration for backwards compatibility */
10
+ constructor(...args: unknown[]);
13
11
  intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>>;
14
12
  static ɵfac: i0.ɵɵFactoryDeclaration<SdNoInternetInterceptor, never>;
15
13
  static ɵprov: i0.ɵɵInjectableDeclaration<SdNoInternetInterceptor>;
@@ -18,7 +16,8 @@ declare class SdNoInternetInterceptor implements HttpInterceptor {
18
16
  declare class SdUnauthorizedInterceptor implements HttpInterceptor {
19
17
  #private;
20
18
  private authService;
21
- constructor(authService: SdAuthService);
19
+ /** Inserted by Angular inject() migration for backwards compatibility */
20
+ constructor(...args: unknown[]);
22
21
  intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>>;
23
22
  static ɵfac: i0.ɵɵFactoryDeclaration<SdUnauthorizedInterceptor, never>;
24
23
  static ɵprov: i0.ɵɵInjectableDeclaration<SdUnauthorizedInterceptor>;
@@ -35,8 +35,7 @@ interface ISdIconConfiguration {
35
35
  /**
36
36
  * Cấu hình đã resolve đầy đủ để component không phải tự xử lý fallback nhiều lần.
37
37
  */
38
- interface ISdIconResolvedConfiguration extends Required<Omit<ISdIconConfiguration, 'lucideIcons'>> {
39
- }
38
+ type ISdIconResolvedConfiguration = Required<Omit<ISdIconConfiguration, 'lucideIcons'>>;
40
39
  /**
41
40
  * Quy đổi token `Size` chung của SDCoreJS sang pixel cho icon.
42
41
  */
@@ -160,7 +159,7 @@ declare class SdIcon {
160
159
  *
161
160
  * Token có factory mặc định để `SdIcon` vẫn chạy khi app chưa gọi `provideSdIcon`.
162
161
  */
163
- declare const SD_ICON_CONFIGURATION: InjectionToken<ISdIconResolvedConfiguration>;
162
+ declare const SD_ICON_CONFIGURATION: InjectionToken<Required<Omit<ISdIconConfiguration, "lucideIcons">>>;
164
163
  /**
165
164
  * Đăng ký cấu hình icon Core UI ở app-level.
166
165
  *
@@ -1,9 +1,10 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { InjectionToken } from '@angular/core';
2
+ import { InjectionToken, PipeTransform } from '@angular/core';
3
3
  import * as i1$1 from '@angular/common';
4
4
  import * as i1 from '@angular/router';
5
5
  import { Params } from '@angular/router';
6
- import { SdStorage, SdStorageService } from '@sdcorejs/angular/services';
6
+ import { SdStorage } from '@sdcorejs/angular/services';
7
+ import { SdViewport } from '@sdcorejs/angular/services/viewport';
7
8
  import * as _sdcorejs_angular_modules_layout from '@sdcorejs/angular/modules/layout';
8
9
  import { MaybeAsync } from '@sdcorejs/utils/models';
9
10
 
@@ -56,18 +57,43 @@ interface SdLayoutChildrenMenu {
56
57
  }
57
58
 
58
59
  declare class SdLayoutStorageService {
59
- private sdStorageService;
60
- isShowSidebar: SdStorage<boolean>;
61
- menuLockStatus: SdStorage<boolean>;
62
- lastActiveMenuGroupId: SdStorage<string>;
63
- pinnedMenuGroup: SdStorage<SdLayoutChildrenMenu>;
64
- constructor(sdStorageService: SdStorageService);
60
+ #private;
61
+ readonly isShowSidebar: SdStorage<boolean>;
62
+ readonly menuLockStatus: SdStorage<boolean>;
63
+ readonly lastActiveMenuGroupId: SdStorage<string>;
64
+ readonly pinnedMenuGroup: SdStorage<SdLayoutChildrenMenu>;
65
+ readonly pinnedMenuKeys: SdStorage<string[]>;
66
+ readonly recentMenuKeys: SdStorage<string[]>;
67
+ readonly versionStates: SdStorage<Record<string, SdLayoutVersionState>>;
68
+ readPinnedMenuKeys(menus: SdLayoutMenu[]): string[];
69
+ writePinnedMenuKeys(keys: string[]): void;
70
+ readRecentMenuKeys(menus: SdLayoutMenu[], maximum?: number): string[];
71
+ writeRecentMenuKeys(keys: string[]): void;
72
+ readVersionState(version: 1 | 2 | 3): SdLayoutVersionState;
73
+ patchVersionState(version: 1 | 2 | 3, patch: SdLayoutVersionState): SdLayoutVersionState;
65
74
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdLayoutStorageService, never>;
66
75
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<SdLayoutStorageService>;
67
76
  }
77
+ interface SdLayoutVersionState {
78
+ activeGroupKey?: string;
79
+ locked?: boolean;
80
+ collapsed?: boolean;
81
+ }
82
+
83
+ type SdLayoutViewport = SdViewport;
84
+ declare const SD_LAYOUT_VIEWPORT: _angular_core.InjectionToken<SdViewport | null>;
85
+ /** @deprecated Prefer `SdViewportService` from `@sdcorejs/angular/services/viewport`. */
86
+ declare class SdLayoutResponsiveService {
87
+ #private;
88
+ readonly viewportWidth: _angular_core.Signal<number>;
89
+ isMobile(breakpoint: number): boolean;
90
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdLayoutResponsiveService, never>;
91
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<SdLayoutResponsiveService>;
92
+ }
68
93
 
69
94
  interface ISdLayoutConfiguration {
70
95
  homeUrl?: string;
96
+ mobileBreakpoint?: number;
71
97
  sidebar: ISdSidebarConfiguration | (() => MaybeAsync<ISdSidebarConfiguration>);
72
98
  userInfo: SdLayoutUserInfo | (() => MaybeAsync<SdLayoutUserInfo>);
73
99
  signout: () => void | Promise<void>;
@@ -96,8 +122,18 @@ interface SdLayoutUserInfo {
96
122
  */
97
123
  avatar?: string;
98
124
  }
99
- type ISdSidebarConfiguration = SidebarConfigurationV1;
100
- interface SidebarConfigurationV1 {
125
+ declare const DEFAULT_LAYOUT_MOBILE_BREAKPOINT = 1024;
126
+ interface SidebarConfigurationBase {
127
+ brandColor?: string;
128
+ brandLightColor?: string;
129
+ logoUrl?: string;
130
+ defaultTitle?: string;
131
+ pin?: {
132
+ enabled?: boolean;
133
+ };
134
+ }
135
+ type ISdSidebarConfiguration = SidebarConfigurationV1 | SidebarConfigurationV2 | SidebarConfigurationV3;
136
+ interface SidebarConfigurationV1 extends SidebarConfigurationBase {
101
137
  version: 1;
102
138
  /**
103
139
  * Màu brand chính.
@@ -130,12 +166,56 @@ interface SidebarConfigurationV1 {
130
166
  enabled?: boolean;
131
167
  };
132
168
  }
169
+ interface SidebarConfigurationV2 extends SidebarConfigurationBase {
170
+ version: 2;
171
+ interaction?: 'click' | 'hover-lock';
172
+ primaryMenuIds?: string[];
173
+ }
174
+ interface SidebarConfigurationV3 extends SidebarConfigurationBase {
175
+ version: 3;
176
+ defaultCollapsed?: boolean;
177
+ recent?: {
178
+ enabled?: boolean;
179
+ maxItems?: number;
180
+ };
181
+ }
182
+ interface ResolvedSidebarRecentConfiguration {
183
+ enabled: boolean;
184
+ maxItems: number;
185
+ }
186
+ declare function normalizeLayoutMobileBreakpoint(value: number | undefined): number;
187
+ declare function resolveSidebarV2Interaction(sidebar: SidebarConfigurationV2): 'click' | 'hover-lock';
188
+ declare function resolveSidebarV3Recent(sidebar: SidebarConfigurationV3): ResolvedSidebarRecentConfiguration;
189
+ declare function normalizeSidebarConfiguration(_sidebar: SidebarConfigurationV1): SidebarConfigurationV1;
190
+ declare function normalizeSidebarConfiguration(_sidebar: SidebarConfigurationV2): SidebarConfigurationV2;
191
+ declare function normalizeSidebarConfiguration(_sidebar: SidebarConfigurationV3): SidebarConfigurationV3;
133
192
  declare const SD_LAYOUT_CONFIGURATION: InjectionToken<ISdLayoutConfiguration>;
134
193
 
194
+ declare class SdLayoutNavigationStateService {
195
+ #private;
196
+ readonly pinnedKeys: _angular_core.WritableSignal<string[]>;
197
+ readonly recentKeys: _angular_core.WritableSignal<string[]>;
198
+ readonly pinnedMenus: _angular_core.Signal<(_sdcorejs_angular_modules_layout.SdLayoutRootMenu | _sdcorejs_angular_modules_layout.SdLayoutChildrenMenu)[]>;
199
+ readonly recentMenus: _angular_core.Signal<(_sdcorejs_angular_modules_layout.SdLayoutRootMenu | _sdcorejs_angular_modules_layout.SdLayoutChildrenMenu)[]>;
200
+ hydrate(menus: SdLayoutMenu[], recentMaximum?: number): void;
201
+ togglePinned(menu: SdLayoutMenu): void;
202
+ recordRecent(menu: SdLayoutMenu, configuration: ResolvedSidebarRecentConfiguration): void;
203
+ patchVersionState(version: 1 | 2 | 3, patch: SdLayoutVersionState): void;
204
+ versionState(version: 1 | 2 | 3): SdLayoutVersionState;
205
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdLayoutNavigationStateService, never>;
206
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<SdLayoutNavigationStateService>;
207
+ }
208
+
209
+ declare function getMenuStableKey(menu: SdLayoutMenu | null | undefined, ancestors?: string[]): string;
210
+ declare function searchMenuLeaves(menus: SdLayoutMenu[], query: string): SdLayoutRootMenu[];
211
+ declare function selectPrimaryMenuGroups(menus: SdLayoutMenu[], requestedIds: string[] | undefined, maximum?: number): SdLayoutMenu[];
212
+ declare function resolveMenuKeys(menus: SdLayoutMenu[], keys: string[]): (SdLayoutRootMenu | SdLayoutChildrenMenu)[];
213
+ declare function flattenMenuLeaves(menus: SdLayoutMenu[]): SdLayoutRootMenu[];
214
+
135
215
  declare class SdLayoutService {
136
216
  #private;
137
217
  userInfo: _angular_core.WritableSignal<SdLayoutUserInfo | undefined>;
138
- sidebar: _angular_core.WritableSignal<_sdcorejs_angular_modules_layout.SidebarConfigurationV1 | undefined>;
218
+ sidebar: _angular_core.WritableSignal<ISdSidebarConfiguration | undefined>;
139
219
  constructor();
140
220
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdLayoutService, never>;
141
221
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<SdLayoutService>;
@@ -156,8 +236,12 @@ declare class SdLayoutComponent {
156
236
  menusInput: _angular_core.InputSignal<SdLayoutMenu[]>;
157
237
  menus: _angular_core.Signal<SdLayoutMenu[]>;
158
238
  userInfo: _angular_core.WritableSignal<_sdcorejs_angular_modules_layout.SdLayoutUserInfo | undefined>;
159
- sidebar: _angular_core.WritableSignal<_sdcorejs_angular_modules_layout.SidebarConfigurationV1 | undefined>;
160
- isMobileOrTablet: _angular_core.WritableSignal<boolean>;
239
+ sidebar: _angular_core.WritableSignal<_sdcorejs_angular_modules_layout.ISdSidebarConfiguration | undefined>;
240
+ sidebarV1: _angular_core.Signal<SidebarConfigurationV1 | undefined>;
241
+ sidebarV2: _angular_core.Signal<SidebarConfigurationV2 | undefined>;
242
+ sidebarV3: _angular_core.Signal<SidebarConfigurationV3 | undefined>;
243
+ mobileBreakpoint: number;
244
+ isMobile: _angular_core.Signal<boolean>;
161
245
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdLayoutComponent, never>;
162
246
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdLayoutComponent, "sd-layout", never, { "menusInput": { "alias": "menus"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
163
247
  }
@@ -213,11 +297,200 @@ declare class SidebarMobileOverlayComponent {
213
297
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarMobileOverlayComponent, "sd-sidebar-mobile-overlay", never, { "isShowSidebar": { "alias": "isShowSidebar"; "required": false; "isSignal": true; }; "menus": { "alias": "menus"; "required": true; "isSignal": true; }; "userInfo": { "alias": "userInfo"; "required": true; "isSignal": true; }; "sidebar": { "alias": "sidebar"; "required": true; "isSignal": true; }; }, { "showSideBar": "showSideBar"; "expandSideBar": "expandSideBar"; "popupUserMenuOpened": "popupUserMenuOpened"; "popupUserMenuClosed": "popupUserMenuClosed"; "titleMenuGroupChanged": "titleMenuGroupChanged"; }, never, never, true, never>;
214
298
  }
215
299
 
300
+ interface SdLayoutMenuTreeNode {
301
+ menu: SdLayoutMenu;
302
+ key: string;
303
+ title: string;
304
+ depth: number;
305
+ paddingLeft: number;
306
+ isGroup: boolean;
307
+ isActive: boolean;
308
+ isPinned: boolean;
309
+ }
310
+ declare class SdLayoutMenuTreeComponent {
311
+ #private;
312
+ menus: _angular_core.InputSignal<SdLayoutMenu[]>;
313
+ query: _angular_core.InputSignal<string>;
314
+ activePath: _angular_core.InputSignal<string>;
315
+ pinnedKeys: _angular_core.InputSignal<string[]>;
316
+ showPin: _angular_core.InputSignal<boolean>;
317
+ navigate: _angular_core.OutputEmitterRef<SdLayoutRootMenu>;
318
+ togglePinned: _angular_core.OutputEmitterRef<SdLayoutMenu>;
319
+ nodes: _angular_core.Signal<SdLayoutMenuTreeNode[]>;
320
+ onNavigate(menu: SdLayoutMenu): void;
321
+ onTogglePinned(event: MouseEvent, menu: SdLayoutMenu): void;
322
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdLayoutMenuTreeComponent, never>;
323
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdLayoutMenuTreeComponent, "sd-layout-menu-tree", never, { "menus": { "alias": "menus"; "required": false; "isSignal": true; }; "query": { "alias": "query"; "required": false; "isSignal": true; }; "activePath": { "alias": "activePath"; "required": false; "isSignal": true; }; "pinnedKeys": { "alias": "pinnedKeys"; "required": false; "isSignal": true; }; "showPin": { "alias": "showPin"; "required": false; "isSignal": true; }; }, { "navigate": "navigate"; "togglePinned": "togglePinned"; }, never, never, true, never>;
324
+ }
325
+
326
+ declare class SdLayoutUserMenuComponent {
327
+ #private;
328
+ private readonly trigger;
329
+ private readonly menu;
330
+ userInfo: _angular_core.InputSignal<SdLayoutUserInfo>;
331
+ signout: _angular_core.InputSignal<(() => void | Promise<void>) | undefined>;
332
+ changePassword: _angular_core.InputSignal<(() => void | Promise<void>) | undefined>;
333
+ compact: _angular_core.InputSignal<boolean>;
334
+ isOpen: _angular_core.WritableSignal<boolean>;
335
+ avatar: _angular_core.Signal<string | undefined>;
336
+ displayName: _angular_core.Signal<string>;
337
+ signoutAction: _angular_core.Signal<(() => void | Promise<void>) | undefined>;
338
+ changePasswordAction: _angular_core.Signal<(() => void | Promise<void>) | undefined>;
339
+ constructor();
340
+ open(): void;
341
+ toggle(): void;
342
+ close(restoreFocus?: boolean): void;
343
+ onMenuKeydown(event: KeyboardEvent): void;
344
+ runChangePassword(): void;
345
+ runSignout(): void;
346
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdLayoutUserMenuComponent, never>;
347
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SdLayoutUserMenuComponent, "sd-layout-user-menu", never, { "userInfo": { "alias": "userInfo"; "required": true; "isSignal": true; }; "signout": { "alias": "signout"; "required": false; "isSignal": true; }; "changePassword": { "alias": "changePassword"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
348
+ }
349
+
350
+ interface SidebarV2RailItem {
351
+ menu: SdLayoutMenu;
352
+ key: string;
353
+ title: string;
354
+ }
355
+ declare class SidebarV2Component {
356
+ #private;
357
+ menus: _angular_core.InputSignal<SdLayoutMenu[]>;
358
+ userInfo: _angular_core.InputSignal<SdLayoutUserInfo>;
359
+ sidebar: _angular_core.InputSignal<SidebarConfigurationV2>;
360
+ activeGroupKey: _angular_core.WritableSignal<string>;
361
+ isFlyoutOpen: _angular_core.WritableSignal<boolean>;
362
+ isFlyoutLocked: _angular_core.WritableSignal<boolean>;
363
+ searchText: _angular_core.WritableSignal<string>;
364
+ activePath: _angular_core.WritableSignal<string>;
365
+ interaction: _angular_core.Signal<"click" | "hover-lock">;
366
+ railItems: _angular_core.Signal<SidebarV2RailItem[]>;
367
+ activeGroup: _angular_core.Signal<SdLayoutMenu | undefined>;
368
+ contextMenus: _angular_core.Signal<SdLayoutMenu[]>;
369
+ pinnedKeys: _angular_core.WritableSignal<string[]>;
370
+ constructor();
371
+ selectGroup(menu: SdLayoutMenu): void;
372
+ previewGroup(menu: SdLayoutMenu): void;
373
+ leaveFlyout(): void;
374
+ closeFromBackdrop(): void;
375
+ closeFromEscape(): void;
376
+ closeFromNavigation(): void;
377
+ onNavigate(menu: SdLayoutMenu): void;
378
+ onTogglePinned(menu: SdLayoutMenu): void;
379
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarV2Component, never>;
380
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarV2Component, "sidebar-v2", never, { "menus": { "alias": "menus"; "required": false; "isSignal": true; }; "userInfo": { "alias": "userInfo"; "required": true; "isSignal": true; }; "sidebar": { "alias": "sidebar"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
381
+ }
382
+
383
+ declare class SidebarMobileV2Component {
384
+ #private;
385
+ menus: _angular_core.InputSignal<SdLayoutMenu[]>;
386
+ userInfo: _angular_core.InputSignal<SdLayoutUserInfo>;
387
+ sidebar: _angular_core.InputSignal<SidebarConfigurationV2>;
388
+ primaryMenus: _angular_core.Signal<SdLayoutMenu[]>;
389
+ overflowMenus: _angular_core.Signal<SdLayoutMenu[]>;
390
+ isSheetOpen: _angular_core.WritableSignal<boolean>;
391
+ sheetGroupKey: _angular_core.WritableSignal<string>;
392
+ sheetTitle: _angular_core.WritableSignal<string>;
393
+ sheetMenus: _angular_core.WritableSignal<SdLayoutMenu[]>;
394
+ searchText: _angular_core.WritableSignal<string>;
395
+ activePath: _angular_core.WritableSignal<string>;
396
+ pinnedKeys: _angular_core.WritableSignal<string[]>;
397
+ constructor();
398
+ openMore(trigger?: EventTarget | null): void;
399
+ activateMenu(menu: SdLayoutMenu, trigger?: EventTarget | null): void;
400
+ closeSheet(restoreFocus?: boolean): void;
401
+ onSheetKeydown(event: KeyboardEvent): void;
402
+ onNavigate(menu: SdLayoutMenu): void;
403
+ onTogglePinned(menu: SdLayoutMenu): void;
404
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarMobileV2Component, never>;
405
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarMobileV2Component, "sidebar-mobile-v2", never, { "menus": { "alias": "menus"; "required": false; "isSignal": true; }; "userInfo": { "alias": "userInfo"; "required": true; "isSignal": true; }; "sidebar": { "alias": "sidebar"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
406
+ }
407
+
408
+ declare class SidebarV3Component {
409
+ #private;
410
+ menus: _angular_core.InputSignal<SdLayoutMenu[]>;
411
+ userInfo: _angular_core.InputSignal<SdLayoutUserInfo>;
412
+ sidebar: _angular_core.InputSignal<SidebarConfigurationV3>;
413
+ isCollapsed: _angular_core.WritableSignal<boolean>;
414
+ searchText: _angular_core.WritableSignal<string>;
415
+ activePath: _angular_core.WritableSignal<string>;
416
+ searchResults: _angular_core.Signal<SdLayoutRootMenu[]>;
417
+ recentConfiguration: _angular_core.Signal<_sdcorejs_angular_modules_layout.ResolvedSidebarRecentConfiguration>;
418
+ pinnedKeys: _angular_core.WritableSignal<string[]>;
419
+ pinnedMenus: _angular_core.Signal<(SdLayoutRootMenu | _sdcorejs_angular_modules_layout.SdLayoutChildrenMenu)[]>;
420
+ recentMenus: _angular_core.Signal<(SdLayoutRootMenu | _sdcorejs_angular_modules_layout.SdLayoutChildrenMenu)[]>;
421
+ collapsedItems: _angular_core.Signal<{
422
+ menu: SdLayoutMenu;
423
+ key: string;
424
+ title: string;
425
+ }[]>;
426
+ constructor();
427
+ toggleCollapsed(): void;
428
+ activateCollapsedMenu(menu: SdLayoutMenu): void;
429
+ navigateMenu(menu: SdLayoutMenu): void;
430
+ onTogglePinned(menu: SdLayoutMenu): void;
431
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarV3Component, never>;
432
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarV3Component, "sidebar-v3", never, { "menus": { "alias": "menus"; "required": false; "isSignal": true; }; "userInfo": { "alias": "userInfo"; "required": true; "isSignal": true; }; "sidebar": { "alias": "sidebar"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
433
+ }
434
+
435
+ declare class SidebarMobileV3Component {
436
+ #private;
437
+ private readonly trigger;
438
+ menus: _angular_core.InputSignal<SdLayoutMenu[]>;
439
+ userInfo: _angular_core.InputSignal<SdLayoutUserInfo>;
440
+ sidebar: _angular_core.InputSignal<SidebarConfigurationV3>;
441
+ isDrawerOpen: _angular_core.WritableSignal<boolean>;
442
+ searchText: _angular_core.WritableSignal<string>;
443
+ activePath: _angular_core.WritableSignal<string>;
444
+ searchResults: _angular_core.Signal<SdLayoutRootMenu[]>;
445
+ recentConfiguration: _angular_core.Signal<_sdcorejs_angular_modules_layout.ResolvedSidebarRecentConfiguration>;
446
+ pinnedKeys: _angular_core.WritableSignal<string[]>;
447
+ pinnedMenus: _angular_core.Signal<(SdLayoutRootMenu | _sdcorejs_angular_modules_layout.SdLayoutChildrenMenu)[]>;
448
+ recentMenus: _angular_core.Signal<(SdLayoutRootMenu | _sdcorejs_angular_modules_layout.SdLayoutChildrenMenu)[]>;
449
+ constructor();
450
+ openDrawer(trigger?: EventTarget | null): void;
451
+ closeFromBackdrop(): void;
452
+ closeFromEscape(): void;
453
+ closeFromNavigation(): void;
454
+ onDrawerKeydown(event: KeyboardEvent): void;
455
+ navigateMenu(menu: SdLayoutMenu): void;
456
+ onTogglePinned(menu: SdLayoutMenu): void;
457
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<SidebarMobileV3Component, never>;
458
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SidebarMobileV3Component, "sidebar-mobile-v3", never, { "menus": { "alias": "menus"; "required": false; "isSignal": true; }; "userInfo": { "alias": "userInfo"; "required": true; "isSignal": true; }; "sidebar": { "alias": "sidebar"; "required": true; "isSignal": true; }; }, {}, never, ["*"], true, never>;
459
+ }
460
+
461
+ declare class MenuPipe implements PipeTransform {
462
+ #private;
463
+ private permissionService;
464
+ /** Inserted by Angular inject() migration for backwards compatibility */
465
+ constructor(...args: unknown[]);
466
+ transform(menus: SdLayoutMenu[]): SdLayoutMenu[];
467
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenuPipe, never>;
468
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<MenuPipe, "menu", true>;
469
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<MenuPipe>;
470
+ }
471
+
472
+ declare class MenuFocusPipe implements PipeTransform {
473
+ #private;
474
+ transform(routePath: string, menuItem: SdLayoutMenu): boolean;
475
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MenuFocusPipe, never>;
476
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<MenuFocusPipe, "menuFocus", true>;
477
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<MenuFocusPipe>;
478
+ }
479
+
480
+ declare class HighlightSearchPipe implements PipeTransform {
481
+ #private;
482
+ transform(value: string, keyword: string, args?: {
483
+ color?: string;
484
+ }): string;
485
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<HighlightSearchPipe, never>;
486
+ static ɵpipe: _angular_core.ɵɵPipeDeclaration<HighlightSearchPipe, "highLightSearch", true>;
487
+ }
488
+
216
489
  declare class SdLayoutModule {
217
490
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SdLayoutModule, never>;
218
491
  static ɵmod: _angular_core.ɵɵNgModuleDeclaration<SdLayoutModule, never, [typeof i1.RouterModule], never>;
219
492
  static ɵinj: _angular_core.ɵɵInjectorDeclaration<SdLayoutModule>;
220
493
  }
221
494
 
222
- export { ForbiddenModule, HomeModule, NotFoundModule, SD_LAYOUT_CONFIGURATION, SdLayoutComponent, SdLayoutModule, SdLayoutService, SdLayoutStorageService, SdPageComponent, SidebarMobileOverlayComponent, SidebarMobileV1Component };
223
- export type { ISdLayoutConfiguration, ISdSidebarConfiguration, Menus, SdLayoutChildrenMenu, SdLayoutMenu, SdLayoutRootMenu, SdLayoutUserInfo, SidebarConfigurationV1 };
495
+ export { DEFAULT_LAYOUT_MOBILE_BREAKPOINT, ForbiddenModule, HighlightSearchPipe, HomeModule, MenuFocusPipe, MenuPipe, NotFoundModule, SD_LAYOUT_CONFIGURATION, SD_LAYOUT_VIEWPORT, SdLayoutComponent, SdLayoutMenuTreeComponent, SdLayoutModule, SdLayoutNavigationStateService, SdLayoutResponsiveService, SdLayoutService, SdLayoutStorageService, SdLayoutUserMenuComponent, SdPageComponent, SidebarMobileOverlayComponent, SidebarMobileV1Component, SidebarMobileV2Component, SidebarMobileV3Component, SidebarV2Component, SidebarV3Component, flattenMenuLeaves, getMenuStableKey, normalizeLayoutMobileBreakpoint, normalizeSidebarConfiguration, resolveMenuKeys, resolveSidebarV2Interaction, resolveSidebarV3Recent, searchMenuLeaves, selectPrimaryMenuGroups };
496
+ export type { ISdLayoutConfiguration, ISdSidebarConfiguration, Menus, ResolvedSidebarRecentConfiguration, SdLayoutChildrenMenu, SdLayoutMenu, SdLayoutRootMenu, SdLayoutUserInfo, SdLayoutVersionState, SdLayoutViewport, SidebarConfigurationBase, SidebarConfigurationV1, SidebarConfigurationV2, SidebarConfigurationV3 };
@@ -2,5 +2,4 @@ export * from '@sdcorejs/angular/modules/keycloak';
2
2
  export * from '@sdcorejs/angular/modules/permission';
3
3
  export * from '@sdcorejs/angular/modules/auth';
4
4
  export * from '@sdcorejs/angular/modules/layout';
5
- export * from '@sdcorejs/angular/modules/authom';
6
5
  export * from '@sdcorejs/angular/modules/icon';
@@ -1,7 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { PipeTransform } from '@angular/core';
3
3
  import * as _angular_platform_browser from '@angular/platform-browser';
4
- import { DomSanitizer } from '@angular/platform-browser';
5
4
  import { Observable } from 'rxjs';
6
5
 
7
6
  declare class SdFormatDatePipe implements PipeTransform {
@@ -28,7 +27,8 @@ declare class SdFormatNumberPipe implements PipeTransform {
28
27
 
29
28
  declare class SdSafeHtmlPipe implements PipeTransform {
30
29
  private sanitizer;
31
- constructor(sanitizer: DomSanitizer);
30
+ /** Inserted by Angular inject() migration for backwards compatibility */
31
+ constructor(...args: unknown[]);
32
32
  transform(html: string | number | undefined | null): _angular_platform_browser.SafeHtml | undefined;
33
33
  static ɵfac: i0.ɵɵFactoryDeclaration<SdSafeHtmlPipe, never>;
34
34
  static ɵpipe: i0.ɵɵPipeDeclaration<SdSafeHtmlPipe, "sdSafeHtml", true>;