@sdcorejs/angular 19.1.2 → 19.1.4

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 (343) hide show
  1. package/README.md +127 -807
  2. package/components/anchor/src/index.d.ts +1 -1
  3. package/components/anchor/src/models/index.d.ts +1 -1
  4. package/components/audit-diff/index.d.ts +2 -0
  5. package/components/audit-diff/src/audit-diff.component.d.ts +30 -0
  6. package/components/audit-diff/src/audit-diff.engine.d.ts +40 -0
  7. package/components/badge/src/badge.component.d.ts +1 -1
  8. package/components/breadcrumb/index.d.ts +1 -0
  9. package/components/breadcrumb/src/breadcrumb.component.d.ts +50 -0
  10. package/components/data-state/index.d.ts +1 -0
  11. package/components/data-state/src/data-state.component.d.ts +40 -0
  12. package/components/document-builder/index.d.ts +2 -2
  13. package/components/document-builder/src/components/header-footer-builder/header-footer-builder.component.d.ts +1 -2
  14. package/components/document-builder/src/document-builder.component.d.ts +4 -4
  15. package/components/document-builder/src/plugins/index.d.ts +1 -1
  16. package/components/editor/index.d.ts +1 -1
  17. package/components/editor/src/models/index.d.ts +2 -2
  18. package/components/form-generic/src/components/form-builder/components/attribute-expression/attribute-expression.component.d.ts +7 -8
  19. package/components/form-generic/src/components/form-builder/components/attribute-input/attribute-input.component.d.ts +4 -5
  20. package/components/form-generic/src/components/form-builder/components/attribute-input-number/attribute-input-number.component.d.ts +1 -2
  21. package/components/form-generic/src/components/form-builder/components/attribute-parameter/attribute-parameter.component.d.ts +6 -5
  22. package/components/form-generic/src/components/form-builder/components/attribute-select/attribute-select.component.d.ts +4 -5
  23. package/components/form-generic/src/components/form-builder/components/attribute-selection/attribute-selection.component.d.ts +9 -9
  24. package/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-queries/build-queries.component.d.ts +8 -7
  25. package/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-variables/build-variables.component.d.ts +8 -7
  26. package/components/form-generic/src/components/form-builder/components/attribute-switch/attribute-switch.component.d.ts +3 -4
  27. package/components/form-generic/src/components/form-builder/components/attribute-table/attribute-table.component.d.ts +5 -6
  28. package/components/form-generic/src/components/form-builder/components/attribute-template/attribute-template.component.d.ts +1 -2
  29. package/components/form-generic/src/components/form-builder/components/attribute-textarea/attribute-textarea.component.d.ts +4 -5
  30. package/components/form-generic/src/components/form-builder/components/checkbox/attribute/checkbox-attribute.component.d.ts +6 -6
  31. package/components/form-generic/src/components/form-builder/components/chip-calendar/attribute/chip-calendar-attribute.component.d.ts +6 -6
  32. package/components/form-generic/src/components/form-builder/components/chip-calendar/control/chip-calendar-control.component.d.ts +3 -3
  33. package/components/form-generic/src/components/form-builder/components/chip-string/attribute/chip-string-attribute.component.d.ts +6 -6
  34. package/components/form-generic/src/components/form-builder/components/chip-string/control/chip-string-control.component.d.ts +3 -3
  35. package/components/form-generic/src/components/form-builder/components/configure-validation/configure-validation.component.d.ts +2 -2
  36. package/components/form-generic/src/components/form-builder/components/datetime/attribute/datetime-attribute.component.d.ts +6 -6
  37. package/components/form-generic/src/components/form-builder/components/datetime/control/datetime-control.component.d.ts +3 -3
  38. package/components/form-generic/src/components/form-builder/components/expression-builder/expression-builder.component.d.ts +6 -5
  39. package/components/form-generic/src/components/form-builder/components/html/attribute/components/build-queries/build-queries.component.d.ts +7 -6
  40. package/components/form-generic/src/components/form-builder/components/html/attribute/html-attribute.component.d.ts +7 -8
  41. package/components/form-generic/src/components/form-builder/components/html/control/html-control.component.d.ts +3 -4
  42. package/components/form-generic/src/components/form-builder/components/number/attribute/number-attribute.component.d.ts +6 -6
  43. package/components/form-generic/src/components/form-builder/components/number/control/number-control.component.d.ts +3 -3
  44. package/components/form-generic/src/components/form-builder/components/radio/attribute/radio-attribute.component.d.ts +6 -6
  45. package/components/form-generic/src/components/form-builder/components/radio/control/radio-control.component.d.ts +3 -3
  46. package/components/form-generic/src/components/form-builder/components/select/attribute/select-attribute.component.d.ts +6 -6
  47. package/components/form-generic/src/components/form-builder/components/select/control/select-control.component.d.ts +3 -3
  48. package/components/form-generic/src/components/form-builder/components/table/attribute/table-attribute.component.d.ts +6 -6
  49. package/components/form-generic/src/components/form-builder/components/table/control/table-control.component.d.ts +3 -3
  50. package/components/form-generic/src/components/form-builder/components/textarea/attribute/textarea-attribute.component.d.ts +6 -6
  51. package/components/form-generic/src/components/form-builder/components/textarea/control/textarea-control.component.d.ts +3 -3
  52. package/components/form-generic/src/components/form-builder/components/textfield/attribute/textfield-attribute.component.d.ts +6 -6
  53. package/components/form-generic/src/components/form-builder/components/textfield/control/textfield-control.component.d.ts +3 -3
  54. package/components/form-generic/src/components/form-builder/components/upload/attribute/upload-attribute.component.d.ts +6 -6
  55. package/components/form-generic/src/components/form-builder/components/upload/control/upload-control.component.d.ts +3 -3
  56. package/components/form-generic/src/components/form-builder/form-builder.component.d.ts +25 -2
  57. package/components/form-generic/src/components/form-render/components/item/components/chip-calendar/chip-calendar.component.d.ts +7 -6
  58. package/components/form-generic/src/components/form-render/components/item/components/chip-string/chip-string.component.d.ts +7 -6
  59. package/components/form-generic/src/components/form-render/components/item/components/datetime/datetime.component.d.ts +7 -7
  60. package/components/form-generic/src/components/form-render/components/item/components/html/html.component.d.ts +6 -6
  61. package/components/form-generic/src/components/form-render/components/item/components/number/number.component.d.ts +7 -6
  62. package/components/form-generic/src/components/form-render/components/item/components/radio/radio.component.d.ts +6 -7
  63. package/components/form-generic/src/components/form-render/components/item/components/select/select.component.d.ts +6 -7
  64. package/components/form-generic/src/components/form-render/components/item/components/table/table.component.d.ts +8 -8
  65. package/components/form-generic/src/components/form-render/components/item/components/textarea/textarea.component.d.ts +7 -6
  66. package/components/form-generic/src/components/form-render/components/item/components/textfield/textfield.component.d.ts +7 -6
  67. package/components/form-generic/src/components/form-render/components/item/components/upload/upload.component.d.ts +7 -6
  68. package/components/form-generic/src/components/form-render/components/item/item.component.d.ts +4 -4
  69. package/components/form-generic/src/components/sd-feel-expression/sd-feel-expression.component.d.ts +8 -9
  70. package/components/form-generic/src/configurations/index.d.ts +1 -1
  71. package/components/form-generic/src/models/form-render/index.d.ts +2 -2
  72. package/components/form-generic/src/models/index.d.ts +6 -6
  73. package/components/form-generic/src/pipes/component-viewed.pipe.d.ts +2 -3
  74. package/components/form-generic/src/pipes/html.pipe.d.ts +2 -2
  75. package/components/form-generic/src/services/form-render.service.d.ts +2 -2
  76. package/components/import-excel/index.d.ts +1 -1
  77. package/components/import-excel/src/import-excel.component.d.ts +4 -7
  78. package/components/import-excel/src/pipes/column-transform.pipe.d.ts +3 -2
  79. package/components/index.d.ts +4 -0
  80. package/components/job-progress/index.d.ts +1 -0
  81. package/components/job-progress/src/job-progress.component.d.ts +34 -0
  82. package/components/mini-editor/index.d.ts +1 -1
  83. package/components/mini-editor/src/mini-editor.component.d.ts +7 -7
  84. package/components/modal/src/modal.component.d.ts +6 -1
  85. package/components/org-chart/index.d.ts +1 -1
  86. package/components/preview/index.d.ts +5 -2
  87. package/components/preview/src/preview-pdf/preview-pdf.browser.d.ts +28 -0
  88. package/components/preview/src/preview-pdf/preview-pdf.component.d.ts +61 -23
  89. package/components/preview/src/preview-pdf/preview-pdf.pdfjs.d.ts +77 -0
  90. package/components/preview/src/preview-pdf/preview-pdf.print.d.ts +10 -0
  91. package/components/preview/src/preview-pdf/preview-pdf.types.d.ts +11 -9
  92. package/components/side-drawer/src/side-drawer.component.d.ts +6 -1
  93. package/components/tab/src/tab-group.component.d.ts +1 -0
  94. package/components/tab/src/tab.component.d.ts +7 -1
  95. package/components/tab-router/src/components/tab-router-item/tab-router-item.component.d.ts +3 -4
  96. package/components/tab-router/src/pipes/tab-info.pipe.d.ts +2 -2
  97. package/components/tab-router/src/services/tab-decorator.service.d.ts +2 -1
  98. package/components/table/index.d.ts +1 -1
  99. package/components/table/src/components/filter/column-filter/column-filter.component.d.ts +1 -1
  100. package/components/table/src/components/popup-export/popup-export.component.d.ts +6 -6
  101. package/components/table/src/models/index.d.ts +4 -4
  102. package/components/table/src/models/table-column.model.d.ts +1 -1
  103. package/components/table/src/services/config.service.d.ts +3 -2
  104. package/components/table/src/services/table-filter/table-filter.model.d.ts +1 -1
  105. package/components/table/src/services/table-filter/table-filter.service.d.ts +2 -2
  106. package/components/tree/index.d.ts +1 -1
  107. package/components/tree/src/tree.component.d.ts +13 -2
  108. package/components/tree/src/tree.model.d.ts +11 -0
  109. package/components/upload-file/src/components/preview/preview.component.d.ts +4 -4
  110. package/directives/src/sd-hover-copy.directive.d.ts +6 -5
  111. package/directives/src/sd-href.directive.d.ts +2 -2
  112. package/directives/src/sd-scroll.directive.d.ts +3 -2
  113. package/fesm2022/sdcorejs-angular-components-anchor.mjs +14 -14
  114. package/fesm2022/sdcorejs-angular-components-anchor.mjs.map +1 -1
  115. package/fesm2022/sdcorejs-angular-components-audit-diff.mjs +332 -0
  116. package/fesm2022/sdcorejs-angular-components-audit-diff.mjs.map +1 -0
  117. package/fesm2022/sdcorejs-angular-components-badge.mjs +1 -0
  118. package/fesm2022/sdcorejs-angular-components-badge.mjs.map +1 -1
  119. package/fesm2022/sdcorejs-angular-components-breadcrumb.mjs +121 -0
  120. package/fesm2022/sdcorejs-angular-components-breadcrumb.mjs.map +1 -0
  121. package/fesm2022/sdcorejs-angular-components-data-state.mjs +68 -0
  122. package/fesm2022/sdcorejs-angular-components-data-state.mjs.map +1 -0
  123. package/fesm2022/sdcorejs-angular-components-document-builder.mjs +16 -21
  124. package/fesm2022/sdcorejs-angular-components-document-builder.mjs.map +1 -1
  125. package/fesm2022/sdcorejs-angular-components-editor.mjs +6 -4
  126. package/fesm2022/sdcorejs-angular-components-editor.mjs.map +1 -1
  127. package/fesm2022/sdcorejs-angular-components-form-generic.mjs +600 -853
  128. package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
  129. package/fesm2022/sdcorejs-angular-components-import-excel.mjs +25 -40
  130. package/fesm2022/sdcorejs-angular-components-import-excel.mjs.map +1 -1
  131. package/fesm2022/sdcorejs-angular-components-job-progress.mjs +97 -0
  132. package/fesm2022/sdcorejs-angular-components-job-progress.mjs.map +1 -0
  133. package/fesm2022/sdcorejs-angular-components-mini-editor.mjs +9 -19
  134. package/fesm2022/sdcorejs-angular-components-mini-editor.mjs.map +1 -1
  135. package/fesm2022/sdcorejs-angular-components-modal.mjs +60 -3
  136. package/fesm2022/sdcorejs-angular-components-modal.mjs.map +1 -1
  137. package/fesm2022/sdcorejs-angular-components-preview.mjs +1437 -217
  138. package/fesm2022/sdcorejs-angular-components-preview.mjs.map +1 -1
  139. package/fesm2022/sdcorejs-angular-components-query-bar.mjs +9 -17
  140. package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
  141. package/fesm2022/sdcorejs-angular-components-query-builder.mjs +1 -1
  142. package/fesm2022/sdcorejs-angular-components-query-builder.mjs.map +1 -1
  143. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs +38 -1
  144. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs.map +1 -1
  145. package/fesm2022/sdcorejs-angular-components-tab-router.mjs +76 -52
  146. package/fesm2022/sdcorejs-angular-components-tab-router.mjs.map +1 -1
  147. package/fesm2022/sdcorejs-angular-components-tab.mjs +47 -3
  148. package/fesm2022/sdcorejs-angular-components-tab.mjs.map +1 -1
  149. package/fesm2022/sdcorejs-angular-components-table.mjs +121 -87
  150. package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
  151. package/fesm2022/sdcorejs-angular-components-tree.mjs +187 -17
  152. package/fesm2022/sdcorejs-angular-components-tree.mjs.map +1 -1
  153. package/fesm2022/sdcorejs-angular-components-upload-file.mjs +16 -22
  154. package/fesm2022/sdcorejs-angular-components-upload-file.mjs.map +1 -1
  155. package/fesm2022/sdcorejs-angular-components.mjs +4 -0
  156. package/fesm2022/sdcorejs-angular-components.mjs.map +1 -1
  157. package/fesm2022/sdcorejs-angular-directives.mjs +29 -41
  158. package/fesm2022/sdcorejs-angular-directives.mjs.map +1 -1
  159. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +9 -8
  160. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
  161. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs +20 -73
  162. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs.map +1 -1
  163. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs +8 -4
  164. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs.map +1 -1
  165. package/fesm2022/sdcorejs-angular-forms-chip.mjs +8 -4
  166. package/fesm2022/sdcorejs-angular-forms-chip.mjs.map +1 -1
  167. package/fesm2022/sdcorejs-angular-forms-date-range.mjs +18 -14
  168. package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
  169. package/fesm2022/sdcorejs-angular-forms-date.mjs +48 -70
  170. package/fesm2022/sdcorejs-angular-forms-date.mjs.map +1 -1
  171. package/fesm2022/sdcorejs-angular-forms-datetime.mjs +63 -529
  172. package/fesm2022/sdcorejs-angular-forms-datetime.mjs.map +1 -1
  173. package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs +384 -0
  174. package/fesm2022/sdcorejs-angular-forms-entity-picker.mjs.map +1 -0
  175. package/fesm2022/sdcorejs-angular-forms-input-color.mjs +4 -2
  176. package/fesm2022/sdcorejs-angular-forms-input-color.mjs.map +1 -1
  177. package/fesm2022/sdcorejs-angular-forms-input-number.mjs +15 -10
  178. package/fesm2022/sdcorejs-angular-forms-input-number.mjs.map +1 -1
  179. package/fesm2022/sdcorejs-angular-forms-input.mjs +296 -58
  180. package/fesm2022/sdcorejs-angular-forms-input.mjs.map +1 -1
  181. package/fesm2022/sdcorejs-angular-forms-models.mjs +155 -2
  182. package/fesm2022/sdcorejs-angular-forms-models.mjs.map +1 -1
  183. package/fesm2022/sdcorejs-angular-forms-radio.mjs +44 -68
  184. package/fesm2022/sdcorejs-angular-forms-radio.mjs.map +1 -1
  185. package/fesm2022/sdcorejs-angular-forms-select.mjs +8 -21
  186. package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
  187. package/fesm2022/sdcorejs-angular-forms-switch.mjs +19 -66
  188. package/fesm2022/sdcorejs-angular-forms-switch.mjs.map +1 -1
  189. package/fesm2022/sdcorejs-angular-forms-textarea.mjs +8 -6
  190. package/fesm2022/sdcorejs-angular-forms-textarea.mjs.map +1 -1
  191. package/fesm2022/sdcorejs-angular-forms-time-range.mjs +279 -0
  192. package/fesm2022/sdcorejs-angular-forms-time-range.mjs.map +1 -0
  193. package/fesm2022/sdcorejs-angular-forms-time.mjs +309 -0
  194. package/fesm2022/sdcorejs-angular-forms-time.mjs.map +1 -0
  195. package/fesm2022/sdcorejs-angular-forms-tree-select.mjs +210 -0
  196. package/fesm2022/sdcorejs-angular-forms-tree-select.mjs.map +1 -0
  197. package/fesm2022/sdcorejs-angular-forms.mjs +73 -4
  198. package/fesm2022/sdcorejs-angular-forms.mjs.map +1 -1
  199. package/fesm2022/sdcorejs-angular-i18n.mjs +355 -10
  200. package/fesm2022/sdcorejs-angular-i18n.mjs.map +1 -1
  201. package/fesm2022/sdcorejs-angular-interceptors.mjs +12 -17
  202. package/fesm2022/sdcorejs-angular-interceptors.mjs.map +1 -1
  203. package/fesm2022/sdcorejs-angular-modules-icon.mjs.map +1 -1
  204. package/fesm2022/sdcorejs-angular-modules-layout.mjs +859 -78
  205. package/fesm2022/sdcorejs-angular-modules-layout.mjs.map +1 -1
  206. package/fesm2022/sdcorejs-angular-modules.mjs +0 -1
  207. package/fesm2022/sdcorejs-angular-modules.mjs.map +1 -1
  208. package/fesm2022/sdcorejs-angular-pipes.mjs +5 -7
  209. package/fesm2022/sdcorejs-angular-pipes.mjs.map +1 -1
  210. package/fesm2022/sdcorejs-angular-services-api.mjs +407 -137
  211. package/fesm2022/sdcorejs-angular-services-api.mjs.map +1 -1
  212. package/fesm2022/sdcorejs-angular-services-cache.mjs +515 -105
  213. package/fesm2022/sdcorejs-angular-services-cache.mjs.map +1 -1
  214. package/fesm2022/sdcorejs-angular-services-confirm.mjs +5 -7
  215. package/fesm2022/sdcorejs-angular-services-confirm.mjs.map +1 -1
  216. package/fesm2022/sdcorejs-angular-services-docx.mjs +7 -10
  217. package/fesm2022/sdcorejs-angular-services-docx.mjs.map +1 -1
  218. package/fesm2022/sdcorejs-angular-services-loading.mjs +340 -66
  219. package/fesm2022/sdcorejs-angular-services-loading.mjs.map +1 -1
  220. package/fesm2022/sdcorejs-angular-services-notify.mjs +7 -10
  221. package/fesm2022/sdcorejs-angular-services-notify.mjs.map +1 -1
  222. package/fesm2022/sdcorejs-angular-services-persistence.mjs +899 -0
  223. package/fesm2022/sdcorejs-angular-services-persistence.mjs.map +1 -0
  224. package/fesm2022/sdcorejs-angular-services-storage.mjs +324 -122
  225. package/fesm2022/sdcorejs-angular-services-storage.mjs.map +1 -1
  226. package/fesm2022/sdcorejs-angular-services-task.mjs +389 -0
  227. package/fesm2022/sdcorejs-angular-services-task.mjs.map +1 -0
  228. package/fesm2022/sdcorejs-angular-services-unsaved-changes.mjs +255 -0
  229. package/fesm2022/sdcorejs-angular-services-unsaved-changes.mjs.map +1 -0
  230. package/fesm2022/sdcorejs-angular-services-viewport.mjs +76 -0
  231. package/fesm2022/sdcorejs-angular-services-viewport.mjs.map +1 -0
  232. package/fesm2022/sdcorejs-angular-services.mjs +4 -0
  233. package/fesm2022/sdcorejs-angular-services.mjs.map +1 -1
  234. package/forms/autocomplete/src/autocomplete.component.d.ts +3 -4
  235. package/forms/checkbox/src/checkbox.component.d.ts +4 -8
  236. package/forms/date/src/date.component.d.ts +4 -3
  237. package/forms/date-range/src/date-range.component.d.ts +5 -8
  238. package/forms/datetime/src/datetime.component.d.ts +4 -3
  239. package/forms/entity-picker/index.d.ts +1 -0
  240. package/forms/entity-picker/src/entity-picker.component.d.ts +123 -0
  241. package/forms/index.d.ts +6 -0
  242. package/forms/input/index.d.ts +1 -0
  243. package/forms/input/src/input-mask.d.ts +43 -0
  244. package/forms/input/src/input.component.d.ts +28 -9
  245. package/forms/input-color/src/input-color.component.d.ts +3 -1
  246. package/forms/input-number/src/input-number.component.d.ts +4 -2
  247. package/forms/models/index.d.ts +3 -2
  248. package/forms/models/src/sd-form-control-connector.d.ts +86 -0
  249. package/forms/radio/src/radio.component.d.ts +12 -8
  250. package/forms/src/forms.module.d.ts +9 -5
  251. package/forms/switch/src/switch.component.d.ts +4 -7
  252. package/forms/time/index.d.ts +3 -0
  253. package/forms/time/src/time-picker.adapter.d.ts +13 -0
  254. package/forms/time/src/time-value.d.ts +19 -0
  255. package/forms/time/src/time.component.d.ts +78 -0
  256. package/forms/time-range/index.d.ts +2 -0
  257. package/forms/time-range/src/time-range-value.d.ts +14 -0
  258. package/forms/time-range/src/time-range.component.d.ts +80 -0
  259. package/forms/tree-select/index.d.ts +1 -0
  260. package/forms/tree-select/src/tree-select.component.d.ts +71 -0
  261. package/i18n/src/en.d.ts +68 -2
  262. package/interceptors/no-internet/no-internet.interceptor.d.ts +2 -3
  263. package/interceptors/unauthorized/unauthorized.interceptor.d.ts +2 -2
  264. package/modules/auth/services/index.d.ts +1 -1
  265. package/modules/icon/src/icon.model.d.ts +1 -2
  266. package/modules/icon/src/icon.provider.d.ts +1 -1
  267. package/modules/index.d.ts +0 -1
  268. package/modules/layout/components/index.d.ts +6 -0
  269. package/modules/layout/components/layout-main/layout-main.component.d.ts +7 -2
  270. package/modules/layout/components/shared/menu-tree/menu-tree.component.d.ts +28 -0
  271. package/modules/layout/components/shared/user-menu/user-menu.component.d.ts +25 -0
  272. package/modules/layout/components/sidebar-mobile-v2/main.component.d.ts +27 -0
  273. package/modules/layout/components/sidebar-mobile-v3/main.component.d.ts +28 -0
  274. package/modules/layout/components/sidebar-v1/components/sidebar/sidebar.component.d.ts +3 -4
  275. package/modules/layout/components/sidebar-v1/main.component.d.ts +2 -2
  276. package/modules/layout/components/sidebar-v2/main.component.d.ts +36 -0
  277. package/modules/layout/components/sidebar-v3/main.component.d.ts +29 -0
  278. package/modules/layout/configurations/layout.configuration.d.ts +36 -2
  279. package/modules/layout/index.d.ts +1 -0
  280. package/modules/layout/pipes/menu.pipe.d.ts +2 -2
  281. package/modules/layout/services/index.d.ts +4 -1
  282. package/modules/layout/services/layout.service.d.ts +2 -2
  283. package/modules/layout/services/menu/menu.utils.d.ts +6 -0
  284. package/modules/layout/services/navigation-state/navigation-state.service.d.ts +18 -0
  285. package/modules/layout/services/responsive/responsive.service.d.ts +12 -0
  286. package/modules/layout/services/storage/storage.service.d.ts +21 -8
  287. package/package.json +50 -5
  288. package/pipes/src/safe-html.pipe.d.ts +2 -2
  289. package/services/api/src/api.model.d.ts +54 -15
  290. package/services/api/src/api.service.d.ts +13 -8
  291. package/services/api/src/interceptors/api.interceptor.d.ts +1 -1
  292. package/services/cache/src/cache.model.d.ts +46 -13
  293. package/services/cache/src/cache.service.d.ts +5 -2
  294. package/services/confirm/src/lib/confirm.service.d.ts +2 -2
  295. package/services/docx/src/lib/docx.service.d.ts +2 -3
  296. package/services/excel/src/public-api.d.ts +1 -1
  297. package/services/index.d.ts +4 -0
  298. package/services/loading/src/loading.service.d.ts +15 -8
  299. package/services/notify/src/components/toast/toast.component.d.ts +2 -3
  300. package/services/persistence/index.d.ts +5 -0
  301. package/services/persistence/src/graph-serializer.d.ts +16 -0
  302. package/services/persistence/src/persistence-envelope.d.ts +28 -0
  303. package/services/persistence/src/persistence-key.d.ts +17 -0
  304. package/services/persistence/src/persistence.model.d.ts +63 -0
  305. package/services/persistence/src/storage-adapter.d.ts +29 -0
  306. package/services/storage/src/storage.model.d.ts +20 -5
  307. package/services/storage/src/storage.service.d.ts +6 -3
  308. package/services/task/index.d.ts +3 -0
  309. package/services/task/src/task.model.d.ts +75 -0
  310. package/services/task/src/task.service.d.ts +14 -0
  311. package/services/task/src/task.tokens.d.ts +12 -0
  312. package/services/unsaved-changes/index.d.ts +4 -0
  313. package/services/unsaved-changes/src/unsaved-changes.adapters.d.ts +15 -0
  314. package/services/unsaved-changes/src/unsaved-changes.model.d.ts +41 -0
  315. package/services/unsaved-changes/src/unsaved-changes.service.d.ts +16 -0
  316. package/services/unsaved-changes/src/unsaved-changes.tokens.d.ts +9 -0
  317. package/services/viewport/index.d.ts +3 -0
  318. package/services/viewport/src/viewport.model.d.ts +12 -0
  319. package/services/viewport/src/viewport.service.d.ts +18 -0
  320. package/services/viewport/src/viewport.tokens.d.ts +6 -0
  321. package/utilities/models/index.d.ts +7 -7
  322. package/fesm2022/sdcorejs-angular-modules-authom.mjs +0 -360
  323. package/fesm2022/sdcorejs-angular-modules-authom.mjs.map +0 -1
  324. package/forms/datetime/src/material-datetime/index.d.ts +0 -14
  325. package/forms/datetime/src/material-datetime/lib/core/date-adapter.d.ts +0 -10
  326. package/forms/datetime/src/material-datetime/lib/core/date-formats.d.ts +0 -18
  327. package/forms/datetime/src/material-datetime/lib/core/default-options.d.ts +0 -13
  328. package/forms/datetime/src/material-datetime/lib/datetime-picker/datetime-picker-actions.component.d.ts +0 -5
  329. package/forms/datetime/src/material-datetime/lib/datetime-picker/datetime-picker-apply.directive.d.ts +0 -7
  330. package/forms/datetime/src/material-datetime/lib/datetime-picker/datetime-picker-cancel.directive.d.ts +0 -7
  331. package/forms/datetime/src/material-datetime/lib/datetime-picker/datetime-picker-input.directive.d.ts +0 -24
  332. package/forms/datetime/src/material-datetime/lib/datetime-picker/datetime-picker-now.directive.d.ts +0 -7
  333. package/forms/datetime/src/material-datetime/lib/datetime-picker/datetime-picker-toggle.directive.d.ts +0 -8
  334. package/forms/datetime/src/material-datetime/lib/datetime-picker/datetime-picker.component.d.ts +0 -39
  335. package/forms/datetime/src/material-datetime/lib/native/native-date-adapter.d.ts +0 -15
  336. package/forms/datetime/src/material-datetime/lib/native/native-date-formats.d.ts +0 -2
  337. package/forms/datetime/src/material-datetime/lib/native/provide-native.d.ts +0 -3
  338. package/forms/datetime/src/material-datetime/lib/time-spinner/time-spinner.component.d.ts +0 -31
  339. package/modules/authom/authom.configuration.d.ts +0 -17
  340. package/modules/authom/authom.interceptor.d.ts +0 -3
  341. package/modules/authom/authom.module.d.ts +0 -16
  342. package/modules/authom/authom.service.d.ts +0 -32
  343. package/modules/authom/index.d.ts +0 -35
@@ -0,0 +1,389 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { InjectionToken, inject, DestroyRef, signal, computed, Injectable } from '@angular/core';
4
+
5
+ function isSdTaskTerminal(status) {
6
+ return status === 'succeeded' || status === 'failed' || status === 'cancelled';
7
+ }
8
+
9
+ const SD_TASK_EVENT_SOURCE_FACTORY = new InjectionToken('SD_TASK_EVENT_SOURCE_FACTORY', {
10
+ factory: () => {
11
+ const windowRef = inject(DOCUMENT).defaultView;
12
+ if (!windowRef?.EventSource)
13
+ return null;
14
+ return {
15
+ create: (url, init) => new windowRef.EventSource(url, init),
16
+ };
17
+ },
18
+ });
19
+ const SD_TASK_RANDOM = new InjectionToken('SD_TASK_RANDOM', {
20
+ factory: () => Math.random,
21
+ });
22
+
23
+ const DEFAULT_POLL_INTERVAL_MS = 2000;
24
+ const DEFAULT_RETRY_POLICY = {
25
+ maxAttempts: 3,
26
+ initialDelayMs: 1000,
27
+ backoff: 2,
28
+ maxDelayMs: 30_000,
29
+ jitter: 0.2,
30
+ };
31
+ const MAX_TIMER_MS = 2_147_483_647;
32
+ class SdTaskService {
33
+ #eventSourceFactory = inject(SD_TASK_EVENT_SOURCE_FACTORY);
34
+ #random = inject(SD_TASK_RANDOM);
35
+ #destroyRef = inject(DestroyRef);
36
+ #entries = signal(new Map());
37
+ tasks = computed(() => [...this.#entries().values()].map(entry => entry.view));
38
+ constructor() {
39
+ this.#destroyRef.onDestroy(() => {
40
+ for (const entry of this.#entries().values()) {
41
+ entry.destroyed = true;
42
+ this.#stop(entry);
43
+ }
44
+ this.#entries.set(new Map());
45
+ });
46
+ }
47
+ watch(options) {
48
+ const existing = this.#entries().get(options.id);
49
+ if (existing) {
50
+ existing.subscriberCountSignal.update(count => count + 1);
51
+ return this.#createLease(existing);
52
+ }
53
+ const initialState = normalizeState(options.id, options.initialState ?? { id: options.id, status: 'queued' });
54
+ const stateSignal = signal(initialState);
55
+ const connectionSignal = signal(options.source.mode === 'manual' ? 'idle' : 'connecting');
56
+ const errorSignal = signal(null);
57
+ const subscriberCountSignal = signal(1);
58
+ const pendingCancelSignal = signal(false);
59
+ const entry = {};
60
+ const view = {
61
+ id: options.id,
62
+ state: stateSignal.asReadonly(),
63
+ connection: connectionSignal.asReadonly(),
64
+ error: errorSignal.asReadonly(),
65
+ subscriberCount: subscriberCountSignal.asReadonly(),
66
+ canCancel: computed(() => {
67
+ const status = stateSignal().status;
68
+ return !pendingCancelSignal() && (status === 'queued' || status === 'running');
69
+ }),
70
+ canRetry: computed(() => {
71
+ const status = stateSignal().status;
72
+ return connectionSignal() === 'error' || status === 'failed' || status === 'cancelled';
73
+ }),
74
+ cancel: () => this.#cancel(entry),
75
+ retry: () => this.#retry(entry),
76
+ };
77
+ Object.assign(entry, {
78
+ id: options.id,
79
+ source: options.source,
80
+ stateSignal,
81
+ connectionSignal,
82
+ errorSignal,
83
+ subscriberCountSignal,
84
+ pendingCancelSignal,
85
+ view,
86
+ messageQueue: Promise.resolve(),
87
+ generation: 0,
88
+ failures: 0,
89
+ requestAttempt: 0,
90
+ destroyed: false,
91
+ });
92
+ this.#entries.update(entries => new Map(entries).set(options.id, entry));
93
+ if (!isSdTaskTerminal(initialState.status))
94
+ this.#start(entry);
95
+ else
96
+ connectionSignal.set('closed');
97
+ return this.#createLease(entry);
98
+ }
99
+ get(id) {
100
+ return this.#entries().get(id)?.view;
101
+ }
102
+ update(id, patch) {
103
+ const entry = this.#entries().get(id);
104
+ if (!entry)
105
+ return false;
106
+ this.#applyState(entry, { ...entry.stateSignal(), ...patch, id });
107
+ return true;
108
+ }
109
+ cancel(id) {
110
+ const entry = this.#entries().get(id);
111
+ return entry ? this.#cancel(entry) : Promise.resolve(false);
112
+ }
113
+ retry(id) {
114
+ const entry = this.#entries().get(id);
115
+ if (!entry)
116
+ return false;
117
+ this.#retry(entry);
118
+ return true;
119
+ }
120
+ #createLease(entry) {
121
+ const destroyed = signal(false);
122
+ return {
123
+ ...entry.view,
124
+ destroyed: destroyed.asReadonly(),
125
+ destroy: () => {
126
+ if (destroyed())
127
+ return;
128
+ destroyed.set(true);
129
+ entry.subscriberCountSignal.update(count => Math.max(0, count - 1));
130
+ if (entry.subscriberCountSignal() > 0)
131
+ return;
132
+ entry.destroyed = true;
133
+ this.#stop(entry);
134
+ this.#entries.update(entries => {
135
+ if (entries.get(entry.id) !== entry)
136
+ return entries;
137
+ const next = new Map(entries);
138
+ next.delete(entry.id);
139
+ return next;
140
+ });
141
+ },
142
+ };
143
+ }
144
+ #start(entry) {
145
+ if (entry.destroyed || entry.subscriberCountSignal() === 0 || isSdTaskTerminal(entry.stateSignal().status))
146
+ return;
147
+ this.#stop(entry);
148
+ entry.destroyed = false;
149
+ entry.failures = 0;
150
+ entry.requestAttempt = 0;
151
+ entry.errorSignal.set(null);
152
+ const generation = entry.generation;
153
+ if (entry.source.mode === 'manual') {
154
+ entry.connectionSignal.set('idle');
155
+ return;
156
+ }
157
+ entry.connectionSignal.set('connecting');
158
+ if (entry.source.mode === 'poll')
159
+ void this.#runPoll(entry, generation);
160
+ else
161
+ this.#openSse(entry, generation);
162
+ }
163
+ #stop(entry) {
164
+ entry.generation += 1;
165
+ if (entry.timer)
166
+ clearTimeout(entry.timer);
167
+ entry.timer = undefined;
168
+ entry.controller?.abort();
169
+ entry.controller = undefined;
170
+ entry.eventSource?.close();
171
+ entry.eventSource = undefined;
172
+ }
173
+ async #runPoll(entry, generation) {
174
+ if (!this.#isCurrent(entry, generation) || entry.source.mode !== 'poll')
175
+ return;
176
+ const controller = new AbortController();
177
+ entry.controller = controller;
178
+ const attempt = ++entry.requestAttempt;
179
+ try {
180
+ const state = await Promise.resolve(entry.source.load({ id: entry.id, signal: controller.signal, attempt, state: entry.stateSignal() }));
181
+ if (!this.#isCurrent(entry, generation) || controller.signal.aborted)
182
+ return;
183
+ entry.controller = undefined;
184
+ entry.failures = 0;
185
+ entry.errorSignal.set(null);
186
+ entry.connectionSignal.set('open');
187
+ this.#applyState(entry, state);
188
+ if (!this.#isCurrent(entry, generation) || isSdTaskTerminal(entry.stateSignal().status))
189
+ return;
190
+ this.#schedule(entry, normalizeTimer(entry.source.intervalMs, DEFAULT_POLL_INTERVAL_MS), () => this.#runPoll(entry, generation));
191
+ }
192
+ catch (error) {
193
+ if (!this.#isCurrent(entry, generation) || controller.signal.aborted)
194
+ return;
195
+ entry.controller = undefined;
196
+ this.#handleConnectionFailure(entry, generation, error, entry.source.retry, () => this.#runPoll(entry, generation));
197
+ }
198
+ }
199
+ #openSse(entry, generation) {
200
+ if (!this.#isCurrent(entry, generation) || entry.source.mode !== 'sse')
201
+ return;
202
+ if (!this.#eventSourceFactory) {
203
+ entry.connectionSignal.set('error');
204
+ entry.errorSignal.set(new Error('EventSource is unavailable in this environment.'));
205
+ return;
206
+ }
207
+ let eventSource;
208
+ try {
209
+ const url = typeof entry.source.url === 'function' ? entry.source.url() : entry.source.url;
210
+ eventSource = this.#eventSourceFactory.create(url, entry.source.eventSourceInit);
211
+ }
212
+ catch (error) {
213
+ this.#handleConnectionFailure(entry, generation, error, entry.source.retry, () => this.#openSse(entry, generation));
214
+ return;
215
+ }
216
+ entry.eventSource = eventSource;
217
+ eventSource.onopen = () => {
218
+ if (!this.#isCurrentEventSource(entry, generation, eventSource))
219
+ return;
220
+ entry.failures = 0;
221
+ entry.errorSignal.set(null);
222
+ entry.connectionSignal.set('open');
223
+ };
224
+ eventSource.onmessage = event => {
225
+ entry.messageQueue = entry.messageQueue.then(() => this.#handleSseMessage(entry, generation, eventSource, event));
226
+ };
227
+ eventSource.onerror = event => {
228
+ if (!this.#isCurrentEventSource(entry, generation, eventSource))
229
+ return;
230
+ eventSource.close();
231
+ entry.eventSource = undefined;
232
+ this.#handleConnectionFailure(entry, generation, event, entry.source.mode === 'sse' ? entry.source.retry : undefined, () => this.#openSse(entry, generation));
233
+ };
234
+ }
235
+ async #handleSseMessage(entry, generation, eventSource, event) {
236
+ if (!this.#isCurrentEventSource(entry, generation, eventSource) || entry.source.mode !== 'sse')
237
+ return;
238
+ try {
239
+ const state = entry.source.parse
240
+ ? await Promise.resolve(entry.source.parse(event))
241
+ : JSON.parse(event.data);
242
+ if (!this.#isCurrentEventSource(entry, generation, eventSource))
243
+ return;
244
+ entry.errorSignal.set(null);
245
+ this.#applyState(entry, state);
246
+ }
247
+ catch (error) {
248
+ if (!this.#isCurrentEventSource(entry, generation, eventSource))
249
+ return;
250
+ eventSource.close();
251
+ entry.eventSource = undefined;
252
+ this.#handleConnectionFailure(entry, generation, error, entry.source.retry, () => this.#openSse(entry, generation));
253
+ }
254
+ }
255
+ #handleConnectionFailure(entry, generation, error, policy, retry) {
256
+ if (!this.#isCurrent(entry, generation))
257
+ return;
258
+ entry.failures += 1;
259
+ entry.errorSignal.set(error);
260
+ const normalized = normalizeRetryPolicy(policy);
261
+ if (entry.failures > normalized.maxAttempts) {
262
+ entry.connectionSignal.set('error');
263
+ return;
264
+ }
265
+ entry.connectionSignal.set('reconnecting');
266
+ this.#schedule(entry, this.#retryDelay(normalized, entry.failures), retry);
267
+ }
268
+ #retryDelay(policy, failure) {
269
+ const exponential = Math.min(policy.maxDelayMs, policy.initialDelayMs * Math.pow(policy.backoff, failure - 1));
270
+ const jitter = exponential * policy.jitter * (this.#random() * 2 - 1);
271
+ return Math.max(0, Math.min(policy.maxDelayMs, Math.round(exponential + jitter)));
272
+ }
273
+ #schedule(entry, delayMs, callback) {
274
+ if (entry.timer)
275
+ clearTimeout(entry.timer);
276
+ entry.timer = setTimeout(() => {
277
+ entry.timer = undefined;
278
+ void callback();
279
+ }, normalizeTimer(delayMs, 0));
280
+ }
281
+ #applyState(entry, state) {
282
+ const normalized = normalizeState(entry.id, state);
283
+ entry.stateSignal.set(normalized);
284
+ if (!isSdTaskTerminal(normalized.status))
285
+ return;
286
+ this.#stop(entry);
287
+ entry.connectionSignal.set('closed');
288
+ }
289
+ #cancel(entry) {
290
+ if (entry.pendingCancel)
291
+ return entry.pendingCancel;
292
+ if (entry.destroyed || entry.subscriberCountSignal() === 0 || isSdTaskTerminal(entry.stateSignal().status)) {
293
+ return Promise.resolve(false);
294
+ }
295
+ const generation = entry.generation;
296
+ entry.pendingCancelSignal.set(true);
297
+ let actionResult;
298
+ try {
299
+ actionResult = entry.source.cancel?.({ id: entry.id, state: entry.stateSignal() });
300
+ }
301
+ catch (error) {
302
+ entry.pendingCancelSignal.set(false);
303
+ entry.errorSignal.set(error);
304
+ return Promise.resolve(false);
305
+ }
306
+ const pending = Promise.resolve(actionResult)
307
+ .then(result => {
308
+ if (result === false)
309
+ return false;
310
+ if (!this.#isCurrent(entry, generation))
311
+ return true;
312
+ if (result && typeof result === 'object')
313
+ this.#applyState(entry, result);
314
+ else
315
+ this.#applyState(entry, { ...entry.stateSignal(), id: entry.id, status: 'cancelled' });
316
+ return true;
317
+ })
318
+ .catch((error) => {
319
+ if (this.#isCurrent(entry, generation))
320
+ entry.errorSignal.set(error);
321
+ return false;
322
+ })
323
+ .finally(() => {
324
+ if (entry.pendingCancel === pending) {
325
+ entry.pendingCancel = undefined;
326
+ entry.pendingCancelSignal.set(false);
327
+ }
328
+ });
329
+ entry.pendingCancel = pending;
330
+ return pending;
331
+ }
332
+ #retry(entry) {
333
+ if (entry.destroyed || entry.subscriberCountSignal() === 0 || entry.stateSignal().status === 'succeeded')
334
+ return;
335
+ const status = entry.stateSignal().status;
336
+ if (entry.connectionSignal() !== 'error' && status !== 'failed' && status !== 'cancelled')
337
+ return;
338
+ if (status === 'failed' || status === 'cancelled') {
339
+ entry.stateSignal.set({ ...entry.stateSignal(), status: 'queued', progress: undefined, error: undefined });
340
+ }
341
+ this.#start(entry);
342
+ }
343
+ #isCurrent(entry, generation) {
344
+ return !entry.destroyed && entry.subscriberCountSignal() > 0 && entry.generation === generation;
345
+ }
346
+ #isCurrentEventSource(entry, generation, eventSource) {
347
+ return this.#isCurrent(entry, generation) && entry.eventSource === eventSource;
348
+ }
349
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdTaskService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
350
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdTaskService, providedIn: 'root' });
351
+ }
352
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: SdTaskService, decorators: [{
353
+ type: Injectable,
354
+ args: [{ providedIn: 'root' }]
355
+ }], ctorParameters: () => [] });
356
+ function normalizeState(id, state) {
357
+ const progress = state.progress;
358
+ return {
359
+ ...state,
360
+ id,
361
+ progress: progress === undefined || !Number.isFinite(progress) ? undefined : Math.max(0, Math.min(100, progress)),
362
+ };
363
+ }
364
+ function normalizeRetryPolicy(policy) {
365
+ return {
366
+ maxAttempts: normalizeInteger(policy?.maxAttempts, DEFAULT_RETRY_POLICY.maxAttempts, 0, 100),
367
+ initialDelayMs: normalizeTimer(policy?.initialDelayMs, DEFAULT_RETRY_POLICY.initialDelayMs),
368
+ backoff: normalizeNumber(policy?.backoff, DEFAULT_RETRY_POLICY.backoff, 1, 100),
369
+ maxDelayMs: normalizeTimer(policy?.maxDelayMs, DEFAULT_RETRY_POLICY.maxDelayMs),
370
+ jitter: normalizeNumber(policy?.jitter, DEFAULT_RETRY_POLICY.jitter, 0, 1),
371
+ };
372
+ }
373
+ function normalizeTimer(value, fallback) {
374
+ return normalizeInteger(value, fallback, 0, MAX_TIMER_MS);
375
+ }
376
+ function normalizeInteger(value, fallback, min, max) {
377
+ return Math.round(normalizeNumber(value, fallback, min, max));
378
+ }
379
+ function normalizeNumber(value, fallback, min, max) {
380
+ const normalized = typeof value === 'number' && Number.isFinite(value) ? value : fallback;
381
+ return Math.max(min, Math.min(max, normalized));
382
+ }
383
+
384
+ /**
385
+ * Generated bundle index. Do not edit.
386
+ */
387
+
388
+ export { SD_TASK_EVENT_SOURCE_FACTORY, SD_TASK_RANDOM, SdTaskService, isSdTaskTerminal };
389
+ //# sourceMappingURL=sdcorejs-angular-services-task.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdcorejs-angular-services-task.mjs","sources":["../../../projects/sdcorejs-angular/services/task/src/task.model.ts","../../../projects/sdcorejs-angular/services/task/src/task.tokens.ts","../../../projects/sdcorejs-angular/services/task/src/task.service.ts","../../../projects/sdcorejs-angular/services/task/sdcorejs-angular-services-task.ts"],"sourcesContent":["import { Signal } from '@angular/core';\n\nexport type SdTaskMaybeAsync<T> = T | PromiseLike<T>;\nexport type SdTaskStatus = 'idle' | 'queued' | 'running' | 'succeeded' | 'failed' | 'cancelled';\nexport type SdTaskConnectionState = 'idle' | 'connecting' | 'open' | 'reconnecting' | 'closed' | 'error';\n\nexport interface SdTaskState<TResult = unknown> {\n readonly id: string;\n readonly status: SdTaskStatus;\n readonly progress?: number;\n readonly title?: string;\n readonly message?: string;\n readonly error?: unknown;\n readonly result?: TResult;\n readonly updatedAt?: number | Date;\n}\n\nexport interface SdTaskRetryPolicy {\n readonly maxAttempts?: number;\n readonly initialDelayMs?: number;\n readonly backoff?: number;\n readonly maxDelayMs?: number;\n readonly jitter?: number;\n}\n\nexport interface SdTaskLoadContext<TResult = unknown> {\n readonly id: string;\n readonly signal: AbortSignal;\n readonly attempt: number;\n readonly state: SdTaskState<TResult>;\n}\n\nexport interface SdTaskActionContext<TResult = unknown> {\n readonly id: string;\n readonly state: SdTaskState<TResult>;\n}\n\nexport type SdTaskCancelResult<TResult = unknown> = void | boolean | SdTaskState<TResult>;\nexport type SdTaskCancelHandler<TResult = unknown> = (\n context: SdTaskActionContext<TResult>\n) => SdTaskMaybeAsync<SdTaskCancelResult<TResult>>;\n\ninterface SdTaskSourceBase<TResult> {\n readonly cancel?: SdTaskCancelHandler<TResult>;\n}\n\nexport interface SdTaskManualSource<TResult = unknown> extends SdTaskSourceBase<TResult> {\n readonly mode: 'manual';\n}\n\nexport interface SdTaskPollingSource<TResult = unknown> extends SdTaskSourceBase<TResult> {\n readonly mode: 'poll';\n readonly load: (context: SdTaskLoadContext<TResult>) => SdTaskMaybeAsync<SdTaskState<TResult>>;\n readonly intervalMs?: number;\n readonly retry?: SdTaskRetryPolicy;\n}\n\nexport interface SdTaskSseSource<TResult = unknown> extends SdTaskSourceBase<TResult> {\n readonly mode: 'sse';\n readonly url: string | (() => string);\n readonly eventSourceInit?: EventSourceInit;\n readonly parse?: (event: MessageEvent<string>) => SdTaskMaybeAsync<SdTaskState<TResult>>;\n readonly retry?: SdTaskRetryPolicy;\n}\n\nexport type SdTaskSource<TResult = unknown> = SdTaskManualSource<TResult> | SdTaskPollingSource<TResult> | SdTaskSseSource<TResult>;\n\nexport interface SdTaskWatchOptions<TResult = unknown> {\n readonly id: string;\n readonly initialState?: SdTaskState<TResult>;\n readonly source: SdTaskSource<TResult>;\n}\n\nexport interface SdTaskView<TResult = unknown> {\n readonly id: string;\n readonly state: Signal<SdTaskState<TResult>>;\n readonly connection: Signal<SdTaskConnectionState>;\n readonly error: Signal<unknown | null>;\n readonly subscriberCount: Signal<number>;\n readonly canCancel: Signal<boolean>;\n readonly canRetry: Signal<boolean>;\n cancel(): Promise<boolean>;\n retry(): void;\n}\n\nexport interface SdTaskSubscription<TResult = unknown> extends SdTaskView<TResult> {\n readonly destroyed: Signal<boolean>;\n destroy(): void;\n}\n\nexport function isSdTaskTerminal(status: SdTaskStatus): boolean {\n return status === 'succeeded' || status === 'failed' || status === 'cancelled';\n}\n","import { DOCUMENT } from '@angular/common';\nimport { InjectionToken, inject } from '@angular/core';\n\nexport interface SdTaskEventSource {\n onopen: ((event: Event) => void) | null;\n onmessage: ((event: MessageEvent<string>) => void) | null;\n onerror: ((event: Event) => void) | null;\n close(): void;\n}\n\nexport interface SdTaskEventSourceFactory {\n create(url: string, init?: EventSourceInit): SdTaskEventSource;\n}\n\nexport const SD_TASK_EVENT_SOURCE_FACTORY = new InjectionToken<SdTaskEventSourceFactory | null>('SD_TASK_EVENT_SOURCE_FACTORY', {\n factory: () => {\n const windowRef = inject(DOCUMENT).defaultView;\n if (!windowRef?.EventSource) return null;\n return {\n create: (url: string, init?: EventSourceInit): SdTaskEventSource => new windowRef.EventSource(url, init),\n };\n },\n});\n\nexport const SD_TASK_RANDOM = new InjectionToken<() => number>('SD_TASK_RANDOM', {\n factory: () => Math.random,\n});\n","import { DestroyRef, Injectable, computed, inject, signal } from '@angular/core';\nimport {\n SdTaskConnectionState,\n SdTaskRetryPolicy,\n SdTaskSource,\n SdTaskState,\n SdTaskSubscription,\n SdTaskView,\n SdTaskWatchOptions,\n isSdTaskTerminal,\n} from './task.model';\nimport { SD_TASK_EVENT_SOURCE_FACTORY, SD_TASK_RANDOM, SdTaskEventSource } from './task.tokens';\n\nconst DEFAULT_POLL_INTERVAL_MS = 2000;\nconst DEFAULT_RETRY_POLICY: Required<SdTaskRetryPolicy> = {\n maxAttempts: 3,\n initialDelayMs: 1000,\n backoff: 2,\n maxDelayMs: 30_000,\n jitter: 0.2,\n};\nconst MAX_TIMER_MS = 2_147_483_647;\n\ninterface TaskEntry<TResult = unknown> {\n readonly id: string;\n readonly source: SdTaskSource<TResult>;\n readonly stateSignal: ReturnType<typeof signal<SdTaskState<TResult>>>;\n readonly connectionSignal: ReturnType<typeof signal<SdTaskConnectionState>>;\n readonly errorSignal: ReturnType<typeof signal<unknown | null>>;\n readonly subscriberCountSignal: ReturnType<typeof signal<number>>;\n readonly view: SdTaskView<TResult>;\n timer?: ReturnType<typeof setTimeout>;\n controller?: AbortController;\n eventSource?: SdTaskEventSource;\n pendingCancel?: Promise<boolean>;\n readonly pendingCancelSignal: ReturnType<typeof signal<boolean>>;\n messageQueue: Promise<void>;\n generation: number;\n failures: number;\n requestAttempt: number;\n destroyed: boolean;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SdTaskService {\n readonly #eventSourceFactory = inject(SD_TASK_EVENT_SOURCE_FACTORY);\n readonly #random = inject(SD_TASK_RANDOM);\n readonly #destroyRef = inject(DestroyRef);\n readonly #entries = signal<ReadonlyMap<string, TaskEntry>>(new Map());\n\n readonly tasks = computed(() => [...this.#entries().values()].map(entry => entry.view));\n\n constructor() {\n this.#destroyRef.onDestroy(() => {\n for (const entry of this.#entries().values()) {\n entry.destroyed = true;\n this.#stop(entry);\n }\n this.#entries.set(new Map());\n });\n }\n\n watch<TResult = unknown>(options: SdTaskWatchOptions<TResult>): SdTaskSubscription<TResult> {\n const existing = this.#entries().get(options.id) as TaskEntry<TResult> | undefined;\n if (existing) {\n existing.subscriberCountSignal.update(count => count + 1);\n return this.#createLease(existing);\n }\n\n const initialState = normalizeState(options.id, options.initialState ?? { id: options.id, status: 'queued' });\n const stateSignal = signal(initialState);\n const connectionSignal = signal<SdTaskConnectionState>(options.source.mode === 'manual' ? 'idle' : 'connecting');\n const errorSignal = signal<unknown | null>(null);\n const subscriberCountSignal = signal(1);\n const pendingCancelSignal = signal(false);\n const entry = {} as TaskEntry<TResult>;\n const view: SdTaskView<TResult> = {\n id: options.id,\n state: stateSignal.asReadonly(),\n connection: connectionSignal.asReadonly(),\n error: errorSignal.asReadonly(),\n subscriberCount: subscriberCountSignal.asReadonly(),\n canCancel: computed(() => {\n const status = stateSignal().status;\n return !pendingCancelSignal() && (status === 'queued' || status === 'running');\n }),\n canRetry: computed(() => {\n const status = stateSignal().status;\n return connectionSignal() === 'error' || status === 'failed' || status === 'cancelled';\n }),\n cancel: () => this.#cancel(entry),\n retry: () => this.#retry(entry),\n };\n Object.assign(entry, {\n id: options.id,\n source: options.source,\n stateSignal,\n connectionSignal,\n errorSignal,\n subscriberCountSignal,\n pendingCancelSignal,\n view,\n messageQueue: Promise.resolve(),\n generation: 0,\n failures: 0,\n requestAttempt: 0,\n destroyed: false,\n });\n this.#entries.update(entries => new Map(entries).set(options.id, entry as unknown as TaskEntry));\n\n if (!isSdTaskTerminal(initialState.status)) this.#start(entry);\n else connectionSignal.set('closed');\n return this.#createLease(entry);\n }\n\n get<TResult = unknown>(id: string): SdTaskView<TResult> | undefined {\n return this.#entries().get(id)?.view as SdTaskView<TResult> | undefined;\n }\n\n update<TResult = unknown>(id: string, patch: Partial<Omit<SdTaskState<TResult>, 'id'>>): boolean {\n const entry = this.#entries().get(id) as TaskEntry<TResult> | undefined;\n if (!entry) return false;\n this.#applyState(entry, { ...entry.stateSignal(), ...patch, id });\n return true;\n }\n\n cancel(id: string): Promise<boolean> {\n const entry = this.#entries().get(id);\n return entry ? this.#cancel(entry) : Promise.resolve(false);\n }\n\n retry(id: string): boolean {\n const entry = this.#entries().get(id);\n if (!entry) return false;\n this.#retry(entry);\n return true;\n }\n\n #createLease<TResult>(entry: TaskEntry<TResult>): SdTaskSubscription<TResult> {\n const destroyed = signal(false);\n return {\n ...entry.view,\n destroyed: destroyed.asReadonly(),\n destroy: () => {\n if (destroyed()) return;\n destroyed.set(true);\n entry.subscriberCountSignal.update(count => Math.max(0, count - 1));\n if (entry.subscriberCountSignal() > 0) return;\n entry.destroyed = true;\n this.#stop(entry);\n this.#entries.update(entries => {\n if (entries.get(entry.id) !== entry) return entries;\n const next = new Map(entries);\n next.delete(entry.id);\n return next;\n });\n },\n };\n }\n\n #start<TResult>(entry: TaskEntry<TResult>): void {\n if (entry.destroyed || entry.subscriberCountSignal() === 0 || isSdTaskTerminal(entry.stateSignal().status)) return;\n this.#stop(entry);\n entry.destroyed = false;\n entry.failures = 0;\n entry.requestAttempt = 0;\n entry.errorSignal.set(null);\n const generation = entry.generation;\n\n if (entry.source.mode === 'manual') {\n entry.connectionSignal.set('idle');\n return;\n }\n entry.connectionSignal.set('connecting');\n if (entry.source.mode === 'poll') void this.#runPoll(entry, generation);\n else this.#openSse(entry, generation);\n }\n\n #stop<TResult>(entry: TaskEntry<TResult>): void {\n entry.generation += 1;\n if (entry.timer) clearTimeout(entry.timer);\n entry.timer = undefined;\n entry.controller?.abort();\n entry.controller = undefined;\n entry.eventSource?.close();\n entry.eventSource = undefined;\n }\n\n async #runPoll<TResult>(entry: TaskEntry<TResult>, generation: number): Promise<void> {\n if (!this.#isCurrent(entry, generation) || entry.source.mode !== 'poll') return;\n const controller = new AbortController();\n entry.controller = controller;\n const attempt = ++entry.requestAttempt;\n\n try {\n const state = await Promise.resolve(\n entry.source.load({ id: entry.id, signal: controller.signal, attempt, state: entry.stateSignal() })\n );\n if (!this.#isCurrent(entry, generation) || controller.signal.aborted) return;\n entry.controller = undefined;\n entry.failures = 0;\n entry.errorSignal.set(null);\n entry.connectionSignal.set('open');\n this.#applyState(entry, state);\n if (!this.#isCurrent(entry, generation) || isSdTaskTerminal(entry.stateSignal().status)) return;\n this.#schedule(entry, normalizeTimer(entry.source.intervalMs, DEFAULT_POLL_INTERVAL_MS), () => this.#runPoll(entry, generation));\n } catch (error) {\n if (!this.#isCurrent(entry, generation) || controller.signal.aborted) return;\n entry.controller = undefined;\n this.#handleConnectionFailure(entry, generation, error, entry.source.retry, () => this.#runPoll(entry, generation));\n }\n }\n\n #openSse<TResult>(entry: TaskEntry<TResult>, generation: number): void {\n if (!this.#isCurrent(entry, generation) || entry.source.mode !== 'sse') return;\n if (!this.#eventSourceFactory) {\n entry.connectionSignal.set('error');\n entry.errorSignal.set(new Error('EventSource is unavailable in this environment.'));\n return;\n }\n\n let eventSource: SdTaskEventSource;\n try {\n const url = typeof entry.source.url === 'function' ? entry.source.url() : entry.source.url;\n eventSource = this.#eventSourceFactory.create(url, entry.source.eventSourceInit);\n } catch (error) {\n this.#handleConnectionFailure(entry, generation, error, entry.source.retry, () => this.#openSse(entry, generation));\n return;\n }\n entry.eventSource = eventSource;\n\n eventSource.onopen = () => {\n if (!this.#isCurrentEventSource(entry, generation, eventSource)) return;\n entry.failures = 0;\n entry.errorSignal.set(null);\n entry.connectionSignal.set('open');\n };\n eventSource.onmessage = event => {\n entry.messageQueue = entry.messageQueue.then(() => this.#handleSseMessage(entry, generation, eventSource, event));\n };\n eventSource.onerror = event => {\n if (!this.#isCurrentEventSource(entry, generation, eventSource)) return;\n eventSource.close();\n entry.eventSource = undefined;\n this.#handleConnectionFailure(entry, generation, event, entry.source.mode === 'sse' ? entry.source.retry : undefined, () =>\n this.#openSse(entry, generation)\n );\n };\n }\n\n async #handleSseMessage<TResult>(\n entry: TaskEntry<TResult>,\n generation: number,\n eventSource: SdTaskEventSource,\n event: MessageEvent<string>\n ): Promise<void> {\n if (!this.#isCurrentEventSource(entry, generation, eventSource) || entry.source.mode !== 'sse') return;\n try {\n const state = entry.source.parse\n ? await Promise.resolve(entry.source.parse(event))\n : (JSON.parse(event.data) as SdTaskState<TResult>);\n if (!this.#isCurrentEventSource(entry, generation, eventSource)) return;\n entry.errorSignal.set(null);\n this.#applyState(entry, state);\n } catch (error) {\n if (!this.#isCurrentEventSource(entry, generation, eventSource)) return;\n eventSource.close();\n entry.eventSource = undefined;\n this.#handleConnectionFailure(entry, generation, error, entry.source.retry, () => this.#openSse(entry, generation));\n }\n }\n\n #handleConnectionFailure<TResult>(\n entry: TaskEntry<TResult>,\n generation: number,\n error: unknown,\n policy: SdTaskRetryPolicy | undefined,\n retry: () => void | Promise<void>\n ): void {\n if (!this.#isCurrent(entry, generation)) return;\n entry.failures += 1;\n entry.errorSignal.set(error);\n const normalized = normalizeRetryPolicy(policy);\n if (entry.failures > normalized.maxAttempts) {\n entry.connectionSignal.set('error');\n return;\n }\n entry.connectionSignal.set('reconnecting');\n this.#schedule(entry, this.#retryDelay(normalized, entry.failures), retry);\n }\n\n #retryDelay(policy: Required<SdTaskRetryPolicy>, failure: number): number {\n const exponential = Math.min(policy.maxDelayMs, policy.initialDelayMs * Math.pow(policy.backoff, failure - 1));\n const jitter = exponential * policy.jitter * (this.#random() * 2 - 1);\n return Math.max(0, Math.min(policy.maxDelayMs, Math.round(exponential + jitter)));\n }\n\n #schedule<TResult>(entry: TaskEntry<TResult>, delayMs: number, callback: () => void | Promise<void>): void {\n if (entry.timer) clearTimeout(entry.timer);\n entry.timer = setTimeout(\n () => {\n entry.timer = undefined;\n void callback();\n },\n normalizeTimer(delayMs, 0)\n );\n }\n\n #applyState<TResult>(entry: TaskEntry<TResult>, state: SdTaskState<TResult>): void {\n const normalized = normalizeState(entry.id, state);\n entry.stateSignal.set(normalized);\n if (!isSdTaskTerminal(normalized.status)) return;\n this.#stop(entry);\n entry.connectionSignal.set('closed');\n }\n\n #cancel<TResult>(entry: TaskEntry<TResult>): Promise<boolean> {\n if (entry.pendingCancel) return entry.pendingCancel;\n if (entry.destroyed || entry.subscriberCountSignal() === 0 || isSdTaskTerminal(entry.stateSignal().status)) {\n return Promise.resolve(false);\n }\n\n const generation = entry.generation;\n entry.pendingCancelSignal.set(true);\n let actionResult: ReturnType<NonNullable<typeof entry.source.cancel>> | undefined;\n try {\n actionResult = entry.source.cancel?.({ id: entry.id, state: entry.stateSignal() });\n } catch (error) {\n entry.pendingCancelSignal.set(false);\n entry.errorSignal.set(error);\n return Promise.resolve(false);\n }\n\n const pending = Promise.resolve(actionResult)\n .then(result => {\n if (result === false) return false;\n if (!this.#isCurrent(entry, generation)) return true;\n if (result && typeof result === 'object') this.#applyState(entry, result);\n else this.#applyState(entry, { ...entry.stateSignal(), id: entry.id, status: 'cancelled' });\n return true;\n })\n .catch((error: unknown) => {\n if (this.#isCurrent(entry, generation)) entry.errorSignal.set(error);\n return false;\n })\n .finally(() => {\n if (entry.pendingCancel === pending) {\n entry.pendingCancel = undefined;\n entry.pendingCancelSignal.set(false);\n }\n });\n entry.pendingCancel = pending;\n return pending;\n }\n\n #retry<TResult>(entry: TaskEntry<TResult>): void {\n if (entry.destroyed || entry.subscriberCountSignal() === 0 || entry.stateSignal().status === 'succeeded') return;\n const status = entry.stateSignal().status;\n if (entry.connectionSignal() !== 'error' && status !== 'failed' && status !== 'cancelled') return;\n if (status === 'failed' || status === 'cancelled') {\n entry.stateSignal.set({ ...entry.stateSignal(), status: 'queued', progress: undefined, error: undefined });\n }\n this.#start(entry);\n }\n\n #isCurrent<TResult>(entry: TaskEntry<TResult>, generation: number): boolean {\n return !entry.destroyed && entry.subscriberCountSignal() > 0 && entry.generation === generation;\n }\n\n #isCurrentEventSource<TResult>(entry: TaskEntry<TResult>, generation: number, eventSource: SdTaskEventSource): boolean {\n return this.#isCurrent(entry, generation) && entry.eventSource === eventSource;\n }\n}\n\nfunction normalizeState<TResult>(id: string, state: SdTaskState<TResult>): SdTaskState<TResult> {\n const progress = state.progress;\n return {\n ...state,\n id,\n progress: progress === undefined || !Number.isFinite(progress) ? undefined : Math.max(0, Math.min(100, progress)),\n };\n}\n\nfunction normalizeRetryPolicy(policy: SdTaskRetryPolicy | undefined): Required<SdTaskRetryPolicy> {\n return {\n maxAttempts: normalizeInteger(policy?.maxAttempts, DEFAULT_RETRY_POLICY.maxAttempts, 0, 100),\n initialDelayMs: normalizeTimer(policy?.initialDelayMs, DEFAULT_RETRY_POLICY.initialDelayMs),\n backoff: normalizeNumber(policy?.backoff, DEFAULT_RETRY_POLICY.backoff, 1, 100),\n maxDelayMs: normalizeTimer(policy?.maxDelayMs, DEFAULT_RETRY_POLICY.maxDelayMs),\n jitter: normalizeNumber(policy?.jitter, DEFAULT_RETRY_POLICY.jitter, 0, 1),\n };\n}\n\nfunction normalizeTimer(value: number | undefined, fallback: number): number {\n return normalizeInteger(value, fallback, 0, MAX_TIMER_MS);\n}\n\nfunction normalizeInteger(value: number | undefined, fallback: number, min: number, max: number): number {\n return Math.round(normalizeNumber(value, fallback, min, max));\n}\n\nfunction normalizeNumber(value: number | undefined, fallback: number, min: number, max: number): number {\n const normalized = typeof value === 'number' && Number.isFinite(value) ? value : fallback;\n return Math.max(min, Math.min(max, normalized));\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}