@sd-angular/core 19.0.0-beta.1 → 19.0.0-beta.100

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 (796) hide show
  1. package/README.md +723 -64
  2. package/assets/scss/README.md +524 -0
  3. package/assets/scss/ckeditor5.scss +61 -4
  4. package/assets/scss/core/bootstrap.scss +0 -83
  5. package/assets/scss/core/form.scss +36 -16
  6. package/assets/scss/core/utilities/_base.scss +333 -0
  7. package/assets/scss/core/utilities/_border.scss +22 -0
  8. package/assets/scss/core/utilities/_display.scss +10 -0
  9. package/assets/scss/core/utilities/_elevation.scss +80 -0
  10. package/assets/scss/core/utilities/_flexbox.scss +54 -0
  11. package/assets/scss/core/utilities/_gap.scss +9 -0
  12. package/assets/scss/core/utilities/_grid.scss +142 -0
  13. package/assets/scss/core/utilities/_index.scss +17 -0
  14. package/assets/scss/core/utilities/_misc.scss +20 -0
  15. package/assets/scss/core/utilities/_overflow.scss +9 -0
  16. package/assets/scss/core/utilities/_position.scss +8 -0
  17. package/assets/scss/core/utilities/_sizing.scss +28 -0
  18. package/assets/scss/core/utilities/_spacing.scss +31 -0
  19. package/assets/scss/core/utilities/_typography.scss +99 -0
  20. package/assets/scss/sd-core.scss +8 -5
  21. package/assets/scss/themes/material-theme.scss +82 -40
  22. package/components/anchor/index.d.ts +1 -1
  23. package/components/anchor/src/components/anchor/anchor.component.d.ts +22 -0
  24. package/components/anchor/src/components/anchor-item/anchor-item.component.d.ts +9 -11
  25. package/components/anchor/src/components/anchor-nav/anchor-nav.component.d.ts +21 -0
  26. package/components/anchor/src/components/index.d.ts +1 -1
  27. package/components/anchor/src/models/index.d.ts +1 -0
  28. package/components/anchor/src/models/sd-anchor.model.d.ts +7 -0
  29. package/components/autoid-inspector/index.d.ts +8 -0
  30. package/components/autoid-inspector/src/autoid-inspector.component.d.ts +55 -0
  31. package/components/autoid-inspector/src/models/autoid-element.model.d.ts +55 -0
  32. package/components/autoid-inspector/src/models/autoid-export-format.model.d.ts +6 -0
  33. package/components/autoid-inspector/src/models/autoid-inspector-config.model.d.ts +8 -0
  34. package/components/autoid-inspector/src/services/autoid-audit.service.d.ts +19 -0
  35. package/components/autoid-inspector/src/services/autoid-export.service.d.ts +21 -0
  36. package/components/autoid-inspector/src/services/autoid-highlight.service.d.ts +12 -0
  37. package/components/autoid-inspector/src/services/autoid-scanner.service.d.ts +23 -0
  38. package/components/avatar/index.d.ts +1 -0
  39. package/components/avatar/src/avatar.component.d.ts +19 -0
  40. package/components/badge/src/badge.component.d.ts +74 -20
  41. package/components/button/src/button.component.d.ts +30 -28
  42. package/components/chart/index.d.ts +4 -0
  43. package/components/chart/src/bar-chart.component.d.ts +18 -0
  44. package/components/chart/src/doughnut-chart.component.d.ts +16 -0
  45. package/components/chart/src/line-chart.component.d.ts +18 -0
  46. package/components/chart/src/pie-chart.component.d.ts +16 -0
  47. package/components/code-editor/index.d.ts +1 -0
  48. package/components/code-editor/src/code-editor.component.d.ts +25 -0
  49. package/components/document-builder/index.d.ts +1 -0
  50. package/components/document-builder/src/components/header-footer-builder/header-footer-builder.component.d.ts +4 -1
  51. package/components/document-builder/src/document-builder.component.d.ts +14 -42
  52. package/components/document-builder/src/document-builder.config.d.ts +21 -0
  53. package/components/document-builder/src/document-builder.model.d.ts +22 -12
  54. package/components/document-builder/src/document-builder.utils.d.ts +10 -0
  55. package/components/document-builder/src/plugins/block-space/block-space.plugin.d.ts +9 -0
  56. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.d.ts +44 -0
  57. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.model.d.ts +57 -0
  58. package/components/document-builder/src/plugins/heading/heading.plugin.d.ts +5 -0
  59. package/components/document-builder/src/plugins/highlight-range/highlight-range.plugin.d.ts +4 -0
  60. package/components/document-builder/src/plugins/image-custom/image-custom.plugin.d.ts +31 -0
  61. package/components/document-builder/src/plugins/{image-upload.plugin.d.ts → image-upload/image-upload.plugin.d.ts} +0 -4
  62. package/components/document-builder/src/plugins/index.d.ts +11 -5
  63. package/components/document-builder/src/plugins/{page-orientation.plugin.d.ts → page-orientation/page-orientation.plugin.d.ts} +2 -2
  64. package/components/document-builder/src/plugins/paste-handler/filters/bookmark.d.ts +14 -0
  65. package/components/document-builder/src/plugins/paste-handler/filters/br.d.ts +15 -0
  66. package/components/document-builder/src/plugins/paste-handler/filters/image.d.ts +25 -0
  67. package/components/document-builder/src/plugins/paste-handler/filters/list.d.ts +29 -0
  68. package/components/document-builder/src/plugins/paste-handler/filters/parse.d.ts +35 -0
  69. package/components/document-builder/src/plugins/paste-handler/filters/removeboldwrapper.d.ts +15 -0
  70. package/components/document-builder/src/plugins/paste-handler/filters/removegooglesheetstag.d.ts +15 -0
  71. package/components/document-builder/src/plugins/paste-handler/filters/removeinvalidtablewidth.d.ts +15 -0
  72. package/components/document-builder/src/plugins/paste-handler/filters/removemsattributes.d.ts +15 -0
  73. package/components/document-builder/src/plugins/paste-handler/filters/removestyleblock.d.ts +15 -0
  74. package/components/document-builder/src/plugins/paste-handler/filters/removexmlns.d.ts +15 -0
  75. package/components/document-builder/src/plugins/paste-handler/filters/replacemsfootnotes.d.ts +54 -0
  76. package/components/document-builder/src/plugins/paste-handler/filters/replacetabswithinprewithspaces.d.ts +24 -0
  77. package/components/document-builder/src/plugins/paste-handler/filters/space.d.ts +27 -0
  78. package/components/document-builder/src/plugins/paste-handler/filters/table.d.ts +16 -0
  79. package/components/document-builder/src/plugins/paste-handler/filters/utils.d.ts +25 -0
  80. package/components/document-builder/src/plugins/paste-handler/index.d.ts +35 -0
  81. package/components/document-builder/src/plugins/paste-handler/normalizers/googledocsnormalizer.d.ts +31 -0
  82. package/components/document-builder/src/plugins/paste-handler/normalizers/googlesheetsnormalizer.d.ts +31 -0
  83. package/components/document-builder/src/plugins/paste-handler/normalizers/mswordnormalizer.d.ts +29 -0
  84. package/components/document-builder/src/plugins/paste-handler/types.d.ts +30 -0
  85. package/components/document-builder/src/plugins/table-custom/index.d.ts +34 -0
  86. package/components/document-builder/src/plugins/variable/variable.plugin.d.ts +51 -0
  87. package/components/editor/index.d.ts +3 -0
  88. package/components/editor/src/configurations/editor.configuration.d.ts +12 -0
  89. package/components/editor/src/configurations/index.d.ts +1 -0
  90. package/components/editor/src/editor.component.d.ts +52 -0
  91. package/components/editor/src/models/editor.model.d.ts +10 -0
  92. package/components/editor/src/models/image-upload.plugin.model.d.ts +51 -0
  93. package/components/editor/src/models/index.d.ts +2 -0
  94. package/components/editor/src/plugins/image-upload/image-upload.plugin.d.ts +22 -0
  95. package/components/editor/src/plugins/image-upload/utils/batch.utils.d.ts +14 -0
  96. package/components/editor/src/plugins/image-upload/utils/index.d.ts +3 -0
  97. package/components/editor/src/plugins/image-upload/utils/style.utils.d.ts +3 -0
  98. package/components/editor/src/plugins/image-upload/utils/validate.utils.d.ts +4 -0
  99. package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-table/attribute-table.component.d.ts +6 -4
  100. package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-template/attribute-template.component.d.ts +4 -4
  101. package/components/{workflow → form-generic}/src/components/form-builder/components/configure-validation/configure-validation.component.d.ts +4 -4
  102. package/components/{workflow → form-generic}/src/components/form-builder/components/expression-builder/expression-builder.component.d.ts +1 -1
  103. package/components/form-generic/src/components/form-builder/components/group/attribute/group-attribute.component.d.ts +23 -0
  104. package/components/form-generic/src/components/form-builder/components/group/index.d.ts +1 -0
  105. package/components/{workflow → form-generic}/src/components/form-builder/components/index.d.ts +1 -0
  106. package/components/{workflow → form-generic}/src/components/form-builder/components/table/control/table-control.component.d.ts +3 -0
  107. package/components/form-generic/src/components/form-builder/form-builder.component.d.ts +120 -0
  108. package/components/{workflow → form-generic}/src/components/form-render/form-render.component.d.ts +4 -4
  109. package/components/{workflow → form-generic}/src/components/sd-feel-expression/sd-feel-expression.component.d.ts +1 -1
  110. package/components/{workflow/src/configurations/workflow.configuration.d.ts → form-generic/src/configurations/form-generic.configuration.d.ts} +2 -2
  111. package/components/form-generic/src/configurations/index.d.ts +2 -0
  112. package/components/{workflow → form-generic}/src/models/form-generic-component.model.d.ts +27 -6
  113. package/components/{workflow → form-generic}/src/models/form-generic-expression.model.d.ts +1 -0
  114. package/components/{workflow → form-generic}/src/models/index.d.ts +1 -0
  115. package/components/{workflow → form-generic}/src/pipes/html.pipe.d.ts +4 -4
  116. package/components/{workflow → form-generic}/src/services/form-generic.service.d.ts +3 -3
  117. package/components/index.d.ts +9 -2
  118. package/components/mini-editor/index.d.ts +2 -0
  119. package/components/mini-editor/src/mini-editor.component.d.ts +91 -0
  120. package/components/mini-editor/src/mini-editor.model.d.ts +44 -0
  121. package/components/modal/index.d.ts +1 -1
  122. package/components/modal/src/modal.component.d.ts +29 -0
  123. package/components/preview/index.d.ts +3 -0
  124. package/components/preview/src/preview-image/preview-image.component.d.ts +84 -24
  125. package/components/preview/src/preview-image/preview-image.types.d.ts +53 -0
  126. package/components/preview/src/preview-pdf/preview-pdf.component.d.ts +186 -0
  127. package/components/preview/src/preview-pdf/preview-pdf.types.d.ts +84 -0
  128. package/components/quick-action/src/quick-action.component.d.ts +5 -6
  129. package/components/section/index.d.ts +1 -0
  130. package/components/section/src/section-item/section-item.component.d.ts +7 -0
  131. package/components/section/src/section.component.d.ts +11 -12
  132. package/components/side-drawer/src/side-drawer.component.d.ts +17 -26
  133. package/components/splitter/index.d.ts +3 -0
  134. package/components/splitter/src/splitter-handle/splitter-handle.component.d.ts +24 -0
  135. package/components/splitter/src/splitter-panel/splitter-panel.component.d.ts +16 -0
  136. package/components/splitter/src/splitter-state.service.d.ts +26 -0
  137. package/components/splitter/src/splitter.component.d.ts +28 -0
  138. package/components/splitter/src/splitter.models.d.ts +23 -0
  139. package/components/tab-router/src/components/tab-router-item/tab-router-item.component.d.ts +4 -1
  140. package/components/tab-router/src/components/tab-router-nav/tab-router-nav.component.d.ts +5 -6
  141. package/components/tab-router/src/components/tab-router-outlet/tab-router-outlet.component.d.ts +6 -17
  142. package/components/table/index.d.ts +3 -0
  143. package/components/table/src/components/column-title/column-title.component.d.ts +10 -0
  144. package/components/table/src/components/command/desktop-command.component.d.ts +14 -0
  145. package/components/table/src/components/command/pipes/command.pipe.d.ts +30 -0
  146. package/components/table/src/components/command/pipes/filter.pipe.d.ts +35 -0
  147. package/components/table/src/components/config/config.component.d.ts +7 -14
  148. package/components/table/src/components/desktop-cell/desktop-cell.component.d.ts +19 -12
  149. package/components/table/src/components/desktop-cell/view/view.component.d.ts +24 -0
  150. package/components/table/src/components/filter/column-filter/column-filter.component.d.ts +36 -0
  151. package/components/table/src/components/filter/external-filter/external-filter.component.d.ts +27 -0
  152. package/components/table/src/components/filter/index.d.ts +3 -0
  153. package/components/table/src/components/filter/mobile-filter/mobile-filter.component.d.ts +42 -0
  154. package/components/table/src/components/index.d.ts +2 -2
  155. package/components/table/src/components/selector-action/action-filter.pipe.d.ts +11 -10
  156. package/components/table/src/components/selector-action/selector-action.component.d.ts +7 -6
  157. package/components/table/src/directives/index.d.ts +5 -0
  158. package/components/table/src/directives/sd-column-resize.directive.d.ts +13 -0
  159. package/components/table/src/directives/sd-table-cell-def.directive.d.ts +4 -5
  160. package/components/table/src/directives/sd-table-column-filter-def.directive.d.ts +8 -0
  161. package/components/table/src/directives/sd-table-expand-def.directive.d.ts +3 -4
  162. package/components/table/src/directives/sd-table-filter-def.directive.d.ts +4 -6
  163. package/components/table/src/directives/sd-table-footer-def.directive.d.ts +2 -3
  164. package/components/table/src/directives/sd-table-title-def.directive.d.ts +8 -0
  165. package/components/table/src/directives/sticky-shadow.directive.d.ts +17 -0
  166. package/components/table/src/models/index.d.ts +1 -0
  167. package/components/table/src/models/table-column.model.d.ts +49 -40
  168. package/components/table/src/models/table-command.model.d.ts +7 -3
  169. package/components/table/src/models/table-item.model.d.ts +15 -3
  170. package/components/table/src/models/table-option-config.model.d.ts +5 -0
  171. package/components/table/src/models/table-option-export.model.d.ts +3 -2
  172. package/components/table/src/models/table-option-selector.model.d.ts +65 -10
  173. package/components/table/src/models/table-option-style.model.d.ts +6 -1
  174. package/components/table/src/models/table-option-tree.model.d.ts +12 -0
  175. package/components/table/src/models/table-option.model.d.ts +137 -8
  176. package/components/table/src/pipes/index.d.ts +1 -0
  177. package/components/table/src/pipes/sd-tree.pipe.d.ts +9 -0
  178. package/components/table/src/services/column-width.util.d.ts +7 -0
  179. package/components/table/src/services/config.service.d.ts +5 -0
  180. package/components/table/src/services/index.d.ts +3 -0
  181. package/components/table/src/services/table-export/table-export.service.d.ts +26 -0
  182. package/components/table/src/services/table-filter/table-filter.model.d.ts +6 -5
  183. package/components/table/src/services/table-format/table-format.service.d.ts +16 -0
  184. package/components/table/src/services/tree/tree.util.d.ts +14 -0
  185. package/components/table/src/table.component.d.ts +58 -57
  186. package/components/upload-file/src/configurations/upload-file.configuration.d.ts +34 -1
  187. package/components/upload-file/src/services/upload-file.service.d.ts +0 -1
  188. package/components/upload-file/src/upload-file.component.d.ts +58 -54
  189. package/components/view/index.d.ts +1 -0
  190. package/components/view/src/view.component.d.ts +16 -0
  191. package/configurations/src/sd-core.configuration.d.ts +2 -0
  192. package/directives/index.d.ts +2 -0
  193. package/directives/src/sd-href.directive.d.ts +9 -0
  194. package/directives/src/sd-tooltip.directive.d.ts +26 -0
  195. package/fesm2022/sd-angular-core-components-anchor.mjs +139 -214
  196. package/fesm2022/sd-angular-core-components-anchor.mjs.map +1 -1
  197. package/fesm2022/sd-angular-core-components-autoid-inspector.mjs +723 -0
  198. package/fesm2022/sd-angular-core-components-autoid-inspector.mjs.map +1 -0
  199. package/fesm2022/sd-angular-core-components-avatar.mjs +103 -0
  200. package/fesm2022/sd-angular-core-components-avatar.mjs.map +1 -0
  201. package/fesm2022/sd-angular-core-components-badge.mjs +102 -93
  202. package/fesm2022/sd-angular-core-components-badge.mjs.map +1 -1
  203. package/fesm2022/sd-angular-core-components-base.mjs +3 -3
  204. package/fesm2022/sd-angular-core-components-button.mjs +72 -98
  205. package/fesm2022/sd-angular-core-components-button.mjs.map +1 -1
  206. package/fesm2022/sd-angular-core-components-chart.mjs +290 -0
  207. package/fesm2022/sd-angular-core-components-chart.mjs.map +1 -0
  208. package/fesm2022/sd-angular-core-components-code-editor.mjs +128 -0
  209. package/fesm2022/sd-angular-core-components-code-editor.mjs.map +1 -0
  210. package/fesm2022/sd-angular-core-components-document-builder.mjs +4478 -813
  211. package/fesm2022/sd-angular-core-components-document-builder.mjs.map +1 -1
  212. package/fesm2022/sd-angular-core-components-editor.mjs +1078 -0
  213. package/fesm2022/sd-angular-core-components-editor.mjs.map +1 -0
  214. package/fesm2022/sd-angular-core-components-form-generic.mjs +6714 -0
  215. package/fesm2022/sd-angular-core-components-form-generic.mjs.map +1 -0
  216. package/fesm2022/sd-angular-core-components-history.mjs +9 -8
  217. package/fesm2022/sd-angular-core-components-history.mjs.map +1 -1
  218. package/fesm2022/sd-angular-core-components-import-excel.mjs +35 -33
  219. package/fesm2022/sd-angular-core-components-import-excel.mjs.map +1 -1
  220. package/fesm2022/sd-angular-core-components-mini-editor.mjs +332 -0
  221. package/fesm2022/sd-angular-core-components-mini-editor.mjs.map +1 -0
  222. package/fesm2022/sd-angular-core-components-modal.mjs +70 -93
  223. package/fesm2022/sd-angular-core-components-modal.mjs.map +1 -1
  224. package/fesm2022/sd-angular-core-components-preview.mjs +1963 -89
  225. package/fesm2022/sd-angular-core-components-preview.mjs.map +1 -1
  226. package/fesm2022/sd-angular-core-components-query-builder.mjs +3 -3
  227. package/fesm2022/sd-angular-core-components-quick-action.mjs +10 -21
  228. package/fesm2022/sd-angular-core-components-quick-action.mjs.map +1 -1
  229. package/fesm2022/sd-angular-core-components-section.mjs +42 -44
  230. package/fesm2022/sd-angular-core-components-section.mjs.map +1 -1
  231. package/fesm2022/sd-angular-core-components-side-drawer.mjs +91 -91
  232. package/fesm2022/sd-angular-core-components-side-drawer.mjs.map +1 -1
  233. package/fesm2022/sd-angular-core-components-splitter.mjs +646 -0
  234. package/fesm2022/sd-angular-core-components-splitter.mjs.map +1 -0
  235. package/fesm2022/sd-angular-core-components-tab-router.mjs +304 -288
  236. package/fesm2022/sd-angular-core-components-tab-router.mjs.map +1 -1
  237. package/fesm2022/sd-angular-core-components-table.mjs +2558 -1589
  238. package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
  239. package/fesm2022/sd-angular-core-components-upload-file.mjs +422 -463
  240. package/fesm2022/sd-angular-core-components-upload-file.mjs.map +1 -1
  241. package/fesm2022/sd-angular-core-components-view.mjs +45 -0
  242. package/fesm2022/sd-angular-core-components-view.mjs.map +1 -0
  243. package/fesm2022/sd-angular-core-components.mjs +9 -2
  244. package/fesm2022/sd-angular-core-components.mjs.map +1 -1
  245. package/fesm2022/sd-angular-core-configurations.mjs.map +1 -1
  246. package/fesm2022/sd-angular-core-directives.mjs +303 -40
  247. package/fesm2022/sd-angular-core-directives.mjs.map +1 -1
  248. package/fesm2022/sd-angular-core-forms-autocomplete.mjs +311 -347
  249. package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
  250. package/fesm2022/sd-angular-core-forms-checkbox.mjs +14 -15
  251. package/fesm2022/sd-angular-core-forms-checkbox.mjs.map +1 -1
  252. package/fesm2022/sd-angular-core-forms-chip-calendar.mjs +195 -195
  253. package/fesm2022/sd-angular-core-forms-chip-calendar.mjs.map +1 -1
  254. package/fesm2022/sd-angular-core-forms-chip.mjs +202 -200
  255. package/fesm2022/sd-angular-core-forms-chip.mjs.map +1 -1
  256. package/fesm2022/sd-angular-core-forms-date-range.mjs +222 -258
  257. package/fesm2022/sd-angular-core-forms-date-range.mjs.map +1 -1
  258. package/fesm2022/sd-angular-core-forms-date.mjs +217 -273
  259. package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
  260. package/fesm2022/sd-angular-core-forms-datetime.mjs +627 -307
  261. package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
  262. package/fesm2022/sd-angular-core-forms-directives.mjs +12 -12
  263. package/fesm2022/sd-angular-core-forms-input-number.mjs +236 -326
  264. package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
  265. package/fesm2022/sd-angular-core-forms-input.mjs +233 -286
  266. package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
  267. package/fesm2022/sd-angular-core-forms-label.mjs +3 -3
  268. package/fesm2022/sd-angular-core-forms-models.mjs +65 -2
  269. package/fesm2022/sd-angular-core-forms-models.mjs.map +1 -1
  270. package/fesm2022/sd-angular-core-forms-radio.mjs +32 -17
  271. package/fesm2022/sd-angular-core-forms-radio.mjs.map +1 -1
  272. package/fesm2022/sd-angular-core-forms-select.mjs +411 -436
  273. package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
  274. package/fesm2022/sd-angular-core-forms-switch.mjs +15 -21
  275. package/fesm2022/sd-angular-core-forms-switch.mjs.map +1 -1
  276. package/fesm2022/sd-angular-core-forms-textarea.mjs +211 -221
  277. package/fesm2022/sd-angular-core-forms-textarea.mjs.map +1 -1
  278. package/fesm2022/sd-angular-core-forms.mjs +4 -4
  279. package/fesm2022/sd-angular-core-handlers.mjs +10 -9
  280. package/fesm2022/sd-angular-core-handlers.mjs.map +1 -1
  281. package/fesm2022/sd-angular-core-i18n.mjs +2547 -0
  282. package/fesm2022/sd-angular-core-i18n.mjs.map +1 -0
  283. package/fesm2022/sd-angular-core-interceptors.mjs +37 -10
  284. package/fesm2022/sd-angular-core-interceptors.mjs.map +1 -1
  285. package/fesm2022/sd-angular-core-models.mjs +6 -0
  286. package/fesm2022/sd-angular-core-models.mjs.map +1 -0
  287. package/fesm2022/sd-angular-core-modules-auth.mjs +137 -0
  288. package/fesm2022/sd-angular-core-modules-auth.mjs.map +1 -0
  289. package/fesm2022/sd-angular-core-modules-authom.mjs +360 -0
  290. package/fesm2022/sd-angular-core-modules-authom.mjs.map +1 -0
  291. package/fesm2022/sd-angular-core-modules-keycloak.mjs +127 -0
  292. package/fesm2022/sd-angular-core-modules-keycloak.mjs.map +1 -0
  293. package/fesm2022/sd-angular-core-modules-layout.mjs +957 -516
  294. package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
  295. package/fesm2022/sd-angular-core-modules-permission.mjs +166 -80
  296. package/fesm2022/sd-angular-core-modules-permission.mjs.map +1 -1
  297. package/fesm2022/sd-angular-core-modules.mjs +3 -1
  298. package/fesm2022/sd-angular-core-modules.mjs.map +1 -1
  299. package/fesm2022/sd-angular-core-pipes.mjs +35 -16
  300. package/fesm2022/sd-angular-core-pipes.mjs.map +1 -1
  301. package/fesm2022/sd-angular-core-services-api.mjs +31 -51
  302. package/fesm2022/sd-angular-core-services-api.mjs.map +1 -1
  303. package/fesm2022/sd-angular-core-services-cache.mjs +3 -3
  304. package/fesm2022/sd-angular-core-services-confirm.mjs +83 -44
  305. package/fesm2022/sd-angular-core-services-confirm.mjs.map +1 -1
  306. package/fesm2022/sd-angular-core-services-docx.mjs +300 -0
  307. package/fesm2022/sd-angular-core-services-docx.mjs.map +1 -0
  308. package/fesm2022/sd-angular-core-services-excel.mjs +33 -27
  309. package/fesm2022/sd-angular-core-services-excel.mjs.map +1 -1
  310. package/fesm2022/sd-angular-core-services-license.mjs +3 -3
  311. package/fesm2022/sd-angular-core-services-loading.mjs +3 -3
  312. package/fesm2022/sd-angular-core-services-notify.mjs +24 -24
  313. package/fesm2022/sd-angular-core-services-notify.mjs.map +1 -1
  314. package/fesm2022/sd-angular-core-services-storage.mjs +8 -3
  315. package/fesm2022/sd-angular-core-services-storage.mjs.map +1 -1
  316. package/fesm2022/sd-angular-core-services.mjs +1 -0
  317. package/fesm2022/sd-angular-core-services.mjs.map +1 -1
  318. package/fesm2022/sd-angular-core-utilities-data-state.mjs +38 -0
  319. package/fesm2022/sd-angular-core-utilities-data-state.mjs.map +1 -0
  320. package/fesm2022/sd-angular-core-utilities-extensions.mjs +90 -792
  321. package/fesm2022/sd-angular-core-utilities-extensions.mjs.map +1 -1
  322. package/fesm2022/sd-angular-core-utilities-models.mjs +42 -105
  323. package/fesm2022/sd-angular-core-utilities-models.mjs.map +1 -1
  324. package/fesm2022/sd-angular-core-utilities.mjs +1 -0
  325. package/fesm2022/sd-angular-core-utilities.mjs.map +1 -1
  326. package/fesm2022/sd-angular-core.mjs +0 -1
  327. package/fesm2022/sd-angular-core.mjs.map +1 -1
  328. package/forms/autocomplete/src/autocomplete.component.d.ts +61 -52
  329. package/forms/checkbox/src/checkbox.component.d.ts +6 -3
  330. package/forms/chip/src/chip.component.d.ts +44 -41
  331. package/forms/chip-calendar/src/chip-calendar.component.d.ts +44 -39
  332. package/forms/date/src/date.component.d.ts +53 -45
  333. package/forms/date-range/src/date-range.component.d.ts +42 -38
  334. package/forms/datetime/src/datetime.component.d.ts +67 -49
  335. package/forms/datetime/src/popup/sd-datetime-picker.component.d.ts +37 -0
  336. package/forms/datetime/src/popup/sd-time-spinner.component.d.ts +41 -0
  337. package/forms/input/src/input.component.d.ts +64 -56
  338. package/forms/input-number/src/input-number.component.d.ts +59 -52
  339. package/forms/models/index.d.ts +1 -0
  340. package/forms/models/src/form-control-state.d.ts +23 -0
  341. package/forms/radio/src/radio.component.d.ts +11 -3
  342. package/forms/select/src/select.component.d.ts +74 -61
  343. package/forms/switch/src/switch.component.d.ts +9 -6
  344. package/forms/textarea/src/textarea.component.d.ts +49 -42
  345. package/i18n/index.d.ts +5 -0
  346. package/i18n/src/en.d.ts +442 -0
  347. package/i18n/src/i18n.messages.d.ts +2 -0
  348. package/i18n/src/i18n.pipe.d.ts +9 -0
  349. package/i18n/src/i18n.service.d.ts +14 -0
  350. package/i18n/src/i18n.token.d.ts +1 -0
  351. package/i18n/src/i18n.types.d.ts +31 -0
  352. package/i18n/src/ja.d.ts +2 -0
  353. package/i18n/src/ko.d.ts +2 -0
  354. package/i18n/src/vi.d.ts +2 -0
  355. package/i18n/src/zh.d.ts +2 -0
  356. package/interceptors/index.d.ts +1 -0
  357. package/interceptors/unauthorized/unauthorized.interceptor.d.ts +12 -0
  358. package/models/index.d.ts +1 -0
  359. package/models/src/language.model.d.ts +2 -0
  360. package/modules/auth/configurations/auth.configuration.d.ts +19 -0
  361. package/modules/auth/configurations/index.d.ts +1 -0
  362. package/modules/auth/guards/auth.guard.d.ts +11 -0
  363. package/modules/auth/guards/index.d.ts +2 -0
  364. package/modules/auth/guards/portal.guard.d.ts +11 -0
  365. package/modules/auth/index.d.ts +3 -0
  366. package/modules/auth/services/auth.model.d.ts +8 -0
  367. package/modules/auth/services/auth.service.d.ts +17 -0
  368. package/modules/auth/services/index.d.ts +2 -0
  369. package/modules/authom/authom.configuration.d.ts +17 -0
  370. package/modules/authom/authom.interceptor.d.ts +3 -0
  371. package/modules/authom/authom.module.d.ts +16 -0
  372. package/modules/authom/authom.service.d.ts +32 -0
  373. package/modules/authom/index.d.ts +35 -0
  374. package/modules/index.d.ts +3 -1
  375. package/modules/keycloak/index.d.ts +4 -0
  376. package/modules/keycloak/keycloak.configuration.d.ts +11 -0
  377. package/modules/keycloak/keycloak.interceptor.d.ts +2 -0
  378. package/modules/keycloak/keycloak.module.d.ts +18 -0
  379. package/modules/keycloak/keycloak.service.d.ts +14 -0
  380. package/modules/layout/components/index.d.ts +2 -0
  381. package/modules/layout/components/layout-main/layout-main.component.d.ts +8 -12
  382. package/modules/layout/components/page/page.component.d.ts +5 -7
  383. package/modules/layout/components/sidebar-mobile-v1/components/sidebar/sidebar.component.d.ts +35 -0
  384. package/modules/layout/components/sidebar-mobile-v1/components/user/user.component.d.ts +24 -0
  385. package/modules/layout/components/sidebar-mobile-v1/main.component.d.ts +21 -0
  386. package/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.d.ts +29 -29
  387. package/modules/layout/components/sidebar-v1/components/user/user.component.d.ts +11 -17
  388. package/modules/layout/components/sidebar-v1/main.component.d.ts +14 -14
  389. package/modules/layout/configurations/layout.configuration.d.ts +54 -3
  390. package/modules/layout/modules/forbidden/pages/root/root.component.d.ts +3 -8
  391. package/modules/layout/modules/home/components/home-page/home-page.component.d.ts +27 -5
  392. package/modules/layout/modules/not-found/pages/root/root.component.d.ts +3 -8
  393. package/modules/layout/pipes/high-light-search.pipe.d.ts +1 -1
  394. package/modules/layout/services/index.d.ts +1 -0
  395. package/modules/layout/services/layout.service.d.ts +10 -0
  396. package/modules/layout/services/menu/menu.model.d.ts +4 -1
  397. package/modules/layout/services/storage/storage.service.d.ts +2 -3
  398. package/modules/permission/src/configurations/permission.configuration.d.ts +56 -2
  399. package/modules/permission/src/directives/permission.directive.d.ts +5 -8
  400. package/modules/permission/src/guards/permission.guard.d.ts +2 -1
  401. package/modules/permission/src/services/permission.service.d.ts +6 -9
  402. package/package.json +118 -73
  403. package/pipes/index.d.ts +1 -0
  404. package/pipes/src/empty.pipe.d.ts +7 -0
  405. package/pipes/src/format-number.pipe.d.ts +1 -1
  406. package/public-api.d.ts +0 -1
  407. package/sd-angular-core-19.0.0-beta.100.tgz +0 -0
  408. package/services/api/src/api.model.d.ts +7 -1
  409. package/services/api/src/api.service.d.ts +3 -7
  410. package/services/api/src/interceptors/api.interceptor.d.ts +2 -4
  411. package/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.d.ts +8 -0
  412. package/services/confirm/src/lib/confirm.service.d.ts +19 -0
  413. package/services/docx/index.d.ts +1 -0
  414. package/services/docx/src/lib/docx.model.d.ts +9 -0
  415. package/services/docx/src/lib/docx.service.d.ts +15 -0
  416. package/services/docx/src/lib/pandoc-core.d.ts +11 -0
  417. package/services/docx/src/public-api.d.ts +2 -0
  418. package/services/index.d.ts +1 -0
  419. package/services/notify/index.d.ts +1 -0
  420. package/services/notify/src/components/toast/toast.component.d.ts +3 -3
  421. package/services/notify/src/components/toast-container.component.d.ts +3 -4
  422. package/services/storage/src/storage.model.d.ts +1 -0
  423. package/utilities/data-state/index.d.ts +1 -0
  424. package/utilities/data-state/src/data-state.d.ts +11 -0
  425. package/utilities/extensions/index.d.ts +1 -0
  426. package/utilities/extensions/src/array.extension.d.ts +1 -7
  427. package/utilities/extensions/src/color.extension.d.ts +5 -0
  428. package/utilities/extensions/src/date.extension.d.ts +1 -18
  429. package/utilities/extensions/src/number.extension.d.ts +1 -10
  430. package/utilities/extensions/src/string.extension.d.ts +33 -2
  431. package/utilities/extensions/src/utility.extension.d.ts +7 -0
  432. package/utilities/index.d.ts +1 -0
  433. package/utilities/models/index.d.ts +3 -0
  434. package/utilities/models/src/color.model.d.ts +4 -1
  435. package/utilities/models/src/empty.model.d.ts +3 -0
  436. package/utilities/models/src/filter.model.d.ts +12 -11
  437. package/utilities/models/src/icon.model.d.ts +2 -0
  438. package/utilities/models/src/maybe-async.model.d.ts +10 -3
  439. package/utilities/models/src/nested-key-of.model.d.ts +4 -0
  440. package/utilities/models/src/operator.model.d.ts +9 -4
  441. package/utilities/models/src/order.model.d.ts +4 -4
  442. package/utilities/models/src/paging.model.d.ts +8 -15
  443. package/utilities/models/src/pattern.model.d.ts +16 -3
  444. package/utilities/models/src/size.model.d.ts +4 -1
  445. package/utilities/models/src/unwrap-signal.model.d.ts +6 -0
  446. package/assets/img/1D UX System.zip +0 -0
  447. package/assets/img/Popup/Vector.png +0 -0
  448. package/assets/img/empty.png +0 -0
  449. package/assets/img/empty.svg +0 -27
  450. package/assets/img/file-types/eps/001-file.eps +0 -143
  451. package/assets/img/file-types/eps/002-file-1.eps +0 -136
  452. package/assets/img/file-types/eps/003-file-2.eps +0 -130
  453. package/assets/img/file-types/eps/004-file-3.eps +0 -127
  454. package/assets/img/file-types/eps/005-file-4.eps +0 -120
  455. package/assets/img/file-types/eps/006-file-5.eps +0 -133
  456. package/assets/img/file-types/eps/007-file-6.eps +0 -133
  457. package/assets/img/file-types/eps/008-file-7.eps +0 -144
  458. package/assets/img/file-types/eps/009-file-8.eps +0 -150
  459. package/assets/img/file-types/eps/010-file-9.eps +0 -155
  460. package/assets/img/file-types/eps/011-file-10.eps +0 -124
  461. package/assets/img/file-types/eps/012-file-11.eps +0 -147
  462. package/assets/img/file-types/eps/013-file-12.eps +0 -125
  463. package/assets/img/file-types/eps/014-file-13.eps +0 -129
  464. package/assets/img/file-types/eps/015-file-14.eps +0 -143
  465. package/assets/img/file-types/eps/016-file-15.eps +0 -130
  466. package/assets/img/file-types/eps/017-file-16.eps +0 -197
  467. package/assets/img/file-types/eps/018-file-17.eps +0 -146
  468. package/assets/img/file-types/eps/019-file-18.eps +0 -131
  469. package/assets/img/file-types/eps/020-file-19.eps +0 -137
  470. package/assets/img/file-types/eps/021-file-20.eps +0 -134
  471. package/assets/img/file-types/eps/022-file-21.eps +0 -130
  472. package/assets/img/file-types/eps/023-file-22.eps +0 -161
  473. package/assets/img/file-types/eps/024-file-23.eps +0 -144
  474. package/assets/img/file-types/eps/025-file-24.eps +0 -164
  475. package/assets/img/file-types/eps/026-file-25.eps +0 -135
  476. package/assets/img/file-types/eps/027-file-26.eps +0 -124
  477. package/assets/img/file-types/eps/028-file-27.eps +0 -120
  478. package/assets/img/file-types/eps/029-file-28.eps +0 -141
  479. package/assets/img/file-types/eps/030-file-29.eps +0 -130
  480. package/assets/img/file-types/eps/031-file-30.eps +0 -157
  481. package/assets/img/file-types/eps/032-file-31.eps +0 -139
  482. package/assets/img/file-types/eps/033-file-32.eps +0 -139
  483. package/assets/img/file-types/eps/034-file-33.eps +0 -189
  484. package/assets/img/file-types/eps/035-file-34.eps +0 -162
  485. package/assets/img/file-types/eps/036-file-35.eps +0 -142
  486. package/assets/img/file-types/eps/037-file-36.eps +0 -123
  487. package/assets/img/file-types/eps/038-file-37.eps +0 -127
  488. package/assets/img/file-types/eps/039-file-38.eps +0 -146
  489. package/assets/img/file-types/eps/040-file-39.eps +0 -126
  490. package/assets/img/file-types/eps/041-file-40.eps +0 -117
  491. package/assets/img/file-types/eps/042-file-41.eps +0 -156
  492. package/assets/img/file-types/eps/043-file-42.eps +0 -118
  493. package/assets/img/file-types/eps/044-file-43.eps +0 -172
  494. package/assets/img/file-types/eps/045-file-44.eps +0 -201
  495. package/assets/img/file-types/eps/046-file-45.eps +0 -94
  496. package/assets/img/file-types/eps/047-file-46.eps +0 -176
  497. package/assets/img/file-types/eps/048-file-47.eps +0 -238
  498. package/assets/img/file-types/eps/049-file-48.eps +0 -187
  499. package/assets/img/file-types/eps/050-file-49.eps +0 -137
  500. package/assets/img/file-types/license/license.pdf +0 -0
  501. package/assets/img/file-types/png/3ds.png +0 -0
  502. package/assets/img/file-types/png/ai.png +0 -0
  503. package/assets/img/file-types/png/asp.png +0 -0
  504. package/assets/img/file-types/png/avi.png +0 -0
  505. package/assets/img/file-types/png/bin.png +0 -0
  506. package/assets/img/file-types/png/com.png +0 -0
  507. package/assets/img/file-types/png/css.png +0 -0
  508. package/assets/img/file-types/png/csv.png +0 -0
  509. package/assets/img/file-types/png/dbf.png +0 -0
  510. package/assets/img/file-types/png/dll.png +0 -0
  511. package/assets/img/file-types/png/doc.png +0 -0
  512. package/assets/img/file-types/png/docx.png +0 -0
  513. package/assets/img/file-types/png/dwg.png +0 -0
  514. package/assets/img/file-types/png/eml.png +0 -0
  515. package/assets/img/file-types/png/eps.png +0 -0
  516. package/assets/img/file-types/png/exe.png +0 -0
  517. package/assets/img/file-types/png/file.png +0 -0
  518. package/assets/img/file-types/png/fla.png +0 -0
  519. package/assets/img/file-types/png/gif.png +0 -0
  520. package/assets/img/file-types/png/htm.png +0 -0
  521. package/assets/img/file-types/png/ico.png +0 -0
  522. package/assets/img/file-types/png/ini.png +0 -0
  523. package/assets/img/file-types/png/iso.png +0 -0
  524. package/assets/img/file-types/png/jar.png +0 -0
  525. package/assets/img/file-types/png/jpg.png +0 -0
  526. package/assets/img/file-types/png/js.png +0 -0
  527. package/assets/img/file-types/png/mkv.png +0 -0
  528. package/assets/img/file-types/png/mov.png +0 -0
  529. package/assets/img/file-types/png/mp3.png +0 -0
  530. package/assets/img/file-types/png/mp4.png +0 -0
  531. package/assets/img/file-types/png/nfo.png +0 -0
  532. package/assets/img/file-types/png/obj.png +0 -0
  533. package/assets/img/file-types/png/otf.png +0 -0
  534. package/assets/img/file-types/png/pdf.png +0 -0
  535. package/assets/img/file-types/png/pkg.png +0 -0
  536. package/assets/img/file-types/png/png.png +0 -0
  537. package/assets/img/file-types/png/ppt.png +0 -0
  538. package/assets/img/file-types/png/pptx.png +0 -0
  539. package/assets/img/file-types/png/psd.png +0 -0
  540. package/assets/img/file-types/png/rtf.png +0 -0
  541. package/assets/img/file-types/png/svg.png +0 -0
  542. package/assets/img/file-types/png/tiff.png +0 -0
  543. package/assets/img/file-types/png/ttf.png +0 -0
  544. package/assets/img/file-types/png/txt.png +0 -0
  545. package/assets/img/file-types/png/vcf.png +0 -0
  546. package/assets/img/file-types/png/wav.png +0 -0
  547. package/assets/img/file-types/png/wmv.png +0 -0
  548. package/assets/img/file-types/png/xls.png +0 -0
  549. package/assets/img/file-types/png/xlsx.png +0 -0
  550. package/assets/img/file-types/png/xml.png +0 -0
  551. package/assets/img/file-types/png/zip.png +0 -0
  552. package/assets/img/file-types/psd/001-file.psd +0 -0
  553. package/assets/img/file-types/psd/002-file-1.psd +0 -0
  554. package/assets/img/file-types/psd/003-file-2.psd +0 -0
  555. package/assets/img/file-types/psd/004-file-3.psd +0 -0
  556. package/assets/img/file-types/psd/005-file-4.psd +0 -0
  557. package/assets/img/file-types/psd/006-file-5.psd +0 -0
  558. package/assets/img/file-types/psd/007-file-6.psd +0 -0
  559. package/assets/img/file-types/psd/008-file-7.psd +0 -0
  560. package/assets/img/file-types/psd/009-file-8.psd +0 -0
  561. package/assets/img/file-types/psd/010-file-9.psd +0 -0
  562. package/assets/img/file-types/psd/011-file-10.psd +0 -0
  563. package/assets/img/file-types/psd/012-file-11.psd +0 -0
  564. package/assets/img/file-types/psd/013-file-12.psd +0 -0
  565. package/assets/img/file-types/psd/014-file-13.psd +0 -0
  566. package/assets/img/file-types/psd/015-file-14.psd +0 -0
  567. package/assets/img/file-types/psd/016-file-15.psd +0 -0
  568. package/assets/img/file-types/psd/017-file-16.psd +0 -0
  569. package/assets/img/file-types/psd/018-file-17.psd +0 -0
  570. package/assets/img/file-types/psd/019-file-18.psd +0 -0
  571. package/assets/img/file-types/psd/020-file-19.psd +0 -0
  572. package/assets/img/file-types/psd/021-file-20.psd +0 -0
  573. package/assets/img/file-types/psd/022-file-21.psd +0 -0
  574. package/assets/img/file-types/psd/023-file-22.psd +0 -0
  575. package/assets/img/file-types/psd/024-file-23.psd +0 -0
  576. package/assets/img/file-types/psd/025-file-24.psd +0 -0
  577. package/assets/img/file-types/psd/026-file-25.psd +0 -0
  578. package/assets/img/file-types/psd/027-file-26.psd +0 -0
  579. package/assets/img/file-types/psd/028-file-27.psd +0 -0
  580. package/assets/img/file-types/psd/029-file-28.psd +0 -0
  581. package/assets/img/file-types/psd/030-file-29.psd +0 -0
  582. package/assets/img/file-types/psd/031-file-30.psd +0 -0
  583. package/assets/img/file-types/psd/032-file-31.psd +0 -0
  584. package/assets/img/file-types/psd/033-file-32.psd +0 -0
  585. package/assets/img/file-types/psd/034-file-33.psd +0 -0
  586. package/assets/img/file-types/psd/035-file-34.psd +0 -0
  587. package/assets/img/file-types/psd/036-file-35.psd +0 -0
  588. package/assets/img/file-types/psd/037-file-36.psd +0 -0
  589. package/assets/img/file-types/psd/038-file-37.psd +0 -0
  590. package/assets/img/file-types/psd/039-file-38.psd +0 -0
  591. package/assets/img/file-types/psd/040-file-39.psd +0 -0
  592. package/assets/img/file-types/psd/041-file-40.psd +0 -0
  593. package/assets/img/file-types/psd/042-file-41.psd +0 -0
  594. package/assets/img/file-types/psd/043-file-42.psd +0 -0
  595. package/assets/img/file-types/psd/044-file-43.psd +0 -0
  596. package/assets/img/file-types/psd/045-file-44.psd +0 -0
  597. package/assets/img/file-types/psd/046-file-45.psd +0 -0
  598. package/assets/img/file-types/psd/047-file-46.psd +0 -0
  599. package/assets/img/file-types/psd/048-file-47.psd +0 -0
  600. package/assets/img/file-types/psd/049-file-48.psd +0 -0
  601. package/assets/img/file-types/psd/050-file-49.psd +0 -0
  602. package/assets/img/file-types/svg/001-file.svg +0 -1
  603. package/assets/img/file-types/svg/002-file-1.svg +0 -1
  604. package/assets/img/file-types/svg/003-file-2.svg +0 -1
  605. package/assets/img/file-types/svg/004-file-3.svg +0 -1
  606. package/assets/img/file-types/svg/005-file-4.svg +0 -1
  607. package/assets/img/file-types/svg/006-file-5.svg +0 -1
  608. package/assets/img/file-types/svg/007-file-6.svg +0 -1
  609. package/assets/img/file-types/svg/008-file-7.svg +0 -1
  610. package/assets/img/file-types/svg/009-file-8.svg +0 -1
  611. package/assets/img/file-types/svg/010-file-9.svg +0 -1
  612. package/assets/img/file-types/svg/011-file-10.svg +0 -1
  613. package/assets/img/file-types/svg/012-file-11.svg +0 -1
  614. package/assets/img/file-types/svg/013-file-12.svg +0 -1
  615. package/assets/img/file-types/svg/014-file-13.svg +0 -1
  616. package/assets/img/file-types/svg/015-file-14.svg +0 -1
  617. package/assets/img/file-types/svg/016-file-15.svg +0 -1
  618. package/assets/img/file-types/svg/017-file-16.svg +0 -1
  619. package/assets/img/file-types/svg/018-file-17.svg +0 -1
  620. package/assets/img/file-types/svg/019-file-18.svg +0 -1
  621. package/assets/img/file-types/svg/020-file-19.svg +0 -1
  622. package/assets/img/file-types/svg/021-file-20.svg +0 -1
  623. package/assets/img/file-types/svg/022-file-21.svg +0 -1
  624. package/assets/img/file-types/svg/023-file-22.svg +0 -1
  625. package/assets/img/file-types/svg/024-file-23.svg +0 -1
  626. package/assets/img/file-types/svg/025-file-24.svg +0 -1
  627. package/assets/img/file-types/svg/026-file-25.svg +0 -1
  628. package/assets/img/file-types/svg/027-file-26.svg +0 -1
  629. package/assets/img/file-types/svg/028-file-27.svg +0 -1
  630. package/assets/img/file-types/svg/029-file-28.svg +0 -1
  631. package/assets/img/file-types/svg/030-file-29.svg +0 -1
  632. package/assets/img/file-types/svg/031-file-30.svg +0 -1
  633. package/assets/img/file-types/svg/032-file-31.svg +0 -1
  634. package/assets/img/file-types/svg/033-file-32.svg +0 -1
  635. package/assets/img/file-types/svg/034-file-33.svg +0 -1
  636. package/assets/img/file-types/svg/035-file-34.svg +0 -1
  637. package/assets/img/file-types/svg/036-file-35.svg +0 -1
  638. package/assets/img/file-types/svg/037-file-36.svg +0 -1
  639. package/assets/img/file-types/svg/038-file-37.svg +0 -1
  640. package/assets/img/file-types/svg/039-file-38.svg +0 -1
  641. package/assets/img/file-types/svg/040-file-39.svg +0 -1
  642. package/assets/img/file-types/svg/041-file-40.svg +0 -1
  643. package/assets/img/file-types/svg/042-file-41.svg +0 -1
  644. package/assets/img/file-types/svg/043-file-42.svg +0 -1
  645. package/assets/img/file-types/svg/044-file-43.svg +0 -1
  646. package/assets/img/file-types/svg/045-file-44.svg +0 -1
  647. package/assets/img/file-types/svg/046-file-45.svg +0 -1
  648. package/assets/img/file-types/svg/047-file-46.svg +0 -1
  649. package/assets/img/file-types/svg/048-file-47.svg +0 -1
  650. package/assets/img/file-types/svg/049-file-48.svg +0 -1
  651. package/assets/img/file-types/svg/050-file-49.svg +0 -1
  652. package/assets/img/plus-search-zoom-white.png +0 -0
  653. package/assets/scss/core/cursor.scss +0 -3
  654. package/assets/scss/core/elevation.scss +0 -57
  655. package/assets/scss/core/print.scss +0 -47
  656. package/assets/scss/core/typography.scss +0 -121
  657. package/components/anchor/src/components/anchor-horizontal/anchor-list/anchor-list.component.d.ts +0 -16
  658. package/components/anchor/src/components/anchor-vertical/anchor-list/anchor-list.component.d.ts +0 -17
  659. package/components/anchor/src/components/main/main.component.d.ts +0 -24
  660. package/components/anchor/src/models/anchor.model.d.ts +0 -5
  661. package/components/anchor/src/services/anchor.service.d.ts +0 -12
  662. package/components/anchor/src/services/index.d.ts +0 -1
  663. package/components/anchor-v2/index.d.ts +0 -1
  664. package/components/anchor-v2/src/components/anchor-item-v2/anchor-item-v2.component.d.ts +0 -12
  665. package/components/anchor-v2/src/components/anchor-v2/anchor-v2.component.d.ts +0 -25
  666. package/components/anchor-v2/src/components/anchor-vertical-v2/anchor-vertical-list-v2.component.d.ts +0 -17
  667. package/components/anchor-v2/src/components/index.d.ts +0 -2
  668. package/components/anchor-v2/src/models/index.d.ts +0 -1
  669. package/components/anchor-v2/src/models/sd-anchor-v2.model.d.ts +0 -7
  670. package/components/document-builder/src/plugins/comment.plugin.d.ts +0 -4
  671. package/components/document-builder/src/plugins/table-fit.plugin.d.ts +0 -4
  672. package/components/document-builder/src/plugins/variable.plugin.d.ts +0 -6
  673. package/components/modal/src/modal/modal.component.d.ts +0 -31
  674. package/components/table/src/components/column-filter/column-filter.component.d.ts +0 -40
  675. package/components/table/src/components/desktop-cell-view/desktop-cell-view.component.d.ts +0 -14
  676. package/components/table/src/components/desktop-command/desktop-command.component.d.ts +0 -15
  677. package/components/table/src/components/external-filter/external-filter.component.d.ts +0 -36
  678. package/components/table/src/pipes/command-disable.pipe.d.ts +0 -9
  679. package/components/table/src/pipes/command-filter.pipe.d.ts +0 -25
  680. package/components/table/src/pipes/command-title.pipe.d.ts +0 -9
  681. package/components/workflow/src/components/form-builder/form-builder.component.d.ts +0 -77
  682. package/components/workflow/src/configurations/index.d.ts +0 -1
  683. package/fesm2022/sd-angular-core-components-anchor-v2.mjs +0 -226
  684. package/fesm2022/sd-angular-core-components-anchor-v2.mjs.map +0 -1
  685. package/fesm2022/sd-angular-core-components-workflow.mjs +0 -6400
  686. package/fesm2022/sd-angular-core-components-workflow.mjs.map +0 -1
  687. package/fesm2022/sd-angular-core-guards-permission.mjs +0 -155
  688. package/fesm2022/sd-angular-core-guards-permission.mjs.map +0 -1
  689. package/fesm2022/sd-angular-core-guards.mjs +0 -6
  690. package/fesm2022/sd-angular-core-guards.mjs.map +0 -1
  691. package/fesm2022/sd-angular-core-modules-oidc.mjs +0 -127
  692. package/fesm2022/sd-angular-core-modules-oidc.mjs.map +0 -1
  693. package/fesm2022/sd-angular-core-services-firebase.mjs +0 -38
  694. package/fesm2022/sd-angular-core-services-firebase.mjs.map +0 -1
  695. package/guards/index.d.ts +0 -1
  696. package/guards/permission/index.d.ts +0 -4
  697. package/guards/permission/src/configurations/index.d.ts +0 -1
  698. package/guards/permission/src/configurations/permission.configuration.d.ts +0 -8
  699. package/guards/permission/src/directives/index.d.ts +0 -1
  700. package/guards/permission/src/directives/permission.directive.d.ts +0 -12
  701. package/guards/permission/src/guards/index.d.ts +0 -1
  702. package/guards/permission/src/guards/permission.guard.d.ts +0 -13
  703. package/guards/permission/src/services/index.d.ts +0 -1
  704. package/guards/permission/src/services/permission.service.d.ts +0 -15
  705. package/modules/oidc/dynamic-sts.loader.d.ts +0 -11
  706. package/modules/oidc/index.d.ts +0 -2
  707. package/modules/oidc/oidc.configuration.d.ts +0 -11
  708. package/modules/oidc/oidc.module.d.ts +0 -14
  709. package/services/firebase/index.d.ts +0 -2
  710. package/services/firebase/src/firebase.model.d.ts +0 -8
  711. package/services/firebase/src/firebase.service.d.ts +0 -14
  712. /package/components/{anchor-v2 → anchor}/src/index.d.ts +0 -0
  713. /package/components/{workflow → form-generic}/index.d.ts +0 -0
  714. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-expression/attribute-expression.component.d.ts +0 -0
  715. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-input/attribute-input.component.d.ts +0 -0
  716. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-input-number/attribute-input-number.component.d.ts +0 -0
  717. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-parameter/attribute-parameter.component.d.ts +0 -0
  718. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-select/attribute-select.component.d.ts +0 -0
  719. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-selection/attribute-selection.component.d.ts +0 -0
  720. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-selection/components/build-queries/build-queries.component.d.ts +0 -0
  721. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-selection/components/build-variables/build-variables.component.d.ts +0 -0
  722. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-switch/attribute-switch.component.d.ts +0 -0
  723. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-textarea/attribute-textarea.component.d.ts +0 -0
  724. /package/components/{workflow → form-generic}/src/components/form-builder/components/checkbox/attribute/checkbox-attribute.component.d.ts +0 -0
  725. /package/components/{workflow → form-generic}/src/components/form-builder/components/checkbox/control/checkbox-control.component.d.ts +0 -0
  726. /package/components/{workflow → form-generic}/src/components/form-builder/components/checkbox/index.d.ts +0 -0
  727. /package/components/{workflow → form-generic}/src/components/form-builder/components/chip-calendar/attribute/chip-calendar-attribute.component.d.ts +0 -0
  728. /package/components/{workflow → form-generic}/src/components/form-builder/components/chip-calendar/control/chip-calendar-control.component.d.ts +0 -0
  729. /package/components/{workflow → form-generic}/src/components/form-builder/components/chip-calendar/index.d.ts +0 -0
  730. /package/components/{workflow → form-generic}/src/components/form-builder/components/chip-string/attribute/chip-string-attribute.component.d.ts +0 -0
  731. /package/components/{workflow → form-generic}/src/components/form-builder/components/chip-string/control/chip-string-control.component.d.ts +0 -0
  732. /package/components/{workflow → form-generic}/src/components/form-builder/components/chip-string/index.d.ts +0 -0
  733. /package/components/{workflow → form-generic}/src/components/form-builder/components/datetime/attribute/datetime-attribute.component.d.ts +0 -0
  734. /package/components/{workflow → form-generic}/src/components/form-builder/components/datetime/control/datetime-control.component.d.ts +0 -0
  735. /package/components/{workflow → form-generic}/src/components/form-builder/components/datetime/index.d.ts +0 -0
  736. /package/components/{workflow → form-generic}/src/components/form-builder/components/html/attribute/components/build-queries/build-queries.component.d.ts +0 -0
  737. /package/components/{workflow → form-generic}/src/components/form-builder/components/html/attribute/html-attribute.component.d.ts +0 -0
  738. /package/components/{workflow → form-generic}/src/components/form-builder/components/html/control/html-control.component.d.ts +0 -0
  739. /package/components/{workflow → form-generic}/src/components/form-builder/components/html/index.d.ts +0 -0
  740. /package/components/{workflow → form-generic}/src/components/form-builder/components/number/attribute/number-attribute.component.d.ts +0 -0
  741. /package/components/{workflow → form-generic}/src/components/form-builder/components/number/control/number-control.component.d.ts +0 -0
  742. /package/components/{workflow → form-generic}/src/components/form-builder/components/number/index.d.ts +0 -0
  743. /package/components/{workflow → form-generic}/src/components/form-builder/components/radio/attribute/radio-attribute.component.d.ts +0 -0
  744. /package/components/{workflow → form-generic}/src/components/form-builder/components/radio/control/radio-control.component.d.ts +0 -0
  745. /package/components/{workflow → form-generic}/src/components/form-builder/components/radio/index.d.ts +0 -0
  746. /package/components/{workflow → form-generic}/src/components/form-builder/components/select/attribute/select-attribute.component.d.ts +0 -0
  747. /package/components/{workflow → form-generic}/src/components/form-builder/components/select/control/select-control.component.d.ts +0 -0
  748. /package/components/{workflow → form-generic}/src/components/form-builder/components/select/index.d.ts +0 -0
  749. /package/components/{workflow → form-generic}/src/components/form-builder/components/table/attribute/table-attribute.component.d.ts +0 -0
  750. /package/components/{workflow → form-generic}/src/components/form-builder/components/table/index.d.ts +0 -0
  751. /package/components/{workflow → form-generic}/src/components/form-builder/components/textarea/attribute/textarea-attribute.component.d.ts +0 -0
  752. /package/components/{workflow → form-generic}/src/components/form-builder/components/textarea/control/textarea-control.component.d.ts +0 -0
  753. /package/components/{workflow → form-generic}/src/components/form-builder/components/textarea/index.d.ts +0 -0
  754. /package/components/{workflow → form-generic}/src/components/form-builder/components/textfield/attribute/textfield-attribute.component.d.ts +0 -0
  755. /package/components/{workflow → form-generic}/src/components/form-builder/components/textfield/control/textfield-control.component.d.ts +0 -0
  756. /package/components/{workflow → form-generic}/src/components/form-builder/components/textfield/index.d.ts +0 -0
  757. /package/components/{workflow → form-generic}/src/components/form-builder/components/upload/attribute/upload-attribute.component.d.ts +0 -0
  758. /package/components/{workflow → form-generic}/src/components/form-builder/components/upload/control/upload-control.component.d.ts +0 -0
  759. /package/components/{workflow → form-generic}/src/components/form-builder/components/upload/index.d.ts +0 -0
  760. /package/components/{workflow → form-generic}/src/components/form-builder/services/builder.service.d.ts +0 -0
  761. /package/components/{workflow → form-generic}/src/components/form-builder/services/index.d.ts +0 -0
  762. /package/components/{workflow → form-generic}/src/components/form-render/components/index.d.ts +0 -0
  763. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/chip-calendar/chip-calendar.component.d.ts +0 -0
  764. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/chip-string/chip-string.component.d.ts +0 -0
  765. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/datetime/datetime.component.d.ts +0 -0
  766. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/html/html.component.d.ts +0 -0
  767. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/index.d.ts +0 -0
  768. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/number/number.component.d.ts +0 -0
  769. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/radio/radio.component.d.ts +0 -0
  770. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/select/select.component.d.ts +0 -0
  771. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/table/table.component.d.ts +0 -0
  772. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/textarea/textarea.component.d.ts +0 -0
  773. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/textfield/textfield.component.d.ts +0 -0
  774. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/upload/upload.component.d.ts +0 -0
  775. /package/components/{workflow → form-generic}/src/components/form-render/components/item/item.component.d.ts +0 -0
  776. /package/components/{workflow → form-generic}/src/components/form-render/components/variable/variable.component.d.ts +0 -0
  777. /package/components/{workflow → form-generic}/src/components/index.d.ts +0 -0
  778. /package/components/{workflow → form-generic}/src/configurations/form.configuration.d.ts +0 -0
  779. /package/components/{workflow → form-generic}/src/models/form-generic-definition-html.model.d.ts +0 -0
  780. /package/components/{workflow → form-generic}/src/models/form-generic-definition-selection.model.d.ts +0 -0
  781. /package/components/{workflow → form-generic}/src/models/form-generic-definition-table.model.d.ts +0 -0
  782. /package/components/{workflow → form-generic}/src/models/form-generic-template.model.d.ts +0 -0
  783. /package/components/{workflow → form-generic}/src/models/form-generic-validation.model.d.ts +0 -0
  784. /package/components/{workflow → form-generic}/src/models/form-generic.model.d.ts +0 -0
  785. /package/components/{workflow → form-generic}/src/models/form-render/form-render-args.model.d.ts +0 -0
  786. /package/components/{workflow → form-generic}/src/models/form-render/form-render-entity.model.d.ts +0 -0
  787. /package/components/{workflow → form-generic}/src/models/form-render/index.d.ts +0 -0
  788. /package/components/{workflow → form-generic}/src/pipes/component-viewed.pipe.d.ts +0 -0
  789. /package/components/{workflow → form-generic}/src/pipes/expression-feel.pipe.d.ts +0 -0
  790. /package/components/{workflow → form-generic}/src/pipes/expression-query.pipe.d.ts +0 -0
  791. /package/components/{workflow → form-generic}/src/pipes/expression-view.pipe.d.ts +0 -0
  792. /package/components/{workflow → form-generic}/src/pipes/hyperlink.pipe.d.ts +0 -0
  793. /package/components/{workflow → form-generic}/src/pipes/index.d.ts +0 -0
  794. /package/components/{workflow → form-generic}/src/pipes/when-expression.pipe.d.ts +0 -0
  795. /package/components/{workflow → form-generic}/src/services/form-render.service.d.ts +0 -0
  796. /package/components/{workflow → form-generic}/src/services/index.d.ts +0 -0
@@ -1,778 +1,63 @@
1
- /* eslint-disable no-useless-escape */
1
+ import { ValidationUtilities, StringUtilities as StringUtilities$1, ColorUtilities } from '@sdcorejs/utils/fns';
2
+ export { ArrayUtilities, BrowserUtilities, ColorUtilities, DateUtilities, NumberUtilities, Utilities, ValidationUtilities } from '@sdcorejs/utils/fns';
3
+
2
4
  /* eslint-disable @typescript-eslint/no-explicit-any */
3
- // declare global {
4
- // interface StringConstructor {
5
- // isValidEmail(value: any): boolean;
6
- // isValidPhone(value: any): boolean;
7
- // isValidCode(value: any): boolean;
8
- // changeAliasLowerCase(alias: any): string;
9
- // aliasIncludes(alias: any, searchText: any): boolean;
10
- // format(template: string, ...arr: any[]): string;
11
- // templateToDisplay(template: string, entity: any): string; // Convert theo format ${key}
12
- // encrypt(obj: any): string;
13
- // decrypt(encripted: string): any;
14
- // isNullOrEmpty(value: any): boolean;
15
- // isNullOrWhiteSpace(value: any): boolean;
16
- // }
17
- // }
18
- const REGEX_EMAIL = '^(([^<>()[].,;:s@"]+(.[^<>()[].,;:s@"]+)*)|(".+"))@(([^<>()[].,;:s@"]+.)+[^<>()[].,;:s@"]{2,})$';
19
- const REGEX_PHONE = '^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-s./0-9]*$';
20
- const REGEX_PHONE_VN = '^(?:+84|0|84)(3[2-9]|5[2689]|7[0-9]|8[1-9]|9[0-9])d{7}$';
21
- const isValidEmail = (value) => {
22
- if (!value) {
23
- return false;
24
- }
25
- const re = /^(([^<>()\[\]\.,;:\s@\"]+(\.[^<>()\[\]\.,;:\s@\"]+)*)|(\".+\"))@(([^<>()[\]\.,;:\s@\"]+\.)+[^<>()[\]\.,;:\s@\"]{2,})$/i;
26
- return re.test(value);
27
- };
28
- const isValidPhone = (value) => {
29
- if (!value) {
30
- return false;
31
- }
32
- const re = /^[+]*[(]{0,1}[0-9]{1,4}[)]{0,1}[-\s\./0-9]*$/;
33
- return re.test(value);
34
- };
35
- const isValidCode = (value) => {
36
- if (!value) {
37
- return false;
38
- }
39
- const re = /^[a-zA-Z0-9\@\_\-]{2,20}$/;
40
- return re.test(value);
41
- };
42
- const isNullOrEmpty = (value) => {
43
- return value === undefined || value === null || value === '';
44
- };
45
- const isNullOrWhiteSpace = (value) => {
46
- return value === undefined || value === null || typeof value !== 'string' || value.match(/^ *$/) !== null;
47
- };
48
- const changeAliasLowerCase$1 = (alias) => {
49
- let str = alias?.toString() ?? '';
50
- str = str.toString().toLowerCase();
51
- str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, 'a');
52
- str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, 'e');
53
- str = str.replace(/ì|í|ị|ỉ|ĩ/g, 'i');
54
- str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, 'o');
55
- str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, 'u');
56
- str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, 'y');
57
- str = str.replace(/đ/g, 'd');
58
- str = str.replace(/!|@|%|\^|\*|\(|\)|\+|\=|\<|\>|\?|\/|,|\.|\:|\;|\'|\"|\&|\#|\[|\]|~|\$|_|`|-|{|}|\||\\/g, ' ');
59
- str = str.replace(/ + /g, ' ');
60
- str = str.trim();
61
- return str;
62
- };
63
- const aliasIncludes = (alias, searchText) => {
64
- return changeAliasLowerCase$1(alias).includes(changeAliasLowerCase$1(searchText));
65
- };
66
- const format = (template, ...arr) => {
67
- for (let i = 0; i < arr.length; i++) {
68
- const regexp = new RegExp(`\\{${i}\\}`, 'gi');
69
- template = template.replace(regexp, arr[i]);
70
- }
71
- return template;
72
- };
73
- // Convert: `[${code}] ${name}` => `[Mã] Tên`;
74
- const templateToDisplay = (template, entity) => {
75
- if (!template) {
76
- return template;
77
- }
78
- const regex = /\$\{([A-Za-z0-9._-]*)\}/g;
79
- const matches = template.match(regex) || [];
80
- for (const match of matches) {
81
- const key = match.slice(2, match.length - 1);
82
- if (key) {
83
- template = template.replace(match, entity?.[key] || '');
84
- }
85
- }
86
- return template;
87
- };
88
- // Convert: `${name} === "Tên"` => true/false;
89
- const parseExpression = (template, entity) => {
90
- if (!template) {
91
- return undefined;
92
- }
93
- const regex = /\$\{([A-Za-z0-9._-]*)\}/g;
94
- const matches = template.match(regex) || [];
95
- for (const match of matches) {
96
- const key = match.slice(2, match.length - 1);
97
- if (key) {
98
- // Xử lý trong trường hợp key có định dạng a.b.c ...
99
- let val = entity;
100
- const strs = key.split('.');
101
- for (const str of strs) {
102
- val = val?.[str];
103
- }
104
- if (typeof val === 'string') {
105
- // Nếu là chuỗi thì thêm dấu nháy khi replace giá trị để so sánh, ví dụ 'a' === 'a'
106
- // Nếu là số hay boolean thì không cần, ví dụ 121 === 121
107
- template = template.replace(match, `'${val}'`);
108
- }
109
- else {
110
- // Nếu là object/array thì phải dùng JSON.stringify
111
- if (typeof val === 'object' && !!val) {
112
- template = template.replace(match, JSON.stringify(val) ?? `undefined`);
113
- }
114
- else {
115
- template = template.replace(match, val ?? `undefined`);
116
- }
117
- }
118
- }
119
- }
120
- if (!template) {
121
- return undefined;
122
- }
123
- try {
124
- const result = new Function('return ' + template)();
125
- return result;
126
- }
127
- catch (ex) {
128
- console.error(ex);
129
- return undefined;
130
- }
131
- };
132
- const SALT = 'cb9f4b2a-d26c-4787-a66e-e7130ee00f95';
133
- const encrypt = (obj) => {
134
- obj = JSON.stringify(obj).split('');
135
- for (let i = 0, l = obj.length; i < l; i++)
136
- if (obj[i] == '{')
137
- obj[i] = '}';
138
- else if (obj[i] == '}')
139
- obj[i] = '{';
140
- return encodeURI(SALT + obj.join(''));
141
- };
142
- const decrypt = (encripted) => {
143
- encripted = decodeURI(encripted);
144
- if (SALT && encripted.indexOf(SALT) != 0)
145
- throw new Error('object cannot be decrypted');
146
- const strs = encripted.substring(SALT.length).split('');
147
- for (let i = 0, l = strs.length; i < l; i++)
148
- if (strs[i] == '{')
149
- strs[i] = '}';
150
- else if (encripted[i] == '}')
151
- strs[i] = '{';
152
- return JSON.parse(strs.join(''));
153
- };
154
- // Conver "Đội Kỹ Thuật" thành "doi_ky_thuat"
155
- const convertToSnakeCaseCode = (name) => {
156
- if (typeof name !== 'string') {
157
- throw new Error('Invalid name');
158
- }
159
- return name
160
- .normalize('NFD') // Tách dấu
161
- .replace(/[\u0300-\u036f]/g, '') // Xóa các dấu vừa tách
162
- .replace(/[đĐ]/g, 'd') // Quan trọng: Xử lý chữ đ/Đ thành d
163
- .trim()
164
- .replace(/[^a-zA-Z0-9]+/g, '_') // Thay ký tự đặc biệt bằng _
165
- .replace(/^_+|_+$/g, '') // Xóa _ ở đầu/cuối
166
- .toLowerCase(); // Chuyển thành chữ thường: doi_ky_thuat
167
- };
168
- /**
169
- * Tạo code duy nhất, tự động thêm suffix _n nếu bị trùng
170
- * @param name Tên cần convert
171
- * @param existingCodes Danh sách các code đã tồn tại
172
- */
173
- const generateUniqueCode = (name, existingCodes) => {
174
- // 1. Tạo base code trước
175
- const baseCode = convertToSnakeCaseCode(name);
176
- // 2. Nếu code chưa tồn tại thì trả về luôn
177
- if (!existingCodes.includes(baseCode)) {
178
- return baseCode;
179
- }
180
- // 3. Nếu trùng, bắt đầu loop để tìm index phù hợp
181
- let index = 1;
182
- let newCode = `${baseCode}_${index}`;
183
- while (existingCodes.includes(newCode)) {
184
- index++;
185
- newCode = `${baseCode}_${index}`;
186
- }
187
- return newCode;
188
- };
5
+ // Deprecated wrappers — moved to ValidationUtilities
6
+ const isValidEmail = (value) => ValidationUtilities.isEmail(value);
7
+ const isValidPhone = (value) => ValidationUtilities.isPhone(value);
8
+ const isValidCode = (value) => ValidationUtilities.isCode(value);
189
9
  const StringUtilities = {
190
- REGEX_EMAIL,
191
- REGEX_PHONE,
192
- REGEX_PHONE_VN,
10
+ ...StringUtilities$1,
11
+ // Deprecated aliases for renamed regex constants (renamed in @sdcorejs/utils v1.0.2)
12
+ /** @deprecated Use REGEX_VN_PHONE instead */
13
+ REGEX_PHONE_VN: StringUtilities$1.REGEX_VN_PHONE,
14
+ /** @deprecated Use REGEX_VN_ID instead */
15
+ REGEX_IDVN: StringUtilities$1.REGEX_VN_ID,
16
+ /** @deprecated Use REGEX_VN_ID_OR_PASSPORT instead */
17
+ REGEX_IDVN_OR_PASSPORT: StringUtilities$1.REGEX_VN_ID_OR_PASSPORT,
18
+ // Deprecated validators — moved to ValidationUtilities
19
+ /** @deprecated Use {@link ValidationUtilities.isEmail} instead */
193
20
  isValidEmail,
21
+ /** @deprecated Use {@link ValidationUtilities.isPhone} instead */
194
22
  isValidPhone,
23
+ /** @deprecated Use {@link ValidationUtilities.isCode} instead */
195
24
  isValidCode,
196
- changeAliasLowerCase: changeAliasLowerCase$1,
197
- aliasIncludes,
198
- format,
199
- templateToDisplay,
200
- parseExpression,
201
- encrypt,
202
- decrypt,
203
- isNullOrEmpty,
204
- isNullOrWhiteSpace,
205
- convertToSnakeCaseCode,
206
- generateUniqueCode
207
25
  };
208
26
 
209
- /* eslint-disable @typescript-eslint/no-explicit-any */
210
- // export {};
211
- // declare global {
212
- // interface Array<T = any> {
213
- // search(searchText: string | number, fields?: (string | undefined) | (string | undefined)[], children?: string): T[];
214
- // paging(pageSize: number, page?: number): T[];
215
- // toObject(key: string): Record<string, T>;
216
- // union(key: string, ...args: T[][]): T[];
217
- // distinct(): T[];
218
- // }
219
- // interface ArrayConstructor {
220
- // search<T = any>(items: T[], searchText: string | number, fields?: (string | undefined) | (string | undefined)[]): T[];
221
- // union<T = any>(key: string, ...args: T[][]): T[];
222
- // toObject<T = any>(key: string, items: T[]): Record<string, T>;
223
- // }
224
- // }
225
- const search = (items, searchText, fields, children) => {
226
- if (!searchText?.toString()) {
227
- return items;
228
- }
229
- if (!items?.length) {
230
- return items;
231
- }
232
- if (Array.isArray(fields)) {
233
- const fs = fields.filter(e => e !== undefined && e !== null && e !== '');
234
- if (!fs.length) {
235
- return items.filter(item => item !== undefined && item !== null && StringUtilities.aliasIncludes(item, searchText));
236
- }
237
- return items.filter(item => (item !== undefined && item !== null && fs.some(field => StringUtilities.aliasIncludes(item[field], searchText))) ||
238
- (children && search(item[children], searchText, fields, children)?.length));
239
- }
240
- if (!fields) {
241
- return items.filter(item => item !== undefined && item !== null && StringUtilities.aliasIncludes(item, searchText));
242
- }
243
- return items.filter(item => (item !== undefined && item !== null && StringUtilities.aliasIncludes(item[fields], searchText)) ||
244
- (children && search(item[children], searchText, fields, children)?.length));
245
- };
246
- // Array.prototype.search = function <T = any>(
247
- // searchText: any,
248
- // fields?: (string | undefined) | (string | undefined)[],
249
- // children?: string
250
- // ): T[] {
251
- // // eslint-disable-next-line @typescript-eslint/no-this-alias
252
- // const items: T[] = this;
253
- // return search(items, searchText, fields, children);
254
- // };
255
- // Array.prototype.paging = function <T extends Record<string, any> = any>(pageSize: number, page = 0): T[] {
256
- // // eslint-disable-next-line @typescript-eslint/no-this-alias
257
- // const items: T[] = this;
258
- // return items.filter((_, index) => {
259
- // return index >= page * pageSize && index < (page + 1) * pageSize;
260
- // });
261
- // };
262
- // Array.prototype.toObject = function <T = any>(key: string): Record<string, T> {
263
- // // eslint-disable-next-line @typescript-eslint/no-this-alias
264
- // const items: T[] = this;
265
- // return items
266
- // .filter(item => item !== undefined && item !== null)
267
- // .reduce<Record<string, any>>((obj, item: Record<string, any>) => {
268
- // const objKey = item?.[key]?.toString();
269
- // if (typeof objKey === 'string') {
270
- // obj[objKey] = item;
271
- // }
272
- // return obj;
273
- // }, {});
274
- // };
275
- // Array.prototype.union = function <T = Record<string, any>>(key: string, ...args: T[][]) {
276
- // // eslint-disable-next-line @typescript-eslint/no-this-alias
277
- // let results: T[] = this;
278
- // const filterUnion = <T = any>(val: T, index: number, self: T[]) =>
279
- // val !== undefined && val !== null && self.findIndex(e => (e as any)[key] === (val as any)[key]) === index;
280
- // if (!args?.length) {
281
- // return results.filter(filterUnion);
282
- // }
283
- // for (const arg of args) {
284
- // if (Array.isArray(arg)) {
285
- // results = [...results, ...arg].filter(filterUnion);
286
- // }
287
- // }
288
- // return results;
289
- // };
290
- // Array.prototype.distinct = function () {
291
- // if (Array.isArray(this)) {
292
- // return [...new Set(this)];
293
- // }
294
- // return this;
295
- // };
296
- const union = (key, ...args) => {
297
- let results = [];
298
- const filterUnion = (val, index, self) => val !== undefined && val !== null && self.findIndex(e => e[key] === val[key]) === index;
299
- if (!args?.length) {
300
- return [];
301
- }
302
- for (const arg of args) {
303
- if (Array.isArray(arg)) {
304
- results = [...results, ...arg].filter(filterUnion);
305
- }
306
- }
307
- return results;
308
- };
309
- const toObject = (key, items) => {
310
- if (!Array.isArray(items)) {
311
- return {};
312
- }
313
- return items
314
- .filter(item => item !== undefined && item !== null)
315
- .reduce((obj, item) => {
316
- const objKey = item?.[key]?.toString();
317
- if (typeof objKey === 'string') {
318
- obj[objKey] = item;
319
- }
320
- return obj;
321
- }, {});
322
- };
323
- const distinct = (items) => {
324
- if (Array.isArray(items)) {
325
- return [...new Set(items)];
326
- }
327
- return [];
328
- };
329
- const paging = (items, pageSize, page = 0) => {
330
- if (!Array.isArray(items)) {
331
- return [];
332
- }
333
- return items.filter((_, index) => {
334
- return index >= page * pageSize && index < (page + 1) * pageSize;
335
- });
336
- };
337
- const ArrayUtilities = {
338
- search,
339
- union,
340
- toObject,
341
- distinct,
342
- paging,
343
- };
344
-
345
- /* eslint-disable @typescript-eslint/no-explicit-any */
346
- // export {};
347
- // declare global {
348
- // interface NumberConstructor {
349
- // toVNCurrency(value: any): string | null;
350
- // toISO(value: any): string | null;
351
- // isNumber(value: any): boolean;
352
- // isPositiveInteger(value: any): boolean;
353
- // isPositiveNumber(value: any): boolean;
354
- // round(value: any, digits?: number): number | null;
355
- // }
356
- // }
357
- const toVNCurrency = (value) => {
358
- value = (value ?? '').toString().replace(/,/g, '');
359
- if (!value) {
360
- return null;
361
- }
362
- const val = +value;
363
- if (!Number.isNaN(val)) {
364
- return val.toLocaleString('vi-VN', { maximumFractionDigits: 10 });
365
- }
366
- return null;
367
- };
368
- const toVN = (value) => {
369
- value = (value ?? '').toString().replace(/,/g, '');
370
- if (!value) {
371
- return null;
372
- }
373
- const val = +value;
374
- if (!Number.isNaN(val)) {
375
- return val.toLocaleString('vi-VN', { maximumFractionDigits: 10 });
376
- }
377
- return null;
378
- };
379
- const toISO = (value) => {
380
- value = (value ?? '').toString().replace(/,/g, '');
381
- if (!value) {
382
- return null;
383
- }
384
- const val = +value;
385
- if (!Number.isNaN(val)) {
386
- return val.toLocaleString('en-US', { maximumFractionDigits: 10 });
387
- }
388
- return null;
389
- };
390
- const isPositiveInteger = (value) => {
391
- if (!value) {
392
- return false;
393
- }
394
- const regex = /^([0-9]*)$/;
395
- return regex.test(value) && +value > 0;
396
- };
397
- const isPositiveNumber = (value) => {
398
- if (!value) {
399
- return false;
400
- }
401
- const regex = /^([0-9]*)(\.[0-9]+$){0,1}$/;
402
- return regex.test(value) && +value > 0;
403
- };
404
- const isNumber = (value) => {
405
- if (value === undefined || value === null || value === '') {
406
- return false;
407
- }
408
- return !Number.isNaN(+value);
409
- };
410
- const round = (value, digits) => {
411
- digits = digits ?? 2;
412
- if (!NumberUtilities.isNumber(value)) {
413
- return null;
414
- }
415
- const val = Math.pow(10, digits);
416
- return Math.round(value * val) / val;
417
- };
418
- const NumberUtilities = {
419
- toVNCurrency,
420
- toVN,
421
- toISO,
422
- isPositiveInteger,
423
- isPositiveNumber,
424
- isNumber,
425
- round,
426
- };
427
-
428
- /* eslint-disable @typescript-eslint/no-explicit-any */
429
- // export {};
430
- // declare global {
431
- // interface Date {
432
- // begin(): Date;
433
- // end(): Date;
434
- // addMiliseconds(miliseconds: number): Date;
435
- // addHours(hours: number): Date;
436
- // addDays(days: number): Date;
437
- // addMonths(months: number): Date;
438
- // toFormat(format: string): string;
439
- // }
440
- // interface DateConstructor {
441
- // equal(date1: any, date2: any): boolean;
442
- // dayDiff(date1: any, date2: any): number | null;
443
- // monthDiff(date1: any, date2: any): number | null;
444
- // yearDiff(date1: any, date2: any): number | null;
445
- // age(date1: any, date2: any): number | null;
446
- // parseFrom(value: any, format: string): Date | null;
447
- // isDate(value: any): boolean;
448
- // toFormat(value: any, format: string): string;
449
- // addMiliseconds(value: any, miliseconds: number): Date | null;
450
- // addHours(value: any, hours: number): Date | null;
451
- // addDays(value: any, days: number): Date | null;
452
- // addMonths(value: any, months: number): Date | null;
453
- // begin(value: any): Date | null;
454
- // end(value: any): Date | null;
455
- // timeDifference(previous: any, current?: any): string;
456
- // }
457
- // }
458
- const isDate = (value) => {
459
- if (!value) {
460
- return false;
461
- }
462
- if (typeof value === 'string') {
463
- // Kiểm tra regex
464
- if (value.length < 8) {
465
- return false;
466
- }
467
- else {
468
- const date1 = value.substring(0, 10); // yyyy/MM/dd
469
- const date2 = value.substring(0, 9); // yyyy/M/dd, yyyy/MM/d
470
- const date3 = value.substring(0, 8); // yyyy/M/d
471
- const regex1 = /^(0[1-9]|[1-9]|1[0-2])(-|\/)(0[1-9]|[1-9]|[12][0-9]|3[01])(-|\/)(\d{4})$/; // MM/dd/yyyy, MM-dd-yyyy
472
- const regex2 = /^(\d{4})(-|\/)(0[1-9]|[1-9]|1[0-2])(-|\/)(0[1-9]|[1-9]|[12][0-9]|3[01])$/; // yyyy/MM/dd, yyyy-MM-dd
473
- const result = regex1.test(date1) || regex2.test(date1) || regex1.test(date2) || regex2.test(date2) || regex1.test(date3) || regex2.test(date3);
474
- if (result) {
475
- const date = new Date(value);
476
- return !isNaN(date.getTime());
477
- }
478
- else {
479
- return false;
480
- }
481
- }
482
- }
483
- else {
484
- const date = new Date(value);
485
- return !isNaN(date.getTime());
486
- }
487
- };
488
- // const toFormatBackup = (value: any, format: string): string => {
489
- // if (!isDate(value)) {
490
- // return '';
491
- // }
492
- // const date: Date = new Date(value);
493
- // let result = format;
494
- // result = result.replace('yyyy', date.getFullYear().toString());
495
- // result = result.replace('MM', (date.getMonth() + 1).toString().padStart(2, '0'));
496
- // result = result.replace('dd', date.getDate().toString().padStart(2, '0'));
497
- // result = result.replace('HH', date.getHours().toString().padStart(2, '0'));
498
- // result = result.replace('mm', date.getMinutes().toString().padStart(2, '0'));
499
- // result = result.replace('ss', date.getSeconds().toString().padStart(2, '0'));
500
- // return result;
501
- // };
502
- const toFormat = (value, format) => {
503
- if (!isDate(value)) {
504
- return '';
505
- }
506
- const isDatePart = (type) => {
507
- return type === 'year' || type === 'month' || type === 'day' || type === 'hour' || type === 'minute' || type === 'second';
508
- };
509
- const date = new Date(value);
510
- const timeZone = new Intl.DateTimeFormat().resolvedOptions().timeZone;
511
- const parts = new Intl.DateTimeFormat('en-GB', {
512
- timeZone,
513
- year: 'numeric',
514
- month: '2-digit',
515
- day: '2-digit',
516
- hour: '2-digit',
517
- minute: '2-digit',
518
- second: '2-digit',
519
- hour12: false,
520
- }).formatToParts(date);
521
- const map = {};
522
- parts.forEach(part => {
523
- if (isDatePart(part.type)) {
524
- map[part.type] = part.value;
525
- }
526
- });
527
- return format
528
- .replace('yyyy', map.year ?? '')
529
- .replace('MM', map.month ?? '')
530
- .replace('dd', map.day ?? '')
531
- .replace('HH', map.hour ?? '')
532
- .replace('mm', map.minute ?? '')
533
- .replace('ss', map.second ?? '');
534
- };
535
- const addDays = (value, days) => {
536
- if (!isDate(value)) {
537
- return null;
538
- }
539
- const date = new Date(value);
540
- date.setDate(date.getDate() + days);
541
- return date;
542
- };
543
- const addMiliseconds = (value, miliseconds) => {
544
- if (!isDate(value)) {
545
- return null;
546
- }
547
- const date = new Date(value);
548
- date.setMilliseconds(date.getMilliseconds() + miliseconds);
549
- return date;
550
- };
551
- const begin = (value) => {
552
- if (!isDate(value)) {
553
- return null;
554
- }
555
- return new Date(toFormat(value, 'MM/dd/yyyy'));
556
- };
557
- const end = (value) => {
558
- if (!isDate(value)) {
559
- return null;
560
- }
561
- return addMiliseconds(begin(addDays(value, 1)), -1);
562
- };
563
- const equal = (date1, date2) => {
564
- if (!isDate(date1) && !isDate(date2)) {
565
- return true;
566
- }
567
- if (!isDate(date1) || !isDate(date2)) {
568
- return false;
569
- }
570
- return new Date(date1).getTime() === new Date(date2).getTime();
571
- };
572
- const dayDiff = (date1, date2) => {
573
- if (!isDate(date1) || !isDate(date2)) {
574
- return null;
575
- }
576
- const diff = new Date(date2).getTime() - new Date(date1).getTime();
577
- return Math.floor(diff / (24 * 3600 * 1000));
578
- };
579
- const monthDiff = (date1, date2) => {
580
- if (!isDate(date1) || !isDate(date2)) {
581
- return null;
582
- }
583
- const d1Y = date1.getFullYear();
584
- const d2Y = date2.getFullYear();
585
- const d1M = date2.getMonth();
586
- const d2M = date2.getMonth();
587
- return d2M + 12 * d2Y - (d1M + 12 * d1Y);
588
- };
589
- const yearDiff = (date1, date2) => {
590
- if (!isDate(date1) || !isDate(date2)) {
591
- return null;
592
- }
593
- return new Date(date2).getFullYear() - new Date(date1).getFullYear();
594
- };
595
- const age = (date1, date2) => {
596
- const diff = monthDiff(date1, date2);
597
- if (!diff) {
598
- return null;
599
- }
600
- return NumberUtilities.round(diff / 12);
601
- };
602
- const parseFrom = (value, format) => {
603
- if (!value) {
604
- return null;
605
- }
606
- if (!format) {
607
- return null;
608
- }
609
- value = value.toString();
610
- const dmy = format.indexOf('dd') > -1 && format.indexOf('MM') > -1 && format.indexOf('yyyy') > -1;
611
- const hms = format.indexOf('HH') > -1 || format.indexOf('mm') > -1 || format.indexOf('ss') > -1;
612
- let strDate = '';
613
- if (dmy) {
614
- const dd = value.substr(format.indexOf('dd'), 'dd'.length);
615
- const MM = value.substr(format.indexOf('MM'), 'MM'.length);
616
- const yyyy = value.substr(format.indexOf('yyyy'), 'yyyy'.length);
617
- if (+yyyy > 0 && +MM > 0 && +dd > 0) {
618
- strDate += `${MM}/${dd}/${yyyy}`;
619
- }
620
- else {
621
- return null;
622
- }
623
- }
624
- else {
625
- const today = new Date();
626
- const yyyy = today.getFullYear().toString();
627
- const MM = (today.getMonth() + 1).toString().padStart(2, '0');
628
- const dd = today.getDate().toString().padStart(2, '0');
629
- strDate += `${MM}/${dd}/${yyyy}`;
630
- }
631
- if (hms) {
632
- const HH = format.indexOf('HH') > -1 ? value.substr(format.indexOf('HH'), 'HH'.length) : '00';
633
- const mm = format.indexOf('mm') > -1 ? value.substr(format.indexOf('mm'), 'mm'.length) : '00';
634
- const ss = format.indexOf('ss') > -1 ? value.substr(format.indexOf('ss'), 'ss'.length) : '00';
635
- strDate += ` ${HH || '00'}:${mm || '00'}:${ss || '00'}`;
636
- }
637
- if (!isDate(strDate)) {
638
- return null;
639
- }
640
- return new Date(strDate);
641
- };
642
- const addHours = (value, hours) => {
643
- if (!isDate(value)) {
644
- return null;
645
- }
646
- const date = new Date(value);
647
- date.setHours(date.getHours() + hours);
648
- return date;
649
- };
650
- const addMonths = (value, months) => {
651
- if (!isDate(value)) {
652
- return null;
653
- }
654
- const date = new Date(value);
655
- date.setMonth(date.getMonth() + months);
656
- return date;
657
- };
658
- const timeDifference = function (previous, current = new Date()) {
659
- if (!isDate(previous)) {
660
- return '';
661
- }
662
- if (!isDate(current)) {
663
- return '';
664
- }
665
- const from = new Date(previous);
666
- const to = new Date(current);
667
- const msPerMinute = 60 * 1000;
668
- const msPerHour = msPerMinute * 60;
669
- const msPerDay = msPerHour * 24;
670
- const msPerMonth = msPerDay * 30;
671
- const msPerYear = msPerDay * 365;
672
- const elapsed = to.getTime() - from.getTime();
673
- if (elapsed < msPerMinute) {
674
- return `${Math.round(elapsed / 1000)} seconds ago`;
675
- }
676
- if (elapsed < msPerHour) {
677
- return `${Math.round(elapsed / msPerMinute)} minutes ago`;
678
- }
679
- if (elapsed < msPerDay) {
680
- return `${Math.round(elapsed / msPerHour)} hours ago`;
681
- }
682
- if (elapsed < msPerMonth) {
683
- return `${Math.round(elapsed / msPerDay)} days ago`;
684
- }
685
- if (elapsed < msPerYear) {
686
- return `${Math.round(elapsed / msPerMonth)} months ago`;
27
+ // Hardcoded i18n cho upload utility — pure function nên không inject() được I18nService.
28
+ // Đọc lang trực tiếp từ localStorage (cùng key với I18nService: 'sd-core.language').
29
+ // Khi I18nService chuyển sang reload-on-change model, lang ở đây luôn đồng bộ với UI.
30
+ const SD_UPLOAD_MESSAGES = {
31
+ vi: {
32
+ 'invalid-format': '[{name}] File tải lên không đúng định dạng. Vui lòng chọn lại',
33
+ 'invalid-size': '[{name}] Kích thước file không hợp lệ. Vui lòng chọn một file khác',
34
+ },
35
+ en: {
36
+ 'invalid-format': '[{name}] Invalid file format. Please select again',
37
+ 'invalid-size': '[{name}] Invalid file size. Please choose a different file',
38
+ },
39
+ ja: {
40
+ 'invalid-format': '[{name}] ファイル形式が正しくありません。もう一度選択してください',
41
+ 'invalid-size': '[{name}] ファイルサイズが正しくありません。別のファイルを選択してください',
42
+ },
43
+ ko: {
44
+ 'invalid-format': '[{name}] 파일 형식이 올바르지 않습니다. 다시 선택해 주세요',
45
+ 'invalid-size': '[{name}] 파일 크기가 올바르지 않습니다. 다른 파일을 선택해 주세요',
46
+ },
47
+ zh: {
48
+ 'invalid-format': '[{name}] 文件格式不正确,请重新选择',
49
+ 'invalid-size': '[{name}] 文件大小不符合要求,请选择其他文件',
50
+ },
51
+ };
52
+ const getSdUploadLang = () => {
53
+ try {
54
+ const stored = localStorage.getItem('sd-core.language');
55
+ if (stored && stored in SD_UPLOAD_MESSAGES)
56
+ return stored;
687
57
  }
688
- return `${Math.round(elapsed / msPerYear)} years ago`;
689
- };
690
- // Date.prototype.begin = function () {
691
- // return new Date(this.toFormat('MM/dd/yyyy'));
692
- // };
693
- // Date.prototype.end = function () {
694
- // // eslint-disable-next-line @typescript-eslint/no-this-alias
695
- // const date: Date = this;
696
- // return date.addDays(1).begin().addMiliseconds(-1);
697
- // };
698
- // Date.prototype.addMiliseconds = function (miliseconds: number) {
699
- // // eslint-disable-next-line @typescript-eslint/no-this-alias
700
- // const date: Date = this;
701
- // date.setMilliseconds(date.getMilliseconds() + miliseconds);
702
- // return date;
703
- // };
704
- // Date.prototype.addHours = function (hours: number) {
705
- // // eslint-disable-next-line @typescript-eslint/no-this-alias
706
- // const date: Date = this;
707
- // date.setHours(date.getHours() + hours);
708
- // return date;
709
- // };
710
- // Date.prototype.addDays = function (days: number) {
711
- // // eslint-disable-next-line @typescript-eslint/no-this-alias
712
- // const date: Date = this;
713
- // date.setDate(date.getDate() + days);
714
- // return date;
715
- // };
716
- // Date.prototype.addMonths = function (months: number) {
717
- // // eslint-disable-next-line @typescript-eslint/no-this-alias
718
- // const date: Date = this;
719
- // date.setMonth(date.getMonth() + months);
720
- // return date;
721
- // };
722
- // Date.prototype.toFormat = function (format: string) {
723
- // // eslint-disable-next-line @typescript-eslint/no-this-alias
724
- // const date: Date = this;
725
- // let result = format;
726
- // result = result.replace('yyyy', date.getFullYear().toString());
727
- // result = result.replace('MM', (date.getMonth() + 1).toString().padStart(2, '0'));
728
- // result = result.replace('dd', date.getDate().toString().padStart(2, '0'));
729
- // result = result.replace('HH', date.getHours().toString().padStart(2, '0'));
730
- // result = result.replace('mm', date.getMinutes().toString().padStart(2, '0'));
731
- // result = result.replace('ss', date.getSeconds().toString().padStart(2, '0'));
732
- // return result;
733
- // };
734
- const DateUtilities = {
735
- equal,
736
- dayDiff,
737
- monthDiff,
738
- yearDiff,
739
- age,
740
- parseFrom,
741
- isDate,
742
- toFormat,
743
- addMiliseconds,
744
- addHours,
745
- addDays,
746
- addMonths,
747
- begin,
748
- end,
749
- timeDifference,
58
+ catch { /* ignore */ }
59
+ return 'vi';
750
60
  };
751
-
752
- // interface SdUtilityContructor {
753
- // upload: (option?: {
754
- // extensions?: string[];
755
- // maxSizeInMb?: number;
756
- // validator?: (fileName: string) => string;
757
- // multiple?: boolean;
758
- // }) => Promise<File | File[] | null>;
759
- // download: (filePath: string, fileName?: string) => void;
760
- // downloadBlob: (blob: Blob, fileName?: string) => void;
761
- // changeAliasLowerCase: (alias: string) => string;
762
- // copyToClipboard: (text: string) => void;
763
- // allWithPaging: <T = any>(
764
- // func: (
765
- // pageSize: number,
766
- // pageNumber: number
767
- // ) => Promise<{
768
- // items: T[];
769
- // total: number;
770
- // }>,
771
- // defaultPageSize?: number
772
- // ) => Promise<T[]>;
773
- // isIncognito: () => Promise<boolean>;
774
- // isMobile: () => boolean;
775
- // }
776
61
  const upload = (option) => {
777
62
  const uploadId = 'U1e09c1c0-b647-437e-995e-d7a1a1b60550';
778
63
  const promise = new Promise((resolve, reject) => {
@@ -797,24 +82,32 @@ const upload = (option) => {
797
82
  element.addEventListener('change', (evt) => {
798
83
  try {
799
84
  const target = evt.target;
85
+ // Hardcode i18n cho upload utility — pure function nên không inject() được I18nService.
86
+ // Đọc lang trực tiếp từ localStorage (cùng key với I18nService: 'sd-core.language').
87
+ // Throw plain Error(translatedText) để consumer không cần xử lý đặc biệt.
88
+ const throwUploadError = (msgKey, name) => {
89
+ const lang = getSdUploadLang();
90
+ const template = SD_UPLOAD_MESSAGES[lang][msgKey] ?? SD_UPLOAD_MESSAGES.vi[msgKey];
91
+ throw new Error(template.replace('{name}', name));
92
+ };
800
93
  if (option?.multiple) {
801
94
  const files = [];
802
95
  for (const file of target.files) {
803
96
  if (file) {
804
97
  const lastDot = file.name.lastIndexOf('.');
805
98
  if (lastDot === -1) {
806
- throw new Error(`[${file.name}] File tải lên không đúng định dạng. Vui lòng chọn lại`);
99
+ throwUploadError('invalid-format', file.name);
807
100
  }
808
101
  const extension = file.name.substring(lastDot + 1);
809
102
  if (option) {
810
103
  if (option.extensions?.length && !option.extensions.some(e => e.toLowerCase() === extension.toLowerCase())) {
811
- throw new Error(`[${file.name}] File tải lên không đúng định dạng. Vui lòng chọn lại`);
104
+ throwUploadError('invalid-format', file.name);
812
105
  }
813
106
  if (option.maxSizeInMb && option.maxSizeInMb > 0 && option.maxSizeInMb * 1024 * 1024 < file.size) {
814
- const message = `[${file.name}] Kích thước file không hợp lệ. Vui lòng chọn một file khác`;
815
- throw new Error(message);
107
+ throwUploadError('invalid-size', file.name);
816
108
  }
817
109
  if (option.validator && option.validator(file.name)) {
110
+ // Custom validator returns its own message — pass through as-is (caller defines format).
818
111
  const message = option.validator(file.name);
819
112
  throw new Error(message);
820
113
  }
@@ -829,16 +122,15 @@ const upload = (option) => {
829
122
  if (file) {
830
123
  const lastDot = file.name.lastIndexOf('.');
831
124
  if (lastDot === -1) {
832
- throw new Error(`[${file.name}] File tải lên không đúng định dạng. Vui lòng chọn lại`);
125
+ throwUploadError('invalid-format', file.name);
833
126
  }
834
127
  const extension = file.name.substring(lastDot + 1);
835
128
  if (option) {
836
129
  if (option.extensions?.length && !option.extensions.some(e => e.toLowerCase() === extension.toLowerCase())) {
837
- throw new Error(`[${file.name}] File tải lên không đúng định dạng. Vui lòng chọn lại`);
130
+ throwUploadError('invalid-format', file.name);
838
131
  }
839
132
  if (option.maxSizeInMb && option.maxSizeInMb > 0 && option.maxSizeInMb * 1024 * 1024 < file.size) {
840
- const message = `[${file.name}] Kích thước file không hợp lệ. Vui lòng chọn một file khác`;
841
- throw new Error(message);
133
+ throwUploadError('invalid-size', file.name);
842
134
  }
843
135
  if (option.validator && option.validator(file.name)) {
844
136
  const message = option.validator(file.name);
@@ -979,7 +271,7 @@ const isMobile = () => {
979
271
  return /Mobi|Android/i.test(navigator.userAgent);
980
272
  };
981
273
  const randomId = (prefix) => {
982
- const id = new Date().getTime().toString(36);
274
+ const id = `${new Date().getTime().toString(36)}${Math.random().toString(36).substring(2, 7)}`;
983
275
  if (prefix) {
984
276
  return `${prefix}_${id}`;
985
277
  }
@@ -1043,24 +335,10 @@ const getClientPublicIp = async () => {
1043
335
  return data.ip;
1044
336
  }
1045
337
  catch (error) {
1046
- console.error('Không thể lấy địa chỉ IP:', error);
338
+ console.error('Failed to fetch client IP:', error);
1047
339
  return null; // Trả về null nếu có lỗi
1048
340
  }
1049
341
  };
1050
- // var SdUtility: SdUtilityContructor = {
1051
- // upload,
1052
- // download,
1053
- // downloadBlob,
1054
- // changeAliasLowerCase,
1055
- // copyToClipboard,
1056
- // allWithPaging,
1057
- // isIncognito,
1058
- // isMobile,
1059
- // };
1060
- // declare global {
1061
- // var SdUtility: SdUtilityContructor;
1062
- // }
1063
- // globalThis.SdUtility = SdUtility;
1064
342
  // Helper function với fallback
1065
343
  const generateUuid = () => {
1066
344
  if (typeof crypto !== 'undefined' && crypto.randomUUID) {
@@ -1069,6 +347,20 @@ const generateUuid = () => {
1069
347
  // Fallback cho browser cũ
1070
348
  return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
1071
349
  };
350
+ /**
351
+ * Truy xuất giá trị của object dựa trên đường dẫn nested (VD: 'user.address.city')
352
+ */
353
+ const getNestedValue = (obj, path) => {
354
+ if (!obj || !path)
355
+ return undefined;
356
+ // Tách chuỗi theo dấu chấm và duyệt qua từng cấp của object
357
+ return path.split('.').reduce((acc, part) => acc?.[part], obj);
358
+ };
359
+ /**
360
+ * @deprecated Use {@link Utilities} and {@link BrowserUtilities} from `@sdcorejs/utils/fns` instead.
361
+ * - upload/download/clipboard/isMobile → BrowserUtilities
362
+ * - allWithPaging (→ fetchAllByPaging) / randomId / hash / parseQueryParams / generateUuid / getNestedValue → Utilities
363
+ */
1072
364
  const SdUtilities = {
1073
365
  upload,
1074
366
  download,
@@ -1082,12 +374,18 @@ const SdUtilities = {
1082
374
  hash,
1083
375
  parseQueryParams,
1084
376
  getClientPublicIp,
1085
- generateUuid
377
+ generateUuid,
378
+ getNestedValue
1086
379
  };
1087
380
 
381
+ /** @deprecated Use {@link ColorUtilities.hslToHex} from `@sdcorejs/utils/fns` instead */
382
+ const hslToHex = ColorUtilities.hslToHex;
383
+ /** @deprecated Use {@link ColorUtilities.rgbToHex} from `@sdcorejs/utils/fns` instead */
384
+ const rgbToHex = ColorUtilities.rgbToHex;
385
+
1088
386
  /**
1089
387
  * Generated bundle index. Do not edit.
1090
388
  */
1091
389
 
1092
- export { ArrayUtilities, DateUtilities, NumberUtilities, SdUtilities, StringUtilities };
390
+ export { SdUtilities, StringUtilities, hslToHex, rgbToHex };
1093
391
  //# sourceMappingURL=sd-angular-core-utilities-extensions.mjs.map