@sd-angular/core 19.0.0-beta.10 → 19.0.0-beta.101

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 (813) hide show
  1. package/README.md +723 -64
  2. package/assets/images/coming-soon.svg +23 -0
  3. package/assets/images/data-empty.svg +21 -0
  4. package/assets/images/expired.svg +22 -0
  5. package/assets/images/file-error.svg +28 -0
  6. package/assets/images/filter-empty.svg +20 -0
  7. package/assets/images/filter-required.svg +21 -0
  8. package/assets/images/forbidden.svg +15 -0
  9. package/assets/images/image-error.svg +27 -0
  10. package/assets/images/maintenance.svg +23 -0
  11. package/assets/images/not-found.svg +20 -0
  12. package/assets/images/offline.svg +20 -0
  13. package/assets/images/submitted.svg +18 -0
  14. package/assets/images/success.svg +18 -0
  15. package/assets/images/unauthorized.svg +22 -0
  16. package/assets/images/unknown-error.svg +18 -0
  17. package/assets/scss/README.md +524 -0
  18. package/assets/scss/ckeditor5.scss +61 -4
  19. package/assets/scss/core/bootstrap.scss +0 -108
  20. package/assets/scss/core/form.scss +32 -6
  21. package/assets/scss/core/image.scss +35 -0
  22. package/assets/scss/core/utilities/_base.scss +333 -0
  23. package/assets/scss/core/utilities/_border.scss +22 -0
  24. package/assets/scss/core/utilities/_display.scss +10 -0
  25. package/assets/scss/core/utilities/_elevation.scss +80 -0
  26. package/assets/scss/core/utilities/_flexbox.scss +54 -0
  27. package/assets/scss/core/utilities/_gap.scss +9 -0
  28. package/assets/scss/core/utilities/_grid.scss +142 -0
  29. package/assets/scss/core/utilities/_index.scss +17 -0
  30. package/assets/scss/core/utilities/_misc.scss +20 -0
  31. package/assets/scss/core/utilities/_overflow.scss +9 -0
  32. package/assets/scss/core/utilities/_position.scss +8 -0
  33. package/assets/scss/core/utilities/_sizing.scss +28 -0
  34. package/assets/scss/core/utilities/_spacing.scss +31 -0
  35. package/assets/scss/core/utilities/_typography.scss +99 -0
  36. package/assets/scss/sd-core.scss +9 -5
  37. package/assets/scss/themes/material-theme.scss +82 -40
  38. package/components/anchor/index.d.ts +1 -1
  39. package/components/anchor/src/components/anchor/anchor.component.d.ts +22 -0
  40. package/components/anchor/src/components/anchor-item/anchor-item.component.d.ts +9 -11
  41. package/components/anchor/src/components/anchor-nav/anchor-nav.component.d.ts +21 -0
  42. package/components/anchor/src/components/index.d.ts +1 -1
  43. package/components/anchor/src/models/index.d.ts +1 -0
  44. package/components/anchor/src/models/sd-anchor.model.d.ts +7 -0
  45. package/components/autoid-inspector/index.d.ts +8 -0
  46. package/components/autoid-inspector/src/autoid-inspector.component.d.ts +55 -0
  47. package/components/autoid-inspector/src/models/autoid-element.model.d.ts +55 -0
  48. package/components/autoid-inspector/src/models/autoid-export-format.model.d.ts +6 -0
  49. package/components/autoid-inspector/src/models/autoid-inspector-config.model.d.ts +8 -0
  50. package/components/autoid-inspector/src/services/autoid-audit.service.d.ts +19 -0
  51. package/components/autoid-inspector/src/services/autoid-export.service.d.ts +21 -0
  52. package/components/autoid-inspector/src/services/autoid-highlight.service.d.ts +12 -0
  53. package/components/autoid-inspector/src/services/autoid-scanner.service.d.ts +23 -0
  54. package/components/avatar/index.d.ts +1 -0
  55. package/components/avatar/src/avatar.component.d.ts +19 -0
  56. package/components/badge/src/badge.component.d.ts +74 -20
  57. package/components/button/src/button.component.d.ts +30 -28
  58. package/components/chart/index.d.ts +4 -0
  59. package/components/chart/src/bar-chart.component.d.ts +18 -0
  60. package/components/chart/src/doughnut-chart.component.d.ts +16 -0
  61. package/components/chart/src/line-chart.component.d.ts +18 -0
  62. package/components/chart/src/pie-chart.component.d.ts +16 -0
  63. package/components/code-editor/index.d.ts +1 -0
  64. package/components/code-editor/src/code-editor.component.d.ts +25 -0
  65. package/components/document-builder/index.d.ts +1 -0
  66. package/components/document-builder/src/components/header-footer-builder/header-footer-builder.component.d.ts +4 -1
  67. package/components/document-builder/src/document-builder.component.d.ts +7 -52
  68. package/components/document-builder/src/document-builder.model.d.ts +21 -12
  69. package/components/document-builder/src/plugins/block-space/block-space.plugin.d.ts +9 -0
  70. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.d.ts +44 -0
  71. package/components/document-builder/src/plugins/ck-comment/ck-comment.plugin.model.d.ts +57 -0
  72. package/components/document-builder/src/plugins/heading/heading.plugin.d.ts +1 -0
  73. package/components/document-builder/src/plugins/highlight-range/highlight-range.plugin.d.ts +4 -0
  74. package/components/document-builder/src/plugins/image-custom/image-custom.plugin.d.ts +31 -0
  75. package/components/document-builder/src/plugins/index.d.ts +7 -2
  76. package/components/document-builder/src/plugins/page-orientation/page-orientation.plugin.d.ts +2 -2
  77. package/components/document-builder/src/plugins/paste-handler/filters/bookmark.d.ts +14 -0
  78. package/components/document-builder/src/plugins/paste-handler/filters/br.d.ts +15 -0
  79. package/components/document-builder/src/plugins/paste-handler/filters/image.d.ts +25 -0
  80. package/components/document-builder/src/plugins/paste-handler/filters/list.d.ts +29 -0
  81. package/components/document-builder/src/plugins/paste-handler/filters/parse.d.ts +35 -0
  82. package/components/document-builder/src/plugins/paste-handler/filters/removeboldwrapper.d.ts +15 -0
  83. package/components/document-builder/src/plugins/paste-handler/filters/removegooglesheetstag.d.ts +15 -0
  84. package/components/document-builder/src/plugins/paste-handler/filters/removeinvalidtablewidth.d.ts +15 -0
  85. package/components/document-builder/src/plugins/paste-handler/filters/removemsattributes.d.ts +15 -0
  86. package/components/document-builder/src/plugins/paste-handler/filters/removestyleblock.d.ts +15 -0
  87. package/components/document-builder/src/plugins/paste-handler/filters/removexmlns.d.ts +15 -0
  88. package/components/document-builder/src/plugins/paste-handler/filters/replacemsfootnotes.d.ts +54 -0
  89. package/components/document-builder/src/plugins/paste-handler/filters/replacetabswithinprewithspaces.d.ts +24 -0
  90. package/components/document-builder/src/plugins/paste-handler/filters/space.d.ts +27 -0
  91. package/components/document-builder/src/plugins/paste-handler/filters/table.d.ts +16 -0
  92. package/components/document-builder/src/plugins/paste-handler/filters/utils.d.ts +25 -0
  93. package/components/document-builder/src/plugins/paste-handler/index.d.ts +35 -0
  94. package/components/document-builder/src/plugins/paste-handler/normalizers/googledocsnormalizer.d.ts +31 -0
  95. package/components/document-builder/src/plugins/paste-handler/normalizers/googlesheetsnormalizer.d.ts +31 -0
  96. package/components/document-builder/src/plugins/paste-handler/normalizers/mswordnormalizer.d.ts +29 -0
  97. package/components/document-builder/src/plugins/paste-handler/types.d.ts +30 -0
  98. package/components/document-builder/src/plugins/table-custom/index.d.ts +34 -0
  99. package/components/document-builder/src/plugins/variable/variable.plugin.d.ts +45 -0
  100. package/components/editor/index.d.ts +3 -0
  101. package/components/editor/src/configurations/editor.configuration.d.ts +12 -0
  102. package/components/editor/src/configurations/index.d.ts +1 -0
  103. package/components/editor/src/editor.component.d.ts +52 -0
  104. package/components/editor/src/models/editor.model.d.ts +10 -0
  105. package/components/editor/src/models/image-upload.plugin.model.d.ts +51 -0
  106. package/components/editor/src/models/index.d.ts +2 -0
  107. package/components/editor/src/plugins/image-upload/image-upload.plugin.d.ts +22 -0
  108. package/components/editor/src/plugins/image-upload/utils/batch.utils.d.ts +14 -0
  109. package/components/editor/src/plugins/image-upload/utils/index.d.ts +3 -0
  110. package/components/editor/src/plugins/image-upload/utils/style.utils.d.ts +3 -0
  111. package/components/editor/src/plugins/image-upload/utils/validate.utils.d.ts +4 -0
  112. package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-table/attribute-table.component.d.ts +6 -4
  113. package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-template/attribute-template.component.d.ts +4 -4
  114. package/components/{workflow → form-generic}/src/components/form-builder/components/configure-validation/configure-validation.component.d.ts +4 -4
  115. package/components/{workflow → form-generic}/src/components/form-builder/components/expression-builder/expression-builder.component.d.ts +1 -1
  116. package/components/form-generic/src/components/form-builder/components/group/attribute/group-attribute.component.d.ts +23 -0
  117. package/components/form-generic/src/components/form-builder/components/group/index.d.ts +1 -0
  118. package/components/{workflow → form-generic}/src/components/form-builder/components/index.d.ts +1 -0
  119. package/components/{workflow → form-generic}/src/components/form-builder/components/table/control/table-control.component.d.ts +3 -0
  120. package/components/form-generic/src/components/form-builder/form-builder.component.d.ts +120 -0
  121. package/components/{workflow → form-generic}/src/components/form-render/form-render.component.d.ts +4 -4
  122. package/components/{workflow → form-generic}/src/components/sd-feel-expression/sd-feel-expression.component.d.ts +1 -1
  123. package/components/{workflow/src/configurations/workflow.configuration.d.ts → form-generic/src/configurations/form-generic.configuration.d.ts} +2 -2
  124. package/components/form-generic/src/configurations/index.d.ts +2 -0
  125. package/components/{workflow → form-generic}/src/models/form-generic-component.model.d.ts +27 -6
  126. package/components/{workflow → form-generic}/src/models/form-generic-expression.model.d.ts +1 -0
  127. package/components/{workflow → form-generic}/src/pipes/html.pipe.d.ts +4 -4
  128. package/components/{workflow → form-generic}/src/services/form-generic.service.d.ts +3 -3
  129. package/components/index.d.ts +10 -2
  130. package/components/mini-editor/index.d.ts +2 -0
  131. package/components/mini-editor/src/mini-editor.component.d.ts +91 -0
  132. package/components/mini-editor/src/mini-editor.model.d.ts +44 -0
  133. package/components/modal/index.d.ts +1 -1
  134. package/components/modal/src/modal.component.d.ts +29 -0
  135. package/components/operator/index.d.ts +1 -0
  136. package/components/operator/src/operator.component.d.ts +38 -0
  137. package/components/preview/index.d.ts +3 -0
  138. package/components/preview/src/preview-image/preview-image.component.d.ts +84 -24
  139. package/components/preview/src/preview-image/preview-image.types.d.ts +53 -0
  140. package/components/preview/src/preview-pdf/preview-pdf.component.d.ts +186 -0
  141. package/components/preview/src/preview-pdf/preview-pdf.types.d.ts +84 -0
  142. package/components/query-bar/index.d.ts +2 -0
  143. package/components/query-bar/src/inline-value-chip.component.d.ts +71 -0
  144. package/components/query-bar/src/query-bar.component.d.ts +180 -0
  145. package/components/query-bar/src/query-bar.model.d.ts +121 -0
  146. package/components/quick-action/src/quick-action.component.d.ts +5 -6
  147. package/components/section/index.d.ts +1 -0
  148. package/components/section/src/section-item/section-item.component.d.ts +7 -0
  149. package/components/section/src/section.component.d.ts +11 -12
  150. package/components/side-drawer/src/side-drawer.component.d.ts +17 -26
  151. package/components/splitter/index.d.ts +3 -0
  152. package/components/splitter/src/splitter-handle/splitter-handle.component.d.ts +24 -0
  153. package/components/splitter/src/splitter-panel/splitter-panel.component.d.ts +16 -0
  154. package/components/splitter/src/splitter-state.service.d.ts +26 -0
  155. package/components/splitter/src/splitter.component.d.ts +28 -0
  156. package/components/splitter/src/splitter.models.d.ts +23 -0
  157. package/components/tab-router/src/components/tab-router-item/tab-router-item.component.d.ts +4 -1
  158. package/components/tab-router/src/components/tab-router-nav/tab-router-nav.component.d.ts +5 -6
  159. package/components/tab-router/src/components/tab-router-outlet/tab-router-outlet.component.d.ts +6 -17
  160. package/components/table/index.d.ts +3 -0
  161. package/components/table/src/components/column-title/column-title.component.d.ts +10 -0
  162. package/components/table/src/components/command/desktop-command.component.d.ts +14 -0
  163. package/components/table/src/components/command/pipes/command.pipe.d.ts +30 -0
  164. package/components/table/src/components/command/pipes/filter.pipe.d.ts +35 -0
  165. package/components/table/src/components/config/config.component.d.ts +7 -14
  166. package/components/table/src/components/desktop-cell/desktop-cell.component.d.ts +19 -12
  167. package/components/table/src/components/desktop-cell/view/view.component.d.ts +24 -0
  168. package/components/table/src/components/filter/column-filter/column-filter.component.d.ts +32 -0
  169. package/components/table/src/components/filter/external-filter/external-filter.component.d.ts +27 -0
  170. package/components/table/src/components/filter/index.d.ts +3 -0
  171. package/components/table/src/components/filter/mobile-filter/mobile-filter.component.d.ts +42 -0
  172. package/components/table/src/components/index.d.ts +2 -2
  173. package/components/table/src/components/selector-action/action-filter.pipe.d.ts +11 -10
  174. package/components/table/src/components/selector-action/selector-action.component.d.ts +7 -6
  175. package/components/table/src/directives/index.d.ts +5 -0
  176. package/components/table/src/directives/sd-column-resize.directive.d.ts +13 -0
  177. package/components/table/src/directives/sd-table-cell-def.directive.d.ts +13 -6
  178. package/components/table/src/directives/sd-table-column-filter-def.directive.d.ts +16 -0
  179. package/components/table/src/directives/sd-table-expand-def.directive.d.ts +10 -5
  180. package/components/table/src/directives/sd-table-filter-def.directive.d.ts +6 -8
  181. package/components/table/src/directives/sd-table-footer-def.directive.d.ts +13 -6
  182. package/components/table/src/directives/sd-table-title-def.directive.d.ts +14 -0
  183. package/components/table/src/directives/sticky-shadow.directive.d.ts +17 -0
  184. package/components/table/src/models/index.d.ts +1 -0
  185. package/components/table/src/models/table-column.model.d.ts +49 -40
  186. package/components/table/src/models/table-command.model.d.ts +7 -3
  187. package/components/table/src/models/table-item.model.d.ts +15 -4
  188. package/components/table/src/models/table-option-config.model.d.ts +5 -0
  189. package/components/table/src/models/table-option-export.model.d.ts +3 -2
  190. package/components/table/src/models/table-option-selector.model.d.ts +65 -10
  191. package/components/table/src/models/table-option-style.model.d.ts +6 -1
  192. package/components/table/src/models/table-option-tree.model.d.ts +12 -0
  193. package/components/table/src/models/table-option.model.d.ts +136 -8
  194. package/components/table/src/pipes/index.d.ts +1 -0
  195. package/components/table/src/pipes/sd-tree.pipe.d.ts +9 -0
  196. package/components/table/src/services/column-width.util.d.ts +7 -0
  197. package/components/table/src/services/config.service.d.ts +5 -0
  198. package/components/table/src/services/index.d.ts +3 -0
  199. package/components/table/src/services/table-export/table-export.service.d.ts +26 -0
  200. package/components/table/src/services/table-filter/table-filter.model.d.ts +6 -5
  201. package/components/table/src/services/table-format/table-format.service.d.ts +16 -0
  202. package/components/table/src/services/tree/tree.util.d.ts +14 -0
  203. package/components/table/src/table.component.d.ts +58 -57
  204. package/components/upload-file/src/configurations/upload-file.configuration.d.ts +34 -1
  205. package/components/upload-file/src/services/upload-file.service.d.ts +0 -1
  206. package/components/upload-file/src/upload-file.component.d.ts +58 -54
  207. package/components/view/index.d.ts +1 -0
  208. package/components/view/src/view.component.d.ts +16 -0
  209. package/configurations/src/sd-core.configuration.d.ts +2 -0
  210. package/directives/index.d.ts +2 -0
  211. package/directives/src/sd-desktop.directive.d.ts +2 -4
  212. package/directives/src/sd-href.directive.d.ts +9 -0
  213. package/directives/src/sd-mobile.directive.d.ts +2 -4
  214. package/directives/src/sd-tooltip.directive.d.ts +26 -0
  215. package/fesm2022/sd-angular-core-components-anchor.mjs +139 -214
  216. package/fesm2022/sd-angular-core-components-anchor.mjs.map +1 -1
  217. package/fesm2022/sd-angular-core-components-autoid-inspector.mjs +723 -0
  218. package/fesm2022/sd-angular-core-components-autoid-inspector.mjs.map +1 -0
  219. package/fesm2022/sd-angular-core-components-avatar.mjs +103 -0
  220. package/fesm2022/sd-angular-core-components-avatar.mjs.map +1 -0
  221. package/fesm2022/sd-angular-core-components-badge.mjs +102 -93
  222. package/fesm2022/sd-angular-core-components-badge.mjs.map +1 -1
  223. package/fesm2022/sd-angular-core-components-base.mjs +3 -3
  224. package/fesm2022/sd-angular-core-components-button.mjs +72 -98
  225. package/fesm2022/sd-angular-core-components-button.mjs.map +1 -1
  226. package/fesm2022/sd-angular-core-components-chart.mjs +290 -0
  227. package/fesm2022/sd-angular-core-components-chart.mjs.map +1 -0
  228. package/fesm2022/sd-angular-core-components-code-editor.mjs +128 -0
  229. package/fesm2022/sd-angular-core-components-code-editor.mjs.map +1 -0
  230. package/fesm2022/sd-angular-core-components-document-builder.mjs +4048 -591
  231. package/fesm2022/sd-angular-core-components-document-builder.mjs.map +1 -1
  232. package/fesm2022/sd-angular-core-components-editor.mjs +1078 -0
  233. package/fesm2022/sd-angular-core-components-editor.mjs.map +1 -0
  234. package/fesm2022/sd-angular-core-components-form-generic.mjs +6714 -0
  235. package/fesm2022/sd-angular-core-components-form-generic.mjs.map +1 -0
  236. package/fesm2022/sd-angular-core-components-history.mjs +9 -8
  237. package/fesm2022/sd-angular-core-components-history.mjs.map +1 -1
  238. package/fesm2022/sd-angular-core-components-import-excel.mjs +35 -33
  239. package/fesm2022/sd-angular-core-components-import-excel.mjs.map +1 -1
  240. package/fesm2022/sd-angular-core-components-mini-editor.mjs +332 -0
  241. package/fesm2022/sd-angular-core-components-mini-editor.mjs.map +1 -0
  242. package/fesm2022/sd-angular-core-components-modal.mjs +70 -93
  243. package/fesm2022/sd-angular-core-components-modal.mjs.map +1 -1
  244. package/fesm2022/sd-angular-core-components-operator.mjs +88 -0
  245. package/fesm2022/sd-angular-core-components-operator.mjs.map +1 -0
  246. package/fesm2022/sd-angular-core-components-preview.mjs +1963 -89
  247. package/fesm2022/sd-angular-core-components-preview.mjs.map +1 -1
  248. package/fesm2022/sd-angular-core-components-query-bar.mjs +998 -0
  249. package/fesm2022/sd-angular-core-components-query-bar.mjs.map +1 -0
  250. package/fesm2022/sd-angular-core-components-query-builder.mjs +3 -3
  251. package/fesm2022/sd-angular-core-components-quick-action.mjs +10 -21
  252. package/fesm2022/sd-angular-core-components-quick-action.mjs.map +1 -1
  253. package/fesm2022/sd-angular-core-components-section.mjs +42 -44
  254. package/fesm2022/sd-angular-core-components-section.mjs.map +1 -1
  255. package/fesm2022/sd-angular-core-components-side-drawer.mjs +91 -91
  256. package/fesm2022/sd-angular-core-components-side-drawer.mjs.map +1 -1
  257. package/fesm2022/sd-angular-core-components-splitter.mjs +646 -0
  258. package/fesm2022/sd-angular-core-components-splitter.mjs.map +1 -0
  259. package/fesm2022/sd-angular-core-components-tab-router.mjs +304 -288
  260. package/fesm2022/sd-angular-core-components-tab-router.mjs.map +1 -1
  261. package/fesm2022/sd-angular-core-components-table.mjs +2419 -1706
  262. package/fesm2022/sd-angular-core-components-table.mjs.map +1 -1
  263. package/fesm2022/sd-angular-core-components-upload-file.mjs +422 -463
  264. package/fesm2022/sd-angular-core-components-upload-file.mjs.map +1 -1
  265. package/fesm2022/sd-angular-core-components-view.mjs +45 -0
  266. package/fesm2022/sd-angular-core-components-view.mjs.map +1 -0
  267. package/fesm2022/sd-angular-core-components.mjs +10 -2
  268. package/fesm2022/sd-angular-core-components.mjs.map +1 -1
  269. package/fesm2022/sd-angular-core-configurations.mjs.map +1 -1
  270. package/fesm2022/sd-angular-core-directives.mjs +315 -54
  271. package/fesm2022/sd-angular-core-directives.mjs.map +1 -1
  272. package/fesm2022/sd-angular-core-forms-autocomplete.mjs +307 -368
  273. package/fesm2022/sd-angular-core-forms-autocomplete.mjs.map +1 -1
  274. package/fesm2022/sd-angular-core-forms-checkbox.mjs +85 -93
  275. package/fesm2022/sd-angular-core-forms-checkbox.mjs.map +1 -1
  276. package/fesm2022/sd-angular-core-forms-chip-calendar.mjs +231 -212
  277. package/fesm2022/sd-angular-core-forms-chip-calendar.mjs.map +1 -1
  278. package/fesm2022/sd-angular-core-forms-chip.mjs +234 -207
  279. package/fesm2022/sd-angular-core-forms-chip.mjs.map +1 -1
  280. package/fesm2022/sd-angular-core-forms-date-range.mjs +222 -258
  281. package/fesm2022/sd-angular-core-forms-date-range.mjs.map +1 -1
  282. package/fesm2022/sd-angular-core-forms-date.mjs +224 -287
  283. package/fesm2022/sd-angular-core-forms-date.mjs.map +1 -1
  284. package/fesm2022/sd-angular-core-forms-datetime.mjs +626 -321
  285. package/fesm2022/sd-angular-core-forms-datetime.mjs.map +1 -1
  286. package/fesm2022/sd-angular-core-forms-directives.mjs +26 -32
  287. package/fesm2022/sd-angular-core-forms-directives.mjs.map +1 -1
  288. package/fesm2022/sd-angular-core-forms-input-number.mjs +235 -343
  289. package/fesm2022/sd-angular-core-forms-input-number.mjs.map +1 -1
  290. package/fesm2022/sd-angular-core-forms-input.mjs +232 -302
  291. package/fesm2022/sd-angular-core-forms-input.mjs.map +1 -1
  292. package/fesm2022/sd-angular-core-forms-label.mjs +3 -3
  293. package/fesm2022/sd-angular-core-forms-models.mjs +77 -2
  294. package/fesm2022/sd-angular-core-forms-models.mjs.map +1 -1
  295. package/fesm2022/sd-angular-core-forms-radio.mjs +115 -183
  296. package/fesm2022/sd-angular-core-forms-radio.mjs.map +1 -1
  297. package/fesm2022/sd-angular-core-forms-select.mjs +420 -453
  298. package/fesm2022/sd-angular-core-forms-select.mjs.map +1 -1
  299. package/fesm2022/sd-angular-core-forms-switch.mjs +82 -109
  300. package/fesm2022/sd-angular-core-forms-switch.mjs.map +1 -1
  301. package/fesm2022/sd-angular-core-forms-textarea.mjs +199 -231
  302. package/fesm2022/sd-angular-core-forms-textarea.mjs.map +1 -1
  303. package/fesm2022/sd-angular-core-forms.mjs +4 -4
  304. package/fesm2022/sd-angular-core-handlers.mjs +10 -9
  305. package/fesm2022/sd-angular-core-handlers.mjs.map +1 -1
  306. package/fesm2022/sd-angular-core-i18n.mjs +2547 -0
  307. package/fesm2022/sd-angular-core-i18n.mjs.map +1 -0
  308. package/fesm2022/sd-angular-core-interceptors.mjs +37 -10
  309. package/fesm2022/sd-angular-core-interceptors.mjs.map +1 -1
  310. package/fesm2022/sd-angular-core-models.mjs +6 -0
  311. package/fesm2022/sd-angular-core-models.mjs.map +1 -0
  312. package/fesm2022/sd-angular-core-modules-auth.mjs +9 -9
  313. package/fesm2022/sd-angular-core-modules-authom.mjs +360 -0
  314. package/fesm2022/sd-angular-core-modules-authom.mjs.map +1 -0
  315. package/fesm2022/sd-angular-core-modules-keycloak.mjs +127 -0
  316. package/fesm2022/sd-angular-core-modules-keycloak.mjs.map +1 -0
  317. package/fesm2022/sd-angular-core-modules-layout.mjs +957 -516
  318. package/fesm2022/sd-angular-core-modules-layout.mjs.map +1 -1
  319. package/fesm2022/sd-angular-core-modules-permission.mjs +166 -80
  320. package/fesm2022/sd-angular-core-modules-permission.mjs.map +1 -1
  321. package/fesm2022/sd-angular-core-modules.mjs +2 -1
  322. package/fesm2022/sd-angular-core-modules.mjs.map +1 -1
  323. package/fesm2022/sd-angular-core-pipes.mjs +17 -18
  324. package/fesm2022/sd-angular-core-pipes.mjs.map +1 -1
  325. package/fesm2022/sd-angular-core-services-api.mjs +31 -51
  326. package/fesm2022/sd-angular-core-services-api.mjs.map +1 -1
  327. package/fesm2022/sd-angular-core-services-cache.mjs +3 -3
  328. package/fesm2022/sd-angular-core-services-confirm.mjs +28 -24
  329. package/fesm2022/sd-angular-core-services-confirm.mjs.map +1 -1
  330. package/fesm2022/sd-angular-core-services-docx.mjs +300 -0
  331. package/fesm2022/sd-angular-core-services-docx.mjs.map +1 -0
  332. package/fesm2022/sd-angular-core-services-excel.mjs +33 -27
  333. package/fesm2022/sd-angular-core-services-excel.mjs.map +1 -1
  334. package/fesm2022/sd-angular-core-services-license.mjs +3 -3
  335. package/fesm2022/sd-angular-core-services-loading.mjs +3 -3
  336. package/fesm2022/sd-angular-core-services-notify.mjs +24 -24
  337. package/fesm2022/sd-angular-core-services-notify.mjs.map +1 -1
  338. package/fesm2022/sd-angular-core-services-storage.mjs +8 -3
  339. package/fesm2022/sd-angular-core-services-storage.mjs.map +1 -1
  340. package/fesm2022/sd-angular-core-services.mjs +1 -0
  341. package/fesm2022/sd-angular-core-services.mjs.map +1 -1
  342. package/fesm2022/sd-angular-core-utilities-data-state.mjs +38 -0
  343. package/fesm2022/sd-angular-core-utilities-data-state.mjs.map +1 -0
  344. package/fesm2022/sd-angular-core-utilities-extensions.mjs +89 -856
  345. package/fesm2022/sd-angular-core-utilities-extensions.mjs.map +1 -1
  346. package/fesm2022/sd-angular-core-utilities-models.mjs +41 -113
  347. package/fesm2022/sd-angular-core-utilities-models.mjs.map +1 -1
  348. package/fesm2022/sd-angular-core-utilities.mjs +1 -0
  349. package/fesm2022/sd-angular-core-utilities.mjs.map +1 -1
  350. package/fesm2022/sd-angular-core.mjs +0 -1
  351. package/fesm2022/sd-angular-core.mjs.map +1 -1
  352. package/forms/autocomplete/src/autocomplete.component.d.ts +62 -58
  353. package/forms/checkbox/src/checkbox.component.d.ts +18 -20
  354. package/forms/chip/src/chip.component.d.ts +45 -42
  355. package/forms/chip-calendar/src/chip-calendar.component.d.ts +47 -42
  356. package/forms/date/src/date.component.d.ts +57 -49
  357. package/forms/date-range/src/date-range.component.d.ts +42 -38
  358. package/forms/datetime/src/datetime.component.d.ts +69 -53
  359. package/forms/datetime/src/popup/sd-datetime-picker.component.d.ts +37 -0
  360. package/forms/datetime/src/popup/sd-time-spinner.component.d.ts +41 -0
  361. package/forms/directives/src/item-def.directive.d.ts +10 -5
  362. package/forms/directives/src/label-def.directive.d.ts +3 -2
  363. package/forms/directives/src/suffix-def.directive.d.ts +3 -2
  364. package/forms/directives/src/view-def.directive.d.ts +9 -9
  365. package/forms/input/src/input.component.d.ts +64 -59
  366. package/forms/input-number/src/input-number.component.d.ts +60 -57
  367. package/forms/models/index.d.ts +1 -0
  368. package/forms/models/src/form-control-state.d.ts +23 -0
  369. package/forms/models/src/sd-custom-validator.model.d.ts +13 -1
  370. package/forms/radio/src/radio.component.d.ts +31 -34
  371. package/forms/select/src/select.component.d.ts +78 -66
  372. package/forms/switch/src/switch.component.d.ts +20 -23
  373. package/forms/textarea/src/textarea.component.d.ts +49 -45
  374. package/i18n/index.d.ts +5 -0
  375. package/i18n/src/en.d.ts +442 -0
  376. package/i18n/src/i18n.messages.d.ts +2 -0
  377. package/i18n/src/i18n.pipe.d.ts +9 -0
  378. package/i18n/src/i18n.service.d.ts +14 -0
  379. package/i18n/src/i18n.token.d.ts +1 -0
  380. package/i18n/src/i18n.types.d.ts +31 -0
  381. package/i18n/src/ja.d.ts +2 -0
  382. package/i18n/src/ko.d.ts +2 -0
  383. package/i18n/src/vi.d.ts +2 -0
  384. package/i18n/src/zh.d.ts +2 -0
  385. package/interceptors/index.d.ts +1 -0
  386. package/interceptors/unauthorized/unauthorized.interceptor.d.ts +12 -0
  387. package/models/index.d.ts +1 -0
  388. package/models/src/language.model.d.ts +2 -0
  389. package/modules/authom/authom.configuration.d.ts +17 -0
  390. package/modules/authom/authom.interceptor.d.ts +3 -0
  391. package/modules/authom/authom.module.d.ts +16 -0
  392. package/modules/authom/authom.service.d.ts +32 -0
  393. package/modules/authom/index.d.ts +35 -0
  394. package/modules/index.d.ts +2 -1
  395. package/modules/keycloak/index.d.ts +4 -0
  396. package/modules/keycloak/keycloak.configuration.d.ts +11 -0
  397. package/modules/keycloak/keycloak.interceptor.d.ts +2 -0
  398. package/modules/keycloak/keycloak.module.d.ts +18 -0
  399. package/modules/keycloak/keycloak.service.d.ts +14 -0
  400. package/modules/layout/components/index.d.ts +2 -0
  401. package/modules/layout/components/layout-main/layout-main.component.d.ts +8 -12
  402. package/modules/layout/components/page/page.component.d.ts +5 -7
  403. package/modules/layout/components/sidebar-mobile-v1/components/sidebar/sidebar.component.d.ts +35 -0
  404. package/modules/layout/components/sidebar-mobile-v1/components/user/user.component.d.ts +24 -0
  405. package/modules/layout/components/sidebar-mobile-v1/main.component.d.ts +21 -0
  406. package/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.d.ts +29 -29
  407. package/modules/layout/components/sidebar-v1/components/user/user.component.d.ts +11 -17
  408. package/modules/layout/components/sidebar-v1/main.component.d.ts +14 -14
  409. package/modules/layout/configurations/layout.configuration.d.ts +54 -3
  410. package/modules/layout/modules/forbidden/pages/root/root.component.d.ts +3 -8
  411. package/modules/layout/modules/home/components/home-page/home-page.component.d.ts +27 -5
  412. package/modules/layout/modules/not-found/pages/root/root.component.d.ts +3 -8
  413. package/modules/layout/pipes/high-light-search.pipe.d.ts +1 -1
  414. package/modules/layout/services/index.d.ts +1 -0
  415. package/modules/layout/services/layout.service.d.ts +10 -0
  416. package/modules/layout/services/menu/menu.model.d.ts +4 -1
  417. package/modules/layout/services/storage/storage.service.d.ts +2 -3
  418. package/modules/permission/src/configurations/permission.configuration.d.ts +56 -2
  419. package/modules/permission/src/directives/permission.directive.d.ts +5 -8
  420. package/modules/permission/src/guards/permission.guard.d.ts +2 -1
  421. package/modules/permission/src/services/permission.service.d.ts +6 -9
  422. package/package.json +126 -77
  423. package/pipes/src/format-number.pipe.d.ts +1 -1
  424. package/public-api.d.ts +0 -1
  425. package/sd-angular-core-19.0.0-beta.101.tgz +0 -0
  426. package/services/api/src/api.model.d.ts +7 -1
  427. package/services/api/src/api.service.d.ts +3 -7
  428. package/services/api/src/interceptors/api.interceptor.d.ts +2 -4
  429. package/services/confirm/src/lib/confirm.service.d.ts +5 -0
  430. package/services/docx/index.d.ts +1 -0
  431. package/services/docx/src/lib/docx.model.d.ts +9 -0
  432. package/services/docx/src/lib/docx.service.d.ts +15 -0
  433. package/services/docx/src/lib/pandoc-core.d.ts +11 -0
  434. package/services/docx/src/public-api.d.ts +2 -0
  435. package/services/index.d.ts +1 -0
  436. package/services/notify/index.d.ts +1 -0
  437. package/services/notify/src/components/toast/toast.component.d.ts +3 -3
  438. package/services/notify/src/components/toast-container.component.d.ts +3 -4
  439. package/services/storage/src/storage.model.d.ts +1 -0
  440. package/utilities/data-state/index.d.ts +1 -0
  441. package/utilities/data-state/src/data-state.d.ts +11 -0
  442. package/utilities/extensions/src/array.extension.d.ts +1 -7
  443. package/utilities/extensions/src/color.extension.d.ts +5 -20
  444. package/utilities/extensions/src/date.extension.d.ts +1 -18
  445. package/utilities/extensions/src/number.extension.d.ts +1 -10
  446. package/utilities/extensions/src/string.extension.d.ts +33 -2
  447. package/utilities/extensions/src/utility.extension.d.ts +7 -0
  448. package/utilities/index.d.ts +1 -0
  449. package/utilities/models/index.d.ts +3 -0
  450. package/utilities/models/src/color.model.d.ts +4 -1
  451. package/utilities/models/src/empty.model.d.ts +3 -0
  452. package/utilities/models/src/filter.model.d.ts +12 -11
  453. package/utilities/models/src/icon.model.d.ts +2 -0
  454. package/utilities/models/src/maybe-async.model.d.ts +10 -4
  455. package/utilities/models/src/nested-key-of.model.d.ts +4 -0
  456. package/utilities/models/src/operator.model.d.ts +9 -4
  457. package/utilities/models/src/order.model.d.ts +4 -4
  458. package/utilities/models/src/paging.model.d.ts +8 -15
  459. package/utilities/models/src/pattern.model.d.ts +14 -1
  460. package/utilities/models/src/size.model.d.ts +4 -1
  461. package/utilities/models/src/unwrap-signal.model.d.ts +6 -0
  462. package/assets/img/1D UX System.zip +0 -0
  463. package/assets/img/Popup/Vector.png +0 -0
  464. package/assets/img/empty.png +0 -0
  465. package/assets/img/empty.svg +0 -27
  466. package/assets/img/file-types/eps/001-file.eps +0 -143
  467. package/assets/img/file-types/eps/002-file-1.eps +0 -136
  468. package/assets/img/file-types/eps/003-file-2.eps +0 -130
  469. package/assets/img/file-types/eps/004-file-3.eps +0 -127
  470. package/assets/img/file-types/eps/005-file-4.eps +0 -120
  471. package/assets/img/file-types/eps/006-file-5.eps +0 -133
  472. package/assets/img/file-types/eps/007-file-6.eps +0 -133
  473. package/assets/img/file-types/eps/008-file-7.eps +0 -144
  474. package/assets/img/file-types/eps/009-file-8.eps +0 -150
  475. package/assets/img/file-types/eps/010-file-9.eps +0 -155
  476. package/assets/img/file-types/eps/011-file-10.eps +0 -124
  477. package/assets/img/file-types/eps/012-file-11.eps +0 -147
  478. package/assets/img/file-types/eps/013-file-12.eps +0 -125
  479. package/assets/img/file-types/eps/014-file-13.eps +0 -129
  480. package/assets/img/file-types/eps/015-file-14.eps +0 -143
  481. package/assets/img/file-types/eps/016-file-15.eps +0 -130
  482. package/assets/img/file-types/eps/017-file-16.eps +0 -197
  483. package/assets/img/file-types/eps/018-file-17.eps +0 -146
  484. package/assets/img/file-types/eps/019-file-18.eps +0 -131
  485. package/assets/img/file-types/eps/020-file-19.eps +0 -137
  486. package/assets/img/file-types/eps/021-file-20.eps +0 -134
  487. package/assets/img/file-types/eps/022-file-21.eps +0 -130
  488. package/assets/img/file-types/eps/023-file-22.eps +0 -161
  489. package/assets/img/file-types/eps/024-file-23.eps +0 -144
  490. package/assets/img/file-types/eps/025-file-24.eps +0 -164
  491. package/assets/img/file-types/eps/026-file-25.eps +0 -135
  492. package/assets/img/file-types/eps/027-file-26.eps +0 -124
  493. package/assets/img/file-types/eps/028-file-27.eps +0 -120
  494. package/assets/img/file-types/eps/029-file-28.eps +0 -141
  495. package/assets/img/file-types/eps/030-file-29.eps +0 -130
  496. package/assets/img/file-types/eps/031-file-30.eps +0 -157
  497. package/assets/img/file-types/eps/032-file-31.eps +0 -139
  498. package/assets/img/file-types/eps/033-file-32.eps +0 -139
  499. package/assets/img/file-types/eps/034-file-33.eps +0 -189
  500. package/assets/img/file-types/eps/035-file-34.eps +0 -162
  501. package/assets/img/file-types/eps/036-file-35.eps +0 -142
  502. package/assets/img/file-types/eps/037-file-36.eps +0 -123
  503. package/assets/img/file-types/eps/038-file-37.eps +0 -127
  504. package/assets/img/file-types/eps/039-file-38.eps +0 -146
  505. package/assets/img/file-types/eps/040-file-39.eps +0 -126
  506. package/assets/img/file-types/eps/041-file-40.eps +0 -117
  507. package/assets/img/file-types/eps/042-file-41.eps +0 -156
  508. package/assets/img/file-types/eps/043-file-42.eps +0 -118
  509. package/assets/img/file-types/eps/044-file-43.eps +0 -172
  510. package/assets/img/file-types/eps/045-file-44.eps +0 -201
  511. package/assets/img/file-types/eps/046-file-45.eps +0 -94
  512. package/assets/img/file-types/eps/047-file-46.eps +0 -176
  513. package/assets/img/file-types/eps/048-file-47.eps +0 -238
  514. package/assets/img/file-types/eps/049-file-48.eps +0 -187
  515. package/assets/img/file-types/eps/050-file-49.eps +0 -137
  516. package/assets/img/file-types/license/license.pdf +0 -0
  517. package/assets/img/file-types/png/3ds.png +0 -0
  518. package/assets/img/file-types/png/ai.png +0 -0
  519. package/assets/img/file-types/png/asp.png +0 -0
  520. package/assets/img/file-types/png/avi.png +0 -0
  521. package/assets/img/file-types/png/bin.png +0 -0
  522. package/assets/img/file-types/png/com.png +0 -0
  523. package/assets/img/file-types/png/css.png +0 -0
  524. package/assets/img/file-types/png/csv.png +0 -0
  525. package/assets/img/file-types/png/dbf.png +0 -0
  526. package/assets/img/file-types/png/dll.png +0 -0
  527. package/assets/img/file-types/png/doc.png +0 -0
  528. package/assets/img/file-types/png/docx.png +0 -0
  529. package/assets/img/file-types/png/dwg.png +0 -0
  530. package/assets/img/file-types/png/eml.png +0 -0
  531. package/assets/img/file-types/png/eps.png +0 -0
  532. package/assets/img/file-types/png/exe.png +0 -0
  533. package/assets/img/file-types/png/file.png +0 -0
  534. package/assets/img/file-types/png/fla.png +0 -0
  535. package/assets/img/file-types/png/gif.png +0 -0
  536. package/assets/img/file-types/png/htm.png +0 -0
  537. package/assets/img/file-types/png/ico.png +0 -0
  538. package/assets/img/file-types/png/ini.png +0 -0
  539. package/assets/img/file-types/png/iso.png +0 -0
  540. package/assets/img/file-types/png/jar.png +0 -0
  541. package/assets/img/file-types/png/jpg.png +0 -0
  542. package/assets/img/file-types/png/js.png +0 -0
  543. package/assets/img/file-types/png/mkv.png +0 -0
  544. package/assets/img/file-types/png/mov.png +0 -0
  545. package/assets/img/file-types/png/mp3.png +0 -0
  546. package/assets/img/file-types/png/mp4.png +0 -0
  547. package/assets/img/file-types/png/nfo.png +0 -0
  548. package/assets/img/file-types/png/obj.png +0 -0
  549. package/assets/img/file-types/png/otf.png +0 -0
  550. package/assets/img/file-types/png/pdf.png +0 -0
  551. package/assets/img/file-types/png/pkg.png +0 -0
  552. package/assets/img/file-types/png/png.png +0 -0
  553. package/assets/img/file-types/png/ppt.png +0 -0
  554. package/assets/img/file-types/png/pptx.png +0 -0
  555. package/assets/img/file-types/png/psd.png +0 -0
  556. package/assets/img/file-types/png/rtf.png +0 -0
  557. package/assets/img/file-types/png/svg.png +0 -0
  558. package/assets/img/file-types/png/tiff.png +0 -0
  559. package/assets/img/file-types/png/ttf.png +0 -0
  560. package/assets/img/file-types/png/txt.png +0 -0
  561. package/assets/img/file-types/png/vcf.png +0 -0
  562. package/assets/img/file-types/png/wav.png +0 -0
  563. package/assets/img/file-types/png/wmv.png +0 -0
  564. package/assets/img/file-types/png/xls.png +0 -0
  565. package/assets/img/file-types/png/xlsx.png +0 -0
  566. package/assets/img/file-types/png/xml.png +0 -0
  567. package/assets/img/file-types/png/zip.png +0 -0
  568. package/assets/img/file-types/psd/001-file.psd +0 -0
  569. package/assets/img/file-types/psd/002-file-1.psd +0 -0
  570. package/assets/img/file-types/psd/003-file-2.psd +0 -0
  571. package/assets/img/file-types/psd/004-file-3.psd +0 -0
  572. package/assets/img/file-types/psd/005-file-4.psd +0 -0
  573. package/assets/img/file-types/psd/006-file-5.psd +0 -0
  574. package/assets/img/file-types/psd/007-file-6.psd +0 -0
  575. package/assets/img/file-types/psd/008-file-7.psd +0 -0
  576. package/assets/img/file-types/psd/009-file-8.psd +0 -0
  577. package/assets/img/file-types/psd/010-file-9.psd +0 -0
  578. package/assets/img/file-types/psd/011-file-10.psd +0 -0
  579. package/assets/img/file-types/psd/012-file-11.psd +0 -0
  580. package/assets/img/file-types/psd/013-file-12.psd +0 -0
  581. package/assets/img/file-types/psd/014-file-13.psd +0 -0
  582. package/assets/img/file-types/psd/015-file-14.psd +0 -0
  583. package/assets/img/file-types/psd/016-file-15.psd +0 -0
  584. package/assets/img/file-types/psd/017-file-16.psd +0 -0
  585. package/assets/img/file-types/psd/018-file-17.psd +0 -0
  586. package/assets/img/file-types/psd/019-file-18.psd +0 -0
  587. package/assets/img/file-types/psd/020-file-19.psd +0 -0
  588. package/assets/img/file-types/psd/021-file-20.psd +0 -0
  589. package/assets/img/file-types/psd/022-file-21.psd +0 -0
  590. package/assets/img/file-types/psd/023-file-22.psd +0 -0
  591. package/assets/img/file-types/psd/024-file-23.psd +0 -0
  592. package/assets/img/file-types/psd/025-file-24.psd +0 -0
  593. package/assets/img/file-types/psd/026-file-25.psd +0 -0
  594. package/assets/img/file-types/psd/027-file-26.psd +0 -0
  595. package/assets/img/file-types/psd/028-file-27.psd +0 -0
  596. package/assets/img/file-types/psd/029-file-28.psd +0 -0
  597. package/assets/img/file-types/psd/030-file-29.psd +0 -0
  598. package/assets/img/file-types/psd/031-file-30.psd +0 -0
  599. package/assets/img/file-types/psd/032-file-31.psd +0 -0
  600. package/assets/img/file-types/psd/033-file-32.psd +0 -0
  601. package/assets/img/file-types/psd/034-file-33.psd +0 -0
  602. package/assets/img/file-types/psd/035-file-34.psd +0 -0
  603. package/assets/img/file-types/psd/036-file-35.psd +0 -0
  604. package/assets/img/file-types/psd/037-file-36.psd +0 -0
  605. package/assets/img/file-types/psd/038-file-37.psd +0 -0
  606. package/assets/img/file-types/psd/039-file-38.psd +0 -0
  607. package/assets/img/file-types/psd/040-file-39.psd +0 -0
  608. package/assets/img/file-types/psd/041-file-40.psd +0 -0
  609. package/assets/img/file-types/psd/042-file-41.psd +0 -0
  610. package/assets/img/file-types/psd/043-file-42.psd +0 -0
  611. package/assets/img/file-types/psd/044-file-43.psd +0 -0
  612. package/assets/img/file-types/psd/045-file-44.psd +0 -0
  613. package/assets/img/file-types/psd/046-file-45.psd +0 -0
  614. package/assets/img/file-types/psd/047-file-46.psd +0 -0
  615. package/assets/img/file-types/psd/048-file-47.psd +0 -0
  616. package/assets/img/file-types/psd/049-file-48.psd +0 -0
  617. package/assets/img/file-types/psd/050-file-49.psd +0 -0
  618. package/assets/img/file-types/svg/001-file.svg +0 -1
  619. package/assets/img/file-types/svg/002-file-1.svg +0 -1
  620. package/assets/img/file-types/svg/003-file-2.svg +0 -1
  621. package/assets/img/file-types/svg/004-file-3.svg +0 -1
  622. package/assets/img/file-types/svg/005-file-4.svg +0 -1
  623. package/assets/img/file-types/svg/006-file-5.svg +0 -1
  624. package/assets/img/file-types/svg/007-file-6.svg +0 -1
  625. package/assets/img/file-types/svg/008-file-7.svg +0 -1
  626. package/assets/img/file-types/svg/009-file-8.svg +0 -1
  627. package/assets/img/file-types/svg/010-file-9.svg +0 -1
  628. package/assets/img/file-types/svg/011-file-10.svg +0 -1
  629. package/assets/img/file-types/svg/012-file-11.svg +0 -1
  630. package/assets/img/file-types/svg/013-file-12.svg +0 -1
  631. package/assets/img/file-types/svg/014-file-13.svg +0 -1
  632. package/assets/img/file-types/svg/015-file-14.svg +0 -1
  633. package/assets/img/file-types/svg/016-file-15.svg +0 -1
  634. package/assets/img/file-types/svg/017-file-16.svg +0 -1
  635. package/assets/img/file-types/svg/018-file-17.svg +0 -1
  636. package/assets/img/file-types/svg/019-file-18.svg +0 -1
  637. package/assets/img/file-types/svg/020-file-19.svg +0 -1
  638. package/assets/img/file-types/svg/021-file-20.svg +0 -1
  639. package/assets/img/file-types/svg/022-file-21.svg +0 -1
  640. package/assets/img/file-types/svg/023-file-22.svg +0 -1
  641. package/assets/img/file-types/svg/024-file-23.svg +0 -1
  642. package/assets/img/file-types/svg/025-file-24.svg +0 -1
  643. package/assets/img/file-types/svg/026-file-25.svg +0 -1
  644. package/assets/img/file-types/svg/027-file-26.svg +0 -1
  645. package/assets/img/file-types/svg/028-file-27.svg +0 -1
  646. package/assets/img/file-types/svg/029-file-28.svg +0 -1
  647. package/assets/img/file-types/svg/030-file-29.svg +0 -1
  648. package/assets/img/file-types/svg/031-file-30.svg +0 -1
  649. package/assets/img/file-types/svg/032-file-31.svg +0 -1
  650. package/assets/img/file-types/svg/033-file-32.svg +0 -1
  651. package/assets/img/file-types/svg/034-file-33.svg +0 -1
  652. package/assets/img/file-types/svg/035-file-34.svg +0 -1
  653. package/assets/img/file-types/svg/036-file-35.svg +0 -1
  654. package/assets/img/file-types/svg/037-file-36.svg +0 -1
  655. package/assets/img/file-types/svg/038-file-37.svg +0 -1
  656. package/assets/img/file-types/svg/039-file-38.svg +0 -1
  657. package/assets/img/file-types/svg/040-file-39.svg +0 -1
  658. package/assets/img/file-types/svg/041-file-40.svg +0 -1
  659. package/assets/img/file-types/svg/042-file-41.svg +0 -1
  660. package/assets/img/file-types/svg/043-file-42.svg +0 -1
  661. package/assets/img/file-types/svg/044-file-43.svg +0 -1
  662. package/assets/img/file-types/svg/045-file-44.svg +0 -1
  663. package/assets/img/file-types/svg/046-file-45.svg +0 -1
  664. package/assets/img/file-types/svg/047-file-46.svg +0 -1
  665. package/assets/img/file-types/svg/048-file-47.svg +0 -1
  666. package/assets/img/file-types/svg/049-file-48.svg +0 -1
  667. package/assets/img/file-types/svg/050-file-49.svg +0 -1
  668. package/assets/img/plus-search-zoom-white.png +0 -0
  669. package/assets/scss/core/cursor.scss +0 -3
  670. package/assets/scss/core/elevation.scss +0 -57
  671. package/assets/scss/core/print.scss +0 -47
  672. package/assets/scss/core/typography.scss +0 -121
  673. package/components/anchor/src/components/anchor-horizontal/anchor-list/anchor-list.component.d.ts +0 -16
  674. package/components/anchor/src/components/anchor-vertical/anchor-list/anchor-list.component.d.ts +0 -17
  675. package/components/anchor/src/components/main/main.component.d.ts +0 -24
  676. package/components/anchor/src/models/anchor.model.d.ts +0 -5
  677. package/components/anchor/src/services/anchor.service.d.ts +0 -12
  678. package/components/anchor/src/services/index.d.ts +0 -1
  679. package/components/anchor-v2/index.d.ts +0 -1
  680. package/components/anchor-v2/src/components/anchor-item-v2/anchor-item-v2.component.d.ts +0 -12
  681. package/components/anchor-v2/src/components/anchor-v2/anchor-v2.component.d.ts +0 -25
  682. package/components/anchor-v2/src/components/anchor-vertical-v2/anchor-vertical-list-v2.component.d.ts +0 -17
  683. package/components/anchor-v2/src/components/index.d.ts +0 -2
  684. package/components/anchor-v2/src/models/index.d.ts +0 -1
  685. package/components/anchor-v2/src/models/sd-anchor-v2.model.d.ts +0 -7
  686. package/components/document-builder/src/plugins/comment/comment.plugin.d.ts +0 -4
  687. package/components/document-builder/src/plugins/table-fit/table-fit.plugin.d.ts +0 -4
  688. package/components/modal/src/modal/modal.component.d.ts +0 -31
  689. package/components/table/src/components/column-filter/column-filter.component.d.ts +0 -40
  690. package/components/table/src/components/desktop-cell-view/desktop-cell-view.component.d.ts +0 -14
  691. package/components/table/src/components/desktop-command/desktop-command.component.d.ts +0 -15
  692. package/components/table/src/components/external-filter/external-filter.component.d.ts +0 -36
  693. package/components/table/src/pipes/command-disable.pipe.d.ts +0 -9
  694. package/components/table/src/pipes/command-filter.pipe.d.ts +0 -25
  695. package/components/table/src/pipes/command-title.pipe.d.ts +0 -9
  696. package/components/workflow/src/components/form-builder/form-builder.component.d.ts +0 -77
  697. package/components/workflow/src/configurations/index.d.ts +0 -1
  698. package/fesm2022/sd-angular-core-components-anchor-v2.mjs +0 -226
  699. package/fesm2022/sd-angular-core-components-anchor-v2.mjs.map +0 -1
  700. package/fesm2022/sd-angular-core-components-workflow.mjs +0 -6400
  701. package/fesm2022/sd-angular-core-components-workflow.mjs.map +0 -1
  702. package/fesm2022/sd-angular-core-guards-permission.mjs +0 -155
  703. package/fesm2022/sd-angular-core-guards-permission.mjs.map +0 -1
  704. package/fesm2022/sd-angular-core-guards.mjs +0 -6
  705. package/fesm2022/sd-angular-core-guards.mjs.map +0 -1
  706. package/fesm2022/sd-angular-core-modules-oidc.mjs +0 -127
  707. package/fesm2022/sd-angular-core-modules-oidc.mjs.map +0 -1
  708. package/fesm2022/sd-angular-core-services-firebase.mjs +0 -38
  709. package/fesm2022/sd-angular-core-services-firebase.mjs.map +0 -1
  710. package/guards/index.d.ts +0 -1
  711. package/guards/permission/index.d.ts +0 -4
  712. package/guards/permission/src/configurations/index.d.ts +0 -1
  713. package/guards/permission/src/configurations/permission.configuration.d.ts +0 -8
  714. package/guards/permission/src/directives/index.d.ts +0 -1
  715. package/guards/permission/src/directives/permission.directive.d.ts +0 -12
  716. package/guards/permission/src/guards/index.d.ts +0 -1
  717. package/guards/permission/src/guards/permission.guard.d.ts +0 -13
  718. package/guards/permission/src/services/index.d.ts +0 -1
  719. package/guards/permission/src/services/permission.service.d.ts +0 -15
  720. package/modules/oidc/dynamic-sts.loader.d.ts +0 -11
  721. package/modules/oidc/index.d.ts +0 -2
  722. package/modules/oidc/oidc.configuration.d.ts +0 -11
  723. package/modules/oidc/oidc.module.d.ts +0 -14
  724. package/sd-angular-core-19.0.0-beta.10.tgz +0 -0
  725. package/services/firebase/index.d.ts +0 -2
  726. package/services/firebase/src/firebase.model.d.ts +0 -8
  727. package/services/firebase/src/firebase.service.d.ts +0 -14
  728. /package/components/{anchor-v2 → anchor}/src/index.d.ts +0 -0
  729. /package/components/{workflow → form-generic}/index.d.ts +0 -0
  730. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-expression/attribute-expression.component.d.ts +0 -0
  731. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-input/attribute-input.component.d.ts +0 -0
  732. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-input-number/attribute-input-number.component.d.ts +0 -0
  733. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-parameter/attribute-parameter.component.d.ts +0 -0
  734. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-select/attribute-select.component.d.ts +0 -0
  735. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-selection/attribute-selection.component.d.ts +0 -0
  736. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-selection/components/build-queries/build-queries.component.d.ts +0 -0
  737. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-selection/components/build-variables/build-variables.component.d.ts +0 -0
  738. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-switch/attribute-switch.component.d.ts +0 -0
  739. /package/components/{workflow → form-generic}/src/components/form-builder/components/attribute-textarea/attribute-textarea.component.d.ts +0 -0
  740. /package/components/{workflow → form-generic}/src/components/form-builder/components/checkbox/attribute/checkbox-attribute.component.d.ts +0 -0
  741. /package/components/{workflow → form-generic}/src/components/form-builder/components/checkbox/control/checkbox-control.component.d.ts +0 -0
  742. /package/components/{workflow → form-generic}/src/components/form-builder/components/checkbox/index.d.ts +0 -0
  743. /package/components/{workflow → form-generic}/src/components/form-builder/components/chip-calendar/attribute/chip-calendar-attribute.component.d.ts +0 -0
  744. /package/components/{workflow → form-generic}/src/components/form-builder/components/chip-calendar/control/chip-calendar-control.component.d.ts +0 -0
  745. /package/components/{workflow → form-generic}/src/components/form-builder/components/chip-calendar/index.d.ts +0 -0
  746. /package/components/{workflow → form-generic}/src/components/form-builder/components/chip-string/attribute/chip-string-attribute.component.d.ts +0 -0
  747. /package/components/{workflow → form-generic}/src/components/form-builder/components/chip-string/control/chip-string-control.component.d.ts +0 -0
  748. /package/components/{workflow → form-generic}/src/components/form-builder/components/chip-string/index.d.ts +0 -0
  749. /package/components/{workflow → form-generic}/src/components/form-builder/components/datetime/attribute/datetime-attribute.component.d.ts +0 -0
  750. /package/components/{workflow → form-generic}/src/components/form-builder/components/datetime/control/datetime-control.component.d.ts +0 -0
  751. /package/components/{workflow → form-generic}/src/components/form-builder/components/datetime/index.d.ts +0 -0
  752. /package/components/{workflow → form-generic}/src/components/form-builder/components/html/attribute/components/build-queries/build-queries.component.d.ts +0 -0
  753. /package/components/{workflow → form-generic}/src/components/form-builder/components/html/attribute/html-attribute.component.d.ts +0 -0
  754. /package/components/{workflow → form-generic}/src/components/form-builder/components/html/control/html-control.component.d.ts +0 -0
  755. /package/components/{workflow → form-generic}/src/components/form-builder/components/html/index.d.ts +0 -0
  756. /package/components/{workflow → form-generic}/src/components/form-builder/components/number/attribute/number-attribute.component.d.ts +0 -0
  757. /package/components/{workflow → form-generic}/src/components/form-builder/components/number/control/number-control.component.d.ts +0 -0
  758. /package/components/{workflow → form-generic}/src/components/form-builder/components/number/index.d.ts +0 -0
  759. /package/components/{workflow → form-generic}/src/components/form-builder/components/radio/attribute/radio-attribute.component.d.ts +0 -0
  760. /package/components/{workflow → form-generic}/src/components/form-builder/components/radio/control/radio-control.component.d.ts +0 -0
  761. /package/components/{workflow → form-generic}/src/components/form-builder/components/radio/index.d.ts +0 -0
  762. /package/components/{workflow → form-generic}/src/components/form-builder/components/select/attribute/select-attribute.component.d.ts +0 -0
  763. /package/components/{workflow → form-generic}/src/components/form-builder/components/select/control/select-control.component.d.ts +0 -0
  764. /package/components/{workflow → form-generic}/src/components/form-builder/components/select/index.d.ts +0 -0
  765. /package/components/{workflow → form-generic}/src/components/form-builder/components/table/attribute/table-attribute.component.d.ts +0 -0
  766. /package/components/{workflow → form-generic}/src/components/form-builder/components/table/index.d.ts +0 -0
  767. /package/components/{workflow → form-generic}/src/components/form-builder/components/textarea/attribute/textarea-attribute.component.d.ts +0 -0
  768. /package/components/{workflow → form-generic}/src/components/form-builder/components/textarea/control/textarea-control.component.d.ts +0 -0
  769. /package/components/{workflow → form-generic}/src/components/form-builder/components/textarea/index.d.ts +0 -0
  770. /package/components/{workflow → form-generic}/src/components/form-builder/components/textfield/attribute/textfield-attribute.component.d.ts +0 -0
  771. /package/components/{workflow → form-generic}/src/components/form-builder/components/textfield/control/textfield-control.component.d.ts +0 -0
  772. /package/components/{workflow → form-generic}/src/components/form-builder/components/textfield/index.d.ts +0 -0
  773. /package/components/{workflow → form-generic}/src/components/form-builder/components/upload/attribute/upload-attribute.component.d.ts +0 -0
  774. /package/components/{workflow → form-generic}/src/components/form-builder/components/upload/control/upload-control.component.d.ts +0 -0
  775. /package/components/{workflow → form-generic}/src/components/form-builder/components/upload/index.d.ts +0 -0
  776. /package/components/{workflow → form-generic}/src/components/form-builder/services/builder.service.d.ts +0 -0
  777. /package/components/{workflow → form-generic}/src/components/form-builder/services/index.d.ts +0 -0
  778. /package/components/{workflow → form-generic}/src/components/form-render/components/index.d.ts +0 -0
  779. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/chip-calendar/chip-calendar.component.d.ts +0 -0
  780. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/chip-string/chip-string.component.d.ts +0 -0
  781. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/datetime/datetime.component.d.ts +0 -0
  782. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/html/html.component.d.ts +0 -0
  783. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/index.d.ts +0 -0
  784. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/number/number.component.d.ts +0 -0
  785. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/radio/radio.component.d.ts +0 -0
  786. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/select/select.component.d.ts +0 -0
  787. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/table/table.component.d.ts +0 -0
  788. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/textarea/textarea.component.d.ts +0 -0
  789. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/textfield/textfield.component.d.ts +0 -0
  790. /package/components/{workflow → form-generic}/src/components/form-render/components/item/components/upload/upload.component.d.ts +0 -0
  791. /package/components/{workflow → form-generic}/src/components/form-render/components/item/item.component.d.ts +0 -0
  792. /package/components/{workflow → form-generic}/src/components/form-render/components/variable/variable.component.d.ts +0 -0
  793. /package/components/{workflow → form-generic}/src/components/index.d.ts +0 -0
  794. /package/components/{workflow → form-generic}/src/configurations/form.configuration.d.ts +0 -0
  795. /package/components/{workflow → form-generic}/src/models/form-generic-definition-html.model.d.ts +0 -0
  796. /package/components/{workflow → form-generic}/src/models/form-generic-definition-selection.model.d.ts +0 -0
  797. /package/components/{workflow → form-generic}/src/models/form-generic-definition-table.model.d.ts +0 -0
  798. /package/components/{workflow → form-generic}/src/models/form-generic-template.model.d.ts +0 -0
  799. /package/components/{workflow → form-generic}/src/models/form-generic-validation.model.d.ts +0 -0
  800. /package/components/{workflow → form-generic}/src/models/form-generic.model.d.ts +0 -0
  801. /package/components/{workflow → form-generic}/src/models/form-render/form-render-args.model.d.ts +0 -0
  802. /package/components/{workflow → form-generic}/src/models/form-render/form-render-entity.model.d.ts +0 -0
  803. /package/components/{workflow → form-generic}/src/models/form-render/index.d.ts +0 -0
  804. /package/components/{workflow → form-generic}/src/models/index.d.ts +0 -0
  805. /package/components/{workflow → form-generic}/src/pipes/component-viewed.pipe.d.ts +0 -0
  806. /package/components/{workflow → form-generic}/src/pipes/expression-feel.pipe.d.ts +0 -0
  807. /package/components/{workflow → form-generic}/src/pipes/expression-query.pipe.d.ts +0 -0
  808. /package/components/{workflow → form-generic}/src/pipes/expression-view.pipe.d.ts +0 -0
  809. /package/components/{workflow → form-generic}/src/pipes/hyperlink.pipe.d.ts +0 -0
  810. /package/components/{workflow → form-generic}/src/pipes/index.d.ts +0 -0
  811. /package/components/{workflow → form-generic}/src/pipes/when-expression.pipe.d.ts +0 -0
  812. /package/components/{workflow → form-generic}/src/services/form-render.service.d.ts +0 -0
  813. /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`;
58
+ catch { /* ignore */ }
59
+ return 'vi';
689
60
  };
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,
750
- };
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,77 +374,18 @@ const SdUtilities = {
1082
374
  hash,
1083
375
  parseQueryParams,
1084
376
  getClientPublicIp,
1085
- generateUuid
377
+ generateUuid,
378
+ getNestedValue
1086
379
  };
1087
380
 
1088
- /**
1089
- * Color Utilities Extension
1090
- * Các tiện ích xử màu
1091
- */
1092
- /**
1093
- * Chuyển đổi màu HSL sang định dạng hex
1094
- * @param h - Hue (0-360)
1095
- * @param s - Saturation (0-100)
1096
- * @param l - Lightness (0-100)
1097
- * @returns Mã màu hex
1098
- */
1099
- function hslToHex(h, s, l) {
1100
- // Chuyển đổi sang định dạng 0-1
1101
- const hNormalized = h / 360;
1102
- const sNormalized = s / 100;
1103
- const lNormalized = l / 100;
1104
- let r, g, b;
1105
- if (sNormalized === 0) {
1106
- // Màu xám (grayscale)
1107
- r = g = b = lNormalized;
1108
- }
1109
- else {
1110
- const hue2rgb = (p, q, t) => {
1111
- if (t < 0)
1112
- t += 1;
1113
- if (t > 1)
1114
- t -= 1;
1115
- if (t < 1 / 6)
1116
- return p + (q - p) * 6 * t;
1117
- if (t < 1 / 2)
1118
- return q;
1119
- if (t < 2 / 3)
1120
- return p + (q - p) * (2 / 3 - t) * 6;
1121
- return p;
1122
- };
1123
- const q = lNormalized < 0.5
1124
- ? lNormalized * (1 + sNormalized)
1125
- : lNormalized + sNormalized - lNormalized * sNormalized;
1126
- const p = 2 * lNormalized - q;
1127
- r = hue2rgb(p, q, hNormalized + 1 / 3);
1128
- g = hue2rgb(p, q, hNormalized);
1129
- b = hue2rgb(p, q, hNormalized - 1 / 3);
1130
- }
1131
- // Chuyển đổi sang hex
1132
- const toHex = (x) => {
1133
- const hex = Math.round(x * 255).toString(16);
1134
- return hex.length === 1 ? '0' + hex : hex;
1135
- };
1136
- return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
1137
- }
1138
- /**
1139
- * Chuyển đổi màu RGB sang hex
1140
- * @param r - Red (0-255)
1141
- * @param g - Green (0-255)
1142
- * @param b - Blue (0-255)
1143
- * @returns Mã màu hex
1144
- */
1145
- function rgbToHex(r, g, b) {
1146
- const toHex = (x) => {
1147
- const hex = Math.round(Math.max(0, Math.min(255, x))).toString(16);
1148
- return hex.length === 1 ? '0' + hex : hex;
1149
- };
1150
- return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
1151
- }
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;
1152
385
 
1153
386
  /**
1154
387
  * Generated bundle index. Do not edit.
1155
388
  */
1156
389
 
1157
- export { ArrayUtilities, DateUtilities, NumberUtilities, SdUtilities, StringUtilities, hslToHex, rgbToHex };
390
+ export { SdUtilities, StringUtilities, hslToHex, rgbToHex };
1158
391
  //# sourceMappingURL=sd-angular-core-utilities-extensions.mjs.map