@sd-angular/core 19.0.0-beta.8 → 19.0.0-beta.80

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 (292) hide show
  1. package/README.md +686 -33
  2. package/assets/scss/ckeditor5.scss +61 -4
  3. package/assets/scss/core/bootstrap.scss +17 -0
  4. package/assets/scss/core/form.scss +32 -6
  5. package/assets/scss/core/grid.scss +40 -0
  6. package/assets/scss/sd-core.scss +5 -0
  7. package/assets/scss/themes/material-theme.scss +82 -40
  8. package/components/anchor-v2/src/components/anchor-item-v2/anchor-item-v2.component.d.ts +5 -5
  9. package/components/anchor-v2/src/components/anchor-v2/anchor-v2.component.d.ts +12 -18
  10. package/components/anchor-v2/src/components/anchor-vertical-v2/anchor-vertical-list-v2.component.d.ts +9 -10
  11. package/components/anchor-v2/src/models/sd-anchor-v2.model.d.ts +3 -3
  12. package/components/avatar/index.d.ts +1 -0
  13. package/components/avatar/src/avatar.component.d.ts +19 -0
  14. package/components/badge/src/badge.component.d.ts +77 -19
  15. package/components/button/src/button.component.d.ts +30 -28
  16. package/components/chart/index.d.ts +4 -0
  17. package/components/chart/src/bar-chart.component.d.ts +18 -0
  18. package/components/chart/src/doughnut-chart.component.d.ts +16 -0
  19. package/components/chart/src/line-chart.component.d.ts +18 -0
  20. package/components/chart/src/pie-chart.component.d.ts +16 -0
  21. package/components/code-editor/index.d.ts +1 -0
  22. package/components/code-editor/src/code-editor.component.d.ts +25 -0
  23. package/components/document-builder/index.d.ts +1 -0
  24. package/components/document-builder/src/document-builder.component.d.ts +12 -41
  25. package/components/document-builder/src/document-builder.model.d.ts +14 -11
  26. package/components/document-builder/src/plugins/block-space/block-space.plugin.d.ts +9 -0
  27. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.d.ts +44 -0
  28. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.model.d.ts +57 -0
  29. package/components/document-builder/src/plugins/heading/heading.plugin.d.ts +1 -0
  30. package/components/document-builder/src/plugins/highlight-range/highlight-range.plugin.d.ts +4 -0
  31. package/components/document-builder/src/plugins/image-custom/image-custom.plugin.d.ts +31 -0
  32. package/components/document-builder/src/plugins/index.d.ts +7 -2
  33. package/components/document-builder/src/plugins/page-orientation/page-orientation.plugin.d.ts +2 -2
  34. package/components/document-builder/src/plugins/paste-handler/filters/bookmark.d.ts +14 -0
  35. package/components/document-builder/src/plugins/paste-handler/filters/br.d.ts +15 -0
  36. package/components/document-builder/src/plugins/paste-handler/filters/image.d.ts +25 -0
  37. package/components/document-builder/src/plugins/paste-handler/filters/list.d.ts +29 -0
  38. package/components/document-builder/src/plugins/paste-handler/filters/parse.d.ts +35 -0
  39. package/components/document-builder/src/plugins/paste-handler/filters/removeboldwrapper.d.ts +15 -0
  40. package/components/document-builder/src/plugins/paste-handler/filters/removegooglesheetstag.d.ts +15 -0
  41. package/components/document-builder/src/plugins/paste-handler/filters/removeinvalidtablewidth.d.ts +15 -0
  42. package/components/document-builder/src/plugins/paste-handler/filters/removemsattributes.d.ts +15 -0
  43. package/components/document-builder/src/plugins/paste-handler/filters/removestyleblock.d.ts +15 -0
  44. package/components/document-builder/src/plugins/paste-handler/filters/removexmlns.d.ts +15 -0
  45. package/components/document-builder/src/plugins/paste-handler/filters/replacemsfootnotes.d.ts +54 -0
  46. package/components/document-builder/src/plugins/paste-handler/filters/replacetabswithinprewithspaces.d.ts +24 -0
  47. package/components/document-builder/src/plugins/paste-handler/filters/space.d.ts +27 -0
  48. package/components/document-builder/src/plugins/paste-handler/filters/table.d.ts +16 -0
  49. package/components/document-builder/src/plugins/paste-handler/filters/utils.d.ts +25 -0
  50. package/components/document-builder/src/plugins/paste-handler/index.d.ts +35 -0
  51. package/components/document-builder/src/plugins/paste-handler/normalizers/googledocsnormalizer.d.ts +31 -0
  52. package/components/document-builder/src/plugins/paste-handler/normalizers/googlesheetsnormalizer.d.ts +31 -0
  53. package/components/document-builder/src/plugins/paste-handler/normalizers/mswordnormalizer.d.ts +29 -0
  54. package/components/document-builder/src/plugins/paste-handler/types.d.ts +30 -0
  55. package/components/document-builder/src/plugins/table-custom/index.d.ts +34 -0
  56. package/components/document-builder/src/plugins/variable/variable.plugin.d.ts +39 -0
  57. package/components/index.d.ts +5 -0
  58. package/components/mini-editor/index.d.ts +2 -0
  59. package/components/mini-editor/src/mini-editor.component.d.ts +91 -0
  60. package/components/mini-editor/src/mini-editor.model.d.ts +44 -0
  61. package/components/modal/index.d.ts +1 -1
  62. package/components/modal/src/modal.component.d.ts +26 -0
  63. package/components/section/index.d.ts +1 -0
  64. package/components/section/src/section-item/section-item.component.d.ts +7 -0
  65. package/components/section/src/section.component.d.ts +11 -11
  66. package/components/side-drawer/src/side-drawer.component.d.ts +11 -24
  67. package/components/tab-router/src/components/tab-router-item/tab-router-item.component.d.ts +4 -1
  68. package/components/tab-router/src/components/tab-router-outlet/tab-router-outlet.component.d.ts +3 -15
  69. package/components/table/index.d.ts +2 -0
  70. package/components/table/src/components/column-filter/column-filter.component.d.ts +3 -3
  71. package/components/table/src/components/column-title/column-title.component.d.ts +10 -0
  72. package/components/table/src/components/desktop-cell/desktop-cell.component.d.ts +18 -11
  73. package/components/table/src/components/desktop-cell/view/view.component.d.ts +24 -0
  74. package/components/table/src/components/external-filter/external-filter.component.d.ts +1 -1
  75. package/components/table/src/components/index.d.ts +1 -0
  76. package/components/table/src/components/selector-action/action-filter.pipe.d.ts +11 -10
  77. package/components/table/src/components/selector-action/selector-action.component.d.ts +5 -3
  78. package/components/table/src/directives/index.d.ts +4 -0
  79. package/components/table/src/directives/sd-table-cell-def.directive.d.ts +2 -3
  80. package/components/table/src/directives/sd-table-column-filter-def.directive.d.ts +8 -0
  81. package/components/table/src/directives/sd-table-expand-def.directive.d.ts +0 -1
  82. package/components/table/src/directives/sd-table-filter-def.directive.d.ts +4 -6
  83. package/components/table/src/directives/sd-table-footer-def.directive.d.ts +2 -3
  84. package/components/table/src/directives/sd-table-title-def.directive.d.ts +8 -0
  85. package/components/table/src/directives/sticky-shadow.directive.d.ts +17 -0
  86. package/components/table/src/models/table-column.model.d.ts +49 -40
  87. package/components/table/src/models/table-command.model.d.ts +7 -3
  88. package/components/table/src/models/table-item.model.d.ts +5 -4
  89. package/components/table/src/models/table-option-config.model.d.ts +3 -0
  90. package/components/table/src/models/table-option-export.model.d.ts +3 -2
  91. package/components/table/src/models/table-option-selector.model.d.ts +17 -10
  92. package/components/table/src/models/table-option.model.d.ts +15 -8
  93. package/components/table/src/services/index.d.ts +3 -0
  94. package/components/table/src/services/table-export/table-export.service.d.ts +26 -0
  95. package/components/table/src/services/table-filter/table-filter.model.d.ts +6 -5
  96. package/components/table/src/services/table-format/table-format.service.d.ts +16 -0
  97. package/components/table/src/table.component.d.ts +46 -53
  98. package/components/upload-file/src/configurations/upload-file.configuration.d.ts +34 -1
  99. package/components/upload-file/src/services/upload-file.service.d.ts +0 -1
  100. package/components/upload-file/src/upload-file.component.d.ts +52 -54
  101. package/components/view/index.d.ts +1 -0
  102. package/components/view/src/view.component.d.ts +16 -0
  103. package/components/workflow/src/models/form-generic-component.model.d.ts +5 -4
  104. package/components/workflow/src/models/form-generic-expression.model.d.ts +1 -0
  105. package/components/workflow/src/models/index.d.ts +1 -0
  106. package/components/workflow/src/pipes/html.pipe.d.ts +4 -4
  107. package/directives/index.d.ts +2 -0
  108. package/directives/src/sd-href.directive.d.ts +9 -0
  109. package/directives/src/sd-tooltip.directive.d.ts +26 -0
  110. package/fesm2022/sd-angular-core-components-anchor-v2.mjs +79 -154
  111. package/fesm2022/sd-angular-core-components-anchor-v2.mjs.map +1 -1
  112. package/fesm2022/sd-angular-core-components-avatar.mjs +103 -0
  113. package/fesm2022/sd-angular-core-components-avatar.mjs.map +1 -0
  114. package/fesm2022/sd-angular-core-components-badge.mjs +101 -91
  115. package/fesm2022/sd-angular-core-components-badge.mjs.map +1 -1
  116. package/fesm2022/sd-angular-core-components-button.mjs +70 -96
  117. package/fesm2022/sd-angular-core-components-button.mjs.map +1 -1
  118. package/fesm2022/sd-angular-core-components-chart.mjs +290 -0
  119. package/fesm2022/sd-angular-core-components-chart.mjs.map +1 -0
  120. package/fesm2022/sd-angular-core-components-code-editor.mjs +127 -0
  121. package/fesm2022/sd-angular-core-components-code-editor.mjs.map +1 -0
  122. package/fesm2022/sd-angular-core-components-document-builder.mjs +4006 -611
  123. package/fesm2022/sd-angular-core-components-document-builder.mjs.map +1 -1
  124. package/fesm2022/sd-angular-core-components-history.mjs +1 -1
  125. package/fesm2022/sd-angular-core-components-history.mjs.map +1 -1
  126. package/fesm2022/sd-angular-core-components-import-excel.mjs +1 -1
  127. package/fesm2022/sd-angular-core-components-import-excel.mjs.map +1 -1
  128. package/fesm2022/sd-angular-core-components-mini-editor.mjs +332 -0
  129. package/fesm2022/sd-angular-core-components-mini-editor.mjs.map +1 -0
  130. package/fesm2022/sd-angular-core-components-modal.mjs +63 -92
  131. package/fesm2022/sd-angular-core-components-modal.mjs.map +1 -1
  132. package/fesm2022/sd-angular-core-components-preview.mjs +1 -1
  133. package/fesm2022/sd-angular-core-components-preview.mjs.map +1 -1
  134. package/fesm2022/sd-angular-core-components-quick-action.mjs +2 -2
  135. package/fesm2022/sd-angular-core-components-quick-action.mjs.map +1 -1
  136. package/fesm2022/sd-angular-core-components-section.mjs +41 -43
  137. package/fesm2022/sd-angular-core-components-section.mjs.map +1 -1
  138. package/fesm2022/sd-angular-core-components-side-drawer.mjs +78 -84
  139. package/fesm2022/sd-angular-core-components-side-drawer.mjs.map +1 -1
  140. package/fesm2022/sd-angular-core-components-tab-router.mjs +151 -241
  141. package/fesm2022/sd-angular-core-components-tab-router.mjs.map +1 -1
  142. package/fesm2022/sd-angular-core-components-table.mjs +1394 -1254
  143. package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
  144. package/fesm2022/sd-angular-core-components-upload-file.mjs +390 -443
  145. package/fesm2022/sd-angular-core-components-upload-file.mjs.map +1 -1
  146. package/fesm2022/sd-angular-core-components-view.mjs +45 -0
  147. package/fesm2022/sd-angular-core-components-view.mjs.map +1 -0
  148. package/fesm2022/sd-angular-core-components-workflow.mjs +165 -168
  149. package/fesm2022/sd-angular-core-components-workflow.mjs.map +1 -1
  150. package/fesm2022/sd-angular-core-components.mjs +5 -0
  151. package/fesm2022/sd-angular-core-components.mjs.map +1 -1
  152. package/fesm2022/sd-angular-core-directives.mjs +286 -27
  153. package/fesm2022/sd-angular-core-directives.mjs.map +1 -1
  154. package/fesm2022/sd-angular-core-forms-autocomplete.mjs +289 -363
  155. package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
  156. package/fesm2022/sd-angular-core-forms-chip-calendar.mjs +170 -189
  157. package/fesm2022/sd-angular-core-forms-chip-calendar.mjs.map +1 -1
  158. package/fesm2022/sd-angular-core-forms-chip.mjs +184 -194
  159. package/fesm2022/sd-angular-core-forms-chip.mjs.map +1 -1
  160. package/fesm2022/sd-angular-core-forms-date-range.mjs +180 -242
  161. package/fesm2022/sd-angular-core-forms-date-range.mjs.map +1 -1
  162. package/fesm2022/sd-angular-core-forms-date.mjs +178 -270
  163. package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
  164. package/fesm2022/sd-angular-core-forms-datetime.mjs +177 -285
  165. package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
  166. package/fesm2022/sd-angular-core-forms-input-number.mjs +210 -337
  167. package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
  168. package/fesm2022/sd-angular-core-forms-input.mjs +169 -286
  169. package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
  170. package/fesm2022/sd-angular-core-forms-radio.mjs +3 -2
  171. package/fesm2022/sd-angular-core-forms-radio.mjs.map +1 -1
  172. package/fesm2022/sd-angular-core-forms-select.mjs +390 -447
  173. package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
  174. package/fesm2022/sd-angular-core-forms-textarea.mjs +167 -226
  175. package/fesm2022/sd-angular-core-forms-textarea.mjs.map +1 -1
  176. package/fesm2022/sd-angular-core-modules-authom.mjs +359 -0
  177. package/fesm2022/sd-angular-core-modules-authom.mjs.map +1 -0
  178. package/fesm2022/sd-angular-core-modules-keycloak.mjs +126 -0
  179. package/fesm2022/sd-angular-core-modules-keycloak.mjs.map +1 -0
  180. package/fesm2022/sd-angular-core-modules-layout.mjs +709 -456
  181. package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
  182. package/fesm2022/sd-angular-core-modules-permission.mjs +160 -74
  183. package/fesm2022/sd-angular-core-modules-permission.mjs.map +1 -1
  184. package/fesm2022/sd-angular-core-modules.mjs +2 -1
  185. package/fesm2022/sd-angular-core-modules.mjs.map +1 -1
  186. package/fesm2022/sd-angular-core-services-api.mjs +5 -10
  187. package/fesm2022/sd-angular-core-services-api.mjs.map +1 -1
  188. package/fesm2022/sd-angular-core-services-confirm.mjs +9 -7
  189. package/fesm2022/sd-angular-core-services-confirm.mjs.map +1 -1
  190. package/fesm2022/sd-angular-core-services-docx.mjs +173 -0
  191. package/fesm2022/sd-angular-core-services-docx.mjs.map +1 -0
  192. package/fesm2022/sd-angular-core-services-notify.mjs +2 -2
  193. package/fesm2022/sd-angular-core-services-notify.mjs.map +1 -1
  194. package/fesm2022/sd-angular-core-services.mjs +1 -0
  195. package/fesm2022/sd-angular-core-services.mjs.map +1 -1
  196. package/fesm2022/sd-angular-core-utilities-extensions.mjs +58 -80
  197. package/fesm2022/sd-angular-core-utilities-extensions.mjs.map +1 -1
  198. package/fesm2022/sd-angular-core-utilities-models.mjs +15 -1
  199. package/fesm2022/sd-angular-core-utilities-models.mjs.map +1 -1
  200. package/fesm2022/sd-angular-core.mjs +0 -1
  201. package/fesm2022/sd-angular-core.mjs.map +1 -1
  202. package/forms/autocomplete/src/autocomplete.component.d.ts +55 -55
  203. package/forms/chip/src/chip.component.d.ts +37 -40
  204. package/forms/chip-calendar/src/chip-calendar.component.d.ts +37 -38
  205. package/forms/date/src/date.component.d.ts +48 -46
  206. package/forms/date-range/src/date-range.component.d.ts +35 -34
  207. package/forms/datetime/src/datetime.component.d.ts +48 -49
  208. package/forms/input/src/input.component.d.ts +54 -57
  209. package/forms/input-number/src/input-number.component.d.ts +53 -54
  210. package/forms/select/src/select.component.d.ts +67 -64
  211. package/forms/textarea/src/textarea.component.d.ts +40 -43
  212. package/modules/authom/authom.configuration.d.ts +17 -0
  213. package/modules/authom/authom.interceptor.d.ts +3 -0
  214. package/modules/authom/authom.module.d.ts +16 -0
  215. package/modules/authom/authom.service.d.ts +32 -0
  216. package/modules/authom/index.d.ts +35 -0
  217. package/modules/index.d.ts +2 -1
  218. package/modules/keycloak/index.d.ts +4 -0
  219. package/modules/keycloak/keycloak.configuration.d.ts +11 -0
  220. package/modules/keycloak/keycloak.interceptor.d.ts +2 -0
  221. package/modules/keycloak/keycloak.module.d.ts +18 -0
  222. package/modules/keycloak/keycloak.service.d.ts +14 -0
  223. package/modules/layout/components/index.d.ts +2 -0
  224. package/modules/layout/components/layout-main/layout-main.component.d.ts +8 -12
  225. package/modules/layout/components/page/page.component.d.ts +5 -7
  226. package/modules/layout/components/sidebar-mobile-v1/components/sidebar/sidebar.component.d.ts +35 -0
  227. package/modules/layout/components/sidebar-mobile-v1/components/user/user.component.d.ts +24 -0
  228. package/modules/layout/components/sidebar-mobile-v1/main.component.d.ts +21 -0
  229. package/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.d.ts +22 -29
  230. package/modules/layout/components/sidebar-v1/components/user/user.component.d.ts +11 -17
  231. package/modules/layout/components/sidebar-v1/main.component.d.ts +14 -14
  232. package/modules/layout/configurations/layout.configuration.d.ts +46 -3
  233. package/modules/layout/modules/forbidden/pages/root/root.component.d.ts +3 -8
  234. package/modules/layout/modules/home/components/home-page/home-page.component.d.ts +2 -5
  235. package/modules/layout/modules/not-found/pages/root/root.component.d.ts +3 -8
  236. package/modules/layout/pipes/high-light-search.pipe.d.ts +1 -1
  237. package/modules/layout/services/index.d.ts +1 -0
  238. package/modules/layout/services/layout.service.d.ts +10 -0
  239. package/modules/layout/services/menu/menu.model.d.ts +4 -1
  240. package/modules/layout/services/storage/storage.service.d.ts +0 -3
  241. package/modules/permission/src/configurations/permission.configuration.d.ts +56 -2
  242. package/modules/permission/src/directives/permission.directive.d.ts +5 -8
  243. package/modules/permission/src/guards/permission.guard.d.ts +2 -1
  244. package/modules/permission/src/services/permission.service.d.ts +6 -9
  245. package/package.json +93 -69
  246. package/public-api.d.ts +0 -1
  247. package/sd-angular-core-19.0.0-beta.80.tgz +0 -0
  248. package/services/api/src/api.model.d.ts +6 -1
  249. package/services/confirm/src/lib/confirm.service.d.ts +5 -0
  250. package/services/docx/index.d.ts +1 -0
  251. package/services/docx/src/lib/docx.model.d.ts +9 -0
  252. package/services/docx/src/lib/docx.service.d.ts +13 -0
  253. package/services/docx/src/public-api.d.ts +2 -0
  254. package/services/index.d.ts +1 -0
  255. package/services/notify/index.d.ts +1 -0
  256. package/services/notify/src/notify.model.d.ts +1 -1
  257. package/services/notify/src/notify.service.d.ts +5 -5
  258. package/utilities/extensions/src/string.extension.d.ts +3 -0
  259. package/utilities/extensions/src/utility.extension.d.ts +1 -0
  260. package/utilities/models/index.d.ts +3 -0
  261. package/utilities/models/src/filter.model.d.ts +17 -4
  262. package/utilities/models/src/icon.model.d.ts +2 -0
  263. package/utilities/models/src/nested-key-of.model.d.ts +5 -0
  264. package/utilities/models/src/order.model.d.ts +2 -1
  265. package/utilities/models/src/paging.model.d.ts +2 -1
  266. package/utilities/models/src/pattern.model.d.ts +1 -1
  267. package/utilities/models/src/unwrap-signal.model.d.ts +6 -0
  268. package/components/document-builder/src/plugins/comment/comment.plugin.d.ts +0 -4
  269. package/components/document-builder/src/plugins/table-fit/table-fit.plugin.d.ts +0 -4
  270. package/components/modal/src/modal/modal.component.d.ts +0 -31
  271. package/components/table/src/components/desktop-cell-view/desktop-cell-view.component.d.ts +0 -14
  272. package/fesm2022/sd-angular-core-guards-permission.mjs +0 -155
  273. package/fesm2022/sd-angular-core-guards-permission.mjs.map +0 -1
  274. package/fesm2022/sd-angular-core-guards.mjs +0 -6
  275. package/fesm2022/sd-angular-core-guards.mjs.map +0 -1
  276. package/fesm2022/sd-angular-core-modules-oidc.mjs +0 -127
  277. package/fesm2022/sd-angular-core-modules-oidc.mjs.map +0 -1
  278. package/guards/index.d.ts +0 -1
  279. package/guards/permission/index.d.ts +0 -4
  280. package/guards/permission/src/configurations/index.d.ts +0 -1
  281. package/guards/permission/src/configurations/permission.configuration.d.ts +0 -8
  282. package/guards/permission/src/directives/index.d.ts +0 -1
  283. package/guards/permission/src/directives/permission.directive.d.ts +0 -12
  284. package/guards/permission/src/guards/index.d.ts +0 -1
  285. package/guards/permission/src/guards/permission.guard.d.ts +0 -13
  286. package/guards/permission/src/services/index.d.ts +0 -1
  287. package/guards/permission/src/services/permission.service.d.ts +0 -15
  288. package/modules/oidc/dynamic-sts.loader.d.ts +0 -11
  289. package/modules/oidc/index.d.ts +0 -2
  290. package/modules/oidc/oidc.configuration.d.ts +0 -11
  291. package/modules/oidc/oidc.module.d.ts +0 -14
  292. package/sd-angular-core-19.0.0-beta.8.tgz +0 -0
@@ -1,9 +1,13 @@
1
- import { SdColor } from '@sd-angular/core/utilities/models';
1
+ import { MaterialIconFontSet, SdColor } from '@sd-angular/core/utilities/models';
2
+ export interface SdTableCommandOption<T = any> {
3
+ align?: 'left' | 'right';
4
+ commands?: SdTableCommand<T>[];
5
+ }
2
6
  export type SdTableCommand<T = any> = SdTableCommandNormal<T> | SdTableCommandChildren<T>;
3
7
  export interface SdTableCommandNormal<T = any> {
4
8
  color?: SdColor;
5
9
  icon?: string | ((rowData: T) => string);
6
- fontSet?: 'material-icons' | 'material-icons-outlined' | 'material-icons-round' | 'material-icons-sharp';
10
+ fontSet?: MaterialIconFontSet;
7
11
  title?: string | ((rowData: T) => string);
8
12
  disabled?: boolean | ((rowData: T) => boolean);
9
13
  hidden?: boolean | ((rowData: T) => boolean | Promise<boolean>);
@@ -12,7 +16,7 @@ export interface SdTableCommandNormal<T = any> {
12
16
  }
13
17
  export interface SdTableCommandChildren<T = any> {
14
18
  icon?: string | ((rowData: T) => string);
15
- fontSet?: 'material-icons' | 'material-icons-outlined' | 'material-icons-round' | 'material-icons-sharp';
19
+ fontSet?: MaterialIconFontSet;
16
20
  title?: string | ((rowData: T) => string);
17
21
  disabled?: boolean | ((rowData: T) => boolean);
18
22
  hidden?: boolean | ((rowData: T) => boolean | Promise<boolean>);
@@ -1,4 +1,5 @@
1
1
  import { SdBadge } from '@sd-angular/core/components/badge';
2
+ import { SdUnwrapSignal } from '@sd-angular/core/utilities/models';
2
3
  export interface SdTableMetaSelector {
3
4
  selectable?: boolean;
4
5
  isSelected?: boolean;
@@ -12,10 +13,10 @@ export interface SdTableMetaExpand {
12
13
  export interface SdTableDisplay {
13
14
  tooltip?: string;
14
15
  badge?: {
15
- type: SdBadge['type'] | undefined | null;
16
- color: SdBadge['color'] | undefined | null;
17
- icon?: string | undefined | null;
18
- title?: string | number | null | undefined;
16
+ type: SdUnwrapSignal<SdBadge['type']>;
17
+ color: SdUnwrapSignal<SdBadge['color']>;
18
+ icon?: SdUnwrapSignal<SdBadge['icon']>;
19
+ title?: SdUnwrapSignal<SdBadge['title']>;
19
20
  };
20
21
  cellStyle?: Record<string, string>;
21
22
  data: string | number | undefined | null;
@@ -7,6 +7,8 @@ export interface OriginColumn {
7
7
  title: string;
8
8
  width?: string;
9
9
  invisible?: boolean;
10
+ fixed?: boolean;
11
+ truncate?: boolean;
10
12
  }
11
13
  export interface ConfiguredColumn {
12
14
  origin: OriginColumn;
@@ -14,6 +16,7 @@ export interface ConfiguredColumn {
14
16
  width?: string;
15
17
  invisible?: boolean;
16
18
  fixed?: boolean;
19
+ truncate?: boolean;
17
20
  }
18
21
  export interface ConfiguredTable {
19
22
  columns?: ConfiguredColumn[];
@@ -1,3 +1,4 @@
1
+ import { SdNestedKeyOf } from '@sd-angular/core/utilities';
1
2
  import { SdTableFilterRequest } from '../services/table-filter/table-filter.model';
2
3
  export type SdTableOptionExport<T = any> = SdTableOptionExportDefault<T> | SdTableOptionExportCustom;
3
4
  export interface SdTableOptionExportDefault<T = any> {
@@ -22,7 +23,7 @@ export interface SdTableOptionExportCustom {
22
23
  onExport: (filterRequest: SdTableFilterRequest) => Promise<void>;
23
24
  }
24
25
  export interface SdTableOptionExportColumn<T = any> {
25
- field: Extract<keyof T, string>;
26
+ field: SdNestedKeyOf<T>;
26
27
  title: string;
27
28
  description?: string;
28
29
  width?: string;
@@ -35,7 +36,7 @@ export interface SdTableOptionExportSheet<T = any> {
35
36
  name: string;
36
37
  items: T[] | (() => T[] | Promise<T[]>);
37
38
  headers: {
38
- value: Extract<keyof T, string>;
39
+ value: SdNestedKeyOf<T>;
39
40
  display: string;
40
41
  }[];
41
42
  }
@@ -1,4 +1,5 @@
1
1
  import { SdButton } from '@sd-angular/core/components/button';
2
+ import { SdUnwrapSignal } from '@sd-angular/core/utilities/models';
2
3
  export interface SdTableOptionSelector<T = any> {
3
4
  visible?: boolean;
4
5
  single?: boolean;
@@ -7,26 +8,32 @@ export interface SdTableOptionSelector<T = any> {
7
8
  onSelect?: (rowData?: T, selectedItems?: T[]) => void;
8
9
  onSelectAll?: (selectedItems: T[]) => void;
9
10
  disabled?: (rowData?: T, selectedItems?: T[]) => boolean;
11
+ /**
12
+ * Predicate để tự động pre-select item sau mỗi lần load.
13
+ * Table sẽ gọi hàm này cho từng item và set isSelected = true nếu trả về true.
14
+ * Dùng khi cần programmatically set selected items từ bên ngoài.
15
+ */
16
+ defaultSelected?: (rowData: T) => boolean;
10
17
  }
11
18
  export type SdTableAction<T = any> = SdTableActionNormal<T> | SdTableActionChildren<T>;
12
19
  export interface SdTableActionNormal<T = any> {
13
20
  icon?: string;
14
- fontSet?: SdButton['fontSet'];
15
- tooltip?: SdButton['tooltip'];
16
- title?: SdButton['title'];
17
- color?: SdButton['color'];
18
- type?: SdButton['type'];
21
+ fontSet?: SdUnwrapSignal<SdButton['fontSet']>;
22
+ tooltip?: SdUnwrapSignal<SdButton['tooltip']>;
23
+ title?: SdUnwrapSignal<SdButton['title']>;
24
+ color?: SdUnwrapSignal<SdButton['color']>;
25
+ type?: SdUnwrapSignal<SdButton['type']>;
19
26
  hidden?: boolean | ((rowData?: T) => boolean);
20
27
  isGrouped?: boolean;
21
28
  click: (selectedItems?: T[]) => void;
22
29
  }
23
30
  interface SdTableActionChildren<T = any> {
24
31
  icon?: string;
25
- fontSet?: SdButton['fontSet'];
26
- tooltip?: SdButton['tooltip'];
27
- title?: SdButton['title'];
28
- color?: SdButton['color'];
29
- type?: SdButton['type'];
32
+ fontSet?: SdUnwrapSignal<SdButton['fontSet']>;
33
+ tooltip?: SdUnwrapSignal<SdButton['tooltip']>;
34
+ title?: SdUnwrapSignal<SdButton['title']>;
35
+ color?: SdUnwrapSignal<SdButton['color']>;
36
+ type?: SdUnwrapSignal<SdButton['type']>;
30
37
  hidden?: boolean | ((rowData?: T) => boolean);
31
38
  isGrouped?: boolean;
32
39
  children: SdTableActionNormal<T>[];
@@ -1,16 +1,16 @@
1
- import { SdTableColumn } from './table-column.model';
2
- import { SdTableCommand } from './table-command.model';
1
+ import { SdPagingReq } from '@sd-angular/core/utilities';
3
2
  import { SdTableFilterRequest, SdTableOptionFilter } from '../services/table-filter/table-filter.model';
3
+ import { SdTableColumn } from './table-column.model';
4
+ import { SdTableCommand, SdTableCommandOption } from './table-command.model';
5
+ import { TableOptionConfig } from './table-option-config.model';
6
+ import { SdTableOptionExpand } from './table-option-expand.model';
4
7
  import { SdTableOptionExport } from './table-option-export.model';
8
+ import { SdTableOptionGroup } from './table-option-group.model';
9
+ import { SdTableOptionPaginate } from './table-option-paginate.model';
5
10
  import { SdTableOptionReload } from './table-option-reload.model';
6
- import { SdTableOptionExpand } from './table-option-expand.model';
7
11
  import { SdTableOptionSelector } from './table-option-selector.model';
8
- import { SdTableOptionStyle } from './table-option-style.model';
9
- import { SdTableOptionGroup } from './table-option-group.model';
10
12
  import { SdTableOptionSort } from './table-option-sort.model';
11
- import { SdTableOptionPaginate } from './table-option-paginate.model';
12
- import { TableOptionConfig } from './table-option-config.model';
13
- import { SdPagingReq } from '@sd-angular/core/utilities';
13
+ import { SdTableOptionStyle } from './table-option-style.model';
14
14
  export type SdTableOption<T = any> = SdTableLocalOption<T> | SdTableServerOption<T>;
15
15
  interface SdTableBaseOption<T = any> {
16
16
  key?: string;
@@ -23,7 +23,14 @@ interface SdTableBaseOption<T = any> {
23
23
  export?: SdTableOptionExport<T>;
24
24
  group?: SdTableOptionGroup<T>;
25
25
  filter?: SdTableOptionFilter;
26
+ rowReorder?: {
27
+ enabled?: boolean;
28
+ onChange?: (newRows: T[], movedItem: T, fromIndex: number, toIndex: number) => void;
29
+ icon?: string;
30
+ disabled?: (row: T, index: number) => boolean;
31
+ };
26
32
  commands?: SdTableCommand<T>[];
33
+ command?: SdTableCommandOption<T>;
27
34
  columns: SdTableColumn<T>[];
28
35
  style?: SdTableOptionStyle<T>;
29
36
  }
@@ -0,0 +1,3 @@
1
+ export * from './table-export/table-export.service';
2
+ export * from './table-format/table-format.service';
3
+ export * from './config.service';
@@ -0,0 +1,26 @@
1
+ import { SdExcelColumn } from '@sd-angular/core/services';
2
+ import { ConfiguredTableResult } from '../../models/table-option-config.model';
3
+ import { SdTableOption } from '../../models/table-option.model';
4
+ import { SdTableFilterRequest } from '../table-filter/table-filter.model';
5
+ import * as i0 from "@angular/core";
6
+ export interface SdTableExportContext<T = any> {
7
+ option: SdTableOption<T>;
8
+ configuration?: ConfiguredTableResult;
9
+ total: number;
10
+ cacheObjValues: Record<string, Record<string, string>>;
11
+ fetchChunk: (pageNumber: number, pageSize: number) => Promise<T[] | {
12
+ items: any[];
13
+ total: number;
14
+ }>;
15
+ getFilterInfo: () => SdTableFilterRequest;
16
+ }
17
+ export declare class TableExportService {
18
+ #private;
19
+ exporting: import("@angular/core").WritableSignal<boolean>;
20
+ exportTitle: import("@angular/core").WritableSignal<string>;
21
+ exportExcel: (context: SdTableExportContext, columns?: SdExcelColumn[]) => Promise<void>;
22
+ exportCSV: (context: SdTableExportContext, columns?: SdExcelColumn[]) => Promise<void>;
23
+ exportCustom: (context: SdTableExportContext) => void;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<TableExportService, never>;
25
+ static ɵprov: i0.ɵɵInjectableDeclaration<TableExportService>;
26
+ }
@@ -1,8 +1,8 @@
1
- import { Observable } from 'rxjs';
2
- import { SdTableColumn } from '../../models/table-column.model';
3
1
  import { TemplateRef } from '@angular/core';
4
2
  import { SdSearch } from '@sd-angular/core/forms';
5
- import { SdOperator, SdOrder, SdPagingReq } from '@sd-angular/core/utilities';
3
+ import { SdNestedKeyOf, SdOperator, SdOrder, SdPagingReq } from '@sd-angular/core/utilities';
4
+ import { Observable } from 'rxjs';
5
+ import { SdTableColumn } from '../../models/table-column.model';
6
6
  export interface SdTableQuickFilter {
7
7
  code: string;
8
8
  columnFilter: Record<string, any>;
@@ -19,8 +19,8 @@ export interface TableFilterValue {
19
19
  filtered?: boolean;
20
20
  }
21
21
  export interface SdTableFilterRequest<T = any> {
22
- columnOperator: Record<string, SdOperator>;
23
- rawColumnFilter: Record<keyof T, any>;
22
+ columnOperator: Record<SdNestedKeyOf<T>, SdOperator>;
23
+ rawColumnFilter: Record<SdNestedKeyOf<T>, any>;
24
24
  rawExternalFilter: Record<string, any>;
25
25
  pageNumber: number;
26
26
  pageSize: number;
@@ -68,6 +68,7 @@ interface BaseFilter<TData = any> {
68
68
  hidden?: boolean;
69
69
  defaultOperator?: SdOperator;
70
70
  data?: TData;
71
+ onChange?: (value: any) => void;
71
72
  }
72
73
  interface TextFilter<TData = any> extends BaseFilter<TData> {
73
74
  type: 'string';
@@ -0,0 +1,16 @@
1
+ import { SdTableColumn } from '../../models/table-column.model';
2
+ import { SdTableItem } from '../../models/table-item.model';
3
+ import * as i0 from "@angular/core";
4
+ export declare class TableFormatService {
5
+ #private;
6
+ /**
7
+ * Tải và cache các giá trị từ điển cho cột 'values'
8
+ */
9
+ loadValues(columns: SdTableColumn[], cacheValues: Record<string, any[]>, cacheObjValues: Record<string, Record<string, string>>): Promise<void>;
10
+ /**
11
+ * Chuyển đổi dữ liệu thô thành SdTableItem kèm các thiết lập hiển thị (Display Meta)
12
+ */
13
+ format<T = any>(rawItems: T[], columns: SdTableColumn[], cacheValues: Record<string, any[]>, cacheObjValues: Record<string, Record<string, string>>): Promise<SdTableItem<T>[]>;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<TableFormatService, never>;
15
+ static ɵprov: i0.ɵɵInjectableDeclaration<TableFormatService>;
16
+ }
@@ -1,19 +1,20 @@
1
- import { AfterViewInit, ChangeDetectorRef, OnDestroy, OnInit, QueryList } from '@angular/core';
1
+ import { AfterViewInit, OnDestroy, OnInit } from '@angular/core';
2
2
  import { MatPaginator, MatPaginatorIntl } from '@angular/material/paginator';
3
3
  import { MatSort } from '@angular/material/sort';
4
4
  import { MatTable } from '@angular/material/table';
5
- import { SdExcelColumn, SdExcelService, SdNotifyService } from '@sd-angular/core/services';
5
+ import { SdExcelColumn } from '@sd-angular/core/services';
6
6
  import { SdTabelCellDefDirective } from './directives/sd-table-cell-def.directive';
7
7
  import { SdMaterialSubInformationDefDirective } from './directives/sd-table-expand-def.directive';
8
8
  import { SdTableFilterDefDirective } from './directives/sd-table-filter-def.directive';
9
9
  import { SdMaterialFooterDefDirective } from './directives/sd-table-footer-def.directive';
10
+ import { SdTableTitleDefDirective } from './directives/sd-table-title-def.directive';
10
11
  import { SdTableColumn } from './models/table-column.model';
11
12
  import { SdTableOption } from './models/table-option.model';
12
- import { TableFilterRegister } from './services/table-filter/table-filter.model';
13
+ import { SdTableFilterRequest, TableFilterRegister } from './services/table-filter/table-filter.model';
14
+ import { CdkDrag, CdkDragDrop, CdkDropList } from '@angular/cdk/drag-drop';
13
15
  import { SdBaseSecureComponent } from '@sd-angular/core/components/base';
14
16
  import { SdQuickAction } from '@sd-angular/core/components/quick-action';
15
17
  import { SdScrollDirective } from '@sd-angular/core/directives';
16
- import { SdFormatNumberPipe } from '@sd-angular/core/pipes';
17
18
  import { SdOperator } from '@sd-angular/core/utilities';
18
19
  import { ExternalFilterComponent } from './components';
19
20
  import { ConfigComponent } from './components/config/config.component';
@@ -21,8 +22,6 @@ import { SdPopupExport } from './components/popup-export/popup-export.component'
21
22
  import { ISdTableConfiguration } from './configurations';
22
23
  import { SdTableItem } from './models/table-item.model';
23
24
  import { ConfiguredTableResult } from './models/table-option-config.model';
24
- import { ConfigService } from './services/config.service';
25
- import { SdTableFilterService } from './services/table-filter/table-filter.service';
26
25
  import * as i0 from "@angular/core";
27
26
  export declare class MatPaginatorIntlCro extends MatPaginatorIntl {
28
27
  firstPageLabel: string;
@@ -36,60 +35,51 @@ export declare class MatPaginatorIntlCro extends MatPaginatorIntl {
36
35
  }
37
36
  export declare class SdTable<T = unknown> extends SdBaseSecureComponent implements OnInit, AfterViewInit, OnDestroy {
38
37
  #private;
39
- private ref;
40
- private formatNumberPipe;
41
- tableConfiguration: ISdTableConfiguration | undefined;
42
- private configService;
43
- private excelService;
44
- private notifyService;
45
- private gridFilterService;
46
- autoId?: string;
47
- set _autoId(val: string | undefined | null);
48
- table?: MatTable<any>;
49
- configComponent?: ConfigComponent;
50
- sdPopupExport?: SdPopupExport;
51
- scroll?: SdScrollDirective;
38
+ autoIdInput: import("@angular/core").InputSignal<string | null | undefined>;
39
+ autoId: import("@angular/core").Signal<string | undefined>;
40
+ option: import("@angular/core").InputSignal<SdTableOption<T>>;
41
+ table: import("@angular/core").Signal<MatTable<any> | undefined>;
42
+ configComponent: import("@angular/core").Signal<ConfigComponent | undefined>;
43
+ sdPopupExport: import("@angular/core").Signal<SdPopupExport | undefined>;
44
+ scroll: import("@angular/core").Signal<SdScrollDirective | undefined>;
45
+ quickAction: import("@angular/core").Signal<SdQuickAction | undefined>;
46
+ externalFilter: import("@angular/core").Signal<ExternalFilterComponent | undefined>;
47
+ paginator: import("@angular/core").Signal<MatPaginator | undefined>;
48
+ sort: import("@angular/core").Signal<MatSort | undefined>;
49
+ sdSubInformation: import("@angular/core").Signal<SdMaterialSubInformationDefDirective | undefined>;
50
+ sdCellDefs: import("@angular/core").Signal<readonly SdTabelCellDefDirective[]>;
51
+ sdFooterDefs: import("@angular/core").Signal<readonly SdMaterialFooterDefDirective[]>;
52
+ sdFilterDefs: import("@angular/core").Signal<readonly SdTableFilterDefDirective[]>;
53
+ sdTitleDefs: import("@angular/core").Signal<readonly SdTableTitleDefDirective[]>;
54
+ cellDef: import("@angular/core").Signal<Record<string, SdTabelCellDefDirective>>;
55
+ footerDef: import("@angular/core").Signal<Record<string, SdMaterialFooterDefDirective>>;
56
+ hasFooter: import("@angular/core").Signal<boolean>;
57
+ titleDef: import("@angular/core").Signal<Record<string, SdTableTitleDefDirective>>;
58
+ tableOption: import("@angular/core").WritableSignal<SdTableOption<T> | undefined>;
59
+ configuration: import("@angular/core").WritableSignal<ConfiguredTableResult | undefined>;
60
+ items: import("@angular/core").WritableSignal<SdTableItem<T>[]>;
61
+ selectedTableItems: import("@angular/core").WritableSignal<SdTableItem<T>[]>;
62
+ total: import("@angular/core").WritableSignal<number | undefined>;
63
+ loading: import("@angular/core").WritableSignal<boolean>;
64
+ exporting: import("@angular/core").WritableSignal<boolean>;
65
+ isSelectAll: import("@angular/core").WritableSignal<boolean>;
66
+ exportTitle: import("@angular/core").WritableSignal<string>;
67
+ isFiltered: import("@angular/core").WritableSignal<boolean>;
68
+ requireFiltered: import("@angular/core").WritableSignal<boolean>;
52
69
  filterRegister: TableFilterRegister;
53
70
  key: string;
54
- quickAction?: SdQuickAction;
55
- externalFilter?: ExternalFilterComponent;
56
- tableOption: SdTableOption<T>;
57
- configuration?: ConfiguredTableResult;
58
- set option(option: SdTableOption);
59
- items: SdTableItem<T>[];
60
- selectedTableItems: SdTableItem<T>[];
61
- total?: number;
62
- loading: boolean;
63
- isHiddenPaginator: boolean;
64
- set paginator(paginator: MatPaginator);
65
- set sort(sort: MatSort);
66
- sdSubInformation?: SdMaterialSubInformationDefDirective;
67
- sdCellDefs: QueryList<SdTabelCellDefDirective>;
68
- cellDef: Record<string, SdTabelCellDefDirective>;
69
- sdFooterDefs: QueryList<SdMaterialFooterDefDirective>;
70
- footerDef: Record<string, SdMaterialFooterDefDirective>;
71
- hasFooter: boolean;
72
- sdFilterDefs: QueryList<SdTableFilterDefDirective>;
73
- filterDefs: SdTableFilterDefDirective[];
74
71
  columnOperator: Record<string, SdOperator>;
75
72
  columnFilter?: Record<string, any>;
76
- exporting: boolean;
77
- isSelectAll: boolean;
78
- exportTitle: string;
79
73
  cacheValues: Record<string, any[]>;
80
- constructor(ref: ChangeDetectorRef, formatNumberPipe: SdFormatNumberPipe, tableConfiguration: ISdTableConfiguration | undefined, configService: ConfigService, excelService: SdExcelService, notifyService: SdNotifyService, gridFilterService: SdTableFilterService);
74
+ tableConfiguration: ISdTableConfiguration | null;
75
+ constructor();
81
76
  ngOnInit(): void;
82
77
  ngAfterViewInit(): void;
83
78
  ngOnDestroy(): void;
84
- isFiltered: boolean;
85
- requireFiltered: boolean;
79
+ getFilterRequest: () => SdTableFilterRequest;
86
80
  reload: (force?: boolean, scrollTop?: boolean) => Promise<void>;
87
- onExport: (args?: {
88
- columns?: SdExcelColumn[];
89
- isCSV?: boolean;
90
- }) => Promise<void>;
91
- exportExcel: () => void;
92
- exportCSV: () => void;
81
+ exportExcel: (columns?: SdExcelColumn[]) => void;
82
+ exportCSV: (columns?: SdExcelColumn[]) => void;
93
83
  exportCustom: () => void;
94
84
  onFilterChange: () => void;
95
85
  onExpand: (rowData: SdTableItem<T>) => Promise<void>;
@@ -106,6 +96,9 @@ export declare class SdTable<T = unknown> extends SdBaseSecureComponent implemen
106
96
  detectChanges: () => void;
107
97
  onOperatorChange: (column: SdTableColumn, operator: SdOperator) => void;
108
98
  trackBy: (index: number, item: SdTableItem) => string;
109
- static ɵfac: i0.ɵɵFactoryDeclaration<SdTable<any>, [null, null, { optional: true; }, null, null, null, null]>;
110
- static ɵcmp: i0.ɵɵComponentDeclaration<SdTable<any>, "sd-table", never, { "_autoId": { "alias": "autoId"; "required": false; }; "option": { "alias": "option"; "required": false; }; }, {}, ["sdSubInformation", "sdCellDefs", "sdFooterDefs", "sdFilterDefs"], ["[sdTableTop]"], true, never>;
99
+ isReorderDisabled(item: SdTableItem<T>): boolean;
100
+ reorderSortPredicate: (index: number, drag: CdkDrag<SdTableItem<T>>, drop: CdkDropList<SdTableItem<T>[]>) => boolean;
101
+ onReorderDrop(event: CdkDragDrop<SdTableItem<T>[]>): void;
102
+ static ɵfac: i0.ɵɵFactoryDeclaration<SdTable<any>, never>;
103
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdTable<any>, "sd-table", never, { "autoIdInput": { "alias": "autoId"; "required": false; "isSignal": true; }; "option": { "alias": "option"; "required": true; "isSignal": true; }; }, {}, ["sdSubInformation", "sdCellDefs", "sdFooterDefs", "sdFilterDefs", "sdTitleDefs"], ["[sdTableTop]"], true, never>;
111
104
  }
@@ -1,17 +1,50 @@
1
1
  import { InjectionToken } from '@angular/core';
2
+ /**
3
+ * Contract cấu hình cho cơ chế upload file của sd-angular.
4
+ *
5
+ * Cách dùng phổ biến:
6
+ * - Portal có thể provide cấu hình mặc định ở tầng global.
7
+ * - Mỗi module có thể provide thêm cấu hình riêng (thường với `multi: true`).
8
+ * - Khi có nhiều cấu hình cùng lúc, dùng `key` để chọn đúng provider.
9
+ *
10
+ * Luồng xử lý:
11
+ * 1) `upload`: upload file mới, trả về danh sách id/key.
12
+ * 2) `details`: lấy metadata để render danh sách file từ id/key.
13
+ * 3) `download` (optional): tải file theo id/key.
14
+ */
2
15
  export interface ISdUploadFileConfiguration<TArgs = any> {
16
+ /**
17
+ * Định danh cấu hình upload.
18
+ * Bắt buộc khi app có nhiều provider upload để tránh mapping nhầm.
19
+ */
20
+ key?: string;
21
+ /** Upload file và trả về danh sách id/key dùng cho lưu trữ. */
3
22
  upload: SdUploadFileFuncUpload<TArgs>;
23
+ /** Nhận danh sách id/key và trả về dữ liệu hiển thị file trong UI. */
4
24
  details: SdUploadFileFuncDetails<TArgs>;
25
+ /** Tùy chọn: tải file về theo id/key. */
5
26
  download?: SdUploadFileFuncDownload<TArgs>;
6
27
  }
7
- export declare const SD_UPLOAD_FILE_CONFIG: InjectionToken<ISdUploadFileConfiguration<any>>;
28
+ /**
29
+ * Token DI cho upload configuration.
30
+ * Khuyến nghị provide dạng `multi: true` để hỗ trợ nhiều nguồn upload trong cùng app/module.
31
+ */
32
+ export declare const SD_UPLOAD_FILE_CONFIGURATION: InjectionToken<ISdUploadFileConfiguration<any>>;
33
+ /** Hàm upload file và trả về danh sách id/key tương ứng. */
8
34
  export type SdUploadFileFuncUpload<TArgs> = (files: File[], args?: TArgs) => Promise<string[]>;
35
+ /** Hàm lấy thông tin file phục vụ hiển thị từ danh sách id/key. */
9
36
  export type SdUploadFileFuncDetails<TArgs> = (idOrKey: (string | number)[], args?: TArgs) => Promise<SdUploadFileDetail[]>;
37
+ /** Hàm tải file theo id/key. */
10
38
  export type SdUploadFileFuncDownload<TArgs> = (idOrKey: string | number, args?: TArgs) => Promise<void>;
11
39
  export interface SdUploadFileDetail {
40
+ /** Định danh file được backend trả về sau upload. */
12
41
  idOrKey: string;
42
+ /** URL truy cập file (CDN hoặc direct URL). */
13
43
  cdn: string;
44
+ /** Tên hiển thị file. */
14
45
  name?: string;
46
+ /** Đuôi file: png, jpg, pdf... */
15
47
  extension?: string;
48
+ /** Dung lượng file tính theo MB (nếu backend có trả về). */
16
49
  size?: number;
17
50
  }
@@ -1,7 +1,6 @@
1
1
  import * as i0 from "@angular/core";
2
2
  export declare class UploadFileService {
3
3
  #private;
4
- constructor();
5
4
  isHashedKey: (key: string) => boolean;
6
5
  get: (key: string) => File | null;
7
6
  add: (file: File) => string | null;
@@ -1,69 +1,67 @@
1
1
  import { CdkDragDrop } from '@angular/cdk/drag-drop';
2
- import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnDestroy, QueryList } from '@angular/core';
3
- import { FormGroup, NgForm } from '@angular/forms';
2
+ import { ElementRef } from '@angular/core';
3
+ import { FormGroup } from '@angular/forms';
4
4
  import { SdLabelDefDirective } from '@sd-angular/core/forms/directives';
5
5
  import { SdFormControl } from '@sd-angular/core/forms/models';
6
- import { SdConfirmService, SdNotifyService } from '@sd-angular/core/services';
7
6
  import { PreviewComponent } from './components/preview/preview.component';
8
- import { ISdUploadFileConfiguration, SdUploadFileFuncDetails } from './configurations';
9
- import { PreviewFile, UploadFileService } from './services';
7
+ import { SdUploadFileFuncDownload, SdUploadFileFuncDetails, SdUploadFileFuncUpload } from './configurations';
8
+ import { PreviewFile } from './services';
10
9
  import * as i0 from "@angular/core";
11
- export declare class SdUploadFile<TArgs = any> implements AfterViewInit, OnDestroy {
10
+ export declare class SdUploadFile<TArgs = any> {
12
11
  #private;
13
- private ref;
14
- private notifyService;
15
- private confirmService;
16
- private readonly uploadFileConfig;
17
- private uploadFileService;
18
- previewFile?: PreviewComponent;
19
- id: string;
20
- selectedFile?: PreviewFile | null;
21
- formControl: SdFormControl;
22
- set _form(val: NgForm | FormGroup);
23
- set _name(val: string | undefined);
24
- args?: TArgs;
25
- label?: string;
26
- helperText?: string;
27
- set _helperText(val: string | undefined);
28
- description?: string;
29
- type: 'image' | 'document' | 'file';
30
- set _type(type: 'image' | 'document' | 'file' | undefined | null);
31
- set disabled(val: boolean | '' | undefined | null);
32
- required: boolean;
33
- set _required(val: boolean | '' | undefined | null);
34
- extensions: string[];
35
- set _extensions(extensions: string[] | undefined | null);
36
- max: number;
37
- set _max(max: number | undefined | null);
38
- maxOfImage: number;
39
- set _maxOfImage(value: number | undefined | null);
40
- maxSize?: number;
41
- maxWidth?: number;
42
- maxHeight?: number;
43
- scaleToPixel?: number;
44
- previewWidth: string;
45
- previewHeight: string;
46
- align: 'left' | 'center';
47
- details?: SdUploadFileFuncDetails<any>;
48
- imageValidator?: (image: HTMLImageElement) => string;
49
- previewFiles: PreviewFile[];
50
- set model(model: (string | number | undefined | null)[] | undefined | null);
51
- loaded: EventEmitter<PreviewFile[]>;
52
- modelChange: EventEmitter<(string | number)[]>;
53
- filesChanged: EventEmitter<(string | File)[]>;
54
- dropElements?: QueryList<ElementRef>;
55
- canvas?: ElementRef;
56
- sdLabelDef?: SdLabelDefDirective;
57
- constructor(ref: ChangeDetectorRef, notifyService: SdNotifyService, confirmService: SdConfirmService, uploadFileConfig: ISdUploadFileConfiguration, uploadFileService: UploadFileService);
58
- ngAfterViewInit(): void;
59
- ngOnDestroy(): void;
12
+ readonly id: string;
13
+ readonly formControl: SdFormControl;
14
+ readonly previewFiles: import("@angular/core").WritableSignal<PreviewFile[]>;
15
+ readonly selectedFile: import("@angular/core").WritableSignal<PreviewFile | null | undefined>;
16
+ readonly previewFileComponent: import("@angular/core").Signal<PreviewComponent | undefined>;
17
+ readonly dropElements: import("@angular/core").Signal<readonly ElementRef<any>[]>;
18
+ readonly sdLabelDef: import("@angular/core").Signal<SdLabelDefDirective | undefined>;
19
+ readonly args: import("@angular/core").InputSignal<TArgs | undefined>;
20
+ readonly label: import("@angular/core").InputSignal<string | undefined>;
21
+ readonly key: import("@angular/core").InputSignal<string | undefined>;
22
+ readonly description: import("@angular/core").InputSignal<string | undefined>;
23
+ readonly previewWidth: import("@angular/core").InputSignal<string>;
24
+ readonly previewHeight: import("@angular/core").InputSignal<string>;
25
+ readonly align: import("@angular/core").InputSignal<"left" | "center">;
26
+ readonly uploadInput: import("@angular/core").InputSignal<SdUploadFileFuncUpload<any> | undefined>;
27
+ readonly details: import("@angular/core").InputSignal<SdUploadFileFuncDetails<any> | undefined>;
28
+ readonly downloadInput: import("@angular/core").InputSignal<SdUploadFileFuncDownload<any> | undefined>;
29
+ readonly imageValidator: import("@angular/core").InputSignal<((image: HTMLImageElement) => string) | undefined>;
30
+ readonly maxSize: import("@angular/core").InputSignal<number | undefined>;
31
+ readonly maxWidth: import("@angular/core").InputSignal<number | undefined>;
32
+ readonly maxHeight: import("@angular/core").InputSignal<number | undefined>;
33
+ readonly scaleToPixel: import("@angular/core").InputSignal<number | undefined>;
34
+ form: import("@angular/core").InputSignalWithTransform<FormGroup<any> | undefined, any>;
35
+ readonly nameInput: import("@angular/core").InputSignalWithTransform<string, string | undefined>;
36
+ readonly required: import("@angular/core").InputSignalWithTransform<boolean, boolean | "" | null | undefined>;
37
+ readonly type: import("@angular/core").InputSignalWithTransform<"image" | "document" | "file", "image" | "document" | "file" | null | undefined>;
38
+ readonly helperText: import("@angular/core").InputSignal<string | undefined>;
39
+ readonly max: import("@angular/core").InputSignalWithTransform<number, number | null | undefined>;
40
+ readonly maxOfImage: import("@angular/core").InputSignalWithTransform<number, number | null | undefined>;
41
+ readonly extensions: import("@angular/core").InputSignalWithTransform<string[], string[] | null | undefined>;
42
+ readonly disabled: import("@angular/core").InputSignalWithTransform<boolean, boolean | "" | null | undefined>;
43
+ readonly generatedDescription: import("@angular/core").Signal<string | undefined>;
44
+ readonly loaded: import("@angular/core").OutputEmitterRef<PreviewFile[]>;
45
+ readonly filesChanged: import("@angular/core").OutputEmitterRef<(string | File)[]>;
46
+ readonly model: import("@angular/core").ModelSignal<(string | number)[]>;
47
+ constructor();
60
48
  onUpload: () => void;
61
49
  onRemove: (file: PreviewFile) => void;
62
50
  onDrop: (event: CdkDragDrop<string[]>) => void;
63
51
  onImgError: (previewFile: PreviewFile) => void;
64
52
  onSelect: (file: PreviewFile) => void;
53
+ /**
54
+ * Lấy danh sách các File từ previewFiles (chưa upload).
55
+ */
65
56
  getFiles: () => Promise<File[]>;
57
+ /**
58
+ * Thực hiện upload các file và gán giá trị, output trả ra mảng idOrKeys.
59
+ * HÀM NÀY BẮT BUỘC PHẢI GỌI TRƯỚC KHI GỌI VỀ SERVER.
60
+ */
66
61
  upload: () => Promise<void>;
62
+ /**
63
+ * Mở popup preview ảnh.
64
+ */
67
65
  preview: () => Promise<void>;
68
66
  /**
69
67
  * Tải xuống một tệp tin dựa trên đối tượng PreviewFile.
@@ -77,5 +75,5 @@ export declare class SdUploadFile<TArgs = any> implements AfterViewInit, OnDestr
77
75
  onDownload: (previewFile: PreviewFile) => void;
78
76
  isLastVisibleOverlay(fileIndex: number): boolean;
79
77
  static ɵfac: i0.ɵɵFactoryDeclaration<SdUploadFile<any>, never>;
80
- static ɵcmp: i0.ɵɵComponentDeclaration<SdUploadFile<any>, "sd-upload-file", never, { "_form": { "alias": "form"; "required": false; }; "_name": { "alias": "name"; "required": false; }; "args": { "alias": "args"; "required": false; }; "label": { "alias": "label"; "required": false; }; "_helperText": { "alias": "helperText"; "required": false; }; "description": { "alias": "description"; "required": false; }; "_type": { "alias": "type"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "_required": { "alias": "required"; "required": false; }; "_extensions": { "alias": "extensions"; "required": false; }; "_max": { "alias": "max"; "required": false; }; "_maxOfImage": { "alias": "maxOfImage"; "required": false; }; "maxSize": { "alias": "maxSize"; "required": false; }; "maxWidth": { "alias": "maxWidth"; "required": false; }; "maxHeight": { "alias": "maxHeight"; "required": false; }; "scaleToPixel": { "alias": "scaleToPixel"; "required": false; }; "previewWidth": { "alias": "previewWidth"; "required": false; }; "previewHeight": { "alias": "previewHeight"; "required": false; }; "align": { "alias": "align"; "required": false; }; "details": { "alias": "details"; "required": false; }; "imageValidator": { "alias": "imageValidator"; "required": false; }; "model": { "alias": "model"; "required": false; }; }, { "loaded": "loaded"; "modelChange": "modelChange"; "filesChanged": "filesChanged"; }, ["sdLabelDef"], never, true, never>;
78
+ static ɵcmp: i0.ɵɵComponentDeclaration<SdUploadFile<any>, "sd-upload-file", never, { "args": { "alias": "args"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "key": { "alias": "key"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "previewWidth": { "alias": "previewWidth"; "required": false; "isSignal": true; }; "previewHeight": { "alias": "previewHeight"; "required": false; "isSignal": true; }; "align": { "alias": "align"; "required": false; "isSignal": true; }; "uploadInput": { "alias": "upload"; "required": false; "isSignal": true; }; "details": { "alias": "details"; "required": false; "isSignal": true; }; "downloadInput": { "alias": "download"; "required": false; "isSignal": true; }; "imageValidator": { "alias": "imageValidator"; "required": false; "isSignal": true; }; "maxSize": { "alias": "maxSize"; "required": false; "isSignal": true; }; "maxWidth": { "alias": "maxWidth"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "scaleToPixel": { "alias": "scaleToPixel"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "nameInput": { "alias": "name"; "required": false; "isSignal": true; }; "required": { "alias": "required"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "helperText": { "alias": "helperText"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "maxOfImage": { "alias": "maxOfImage"; "required": false; "isSignal": true; }; "extensions": { "alias": "extensions"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "model": { "alias": "model"; "required": false; "isSignal": true; }; }, { "loaded": "loaded"; "filesChanged": "filesChanged"; "model": "modelChange"; }, ["sdLabelDef"], never, true, never>;
81
79
  }
@@ -0,0 +1 @@
1
+ export * from './src/view.component';