@masterteam/components 0.0.108 → 0.0.109

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 (214) hide show
  1. package/package.json +2 -2
  2. package/.codex-tmp-pack/extract/package/README.md +0 -63
  3. package/.codex-tmp-pack/extract/package/assets/cairo.css +0 -70
  4. package/.codex-tmp-pack/extract/package/assets/common.css +0 -2
  5. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-Black.woff2 +0 -0
  6. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-Bold.woff2 +0 -0
  7. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-ExtraBold.woff2 +0 -0
  8. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-ExtraLight.woff2 +0 -0
  9. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-Light.woff2 +0 -0
  10. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-Medium.woff2 +0 -0
  11. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-Regular.woff2 +0 -0
  12. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-SemiBold.woff2 +0 -0
  13. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-VariableFont_slnt,wght.woff2 +0 -0
  14. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-Black.woff2 +0 -0
  15. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-BlackItalic.woff2 +0 -0
  16. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-Bold.woff2 +0 -0
  17. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-BoldItalic.woff2 +0 -0
  18. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-ExtraBold.woff2 +0 -0
  19. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-ExtraBoldItalic.woff2 +0 -0
  20. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-ExtraLight.woff2 +0 -0
  21. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-ExtraLightItalic.woff2 +0 -0
  22. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-Italic.woff2 +0 -0
  23. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-Light.woff2 +0 -0
  24. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-LightItalic.woff2 +0 -0
  25. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-Medium.woff2 +0 -0
  26. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-MediumItalic.woff2 +0 -0
  27. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-Regular.woff2 +0 -0
  28. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-SemiBold.woff2 +0 -0
  29. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-SemiBoldItalic.woff2 +0 -0
  30. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-Thin.woff2 +0 -0
  31. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-ThinItalic.woff2 +0 -0
  32. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-Black.woff2 +0 -0
  33. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-BlackItalic.woff2 +0 -0
  34. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-Bold.woff2 +0 -0
  35. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-BoldItalic.woff2 +0 -0
  36. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-ExtraBold.woff2 +0 -0
  37. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-ExtraBoldItalic.woff2 +0 -0
  38. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-ExtraLight.woff2 +0 -0
  39. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-ExtraLightItalic.woff2 +0 -0
  40. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-Italic.woff2 +0 -0
  41. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-Light.woff2 +0 -0
  42. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-LightItalic.woff2 +0 -0
  43. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-Medium.woff2 +0 -0
  44. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-MediumItalic.woff2 +0 -0
  45. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-Regular.woff2 +0 -0
  46. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-SemiBold.woff2 +0 -0
  47. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-SemiBoldItalic.woff2 +0 -0
  48. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-Thin.woff2 +0 -0
  49. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-ThinItalic.woff2 +0 -0
  50. package/.codex-tmp-pack/extract/package/assets/fonts/InterVariable-Italic.woff2 +0 -0
  51. package/.codex-tmp-pack/extract/package/assets/fonts/InterVariable.woff2 +0 -0
  52. package/.codex-tmp-pack/extract/package/assets/i18n/ar.json +0 -44
  53. package/.codex-tmp-pack/extract/package/assets/i18n/en.json +0 -44
  54. package/.codex-tmp-pack/extract/package/assets/inter.css +0 -418
  55. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-avatar-text.mjs +0 -46
  56. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-avatar-text.mjs.map +0 -1
  57. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-avatar.mjs +0 -45
  58. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-avatar.mjs.map +0 -1
  59. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-breadcrumb.mjs +0 -27
  60. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-breadcrumb.mjs.map +0 -1
  61. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-business-fields.mjs +0 -222
  62. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-business-fields.mjs.map +0 -1
  63. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-button-group.mjs +0 -20
  64. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-button-group.mjs.map +0 -1
  65. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-button.mjs +0 -52
  66. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-button.mjs.map +0 -1
  67. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-card.mjs +0 -28
  68. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-card.mjs.map +0 -1
  69. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-checkbox-field.mjs +0 -88
  70. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-checkbox-field.mjs.map +0 -1
  71. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-chip.mjs +0 -35
  72. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-chip.mjs.map +0 -1
  73. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-client-page-menu.mjs +0 -92
  74. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-client-page-menu.mjs.map +0 -1
  75. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-client-page.mjs +0 -93
  76. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-client-page.mjs.map +0 -1
  77. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-color-picker-field.mjs +0 -94
  78. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-color-picker-field.mjs.map +0 -1
  79. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-confirmation.mjs +0 -93
  80. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-confirmation.mjs.map +0 -1
  81. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-date-field.mjs +0 -94
  82. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-date-field.mjs.map +0 -1
  83. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-dialog.mjs +0 -33
  84. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-dialog.mjs.map +0 -1
  85. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-drawer.mjs +0 -69
  86. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-drawer.mjs.map +0 -1
  87. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-dynamic-drawer.mjs +0 -321
  88. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-dynamic-drawer.mjs.map +0 -1
  89. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-editor-field.mjs +0 -96
  90. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-editor-field.mjs.map +0 -1
  91. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-entities.mjs +0 -572
  92. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-entities.mjs.map +0 -1
  93. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-field-validation.mjs +0 -103
  94. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-field-validation.mjs.map +0 -1
  95. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-formula.mjs +0 -3102
  96. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-formula.mjs.map +0 -1
  97. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-icon-field.mjs +0 -63
  98. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-icon-field.mjs.map +0 -1
  99. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-list.mjs +0 -31
  100. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-list.mjs.map +0 -1
  101. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-menu.mjs +0 -136
  102. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-menu.mjs.map +0 -1
  103. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-modal.mjs +0 -50
  104. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-modal.mjs.map +0 -1
  105. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-module-summary-card.mjs +0 -32
  106. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-module-summary-card.mjs.map +0 -1
  107. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-multi-select-field.mjs +0 -197
  108. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-multi-select-field.mjs.map +0 -1
  109. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-number-field.mjs +0 -95
  110. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-number-field.mjs.map +0 -1
  111. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-page-header.mjs +0 -42
  112. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-page-header.mjs.map +0 -1
  113. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-page.mjs +0 -35
  114. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-page.mjs.map +0 -1
  115. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-paginator.mjs +0 -44
  116. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-paginator.mjs.map +0 -1
  117. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-pick-list-field.mjs +0 -204
  118. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-pick-list-field.mjs.map +0 -1
  119. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-progress.mjs +0 -41
  120. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-progress.mjs.map +0 -1
  121. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-property-filter-builder.mjs +0 -383
  122. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-property-filter-builder.mjs.map +0 -1
  123. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-radio-button-field.mjs +0 -85
  124. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-radio-button-field.mjs.map +0 -1
  125. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-radio-cards-field.mjs +0 -68
  126. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-radio-cards-field.mjs.map +0 -1
  127. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-radio-cards.mjs +0 -74
  128. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-radio-cards.mjs.map +0 -1
  129. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-select-field.mjs +0 -258
  130. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-select-field.mjs.map +0 -1
  131. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-sidebar.mjs +0 -36
  132. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-sidebar.mjs.map +0 -1
  133. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-slider-field.mjs +0 -104
  134. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-slider-field.mjs.map +0 -1
  135. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-statistic-card.mjs +0 -21
  136. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-statistic-card.mjs.map +0 -1
  137. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-table.mjs +0 -583
  138. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-table.mjs.map +0 -1
  139. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-tabs.mjs +0 -44
  140. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-tabs.mjs.map +0 -1
  141. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-text-field.mjs +0 -159
  142. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-text-field.mjs.map +0 -1
  143. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-textarea-field.mjs +0 -92
  144. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-textarea-field.mjs.map +0 -1
  145. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-toast.mjs +0 -75
  146. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-toast.mjs.map +0 -1
  147. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-toggle-field.mjs +0 -104
  148. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-toggle-field.mjs.map +0 -1
  149. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-tooltip.mjs +0 -45
  150. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-tooltip.mjs.map +0 -1
  151. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-topbar.mjs +0 -28
  152. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-topbar.mjs.map +0 -1
  153. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-tree.mjs +0 -219
  154. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-tree.mjs.map +0 -1
  155. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-upload-field.mjs +0 -480
  156. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-upload-field.mjs.map +0 -1
  157. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-user-search-field.mjs +0 -153
  158. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-user-search-field.mjs.map +0 -1
  159. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components.mjs +0 -1338
  160. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components.mjs.map +0 -1
  161. package/.codex-tmp-pack/extract/package/types/masterteam-components-avatar-text.d.ts +0 -23
  162. package/.codex-tmp-pack/extract/package/types/masterteam-components-avatar.d.ts +0 -21
  163. package/.codex-tmp-pack/extract/package/types/masterteam-components-breadcrumb.d.ts +0 -18
  164. package/.codex-tmp-pack/extract/package/types/masterteam-components-business-fields.d.ts +0 -114
  165. package/.codex-tmp-pack/extract/package/types/masterteam-components-button-group.d.ts +0 -8
  166. package/.codex-tmp-pack/extract/package/types/masterteam-components-button.d.ts +0 -36
  167. package/.codex-tmp-pack/extract/package/types/masterteam-components-card.d.ts +0 -14
  168. package/.codex-tmp-pack/extract/package/types/masterteam-components-checkbox-field.d.ts +0 -34
  169. package/.codex-tmp-pack/extract/package/types/masterteam-components-chip.d.ts +0 -19
  170. package/.codex-tmp-pack/extract/package/types/masterteam-components-client-page-menu.d.ts +0 -35
  171. package/.codex-tmp-pack/extract/package/types/masterteam-components-client-page.d.ts +0 -42
  172. package/.codex-tmp-pack/extract/package/types/masterteam-components-color-picker-field.d.ts +0 -35
  173. package/.codex-tmp-pack/extract/package/types/masterteam-components-confirmation.d.ts +0 -41
  174. package/.codex-tmp-pack/extract/package/types/masterteam-components-date-field.d.ts +0 -41
  175. package/.codex-tmp-pack/extract/package/types/masterteam-components-dialog.d.ts +0 -12
  176. package/.codex-tmp-pack/extract/package/types/masterteam-components-drawer.d.ts +0 -30
  177. package/.codex-tmp-pack/extract/package/types/masterteam-components-dynamic-drawer.d.ts +0 -93
  178. package/.codex-tmp-pack/extract/package/types/masterteam-components-editor-field.d.ts +0 -34
  179. package/.codex-tmp-pack/extract/package/types/masterteam-components-entities.d.ts +0 -326
  180. package/.codex-tmp-pack/extract/package/types/masterteam-components-field-validation.d.ts +0 -13
  181. package/.codex-tmp-pack/extract/package/types/masterteam-components-formula.d.ts +0 -651
  182. package/.codex-tmp-pack/extract/package/types/masterteam-components-icon-field.d.ts +0 -27
  183. package/.codex-tmp-pack/extract/package/types/masterteam-components-list.d.ts +0 -18
  184. package/.codex-tmp-pack/extract/package/types/masterteam-components-menu.d.ts +0 -55
  185. package/.codex-tmp-pack/extract/package/types/masterteam-components-modal.d.ts +0 -18
  186. package/.codex-tmp-pack/extract/package/types/masterteam-components-module-summary-card.d.ts +0 -17
  187. package/.codex-tmp-pack/extract/package/types/masterteam-components-multi-select-field.d.ts +0 -74
  188. package/.codex-tmp-pack/extract/package/types/masterteam-components-number-field.d.ts +0 -42
  189. package/.codex-tmp-pack/extract/package/types/masterteam-components-page-header.d.ts +0 -30
  190. package/.codex-tmp-pack/extract/package/types/masterteam-components-page.d.ts +0 -26
  191. package/.codex-tmp-pack/extract/package/types/masterteam-components-paginator.d.ts +0 -20
  192. package/.codex-tmp-pack/extract/package/types/masterteam-components-pick-list-field.d.ts +0 -60
  193. package/.codex-tmp-pack/extract/package/types/masterteam-components-progress.d.ts +0 -20
  194. package/.codex-tmp-pack/extract/package/types/masterteam-components-property-filter-builder.d.ts +0 -90
  195. package/.codex-tmp-pack/extract/package/types/masterteam-components-radio-button-field.d.ts +0 -41
  196. package/.codex-tmp-pack/extract/package/types/masterteam-components-radio-cards-field.d.ts +0 -30
  197. package/.codex-tmp-pack/extract/package/types/masterteam-components-radio-cards.d.ts +0 -33
  198. package/.codex-tmp-pack/extract/package/types/masterteam-components-select-field.d.ts +0 -84
  199. package/.codex-tmp-pack/extract/package/types/masterteam-components-sidebar.d.ts +0 -28
  200. package/.codex-tmp-pack/extract/package/types/masterteam-components-slider-field.d.ts +0 -45
  201. package/.codex-tmp-pack/extract/package/types/masterteam-components-statistic-card.d.ts +0 -17
  202. package/.codex-tmp-pack/extract/package/types/masterteam-components-table.d.ts +0 -207
  203. package/.codex-tmp-pack/extract/package/types/masterteam-components-tabs.d.ts +0 -23
  204. package/.codex-tmp-pack/extract/package/types/masterteam-components-text-field.d.ts +0 -44
  205. package/.codex-tmp-pack/extract/package/types/masterteam-components-textarea-field.d.ts +0 -38
  206. package/.codex-tmp-pack/extract/package/types/masterteam-components-toast.d.ts +0 -26
  207. package/.codex-tmp-pack/extract/package/types/masterteam-components-toggle-field.d.ts +0 -41
  208. package/.codex-tmp-pack/extract/package/types/masterteam-components-tooltip.d.ts +0 -9
  209. package/.codex-tmp-pack/extract/package/types/masterteam-components-topbar.d.ts +0 -17
  210. package/.codex-tmp-pack/extract/package/types/masterteam-components-tree.d.ts +0 -98
  211. package/.codex-tmp-pack/extract/package/types/masterteam-components-upload-field.d.ts +0 -77
  212. package/.codex-tmp-pack/extract/package/types/masterteam-components-user-search-field.d.ts +0 -61
  213. package/.codex-tmp-pack/extract/package/types/masterteam-components.d.ts +0 -780
  214. package/.codex-tmp-pack/masterteam-components-0.0.108.tgz +0 -0
@@ -1,480 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, ChangeDetectorRef, Pipe, input, output, model, computed, Component, signal } from '@angular/core';
3
- import { Button } from '@masterteam/components/button';
4
- import { distinctUntilChanged, filter, switchMap, map, catchError, finalize, tap } from 'rxjs/operators';
5
- import { DomSanitizer } from '@angular/platform-browser';
6
- import { Subscription, BehaviorSubject, of, finalize as finalize$1, catchError as catchError$1, throwError, take, forkJoin, map as map$1 } from 'rxjs';
7
- import { HttpClient, HttpContext } from '@angular/common/http';
8
- import { Avatar } from '@masterteam/components/avatar';
9
- import * as i1 from '@jsverse/transloco';
10
- import { TranslocoModule } from '@jsverse/transloco';
11
- import { Tooltip } from '@masterteam/components/tooltip';
12
- import { Icon } from '@masterteam/icons';
13
- import { Validators, NgControl } from '@angular/forms';
14
- import { FieldValidation } from '@masterteam/components/field-validation';
15
- import { Card } from '@masterteam/components/card';
16
-
17
- class SecureImagePipe {
18
- httpClient = inject(HttpClient);
19
- domSanitizer = inject(DomSanitizer);
20
- cdr = inject(ChangeDetectorRef);
21
- constructor() {
22
- this.setUpSubscription();
23
- }
24
- ngOnDestroy() {
25
- this.subscription.unsubscribe();
26
- }
27
- subscription = new Subscription();
28
- latestValue;
29
- transformValue = new BehaviorSubject('');
30
- loading = true;
31
- context;
32
- wrapUrl = true;
33
- useEndpoint = false;
34
- endPoint = '';
35
- sanitize = true;
36
- transform(imagePath, wrapUrlOrContext, contextOrEndpoint, endPoint = 'uploader/') {
37
- const hasExtraArgs = arguments.length > 1;
38
- const isWrapFlag = typeof wrapUrlOrContext === 'boolean';
39
- this.context = undefined;
40
- this.wrapUrl = true;
41
- this.useEndpoint = false;
42
- this.endPoint = '';
43
- this.sanitize = true;
44
- if (!hasExtraArgs || isWrapFlag) {
45
- // Backward compatible mode: (imagePath, wrapUrl?, context?, endPoint?)
46
- this.wrapUrl = isWrapFlag ? wrapUrlOrContext : false;
47
- this.useEndpoint = true;
48
- this.endPoint = endPoint;
49
- if (contextOrEndpoint instanceof HttpContext) {
50
- this.context = contextOrEndpoint;
51
- }
52
- else if (typeof contextOrEndpoint === 'string') {
53
- this.endPoint = contextOrEndpoint;
54
- }
55
- this.sanitize = false;
56
- }
57
- else {
58
- // Components mode: (imagePath, context)
59
- this.context = wrapUrlOrContext;
60
- this.wrapUrl = true;
61
- this.useEndpoint = false;
62
- this.endPoint = '';
63
- this.sanitize = true;
64
- }
65
- const fullPath = this.useEndpoint
66
- ? imagePath
67
- ? this.endPoint + imagePath
68
- : ''
69
- : imagePath;
70
- this.transformValue.next(fullPath);
71
- if (this.loading || !this.latestValue) {
72
- return '';
73
- }
74
- if (!this.useEndpoint || this.wrapUrl) {
75
- return this.latestValue;
76
- }
77
- return `url('${this.latestValue}')`;
78
- }
79
- setUpSubscription() {
80
- const transformSubscription = this.transformValue
81
- .asObservable()
82
- .pipe(distinctUntilChanged(), filter((v) => !!v && !v.includes('null')), switchMap((imagePath) => {
83
- this.latestValue = '';
84
- this.loading = true;
85
- return this.httpClient
86
- .get(imagePath, {
87
- observe: 'response',
88
- responseType: 'blob',
89
- context: this.context,
90
- })
91
- .pipe(map((response) => URL.createObjectURL(response.body)), map((unsafeBlobUrl) => this.sanitize
92
- ? this.domSanitizer.bypassSecurityTrustUrl(unsafeBlobUrl)
93
- : unsafeBlobUrl), filter((blobUrl) => blobUrl !== this.latestValue), catchError(() => of('')), finalize(() => (this.loading = false)));
94
- }), tap((imagePath) => {
95
- this.latestValue = imagePath;
96
- this.cdr.markForCheck();
97
- }))
98
- .subscribe();
99
- this.subscription.add(transformSubscription);
100
- }
101
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: SecureImagePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
102
- static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.3", ngImport: i0, type: SecureImagePipe, isStandalone: true, name: "secureImage", pure: false });
103
- }
104
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: SecureImagePipe, decorators: [{
105
- type: Pipe,
106
- args: [{
107
- name: 'secureImage',
108
- pure: false,
109
- standalone: true,
110
- }]
111
- }], ctorParameters: () => [] });
112
-
113
- class UploadFilePreview {
114
- value = input(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
115
- imgPath = input(...(ngDevMode ? [undefined, { debugName: "imgPath" }] : []));
116
- context = input(undefined, ...(ngDevMode ? [{ debugName: "context" }] : []));
117
- loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
118
- uploadProgress = input(0, ...(ngDevMode ? [{ debugName: "uploadProgress" }] : []));
119
- onUploadInputClicked = output();
120
- ondDownloadFile = output();
121
- onDeleteFile = output();
122
- disabled = model(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
123
- readonly = input(false, ...(ngDevMode ? [{ debugName: "readonly" }] : []));
124
- size = input(...(ngDevMode ? [undefined, { debugName: "size" }] : []));
125
- isImag = computed(() => {
126
- return this.value()?.contentType?.startsWith('image/');
127
- }, ...(ngDevMode ? [{ debugName: "isImag" }] : []));
128
- ngOnInit() {
129
- if (this.readonly()) {
130
- this.disabled.set(true);
131
- }
132
- }
133
- defaultIcon = computed(() => {
134
- switch (this.value()?.extension) {
135
- case '.pdf':
136
- return 'file.file-06';
137
- case '.docx':
138
- case '.doc':
139
- return 'file.file-06';
140
- case '.xlsx':
141
- case '.xls':
142
- return 'file.file-06';
143
- default:
144
- return 'image.image-03';
145
- }
146
- }, ...(ngDevMode ? [{ debugName: "defaultIcon" }] : []));
147
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: UploadFilePreview, deps: [], target: i0.ɵɵFactoryTarget.Component });
148
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: UploadFilePreview, isStandalone: true, selector: "mt-upload-file-preview", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, imgPath: { classPropertyName: "imgPath", publicName: "imgPath", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, uploadProgress: { classPropertyName: "uploadProgress", publicName: "uploadProgress", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onUploadInputClicked: "onUploadInputClicked", ondDownloadFile: "ondDownloadFile", onDeleteFile: "onDeleteFile", disabled: "disabledChange" }, ngImport: i0, template: "<div class=\"flex items-center justify-between gap-2 w-full p-2 overflow-hidden\">\r\n <div class=\"flex gap-2 items-center flex-1 min-w-0 overflow-hidden\">\r\n <mt-avatar\r\n [size]=\"size()\"\r\n [shape]=\"'square'\"\r\n [image]=\"\r\n isImag() && imgPath() ? (imgPath() | secureImage: context()) : ''\r\n \"\r\n [icon]=\"defaultIcon()\"\r\n styleClass=\"text-2xl!\"\r\n >\r\n </mt-avatar>\r\n\r\n <span class=\"truncate\" [mtTooltip]=\"value().name\" tooltipPosition=\"top\">\r\n {{ value().name }}\r\n </span>\r\n </div>\r\n <div class=\"flex items-center justify-center shrink-0\">\r\n @if (!!value() && !loading() && (!disabled() || readonly())) {\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"general.download-01\"\r\n [tooltip]=\"'components.upload.download' | transloco\"\r\n (onClick)=\"ondDownloadFile.emit(value())\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n </mt-button>\r\n }\r\n @if (!disabled() && !readonly() && !!value() && !loading()) {\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"general.trash-01\"\r\n [tooltip]=\"'components.upload.delete' | transloco\"\r\n severity=\"danger\"\r\n (onClick)=\"onDeleteFile.emit(true)\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n </mt-button>\r\n }\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "directive", type: Tooltip, selector: "[mtTooltip]" }, { kind: "pipe", type: SecureImagePipe, name: "secureImage" }, { kind: "pipe", type: i1.TranslocoPipe, name: "transloco" }] });
149
- }
150
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: UploadFilePreview, decorators: [{
151
- type: Component,
152
- args: [{ selector: 'mt-upload-file-preview', standalone: true, imports: [SecureImagePipe, Button, Avatar, TranslocoModule, Tooltip], template: "<div class=\"flex items-center justify-between gap-2 w-full p-2 overflow-hidden\">\r\n <div class=\"flex gap-2 items-center flex-1 min-w-0 overflow-hidden\">\r\n <mt-avatar\r\n [size]=\"size()\"\r\n [shape]=\"'square'\"\r\n [image]=\"\r\n isImag() && imgPath() ? (imgPath() | secureImage: context()) : ''\r\n \"\r\n [icon]=\"defaultIcon()\"\r\n styleClass=\"text-2xl!\"\r\n >\r\n </mt-avatar>\r\n\r\n <span class=\"truncate\" [mtTooltip]=\"value().name\" tooltipPosition=\"top\">\r\n {{ value().name }}\r\n </span>\r\n </div>\r\n <div class=\"flex items-center justify-center shrink-0\">\r\n @if (!!value() && !loading() && (!disabled() || readonly())) {\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"general.download-01\"\r\n [tooltip]=\"'components.upload.download' | transloco\"\r\n (onClick)=\"ondDownloadFile.emit(value())\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n </mt-button>\r\n }\r\n @if (!disabled() && !readonly() && !!value() && !loading()) {\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"general.trash-01\"\r\n [tooltip]=\"'components.upload.delete' | transloco\"\r\n severity=\"danger\"\r\n (onClick)=\"onDeleteFile.emit(true)\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n </mt-button>\r\n }\r\n </div>\r\n</div>\r\n" }]
153
- }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], imgPath: [{ type: i0.Input, args: [{ isSignal: true, alias: "imgPath", required: false }] }], context: [{ type: i0.Input, args: [{ isSignal: true, alias: "context", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], uploadProgress: [{ type: i0.Input, args: [{ isSignal: true, alias: "uploadProgress", required: false }] }], onUploadInputClicked: [{ type: i0.Output, args: ["onUploadInputClicked"] }], ondDownloadFile: [{ type: i0.Output, args: ["ondDownloadFile"] }], onDeleteFile: [{ type: i0.Output, args: ["onDeleteFile"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }] } });
154
-
155
- class UploadUserPreview {
156
- value = input(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
157
- imgPath = input(...(ngDevMode ? [undefined, { debugName: "imgPath" }] : []));
158
- context = input(undefined, ...(ngDevMode ? [{ debugName: "context" }] : []));
159
- loading = input(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
160
- uploadProgress = input(0, ...(ngDevMode ? [{ debugName: "uploadProgress" }] : []));
161
- isDragging = input(false, ...(ngDevMode ? [{ debugName: "isDragging" }] : []));
162
- defaultIcon = signal('image.image-03', ...(ngDevMode ? [{ debugName: "defaultIcon" }] : []));
163
- onUploadInputClicked = output();
164
- ondDownloadFile = output();
165
- onDeleteFile = output();
166
- onDragOver = output();
167
- onDragLeave = output();
168
- onDrop = output();
169
- disabled = model(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
170
- readonly = input(false, ...(ngDevMode ? [{ debugName: "readonly" }] : []));
171
- size = input(...(ngDevMode ? [undefined, { debugName: "size" }] : []));
172
- userImgClass = input('', ...(ngDevMode ? [{ debugName: "userImgClass" }] : []));
173
- OnUploadInputClicked() {
174
- if (!this.imgPath() && !this.loading() && !this.disabled()) {
175
- this.onUploadInputClicked.emit(true);
176
- }
177
- }
178
- ngOnInit() {
179
- if (this.readonly()) {
180
- this.disabled.set(true);
181
- }
182
- }
183
- OnDragOver(event) {
184
- this.onDragOver.emit(event);
185
- }
186
- OnDragLeave(event) {
187
- this.onDragLeave.emit(event);
188
- }
189
- OnDrop(event) {
190
- this.onDrop.emit(event);
191
- }
192
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: UploadUserPreview, deps: [], target: i0.ɵɵFactoryTarget.Component });
193
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: UploadUserPreview, isStandalone: true, selector: "mt-upload-user-preview", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, imgPath: { classPropertyName: "imgPath", publicName: "imgPath", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, uploadProgress: { classPropertyName: "uploadProgress", publicName: "uploadProgress", isSignal: true, isRequired: false, transformFunction: null }, isDragging: { classPropertyName: "isDragging", publicName: "isDragging", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, userImgClass: { classPropertyName: "userImgClass", publicName: "userImgClass", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onUploadInputClicked: "onUploadInputClicked", ondDownloadFile: "ondDownloadFile", onDeleteFile: "onDeleteFile", onDragOver: "onDragOver", onDragLeave: "onDragLeave", onDrop: "onDrop", disabled: "disabledChange" }, ngImport: i0, template: "<div\r\n class=\"rounded-full p-1 w-fit\"\r\n [style.background]=\"\r\n 'conic-gradient(var(--p-primary-300) ' +\r\n uploadProgress() +\r\n '%, transparent ' +\r\n uploadProgress() +\r\n '%)'\r\n \"\r\n>\r\n <div\r\n class=\"relative rounded-full w-fit border-2 border-dashed border-gray-300 bg-white\"\r\n [class.opacity-50]=\"isDragging()\"\r\n >\r\n <mt-avatar\r\n [size]=\"size()\"\r\n [image]=\"imgPath() ? (imgPath() | secureImage: context()) : ''\"\r\n [icon]=\"defaultIcon()\"\r\n [styleClass]=\"userImgClass()\"\r\n >\r\n </mt-avatar>\r\n\r\n @if (!loading()) {\r\n <div\r\n class=\"absolute inset-0 flex items-center justify-center rounded-full bg-surface-400/50 opacity-0 hover:opacity-100 transition-opacity\"\r\n [class]=\"!imgPath() && !disabled() ? 'cursor-pointer' : ''\"\r\n (click)=\"OnUploadInputClicked()\"\r\n (dragover)=\"OnDragOver($event)\"\r\n (dragleave)=\"OnDragLeave($event)\"\r\n (drop)=\"OnDrop($event)\"\r\n >\r\n @if (!disabled() && !!imgPath()) {\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"general.download-01\"\r\n [tooltip]=\"'components.upload.download' | transloco\"\r\n (onClick)=\"ondDownloadFile.emit(value())\"\r\n >\r\n </mt-button>\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"general.trash-01\"\r\n [tooltip]=\"'components.upload.delete' | transloco\"\r\n severity=\"danger\"\r\n (onClick)=\"onDeleteFile.emit(true)\"\r\n >\r\n </mt-button>\r\n }\r\n @if (!imgPath() && !disabled()) {\r\n <mt-icon\r\n icon=\"general.upload-01\"\r\n class=\"text-primary-400 text-xl\"\r\n ></mt-icon>\r\n }\r\n </div>\r\n } @else if (loading()) {\r\n <div\r\n class=\"absolute inset-0 flex items-center justify-center rounded-full bg-surface-400/50\"\r\n >\r\n @if (uploadProgress() === 100) {\r\n <mt-icon\r\n icon=\"general.check\"\r\n class=\"text-primary-400 text-2xl\"\r\n ></mt-icon>\r\n } @else {\r\n <small class=\"text-primary-300 font-bold text-lg\">{{\r\n uploadProgress() + \"%\"\r\n }}</small>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "component", type: Icon, selector: "mt-icon", inputs: ["icon"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: SecureImagePipe, name: "secureImage" }, { kind: "pipe", type: i1.TranslocoPipe, name: "transloco" }] });
194
- }
195
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: UploadUserPreview, decorators: [{
196
- type: Component,
197
- args: [{ selector: 'mt-upload-user-preview', standalone: true, imports: [Icon, SecureImagePipe, Button, Icon, Avatar, TranslocoModule], template: "<div\r\n class=\"rounded-full p-1 w-fit\"\r\n [style.background]=\"\r\n 'conic-gradient(var(--p-primary-300) ' +\r\n uploadProgress() +\r\n '%, transparent ' +\r\n uploadProgress() +\r\n '%)'\r\n \"\r\n>\r\n <div\r\n class=\"relative rounded-full w-fit border-2 border-dashed border-gray-300 bg-white\"\r\n [class.opacity-50]=\"isDragging()\"\r\n >\r\n <mt-avatar\r\n [size]=\"size()\"\r\n [image]=\"imgPath() ? (imgPath() | secureImage: context()) : ''\"\r\n [icon]=\"defaultIcon()\"\r\n [styleClass]=\"userImgClass()\"\r\n >\r\n </mt-avatar>\r\n\r\n @if (!loading()) {\r\n <div\r\n class=\"absolute inset-0 flex items-center justify-center rounded-full bg-surface-400/50 opacity-0 hover:opacity-100 transition-opacity\"\r\n [class]=\"!imgPath() && !disabled() ? 'cursor-pointer' : ''\"\r\n (click)=\"OnUploadInputClicked()\"\r\n (dragover)=\"OnDragOver($event)\"\r\n (dragleave)=\"OnDragLeave($event)\"\r\n (drop)=\"OnDrop($event)\"\r\n >\r\n @if (!disabled() && !!imgPath()) {\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"general.download-01\"\r\n [tooltip]=\"'components.upload.download' | transloco\"\r\n (onClick)=\"ondDownloadFile.emit(value())\"\r\n >\r\n </mt-button>\r\n <mt-button\r\n variant=\"text\"\r\n icon=\"general.trash-01\"\r\n [tooltip]=\"'components.upload.delete' | transloco\"\r\n severity=\"danger\"\r\n (onClick)=\"onDeleteFile.emit(true)\"\r\n >\r\n </mt-button>\r\n }\r\n @if (!imgPath() && !disabled()) {\r\n <mt-icon\r\n icon=\"general.upload-01\"\r\n class=\"text-primary-400 text-xl\"\r\n ></mt-icon>\r\n }\r\n </div>\r\n } @else if (loading()) {\r\n <div\r\n class=\"absolute inset-0 flex items-center justify-center rounded-full bg-surface-400/50\"\r\n >\r\n @if (uploadProgress() === 100) {\r\n <mt-icon\r\n icon=\"general.check\"\r\n class=\"text-primary-400 text-2xl\"\r\n ></mt-icon>\r\n } @else {\r\n <small class=\"text-primary-300 font-bold text-lg\">{{\r\n uploadProgress() + \"%\"\r\n }}</small>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n" }]
198
- }], propDecorators: { value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], imgPath: [{ type: i0.Input, args: [{ isSignal: true, alias: "imgPath", required: false }] }], context: [{ type: i0.Input, args: [{ isSignal: true, alias: "context", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], uploadProgress: [{ type: i0.Input, args: [{ isSignal: true, alias: "uploadProgress", required: false }] }], isDragging: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDragging", required: false }] }], onUploadInputClicked: [{ type: i0.Output, args: ["onUploadInputClicked"] }], ondDownloadFile: [{ type: i0.Output, args: ["ondDownloadFile"] }], onDeleteFile: [{ type: i0.Output, args: ["onDeleteFile"] }], onDragOver: [{ type: i0.Output, args: ["onDragOver"] }], onDragLeave: [{ type: i0.Output, args: ["onDragLeave"] }], onDrop: [{ type: i0.Output, args: ["onDrop"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }, { type: i0.Output, args: ["disabledChange"] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], userImgClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "userImgClass", required: false }] }] } });
199
-
200
- class UploadField {
201
- label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
202
- title = input('Upload File', ...(ngDevMode ? [{ debugName: "title" }] : []));
203
- description = input('Click or drop a file to upload', ...(ngDevMode ? [{ debugName: "description" }] : []));
204
- endPoint = input('uploader', ...(ngDevMode ? [{ debugName: "endPoint" }] : []));
205
- size = input(...(ngDevMode ? [undefined, { debugName: "size" }] : []));
206
- userImgClass = input('w-25! h-25! text-4xl! text-gray-400!', ...(ngDevMode ? [{ debugName: "userImgClass" }] : []));
207
- shape = input('field', ...(ngDevMode ? [{ debugName: "shape" }] : []));
208
- multiple = input(false, ...(ngDevMode ? [{ debugName: "multiple" }] : []));
209
- accept = input('.pdf,.doc,.docx,.xlsx,image/*', ...(ngDevMode ? [{ debugName: "accept" }] : []));
210
- isDragging = model(false, ...(ngDevMode ? [{ debugName: "isDragging" }] : []));
211
- fileSizeLimit = input(...(ngDevMode ? [undefined, { debugName: "fileSizeLimit" }] : []));
212
- readonly = input(false, ...(ngDevMode ? [{ debugName: "readonly" }] : []));
213
- context = input(undefined, ...(ngDevMode ? [{ debugName: "context" }] : []));
214
- onChange = output();
215
- requiredValidator = Validators.required;
216
- value = signal(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
217
- files = computed(() => {
218
- const value = this.value();
219
- if (Array.isArray(value)) {
220
- return value.filter((item) => item != null);
221
- }
222
- return value ? [value] : [];
223
- }, ...(ngDevMode ? [{ debugName: "files" }] : []));
224
- primaryFile = computed(() => this.files()[0] ?? null, ...(ngDevMode ? [{ debugName: "primaryFile" }] : []));
225
- imgPath = computed(() => this.resolveImgPath(this.primaryFile()), ...(ngDevMode ? [{ debugName: "imgPath" }] : []));
226
- disabled = signal(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
227
- uploadProgress = signal(0, ...(ngDevMode ? [{ debugName: "uploadProgress" }] : []));
228
- loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
229
- httpClient = inject(HttpClient);
230
- pendingUploads = signal(0, ...(ngDevMode ? [{ debugName: "pendingUploads" }] : []));
231
- onTouched = () => { };
232
- onModelChange = () => { };
233
- ngControl = inject(NgControl, { self: true });
234
- constructor() {
235
- if (this.ngControl) {
236
- this.ngControl.valueAccessor = this;
237
- }
238
- }
239
- writeValue(value) {
240
- if (Array.isArray(value)) {
241
- const normalized = value.filter((item) => item != null);
242
- const fileIds = normalized.filter((item) => typeof item === 'string' && item.trim().length > 0);
243
- const files = normalized.filter((item) => !!item && typeof item === 'object');
244
- if (fileIds.length) {
245
- this.fetchMetadata(fileIds, files, true);
246
- return;
247
- }
248
- this.value.set(normalized);
249
- return;
250
- }
251
- if (typeof value === 'string' && value.trim().length > 0) {
252
- this.fetchMetadata([value], [], false);
253
- return;
254
- }
255
- this.value.set(value ?? null);
256
- }
257
- registerOnChange(fn) {
258
- this.onModelChange = fn;
259
- }
260
- registerOnTouched(fn) {
261
- this.onTouched = fn;
262
- }
263
- setDisabledState(disabled) {
264
- this.disabled.set(disabled);
265
- }
266
- onAdd(item) {
267
- if (this.disabled()) {
268
- return;
269
- }
270
- const nextValue = this.multiple() ? [...this.files(), item] : item;
271
- this.value.set(nextValue);
272
- this.onModelChange(nextValue);
273
- this.onChange.emit(nextValue);
274
- }
275
- onDelete(item) {
276
- if (this.disabled()) {
277
- return;
278
- }
279
- if (!this.multiple()) {
280
- this.value.set(null);
281
- this.onModelChange(null);
282
- this.onChange.emit(null);
283
- return;
284
- }
285
- const nextValue = this.files().filter((file) => !isSameFile(file, item));
286
- const resolvedValue = nextValue.length ? nextValue : null;
287
- this.value.set(resolvedValue);
288
- this.onModelChange(resolvedValue);
289
- this.onChange.emit(resolvedValue);
290
- }
291
- onFileSelect(event) {
292
- const input = event.target;
293
- const selectedFiles = Array.from(input?.files ?? []);
294
- if (!selectedFiles.length) {
295
- return;
296
- }
297
- if (!this.multiple()) {
298
- this.value.set(null);
299
- }
300
- this.prepareFiles(selectedFiles);
301
- if (input) {
302
- input.value = '';
303
- }
304
- }
305
- prepareFiles(files) {
306
- this.ngControl.control?.setErrors({ uploading: true });
307
- if (this.shape() === 'circle' &&
308
- files.some((file) => !file?.type.startsWith('image/'))) {
309
- this.ngControl.control?.setErrors({ invalidFileType: true });
310
- return;
311
- }
312
- const filesToUpload = this.multiple() ? files : [files[0]];
313
- filesToUpload.forEach((file) => this.uploadFile(file));
314
- }
315
- uploadFile(file) {
316
- this.pendingUploads.update((count) => count + 1);
317
- this.loading.set(true);
318
- this.uploadProgress.set(10);
319
- const formData = new FormData();
320
- formData.append('file', file);
321
- this.httpClient
322
- .post(this.endPoint(), formData, {
323
- reportProgress: true,
324
- observe: 'events',
325
- context: this.context(),
326
- })
327
- .pipe(finalize$1(() => {
328
- const pending = Math.max(this.pendingUploads() - 1, 0);
329
- this.pendingUploads.set(pending);
330
- if (!pending) {
331
- setTimeout(() => {
332
- this.uploadProgress.set(0);
333
- this.loading.set(false);
334
- }, 700);
335
- }
336
- }), catchError$1(() => {
337
- this.uploadProgress.set(0);
338
- return throwError(() => new Error('Upload failed'));
339
- }))
340
- .subscribe((event) => {
341
- if (!event?.body) {
342
- if (event.total) {
343
- this.uploadProgress.set(Math.round((100 * event.loaded) / event.total));
344
- }
345
- return;
346
- }
347
- this.uploadProgress.set(100);
348
- this.handleUploadDone({ ...event.body?.data, size: file.size });
349
- });
350
- }
351
- handleUploadDone(file) {
352
- if (!file) {
353
- return;
354
- }
355
- this.onAdd(file);
356
- if (this.fileSizeLimit() && file.size > this.fileSizeLimit()) {
357
- this.ngControl.control?.setErrors({ fileSizeLimited: true });
358
- return;
359
- }
360
- if (this.pendingUploads() <= 1) {
361
- this.ngControl.control?.setErrors(null);
362
- }
363
- }
364
- downloadFile(value) {
365
- const downloadUrl = this.resolveImgPath(value);
366
- const downloadFileName = value?.name;
367
- const mimeType = value?.contentType;
368
- if (!downloadUrl || !mimeType || !downloadFileName) {
369
- console.error('File metadata is incomplete. Cannot download.');
370
- return;
371
- }
372
- this.httpClient
373
- .get(downloadUrl, {
374
- responseType: 'blob',
375
- context: this.context(),
376
- })
377
- .pipe(take(1))
378
- .subscribe((res) => {
379
- const blob = new Blob([res], { type: mimeType });
380
- const data = window.URL.createObjectURL(blob);
381
- const link = document.createElement('a');
382
- link.href = data;
383
- link.download = downloadFileName;
384
- link.click();
385
- window.URL.revokeObjectURL(data);
386
- });
387
- }
388
- onDragOver(event) {
389
- event.preventDefault();
390
- event.stopPropagation();
391
- if (!this.disabled()) {
392
- this.isDragging.set(true);
393
- }
394
- }
395
- onDragLeave(event) {
396
- event.preventDefault();
397
- event.stopPropagation();
398
- this.isDragging.set(false);
399
- }
400
- onDrop(event) {
401
- event.preventDefault();
402
- event.stopPropagation();
403
- this.isDragging.set(false);
404
- if (this.disabled()) {
405
- return;
406
- }
407
- const files = Array.from(event.dataTransfer?.files ?? []);
408
- if (!files.length) {
409
- return;
410
- }
411
- if (!this.multiple()) {
412
- this.value.set(null);
413
- }
414
- this.prepareFiles(files);
415
- }
416
- resolveImgPath(value) {
417
- return value?.fileName ? `${this.endPoint()}/${value.fileName}` : undefined;
418
- }
419
- fetchMetadata(fileIds, existingFiles = [], forceArray = false) {
420
- const normalizedIds = fileIds
421
- .map((fileId) => fileId.trim())
422
- .filter((fileId) => fileId.length > 0);
423
- if (!normalizedIds.length) {
424
- this.value.set(forceArray ? existingFiles : (existingFiles[0] ?? null));
425
- return;
426
- }
427
- this.loading.set(true);
428
- forkJoin(normalizedIds.map((fileId) => this.httpClient
429
- .get(`${this.endPoint()}/${fileId}/metaData`, {
430
- context: this.context(),
431
- })
432
- .pipe(take(1), map$1((response) => response.data), catchError$1((error) => {
433
- console.error('Failed to fetch file metadata:', error);
434
- return of({
435
- id: fileId,
436
- name: fileId,
437
- fileName: fileId,
438
- contentType: '',
439
- extension: '',
440
- });
441
- }))))
442
- .pipe(finalize$1(() => this.loading.set(false)))
443
- .subscribe((files) => {
444
- const resolvedFiles = [...existingFiles, ...files];
445
- const resolvedValue = forceArray || this.multiple() || resolvedFiles.length > 1
446
- ? resolvedFiles
447
- : (resolvedFiles[0] ?? null);
448
- this.value.set(resolvedValue);
449
- });
450
- }
451
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: UploadField, deps: [], target: i0.ɵɵFactoryTarget.Component });
452
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: UploadField, isStandalone: true, selector: "mt-upload-field", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, endPoint: { classPropertyName: "endPoint", publicName: "endPoint", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, userImgClass: { classPropertyName: "userImgClass", publicName: "userImgClass", isSignal: true, isRequired: false, transformFunction: null }, shape: { classPropertyName: "shape", publicName: "shape", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, accept: { classPropertyName: "accept", publicName: "accept", isSignal: true, isRequired: false, transformFunction: null }, isDragging: { classPropertyName: "isDragging", publicName: "isDragging", isSignal: true, isRequired: false, transformFunction: null }, fileSizeLimit: { classPropertyName: "fileSizeLimit", publicName: "fileSizeLimit", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { isDragging: "isDraggingChange", onChange: "onChange" }, ngImport: i0, template: "<input\r\n #uploadInput\r\n type=\"file\"\r\n name=\"file[]\"\r\n (change)=\"onFileSelect($event)\"\r\n style=\"display: none\"\r\n [multiple]=\"multiple()\"\r\n [accept]=\"shape() === 'circle' ? 'image/*' : accept()\"\r\n/>\r\n\r\n@if (shape() === \"circle\") {\r\n <div class=\"flex flex-col items-center gap-2 w-full\">\r\n <div class=\"flex\">\r\n <div class=\"flex flex-col items-center\">\r\n <mt-upload-user-preview\r\n [value]=\"primaryFile()\"\r\n [imgPath]=\"imgPath()\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [loading]=\"loading()\"\r\n [size]=\"size()\"\r\n [context]=\"context()\"\r\n [userImgClass]=\"userImgClass()\"\r\n [isDragging]=\"isDragging()\"\r\n [uploadProgress]=\"uploadProgress()\"\r\n (onUploadInputClicked)=\"uploadInput.click()\"\r\n (ondDownloadFile)=\"downloadFile($event)\"\r\n (onDeleteFile)=\"onDelete(primaryFile())\"\r\n (onDragOver)=\"onDragOver($event)\"\r\n (onDragLeave)=\"onDragLeave($event)\"\r\n (onDrop)=\"onDrop($event)\"\r\n ></mt-upload-user-preview>\r\n @if (label()) {\r\n <label\r\n [class.required]=\"\r\n ngControl?.control?.hasValidator(requiredValidator)\r\n \"\r\n [for]=\"ngControl?.name || label()\"\r\n >{{ label() }}</label\r\n >\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n} @else if (shape() === \"card\") {\r\n <mt-card\r\n headless\r\n class=\"border-2 border-dashed border-gray-300 rounded-lg cursor-pointer hover:bg-gray-50\"\r\n >\r\n <div class=\"content flex flex-col gap-5 items-center text-center\">\r\n @if (!files().length && !loading()) {\r\n <div class=\"flex flex-col gap-1\">\r\n @if (title()) {\r\n <div class=\"title text-lg font-semibold\">\r\n {{ title() }}\r\n </div>\r\n }\r\n @if (description()) {\r\n <div\r\n class=\"description text-sm text-muted-foreground secondary text-surface-500\"\r\n >\r\n {{ description() }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (files().length) {\r\n <div class=\"flex w-full flex-col gap-2\">\r\n @for (file of files(); track $index) {\r\n <mt-upload-file-preview\r\n style=\"width: 100%\"\r\n [value]=\"file\"\r\n [imgPath]=\"resolveImgPath(file)\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [loading]=\"loading()\"\r\n [context]=\"context()\"\r\n [uploadProgress]=\"uploadProgress()\"\r\n (onUploadInputClicked)=\"uploadInput.click()\"\r\n (ondDownloadFile)=\"downloadFile(file)\"\r\n (onDeleteFile)=\"onDelete(file)\"\r\n />\r\n }\r\n </div>\r\n } @else if (loading()) {\r\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\r\n <p class=\"text-lg text-gray-500\">\r\n {{\r\n (\"components.upload.uploading\" | transloco) +\r\n uploadProgress() +\r\n \"%\"\r\n }}\r\n </p>\r\n </div>\r\n } @else {\r\n <mt-button\r\n [size]=\"'small'\"\r\n [label]=\"'components.upload.upload' | transloco\"\r\n [icon]=\"'general.upload-01'\"\r\n (onClick)=\"\r\n !loading() && !disabled() && !readonly() ? uploadInput.click() : ''\r\n \"\r\n [disabled]=\"disabled() || loading() || readonly()\"\r\n />\r\n }\r\n </div>\r\n </mt-card>\r\n} @else {\r\n <div class=\"flex flex-col items-start gap-2 w-full\">\r\n @if (label()) {\r\n <label\r\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\r\n [for]=\"ngControl?.name || label()\"\r\n >{{ label() }}</label\r\n >\r\n }\r\n\r\n <div\r\n class=\"w-full flex gap-3 items-center justify-center border-2 border-dashed border-gray-300 rounded-lg cursor-pointer hover:bg-gray-50\"\r\n [class]=\"disabled() ? 'bg-gray-50' : ''\"\r\n (click)=\"\r\n !loading() && !disabled() && !readonly() ? uploadInput.click() : ''\r\n \"\r\n [class.border-blue-500]=\"isDragging()\"\r\n [class.bg-blue-50]=\"isDragging()\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n @if (files().length) {\r\n <div class=\"flex w-full flex-col gap-2 p-2\">\r\n @for (file of files(); track $index) {\r\n <mt-upload-file-preview\r\n style=\"width: 100%\"\r\n [value]=\"file\"\r\n [imgPath]=\"resolveImgPath(file)\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [loading]=\"loading()\"\r\n [context]=\"context()\"\r\n [uploadProgress]=\"uploadProgress()\"\r\n (onUploadInputClicked)=\"uploadInput.click()\"\r\n (ondDownloadFile)=\"downloadFile(file)\"\r\n (onDeleteFile)=\"onDelete(file)\"\r\n />\r\n }\r\n </div>\r\n } @else if (loading()) {\r\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\r\n <p class=\"text-lg text-gray-500\">\r\n {{\r\n (\"components.upload.uploading\" | transloco) +\r\n uploadProgress() +\r\n \"%\"\r\n }}\r\n </p>\r\n </div>\r\n } @else {\r\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\r\n <mt-icon icon=\"general.upload-01\" />\r\n <p class=\"text-lg text-gray-500\">\r\n {{ \"components.upload.clickOrDrop\" | transloco }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n}\r\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\r\n", dependencies: [{ kind: "component", type: Icon, selector: "mt-icon", inputs: ["icon"] }, { kind: "component", type: UploadUserPreview, selector: "mt-upload-user-preview", inputs: ["value", "imgPath", "context", "loading", "uploadProgress", "isDragging", "disabled", "readonly", "size", "userImgClass"], outputs: ["onUploadInputClicked", "ondDownloadFile", "onDeleteFile", "onDragOver", "onDragLeave", "onDrop", "disabledChange"] }, { kind: "component", type: UploadFilePreview, selector: "mt-upload-file-preview", inputs: ["value", "imgPath", "context", "loading", "uploadProgress", "disabled", "readonly", "size"], outputs: ["onUploadInputClicked", "ondDownloadFile", "onDeleteFile", "disabledChange"] }, { kind: "component", type: FieldValidation, selector: "mt-field-validation", inputs: ["control", "touched"] }, { kind: "component", type: Card, selector: "mt-card", inputs: ["class", "title", "paddingless"] }, { kind: "component", type: Button, selector: "mt-button", inputs: ["icon", "label", "tooltip", "class", "type", "styleClass", "severity", "badge", "variant", "badgeSeverity", "size", "iconPos", "autofocus", "fluid", "raised", "rounded", "text", "plain", "outlined", "link", "disabled", "loading", "pInputs"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TranslocoModule }, { kind: "pipe", type: i1.TranslocoPipe, name: "transloco" }] });
453
- }
454
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: UploadField, decorators: [{
455
- type: Component,
456
- args: [{ selector: 'mt-upload-field', standalone: true, imports: [
457
- Icon,
458
- UploadUserPreview,
459
- UploadFilePreview,
460
- FieldValidation,
461
- Card,
462
- Button,
463
- TranslocoModule,
464
- ], template: "<input\r\n #uploadInput\r\n type=\"file\"\r\n name=\"file[]\"\r\n (change)=\"onFileSelect($event)\"\r\n style=\"display: none\"\r\n [multiple]=\"multiple()\"\r\n [accept]=\"shape() === 'circle' ? 'image/*' : accept()\"\r\n/>\r\n\r\n@if (shape() === \"circle\") {\r\n <div class=\"flex flex-col items-center gap-2 w-full\">\r\n <div class=\"flex\">\r\n <div class=\"flex flex-col items-center\">\r\n <mt-upload-user-preview\r\n [value]=\"primaryFile()\"\r\n [imgPath]=\"imgPath()\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [loading]=\"loading()\"\r\n [size]=\"size()\"\r\n [context]=\"context()\"\r\n [userImgClass]=\"userImgClass()\"\r\n [isDragging]=\"isDragging()\"\r\n [uploadProgress]=\"uploadProgress()\"\r\n (onUploadInputClicked)=\"uploadInput.click()\"\r\n (ondDownloadFile)=\"downloadFile($event)\"\r\n (onDeleteFile)=\"onDelete(primaryFile())\"\r\n (onDragOver)=\"onDragOver($event)\"\r\n (onDragLeave)=\"onDragLeave($event)\"\r\n (onDrop)=\"onDrop($event)\"\r\n ></mt-upload-user-preview>\r\n @if (label()) {\r\n <label\r\n [class.required]=\"\r\n ngControl?.control?.hasValidator(requiredValidator)\r\n \"\r\n [for]=\"ngControl?.name || label()\"\r\n >{{ label() }}</label\r\n >\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n} @else if (shape() === \"card\") {\r\n <mt-card\r\n headless\r\n class=\"border-2 border-dashed border-gray-300 rounded-lg cursor-pointer hover:bg-gray-50\"\r\n >\r\n <div class=\"content flex flex-col gap-5 items-center text-center\">\r\n @if (!files().length && !loading()) {\r\n <div class=\"flex flex-col gap-1\">\r\n @if (title()) {\r\n <div class=\"title text-lg font-semibold\">\r\n {{ title() }}\r\n </div>\r\n }\r\n @if (description()) {\r\n <div\r\n class=\"description text-sm text-muted-foreground secondary text-surface-500\"\r\n >\r\n {{ description() }}\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n @if (files().length) {\r\n <div class=\"flex w-full flex-col gap-2\">\r\n @for (file of files(); track $index) {\r\n <mt-upload-file-preview\r\n style=\"width: 100%\"\r\n [value]=\"file\"\r\n [imgPath]=\"resolveImgPath(file)\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [loading]=\"loading()\"\r\n [context]=\"context()\"\r\n [uploadProgress]=\"uploadProgress()\"\r\n (onUploadInputClicked)=\"uploadInput.click()\"\r\n (ondDownloadFile)=\"downloadFile(file)\"\r\n (onDeleteFile)=\"onDelete(file)\"\r\n />\r\n }\r\n </div>\r\n } @else if (loading()) {\r\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\r\n <p class=\"text-lg text-gray-500\">\r\n {{\r\n (\"components.upload.uploading\" | transloco) +\r\n uploadProgress() +\r\n \"%\"\r\n }}\r\n </p>\r\n </div>\r\n } @else {\r\n <mt-button\r\n [size]=\"'small'\"\r\n [label]=\"'components.upload.upload' | transloco\"\r\n [icon]=\"'general.upload-01'\"\r\n (onClick)=\"\r\n !loading() && !disabled() && !readonly() ? uploadInput.click() : ''\r\n \"\r\n [disabled]=\"disabled() || loading() || readonly()\"\r\n />\r\n }\r\n </div>\r\n </mt-card>\r\n} @else {\r\n <div class=\"flex flex-col items-start gap-2 w-full\">\r\n @if (label()) {\r\n <label\r\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\r\n [for]=\"ngControl?.name || label()\"\r\n >{{ label() }}</label\r\n >\r\n }\r\n\r\n <div\r\n class=\"w-full flex gap-3 items-center justify-center border-2 border-dashed border-gray-300 rounded-lg cursor-pointer hover:bg-gray-50\"\r\n [class]=\"disabled() ? 'bg-gray-50' : ''\"\r\n (click)=\"\r\n !loading() && !disabled() && !readonly() ? uploadInput.click() : ''\r\n \"\r\n [class.border-blue-500]=\"isDragging()\"\r\n [class.bg-blue-50]=\"isDragging()\"\r\n (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n @if (files().length) {\r\n <div class=\"flex w-full flex-col gap-2 p-2\">\r\n @for (file of files(); track $index) {\r\n <mt-upload-file-preview\r\n style=\"width: 100%\"\r\n [value]=\"file\"\r\n [imgPath]=\"resolveImgPath(file)\"\r\n [disabled]=\"disabled()\"\r\n [readonly]=\"readonly()\"\r\n [loading]=\"loading()\"\r\n [context]=\"context()\"\r\n [uploadProgress]=\"uploadProgress()\"\r\n (onUploadInputClicked)=\"uploadInput.click()\"\r\n (ondDownloadFile)=\"downloadFile(file)\"\r\n (onDeleteFile)=\"onDelete(file)\"\r\n />\r\n }\r\n </div>\r\n } @else if (loading()) {\r\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\r\n <p class=\"text-lg text-gray-500\">\r\n {{\r\n (\"components.upload.uploading\" | transloco) +\r\n uploadProgress() +\r\n \"%\"\r\n }}\r\n </p>\r\n </div>\r\n } @else {\r\n <div class=\"w-full flex gap-3 items-center justify-center p-3\">\r\n <mt-icon icon=\"general.upload-01\" />\r\n <p class=\"text-lg text-gray-500\">\r\n {{ \"components.upload.clickOrDrop\" | transloco }}\r\n </p>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n}\r\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\r\n" }]
465
- }], ctorParameters: () => [], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], endPoint: [{ type: i0.Input, args: [{ isSignal: true, alias: "endPoint", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], userImgClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "userImgClass", required: false }] }], shape: [{ type: i0.Input, args: [{ isSignal: true, alias: "shape", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], accept: [{ type: i0.Input, args: [{ isSignal: true, alias: "accept", required: false }] }], isDragging: [{ type: i0.Input, args: [{ isSignal: true, alias: "isDragging", required: false }] }, { type: i0.Output, args: ["isDraggingChange"] }], fileSizeLimit: [{ type: i0.Input, args: [{ isSignal: true, alias: "fileSizeLimit", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], context: [{ type: i0.Input, args: [{ isSignal: true, alias: "context", required: false }] }], onChange: [{ type: i0.Output, args: ["onChange"] }] } });
466
- function isSameFile(source, target) {
467
- if (!source || !target) {
468
- return source === target;
469
- }
470
- return (source === target ||
471
- (source.id && target.id && source.id === target.id) ||
472
- (source.fileName && target.fileName && source.fileName === target.fileName));
473
- }
474
-
475
- /**
476
- * Generated bundle index. Do not edit.
477
- */
478
-
479
- export { SecureImagePipe, UploadField };
480
- //# sourceMappingURL=masterteam-components-upload-field.mjs.map