@sdcorejs/angular 19.0.9 → 19.0.11

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 (257) hide show
  1. package/README.md +270 -140
  2. package/assets/STYLE-GUIDE.md +2 -2
  3. package/assets/scss/core/_inline-edit.scss +1 -1
  4. package/assets/scss/core/form.scss +1 -1
  5. package/assets/scss/core/utilities/_grid.scss +25 -19
  6. package/assets/scss/themes/default.scss +2 -2
  7. package/components/anchor/src/models/sd-anchor.model.d.ts +1 -1
  8. package/components/badge/src/badge.component.d.ts +3 -14
  9. package/components/button/src/button.component.d.ts +5 -3
  10. package/components/document-builder/src/document-builder.component.d.ts +2 -2
  11. package/components/document-builder/src/plugins/paste-handler/filters/parse.d.ts +1 -1
  12. package/components/editor/src/plugins/image-upload/utils/batch.utils.d.ts +3 -3
  13. package/components/form-generic/src/components/form-builder/components/attribute-expression/attribute-expression.component.d.ts +10 -6
  14. package/components/form-generic/src/components/form-builder/components/attribute-expression/form-expression-query-adapter.d.ts +6 -0
  15. package/components/form-generic/src/components/form-builder/components/attribute-parameter/attribute-parameter.component.d.ts +2 -2
  16. package/components/form-generic/src/components/form-builder/components/attribute-selection/attribute-selection.component.d.ts +2 -2
  17. package/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-queries/build-queries.component.d.ts +2 -2
  18. package/components/form-generic/src/components/form-builder/components/attribute-selection/components/build-variables/build-variables.component.d.ts +2 -2
  19. package/components/form-generic/src/components/form-builder/components/attribute-table/attribute-table.component.d.ts +2 -4
  20. package/components/form-generic/src/components/form-builder/components/attribute-template/attribute-template.component.d.ts +2 -4
  21. package/components/form-generic/src/components/form-builder/components/checkbox/attribute/checkbox-attribute.component.d.ts +2 -2
  22. package/components/form-generic/src/components/form-builder/components/chip-calendar/attribute/chip-calendar-attribute.component.d.ts +2 -2
  23. package/components/form-generic/src/components/form-builder/components/chip-calendar/control/chip-calendar-control.component.d.ts +2 -2
  24. package/components/form-generic/src/components/form-builder/components/chip-string/attribute/chip-string-attribute.component.d.ts +2 -2
  25. package/components/form-generic/src/components/form-builder/components/chip-string/control/chip-string-control.component.d.ts +2 -2
  26. package/components/form-generic/src/components/form-builder/components/configure-validation/configure-validation.component.d.ts +6 -7
  27. package/components/form-generic/src/components/form-builder/components/datetime/attribute/datetime-attribute.component.d.ts +2 -2
  28. package/components/form-generic/src/components/form-builder/components/datetime/control/datetime-control.component.d.ts +2 -2
  29. package/components/form-generic/src/components/form-builder/components/expression-builder/expression-builder.component.d.ts +2 -2
  30. package/components/form-generic/src/components/form-builder/components/html/attribute/components/build-queries/build-queries.component.d.ts +2 -2
  31. package/components/form-generic/src/components/form-builder/components/html/control/html-control.component.d.ts +2 -2
  32. package/components/form-generic/src/components/form-builder/components/number/attribute/number-attribute.component.d.ts +2 -2
  33. package/components/form-generic/src/components/form-builder/components/number/control/number-control.component.d.ts +2 -2
  34. package/components/form-generic/src/components/form-builder/components/radio/attribute/radio-attribute.component.d.ts +2 -2
  35. package/components/form-generic/src/components/form-builder/components/radio/control/radio-control.component.d.ts +2 -2
  36. package/components/form-generic/src/components/form-builder/components/select/attribute/select-attribute.component.d.ts +2 -2
  37. package/components/form-generic/src/components/form-builder/components/select/control/select-control.component.d.ts +2 -2
  38. package/components/form-generic/src/components/form-builder/components/table/attribute/table-attribute.component.d.ts +2 -2
  39. package/components/form-generic/src/components/form-builder/components/table/control/table-control.component.d.ts +2 -2
  40. package/components/form-generic/src/components/form-builder/components/textarea/attribute/textarea-attribute.component.d.ts +2 -2
  41. package/components/form-generic/src/components/form-builder/components/textarea/control/textarea-control.component.d.ts +2 -2
  42. package/components/form-generic/src/components/form-builder/components/textfield/attribute/textfield-attribute.component.d.ts +2 -2
  43. package/components/form-generic/src/components/form-builder/components/textfield/control/textfield-control.component.d.ts +2 -2
  44. package/components/form-generic/src/components/form-builder/components/upload/attribute/upload-attribute.component.d.ts +2 -2
  45. package/components/form-generic/src/components/form-builder/components/upload/control/upload-control.component.d.ts +2 -2
  46. package/components/form-generic/src/components/form-builder/form-builder-layout.d.ts +22 -0
  47. package/components/form-generic/src/components/form-builder/form-builder.component.d.ts +24 -5
  48. package/components/form-generic/src/components/form-render/components/item/components/chip-calendar/chip-calendar.component.d.ts +2 -2
  49. package/components/form-generic/src/components/form-render/components/item/components/chip-string/chip-string.component.d.ts +2 -2
  50. package/components/form-generic/src/components/form-render/components/item/components/datetime/datetime.component.d.ts +2 -2
  51. package/components/form-generic/src/components/form-render/components/item/components/html/html.component.d.ts +2 -2
  52. package/components/form-generic/src/components/form-render/components/item/components/number/number.component.d.ts +2 -2
  53. package/components/form-generic/src/components/form-render/components/item/components/radio/radio.component.d.ts +2 -2
  54. package/components/form-generic/src/components/form-render/components/item/components/select/select.component.d.ts +2 -2
  55. package/components/form-generic/src/components/form-render/components/item/components/table/table.component.d.ts +2 -2
  56. package/components/form-generic/src/components/form-render/components/item/components/textarea/textarea.component.d.ts +2 -2
  57. package/components/form-generic/src/components/form-render/components/item/components/textfield/textfield.component.d.ts +2 -2
  58. package/components/form-generic/src/components/form-render/components/item/components/upload/upload.component.d.ts +2 -2
  59. package/components/form-generic/src/components/form-render/components/variable/variable.component.d.ts +2 -2
  60. package/components/form-generic/src/components/form-render/form-render.component.d.ts +4 -6
  61. package/components/form-generic/src/components/sd-feel-expression/sd-feel-expression.component.d.ts +2 -2
  62. package/components/form-generic/src/configurations/form.configuration.d.ts +1 -1
  63. package/components/form-generic/src/models/form-generic-component.model.d.ts +2 -2
  64. package/components/form-generic/src/services/form-generic.service.d.ts +1 -3
  65. package/components/import-excel/src/import-excel.model.d.ts +2 -2
  66. package/components/inform/src/inform.component.d.ts +2 -8
  67. package/components/mini-editor/src/mini-editor.component.d.ts +4 -4
  68. package/components/modal/src/modal.component.d.ts +1 -1
  69. package/components/query-builder/src/query-builder.component.d.ts +3 -3
  70. package/components/query-builder/src/query-builder.model.d.ts +4 -4
  71. package/components/splitter/src/splitter-state.service.d.ts +1 -1
  72. package/components/tab-router/src/models/tab-router.model.d.ts +2 -1
  73. package/components/tab-router/src/services/tab-router.service.d.ts +0 -1
  74. package/components/table/src/components/command/desktop-command.component.d.ts +7 -7
  75. package/components/table/src/components/command/pipes/command.pipe.d.ts +1 -12
  76. package/components/table/src/components/command/pipes/filter.pipe.d.ts +1 -8
  77. package/components/table/src/components/filter/column-filter/column-filter.component.d.ts +1 -0
  78. package/components/table/src/models/table-column.model.d.ts +3 -2
  79. package/components/table/src/models/table-command.model.d.ts +3 -3
  80. package/components/table/src/models/table-option-selector.model.d.ts +5 -5
  81. package/components/table/src/pipes/selection-disabled.pipe.d.ts +1 -1
  82. package/components/table/src/services/config.service.d.ts +4 -5
  83. package/components/tree/src/tree.model.d.ts +3 -2
  84. package/components/view/src/view.component.d.ts +1 -1
  85. package/configurations/src/sd-core.configuration.d.ts +2 -2
  86. package/fesm2022/sdcorejs-angular-components-anchor.mjs +20 -24
  87. package/fesm2022/sdcorejs-angular-components-anchor.mjs.map +1 -1
  88. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs +4 -5
  89. package/fesm2022/sdcorejs-angular-components-autoid-inspector.mjs.map +1 -1
  90. package/fesm2022/sdcorejs-angular-components-avatar.mjs.map +1 -1
  91. package/fesm2022/sdcorejs-angular-components-badge.mjs +14 -13
  92. package/fesm2022/sdcorejs-angular-components-badge.mjs.map +1 -1
  93. package/fesm2022/sdcorejs-angular-components-button.mjs +15 -17
  94. package/fesm2022/sdcorejs-angular-components-button.mjs.map +1 -1
  95. package/fesm2022/sdcorejs-angular-components-chart.mjs.map +1 -1
  96. package/fesm2022/sdcorejs-angular-components-ckeditor-styles.mjs.map +1 -1
  97. package/fesm2022/sdcorejs-angular-components-code-editor.mjs +5 -6
  98. package/fesm2022/sdcorejs-angular-components-code-editor.mjs.map +1 -1
  99. package/fesm2022/sdcorejs-angular-components-document-builder.mjs +17 -26
  100. package/fesm2022/sdcorejs-angular-components-document-builder.mjs.map +1 -1
  101. package/fesm2022/sdcorejs-angular-components-editor.mjs +11 -7
  102. package/fesm2022/sdcorejs-angular-components-editor.mjs.map +1 -1
  103. package/fesm2022/sdcorejs-angular-components-form-generic.mjs +715 -436
  104. package/fesm2022/sdcorejs-angular-components-form-generic.mjs.map +1 -1
  105. package/fesm2022/sdcorejs-angular-components-history.mjs +2 -2
  106. package/fesm2022/sdcorejs-angular-components-history.mjs.map +1 -1
  107. package/fesm2022/sdcorejs-angular-components-import-excel.mjs +38 -23
  108. package/fesm2022/sdcorejs-angular-components-import-excel.mjs.map +1 -1
  109. package/fesm2022/sdcorejs-angular-components-inform.mjs +5 -16
  110. package/fesm2022/sdcorejs-angular-components-inform.mjs.map +1 -1
  111. package/fesm2022/sdcorejs-angular-components-mini-editor.mjs.map +1 -1
  112. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs +5 -6
  113. package/fesm2022/sdcorejs-angular-components-modal-resizable.mjs.map +1 -1
  114. package/fesm2022/sdcorejs-angular-components-modal.mjs +28 -18
  115. package/fesm2022/sdcorejs-angular-components-modal.mjs.map +1 -1
  116. package/fesm2022/sdcorejs-angular-components-operator.mjs +1 -1
  117. package/fesm2022/sdcorejs-angular-components-operator.mjs.map +1 -1
  118. package/fesm2022/sdcorejs-angular-components-org-chart.mjs +4 -5
  119. package/fesm2022/sdcorejs-angular-components-org-chart.mjs.map +1 -1
  120. package/fesm2022/sdcorejs-angular-components-preview.mjs +40 -37
  121. package/fesm2022/sdcorejs-angular-components-preview.mjs.map +1 -1
  122. package/fesm2022/sdcorejs-angular-components-query-bar.mjs +38 -55
  123. package/fesm2022/sdcorejs-angular-components-query-bar.mjs.map +1 -1
  124. package/fesm2022/sdcorejs-angular-components-query-builder.mjs +5 -7
  125. package/fesm2022/sdcorejs-angular-components-query-builder.mjs.map +1 -1
  126. package/fesm2022/sdcorejs-angular-components-quick-action.mjs.map +1 -1
  127. package/fesm2022/sdcorejs-angular-components-section.mjs +3 -5
  128. package/fesm2022/sdcorejs-angular-components-section.mjs.map +1 -1
  129. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs +6 -7
  130. package/fesm2022/sdcorejs-angular-components-side-drawer.mjs.map +1 -1
  131. package/fesm2022/sdcorejs-angular-components-splitter.mjs +4 -4
  132. package/fesm2022/sdcorejs-angular-components-splitter.mjs.map +1 -1
  133. package/fesm2022/sdcorejs-angular-components-stepper.mjs +3 -4
  134. package/fesm2022/sdcorejs-angular-components-stepper.mjs.map +1 -1
  135. package/fesm2022/sdcorejs-angular-components-tab-router.mjs +36 -37
  136. package/fesm2022/sdcorejs-angular-components-tab-router.mjs.map +1 -1
  137. package/fesm2022/sdcorejs-angular-components-tab.mjs +3 -4
  138. package/fesm2022/sdcorejs-angular-components-tab.mjs.map +1 -1
  139. package/fesm2022/sdcorejs-angular-components-table.mjs +79 -101
  140. package/fesm2022/sdcorejs-angular-components-table.mjs.map +1 -1
  141. package/fesm2022/sdcorejs-angular-components-tree.mjs +6 -8
  142. package/fesm2022/sdcorejs-angular-components-tree.mjs.map +1 -1
  143. package/fesm2022/sdcorejs-angular-components-upload-file.mjs +14 -15
  144. package/fesm2022/sdcorejs-angular-components-upload-file.mjs.map +1 -1
  145. package/fesm2022/sdcorejs-angular-components-view.mjs +3 -9
  146. package/fesm2022/sdcorejs-angular-components-view.mjs.map +1 -1
  147. package/fesm2022/sdcorejs-angular-configurations.mjs.map +1 -1
  148. package/fesm2022/sdcorejs-angular-directives.mjs +2 -7
  149. package/fesm2022/sdcorejs-angular-directives.mjs.map +1 -1
  150. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs +5 -10
  151. package/fesm2022/sdcorejs-angular-forms-autocomplete.mjs.map +1 -1
  152. package/fesm2022/sdcorejs-angular-forms-checkbox.mjs.map +1 -1
  153. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs +9 -11
  154. package/fesm2022/sdcorejs-angular-forms-chip-calendar.mjs.map +1 -1
  155. package/fesm2022/sdcorejs-angular-forms-chip.mjs +7 -9
  156. package/fesm2022/sdcorejs-angular-forms-chip.mjs.map +1 -1
  157. package/fesm2022/sdcorejs-angular-forms-date-range.mjs +8 -12
  158. package/fesm2022/sdcorejs-angular-forms-date-range.mjs.map +1 -1
  159. package/fesm2022/sdcorejs-angular-forms-date.mjs +8 -12
  160. package/fesm2022/sdcorejs-angular-forms-date.mjs.map +1 -1
  161. package/fesm2022/sdcorejs-angular-forms-datetime.mjs +7 -13
  162. package/fesm2022/sdcorejs-angular-forms-datetime.mjs.map +1 -1
  163. package/fesm2022/sdcorejs-angular-forms-inline-text.mjs +4 -5
  164. package/fesm2022/sdcorejs-angular-forms-inline-text.mjs.map +1 -1
  165. package/fesm2022/sdcorejs-angular-forms-input-color.mjs +3 -3
  166. package/fesm2022/sdcorejs-angular-forms-input-color.mjs.map +1 -1
  167. package/fesm2022/sdcorejs-angular-forms-input-number.mjs +6 -8
  168. package/fesm2022/sdcorejs-angular-forms-input-number.mjs.map +1 -1
  169. package/fesm2022/sdcorejs-angular-forms-input.mjs +5 -7
  170. package/fesm2022/sdcorejs-angular-forms-input.mjs.map +1 -1
  171. package/fesm2022/sdcorejs-angular-forms-label.mjs +4 -6
  172. package/fesm2022/sdcorejs-angular-forms-label.mjs.map +1 -1
  173. package/fesm2022/sdcorejs-angular-forms-models.mjs.map +1 -1
  174. package/fesm2022/sdcorejs-angular-forms-radio.mjs +12 -4
  175. package/fesm2022/sdcorejs-angular-forms-radio.mjs.map +1 -1
  176. package/fesm2022/sdcorejs-angular-forms-select.mjs +51 -22
  177. package/fesm2022/sdcorejs-angular-forms-select.mjs.map +1 -1
  178. package/fesm2022/sdcorejs-angular-forms-switch.mjs.map +1 -1
  179. package/fesm2022/sdcorejs-angular-forms-textarea.mjs +7 -9
  180. package/fesm2022/sdcorejs-angular-forms-textarea.mjs.map +1 -1
  181. package/fesm2022/sdcorejs-angular-handlers.mjs +3 -6
  182. package/fesm2022/sdcorejs-angular-handlers.mjs.map +1 -1
  183. package/fesm2022/sdcorejs-angular-i18n.mjs +11 -7
  184. package/fesm2022/sdcorejs-angular-i18n.mjs.map +1 -1
  185. package/fesm2022/sdcorejs-angular-interceptors.mjs +0 -2
  186. package/fesm2022/sdcorejs-angular-interceptors.mjs.map +1 -1
  187. package/fesm2022/sdcorejs-angular-modules-auth.mjs +14 -38
  188. package/fesm2022/sdcorejs-angular-modules-auth.mjs.map +1 -1
  189. package/fesm2022/sdcorejs-angular-modules-authom.mjs +14 -14
  190. package/fesm2022/sdcorejs-angular-modules-authom.mjs.map +1 -1
  191. package/fesm2022/sdcorejs-angular-modules-icon.mjs +523 -0
  192. package/fesm2022/sdcorejs-angular-modules-icon.mjs.map +1 -0
  193. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs +22 -11
  194. package/fesm2022/sdcorejs-angular-modules-keycloak.mjs.map +1 -1
  195. package/fesm2022/sdcorejs-angular-modules-layout.mjs +53 -52
  196. package/fesm2022/sdcorejs-angular-modules-layout.mjs.map +1 -1
  197. package/fesm2022/sdcorejs-angular-modules-permission.mjs +5 -12
  198. package/fesm2022/sdcorejs-angular-modules-permission.mjs.map +1 -1
  199. package/fesm2022/sdcorejs-angular-modules.mjs +1 -0
  200. package/fesm2022/sdcorejs-angular-modules.mjs.map +1 -1
  201. package/fesm2022/sdcorejs-angular-pipes.mjs +71 -17
  202. package/fesm2022/sdcorejs-angular-pipes.mjs.map +1 -1
  203. package/fesm2022/sdcorejs-angular-services-api.mjs +0 -2
  204. package/fesm2022/sdcorejs-angular-services-api.mjs.map +1 -1
  205. package/fesm2022/sdcorejs-angular-services-cache.mjs +5 -11
  206. package/fesm2022/sdcorejs-angular-services-cache.mjs.map +1 -1
  207. package/fesm2022/sdcorejs-angular-services-confirm.mjs +19 -25
  208. package/fesm2022/sdcorejs-angular-services-confirm.mjs.map +1 -1
  209. package/fesm2022/sdcorejs-angular-services-docx.mjs +2 -8
  210. package/fesm2022/sdcorejs-angular-services-docx.mjs.map +1 -1
  211. package/fesm2022/sdcorejs-angular-services-excel.mjs +24 -16
  212. package/fesm2022/sdcorejs-angular-services-excel.mjs.map +1 -1
  213. package/fesm2022/sdcorejs-angular-services-license.mjs +5 -12
  214. package/fesm2022/sdcorejs-angular-services-license.mjs.map +1 -1
  215. package/fesm2022/sdcorejs-angular-services-notify.mjs +70 -87
  216. package/fesm2022/sdcorejs-angular-services-notify.mjs.map +1 -1
  217. package/fesm2022/sdcorejs-angular-services-storage.mjs +6 -15
  218. package/fesm2022/sdcorejs-angular-services-storage.mjs.map +1 -1
  219. package/fesm2022/sdcorejs-angular-utilities-data-state.mjs.map +1 -1
  220. package/fesm2022/sdcorejs-angular-utilities-extensions.mjs +47 -5
  221. package/fesm2022/sdcorejs-angular-utilities-extensions.mjs.map +1 -1
  222. package/fesm2022/sdcorejs-angular-utilities-models.mjs +21 -5
  223. package/fesm2022/sdcorejs-angular-utilities-models.mjs.map +1 -1
  224. package/fesm2022/sdcorejs-angular.mjs.map +1 -1
  225. package/forms/chip/src/chip.component.d.ts +2 -2
  226. package/forms/chip-calendar/src/chip-calendar.component.d.ts +2 -2
  227. package/forms/input-color/src/input-color.component.d.ts +2 -1
  228. package/forms/select/src/select-footer-action.directive.d.ts +5 -1
  229. package/forms/select/src/select.component.d.ts +4 -0
  230. package/modules/auth/guards/auth.guard.d.ts +2 -4
  231. package/modules/auth/guards/portal.guard.d.ts +2 -4
  232. package/modules/auth/services/auth.service.d.ts +3 -4
  233. package/modules/icon/index.d.ts +1 -0
  234. package/modules/icon/src/icon.component.d.ts +101 -0
  235. package/modules/icon/src/icon.model.d.ts +59 -0
  236. package/modules/icon/src/icon.provider.d.ts +33 -0
  237. package/modules/icon/src/index.d.ts +3 -0
  238. package/modules/index.d.ts +1 -0
  239. package/modules/layout/modules/home/guards/home-redirect.guard.d.ts +3 -5
  240. package/modules/permission/src/configurations/permission.configuration.d.ts +3 -3
  241. package/modules/permission/src/guards/permission.guard.d.ts +2 -5
  242. package/package.json +11 -6
  243. package/pipes/index.d.ts +3 -0
  244. package/pipes/src/format-date.pipe.d.ts +8 -0
  245. package/pipes/src/format-datetime.pipe.d.ts +8 -0
  246. package/pipes/src/format-number.pipe.d.ts +1 -3
  247. package/pipes/src/view.pipe.d.ts +7 -0
  248. package/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.d.ts +3 -3
  249. package/services/excel/src/lib/spreadsheet-formula-injection.util.d.ts +5 -0
  250. package/services/license/src/license.service.d.ts +2 -3
  251. package/services/notify/src/components/toast/toast.component.d.ts +9 -13
  252. package/services/notify/src/notify.service.d.ts +4 -5
  253. package/services/storage/src/storage.service.d.ts +3 -4
  254. package/utilities/extensions/index.d.ts +1 -0
  255. package/utilities/extensions/src/object.extension.d.ts +8 -0
  256. package/utilities/models/src/icon.model.d.ts +4 -2
  257. package/components/document-builder/src/plugins/paste-handler/filters/replacetabswithinprewithspaces.d.ts +0 -24
@@ -1,38 +1,35 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import * as i0 from '@angular/core';
3
- import { Inject, Component, inject, Injectable } from '@angular/core';
3
+ import { inject, Component, Injectable } from '@angular/core';
4
4
  import { FormsModule } from '@angular/forms';
5
5
  import * as i1 from '@angular/material/dialog';
6
- import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
7
- import * as i2 from '@angular/material/icon';
8
- import { MatIconModule } from '@angular/material/icon';
6
+ import { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
9
7
  import { SdButton } from '@sdcorejs/angular/components/button';
10
8
  import { SdDate } from '@sdcorejs/angular/forms/date';
11
9
  import { SdRadio } from '@sdcorejs/angular/forms/radio';
12
10
  import { SdTextarea } from '@sdcorejs/angular/forms/textarea';
13
11
  import { Utilities } from '@sdcorejs/utils/fns';
12
+ import { SdIcon } from '@sdcorejs/angular/modules/icon';
14
13
  import { I18nService } from '@sdcorejs/angular/i18n';
15
14
 
16
15
  class DialogConfirmComponent {
17
- dialogRef;
18
- data;
19
16
  value;
20
17
  required = false;
21
18
  id = `I${Utilities.generateUuid()}`;
22
- constructor(dialogRef, data) {
23
- this.dialogRef = dialogRef;
24
- this.data = data;
25
- if (data?.input) {
26
- this.value = data?.input?.defaultValue ?? '';
27
- this.required = data?.input?.required || false;
19
+ dialogRef = inject((MatDialogRef));
20
+ data = inject(MAT_DIALOG_DATA);
21
+ constructor() {
22
+ if (this.data?.input) {
23
+ this.value = this.data?.input?.defaultValue ?? '';
24
+ this.required = this.data?.input?.required || false;
28
25
  }
29
- if (data?.date) {
30
- this.value = data?.date?.defaultValue ?? '';
31
- this.required = data?.date?.required || false;
26
+ if (this.data?.date) {
27
+ this.value = this.data?.date?.defaultValue ?? '';
28
+ this.required = this.data?.date?.required || false;
32
29
  }
33
- if (data?.radio) {
34
- this.value = data?.radio?.defaultValue ?? '';
35
- this.required = data?.radio?.required || false;
30
+ if (this.data?.radio) {
31
+ this.value = this.data?.radio?.defaultValue ?? '';
32
+ this.required = this.data?.radio?.required || false;
36
33
  }
37
34
  }
38
35
  onCancel = () => {
@@ -47,16 +44,13 @@ class DialogConfirmComponent {
47
44
  this.dialogRef.close({ action: 'ACCEPT', value: null });
48
45
  }
49
46
  };
50
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: DialogConfirmComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
51
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: DialogConfirmComponent, isStandalone: true, selector: "sd-dialog-confirm", ngImport: i0, template: "<div mat-dialog-title class=\"\">\n @if (data.icon) {\n <mat-icon>\n {{ data.icon }}\n </mat-icon>\n }\n <span class=\"T24M\" [innerHtml]=\"data.title || 'Confirm'\"></span>\n</div>\n<div mat-dialog-content>\n <div class=\"T14R mb-4\" [innerHtml]=\"data.message\"></div>\n @if (data.input) {\n <sd-textarea [placeholder]=\"data.input.placeholder\" [(model)]=\"value\" [rows]=\"5\" [maxlength]=\"data.input.maxlength!\" />\n }\n @if (data.date) {\n <sd-date\n [placeholder]=\"data.date.placeholder\"\n [(model)]=\"value\"\n type=\"date\"\n [min]=\"data.date.min!\"\n [max]=\"data.date.max!\"\n [required]=\"data.date.required\">\n </sd-date>\n }\n @if (data.radio) {\n <sd-radio\n [items]=\"data.radio.items\"\n [valueField]=\"data.radio.valueField\"\n [displayField]=\"data.radio.displayField\"\n [display]=\"data.radio.display || 'column'\"\n [(model)]=\"value\"\n [required]=\"data.radio.required\">\n </sd-radio>\n }\n</div>\n<div mat-dialog-actions align=\"end\">\n @if (data.noTitle) {\n <sd-button [color]=\"data.noButtonColor || 'secondary'\" [title]=\"data.noTitle\" (click)=\"onCancel()\"></sd-button>\n }\n @if (data.yesTitle) {\n <sd-button\n class=\"ml-8\"\n type=\"fill\"\n [color]=\"data.yesButtonColor || 'primary'\"\n [disabled]=\"required && !value\"\n cdkFocusInitial\n [title]=\"data.yesTitle\"\n (click)=\"onAccept()\"></sd-button>\n }\n</div>\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}:host .mat-dialog-content{margin:0 -16px 16px!important}:host .mat-button{background-color:#f5f5f5}:host ::ng-deep .mat-dialog-title{display:flex;align-items:center;justify-content:flex-start}:host ::ng-deep .mat-dialog-title .mat-icon{margin-right:5px}:host{display:block}:host ::ng-deep .mat-dialog-title .mat-icon.info{color:var(--sd-info)}:host ::ng-deep .mat-dialog-title .mat-icon.warning{color:var(--sd-warning)}:host ::ng-deep .mat-dialog-title .mat-icon.success{color:var(--sd-success)}:host ::ng-deep .mat-dialog-title .mat-icon.error{color:var(--sd-error)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: SdButton, selector: "sd-button", inputs: ["autoId", "type", "color", "size", "fontSet", "title", "width", "tooltip", "prefixIcon", "suffixIcon", "disabled", "loading", "block", "htmlType"], outputs: ["click"] }, { kind: "component", type: SdDate, selector: "sd-date", inputs: ["autoId", "name", "size", "form", "label", "helperText", "placeholder", "hideInlineError", "required", "disabled", "viewed", "clearable", "inlineError", "hyperlink", "appearance", "floatLabel", "min", "minDate", "max", "maxDate", "model"], outputs: ["modelChange", "sdChange", "sdFocus"] }, { kind: "component", type: SdRadio, selector: "sd-radio", inputs: ["autoId", "name", "form", "label", "placeholder", "display", "items", "valueField", "displayField", "required", "inlineError", "disabled", "viewed", "color", "hyperlink", "model"], outputs: ["modelChange", "sdChange", "sdSelection"] }, { kind: "component", type: SdTextarea, selector: "sd-textarea", inputs: ["autoId", "name", "size", "form", "label", "helperText", "placeholder", "rows", "hideInlineError", "required", "disabled", "viewed", "autoHeight", "maxlength", "pattern", "validator", "inlineError", "appearance", "floatLabel", "model"], outputs: ["modelChange", "sdChange"] }] });
47
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: DialogConfirmComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
48
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.21", type: DialogConfirmComponent, isStandalone: true, selector: "sd-dialog-confirm", ngImport: i0, template: "<div mat-dialog-title class=\"\">\n @if (data.icon) {\n <sd-icon [name]=\"data.icon\"></sd-icon>\n }\n <span class=\"T24M\" [innerHtml]=\"data.title || 'Confirm'\"></span>\n</div>\n<div mat-dialog-content>\n <div class=\"T14R mb-4\" [innerHtml]=\"data.message\"></div>\n @if (data.input) {\n <sd-textarea [placeholder]=\"data.input.placeholder\" [(model)]=\"value\" [rows]=\"5\" [maxlength]=\"data.input.maxlength!\" />\n }\n @if (data.date) {\n <sd-date\n [placeholder]=\"data.date.placeholder\"\n [(model)]=\"value\"\n type=\"date\"\n [min]=\"data.date.min!\"\n [max]=\"data.date.max!\"\n [required]=\"data.date.required\">\n </sd-date>\n }\n @if (data.radio) {\n <sd-radio\n [items]=\"data.radio.items\"\n [valueField]=\"data.radio.valueField\"\n [displayField]=\"data.radio.displayField\"\n [display]=\"data.radio.display || 'column'\"\n [(model)]=\"value\"\n [required]=\"data.radio.required\">\n </sd-radio>\n }\n</div>\n<div mat-dialog-actions align=\"end\">\n @if (data.noTitle) {\n <sd-button [color]=\"data.noButtonColor || 'secondary'\" [title]=\"data.noTitle\" (click)=\"onCancel()\"></sd-button>\n }\n @if (data.yesTitle) {\n <sd-button\n class=\"ml-8\"\n type=\"fill\"\n [color]=\"data.yesButtonColor || 'primary'\"\n [disabled]=\"required && !value\"\n cdkFocusInitial\n [title]=\"data.yesTitle\"\n (click)=\"onAccept()\"></sd-button>\n }\n</div>\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}:host .mat-dialog-content{margin:0 -16px 16px!important}:host .mat-button{background-color:#f5f5f5}:host ::ng-deep .mat-dialog-title{display:flex;align-items:center;justify-content:flex-start}:host ::ng-deep .mat-dialog-title sd-icon{margin-right:5px}:host{display:block}:host ::ng-deep .mat-dialog-title sd-icon.info{color:var(--sd-info)}:host ::ng-deep .mat-dialog-title sd-icon.warning{color:var(--sd-warning)}:host ::ng-deep .mat-dialog-title sd-icon.success{color:var(--sd-success)}:host ::ng-deep .mat-dialog-title sd-icon.error{color:var(--sd-error)}\n"], dependencies: [{ kind: "component", type: SdIcon, selector: "sd-icon", inputs: ["name", "fontIcon", "color", "set", "fontSet", "size", "strokeWidth", "absoluteStrokeWidth", "ariaLabel"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: SdButton, selector: "sd-button", inputs: ["autoId", "type", "color", "size", "fontSet", "title", "width", "tooltip", "prefixIcon", "suffixIcon", "disabled", "loading", "block", "htmlType"], outputs: ["click"] }, { kind: "component", type: SdDate, selector: "sd-date", inputs: ["autoId", "name", "size", "form", "label", "helperText", "placeholder", "hideInlineError", "required", "disabled", "viewed", "clearable", "inlineError", "hyperlink", "appearance", "floatLabel", "min", "minDate", "max", "maxDate", "model"], outputs: ["modelChange", "sdChange", "sdFocus"] }, { kind: "component", type: SdRadio, selector: "sd-radio", inputs: ["autoId", "name", "form", "label", "placeholder", "display", "items", "valueField", "displayField", "required", "inlineError", "disabled", "viewed", "color", "hyperlink", "model"], outputs: ["modelChange", "sdChange", "sdSelection"] }, { kind: "component", type: SdTextarea, selector: "sd-textarea", inputs: ["autoId", "name", "size", "form", "label", "helperText", "placeholder", "rows", "hideInlineError", "required", "disabled", "viewed", "autoHeight", "maxlength", "pattern", "validator", "inlineError", "appearance", "floatLabel", "model"], outputs: ["modelChange", "sdChange"] }] });
52
49
  }
53
50
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.21", ngImport: i0, type: DialogConfirmComponent, decorators: [{
54
51
  type: Component,
55
- args: [{ selector: 'sd-dialog-confirm', imports: [CommonModule, FormsModule, MatDialogModule, MatIconModule, SdButton, SdDate, SdRadio, SdTextarea], template: "<div mat-dialog-title class=\"\">\n @if (data.icon) {\n <mat-icon>\n {{ data.icon }}\n </mat-icon>\n }\n <span class=\"T24M\" [innerHtml]=\"data.title || 'Confirm'\"></span>\n</div>\n<div mat-dialog-content>\n <div class=\"T14R mb-4\" [innerHtml]=\"data.message\"></div>\n @if (data.input) {\n <sd-textarea [placeholder]=\"data.input.placeholder\" [(model)]=\"value\" [rows]=\"5\" [maxlength]=\"data.input.maxlength!\" />\n }\n @if (data.date) {\n <sd-date\n [placeholder]=\"data.date.placeholder\"\n [(model)]=\"value\"\n type=\"date\"\n [min]=\"data.date.min!\"\n [max]=\"data.date.max!\"\n [required]=\"data.date.required\">\n </sd-date>\n }\n @if (data.radio) {\n <sd-radio\n [items]=\"data.radio.items\"\n [valueField]=\"data.radio.valueField\"\n [displayField]=\"data.radio.displayField\"\n [display]=\"data.radio.display || 'column'\"\n [(model)]=\"value\"\n [required]=\"data.radio.required\">\n </sd-radio>\n }\n</div>\n<div mat-dialog-actions align=\"end\">\n @if (data.noTitle) {\n <sd-button [color]=\"data.noButtonColor || 'secondary'\" [title]=\"data.noTitle\" (click)=\"onCancel()\"></sd-button>\n }\n @if (data.yesTitle) {\n <sd-button\n class=\"ml-8\"\n type=\"fill\"\n [color]=\"data.yesButtonColor || 'primary'\"\n [disabled]=\"required && !value\"\n cdkFocusInitial\n [title]=\"data.yesTitle\"\n (click)=\"onAccept()\"></sd-button>\n }\n</div>\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}:host .mat-dialog-content{margin:0 -16px 16px!important}:host .mat-button{background-color:#f5f5f5}:host ::ng-deep .mat-dialog-title{display:flex;align-items:center;justify-content:flex-start}:host ::ng-deep .mat-dialog-title .mat-icon{margin-right:5px}:host{display:block}:host ::ng-deep .mat-dialog-title .mat-icon.info{color:var(--sd-info)}:host ::ng-deep .mat-dialog-title .mat-icon.warning{color:var(--sd-warning)}:host ::ng-deep .mat-dialog-title .mat-icon.success{color:var(--sd-success)}:host ::ng-deep .mat-dialog-title .mat-icon.error{color:var(--sd-error)}\n"] }]
56
- }], ctorParameters: () => [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
57
- type: Inject,
58
- args: [MAT_DIALOG_DATA]
59
- }] }] });
52
+ args: [{ selector: 'sd-dialog-confirm', imports: [SdIcon, CommonModule, FormsModule, MatDialogModule, SdButton, SdDate, SdRadio, SdTextarea], template: "<div mat-dialog-title class=\"\">\n @if (data.icon) {\n <sd-icon [name]=\"data.icon\"></sd-icon>\n }\n <span class=\"T24M\" [innerHtml]=\"data.title || 'Confirm'\"></span>\n</div>\n<div mat-dialog-content>\n <div class=\"T14R mb-4\" [innerHtml]=\"data.message\"></div>\n @if (data.input) {\n <sd-textarea [placeholder]=\"data.input.placeholder\" [(model)]=\"value\" [rows]=\"5\" [maxlength]=\"data.input.maxlength!\" />\n }\n @if (data.date) {\n <sd-date\n [placeholder]=\"data.date.placeholder\"\n [(model)]=\"value\"\n type=\"date\"\n [min]=\"data.date.min!\"\n [max]=\"data.date.max!\"\n [required]=\"data.date.required\">\n </sd-date>\n }\n @if (data.radio) {\n <sd-radio\n [items]=\"data.radio.items\"\n [valueField]=\"data.radio.valueField\"\n [displayField]=\"data.radio.displayField\"\n [display]=\"data.radio.display || 'column'\"\n [(model)]=\"value\"\n [required]=\"data.radio.required\">\n </sd-radio>\n }\n</div>\n<div mat-dialog-actions align=\"end\">\n @if (data.noTitle) {\n <sd-button [color]=\"data.noButtonColor || 'secondary'\" [title]=\"data.noTitle\" (click)=\"onCancel()\"></sd-button>\n }\n @if (data.yesTitle) {\n <sd-button\n class=\"ml-8\"\n type=\"fill\"\n [color]=\"data.yesButtonColor || 'primary'\"\n [disabled]=\"required && !value\"\n cdkFocusInitial\n [title]=\"data.yesTitle\"\n (click)=\"onAccept()\"></sd-button>\n }\n</div>\n", styles: [".text-primary{color:var(--sd-primary)!important}.bg-primary{background:var(--sd-primary)!important}.border-primary{border-color:var(--sd-primary)!important}.text-primary-light{color:var(--sd-primary-light)!important}.bg-primary-light{background:var(--sd-primary-light)!important}.border-primary-light{border-color:var(--sd-primary-light)!important}.text-primary-dark{color:var(--sd-primary-dark)!important}.bg-primary-dark{background:var(--sd-primary-dark)!important}.border-primary-dark{border-color:var(--sd-primary-dark)!important}.text-info{color:var(--sd-info)!important}.bg-info{background:var(--sd-info)!important}.border-info{border-color:var(--sd-info)!important}.text-info-light{color:var(--sd-info-light)!important}.bg-info-light{background:var(--sd-info-light)!important}.border-info-light{border-color:var(--sd-info-light)!important}.text-info-dark{color:var(--sd-info-dark)!important}.bg-info-dark{background:var(--sd-info-dark)!important}.border-info-dark{border-color:var(--sd-info-dark)!important}.text-success{color:var(--sd-success)!important}.bg-success{background:var(--sd-success)!important}.border-success{border-color:var(--sd-success)!important}.text-success-light{color:var(--sd-success-light)!important}.bg-success-light{background:var(--sd-success-light)!important}.border-success-light{border-color:var(--sd-success-light)!important}.text-success-dark{color:var(--sd-success-dark)!important}.bg-success-dark{background:var(--sd-success-dark)!important}.border-success-dark{border-color:var(--sd-success-dark)!important}.text-warning{color:var(--sd-warning)!important}.bg-warning{background:var(--sd-warning)!important}.border-warning{border-color:var(--sd-warning)!important}.text-warning-light{color:var(--sd-warning-light)!important}.bg-warning-light{background:var(--sd-warning-light)!important}.border-warning-light{border-color:var(--sd-warning-light)!important}.text-warning-dark{color:var(--sd-warning-dark)!important}.bg-warning-dark{background:var(--sd-warning-dark)!important}.border-warning-dark{border-color:var(--sd-warning-dark)!important}.text-error{color:var(--sd-error)!important}.bg-error{background:var(--sd-error)!important}.border-error{border-color:var(--sd-error)!important}.text-error-light{color:var(--sd-error-light)!important}.bg-error-light{background:var(--sd-error-light)!important}.border-error-light{border-color:var(--sd-error-light)!important}.text-error-dark{color:var(--sd-error-dark)!important}.bg-error-dark{background:var(--sd-error-dark)!important}.border-error-dark{border-color:var(--sd-error-dark)!important}.text-secondary{color:var(--sd-secondary)!important}.bg-secondary{background:var(--sd-secondary)!important}.border-secondary{border-color:var(--sd-secondary)!important}.text-secondary-light{color:var(--sd-secondary-light)!important}.bg-secondary-light{background:var(--sd-secondary-light)!important}.border-secondary-light{border-color:var(--sd-secondary-light)!important}.text-secondary-dark{color:var(--sd-secondary-dark)!important}.bg-secondary-dark{background:var(--sd-secondary-dark)!important}.border-secondary-dark{border-color:var(--sd-secondary-dark)!important}.text-light{color:var(--sd-light)!important}.bg-light{background:var(--sd-light)!important}.border-light{border-color:var(--sd-light)!important}.text-dark{color:var(--sd-dark)!important}.bg-dark{background:var(--sd-dark)!important}.border-dark{border-color:var(--sd-dark)!important}.text-black500{color:var(--sd-black500)!important}.bg-black500{background:var(--sd-black500)!important}.border-black500{border-color:var(--sd-black500)!important}.text-black400{color:var(--sd-black400)!important}.bg-black400{background:var(--sd-black400)!important}.border-black400{border-color:var(--sd-black400)!important}.text-black300{color:var(--sd-black300)!important}.bg-black300{background:var(--sd-black300)!important}.border-black300{border-color:var(--sd-black300)!important}.text-black200{color:var(--sd-black200)!important}.bg-black200{background:var(--sd-black200)!important}.border-black200{border-color:var(--sd-black200)!important}.text-black100{color:var(--sd-black100)!important}.bg-black100{background:var(--sd-black100)!important}.border-black100{border-color:var(--sd-black100)!important}.text-white{color:#fff!important}.bg-white{background:#fff!important}.border-white{border-color:#fff!important}.text-black{color:#000!important}.bg-black{background:#000!important}.border-black{border-color:#000!important}:host .mat-dialog-content{margin:0 -16px 16px!important}:host .mat-button{background-color:#f5f5f5}:host ::ng-deep .mat-dialog-title{display:flex;align-items:center;justify-content:flex-start}:host ::ng-deep .mat-dialog-title sd-icon{margin-right:5px}:host{display:block}:host ::ng-deep .mat-dialog-title sd-icon.info{color:var(--sd-info)}:host ::ng-deep .mat-dialog-title sd-icon.warning{color:var(--sd-warning)}:host ::ng-deep .mat-dialog-title sd-icon.success{color:var(--sd-success)}:host ::ng-deep .mat-dialog-title sd-icon.error{color:var(--sd-error)}\n"] }]
53
+ }], ctorParameters: () => [] });
60
54
 
61
55
  class SdConfirmService {
62
56
  dialog;
@@ -1 +1 @@
1
- {"version":3,"file":"sdcorejs-angular-services-confirm.mjs","sources":["../../../projects/sdcorejs-angular/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.ts","../../../projects/sdcorejs-angular/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.html","../../../projects/sdcorejs-angular/services/confirm/src/lib/confirm.service.ts","../../../projects/sdcorejs-angular/services/confirm/src/public-api.ts","../../../projects/sdcorejs-angular/services/confirm/sdcorejs-angular-services-confirm.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, Inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdDate } from '@sdcorejs/angular/forms/date';\nimport { SdRadio } from '@sdcorejs/angular/forms/radio';\nimport { SdTextarea } from '@sdcorejs/angular/forms/textarea';\nimport { Color } from '@sdcorejs/utils/models';\nimport { Utilities } from '@sdcorejs/utils/fns';\n\nexport interface DialogData {\n icon?: string;\n title?: string;\n message?: string;\n yesTitle?: string;\n noTitle?: string;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n input?: {\n placeholder?: string;\n minlength?: number;\n maxlength?: number;\n required?: boolean;\n defaultValue?: string;\n };\n date?: {\n required?: boolean;\n placeholder?: string;\n defaultValue?: string | Date;\n min?: string | Date;\n max?: string | Date;\n };\n radio?: {\n required?: boolean;\n defaultValue?: string | number;\n items: any[];\n valueField: string;\n displayField: string;\n display?: 'row' | 'column';\n };\n}\n\n@Component({\n selector: 'sd-dialog-confirm',\n templateUrl: 'dialog-confirm.component.html',\n styleUrls: ['./dialog-confirm.component.scss'],\n imports: [CommonModule, FormsModule, MatDialogModule, MatIconModule, SdButton, SdDate, SdRadio, SdTextarea],\n})\nexport class DialogConfirmComponent {\n value: any;\n required = false;\n id = `I${Utilities.generateUuid()}`;\n constructor(\n public dialogRef: MatDialogRef<DialogConfirmComponent>,\n @Inject(MAT_DIALOG_DATA) public data: DialogData\n ) {\n if (data?.input) {\n this.value = data?.input?.defaultValue ?? '';\n this.required = data?.input?.required || false;\n }\n if (data?.date) {\n this.value = data?.date?.defaultValue ?? '';\n this.required = data?.date?.required || false;\n }\n if (data?.radio) {\n this.value = data?.radio?.defaultValue ?? '';\n this.required = data?.radio?.required || false;\n }\n }\n\n onCancel = () => {\n this.dialogRef.close({ action: 'CANCEL', value: null });\n };\n\n onAccept = () => {\n // Always return an object with action and value for consistency\n if (this.data?.radio || this.data?.input || this.data?.date) {\n this.dialogRef.close({ action: 'ACCEPT', value: this.value });\n } else {\n this.dialogRef.close({ action: 'ACCEPT', value: null });\n }\n };\n}\n","<div mat-dialog-title class=\"\">\n @if (data.icon) {\n <mat-icon>\n {{ data.icon }}\n </mat-icon>\n }\n <span class=\"T24M\" [innerHtml]=\"data.title || 'Confirm'\"></span>\n</div>\n<div mat-dialog-content>\n <div class=\"T14R mb-4\" [innerHtml]=\"data.message\"></div>\n @if (data.input) {\n <sd-textarea [placeholder]=\"data.input.placeholder\" [(model)]=\"value\" [rows]=\"5\" [maxlength]=\"data.input.maxlength!\" />\n }\n @if (data.date) {\n <sd-date\n [placeholder]=\"data.date.placeholder\"\n [(model)]=\"value\"\n type=\"date\"\n [min]=\"data.date.min!\"\n [max]=\"data.date.max!\"\n [required]=\"data.date.required\">\n </sd-date>\n }\n @if (data.radio) {\n <sd-radio\n [items]=\"data.radio.items\"\n [valueField]=\"data.radio.valueField\"\n [displayField]=\"data.radio.displayField\"\n [display]=\"data.radio.display || 'column'\"\n [(model)]=\"value\"\n [required]=\"data.radio.required\">\n </sd-radio>\n }\n</div>\n<div mat-dialog-actions align=\"end\">\n @if (data.noTitle) {\n <sd-button [color]=\"data.noButtonColor || 'secondary'\" [title]=\"data.noTitle\" (click)=\"onCancel()\"></sd-button>\n }\n @if (data.yesTitle) {\n <sd-button\n class=\"ml-8\"\n type=\"fill\"\n [color]=\"data.yesButtonColor || 'primary'\"\n [disabled]=\"required && !value\"\n cdkFocusInitial\n [title]=\"data.yesTitle\"\n (click)=\"onAccept()\"></sd-button>\n }\n</div>\n","import { inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DialogConfirmComponent } from './components/dialog-confirm/dialog-confirm.component';\nimport { Color } from '@sdcorejs/utils/models';\nimport { I18nService } from '@sdcorejs/angular/i18n';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SdConfirmService {\n readonly #i18n = inject(I18nService);\n\n constructor(private dialog: MatDialog) {}\n\n confirm = (\n message: string,\n option: {\n title?: string;\n yesTitle?: string;\n noTitle?: string;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n width?: string;\n disableBackdropClose?: boolean;\n } = {}\n ) => {\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\n width: option?.width || '400px',\n disableClose: option?.disableBackdropClose ?? true,\n data: {\n title: option?.title || this.#i18n.t('core.confirm.title'),\n message,\n yesTitle: option?.yesTitle || this.#i18n.t('core.confirm.yes'),\n noTitle: option?.noTitle || this.#i18n.t('core.confirm.no'),\n noButtonColor: option?.noButtonColor || 'secondary',\n yesButtonColor: option?.yesButtonColor || 'primary',\n },\n });\n return new Promise((resolve, reject) => {\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n if (result.action === 'CANCEL') {\n reject(result.action);\n } else if (result.action === 'ACCEPT') {\n resolve(result.value);\n }\n }\n });\n });\n };\n\n withInput = (\n message?: string,\n option?: {\n title?: string;\n yesTitle?: string;\n noTitle?: string;\n required?: boolean;\n maxlength?: number;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n defaultValue?: string;\n disableBackdropClose?: boolean;\n }\n ): Promise<string> => {\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\n width: '400px',\n disableClose: option?.disableBackdropClose ?? true,\n data: {\n title: option?.title || this.#i18n.t('core.confirm.title'),\n message,\n yesTitle: option?.yesTitle || this.#i18n.t('core.confirm.yes-short'),\n noTitle: option?.noTitle || this.#i18n.t('core.confirm.no-short'),\n noButtonColor: option?.noButtonColor || 'secondary',\n yesButtonColor: option?.yesButtonColor || 'primary',\n input: {\n maxlength: option?.maxlength || 255,\n required: option?.required,\n defaultValue: option?.defaultValue || '',\n },\n },\n });\n return new Promise((resolve, reject) => {\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n if (result.action === 'CANCEL') {\n reject(result.action);\n } else if (result.action === 'ACCEPT') {\n resolve(result.value);\n }\n }\n });\n });\n };\n\n withRadio = (\n message?: string,\n option?: {\n title?: string;\n yesTitle?: string;\n noTitle?: string;\n required?: boolean;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n defaultValue?: string | number;\n items: any[];\n valueField: string;\n displayField: string;\n display?: 'row' | 'column';\n disableBackdropClose?: boolean;\n }\n ): Promise<string> => {\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\n width: '400px',\n disableClose: option?.disableBackdropClose ?? true,\n data: {\n title: option?.title || this.#i18n.t('core.confirm.title'),\n message,\n yesTitle: option?.yesTitle || this.#i18n.t('core.confirm.yes-short'),\n noTitle: option?.noTitle || this.#i18n.t('core.confirm.no-short'),\n noButtonColor: option?.noButtonColor || 'secondary',\n yesButtonColor: option?.yesButtonColor || 'primary',\n radio: {\n items: option?.items || [],\n valueField: option?.valueField || 'value',\n displayField: option?.displayField || 'label',\n display: option?.display || 'row',\n required: option?.required,\n defaultValue: option?.defaultValue,\n },\n },\n });\n return new Promise((resolve, reject) => {\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n if (result.action === 'CANCEL') {\n reject(result.action);\n } else if (result.action === 'ACCEPT') {\n resolve(result.value);\n }\n }\n });\n });\n };\n\n withDate = (\n message?: string,\n option?: {\n title?: string;\n\n yesTitle?: string;\n noTitle?: string;\n required?: boolean;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n defaultValue?: string | Date;\n placeholder?: string;\n disableBackdropClose?: boolean;\n }\n ): Promise<string> => {\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\n width: '400px',\n disableClose: option?.disableBackdropClose ?? true,\n data: {\n title: option?.title || this.#i18n.t('core.confirm.title'),\n message,\n yesTitle: option?.yesTitle || this.#i18n.t('core.confirm.yes-short'),\n noTitle: option?.noTitle || this.#i18n.t('core.confirm.no-short'),\n noButtonColor: option?.noButtonColor || 'secondary',\n yesButtonColor: option?.yesButtonColor || 'primary',\n date: {\n placeholder: option?.placeholder,\n required: option?.required,\n defaultValue: option?.defaultValue || '',\n },\n },\n });\n return new Promise((resolve, reject) => {\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n if (result.action === 'CANCEL') {\n reject(result.action);\n } else if (result.action === 'ACCEPT') {\n resolve(result.value);\n }\n }\n });\n });\n };\n}\n","/*\n * Public API Surface of superdev-angular-core\n */\n\nexport * from './lib/components/dialog-confirm/dialog-confirm.component';\nexport * from './lib/confirm.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sdcorejs-angular-services-confirm.mjs","sources":["../../../projects/sdcorejs-angular/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.ts","../../../projects/sdcorejs-angular/services/confirm/src/lib/components/dialog-confirm/dialog-confirm.component.html","../../../projects/sdcorejs-angular/services/confirm/src/lib/confirm.service.ts","../../../projects/sdcorejs-angular/services/confirm/src/public-api.ts","../../../projects/sdcorejs-angular/services/confirm/sdcorejs-angular-services-confirm.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, inject } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';\nimport { SdButton } from '@sdcorejs/angular/components/button';\nimport { SdDate } from '@sdcorejs/angular/forms/date';\nimport { SdRadio } from '@sdcorejs/angular/forms/radio';\nimport { SdTextarea } from '@sdcorejs/angular/forms/textarea';\nimport { Color } from '@sdcorejs/utils/models';\nimport { Utilities } from '@sdcorejs/utils/fns';\nimport { SdIcon } from '@sdcorejs/angular/modules/icon';\n\nexport interface DialogData {\n icon?: string;\n title?: string;\n message?: string;\n yesTitle?: string;\n noTitle?: string;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n input?: {\n placeholder?: string;\n minlength?: number;\n maxlength?: number;\n required?: boolean;\n defaultValue?: string;\n };\n date?: {\n required?: boolean;\n placeholder?: string;\n defaultValue?: string | Date;\n min?: string | Date;\n max?: string | Date;\n };\n radio?: {\n required?: boolean;\n defaultValue?: string | number;\n items: any[];\n valueField: string;\n displayField: string;\n display?: 'row' | 'column';\n };\n}\n\n@Component({\n selector: 'sd-dialog-confirm',\n templateUrl: 'dialog-confirm.component.html',\n styleUrl: './dialog-confirm.component.scss',\n imports: [SdIcon, CommonModule, FormsModule, MatDialogModule, SdButton, SdDate, SdRadio, SdTextarea],\n})\nexport class DialogConfirmComponent {\n value: any;\n required = false;\n id = `I${Utilities.generateUuid()}`;\n public readonly dialogRef = inject(MatDialogRef<DialogConfirmComponent>);\n public readonly data = inject<DialogData>(MAT_DIALOG_DATA);\n\n constructor() {\n if (this.data?.input) {\n this.value = this.data?.input?.defaultValue ?? '';\n this.required = this.data?.input?.required || false;\n }\n if (this.data?.date) {\n this.value = this.data?.date?.defaultValue ?? '';\n this.required = this.data?.date?.required || false;\n }\n if (this.data?.radio) {\n this.value = this.data?.radio?.defaultValue ?? '';\n this.required = this.data?.radio?.required || false;\n }\n }\n\n onCancel = () => {\n this.dialogRef.close({ action: 'CANCEL', value: null });\n };\n\n onAccept = () => {\n // Always return an object with action and value for consistency\n if (this.data?.radio || this.data?.input || this.data?.date) {\n this.dialogRef.close({ action: 'ACCEPT', value: this.value });\n } else {\n this.dialogRef.close({ action: 'ACCEPT', value: null });\n }\n };\n}\n","<div mat-dialog-title class=\"\">\n @if (data.icon) {\n <sd-icon [name]=\"data.icon\"></sd-icon>\n }\n <span class=\"T24M\" [innerHtml]=\"data.title || 'Confirm'\"></span>\n</div>\n<div mat-dialog-content>\n <div class=\"T14R mb-4\" [innerHtml]=\"data.message\"></div>\n @if (data.input) {\n <sd-textarea [placeholder]=\"data.input.placeholder\" [(model)]=\"value\" [rows]=\"5\" [maxlength]=\"data.input.maxlength!\" />\n }\n @if (data.date) {\n <sd-date\n [placeholder]=\"data.date.placeholder\"\n [(model)]=\"value\"\n type=\"date\"\n [min]=\"data.date.min!\"\n [max]=\"data.date.max!\"\n [required]=\"data.date.required\">\n </sd-date>\n }\n @if (data.radio) {\n <sd-radio\n [items]=\"data.radio.items\"\n [valueField]=\"data.radio.valueField\"\n [displayField]=\"data.radio.displayField\"\n [display]=\"data.radio.display || 'column'\"\n [(model)]=\"value\"\n [required]=\"data.radio.required\">\n </sd-radio>\n }\n</div>\n<div mat-dialog-actions align=\"end\">\n @if (data.noTitle) {\n <sd-button [color]=\"data.noButtonColor || 'secondary'\" [title]=\"data.noTitle\" (click)=\"onCancel()\"></sd-button>\n }\n @if (data.yesTitle) {\n <sd-button\n class=\"ml-8\"\n type=\"fill\"\n [color]=\"data.yesButtonColor || 'primary'\"\n [disabled]=\"required && !value\"\n cdkFocusInitial\n [title]=\"data.yesTitle\"\n (click)=\"onAccept()\"></sd-button>\n }\n</div>\n","import { inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { DialogConfirmComponent } from './components/dialog-confirm/dialog-confirm.component';\nimport { Color } from '@sdcorejs/utils/models';\nimport { I18nService } from '@sdcorejs/angular/i18n';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SdConfirmService {\n readonly #i18n = inject(I18nService);\n\n constructor(private dialog: MatDialog) {}\n\n confirm = (\n message: string,\n option: {\n title?: string;\n yesTitle?: string;\n noTitle?: string;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n width?: string;\n disableBackdropClose?: boolean;\n } = {}\n ) => {\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\n width: option?.width || '400px',\n disableClose: option?.disableBackdropClose ?? true,\n data: {\n title: option?.title || this.#i18n.t('core.confirm.title'),\n message,\n yesTitle: option?.yesTitle || this.#i18n.t('core.confirm.yes'),\n noTitle: option?.noTitle || this.#i18n.t('core.confirm.no'),\n noButtonColor: option?.noButtonColor || 'secondary',\n yesButtonColor: option?.yesButtonColor || 'primary',\n },\n });\n return new Promise((resolve, reject) => {\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n if (result.action === 'CANCEL') {\n reject(result.action);\n } else if (result.action === 'ACCEPT') {\n resolve(result.value);\n }\n }\n });\n });\n };\n\n withInput = (\n message?: string,\n option?: {\n title?: string;\n yesTitle?: string;\n noTitle?: string;\n required?: boolean;\n maxlength?: number;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n defaultValue?: string;\n disableBackdropClose?: boolean;\n }\n ): Promise<string> => {\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\n width: '400px',\n disableClose: option?.disableBackdropClose ?? true,\n data: {\n title: option?.title || this.#i18n.t('core.confirm.title'),\n message,\n yesTitle: option?.yesTitle || this.#i18n.t('core.confirm.yes-short'),\n noTitle: option?.noTitle || this.#i18n.t('core.confirm.no-short'),\n noButtonColor: option?.noButtonColor || 'secondary',\n yesButtonColor: option?.yesButtonColor || 'primary',\n input: {\n maxlength: option?.maxlength || 255,\n required: option?.required,\n defaultValue: option?.defaultValue || '',\n },\n },\n });\n return new Promise((resolve, reject) => {\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n if (result.action === 'CANCEL') {\n reject(result.action);\n } else if (result.action === 'ACCEPT') {\n resolve(result.value);\n }\n }\n });\n });\n };\n\n withRadio = (\n message?: string,\n option?: {\n title?: string;\n yesTitle?: string;\n noTitle?: string;\n required?: boolean;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n defaultValue?: string | number;\n items: any[];\n valueField: string;\n displayField: string;\n display?: 'row' | 'column';\n disableBackdropClose?: boolean;\n }\n ): Promise<string> => {\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\n width: '400px',\n disableClose: option?.disableBackdropClose ?? true,\n data: {\n title: option?.title || this.#i18n.t('core.confirm.title'),\n message,\n yesTitle: option?.yesTitle || this.#i18n.t('core.confirm.yes-short'),\n noTitle: option?.noTitle || this.#i18n.t('core.confirm.no-short'),\n noButtonColor: option?.noButtonColor || 'secondary',\n yesButtonColor: option?.yesButtonColor || 'primary',\n radio: {\n items: option?.items || [],\n valueField: option?.valueField || 'value',\n displayField: option?.displayField || 'label',\n display: option?.display || 'row',\n required: option?.required,\n defaultValue: option?.defaultValue,\n },\n },\n });\n return new Promise((resolve, reject) => {\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n if (result.action === 'CANCEL') {\n reject(result.action);\n } else if (result.action === 'ACCEPT') {\n resolve(result.value);\n }\n }\n });\n });\n };\n\n withDate = (\n message?: string,\n option?: {\n title?: string;\n\n yesTitle?: string;\n noTitle?: string;\n required?: boolean;\n yesButtonColor?: Color;\n noButtonColor?: Color;\n defaultValue?: string | Date;\n placeholder?: string;\n disableBackdropClose?: boolean;\n }\n ): Promise<string> => {\n const dialogRef = this.dialog.open(DialogConfirmComponent, {\n width: '400px',\n disableClose: option?.disableBackdropClose ?? true,\n data: {\n title: option?.title || this.#i18n.t('core.confirm.title'),\n message,\n yesTitle: option?.yesTitle || this.#i18n.t('core.confirm.yes-short'),\n noTitle: option?.noTitle || this.#i18n.t('core.confirm.no-short'),\n noButtonColor: option?.noButtonColor || 'secondary',\n yesButtonColor: option?.yesButtonColor || 'primary',\n date: {\n placeholder: option?.placeholder,\n required: option?.required,\n defaultValue: option?.defaultValue || '',\n },\n },\n });\n return new Promise((resolve, reject) => {\n dialogRef.afterClosed().subscribe(result => {\n if (result) {\n if (result.action === 'CANCEL') {\n reject(result.action);\n } else if (result.action === 'ACCEPT') {\n resolve(result.value);\n }\n }\n });\n });\n };\n}\n","/*\n * Public API Surface of superdev-angular-core\n */\n\nexport * from './lib/components/dialog-confirm/dialog-confirm.component';\nexport * from './lib/confirm.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { OpenFile, PreopenDirectory, File as File$1, ConsoleStdout, WASI } from
5
5
  import * as i1 from '@sdcorejs/angular/services/notify';
6
6
  import * as i2 from '@sdcorejs/angular/services/loading';
7
7
 
8
+ /* eslint-disable @typescript-eslint/ban-ts-comment */
8
9
  /* Pandoc WASM core logic — adapted from pandoc-wasm/src/core.js
9
10
  *
10
11
  * This file is a local copy of the environment-agnostic pandoc core.
@@ -21,7 +22,7 @@ function createPandocInstance(wasmBinary) {
21
22
  const fileSystem = new Map();
22
23
  const fds = [
23
24
  new OpenFile(new File$1(new Uint8Array(), { readonly: true })),
24
- ConsoleStdout.lineBuffered((msg) => console.log(`[WASI stdout] ${msg}`)),
25
+ ConsoleStdout.lineBuffered(() => undefined),
25
26
  ConsoleStdout.lineBuffered((msg) => console.warn(`[WASI stderr] ${msg}`)),
26
27
  new PreopenDirectory('/', fileSystem),
27
28
  ];
@@ -201,16 +202,12 @@ class SdDocxService {
201
202
  if (this.#pandocInstance) {
202
203
  return this.#pandocInstance;
203
204
  }
204
- console.log('[SdDocxService] Fetching WASM binary from:', this.#PANDOC_WASM_URL);
205
205
  const wasmResponse = await fetch(this.#PANDOC_WASM_URL);
206
206
  if (!wasmResponse.ok) {
207
207
  throw new Error(`Failed to fetch pandoc.wasm: ${wasmResponse.status} ${wasmResponse.statusText}`);
208
208
  }
209
- console.log('[SdDocxService] WASM fetched, size:', wasmResponse.headers.get('content-length'));
210
209
  const wasmBinary = await wasmResponse.arrayBuffer();
211
- console.log('[SdDocxService] WASM binary loaded, bytes:', wasmBinary.byteLength);
212
210
  this.#pandocInstance = await createPandocInstance(wasmBinary);
213
- console.log('[SdDocxService] Pandoc instance created successfully');
214
211
  return this.#pandocInstance;
215
212
  }
216
213
  async convertToHtml(input, options) {
@@ -251,9 +248,7 @@ class SdDocxService {
251
248
  return null;
252
249
  }
253
250
  }
254
- console.log('[SdDocxService] Getting pandoc instance...');
255
251
  const pandoc = await this.#getPandocInstance();
256
- console.log('[SdDocxService] Converting DOCX, blob size:', blob.size);
257
252
  const pandocOpts = {
258
253
  from: 'docx',
259
254
  to: 'html',
@@ -262,7 +257,6 @@ class SdDocxService {
262
257
  'embed-resources': true,
263
258
  };
264
259
  const result = await pandoc.convert(pandocOpts, null, { 'document.docx': blob });
265
- console.log('[SdDocxService] Conversion done, stdout length:', result.stdout?.length, 'stderr:', result.stderr);
266
260
  return {
267
261
  html: result.stdout,
268
262
  messages: result.warnings.map((w) => String(w)),
@@ -1 +1 @@
1
- {"version":3,"file":"sdcorejs-angular-services-docx.mjs","sources":["../../../projects/sdcorejs-angular/services/docx/src/lib/pandoc-core.ts","../../../projects/sdcorejs-angular/services/docx/src/lib/docx.service.ts","../../../projects/sdcorejs-angular/services/docx/sdcorejs-angular-services-docx.ts"],"sourcesContent":["/* Pandoc WASM core logic — adapted from pandoc-wasm/src/core.js\n *\n * This file is a local copy of the environment-agnostic pandoc core.\n * It imports @bjorn3/browser_wasi_shim directly, avoiding the pandoc-wasm\n * package entry points which use top-level await (incompatible with\n * Angular's esbuild/Vite build pipeline).\n *\n * Source: https://github.com/pandoc/pandoc-wasm (GPL-2.0-or-later)\n */\n\n// @ts-nocheck\nimport {\n ConsoleStdout,\n File,\n OpenFile,\n PreopenDirectory,\n WASI,\n} from '@bjorn3/browser_wasi_shim';\n\nexport interface PandocConvertResult {\n stdout: string;\n stderr: string;\n warnings: any[];\n files: Record<string, any>;\n mediaFiles: Record<string, any>;\n}\n\nexport interface PandocInstance {\n convert(\n options: Record<string, any>,\n stdin: string | null,\n files: Record<string, Blob | string>\n ): Promise<PandocConvertResult>;\n}\n\nexport function createPandocInstance(wasmBinary: ArrayBuffer): Promise<PandocInstance> {\n const args = ['pandoc.wasm', '+RTS', '-H64m', '-RTS'];\n const env: string[] = [];\n const fileSystem = new Map();\n const fds = [\n new OpenFile(new File(new Uint8Array(), { readonly: true })),\n ConsoleStdout.lineBuffered((msg: string) => console.log(`[WASI stdout] ${msg}`)),\n ConsoleStdout.lineBuffered((msg: string) => console.warn(`[WASI stderr] ${msg}`)),\n new PreopenDirectory('/', fileSystem),\n ];\n const options = { debug: false };\n const wasi = new WASI(args, env, fds, options);\n\n return WebAssembly.instantiate(wasmBinary, {\n wasi_snapshot_preview1: wasi.wasiImport,\n }).then(({ instance }: any) => {\n wasi.initialize(instance);\n instance.exports.__wasm_call_ctors();\n\n function memory_data_view() {\n return new DataView(instance.exports.memory.buffer);\n }\n\n const argc_ptr = instance.exports.malloc(4);\n memory_data_view().setUint32(argc_ptr, args.length, true);\n const argv = instance.exports.malloc(4 * (args.length + 1));\n for (let i = 0; i < args.length; ++i) {\n const arg = instance.exports.malloc(args[i].length + 1);\n new TextEncoder().encodeInto(\n args[i],\n new Uint8Array(instance.exports.memory.buffer, arg, args[i].length)\n );\n memory_data_view().setUint8(arg + args[i].length, 0);\n memory_data_view().setUint32(argv + 4 * i, arg, true);\n }\n memory_data_view().setUint32(argv + 4 * args.length, 0, true);\n const argv_ptr = instance.exports.malloc(4);\n memory_data_view().setUint32(argv_ptr, argv, true);\n\n instance.exports.hs_init_with_rtsopts(argc_ptr, argv_ptr);\n\n async function addFile(filename: string, data: Blob | string, readonly: boolean) {\n let uint8Array: Uint8Array;\n if (typeof data === 'string') {\n uint8Array = new TextEncoder().encode(data);\n } else {\n const buffer = await data.arrayBuffer();\n uint8Array = new Uint8Array(buffer);\n }\n const file = new File(uint8Array, { readonly });\n fileSystem.set(filename, file);\n }\n\n async function convert(\n options: Record<string, any>,\n stdin: string | null,\n files: Record<string, Blob | string>\n ): Promise<PandocConvertResult> {\n const opts_str = JSON.stringify(options);\n const encoded = new TextEncoder().encode(opts_str);\n const opts_ptr = instance.exports.malloc(encoded.length);\n new TextEncoder().encodeInto(\n opts_str,\n new Uint8Array(instance.exports.memory.buffer, opts_ptr, encoded.length)\n );\n\n files = { ...files };\n\n fileSystem.clear();\n const in_file = new File(new Uint8Array(), { readonly: true });\n const out_file = new File(new Uint8Array(), { readonly: false });\n const err_file = new File(new Uint8Array(), { readonly: false });\n const warnings_file = new File(new Uint8Array(), { readonly: false });\n fileSystem.set('stdin', in_file);\n fileSystem.set('stdout', out_file);\n fileSystem.set('stderr', err_file);\n fileSystem.set('warnings', warnings_file);\n\n const knownFiles = new Set(['stdin', 'stdout', 'stderr', 'warnings']);\n\n for (const filename in files) {\n await addFile(filename, files[filename], true);\n knownFiles.add(filename);\n }\n\n const outputFileName = options['output-file'] || null;\n const extractMediaPath = options['extract-media'] || null;\n\n if (outputFileName) {\n await addFile(outputFileName, new Blob(), false);\n knownFiles.add(outputFileName);\n }\n\n if (extractMediaPath) {\n await addFile(extractMediaPath, new Blob(), false);\n if (extractMediaPath.endsWith('.zip')) {\n knownFiles.add(extractMediaPath);\n }\n }\n\n if (stdin) {\n in_file.data = new TextEncoder().encode(stdin);\n }\n\n instance.exports.convert(opts_ptr, encoded.length);\n\n if (options['output-file']) {\n const outputFile = fileSystem.get(options['output-file']);\n if (outputFile && outputFile.data && outputFile.data.length > 0) {\n files[options['output-file']] = new Blob([outputFile.data]);\n }\n }\n\n if (options['extract-media']) {\n const mediaFile = fileSystem.get(options['extract-media']);\n if (mediaFile && mediaFile.data && mediaFile.data.length > 0) {\n files[options['extract-media']] = new Blob([mediaFile.data], { type: 'application/zip' });\n }\n }\n\n const mediaFiles: Record<string, Blob> = {};\n for (const [name, fileData] of fileSystem.entries()) {\n if (!knownFiles.has(name) && fileData && fileData.data && fileData.data.length > 0) {\n const blob = new Blob([fileData.data]);\n files[name] = blob;\n if (name !== outputFileName && name !== extractMediaPath) {\n mediaFiles[name] = blob;\n }\n }\n }\n\n const rawWarnings = new TextDecoder('utf-8', { fatal: true }).decode(warnings_file.data);\n let warnings: any[] = [];\n if (rawWarnings) {\n try {\n warnings = JSON.parse(rawWarnings);\n } catch (e) {\n console.warn('Failed to parse warnings:', e);\n }\n }\n\n return {\n stdout: new TextDecoder('utf-8', { fatal: true }).decode(out_file.data),\n stderr: new TextDecoder('utf-8', { fatal: true }).decode(err_file.data),\n warnings,\n files,\n mediaFiles,\n };\n }\n\n return { convert } as PandocInstance;\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { SdNotifyService } from '@sdcorejs/angular/services/notify';\nimport { SdLoadingService } from '@sdcorejs/angular/services/loading';\nimport { I18nService } from '@sdcorejs/angular/i18n';\n\nimport { SdDocxConvertOptions, SdDocxConvertResult } from './docx.model';\nimport { createPandocInstance, PandocInstance } from './pandoc-core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SdDocxService {\n readonly #i18n = inject(I18nService);\n\n readonly #DEFAULT_MAX_SIZE_MB = 50;\n readonly #VALID_EXTENSIONS = ['.doc', '.docx'];\n\n readonly #PANDOC_WASM_URL = 'https://pandoc.github.io/pandoc-wasm/pandoc.wasm';\n\n #fileInput: HTMLInputElement | null = null;\n #pandocInstance: PandocInstance | null = null;\n\n constructor(\n private notifyService: SdNotifyService,\n private loadingService: SdLoadingService\n ) {}\n\n async open(options?: SdDocxConvertOptions): Promise<SdDocxConvertResult | null> {\n return new Promise(resolve => {\n this.#createFileInput();\n if (!this.#fileInput) {\n resolve(null);\n return;\n }\n\n const handleChange = async (event: Event) => {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0];\n\n if (!file) {\n resolve(null);\n return;\n }\n\n this.loadingService.start();\n try {\n const result = await this.convertToHtml(file, options);\n resolve(result);\n } catch (error) {\n console.error('[SdDocxService] DocX conversion error:', error);\n this.notifyService.error(this.#i18n.t('core.docx.convert-error'));\n resolve(null);\n } finally {\n input.value = '';\n input.removeEventListener('change', handleChange);\n this.loadingService.stop();\n }\n };\n\n this.#fileInput.addEventListener('change', handleChange, { once: true });\n this.#fileInput.click();\n });\n }\n\n #createFileInput(): void {\n if (this.#fileInput) {\n return;\n }\n\n this.#fileInput = document.createElement('input');\n this.#fileInput.type = 'file';\n this.#fileInput.accept = '.doc,.docx';\n this.#fileInput.style.display = 'none';\n document.body.appendChild(this.#fileInput);\n }\n\n async #getPandocInstance(): Promise<PandocInstance> {\n if (this.#pandocInstance) {\n return this.#pandocInstance;\n }\n\n console.log('[SdDocxService] Fetching WASM binary from:', this.#PANDOC_WASM_URL);\n const wasmResponse = await fetch(this.#PANDOC_WASM_URL);\n if (!wasmResponse.ok) {\n throw new Error(`Failed to fetch pandoc.wasm: ${wasmResponse.status} ${wasmResponse.statusText}`);\n }\n console.log('[SdDocxService] WASM fetched, size:', wasmResponse.headers.get('content-length'));\n const wasmBinary = await wasmResponse.arrayBuffer();\n console.log('[SdDocxService] WASM binary loaded, bytes:', wasmBinary.byteLength);\n this.#pandocInstance = await createPandocInstance(wasmBinary);\n console.log('[SdDocxService] Pandoc instance created successfully');\n return this.#pandocInstance;\n }\n\n async convertToHtml(input: File | Blob | ArrayBuffer, options?: SdDocxConvertOptions): Promise<SdDocxConvertResult | null> {\n const opts = {\n validateFormat: true,\n validateSize: true,\n maxSizeInMb: this.#DEFAULT_MAX_SIZE_MB,\n ...options,\n };\n\n try {\n let fileName: string | undefined;\n let fileSize: number | undefined;\n let blob: Blob;\n\n if (input instanceof File) {\n fileName = input.name;\n fileSize = input.size;\n blob = input;\n } else if (input instanceof Blob) {\n fileSize = input.size;\n blob = input;\n } else {\n blob = new Blob([input], {\n type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n });\n }\n\n if (opts.validateFormat && fileName) {\n if (!this.#isValidFormat(fileName)) {\n this.notifyService.error(this.#i18n.t('core.docx.invalid-format'));\n return null;\n }\n }\n\n if (opts.validateSize && fileSize !== undefined) {\n const maxSizeInBytes = opts.maxSizeInMb! * 1024 * 1024;\n if (fileSize > maxSizeInBytes) {\n this.notifyService.error(this.#i18n.t('core.docx.size-exceeded'));\n return null;\n }\n }\n\n console.log('[SdDocxService] Getting pandoc instance...');\n const pandoc = await this.#getPandocInstance();\n console.log('[SdDocxService] Converting DOCX, blob size:', blob.size);\n\n const pandocOpts: Record<string, any> = {\n from: 'docx',\n to: 'html',\n 'input-files': ['document.docx'],\n standalone: true,\n 'embed-resources': true,\n };\n\n const result = await pandoc.convert(pandocOpts, null, { 'document.docx': blob });\n console.log('[SdDocxService] Conversion done, stdout length:', result.stdout?.length, 'stderr:', result.stderr);\n\n return {\n html: result.stdout,\n messages: result.warnings.map((w: any) => String(w)),\n };\n } catch (error) {\n console.error('[SdDocxService] DocX conversion error:', error);\n this.notifyService.error(this.#i18n.t('core.docx.convert-error'));\n return null;\n }\n }\n\n async convertToHtmlString(input: File | Blob | ArrayBuffer, options?: SdDocxConvertOptions): Promise<string | null> {\n const result = await this.convertToHtml(input, options);\n return result?.html ?? null;\n }\n\n #isValidFormat(fileName: string): boolean {\n const lowerCaseName = fileName.toLowerCase();\n return this.#VALID_EXTENSIONS.some(ext => lowerCaseName.endsWith(ext));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["File"],"mappings":"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"}
1
+ {"version":3,"file":"sdcorejs-angular-services-docx.mjs","sources":["../../../projects/sdcorejs-angular/services/docx/src/lib/pandoc-core.ts","../../../projects/sdcorejs-angular/services/docx/src/lib/docx.service.ts","../../../projects/sdcorejs-angular/services/docx/sdcorejs-angular-services-docx.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* Pandoc WASM core logic — adapted from pandoc-wasm/src/core.js\n *\n * This file is a local copy of the environment-agnostic pandoc core.\n * It imports @bjorn3/browser_wasi_shim directly, avoiding the pandoc-wasm\n * package entry points which use top-level await (incompatible with\n * Angular's esbuild/Vite build pipeline).\n *\n * Source: https://github.com/pandoc/pandoc-wasm (GPL-2.0-or-later)\n */\n\n// @ts-nocheck\nimport { ConsoleStdout, File, OpenFile, PreopenDirectory, WASI } from '@bjorn3/browser_wasi_shim';\n\nexport interface PandocConvertResult {\n stdout: string;\n stderr: string;\n warnings: any[];\n files: Record<string, any>;\n mediaFiles: Record<string, any>;\n}\n\nexport interface PandocInstance {\n convert(options: Record<string, any>, stdin: string | null, files: Record<string, Blob | string>): Promise<PandocConvertResult>;\n}\n\nexport function createPandocInstance(wasmBinary: ArrayBuffer): Promise<PandocInstance> {\n const args = ['pandoc.wasm', '+RTS', '-H64m', '-RTS'];\n const env: string[] = [];\n const fileSystem = new Map();\n const fds = [\n new OpenFile(new File(new Uint8Array(), { readonly: true })),\n ConsoleStdout.lineBuffered(() => undefined),\n ConsoleStdout.lineBuffered((msg: string) => console.warn(`[WASI stderr] ${msg}`)),\n new PreopenDirectory('/', fileSystem),\n ];\n const options = { debug: false };\n const wasi = new WASI(args, env, fds, options);\n\n return WebAssembly.instantiate(wasmBinary, {\n wasi_snapshot_preview1: wasi.wasiImport,\n }).then(({ instance }: any) => {\n wasi.initialize(instance);\n instance.exports.__wasm_call_ctors();\n\n function memory_data_view() {\n return new DataView(instance.exports.memory.buffer);\n }\n\n const argc_ptr = instance.exports.malloc(4);\n memory_data_view().setUint32(argc_ptr, args.length, true);\n const argv = instance.exports.malloc(4 * (args.length + 1));\n for (let i = 0; i < args.length; ++i) {\n const arg = instance.exports.malloc(args[i].length + 1);\n new TextEncoder().encodeInto(args[i], new Uint8Array(instance.exports.memory.buffer, arg, args[i].length));\n memory_data_view().setUint8(arg + args[i].length, 0);\n memory_data_view().setUint32(argv + 4 * i, arg, true);\n }\n memory_data_view().setUint32(argv + 4 * args.length, 0, true);\n const argv_ptr = instance.exports.malloc(4);\n memory_data_view().setUint32(argv_ptr, argv, true);\n\n instance.exports.hs_init_with_rtsopts(argc_ptr, argv_ptr);\n\n async function addFile(filename: string, data: Blob | string, readonly: boolean) {\n let uint8Array: Uint8Array;\n if (typeof data === 'string') {\n uint8Array = new TextEncoder().encode(data);\n } else {\n const buffer = await data.arrayBuffer();\n uint8Array = new Uint8Array(buffer);\n }\n const file = new File(uint8Array, { readonly });\n fileSystem.set(filename, file);\n }\n\n async function convert(\n options: Record<string, any>,\n stdin: string | null,\n files: Record<string, Blob | string>\n ): Promise<PandocConvertResult> {\n const opts_str = JSON.stringify(options);\n const encoded = new TextEncoder().encode(opts_str);\n const opts_ptr = instance.exports.malloc(encoded.length);\n new TextEncoder().encodeInto(opts_str, new Uint8Array(instance.exports.memory.buffer, opts_ptr, encoded.length));\n\n files = { ...files };\n\n fileSystem.clear();\n const in_file = new File(new Uint8Array(), { readonly: true });\n const out_file = new File(new Uint8Array(), { readonly: false });\n const err_file = new File(new Uint8Array(), { readonly: false });\n const warnings_file = new File(new Uint8Array(), { readonly: false });\n fileSystem.set('stdin', in_file);\n fileSystem.set('stdout', out_file);\n fileSystem.set('stderr', err_file);\n fileSystem.set('warnings', warnings_file);\n\n const knownFiles = new Set(['stdin', 'stdout', 'stderr', 'warnings']);\n\n for (const filename in files) {\n await addFile(filename, files[filename], true);\n knownFiles.add(filename);\n }\n\n const outputFileName = options['output-file'] || null;\n const extractMediaPath = options['extract-media'] || null;\n\n if (outputFileName) {\n await addFile(outputFileName, new Blob(), false);\n knownFiles.add(outputFileName);\n }\n\n if (extractMediaPath) {\n await addFile(extractMediaPath, new Blob(), false);\n if (extractMediaPath.endsWith('.zip')) {\n knownFiles.add(extractMediaPath);\n }\n }\n\n if (stdin) {\n in_file.data = new TextEncoder().encode(stdin);\n }\n\n instance.exports.convert(opts_ptr, encoded.length);\n\n if (options['output-file']) {\n const outputFile = fileSystem.get(options['output-file']);\n if (outputFile && outputFile.data && outputFile.data.length > 0) {\n files[options['output-file']] = new Blob([outputFile.data]);\n }\n }\n\n if (options['extract-media']) {\n const mediaFile = fileSystem.get(options['extract-media']);\n if (mediaFile && mediaFile.data && mediaFile.data.length > 0) {\n files[options['extract-media']] = new Blob([mediaFile.data], { type: 'application/zip' });\n }\n }\n\n const mediaFiles: Record<string, Blob> = {};\n for (const [name, fileData] of fileSystem.entries()) {\n if (!knownFiles.has(name) && fileData && fileData.data && fileData.data.length > 0) {\n const blob = new Blob([fileData.data]);\n files[name] = blob;\n if (name !== outputFileName && name !== extractMediaPath) {\n mediaFiles[name] = blob;\n }\n }\n }\n\n const rawWarnings = new TextDecoder('utf-8', { fatal: true }).decode(warnings_file.data);\n let warnings: any[] = [];\n if (rawWarnings) {\n try {\n warnings = JSON.parse(rawWarnings);\n } catch (e) {\n console.warn('Failed to parse warnings:', e);\n }\n }\n\n return {\n stdout: new TextDecoder('utf-8', { fatal: true }).decode(out_file.data),\n stderr: new TextDecoder('utf-8', { fatal: true }).decode(err_file.data),\n warnings,\n files,\n mediaFiles,\n };\n }\n\n return { convert } as PandocInstance;\n });\n}\n","import { inject, Injectable } from '@angular/core';\nimport { SdNotifyService } from '@sdcorejs/angular/services/notify';\nimport { SdLoadingService } from '@sdcorejs/angular/services/loading';\nimport { I18nService } from '@sdcorejs/angular/i18n';\n\nimport { SdDocxConvertOptions, SdDocxConvertResult } from './docx.model';\nimport { createPandocInstance, PandocInstance } from './pandoc-core';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SdDocxService {\n readonly #i18n = inject(I18nService);\n\n readonly #DEFAULT_MAX_SIZE_MB = 50;\n readonly #VALID_EXTENSIONS = ['.doc', '.docx'];\n\n readonly #PANDOC_WASM_URL = 'https://pandoc.github.io/pandoc-wasm/pandoc.wasm';\n\n #fileInput: HTMLInputElement | null = null;\n #pandocInstance: PandocInstance | null = null;\n\n constructor(\n private notifyService: SdNotifyService,\n private loadingService: SdLoadingService\n ) {}\n\n async open(options?: SdDocxConvertOptions): Promise<SdDocxConvertResult | null> {\n return new Promise(resolve => {\n this.#createFileInput();\n if (!this.#fileInput) {\n resolve(null);\n return;\n }\n\n const handleChange = async (event: Event) => {\n const input = event.target as HTMLInputElement;\n const file = input.files?.[0];\n\n if (!file) {\n resolve(null);\n return;\n }\n\n this.loadingService.start();\n try {\n const result = await this.convertToHtml(file, options);\n resolve(result);\n } catch (error) {\n console.error('[SdDocxService] DocX conversion error:', error);\n this.notifyService.error(this.#i18n.t('core.docx.convert-error'));\n resolve(null);\n } finally {\n input.value = '';\n input.removeEventListener('change', handleChange);\n this.loadingService.stop();\n }\n };\n\n this.#fileInput.addEventListener('change', handleChange, { once: true });\n this.#fileInput.click();\n });\n }\n\n #createFileInput(): void {\n if (this.#fileInput) {\n return;\n }\n\n this.#fileInput = document.createElement('input');\n this.#fileInput.type = 'file';\n this.#fileInput.accept = '.doc,.docx';\n this.#fileInput.style.display = 'none';\n document.body.appendChild(this.#fileInput);\n }\n\n async #getPandocInstance(): Promise<PandocInstance> {\n if (this.#pandocInstance) {\n return this.#pandocInstance;\n }\n\n const wasmResponse = await fetch(this.#PANDOC_WASM_URL);\n if (!wasmResponse.ok) {\n throw new Error(`Failed to fetch pandoc.wasm: ${wasmResponse.status} ${wasmResponse.statusText}`);\n }\n const wasmBinary = await wasmResponse.arrayBuffer();\n this.#pandocInstance = await createPandocInstance(wasmBinary);\n return this.#pandocInstance;\n }\n\n async convertToHtml(input: File | Blob | ArrayBuffer, options?: SdDocxConvertOptions): Promise<SdDocxConvertResult | null> {\n const opts = {\n validateFormat: true,\n validateSize: true,\n maxSizeInMb: this.#DEFAULT_MAX_SIZE_MB,\n ...options,\n };\n\n try {\n let fileName: string | undefined;\n let fileSize: number | undefined;\n let blob: Blob;\n\n if (input instanceof File) {\n fileName = input.name;\n fileSize = input.size;\n blob = input;\n } else if (input instanceof Blob) {\n fileSize = input.size;\n blob = input;\n } else {\n blob = new Blob([input], {\n type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n });\n }\n\n if (opts.validateFormat && fileName) {\n if (!this.#isValidFormat(fileName)) {\n this.notifyService.error(this.#i18n.t('core.docx.invalid-format'));\n return null;\n }\n }\n\n if (opts.validateSize && fileSize !== undefined) {\n const maxSizeInBytes = opts.maxSizeInMb! * 1024 * 1024;\n if (fileSize > maxSizeInBytes) {\n this.notifyService.error(this.#i18n.t('core.docx.size-exceeded'));\n return null;\n }\n }\n\n const pandoc = await this.#getPandocInstance();\n\n const pandocOpts: Record<string, any> = {\n from: 'docx',\n to: 'html',\n 'input-files': ['document.docx'],\n standalone: true,\n 'embed-resources': true,\n };\n\n const result = await pandoc.convert(pandocOpts, null, { 'document.docx': blob });\n\n return {\n html: result.stdout,\n messages: result.warnings.map((w: any) => String(w)),\n };\n } catch (error) {\n console.error('[SdDocxService] DocX conversion error:', error);\n this.notifyService.error(this.#i18n.t('core.docx.convert-error'));\n return null;\n }\n }\n\n async convertToHtmlString(input: File | Blob | ArrayBuffer, options?: SdDocxConvertOptions): Promise<string | null> {\n const result = await this.convertToHtml(input, options);\n return result?.html ?? null;\n }\n\n #isValidFormat(fileName: string): boolean {\n const lowerCaseName = fileName.toLowerCase();\n return this.#VALID_EXTENSIONS.some(ext => lowerCaseName.endsWith(ext));\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["File"],"mappings":"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"}
@@ -4,6 +4,14 @@ import { DateUtilities } from '@sdcorejs/angular/utilities/extensions';
4
4
  import { BrowserUtilities } from '@sdcorejs/utils/fns';
5
5
  import { I18nService } from '@sdcorejs/angular/i18n';
6
6
 
7
+ const DANGEROUS_SPREADSHEET_FORMULA_PREFIX = /^[=+\-@\t\r\n]/;
8
+ function neutralizeSpreadsheetFormula(value) {
9
+ if (typeof value !== 'string' || value === '' || value.startsWith("'")) {
10
+ return value;
11
+ }
12
+ return DANGEROUS_SPREADSHEET_FORMULA_PREFIX.test(value) ? `'${value}` : value;
13
+ }
14
+
7
15
  class SdExcelService {
8
16
  #i18n = inject(I18nService);
9
17
  #fieldStyle = {
@@ -167,11 +175,11 @@ class SdExcelService {
167
175
  },
168
176
  },
169
177
  };
170
- cellField.value = column.field;
171
- cellTitle.value = column.title;
178
+ cellField.value = neutralizeSpreadsheetFormula(column.field);
179
+ cellTitle.value = neutralizeSpreadsheetFormula(column.title);
172
180
  if (hasDescription) {
173
181
  cellDescription.style = this.#descriptionStyle;
174
- cellDescription.value = column.description || '';
182
+ cellDescription.value = neutralizeSpreadsheetFormula(column.description || '');
175
183
  }
176
184
  });
177
185
  if (sheets?.length) {
@@ -181,13 +189,13 @@ class SdExcelService {
181
189
  sheet.headers.forEach((header, index) => {
182
190
  newSheet.getColumn(index + 1).width = 30;
183
191
  newSheet.getCell(1, index + 1).style = this.#titleStyle;
184
- newSheet.getCell(1, index + 1).value = header.value;
192
+ newSheet.getCell(1, index + 1).value = neutralizeSpreadsheetFormula(header.value);
185
193
  newSheet.getCell(2, index + 1).style = this.#titleStyle;
186
- newSheet.getCell(2, index + 1).value = header.display || header.value;
194
+ newSheet.getCell(2, index + 1).value = neutralizeSpreadsheetFormula(header.display || header.value);
187
195
  });
188
196
  sheet.items.forEach((item, idx1) => {
189
197
  sheet.headers.forEach((header, idx2) => {
190
- newSheet.getCell(3 + idx1, 1 + idx2).value = item[header.value];
198
+ newSheet.getCell(3 + idx1, 1 + idx2).value = neutralizeSpreadsheetFormula(item[header.value]);
191
199
  newSheet.getCell(3 + idx1, 1 + idx2).style = this.#cellStyle;
192
200
  });
193
201
  });
@@ -207,14 +215,14 @@ class SdExcelService {
207
215
  const escape = (v) => {
208
216
  if (v == null)
209
217
  return '';
210
- const s = String(v);
218
+ const s = typeof v === 'string' ? neutralizeSpreadsheetFormula(v) : String(v);
211
219
  return /[",\n\r]/.test(s) ? `"${s.replace(/"/g, '""')}"` : s;
212
220
  };
213
221
  const headerLine = columns.map(c => escape(c.title)).join(',');
214
222
  const dataLines = items.map(item => columns.map(c => escape(item[c.field])).join(','));
215
- // Prepend UTF-8 BOM () để Excel mở đúng encoding cho tiếng Việt có dấu.
223
+ // Prepend UTF-8 BOM so Excel opens Vietnamese text with the correct encoding.
216
224
  // Dùng CRLF vì Excel trên Windows ưu tiên, macOS Excel cũng chấp nhận.
217
- const csv = '' + [headerLine, ...dataLines].join('\r\n');
225
+ const csv = '\uFEFF' + [headerLine, ...dataLines].join('\r\n');
218
226
  BrowserUtilities.downloadBlob(new Blob([csv], { type: 'text/csv;charset=utf-8;' }), filename);
219
227
  };
220
228
  export = async (option) => {
@@ -247,11 +255,11 @@ class SdExcelService {
247
255
  else {
248
256
  firstSheet.getCell(2, index + 1).style = this.#titleStyle;
249
257
  }
250
- firstSheet.getCell(1, index + 1).value = column.field;
251
- firstSheet.getCell(2, index + 1).value = column.title;
258
+ firstSheet.getCell(1, index + 1).value = neutralizeSpreadsheetFormula(column.field);
259
+ firstSheet.getCell(2, index + 1).value = neutralizeSpreadsheetFormula(column.title);
252
260
  if (hasDescription) {
253
261
  firstSheet.getCell(3, index + 1).style = this.#descriptionStyle;
254
- firstSheet.getCell(3, index + 1).value = column.description || '';
262
+ firstSheet.getCell(3, index + 1).value = neutralizeSpreadsheetFormula(column.description || '');
255
263
  }
256
264
  });
257
265
  if (sheets?.length) {
@@ -261,13 +269,13 @@ class SdExcelService {
261
269
  sheet.headers.forEach((header, index) => {
262
270
  newSheet.getColumn(index + 1).width = 30;
263
271
  newSheet.getCell(1, index + 1).style = this.#titleStyle;
264
- newSheet.getCell(1, index + 1).value = header.value;
272
+ newSheet.getCell(1, index + 1).value = neutralizeSpreadsheetFormula(header.value);
265
273
  newSheet.getCell(2, index + 1).style = this.#titleStyle;
266
- newSheet.getCell(2, index + 1).value = header.display || header.value;
274
+ newSheet.getCell(2, index + 1).value = neutralizeSpreadsheetFormula(header.display || header.value);
267
275
  });
268
276
  sheet.items.forEach((item, idx1) => {
269
277
  sheet.headers.forEach((header, idx2) => {
270
- newSheet.getCell(3 + idx1, 1 + idx2).value = item[header.value];
278
+ newSheet.getCell(3 + idx1, 1 + idx2).value = neutralizeSpreadsheetFormula(item[header.value]);
271
279
  newSheet.getCell(3 + idx1, 1 + idx2).style = this.#cellStyle;
272
280
  });
273
281
  });
@@ -283,7 +291,7 @@ class SdExcelService {
283
291
  firstSheet.getCell(fromRow + idx1, 1 + idx2).numFmt = '#';
284
292
  }
285
293
  else {
286
- firstSheet.getCell(fromRow + idx1, 1 + idx2).value = e[column.field];
294
+ firstSheet.getCell(fromRow + idx1, 1 + idx2).value = neutralizeSpreadsheetFormula(e[column.field]);
287
295
  }
288
296
  firstSheet.getCell(fromRow + idx1, 1 + idx2).style = {
289
297
  ...this.#cellStyle,