@sdcorejs/angular 19.1.5 → 19.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 (361) hide show
  1. package/README.md +12 -4
  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/components/anchor/src/components/anchor/anchor.component.d.ts +3 -1
  6. package/components/badge/src/badge.component.d.ts +1 -0
  7. package/components/ckeditor-styles/src/ckeditor-styles.component.d.ts +1 -1
  8. package/components/form-generic/src/components/form-builder/components/expression-builder/expression-builder.component.d.ts +2 -1
  9. package/components/form-generic/src/components/form-builder/form-builder.component.d.ts +3 -1
  10. package/components/form-generic/src/components/form-render/components/item/components/checkbox/checkbox.component.d.ts +34 -0
  11. package/components/form-generic/src/components/form-render/components/item/components/index.d.ts +1 -0
  12. package/components/form-generic/src/components/form-render/components/item/components/table/table.component.d.ts +6 -1
  13. package/components/form-generic/src/components/sd-feel-expression/sd-feel-expression.component.d.ts +1 -1
  14. package/components/form-generic/src/configurations/form.configuration.d.ts +1 -1
  15. package/components/form-generic/src/models/form-generic-component.model.d.ts +8 -8
  16. package/components/form-generic/src/models/form-generic-definition-selection.model.d.ts +5 -5
  17. package/components/form-generic/src/models/form-generic-expression.model.d.ts +12 -12
  18. package/components/form-generic/src/models/index.d.ts +1 -0
  19. package/components/form-generic/src/services/form-generic.service.d.ts +2 -2
  20. package/components/import-excel/src/import-excel.component.d.ts +1 -0
  21. package/components/index.d.ts +6 -1
  22. package/components/mini-editor/src/mini-editor.model.d.ts +1 -1
  23. package/components/modal/src/modal.component.d.ts +3 -2
  24. package/components/modal-resizable/src/modal-resizable.component.d.ts +92 -0
  25. package/components/modal-resizable/src/modal-resizable.registry.d.ts +22 -0
  26. package/components/org-chart/src/org-chart.component.d.ts +6 -0
  27. package/components/preview/src/preview-image/preview-image.component.d.ts +1 -0
  28. package/components/preview/src/preview-pdf/pdf-worker-inline.generated.d.ts +7 -0
  29. package/components/query-bar/src/components/actions-bar/actions-bar.component.d.ts +6 -2
  30. package/components/query-bar/src/components/build-chip/build-chip.component.d.ts +4 -1
  31. package/components/query-bar/src/components/chip-popover/chip-popover.component.d.ts +8 -0
  32. package/components/query-bar/src/components/field-picker/field-picker.component.d.ts +2 -0
  33. package/components/query-bar/src/components/inline-chip/inline-chip.component.d.ts +2 -0
  34. package/components/query-bar/src/components/inline-value-chip/inline-value-chip.component.d.ts +3 -3
  35. package/components/query-bar/src/components/saved-filters-menu/saved-filters-menu.component.d.ts +9 -4
  36. package/components/query-bar/src/query-bar.component.d.ts +32 -5
  37. package/components/query-bar/src/query-bar.model.d.ts +15 -12
  38. package/components/query-builder/src/query-builder.component.d.ts +76 -39
  39. package/components/query-builder/src/query-builder.model.d.ts +59 -52
  40. package/components/query-builder/src/query-builder.serializer.d.ts +15 -6
  41. package/components/section/src/section.component.d.ts +3 -0
  42. package/components/side-drawer/src/body-scroll-lock.service.d.ts +10 -0
  43. package/components/splitter/src/splitter-handle/splitter-handle.component.d.ts +1 -0
  44. package/components/tab-router/index.d.ts +2 -1
  45. package/components/tab-router/src/actions/tab-router.action.d.ts +2 -2
  46. package/components/tab-router/src/components/tab-router-item/tab-router-item.component.d.ts +2 -2
  47. package/components/tab-router/src/components/tab-router-nav/tab-router-nav.component.d.ts +3 -3
  48. package/components/tab-router/src/components/tab-router-outlet/tab-router-outlet.component.d.ts +3 -3
  49. package/components/tab-router/src/decorators/tab.decorator.d.ts +13 -1
  50. package/components/tab-router/src/events/tab-router.event.d.ts +3 -3
  51. package/components/tab-router/src/models/tab-router.model.d.ts +2 -2
  52. package/components/tab-router/src/pipes/tab-info.pipe.d.ts +2 -2
  53. package/components/tab-router/src/services/tab-router.service.d.ts +9 -9
  54. package/components/table/index.d.ts +1 -0
  55. package/components/table/src/components/config/config.component.d.ts +6 -1
  56. package/components/table/src/components/desktop-cell/view/view.component.d.ts +1 -0
  57. package/components/table/src/components/filter/external-filter/external-filter.component.d.ts +1 -1
  58. package/components/table/src/components/filter/mobile-filter/mobile-filter.component.d.ts +1 -1
  59. package/components/table/src/components/selector-action/action-filter.pipe.d.ts +8 -1
  60. package/components/table/src/components/selector-action/selector-action.component.d.ts +2 -0
  61. package/components/table/src/directives/index.d.ts +1 -0
  62. package/components/table/src/directives/sd-table-command-header-def.directive.d.ts +24 -0
  63. package/components/table/src/models/table-column.model.d.ts +30 -13
  64. package/components/table/src/models/table-item.model.d.ts +30 -1
  65. package/components/table/src/models/table-option-selector.model.d.ts +5 -4
  66. package/components/table/src/models/table-option.model.d.ts +12 -0
  67. package/components/table/src/pipes/sd-group.pipe.d.ts +6 -2
  68. package/components/table/src/services/table-export/table-export.service.d.ts +3 -1
  69. package/components/table/src/services/table-filter/table-filter.model.d.ts +15 -15
  70. package/components/table/src/services/table-filter/table-filter.service.d.ts +2 -2
  71. package/components/table/src/services/table-format/table-format.service.d.ts +1 -1
  72. package/components/table/src/services/table-selection/selection-action.util.d.ts +24 -0
  73. package/components/table/src/services/table-selection/table-selection.util.d.ts +31 -0
  74. package/components/table/src/services/tree/tree.util.d.ts +3 -2
  75. package/components/table/src/table.component.d.ts +52 -6
  76. package/components/tree/src/tree-item-def.directive.d.ts +1 -1
  77. package/components/tree/src/tree.component.d.ts +16 -4
  78. package/components/tree/src/tree.model.d.ts +31 -25
  79. package/components/upload-file/src/configurations/upload-file.configuration.d.ts +2 -2
  80. package/components/upload-file/src/upload-file.component.d.ts +4 -1
  81. package/configurations/src/sd-core.configuration.d.ts +1 -2
  82. package/fesm2022/sdcorejs-angular-components-anchor.mjs +36 -12
  83. package/fesm2022/sdcorejs-angular-components-anchor.mjs.map +1 -1
  84. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs +2 -2
  85. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs.map +1 -1
  86. package/fesm2022/sdcorejs-angular-components-badge.mjs +15 -2
  87. package/fesm2022/sdcorejs-angular-components-badge.mjs.map +1 -1
  88. package/fesm2022/sdcorejs-angular-components-button.mjs +2 -2
  89. package/fesm2022/sdcorejs-angular-components-button.mjs.map +1 -1
  90. package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs +1 -1
  91. package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs.map +1 -1
  92. package/fesm2022/sdcorejs-angular-components-code-editor.mjs +3 -3
  93. package/fesm2022/sdcorejs-angular-components-code-editor.mjs.map +1 -1
  94. package/fesm2022/sdcorejs-angular-components-data-state.mjs +3 -3
  95. package/fesm2022/sdcorejs-angular-components-data-state.mjs.map +1 -1
  96. package/fesm2022/sdcorejs-angular-components-editor.mjs +2 -2
  97. package/fesm2022/sdcorejs-angular-components-editor.mjs.map +1 -1
  98. package/fesm2022/sdcorejs-angular-components-form-generic.mjs +324 -192
  99. package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
  100. package/fesm2022/sdcorejs-angular-components-history.mjs +4 -4
  101. package/fesm2022/sdcorejs-angular-components-history.mjs.map +1 -1
  102. package/fesm2022/sdcorejs-angular-components-import-excel.mjs +13 -5
  103. package/fesm2022/sdcorejs-angular-components-import-excel.mjs.map +1 -1
  104. package/fesm2022/sdcorejs-angular-components-inform.mjs +3 -3
  105. package/fesm2022/sdcorejs-angular-components-inform.mjs.map +1 -1
  106. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs +164 -8
  107. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs.map +1 -1
  108. package/fesm2022/sdcorejs-angular-components-modal.mjs +30 -18
  109. package/fesm2022/sdcorejs-angular-components-modal.mjs.map +1 -1
  110. package/fesm2022/sdcorejs-angular-components-org-chart.mjs +60 -13
  111. package/fesm2022/sdcorejs-angular-components-org-chart.mjs.map +1 -1
  112. package/fesm2022/sdcorejs-angular-components-preview.mjs +58 -19
  113. package/fesm2022/sdcorejs-angular-components-preview.mjs.map +1 -1
  114. package/fesm2022/sdcorejs-angular-components-query-bar.mjs +192 -30
  115. package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
  116. package/fesm2022/sdcorejs-angular-components-query-builder.mjs +187 -127
  117. package/fesm2022/sdcorejs-angular-components-query-builder.mjs.map +1 -1
  118. package/fesm2022/sdcorejs-angular-components-section.mjs +16 -2
  119. package/fesm2022/sdcorejs-angular-components-section.mjs.map +1 -1
  120. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs +83 -24
  121. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs.map +1 -1
  122. package/fesm2022/sdcorejs-angular-components-splitter.mjs +57 -21
  123. package/fesm2022/sdcorejs-angular-components-splitter.mjs.map +1 -1
  124. package/fesm2022/sdcorejs-angular-components-stepper.mjs +2 -2
  125. package/fesm2022/sdcorejs-angular-components-stepper.mjs.map +1 -1
  126. package/fesm2022/sdcorejs-angular-components-tab-router.mjs +68 -20
  127. package/fesm2022/sdcorejs-angular-components-tab-router.mjs.map +1 -1
  128. package/fesm2022/sdcorejs-angular-components-tab.mjs +3 -2
  129. package/fesm2022/sdcorejs-angular-components-tab.mjs.map +1 -1
  130. package/fesm2022/sdcorejs-angular-components-table.mjs +556 -254
  131. package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
  132. package/fesm2022/sdcorejs-angular-components-tree.mjs +80 -17
  133. package/fesm2022/sdcorejs-angular-components-tree.mjs.map +1 -1
  134. package/fesm2022/sdcorejs-angular-components-upload-file.mjs +48 -13
  135. package/fesm2022/sdcorejs-angular-components-upload-file.mjs.map +1 -1
  136. package/fesm2022/sdcorejs-angular-components.mjs +6 -1
  137. package/fesm2022/sdcorejs-angular-components.mjs.map +1 -1
  138. package/fesm2022/sdcorejs-angular-configurations.mjs.map +1 -1
  139. package/fesm2022/sdcorejs-angular-directives.mjs +45 -8
  140. package/fesm2022/sdcorejs-angular-directives.mjs.map +1 -1
  141. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +40 -29
  142. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
  143. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs +5 -5
  144. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs.map +1 -1
  145. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs +67 -50
  146. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs.map +1 -1
  147. package/fesm2022/sdcorejs-angular-forms-chip.mjs +57 -43
  148. package/fesm2022/sdcorejs-angular-forms-chip.mjs.map +1 -1
  149. package/fesm2022/sdcorejs-angular-forms-date-range.mjs +233 -63
  150. package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
  151. package/fesm2022/sdcorejs-angular-forms-date.mjs +208 -41
  152. package/fesm2022/sdcorejs-angular-forms-date.mjs.map +1 -1
  153. package/fesm2022/sdcorejs-angular-forms-datetime.mjs +130 -26
  154. package/fesm2022/sdcorejs-angular-forms-datetime.mjs.map +1 -1
  155. package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs +39 -15
  156. package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs.map +1 -1
  157. package/fesm2022/sdcorejs-angular-forms-input-color.mjs +16 -5
  158. package/fesm2022/sdcorejs-angular-forms-input-color.mjs.map +1 -1
  159. package/fesm2022/sdcorejs-angular-forms-input-number.mjs +24 -9
  160. package/fesm2022/sdcorejs-angular-forms-input-number.mjs.map +1 -1
  161. package/fesm2022/sdcorejs-angular-forms-input.mjs +58 -10
  162. package/fesm2022/sdcorejs-angular-forms-input.mjs.map +1 -1
  163. package/fesm2022/sdcorejs-angular-forms-models.mjs +279 -6
  164. package/fesm2022/sdcorejs-angular-forms-models.mjs.map +1 -1
  165. package/fesm2022/sdcorejs-angular-forms-radio.mjs +4 -4
  166. package/fesm2022/sdcorejs-angular-forms-radio.mjs.map +1 -1
  167. package/fesm2022/sdcorejs-angular-forms-select.mjs +135 -37
  168. package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
  169. package/fesm2022/sdcorejs-angular-forms-switch.mjs +18 -3
  170. package/fesm2022/sdcorejs-angular-forms-switch.mjs.map +1 -1
  171. package/fesm2022/sdcorejs-angular-forms-textarea.mjs +51 -62
  172. package/fesm2022/sdcorejs-angular-forms-textarea.mjs.map +1 -1
  173. package/fesm2022/sdcorejs-angular-forms-time-range.mjs +57 -12
  174. package/fesm2022/sdcorejs-angular-forms-time-range.mjs.map +1 -1
  175. package/fesm2022/sdcorejs-angular-forms-time.mjs +16 -5
  176. package/fesm2022/sdcorejs-angular-forms-time.mjs.map +1 -1
  177. package/fesm2022/sdcorejs-angular-forms-tree-select.mjs +100 -9
  178. package/fesm2022/sdcorejs-angular-forms-tree-select.mjs.map +1 -1
  179. package/fesm2022/sdcorejs-angular-forms.mjs +91 -46
  180. package/fesm2022/sdcorejs-angular-forms.mjs.map +1 -1
  181. package/fesm2022/sdcorejs-angular-handlers.mjs +18 -3
  182. package/fesm2022/sdcorejs-angular-handlers.mjs.map +1 -1
  183. package/fesm2022/sdcorejs-angular-i18n.mjs +510 -68
  184. package/fesm2022/sdcorejs-angular-i18n.mjs.map +1 -1
  185. package/fesm2022/sdcorejs-angular-interceptors.mjs +87 -29
  186. package/fesm2022/sdcorejs-angular-interceptors.mjs.map +1 -1
  187. package/fesm2022/sdcorejs-angular-modules-auth.mjs +25 -15
  188. package/fesm2022/sdcorejs-angular-modules-auth.mjs.map +1 -1
  189. package/fesm2022/sdcorejs-angular-modules-icon.mjs +2 -2
  190. package/fesm2022/sdcorejs-angular-modules-icon.mjs.map +1 -1
  191. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs +32 -3
  192. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs.map +1 -1
  193. package/fesm2022/sdcorejs-angular-modules-layout.mjs +441 -135
  194. package/fesm2022/sdcorejs-angular-modules-layout.mjs.map +1 -1
  195. package/fesm2022/sdcorejs-angular-modules-permission.mjs +177 -40
  196. package/fesm2022/sdcorejs-angular-modules-permission.mjs.map +1 -1
  197. package/fesm2022/sdcorejs-angular-pipes.mjs +62 -28
  198. package/fesm2022/sdcorejs-angular-pipes.mjs.map +1 -1
  199. package/fesm2022/sdcorejs-angular-services-api.mjs +123 -13
  200. package/fesm2022/sdcorejs-angular-services-api.mjs.map +1 -1
  201. package/fesm2022/sdcorejs-angular-services-cache.mjs +53 -3
  202. package/fesm2022/sdcorejs-angular-services-cache.mjs.map +1 -1
  203. package/fesm2022/sdcorejs-angular-services-confirm.mjs +25 -73
  204. package/fesm2022/sdcorejs-angular-services-confirm.mjs.map +1 -1
  205. package/fesm2022/sdcorejs-angular-services-excel.mjs +12 -10
  206. package/fesm2022/sdcorejs-angular-services-excel.mjs.map +1 -1
  207. package/fesm2022/sdcorejs-angular-services-loading.mjs +75 -84
  208. package/fesm2022/sdcorejs-angular-services-loading.mjs.map +1 -1
  209. package/fesm2022/sdcorejs-angular-services-notify.mjs +46 -5
  210. package/fesm2022/sdcorejs-angular-services-notify.mjs.map +1 -1
  211. package/fesm2022/sdcorejs-angular-services-storage.mjs +4 -0
  212. package/fesm2022/sdcorejs-angular-services-storage.mjs.map +1 -1
  213. package/fesm2022/sdcorejs-angular-services.mjs +0 -1
  214. package/fesm2022/sdcorejs-angular-services.mjs.map +1 -1
  215. package/fesm2022/sdcorejs-angular-utilities-extensions.mjs +225 -80
  216. package/fesm2022/sdcorejs-angular-utilities-extensions.mjs.map +1 -1
  217. package/fesm2022/sdcorejs-angular-utilities-models.mjs +1 -63
  218. package/fesm2022/sdcorejs-angular-utilities-models.mjs.map +1 -1
  219. package/fesm2022/sdcorejs-angular.mjs +17 -10
  220. package/fesm2022/sdcorejs-angular.mjs.map +1 -1
  221. package/forms/autocomplete/src/autocomplete.component.d.ts +5 -2
  222. package/forms/chip-calendar/src/chip-calendar.component.d.ts +10 -0
  223. package/forms/date/src/date-input.util.d.ts +18 -0
  224. package/forms/date/src/date.component.d.ts +21 -3
  225. package/forms/date-range/src/date-range.component.d.ts +13 -2
  226. package/forms/datetime/src/datetime.component.d.ts +13 -2
  227. package/forms/entity-picker/src/entity-picker.component.d.ts +9 -3
  228. package/forms/input/src/input.component.d.ts +3 -0
  229. package/forms/input-color/src/input-color.component.d.ts +4 -0
  230. package/forms/input-number/src/input-number.component.d.ts +3 -0
  231. package/forms/models/index.d.ts +4 -0
  232. package/forms/models/src/sd-form-control-connector.d.ts +12 -0
  233. package/forms/models/src/sd-model-facing-control.d.ts +43 -0
  234. package/forms/models/src/sd-search.model.d.ts +1 -1
  235. package/forms/models/src/sd-selection-data.model.d.ts +1 -1
  236. package/forms/models/src/sd-strict-date-adapter.d.ts +26 -0
  237. package/forms/models/src/sd-temporal-transform.d.ts +31 -0
  238. package/forms/models/src/sd-timer-scope.d.ts +29 -0
  239. package/forms/select/src/select.component.d.ts +27 -4
  240. package/forms/src/forms.module.d.ts +22 -13
  241. package/forms/switch/src/switch.component.d.ts +5 -0
  242. package/forms/textarea/src/textarea.component.d.ts +5 -3
  243. package/forms/time-range/src/time-range.component.d.ts +22 -1
  244. package/forms/tree-select/src/tree-select.component.d.ts +36 -5
  245. package/i18n/src/en.d.ts +94 -10
  246. package/i18n/src/i18n.messages.d.ts +1 -1
  247. package/i18n/src/i18n.pipe.d.ts +3 -3
  248. package/i18n/src/i18n.service.d.ts +2 -1
  249. package/i18n/src/i18n.types.d.ts +0 -3
  250. package/interceptors/no-internet/no-internet.interceptor.d.ts +11 -1
  251. package/modules/auth/services/auth.model.d.ts +1 -1
  252. package/modules/keycloak/keycloak.service.d.ts +1 -0
  253. package/modules/layout/components/shared/menu-tree/menu-tree.component.d.ts +2 -0
  254. package/modules/layout/components/sidebar-mobile-v1/components/sidebar/sidebar.component.d.ts +3 -3
  255. package/modules/layout/components/sidebar-mobile-v1/main.component.d.ts +3 -3
  256. package/modules/layout/components/sidebar-mobile-v2/main.component.d.ts +3 -3
  257. package/modules/layout/components/sidebar-mobile-v3/main.component.d.ts +3 -3
  258. package/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.d.ts +8 -3
  259. package/modules/layout/components/sidebar-v1/main.component.d.ts +3 -3
  260. package/modules/layout/components/sidebar-v2/main.component.d.ts +3 -3
  261. package/modules/layout/components/sidebar-v3/main.component.d.ts +3 -3
  262. package/modules/layout/index.d.ts +1 -0
  263. package/modules/layout/modules/forbidden/pages/root/root.component.d.ts +5 -0
  264. package/modules/layout/modules/not-found/pages/root/root.component.d.ts +5 -0
  265. package/modules/layout/services/layout.service.d.ts +21 -0
  266. package/modules/layout/services/storage/storage.service.d.ts +52 -7
  267. package/modules/layout/utils/index.d.ts +1 -0
  268. package/modules/layout/utils/tab-name.util.d.ts +8 -0
  269. package/modules/permission/src/configurations/permission.configuration.d.ts +11 -0
  270. package/modules/permission/src/directives/permission.directive.d.ts +2 -1
  271. package/modules/permission/src/services/permission.service.d.ts +52 -1
  272. package/package.json +48 -33
  273. package/pipes/src/safe-html.pipe.d.ts +26 -4
  274. package/pipes/src/time-different.pipe.d.ts +1 -0
  275. package/public-api.d.ts +11 -10
  276. package/services/api/src/api-host.d.ts +15 -0
  277. package/services/api/src/api.model.d.ts +14 -0
  278. package/services/api/src/api.module.d.ts +6 -0
  279. package/services/cache/src/cache.model.d.ts +10 -0
  280. package/services/index.d.ts +0 -1
  281. package/services/notify/index.d.ts +1 -1
  282. package/utilities/extensions/index.d.ts +1 -5
  283. package/utilities/extensions/src/url-safety.d.ts +72 -0
  284. package/utilities/extensions/src/utility.extension.d.ts +9 -5
  285. package/utilities/models/index.d.ts +0 -10
  286. package/components/base/index.d.ts +0 -1
  287. package/components/base/src/base-secure.component.d.ts +0 -8
  288. package/components/document-builder/index.d.ts +0 -4
  289. package/components/document-builder/src/components/header-footer-builder/header-footer-builder.component.d.ts +0 -15
  290. package/components/document-builder/src/components/header-footer-builder/plugins/page-number.plugin.d.ts +0 -4
  291. package/components/document-builder/src/components/index.d.ts +0 -1
  292. package/components/document-builder/src/document-builder.component.d.ts +0 -53
  293. package/components/document-builder/src/document-builder.config.d.ts +0 -21
  294. package/components/document-builder/src/document-builder.model.d.ts +0 -41
  295. package/components/document-builder/src/document-builder.utils.d.ts +0 -10
  296. package/components/document-builder/src/plugins/block-space/block-space.plugin.d.ts +0 -9
  297. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.d.ts +0 -44
  298. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.model.d.ts +0 -57
  299. package/components/document-builder/src/plugins/heading/heading.plugin.d.ts +0 -5
  300. package/components/document-builder/src/plugins/highlight-range/highlight-range.plugin.d.ts +0 -4
  301. package/components/document-builder/src/plugins/image-custom/image-custom.plugin.d.ts +0 -31
  302. package/components/document-builder/src/plugins/image-upload/image-upload.plugin.d.ts +0 -5
  303. package/components/document-builder/src/plugins/index.d.ts +0 -11
  304. package/components/document-builder/src/plugins/page-orientation/page-orientation.plugin.d.ts +0 -24
  305. package/components/document-builder/src/plugins/paste-handler/filters/bookmark.d.ts +0 -14
  306. package/components/document-builder/src/plugins/paste-handler/filters/br.d.ts +0 -15
  307. package/components/document-builder/src/plugins/paste-handler/filters/image.d.ts +0 -25
  308. package/components/document-builder/src/plugins/paste-handler/filters/list.d.ts +0 -29
  309. package/components/document-builder/src/plugins/paste-handler/filters/parse.d.ts +0 -35
  310. package/components/document-builder/src/plugins/paste-handler/filters/removeboldwrapper.d.ts +0 -15
  311. package/components/document-builder/src/plugins/paste-handler/filters/removegooglesheetstag.d.ts +0 -15
  312. package/components/document-builder/src/plugins/paste-handler/filters/removeinvalidtablewidth.d.ts +0 -15
  313. package/components/document-builder/src/plugins/paste-handler/filters/removemsattributes.d.ts +0 -15
  314. package/components/document-builder/src/plugins/paste-handler/filters/removestyleblock.d.ts +0 -15
  315. package/components/document-builder/src/plugins/paste-handler/filters/removexmlns.d.ts +0 -15
  316. package/components/document-builder/src/plugins/paste-handler/filters/replacemsfootnotes.d.ts +0 -54
  317. package/components/document-builder/src/plugins/paste-handler/filters/space.d.ts +0 -27
  318. package/components/document-builder/src/plugins/paste-handler/filters/table.d.ts +0 -16
  319. package/components/document-builder/src/plugins/paste-handler/filters/utils.d.ts +0 -25
  320. package/components/document-builder/src/plugins/paste-handler/index.d.ts +0 -35
  321. package/components/document-builder/src/plugins/paste-handler/normalizers/googledocsnormalizer.d.ts +0 -31
  322. package/components/document-builder/src/plugins/paste-handler/normalizers/googlesheetsnormalizer.d.ts +0 -31
  323. package/components/document-builder/src/plugins/paste-handler/normalizers/mswordnormalizer.d.ts +0 -29
  324. package/components/document-builder/src/plugins/paste-handler/types.d.ts +0 -30
  325. package/components/document-builder/src/plugins/table-custom/index.d.ts +0 -34
  326. package/components/document-builder/src/plugins/variable/variable.plugin.d.ts +0 -51
  327. package/components/table/src/pipes/selection-visible-select-all.pipe.d.ts +0 -9
  328. package/fesm2022/sdcorejs-angular-components-base.mjs +0 -23
  329. package/fesm2022/sdcorejs-angular-components-base.mjs.map +0 -1
  330. package/fesm2022/sdcorejs-angular-components-document-builder.mjs +0 -5038
  331. package/fesm2022/sdcorejs-angular-components-document-builder.mjs.map +0 -1
  332. package/fesm2022/sdcorejs-angular-models.mjs +0 -6
  333. package/fesm2022/sdcorejs-angular-models.mjs.map +0 -1
  334. package/fesm2022/sdcorejs-angular-services-docx.mjs +0 -291
  335. package/fesm2022/sdcorejs-angular-services-docx.mjs.map +0 -1
  336. package/fesm2022/sdcorejs-angular-services-license.mjs +0 -97
  337. package/fesm2022/sdcorejs-angular-services-license.mjs.map +0 -1
  338. package/models/index.d.ts +0 -1
  339. package/models/src/language.model.d.ts +0 -2
  340. package/services/docx/index.d.ts +0 -1
  341. package/services/docx/src/lib/docx.model.d.ts +0 -9
  342. package/services/docx/src/lib/docx.service.d.ts +0 -14
  343. package/services/docx/src/lib/pandoc-core.d.ts +0 -11
  344. package/services/docx/src/public-api.d.ts +0 -2
  345. package/services/license/index.d.ts +0 -1
  346. package/services/license/src/license.service.d.ts +0 -9
  347. package/utilities/extensions/src/array.extension.d.ts +0 -1
  348. package/utilities/extensions/src/color.extension.d.ts +0 -5
  349. package/utilities/extensions/src/date.extension.d.ts +0 -1
  350. package/utilities/extensions/src/number.extension.d.ts +0 -1
  351. package/utilities/extensions/src/string.extension.d.ts +0 -50
  352. package/utilities/models/src/color.model.d.ts +0 -4
  353. package/utilities/models/src/empty.model.d.ts +0 -4
  354. package/utilities/models/src/filter.model.d.ts +0 -12
  355. package/utilities/models/src/maybe-async.model.d.ts +0 -10
  356. package/utilities/models/src/nested-key-of.model.d.ts +0 -4
  357. package/utilities/models/src/operator.model.d.ts +0 -13
  358. package/utilities/models/src/order.model.d.ts +0 -4
  359. package/utilities/models/src/paging.model.d.ts +0 -8
  360. package/utilities/models/src/pattern.model.d.ts +0 -21
  361. package/utilities/models/src/size.model.d.ts +0 -4
@@ -1,7 +1,4 @@
1
1
  import type { EN_MESSAGES } from './en';
2
- import { SUPPORTED_LANGUAGES, type Language } from '@sdcorejs/angular/models';
3
- export { SUPPORTED_LANGUAGES };
4
- export type { Language };
5
2
  export type I18nKey = keyof typeof EN_MESSAGES;
6
3
  export type I18nParams = Record<string, string | number>;
7
4
  /**
@@ -1,10 +1,20 @@
1
1
  import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
2
+ import { InjectionToken } from '@angular/core';
2
3
  import { Observable } from 'rxjs';
3
4
  import * as i0 from "@angular/core";
5
+ /**
6
+ * URL dùng để dò kết nối khi một request trả về status 0.
7
+ *
8
+ * why: bản cũ hard-code `https://jsonplaceholder.typicode.com/todos/1`, không override được. Mọi
9
+ * app tiêu dùng thư viện đều ping một bên thứ ba lạ mỗi 3 giây khi mất mạng, và vì probe đi qua
10
+ * NGUYÊN chuỗi interceptor của app nên bất kỳ interceptor nào gắn header auth vô điều kiện đều
11
+ * rò token ra ngoài origin. Mặc định giờ là một đường dẫn same-origin; app đổi bằng cách provide
12
+ * lại token này (nên trỏ tới endpoint tĩnh, rẻ, không cần auth).
13
+ */
14
+ export declare const SD_NO_INTERNET_PROBE_URL: InjectionToken<string>;
4
15
  export declare class SdNoInternetInterceptor implements HttpInterceptor {
5
16
  #private;
6
17
  private snackBar;
7
- private injector;
8
18
  /** Inserted by Angular inject() migration for backwards compatibility */
9
19
  constructor(...args: unknown[]);
10
20
  intercept(request: HttpRequest<unknown>, next: HttpHandler): Observable<HttpEvent<unknown>>;
@@ -1,4 +1,4 @@
1
- export interface SdAuthInfo<T = any> {
1
+ export interface SdAuthInfo<T = unknown> {
2
2
  id?: string;
3
3
  username?: string;
4
4
  firstName?: string;
@@ -2,6 +2,7 @@ import Keycloak from 'keycloak-js';
2
2
  import { SdKeycloakTenantConfig } from './keycloak.configuration';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class SdKeycloakService {
5
+ #private;
5
6
  keycloak: Keycloak;
6
7
  config: SdKeycloakTenantConfig;
7
8
  init(config: SdKeycloakTenantConfig): Promise<boolean>;
@@ -10,6 +10,8 @@ interface SdLayoutMenuTreeNode {
10
10
  isActive: boolean;
11
11
  isPinned: boolean;
12
12
  isPinVisible: boolean;
13
+ /** Accessible name of the pin toggle — already i18n-resolved with the menu title interpolated. */
14
+ pinLabel: string;
13
15
  }
14
16
  export declare class SdLayoutMenuTreeComponent {
15
17
  #private;
@@ -2,7 +2,7 @@ import { Params } from '@angular/router';
2
2
  import { SdLayoutUserInfo, SidebarConfigurationV1 } from '../../../../configurations';
3
3
  import { SdLayoutMenu } from '../../../../services';
4
4
  import * as i0 from "@angular/core";
5
- export declare class SidebarMobileOverlayComponent {
5
+ export declare class SdSidebarMobileOverlay {
6
6
  #private;
7
7
  isShowSidebar: import("@angular/core").InputSignal<boolean>;
8
8
  menus: import("@angular/core").InputSignal<SdLayoutMenu[]>;
@@ -30,6 +30,6 @@ export declare class SidebarMobileOverlayComponent {
30
30
  getQueryParams(menu: SdLayoutMenu): Params;
31
31
  onUserMenuOpened: () => void;
32
32
  onUserMenuClosed: () => void;
33
- static ɵfac: i0.ɵɵFactoryDeclaration<SidebarMobileOverlayComponent, never>;
34
- static ɵcmp: i0.ɵɵ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>;
33
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdSidebarMobileOverlay, never>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdSidebarMobileOverlay, "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>;
35
35
  }
@@ -1,7 +1,7 @@
1
1
  import { SdLayoutUserInfo, SidebarConfigurationV1 } from '../../configurations';
2
2
  import { SdLayoutMenu } from '../../services';
3
3
  import * as i0 from "@angular/core";
4
- export declare class SidebarMobileV1Component {
4
+ export declare class SdSidebarMobileV1 {
5
5
  #private;
6
6
  menus: import("@angular/core").InputSignal<SdLayoutMenu[]>;
7
7
  userInfo: import("@angular/core").InputSignal<SdLayoutUserInfo>;
@@ -16,6 +16,6 @@ export declare class SidebarMobileV1Component {
16
16
  onExpandSideBar: () => void;
17
17
  onMouseleaveSideBar: () => void;
18
18
  onTitleMenuGroupChanged: (title: string | undefined) => void;
19
- static ɵfac: i0.ɵɵFactoryDeclaration<SidebarMobileV1Component, never>;
20
- static ɵcmp: i0.ɵɵComponentDeclaration<SidebarMobileV1Component, "sidebar-mobile-v1", 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>;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdSidebarMobileV1, never>;
20
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdSidebarMobileV1, "sd-sidebar-mobile-v1", 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>;
21
21
  }
@@ -1,7 +1,7 @@
1
1
  import { SdLayoutUserInfo, SidebarConfigurationV2 } from '../../configurations';
2
2
  import { SdLayoutMenu } from '../../services';
3
3
  import * as i0 from "@angular/core";
4
- export declare class SidebarMobileV2Component {
4
+ export declare class SdSidebarMobileV2 {
5
5
  #private;
6
6
  menus: import("@angular/core").InputSignal<SdLayoutMenu[]>;
7
7
  userInfo: import("@angular/core").InputSignal<SdLayoutUserInfo>;
@@ -22,6 +22,6 @@ export declare class SidebarMobileV2Component {
22
22
  onSheetKeydown(event: KeyboardEvent): void;
23
23
  onNavigate(menu: SdLayoutMenu): void;
24
24
  onTogglePinned(menu: SdLayoutMenu): void;
25
- static ɵfac: i0.ɵɵFactoryDeclaration<SidebarMobileV2Component, never>;
26
- static ɵcmp: i0.ɵɵ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>;
25
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdSidebarMobileV2, never>;
26
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdSidebarMobileV2, "sd-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>;
27
27
  }
@@ -1,7 +1,7 @@
1
1
  import { SdLayoutUserInfo, SidebarConfigurationV3 } from '../../configurations';
2
2
  import { SdLayoutMenu, SdLayoutRootMenu } from '../../services';
3
3
  import * as i0 from "@angular/core";
4
- export declare class SidebarMobileV3Component {
4
+ export declare class SdSidebarMobileV3 {
5
5
  #private;
6
6
  private readonly trigger;
7
7
  menus: import("@angular/core").InputSignal<SdLayoutMenu[]>;
@@ -23,6 +23,6 @@ export declare class SidebarMobileV3Component {
23
23
  onDrawerKeydown(event: KeyboardEvent): void;
24
24
  navigateMenu(menu: SdLayoutMenu): void;
25
25
  onTogglePinned(menu: SdLayoutMenu): void;
26
- static ɵfac: i0.ɵɵFactoryDeclaration<SidebarMobileV3Component, never>;
27
- static ɵcmp: i0.ɵɵ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>;
26
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdSidebarMobileV3, never>;
27
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdSidebarMobileV3, "sd-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>;
28
28
  }
@@ -4,7 +4,7 @@ import { Params } from '@angular/router';
4
4
  import { SdLayoutUserInfo, SidebarConfigurationV1 } from '../../../../configurations';
5
5
  import { SdLayoutChildrenMenu, SdLayoutMenu } from '../../../../services';
6
6
  import * as i0 from "@angular/core";
7
- export declare class SidebarComponent {
7
+ export declare class SdSidebarV1Panel {
8
8
  #private;
9
9
  isShowSidebar: import("@angular/core").InputSignal<boolean>;
10
10
  menus: import("@angular/core").InputSignal<SdLayoutMenu[]>;
@@ -31,6 +31,11 @@ export declare class SidebarComponent {
31
31
  constructor();
32
32
  hasChild: (_: number, node: SdLayoutMenu) => boolean;
33
33
  onToggleMenuNode: (menu: SdLayoutMenu) => void;
34
+ onMenuNodeKeydown: (event: KeyboardEvent, node: {
35
+ path: string;
36
+ queryParams: Params;
37
+ }) => void;
38
+ onToggleMenuNodeKeydown: (event: KeyboardEvent, menu: SdLayoutMenu) => void;
34
39
  isPinnedNode: (node: SdLayoutMenu) => boolean;
35
40
  isHoveredNode: (node: SdLayoutMenu) => boolean;
36
41
  expandPinnedGroup: () => void;
@@ -50,6 +55,6 @@ export declare class SidebarComponent {
50
55
  onMouseLeaveMenuGroupNode: (event: MouseEvent, menuNode: SdLayoutMenu) => void;
51
56
  onMouseOverMenuNode: (event: MouseEvent, menuItem: SdLayoutMenu) => void;
52
57
  onMouseLeaveMenuNode: (event: MouseEvent, menuItem: SdLayoutMenu) => void;
53
- static ɵfac: i0.ɵɵFactoryDeclaration<SidebarComponent, never>;
54
- static ɵcmp: i0.ɵɵComponentDeclaration<SidebarComponent, "sidebar", never, { "isShowSidebar": { "alias": "isShowSidebar"; "required": true; "isSignal": true; }; "menus": { "alias": "menus"; "required": true; "isSignal": true; }; "userInfo": { "alias": "userInfo"; "required": true; "isSignal": true; }; "sidebar": { "alias": "sidebar"; "required": true; "isSignal": true; }; "isMobile": { "alias": "isMobile"; "required": false; "isSignal": true; }; }, { "expandSideBar": "expandSideBar"; "popupUserMenuClosed": "popupUserMenuClosed"; "popupUserMenuOpened": "popupUserMenuOpened"; "showSideBar": "showSideBar"; }, never, never, true, never>;
58
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdSidebarV1Panel, never>;
59
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdSidebarV1Panel, "sd-sidebar-v1-panel", never, { "isShowSidebar": { "alias": "isShowSidebar"; "required": true; "isSignal": true; }; "menus": { "alias": "menus"; "required": true; "isSignal": true; }; "userInfo": { "alias": "userInfo"; "required": true; "isSignal": true; }; "sidebar": { "alias": "sidebar"; "required": true; "isSignal": true; }; "isMobile": { "alias": "isMobile"; "required": false; "isSignal": true; }; }, { "expandSideBar": "expandSideBar"; "popupUserMenuClosed": "popupUserMenuClosed"; "popupUserMenuOpened": "popupUserMenuOpened"; "showSideBar": "showSideBar"; }, never, never, true, never>;
55
60
  }
@@ -2,7 +2,7 @@ import { MatSidenav } from '@angular/material/sidenav';
2
2
  import { SdLayoutUserInfo, SidebarConfigurationV1 } from '../../configurations';
3
3
  import { SdLayoutMenu } from '../../services';
4
4
  import * as i0 from "@angular/core";
5
- export declare class SidebarV1Component {
5
+ export declare class SdSidebarV1 {
6
6
  #private;
7
7
  sidenav: import("@angular/core").Signal<MatSidenav>;
8
8
  menus: import("@angular/core").InputSignal<SdLayoutMenu[]>;
@@ -20,6 +20,6 @@ export declare class SidebarV1Component {
20
20
  onMouseleaveSideBar: () => void;
21
21
  onSidenavOpenedChange: (opened: boolean) => void;
22
22
  onToggle: (data: boolean | null) => void;
23
- static ɵfac: i0.ɵɵFactoryDeclaration<SidebarV1Component, never>;
24
- static ɵcmp: i0.ɵɵComponentDeclaration<SidebarV1Component, "sidebar-v1", never, { "menus": { "alias": "menus"; "required": false; "isSignal": true; }; "userInfo": { "alias": "userInfo"; "required": true; "isSignal": true; }; "sidebar": { "alias": "sidebar"; "required": true; "isSignal": true; }; "isMobile": { "alias": "isMobile"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdSidebarV1, never>;
24
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdSidebarV1, "sd-sidebar-v1", never, { "menus": { "alias": "menus"; "required": false; "isSignal": true; }; "userInfo": { "alias": "userInfo"; "required": true; "isSignal": true; }; "sidebar": { "alias": "sidebar"; "required": true; "isSignal": true; }; "isMobile": { "alias": "isMobile"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
25
25
  }
@@ -6,7 +6,7 @@ interface SidebarV2RailItem {
6
6
  key: string;
7
7
  title: string;
8
8
  }
9
- export declare class SidebarV2Component {
9
+ export declare class SdSidebarV2 {
10
10
  #private;
11
11
  menus: import("@angular/core").InputSignal<SdLayoutMenu[]>;
12
12
  userInfo: import("@angular/core").InputSignal<SdLayoutUserInfo>;
@@ -30,7 +30,7 @@ export declare class SidebarV2Component {
30
30
  closeFromNavigation(): void;
31
31
  onNavigate(menu: SdLayoutMenu): void;
32
32
  onTogglePinned(menu: SdLayoutMenu): void;
33
- static ɵfac: i0.ɵɵFactoryDeclaration<SidebarV2Component, never>;
34
- static ɵcmp: i0.ɵɵ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>;
33
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdSidebarV2, never>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdSidebarV2, "sd-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>;
35
35
  }
36
36
  export {};
@@ -1,7 +1,7 @@
1
1
  import { SdLayoutUserInfo, SidebarConfigurationV3 } from '../../configurations';
2
2
  import { SdLayoutMenu, SdLayoutRootMenu } from '../../services';
3
3
  import * as i0 from "@angular/core";
4
- export declare class SidebarV3Component {
4
+ export declare class SdSidebarV3 {
5
5
  #private;
6
6
  menus: import("@angular/core").InputSignal<SdLayoutMenu[]>;
7
7
  userInfo: import("@angular/core").InputSignal<SdLayoutUserInfo>;
@@ -24,6 +24,6 @@ export declare class SidebarV3Component {
24
24
  activateCollapsedMenu(menu: SdLayoutMenu): void;
25
25
  navigateMenu(menu: SdLayoutMenu): void;
26
26
  onTogglePinned(menu: SdLayoutMenu): void;
27
- static ɵfac: i0.ɵɵFactoryDeclaration<SidebarV3Component, never>;
28
- static ɵcmp: i0.ɵɵ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>;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdSidebarV3, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdSidebarV3, "sd-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>;
29
29
  }
@@ -2,5 +2,6 @@ export * from './modules';
2
2
  export * from './services';
3
3
  export * from './components';
4
4
  export * from './configurations';
5
+ export * from './utils';
5
6
  export * from './pipes';
6
7
  export * from './layout.module';
@@ -4,6 +4,11 @@ export declare class RootComponent {
4
4
  readonly url: import("@angular/core").WritableSignal<string>;
5
5
  readonly todayInfo: import("@angular/core").WritableSignal<string>;
6
6
  userInfo: import("@angular/core").WritableSignal<import("@sdcorejs/angular/modules/layout").SdLayoutUserInfo | undefined>;
7
+ /**
8
+ * why: `window.location.href = ''` vừa là global thô (throw khi SSR vì không có `window`), vừa chỉ
9
+ * reload lại đúng trang lỗi này thay vì rời khỏi nó — trong khi nút mang nhãn "Về trang chủ".
10
+ * Điều hướng bằng Router tới `homeUrl` mà consumer đã khai trong SD_LAYOUT_CONFIGURATION.
11
+ */
7
12
  reload(): void;
8
13
  static ɵfac: i0.ɵɵFactoryDeclaration<RootComponent, never>;
9
14
  static ɵcmp: i0.ɵɵComponentDeclaration<RootComponent, "ng-component", never, {}, {}, never, never, true, never>;
@@ -4,6 +4,11 @@ export declare class RootComponent {
4
4
  readonly url: import("@angular/core").WritableSignal<string>;
5
5
  readonly todayInfo: import("@angular/core").WritableSignal<string>;
6
6
  userInfo: import("@angular/core").WritableSignal<import("@sdcorejs/angular/modules/layout").SdLayoutUserInfo | undefined>;
7
+ /**
8
+ * why: `window.location.href = ''` vừa là global thô (throw khi SSR vì không có `window`), vừa chỉ
9
+ * reload lại đúng trang lỗi này thay vì rời khỏi nó — trong khi nút mang nhãn "Quay lại trang chủ".
10
+ * Điều hướng bằng Router tới `homeUrl` mà consumer đã khai trong SD_LAYOUT_CONFIGURATION.
11
+ */
7
12
  reload(): void;
8
13
  static ɵfac: i0.ɵɵFactoryDeclaration<RootComponent, never>;
9
14
  static ɵcmp: i0.ɵɵComponentDeclaration<RootComponent, "ng-component", never, {}, {}, never, never, true, never>;
@@ -1,9 +1,30 @@
1
+ import { InjectionToken } from '@angular/core';
1
2
  import { ISdSidebarConfiguration, SdLayoutUserInfo } from '../configurations';
2
3
  import * as i0 from "@angular/core";
4
+ /**
5
+ * Bật fallback demo của `SdLayoutService` khi KHÔNG provide `SD_LAYOUT_CONFIGURATION`.
6
+ *
7
+ * why: fallback cũ chạy ngầm sau mỗi `console.warn`, nên một app cấu hình thiếu vẫn ship được UI có
8
+ * user "demo@example.com" đang đăng nhập cùng nút signout không làm gì — người dùng cuối tin là đã
9
+ * đăng nhập thật. Giờ mặc định là throw; ai thực sự cần demo/playground phải khai báo ý định:
10
+ *
11
+ * ```ts
12
+ * providers: [{ provide: SD_LAYOUT_DEMO_FALLBACK, useValue: true }]
13
+ * ```
14
+ *
15
+ * Cờ nằm ở token riêng chứ không phải field của `ISdLayoutConfiguration`, vì nó phải đọc được ĐÚNG
16
+ * lúc `SD_LAYOUT_CONFIGURATION` vắng mặt — khi đó không có object configuration nào để đọc field.
17
+ */
18
+ export declare const SD_LAYOUT_DEMO_FALLBACK: InjectionToken<boolean>;
3
19
  export declare class SdLayoutService {
4
20
  #private;
5
21
  userInfo: import("@angular/core").WritableSignal<SdLayoutUserInfo | undefined>;
6
22
  sidebar: import("@angular/core").WritableSignal<ISdSidebarConfiguration | undefined>;
23
+ /**
24
+ * Route "về trang chủ" của consumer, lấy từ `ISdLayoutConfiguration.homeUrl`.
25
+ * why: các trang lỗi (forbidden / not-found) cần một đích điều hướng thật thay vì reload chính nó.
26
+ */
27
+ readonly homeUrl: string;
7
28
  constructor();
8
29
  static ɵfac: i0.ɵɵFactoryDeclaration<SdLayoutService, never>;
9
30
  static ɵprov: i0.ɵɵInjectableDeclaration<SdLayoutService>;
@@ -1,15 +1,60 @@
1
+ import { InjectionToken } from '@angular/core';
1
2
  import { SdStorage } from '@sdcorejs/angular/services';
2
3
  import { SdLayoutChildrenMenu, SdLayoutMenu } from '../menu/menu.model';
3
4
  import * as i0 from "@angular/core";
5
+ /**
6
+ * Namespace áp cho toàn bộ state layout được persist — hằng chuỗi, hoặc hàm resolve lại mỗi lần đọc
7
+ * (dùng cho danh tính chỉ biết được SAU khi đăng nhập, ví dụ id user hoặc tenant).
8
+ */
9
+ export type SdLayoutStorageNamespace = string | (() => string | null | undefined);
10
+ /**
11
+ * Namespace do consumer cung cấp cho toàn bộ state layout được persist (thường là id user hoặc tenant).
12
+ *
13
+ * why: các key dưới đây là UUID CỐ ĐỊNH, không gắn với ai cả. Trên máy dùng chung, user A đăng xuất
14
+ * rồi user B đăng nhập thì `pinnedMenuKeys` / `recentMenuKeys` / `lastActiveMenuGroupId` của A vẫn
15
+ * còn nguyên trong localStorage và B nhìn thấy đúng những module A đã ghim và vừa truy cập. Cấp
16
+ * namespace theo user/tenant sẽ tách hẳn không gian lưu trữ.
17
+ *
18
+ * ⚠️ `SdLayoutStorageService` là singleton `providedIn: 'root'`, thường được khởi tạo TRƯỚC khi biết
19
+ * người dùng là ai. Vì vậy hãy cấp một **hàm** — nó được gọi lại ở mỗi lần truy cập handle, nên khi
20
+ * danh tính đến (hoặc đổi) thì cả bảy handle tự dựng lại trên namespace mới:
21
+ *
22
+ * ```ts
23
+ * providers: [
24
+ * {
25
+ * provide: SD_LAYOUT_STORAGE_NAMESPACE,
26
+ * useFactory: () => {
27
+ * const auth = inject(SdAuthService);
28
+ * return () => auth.getAuthInfo?.()?.id;
29
+ * },
30
+ * },
31
+ * ];
32
+ * ```
33
+ *
34
+ * Đây là biện pháp bổ sung chứ không thay thế `SdLayoutStorageService.clear()` lúc signout.
35
+ */
36
+ export declare const SD_LAYOUT_STORAGE_NAMESPACE: InjectionToken<SdLayoutStorageNamespace>;
4
37
  export declare class SdLayoutStorageService {
5
38
  #private;
6
- readonly isShowSidebar: SdStorage<boolean>;
7
- readonly menuLockStatus: SdStorage<boolean>;
8
- readonly lastActiveMenuGroupId: SdStorage<string>;
9
- readonly pinnedMenuGroup: SdStorage<SdLayoutChildrenMenu>;
10
- readonly pinnedMenuKeys: SdStorage<string[]>;
11
- readonly recentMenuKeys: SdStorage<string[]>;
12
- readonly versionStates: SdStorage<Record<string, SdLayoutVersionState>>;
39
+ get isShowSidebar(): SdStorage<boolean>;
40
+ get menuLockStatus(): SdStorage<boolean>;
41
+ get lastActiveMenuGroupId(): SdStorage<string>;
42
+ get pinnedMenuGroup(): SdStorage<SdLayoutChildrenMenu>;
43
+ get pinnedMenuKeys(): SdStorage<string[]>;
44
+ get recentMenuKeys(): SdStorage<string[]>;
45
+ get versionStates(): SdStorage<Record<string, SdLayoutVersionState>>;
46
+ /**
47
+ * Xoá toàn bộ state layout đã persist.
48
+ *
49
+ * **Consumer PHẢI gọi hàm này trong luồng signout, TRƯỚC khi danh tính bị xoá.** Nếu không,
50
+ * pinned/recent/last-active của user vừa đăng xuất sẽ còn lại trên trình duyệt và hiện ra cho người
51
+ * đăng nhập kế tiếp — rò rỉ tên module nội bộ mà người đó có thể không có quyền thấy.
52
+ *
53
+ * why: khi đã cấu hình `SD_LAYOUT_STORAGE_NAMESPACE` theo user, namespace được resolve NGAY LÚC GỌI.
54
+ * Gọi `clear()` sau khi auth info về `undefined` sẽ xoá nhầm partition không-namespace, còn dữ liệu
55
+ * của user vừa thoát thì vẫn nguyên.
56
+ */
57
+ clear(): void;
13
58
  readPinnedMenuKeys(menus: SdLayoutMenu[]): string[];
14
59
  writePinnedMenuKeys(keys: string[]): void;
15
60
  readRecentMenuKeys(menus: SdLayoutMenu[], maximum?: number): string[];
@@ -0,0 +1 @@
1
+ export * from './tab-name.util';
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Resolve a translated tab name for `@SdTabComponent`.
3
+ *
4
+ * WHY not I18nService: the decorator runs at module-evaluation time, before
5
+ * Angular's DI exists, so the service cannot be injected. We read the language
6
+ * the app persisted and look the key up in the static catalog instead.
7
+ */
8
+ export declare function resolveTabName(key: string): string;
@@ -46,6 +46,17 @@ export interface ISdPermissionConfiguration {
46
46
  * Hỗ trợ trả về đồng bộ, Promise hoặc Observable.
47
47
  */
48
48
  getToken?: () => MaybeAsync<string | undefined | null>;
49
+ /**
50
+ * Cho phép mirror danh sách mã quyền của key này xuống `sessionStorage` để sống qua reload.
51
+ *
52
+ * ⚠️ Mặc định `false` — danh sách quyền CHỈ nằm trong bộ nhớ.
53
+ *
54
+ * Bật cờ này nghĩa là chấp nhận: mọi script chạy trên cùng origin đều ĐỌC và GHI được danh sách đó.
55
+ * Cache KHÔNG phải một ranh giới phân quyền — nó chỉ tiết kiệm một lần gọi API khi reload; backend
56
+ * vẫn phải kiểm tra quyền cho từng request. Khi bật, nhớ gọi `SdPermissionService.reset()` lúc
57
+ * signout để xoá cả bản mirror.
58
+ */
59
+ persistCache?: boolean;
49
60
  }
50
61
  /**
51
62
  * InjectionToken cho cấu hình permission.
@@ -1,7 +1,8 @@
1
+ import { SdPermissionInput } from '../services';
1
2
  import * as i0 from "@angular/core";
2
3
  export declare class SdPermissionDirective {
3
4
  #private;
4
- readonly sdPermission: import("@angular/core").InputSignal<string | string[] | null | undefined>;
5
+ readonly sdPermission: import("@angular/core").InputSignal<SdPermissionInput>;
5
6
  readonly sdPermissionKey: import("@angular/core").InputSignal<string | undefined>;
6
7
  constructor();
7
8
  static ɵfac: i0.ɵɵFactoryDeclaration<SdPermissionDirective, never>;
@@ -1,11 +1,62 @@
1
1
  import * as i0 from "@angular/core";
2
+ /**
3
+ * Opt-out TƯỜNG MINH: "chỗ này cố ý không yêu cầu quyền nào".
4
+ *
5
+ * Dùng cho `route.data.permission`, `[sdPermission]` hoặc `hasPermission(...)` khi một route/phần tử
6
+ * thật sự công khai. Mọi giá trị rỗng khác (`undefined`, `null`, `''`, `[]`) đều bị coi là CẤU HÌNH
7
+ * THIẾU và bị từ chối — xem `SdPermissionService.hasPermission`.
8
+ */
9
+ export declare const SD_PERMISSION_PUBLIC = "__SD_PERMISSION_PUBLIC__";
10
+ /** Kiểu đầu vào cho `hasPermission` / `[sdPermission]`. */
11
+ export type SdPermissionInput = string | string[] | null | undefined;
2
12
  export declare class SdPermissionService {
3
13
  #private;
4
14
  constructor();
5
15
  loadPermissions: (key?: string) => Promise<string[]>;
6
16
  loadAllPermissions: () => Promise<void>;
7
- hasPermission: (permission: string | string[], key?: string) => boolean;
17
+ /**
18
+ * Xoá TOÀN BỘ quyền đã nạp (mọi key) — cả map trong bộ nhớ, cờ "đã nạp" lẫn bản mirror
19
+ * `sessionStorage` của các key bật `persistCache`.
20
+ *
21
+ * ⚠️ BẮT BUỘC gọi khi signout. Service là singleton `providedIn: 'root'`, nên trong một SPA
22
+ * signout → signin (không reload trang) mà không reset thì `loadPermissions()` sẽ short-circuit
23
+ * theo key đã cache và user MỚI thừa hưởng nguyên bộ quyền của user CŨ.
24
+ *
25
+ * ```ts
26
+ * auth.signout$?.subscribe(() => permissionService.reset());
27
+ * ```
28
+ */
29
+ reset: () => void;
30
+ /**
31
+ * Xoá quyền đã nạp của MỘT key (mặc định là key portal `undefined`), buộc lần
32
+ * `loadPermissions(key)` kế tiếp gọi lại loader. Dùng khi chỉ một profile/tenant đổi quyền;
33
+ * signout thì dùng {@link reset}.
34
+ */
35
+ invalidate: (key?: string) => void;
36
+ /**
37
+ * Kiểm tra quyền (OR cho mảng).
38
+ *
39
+ * ⚠️ BREAKING: đầu vào rỗng (`undefined` / `null` / `''` / `[]`) giờ trả `false`.
40
+ * Muốn "không yêu cầu quyền" thì phải nói ra bằng {@link SD_PERMISSION_PUBLIC}.
41
+ */
42
+ hasPermission: (permission: SdPermissionInput, key?: string) => boolean;
8
43
  getToken: (key?: string) => Promise<string | null | undefined>;
44
+ /**
45
+ * Giải mã phần payload của JWT hiện tại và trả về claim **CHƯA ĐƯỢC XÁC THỰC**.
46
+ *
47
+ * ⚠️ KHÔNG kiểm chữ ký, KHÔNG kiểm `exp`/`nbf`/`aud`/`iss`. Đây thuần tuý là base64url-decode: bất
48
+ * kỳ ai cũng tự tạo được một token có claim tuỳ ý và hàm này sẽ vui vẻ trả về. Vì vậy kết quả CHỈ
49
+ * dùng cho mục đích hiển thị (tên, avatar, tenant đang chọn…) và TUYỆT ĐỐI không được dùng để ra
50
+ * quyết định phân quyền — quyền phải do backend xác thực chữ ký rồi trả về.
51
+ *
52
+ * Trả `null` khi không có token hoặc payload hỏng.
53
+ */
54
+ readUnverifiedTokenClaims: <T>(key?: string) => Promise<T | null>;
55
+ /**
56
+ * @deprecated Tên `decodeToken` gợi ý một thao tác đã được kiểm chứng, trong khi thực tế payload
57
+ * hoàn toàn KHÔNG được xác thực. Dùng {@link readUnverifiedTokenClaims} — alias này chỉ còn để
58
+ * consumer cũ không vỡ và sẽ bị gỡ ở release sau.
59
+ */
9
60
  decodeToken: <T>(key?: string) => Promise<T | null>;
10
61
  static ɵfac: i0.ɵɵFactoryDeclaration<SdPermissionService, never>;
11
62
  static ɵprov: i0.ɵɵInjectableDeclaration<SdPermissionService>;
package/package.json CHANGED
@@ -1,20 +1,49 @@
1
1
  {
2
2
  "name": "@sdcorejs/angular",
3
- "version": "19.1.5",
3
+ "version": "19.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
+ },
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/sdcorejs/sdcorejs-angular.git"
25
+ },
26
+ "homepage": "https://sdcorejs.github.io/sdcorejs-angular/",
27
+ "bugs": {
28
+ "url": "https://github.com/sdcorejs/sdcorejs-angular/issues"
29
+ },
5
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",
6
33
  "@angular/common": "^19.0.0 || ^20.0.0 || ^21.0.0",
7
34
  "@angular/core": "^19.0.0 || ^20.0.0 || ^21.0.0",
35
+ "@angular/forms": "^19.0.0 || ^20.0.0 || ^21.0.0",
8
36
  "@angular/material": "^19.0.0 || ^20.0.0 || ^21.0.0",
9
- "@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"
10
41
  },
11
42
  "dependencies": {
12
43
  "@sdcorejs/angular-material-datetime": "1.0.3",
13
44
  "@sdcorejs/utils": "1.1.4",
14
45
  "@lucide/angular": "^1.22.0",
15
46
  "@ckeditor/ckeditor5-angular": "11.1.2",
16
- "@omer-go/docx-parser-converter-ts": "^1.0.0",
17
- "@bjorn3/browser_wasi_shim": "^0.4.2",
18
47
  "ckeditor5": "48.0.0",
19
48
  "chart.js": "^4.5.1",
20
49
  "date-fns": "^3.6.0",
@@ -24,7 +53,13 @@
24
53
  "prismjs": "^1.30.0",
25
54
  "tslib": "^2.8.0"
26
55
  },
27
- "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
+ ],
28
63
  "module": "fesm2022/sdcorejs-angular.mjs",
29
64
  "typings": "index.d.ts",
30
65
  "exports": {
@@ -39,14 +74,14 @@
39
74
  "types": "./components/index.d.ts",
40
75
  "default": "./fesm2022/sdcorejs-angular-components.mjs"
41
76
  },
42
- "./configurations": {
43
- "types": "./configurations/index.d.ts",
44
- "default": "./fesm2022/sdcorejs-angular-configurations.mjs"
45
- },
46
77
  "./directives": {
47
78
  "types": "./directives/index.d.ts",
48
79
  "default": "./fesm2022/sdcorejs-angular-directives.mjs"
49
80
  },
81
+ "./configurations": {
82
+ "types": "./configurations/index.d.ts",
83
+ "default": "./fesm2022/sdcorejs-angular-configurations.mjs"
84
+ },
50
85
  "./forms": {
51
86
  "types": "./forms/index.d.ts",
52
87
  "default": "./fesm2022/sdcorejs-angular-forms.mjs"
@@ -63,10 +98,6 @@
63
98
  "types": "./interceptors/index.d.ts",
64
99
  "default": "./fesm2022/sdcorejs-angular-interceptors.mjs"
65
100
  },
66
- "./models": {
67
- "types": "./models/index.d.ts",
68
- "default": "./fesm2022/sdcorejs-angular-models.mjs"
69
- },
70
101
  "./modules": {
71
102
  "types": "./modules/index.d.ts",
72
103
  "default": "./fesm2022/sdcorejs-angular-modules.mjs"
@@ -103,10 +134,6 @@
103
134
  "types": "./components/badge/index.d.ts",
104
135
  "default": "./fesm2022/sdcorejs-angular-components-badge.mjs"
105
136
  },
106
- "./components/base": {
107
- "types": "./components/base/index.d.ts",
108
- "default": "./fesm2022/sdcorejs-angular-components-base.mjs"
109
- },
110
137
  "./components/breadcrumb": {
111
138
  "types": "./components/breadcrumb/index.d.ts",
112
139
  "default": "./fesm2022/sdcorejs-angular-components-breadcrumb.mjs"
@@ -131,10 +158,6 @@
131
158
  "types": "./components/data-state/index.d.ts",
132
159
  "default": "./fesm2022/sdcorejs-angular-components-data-state.mjs"
133
160
  },
134
- "./components/document-builder": {
135
- "types": "./components/document-builder/index.d.ts",
136
- "default": "./fesm2022/sdcorejs-angular-components-document-builder.mjs"
137
- },
138
161
  "./components/editor": {
139
162
  "types": "./components/editor/index.d.ts",
140
163
  "default": "./fesm2022/sdcorejs-angular-components-editor.mjs"
@@ -355,18 +378,6 @@
355
378
  "types": "./services/confirm/index.d.ts",
356
379
  "default": "./fesm2022/sdcorejs-angular-services-confirm.mjs"
357
380
  },
358
- "./services/docx": {
359
- "types": "./services/docx/index.d.ts",
360
- "default": "./fesm2022/sdcorejs-angular-services-docx.mjs"
361
- },
362
- "./services/excel": {
363
- "types": "./services/excel/index.d.ts",
364
- "default": "./fesm2022/sdcorejs-angular-services-excel.mjs"
365
- },
366
- "./services/license": {
367
- "types": "./services/license/index.d.ts",
368
- "default": "./fesm2022/sdcorejs-angular-services-license.mjs"
369
- },
370
381
  "./services/loading": {
371
382
  "types": "./services/loading/index.d.ts",
372
383
  "default": "./fesm2022/sdcorejs-angular-services-loading.mjs"
@@ -375,6 +386,10 @@
375
386
  "types": "./services/notify/index.d.ts",
376
387
  "default": "./fesm2022/sdcorejs-angular-services-notify.mjs"
377
388
  },
389
+ "./services/excel": {
390
+ "types": "./services/excel/index.d.ts",
391
+ "default": "./fesm2022/sdcorejs-angular-services-excel.mjs"
392
+ },
378
393
  "./services/persistence": {
379
394
  "types": "./services/persistence/index.d.ts",
380
395
  "default": "./fesm2022/sdcorejs-angular-services-persistence.mjs"