@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
package/README.md CHANGED
@@ -21,6 +21,16 @@ Install the package major that matches your Angular application.
21
21
 
22
22
  The package manifests accept Angular 19–21 peers, while releases provide an Angular-aligned package line for each major. The first version number is reserved for Angular compatibility, so read the [changelog](https://github.com/sdcorejs/sdcorejs-angular/blob/main/CHANGELOG.md) for explicitly labeled breaking changes before upgrading.
23
23
 
24
+ ### Peer dependencies
25
+
26
+ The package declares these peers. A standard Angular CLI application already provides all of them except `@angular/material` and `@angular/material-date-fns-adapter`, which is why only those two appear in the install commands above.
27
+
28
+ | Peer | Range |
29
+ | --- | --- |
30
+ | `@angular/animations` · `@angular/cdk` · `@angular/common` · `@angular/core` · `@angular/forms` · `@angular/platform-browser` · `@angular/router` | `^19.0.0 \|\| ^20.0.0 \|\| ^21.0.0` |
31
+ | `@angular/material` · `@angular/material-date-fns-adapter` | `^19.0.0 \|\| ^20.0.0 \|\| ^21.0.0` |
32
+ | `rxjs` | `^7.8.0` |
33
+
24
34
  ## Installation and setup
25
35
 
26
36
  The examples below use Angular 19; replace `19` with your application's Angular major.
@@ -176,17 +186,15 @@ export const appConfig: ApplicationConfig = {
176
186
  | [Versions registry](https://sdcorejs.github.io/sdcorejs-angular/docs/versions.json) | Select docs matching an installed package version |
177
187
  | [Machine-readable catalog](https://sdcorejs.github.io/sdcorejs-angular/docs/catalog.json) | Discover documentation across maintained package lines |
178
188
  | [E2E attributes](https://github.com/sdcorejs/sdcorejs-angular/blob/main/versions/v19/projects/sdcorejs-angular/docs/E2E-ATTRIBUTES.md) | Stable runtime selectors and state attributes |
179
- | [1.5 migration guide](https://github.com/sdcorejs/sdcorejs-angular/blob/main/docs/migrations/1.5.md) | Layout account actions, V2/V3 navigation, containment, and versioned docs |
180
- | [1.4 migration guide](https://github.com/sdcorejs/sdcorejs-angular/blob/main/docs/migrations/1.4.md) | Dedupe, loading, persistence, connector, responsive, and signal migrations |
189
+ | [Release notes for this version](https://sdcorejs.github.io/sdcorejs-angular/docs/latest/CHANGELOG.md) | What changed in this release and how it differs from the previous one |
181
190
 
182
191
  ## Versioning
183
192
 
184
193
  - Use `@sdcorejs/angular@^19`, `@^20`, or `@^21` to match the application's Angular major.
185
194
  - Maintained package lines are released from the same feature surface with required Angular-major adaptations.
186
195
  - Consumer-breaking changes and migration notes are recorded in the [changelog](https://github.com/sdcorejs/sdcorejs-angular/blob/main/CHANGELOG.md).
187
- - Before adopting the `1.5` suffix, follow the [1.5 migration guide](https://github.com/sdcorejs/sdcorejs-angular/blob/main/docs/migrations/1.5.md).
188
- - Before adopting the `1.4` suffix, follow the [1.4 migration guide](https://github.com/sdcorejs/sdcorejs-angular/blob/main/docs/migrations/1.4.md).
189
196
  - Version-pinned reference docs remain available under `https://sdcorejs.github.io/sdcorejs-angular/docs/<package-version>/`.
197
+ - Every published version is self-contained: `docs/<package-version>/CHANGELOG.md` carries that release's notes and a source diff link against the previous release.
190
198
 
191
199
  ## Contributing
192
200
 
@@ -0,0 +1,18 @@
1
+ // why: Material tạo khoảng cách giữa leading icon và nhãn của menu item bằng `margin-right` đặt trên
2
+ // `.mat-icon`. Với `<sd-icon>` thì `.mat-icon` nằm BÊN TRONG host, nên margin đó không đẩy nhãn ra —
3
+ // nó chỉ làm glyph lệch và bị xén trong host (sd-icon đã trung hoà margin đó ở cấp component). Rule
4
+ // dưới đây trả khoảng cách về đúng cấp: host `<sd-icon>` khi nó là icon dẫn đầu của menu item.
5
+ //
6
+ // Đặt ở cấp host nên Material font icon và Lucide SVG hành xử giống hệt nhau — Lucide không render
7
+ // `.mat-icon` nên trước đây không nhận được khoảng cách nào từ Material.
8
+ //
9
+ // Chỉ nhắm con TRỰC TIẾP: menu tự bọc icon trong wrapper flex có `gap` riêng (sd-table command,
10
+ // sd-tree command) không được cộng thêm margin. Angular slot nội dung không phải `mat-icon` vào
11
+ // trong `.mat-mdc-menu-item-text`, nên phải liệt kê cả hai cấp.
12
+ //
13
+ // Bọc trong `:where()` để specificity bằng 0: bất kỳ rule nào của menu cụ thể — kể cả một class đơn —
14
+ // cũng thắng, nên đây là default an toàn chứ không phải thứ phải đi vá bằng `!important`.
15
+ :where(.mat-mdc-menu-item > sd-icon:first-child),
16
+ :where(.mat-mdc-menu-item > .mat-mdc-menu-item-text > sd-icon:first-child) {
17
+ margin-right: var(--mat-menu-item-spacing, 12px);
18
+ }
@@ -18,3 +18,18 @@
18
18
  // --------------------------------------------------------------------------
19
19
  .visible { visibility: visible !important; }
20
20
  .invisible { visibility: hidden !important; }
21
+
22
+ // --------------------------------------------------------------------------
23
+ // Screen-reader-only text (visually hidden, still in the accessibility tree)
24
+ // --------------------------------------------------------------------------
25
+ .sd-visually-hidden {
26
+ position: absolute !important;
27
+ width: 1px !important;
28
+ height: 1px !important;
29
+ padding: 0 !important;
30
+ margin: -1px !important;
31
+ overflow: hidden !important;
32
+ clip: rect(0, 0, 0, 0) !important;
33
+ white-space: nowrap !important;
34
+ border: 0 !important;
35
+ }
@@ -4,6 +4,7 @@
4
4
  @use './core/color.scss';
5
5
  @use './core/form.scss';
6
6
  @use './core/image.scss';
7
+ @use './core/menu.scss';
7
8
  @use './core/scrollbar.scss';
8
9
  @use './themes/default.scss';
9
10
  @use './themes/material-theme.scss';
@@ -12,11 +12,13 @@ export declare class SdAnchor implements OnDestroy {
12
12
  ellipsis: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
13
13
  overScroll: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
14
14
  hideNav: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
15
+ hideNavOnMobile: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
15
16
  color: import("@angular/core").InputSignal<Color>;
17
+ readonly navHidden: import("@angular/core").Signal<boolean>;
16
18
  activeSectionId: import("@angular/core").WritableSignal<string>;
17
19
  constructor();
18
20
  scrollSectionByClick(idSectionTarget: string): void;
19
21
  ngOnDestroy(): void;
20
22
  static ɵfac: i0.ɵɵFactoryDeclaration<SdAnchor, never>;
21
- static ɵcmp: i0.ɵɵComponentDeclaration<SdAnchor, "sd-anchor", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "sidebarWidth": { "alias": "sidebarWidth"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; "overScroll": { "alias": "overScroll"; "required": false; "isSignal": true; }; "hideNav": { "alias": "hideNav"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; }, {}, ["sections"], ["*"], true, never>;
23
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdAnchor, "sd-anchor", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "sidebarWidth": { "alias": "sidebarWidth"; "required": false; "isSignal": true; }; "ellipsis": { "alias": "ellipsis"; "required": false; "isSignal": true; }; "overScroll": { "alias": "overScroll"; "required": false; "isSignal": true; }; "hideNav": { "alias": "hideNav"; "required": false; "isSignal": true; }; "hideNavOnMobile": { "alias": "hideNavOnMobile"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; }, {}, ["sections"], ["*"], true, never>;
22
24
  }
@@ -21,6 +21,7 @@ export declare class SdBadge {
21
21
  size: import("@angular/core").InputSignalWithTransform<Size, Size | null | undefined>;
22
22
  readonly click: EventEmitter<Event>;
23
23
  onClick: (event: Event) => void;
24
+ onActivateKey: (event: Event) => void;
24
25
  effectiveColor: import("@angular/core").Signal<Color>;
25
26
  baseColorClasses: import("@angular/core").Signal<{
26
27
  'c-primary': boolean;
@@ -6,7 +6,7 @@ import * as i0 from "@angular/core";
6
6
  * - CKEditor's CSS must be global (applies to body-rendered overlays, dialogs, balloons),
7
7
  * which means whichever Angular component declares it must use ViewEncapsulation.None.
8
8
  * - Switching encapsulation on the main editor components (`<sd-editor>`, `<sd-mini-editor>`,
9
- * `<sd-document-builder>`) would un-scope all their local styles too.
9
+ * `<sd-mini-editor>`) would un-scope all their local styles too.
10
10
  * - Instead, this tiny no-render component owns the global CSS. The editor components embed
11
11
  * `<sd-ckeditor-styles>` at the top of their template; the CSS is injected once into <head>
12
12
  * the first time any editor instance mounts. Editor components themselves keep
@@ -8,7 +8,7 @@ export declare class ExpressionBuilderComponent implements OnInit {
8
8
  modal?: SdModal;
9
9
  form: FormGroup<{}>;
10
10
  attributeOperators: Record<"string" | "number" | "boolean" | "datetime" | "values", {
11
- value: import("@sdcorejs/angular/components/form-generic").Operator;
11
+ value: import("@sdcorejs/angular/components/form-generic").SdFormGenericOperator;
12
12
  symbol?: string;
13
13
  display: string;
14
14
  }[]>;
@@ -37,6 +37,7 @@ export declare class ExpressionBuilderComponent implements OnInit {
37
37
  constructor(...args: unknown[]);
38
38
  ngOnInit(): void;
39
39
  onEdit: () => Promise<void>;
40
+ onExprKeydown: (event: KeyboardEvent) => void;
40
41
  addCondition: (conditions: SdFormGenericExpression["conditions"]) => void;
41
42
  addCombinator: (conditions: SdFormGenericExpression["conditions"]) => void;
42
43
  remove: (conditions: SdFormGenericExpression["conditions"], idx: number) => void;
@@ -104,7 +104,7 @@ export declare class SdFormBuilder implements OnInit, OnDestroy {
104
104
  placeholderColumnsFor: (item: FormBuilderComponent | SdFormGenericComponent | SdFormGenericGroup | DragDropRowItem | undefined) => number;
105
105
  /** True nếu component có expression điều kiện — drives the "conditional" status chip. */
106
106
  hasConditional: (item: SdFormGenericComponent | SdFormGenericGroup) => boolean;
107
- /** Map SdColor preset → 2 CSS var names cho header-bg và header-fg của group card. */
107
+ /** Map Color preset → 2 CSS var names cho header-bg và header-fg của group card. */
108
108
  groupColorVars: (color: string | undefined | null) => {
109
109
  bg: string;
110
110
  fg: string;
@@ -112,6 +112,7 @@ export declare class SdFormBuilder implements OnInit, OnDestroy {
112
112
  /** Segmented Design/Preview toggle (replaces play_circle/stop_circle). */
113
113
  setMode: (preview: boolean) => void;
114
114
  /** Mở canvas thiết kế riêng cho 1 group (chỉ children của nó). Snapshot để Cancel revert. */
115
+ onEnterGroupEditKeydown: (group: SdFormGenericGroup, event: KeyboardEvent) => void;
115
116
  enterGroupEdit: (group: SdFormGenericGroup) => void;
116
117
  /** OK: giữ thay đổi children, quay về canvas chính. */
117
118
  confirmGroupEdit: () => void;
@@ -124,6 +125,7 @@ export declare class SdFormBuilder implements OnInit, OnDestroy {
124
125
  /** Xoá component theo scope hiện tại (top-level hoặc children của group đang Detail). */
125
126
  removeComponent: (id: string) => void;
126
127
  selectComponent: (item?: SdFormGenericComponent | SdFormGenericGroup) => void;
128
+ onPaletteItemKeydown: (item: FormBuilderComponent, event: KeyboardEvent) => void;
127
129
  onClickedOutside: (e: any) => void;
128
130
  clickFormContentEmpty: () => void;
129
131
  drop: (event: CdkDragDrop<any[]>) => void;
@@ -0,0 +1,34 @@
1
+ import { OnDestroy, OnInit } from '@angular/core';
2
+ import { FormGroup } from '@angular/forms';
3
+ import { Subject } from 'rxjs';
4
+ import { SdFormGenericCheckbox } from '../../../../../../models';
5
+ import * as i0 from "@angular/core";
6
+ /**
7
+ * Ô checkbox của form-render.
8
+ *
9
+ * why: form-builder từ trước đã tạo được field `type: 'checkbox'` nhưng form-render KHÔNG có nhánh
10
+ * nào cho nó — field dựng trong builder chạy ra form trống, không hiện gì. Component này lấp chỗ đó
11
+ * theo đúng khuôn của các control còn lại (textfield/radio…): nhận cùng bộ input, tự áp defaultValue,
12
+ * và nghe `setVariables` để giá trị đặt từ biểu thức cũng phản ánh lên UI.
13
+ */
14
+ export declare class CheckboxComponent implements OnInit, OnDestroy {
15
+ #private;
16
+ private ref;
17
+ readonly setVariables: import("@angular/core").InputSignal<Subject<{
18
+ key: string;
19
+ value: any;
20
+ }>>;
21
+ readonly form: import("@angular/core").InputSignal<FormGroup<{}>>;
22
+ entity: Record<string, any>;
23
+ set _entity(val: Record<string, any>);
24
+ component?: SdFormGenericCheckbox;
25
+ set _component(val: SdFormGenericCheckbox);
26
+ disabled: boolean;
27
+ set _disabled(val: boolean | '' | undefined | null);
28
+ viewed: boolean;
29
+ set _viewed(val: boolean | '' | undefined | null);
30
+ ngOnInit(): void;
31
+ ngOnDestroy(): void;
32
+ static ɵfac: i0.ɵɵFactoryDeclaration<CheckboxComponent, never>;
33
+ static ɵcmp: i0.ɵɵComponentDeclaration<CheckboxComponent, "lib-checkbox", never, { "setVariables": { "alias": "setVariables"; "required": true; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "_entity": { "alias": "entity"; "required": true; }; "_component": { "alias": "component"; "required": true; }; "_disabled": { "alias": "disabled"; "required": false; }; "_viewed": { "alias": "viewed"; "required": false; }; }, {}, never, never, true, never>;
34
+ }
@@ -6,6 +6,7 @@ export * from './number/number.component';
6
6
  export * from './datetime/datetime.component';
7
7
  export * from './select/select.component';
8
8
  export * from './radio/radio.component';
9
+ export * from './checkbox/checkbox.component';
9
10
  export * from './upload/upload.component';
10
11
  export * from './table/table.component';
11
12
  export * from './html/html.component';
@@ -31,7 +31,7 @@ export declare class TableComponent implements AfterViewInit, OnDestroy, OnInit
31
31
  readonly modelChange: import("@angular/core").OutputEmitterRef<any[]>;
32
32
  tableOption?: SdTableOption;
33
33
  row: any;
34
- columnValues: Record<string, SdFormGenericSelectionItem[] | SdSearch>;
34
+ columnValues: Record<string, SdFormGenericSelectionItem[] | SdSearch<SdFormGenericSelectionItem>>;
35
35
  formRenderColumn: Record<string, SdFormGenericTableColumn>;
36
36
  fileKeys: string[];
37
37
  imageKeys: string[];
@@ -40,6 +40,11 @@ export declare class TableComponent implements AfterViewInit, OnDestroy, OnInit
40
40
  ngOnInit(): void;
41
41
  ngAfterViewInit(): void;
42
42
  ngOnDestroy(): void;
43
+ /**
44
+ * Tiêu đề của side-drawer phải nói đúng tác vụ đang làm — trước đây nó cứng là "Chi tiết" cho cả
45
+ * thêm mới lẫn sửa, còn dòng "Tạo mới/cập nhật" thì rơi vào thân drawer vì gắn nhầm slot.
46
+ */
47
+ get detailTitle(): string;
43
48
  onDetail: (row?: any) => void;
44
49
  onCancel: () => void;
45
50
  onAccept: (addable?: boolean) => void;
@@ -11,7 +11,7 @@ export declare class SdFeelExpression implements OnInit {
11
11
  modal?: SdModal;
12
12
  form: FormGroup<{}>;
13
13
  attributeOperators: Record<"string" | "number" | "boolean" | "datetime" | "values", {
14
- value: import("@sdcorejs/angular/components/form-generic").Operator;
14
+ value: import("@sdcorejs/angular/components/form-generic").SdFormGenericOperator;
15
15
  symbol?: string;
16
16
  display: string;
17
17
  }[]>;
@@ -1,7 +1,7 @@
1
1
  import { SdSearch } from '@sdcorejs/angular/forms/models';
2
2
  import { SdFormGenericArgs, SdFormGenericDefinitionHtml, SdFormGenericDefinitionSelection, SdFormGenericDefinitionTable, SdFormGenericSelectionItem, SdFormGenericTemplate } from '../models';
3
3
  import { SdFormGenericValidationConfiguration } from '../models/form-generic-validation.model';
4
- export interface IWorkflowConfigurationForm<TSelectionArgs = any> {
4
+ export interface IWorkflowConfigurationForm<TSelectionArgs = unknown> {
5
5
  templates: SdFormGenericTemplate[];
6
6
  selections: SdFormGenericDefinitionSelection<any, TSelectionArgs>[] | (() => SdFormGenericDefinitionSelection<any, TSelectionArgs>[]) | (() => Promise<SdFormGenericDefinitionSelection[]>);
7
7
  getValues?: (key: string, selectionArgs?: TSelectionArgs) => Promise<SdFormGenericSelectionItem[]>;
@@ -17,9 +17,9 @@ export interface SdFormGenericLayout {
17
17
  columns: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
18
18
  mobileColumns?: '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | '11' | '12' | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;
19
19
  }
20
- export declare const GenerateId: () => string;
21
- export declare const GenerateKey: () => string;
22
- export declare const SdFormatComponent: (component: SdFormGenericComponent | SdFormGenericGroup) => void;
20
+ export declare const sdGenerateId: () => string;
21
+ export declare const sdGenerateKey: () => string;
22
+ export declare const sdFormatComponent: (component: SdFormGenericComponent | SdFormGenericGroup) => void;
23
23
  export interface SdFormGenericVariable {
24
24
  id: string;
25
25
  key: string;
@@ -171,7 +171,7 @@ export interface FormRenderComponentTableColumnValues {
171
171
  query?: Record<string, any>;
172
172
  }
173
173
  export type SdFormGenericTableColumn<T = any> = TableColumnString<T> | TableColumnNumber<T> | TableColumnBool<T> | TableColumnDate<T> | TableColumnDatetime<T> | TableColumnRadio<T> | TableColumnValues<T> | TableColumnImage<T> | TableColumnFile<T>;
174
- export declare const TableColumnTypes: {
174
+ export declare const SD_TABLE_COLUMN_TYPES: {
175
175
  value: string;
176
176
  display: string;
177
177
  }[];
@@ -301,17 +301,17 @@ export interface FormBuilderComponent {
301
301
  group: FormBuilderComponentGroup;
302
302
  name: string;
303
303
  }
304
- export declare const FormBuilderComponents: FormBuilderComponent[];
304
+ export declare const SD_FORM_BUILDER_COMPONENTS: FormBuilderComponent[];
305
305
  /** Lookup: component type → Material icon + label, used by attribute panel header. */
306
- export declare const COMPONENT_ICONS: Record<string, {
306
+ export declare const SD_COMPONENT_ICONS: Record<string, {
307
307
  symbol: string;
308
308
  label: string;
309
309
  }>;
310
- export declare const GetComponentAttributes: (components: (SdFormGenericComponent | SdFormGenericGroup)[]) => {
310
+ export declare const sdGetComponentAttributes: (components: (SdFormGenericComponent | SdFormGenericGroup)[]) => {
311
311
  value: string;
312
312
  display: string;
313
313
  }[];
314
- export declare const GetVariableAttributes: (variables: SdFormGenericVariable[]) => {
314
+ export declare const sdGetVariableAttributes: (variables: SdFormGenericVariable[]) => {
315
315
  value: string;
316
316
  display: string;
317
317
  }[];
@@ -1,6 +1,6 @@
1
1
  import { SdSearch } from '@sdcorejs/angular/forms/models';
2
2
  import { SdFormGenericArgs } from './form-render/form-render-args.model';
3
- export interface SdFormGenericSelectionItem<T = any> {
3
+ export interface SdFormGenericSelectionItem<T = unknown> {
4
4
  value: string;
5
5
  display: string;
6
6
  disabled?: boolean;
@@ -11,8 +11,8 @@ export interface SdFormGenericSelectionStaticItem {
11
11
  value: string;
12
12
  label: string;
13
13
  }
14
- export type SdFormGenericDefinitionSelection<T = any, TArgs = any> = SelectionValues<T> | SelectionLazyValues<T> | SelectionValuesKey<TArgs> | SelectionLazyValuesKey<TArgs>;
15
- interface SelectionVariables<T = any> {
14
+ export type SdFormGenericDefinitionSelection<T = unknown, TArgs = unknown> = SelectionValues<T> | SelectionLazyValues<T> | SelectionValuesKey<TArgs> | SelectionLazyValuesKey<TArgs>;
15
+ interface SelectionVariables<T = unknown> {
16
16
  items?: {
17
17
  value: Extract<keyof T, string>;
18
18
  display: string;
@@ -40,10 +40,10 @@ interface SelectionLazyValuesKey<TArgs> extends SelecttionBase {
40
40
  lazyValuesKey: string;
41
41
  args?: TArgs;
42
42
  }
43
- interface SelectionValues<T = any> extends SelecttionBase {
43
+ interface SelectionValues<T = unknown> extends SelecttionBase {
44
44
  values: (args: SdFormGenericArgs) => Promise<SdFormGenericSelectionItem<T>[]>;
45
45
  }
46
- interface SelectionLazyValues<T = any> extends SelecttionBase {
46
+ interface SelectionLazyValues<T = unknown> extends SelecttionBase {
47
47
  lazyValues: (searchArgs: Parameters<SdSearch>[0], args: SdFormGenericArgs) => Promise<SdFormGenericSelectionItem<T>[]>;
48
48
  }
49
49
  export {};
@@ -14,9 +14,9 @@ export interface SdFormGenericExpressionCondition {
14
14
  value: any;
15
15
  dayInfo: DayInfo;
16
16
  }
17
- export type Operator = 'EQUAL' | 'NOT_EQUAL' | 'GREATER_THAN' | 'LESS_THAN' | 'GREATER_OR_EQUAL' | 'LESS_OR_EQUAL' | 'NULL' | 'NOT_NULL';
18
- export declare const Operators: {
19
- value: Operator;
17
+ export type SdFormGenericOperator = 'EQUAL' | 'NOT_EQUAL' | 'GREATER_THAN' | 'LESS_THAN' | 'GREATER_OR_EQUAL' | 'LESS_OR_EQUAL' | 'NULL' | 'NOT_NULL';
18
+ export declare const SdFormGenericOperators: {
19
+ value: SdFormGenericOperator;
20
20
  symbol?: string;
21
21
  display: string;
22
22
  }[];
@@ -43,16 +43,16 @@ export interface DayInfo {
43
43
  related?: 'LASTDAY' | 'NEXTDAY' | 'LASTWEEK' | 'NEXTWEEK' | 'LASTMONTH' | 'NEXTMONTH';
44
44
  relatedValue?: number;
45
45
  }
46
- export declare const DayInfoTypes: {
46
+ export declare const SD_DAY_INFO_TYPES: {
47
47
  value: string;
48
48
  display: string;
49
49
  }[];
50
- export declare const DayInfoPreviouses: {
50
+ export declare const SD_DAY_INFO_PREVIOUSES: {
51
51
  value: string;
52
52
  display: string;
53
53
  format: (n: number) => string;
54
54
  }[];
55
- export declare const GetDatetimeValue: (value: string) => string | undefined;
55
+ export declare const sdGetDatetimeValue: (value: string) => string | undefined;
56
56
  interface AttributeValues {
57
57
  value: string;
58
58
  display: string;
@@ -62,13 +62,13 @@ interface AttributeValues {
62
62
  display: string;
63
63
  }[];
64
64
  }
65
- export declare const AttributeOperators: Record<Attribute['type'], {
66
- value: Operator;
65
+ export declare const SD_ATTRIBUTE_OPERATORS: Record<Attribute['type'], {
66
+ value: SdFormGenericOperator;
67
67
  symbol?: string;
68
68
  display: string;
69
69
  }[]>;
70
- export declare const GetAttributes: (components: (SdFormGenericComponent | SdFormGenericGroup)[]) => Attribute[];
71
- export declare const TemplateToCondition: (template: string | undefined | null, entity: Record<string, any>) => string | undefined;
72
- export declare const EvaluateExpression: (condition: SdFormGenericExpression | SdFormGenericExpressionCondition, entity: Record<string, any>) => boolean | undefined;
73
- export declare const ExpressionToJavascriptExpression: (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => string | undefined;
70
+ export declare const sdGetAttributes: (components: (SdFormGenericComponent | SdFormGenericGroup)[]) => Attribute[];
71
+ export declare const sdTemplateToCondition: (template: string | undefined | null, entity: Record<string, any>) => string | undefined;
72
+ export declare const sdEvaluateExpression: (condition: SdFormGenericExpression | SdFormGenericExpressionCondition, entity: Record<string, any>) => boolean | undefined;
73
+ export declare const sdExpressionToJavascriptExpression: (condition: SdFormGenericExpression | SdFormGenericExpressionCondition) => string | undefined;
74
74
  export {};
@@ -6,3 +6,4 @@ export type * from './form-generic-definition-selection.model';
6
6
  export type * from './form-generic-definition-table.model';
7
7
  export type * from './form-generic-definition-html.model';
8
8
  export * from './form-generic-expression.model';
9
+ export * from './form-generic-validation.model';
@@ -4,7 +4,7 @@ import * as i0 from "@angular/core";
4
4
  export declare class FormGenericService {
5
5
  #private;
6
6
  private readonly configuration;
7
- get selections(): (() => Promise<SdFormGenericDefinitionSelection[]>) | SdFormGenericDefinitionSelection<any, any>[] | (() => SdFormGenericDefinitionSelection<any, any>[]);
7
+ get selections(): (() => Promise<SdFormGenericDefinitionSelection[]>) | SdFormGenericDefinitionSelection<any, unknown>[] | (() => SdFormGenericDefinitionSelection<any, unknown>[]);
8
8
  get tables(): import("@sdcorejs/angular/components/form-generic").SdFormGenericDefinitionTable<any>[];
9
9
  getSelection: (valuesKey: string | undefined | null) => Promise<SdFormGenericDefinitionSelection | undefined>;
10
10
  selection: {
@@ -12,7 +12,7 @@ export declare class FormGenericService {
12
12
  getDefinition: (valuesKey: string | undefined | null) => Promise<SdFormGenericDefinitionSelection | undefined>;
13
13
  items: (valuesKey: string | undefined | null, args: SdFormGenericArgs) => Promise<SdFormGenericSelectionItem[] | SdSearch<SdFormGenericSelectionItem>>;
14
14
  variables: {
15
- detail: (valuesKey: string, values: string | number | string[] | number[], args: SdFormGenericArgs) => Promise<any>;
15
+ detail: (valuesKey: string, values: string | number | string[] | number[], args: SdFormGenericArgs) => Promise<unknown>;
16
16
  };
17
17
  };
18
18
  html: {
@@ -36,6 +36,7 @@ export declare class SdImportExcel implements OnInit, OnDestroy {
36
36
  accept: () => void;
37
37
  setValidation: (validations: SdImportExcelValidation[]) => void;
38
38
  view: (showing?: "ALL" | "SUCCESS" | "WARNING" | "ERROR") => void;
39
+ onDownloadTemplateKeydown: (event: KeyboardEvent) => void;
39
40
  downloadTemplate: () => Promise<void>;
40
41
  export: () => Promise<void>;
41
42
  onClosed: () => void;
@@ -11,12 +11,12 @@ export * from '@sdcorejs/angular/components/query-bar';
11
11
  export * from '@sdcorejs/angular/components/upload-file';
12
12
  export * from '@sdcorejs/angular/components/section';
13
13
  export * from '@sdcorejs/angular/components/inform';
14
+ export * from '@sdcorejs/angular/components/form-generic';
14
15
  export * from '@sdcorejs/angular/components/anchor';
15
16
  export * from '@sdcorejs/angular/components/query-builder';
16
17
  export * from '@sdcorejs/angular/components/org-chart';
17
18
  export * from '@sdcorejs/angular/components/tree';
18
19
  export * from '@sdcorejs/angular/components/import-excel';
19
- export * from '@sdcorejs/angular/components/document-builder';
20
20
  export * from '@sdcorejs/angular/components/mini-editor';
21
21
  export * from '@sdcorejs/angular/components/view';
22
22
  export * from '@sdcorejs/angular/components/code-editor';
@@ -29,3 +29,8 @@ export * from '@sdcorejs/angular/components/breadcrumb';
29
29
  export * from '@sdcorejs/angular/components/data-state';
30
30
  export * from '@sdcorejs/angular/components/job-progress';
31
31
  export * from '@sdcorejs/angular/components/audit-diff';
32
+ export * from '@sdcorejs/angular/components/ckeditor-styles';
33
+ export * from '@sdcorejs/angular/components/history';
34
+ export * from '@sdcorejs/angular/components/operator';
35
+ export * from '@sdcorejs/angular/components/stepper';
36
+ export * from '@sdcorejs/angular/components/tab';
@@ -14,7 +14,7 @@ export interface SdMiniEditorMentionConfig {
14
14
  attributes?: Record<string, string>;
15
15
  };
16
16
  }
17
- export type SdMiniEditorMentionItem<T = any> = MentionFeedObjectItem & {
17
+ export type SdMiniEditorMentionItem<T = unknown> = MentionFeedObjectItem & {
18
18
  data?: T;
19
19
  };
20
20
  export interface SdMiniEditorOption {
@@ -1,8 +1,8 @@
1
- import { ElementRef, TemplateRef } from '@angular/core';
1
+ import { ElementRef, OnDestroy, TemplateRef } from '@angular/core';
2
2
  import { Color } from '@sdcorejs/utils/models';
3
3
  import * as i0 from "@angular/core";
4
4
  export type SdModalBeforeClose = () => boolean | Promise<boolean>;
5
- export declare class SdModal {
5
+ export declare class SdModal implements OnDestroy {
6
6
  #private;
7
7
  static index: import("@angular/core").WritableSignal<number>;
8
8
  templateRef: import("@angular/core").Signal<TemplateRef<any>>;
@@ -26,6 +26,7 @@ export declare class SdModal {
26
26
  isOpened: import("@angular/core").WritableSignal<boolean>;
27
27
  alreadyOpened: import("@angular/core").WritableSignal<boolean>;
28
28
  constructor();
29
+ ngOnDestroy(): void;
29
30
  open: () => void;
30
31
  close: () => void;
31
32
  requestClose: () => Promise<boolean>;
@@ -1,11 +1,93 @@
1
1
  import { CdkPortal } from '@angular/cdk/portal';
2
2
  import * as i0 from "@angular/core";
3
+ /**
4
+ * `<sd-modal-resizable>` — right-docked, non-modal panel that can be minimized, expanded or pushed
5
+ * fullscreen. Several panels stack side by side along the right edge of the viewport, so the user
6
+ * can keep multiple records open at once while still working with the page behind them.
7
+ *
8
+ * Use it for side-by-side comparison / inspector workflows. Use `<sd-modal>` when the task is
9
+ * blocking, and `<sd-side-drawer>` when a single overlay with a backdrop is enough.
10
+ *
11
+ * NOTE ON DOCS: this component deliberately has **no** sibling `sd-modal-resizable.md`. Every `*.md`
12
+ * under the library is swept into `published-docs/<version>/index.json` by `scripts/collect-docs.mjs`,
13
+ * and `scripts/generate-showcase-example-sources.test.mjs` asserts that list is 1:1 with the
14
+ * `publishedDocId` set in the showcase documentation registry. A published doc with no showcase page
15
+ * therefore turns that release guard red. Keep the reference here until the component ships a
16
+ * showcase demo + registry entry; only then add the `.md`.
17
+ *
18
+ * ```ts
19
+ * import { SdModalResizable } from '@sdcorejs/angular/components/modal-resizable';
20
+ * ```
21
+ *
22
+ * ```html
23
+ * <sd-button title="Open detail" type="fill" color="primary" (click)="panel.open()"></sd-button>
24
+ *
25
+ * <sd-modal-resizable #panel width="520px">
26
+ * <span sdTitle>Đơn hàng #1024</span>
27
+ *
28
+ * <div sdBody class="panel-body">
29
+ * <sd-section icon="receipt" title="Thông tin chung">
30
+ * <sd-section-item label="Khách hàng">Nguyen Van An</sd-section-item>
31
+ * </sd-section>
32
+ * </div>
33
+ *
34
+ * <sd-button sdFooterRight type="text" title="Đóng" (click)="panel.close()"></sd-button>
35
+ * </sd-modal-resizable>
36
+ * ```
37
+ *
38
+ * ### Slots
39
+ * | Selector | Where it renders |
40
+ * | ----------------- | ------------------------- |
41
+ * | `[sdTitle]` | Header title area. |
42
+ * | `[sdBody]` | Scrollable content area. |
43
+ * | `[sdFooterLeft]` | Footer left action group. |
44
+ * | `[sdFooterRight]` | Footer right action group.|
45
+ *
46
+ * Header, body and footer only render while the panel is open.
47
+ *
48
+ * ### Panel stacking
49
+ * The panel is portalled onto `document.body` (via `CdkPortal` + `DomPortalOutlet`), so laying panels
50
+ * out is a concern shared by all live instances rather than by a single view. Arrangement is scoped
51
+ * through the root-provided `SdModalResizableRegistry`: each instance registers its panel id on
52
+ * construction and unregisters it on destroy. `open`, `close`, `minimize`, `maximize` and
53
+ * `toggleMaximum` re-run the arrangement and rewrite inline `width` / `right` **only on registered,
54
+ * still-mounted panels**, in registration order. Consequences worth knowing:
55
+ * - Markup of your own that happens to carry the `.modal-resizable` class is **not** touched.
56
+ * (Earlier builds ran `document.querySelectorAll('.modal-resizable')` and rewrote every match.)
57
+ * - A destroyed panel immediately stops taking up a slot for the instances that outlive it.
58
+ * - Panels marked `c-closed`, and expanded panels with no captured `data-width`, are skipped.
59
+ *
60
+ * ### Lifecycle / teardown
61
+ * `open()`, `close()` and the arrangement pass each schedule a short `setTimeout` (100ms / 100ms /
62
+ * 200ms) that mutates DOM. All of them are tracked and cleared in `DestroyRef.onDestroy`, together
63
+ * with unregistering from the registry and destroying the portal view. Destroying the component
64
+ * mid-animation cannot run layout work against a detached panel.
65
+ *
66
+ * ### Anti-patterns
67
+ * - Rendering it inside a scroll container and expecting it to be clipped — it lives on `<body>`.
68
+ * - Reusing the `.modal-resizable` class on your own elements to "join" the stack; register a real
69
+ * component instead.
70
+ * - Writing inline `width` / `right` on a panel yourself — the next arrangement pass overwrites both.
71
+ *
72
+ * ### Tests
73
+ * `src/modal-resizable.component.spec.ts` — portal attach, open/close/minimize/maximize math,
74
+ * loading, editing, timer teardown, registry scoping. Run:
75
+ * `npx ng test sdcorejs-angular --watch=false --browsers=ChromeHeadless --include='projects/sdcorejs-angular/components/modal-resizable/src/modal-resizable.component.spec.ts'`
76
+ *
77
+ * ### Related
78
+ * `<sd-modal>` (blocking dialog / bottom-sheet), `<sd-side-drawer>` (single right-side overlay with
79
+ * a body scroll lock), `SdLoadingService` (powers `startLoading()` / `stopLoading()`).
80
+ */
3
81
  export declare class SdModalResizable {
4
82
  #private;
83
+ /** Generated DOM id of the panel element (`I<uuid>`). */
5
84
  readonly id: string;
6
85
  readonly portal: import("@angular/core").Signal<CdkPortal>;
86
+ /** Marks the panel as editable. Bare attribute = `true`. Default `false`. */
7
87
  readonly editable: import("@angular/core").InputSignalWithTransform<boolean, boolean | "">;
88
+ /** CSS width used while the panel is expanded (not a minimum). Default `'480px'`. */
8
89
  readonly width: import("@angular/core").InputSignal<string>;
90
+ /** Emitted by `toggleEditable()` with the new editing state. */
9
91
  readonly editingChanged: import("@angular/core").OutputEmitterRef<boolean>;
10
92
  readonly isEditing: import("@angular/core").WritableSignal<boolean>;
11
93
  readonly isOpened: import("@angular/core").WritableSignal<boolean>;
@@ -14,15 +96,25 @@ export declare class SdModalResizable {
14
96
  readonly isMinimum: import("@angular/core").WritableSignal<boolean>;
15
97
  readonly isMaximum: import("@angular/core").WritableSignal<boolean>;
16
98
  constructor();
99
+ /** Opens the panel, captures its rendered width, and expands it. */
17
100
  open: () => void;
101
+ /** Collapses the panel to zero width and stops loading. */
18
102
  close: () => void;
103
+ /** Shrinks the panel to the 300px minimum strip. */
19
104
  minimize: () => void;
105
+ /** Restores the panel to its expanded width. */
20
106
  maximize: () => void;
107
+ /** Toggles fullscreen (`calc(100% - 16px)`). */
21
108
  toggleMaximum: () => void;
109
+ /** Drives the scoped loading overlay through `SdLoadingService`. */
22
110
  startLoading: () => void;
111
+ /** Stops the scoped loading overlay. */
23
112
  stopLoading: () => void;
113
+ /** Flips `isEditing` and emits `editingChanged`. */
24
114
  toggleEditable(): void;
115
+ /** Hover state hook bound in the template. */
25
116
  onFocus: () => void;
117
+ /** Hover state hook bound in the template. */
26
118
  onBlur: () => void;
27
119
  static ɵfac: i0.ɵɵFactoryDeclaration<SdModalResizable, never>;
28
120
  static ɵcmp: i0.ɵɵComponentDeclaration<SdModalResizable, "sd-modal-resizable", never, { "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; }, { "editingChanged": "editingChanged"; }, never, ["[sdTitle]", "[sdBody]", "[sdFooterLeft]", "[sdFooterRight]"], true, never>;
@@ -0,0 +1,22 @@
1
+ import * as i0 from "@angular/core";
2
+ /**
3
+ * Sổ đăng ký các panel `<sd-modal-resizable>` đang sống.
4
+ *
5
+ * why: mỗi panel được portal ra thẳng `document.body` nên việc xếp chỗ (width/right) là bài toán
6
+ * chung của cả stack. Trước đây `#arrangePanels` quét `document.querySelectorAll('.modal-resizable')`
7
+ * — query đó bắt MỌI phần tử mang class này trong tài liệu, kể cả markup của component khác hoặc
8
+ * của app dùng trùng tên class, rồi ghi đè inline style lên chúng. Registry giới hạn phạm vi ghi
9
+ * đúng vào các instance do library tạo ra và còn sống.
10
+ */
11
+ export declare class SdModalResizableRegistry {
12
+ #private;
13
+ register(id: string): void;
14
+ unregister(id: string): void;
15
+ /**
16
+ * Phần tử panel của các instance đã đăng ký và đang có mặt trong DOM.
17
+ * Instance đã destroy hoặc chưa attach portal sẽ bị bỏ qua.
18
+ */
19
+ panels(): HTMLElement[];
20
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdModalResizableRegistry, never>;
21
+ static ɵprov: i0.ɵɵInjectableDeclaration<SdModalResizableRegistry>;
22
+ }