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

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