@masterteam/components 0.0.106 → 0.0.108

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 (226) hide show
  1. package/.codex-tmp-pack/extract/package/README.md +63 -0
  2. package/.codex-tmp-pack/extract/package/assets/cairo.css +70 -0
  3. package/.codex-tmp-pack/extract/package/assets/common.css +2 -0
  4. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-Black.woff2 +0 -0
  5. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-Bold.woff2 +0 -0
  6. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-ExtraBold.woff2 +0 -0
  7. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-ExtraLight.woff2 +0 -0
  8. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-Light.woff2 +0 -0
  9. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-Medium.woff2 +0 -0
  10. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-Regular.woff2 +0 -0
  11. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-SemiBold.woff2 +0 -0
  12. package/.codex-tmp-pack/extract/package/assets/fonts/Cairo-VariableFont_slnt,wght.woff2 +0 -0
  13. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-Black.woff2 +0 -0
  14. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-BlackItalic.woff2 +0 -0
  15. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-Bold.woff2 +0 -0
  16. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-BoldItalic.woff2 +0 -0
  17. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-ExtraBold.woff2 +0 -0
  18. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-ExtraBoldItalic.woff2 +0 -0
  19. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-ExtraLight.woff2 +0 -0
  20. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-ExtraLightItalic.woff2 +0 -0
  21. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-Italic.woff2 +0 -0
  22. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-Light.woff2 +0 -0
  23. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-LightItalic.woff2 +0 -0
  24. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-Medium.woff2 +0 -0
  25. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-MediumItalic.woff2 +0 -0
  26. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-Regular.woff2 +0 -0
  27. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-SemiBold.woff2 +0 -0
  28. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-SemiBoldItalic.woff2 +0 -0
  29. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-Thin.woff2 +0 -0
  30. package/.codex-tmp-pack/extract/package/assets/fonts/Inter-ThinItalic.woff2 +0 -0
  31. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-Black.woff2 +0 -0
  32. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-BlackItalic.woff2 +0 -0
  33. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-Bold.woff2 +0 -0
  34. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-BoldItalic.woff2 +0 -0
  35. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-ExtraBold.woff2 +0 -0
  36. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-ExtraBoldItalic.woff2 +0 -0
  37. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-ExtraLight.woff2 +0 -0
  38. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-ExtraLightItalic.woff2 +0 -0
  39. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-Italic.woff2 +0 -0
  40. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-Light.woff2 +0 -0
  41. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-LightItalic.woff2 +0 -0
  42. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-Medium.woff2 +0 -0
  43. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-MediumItalic.woff2 +0 -0
  44. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-Regular.woff2 +0 -0
  45. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-SemiBold.woff2 +0 -0
  46. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-SemiBoldItalic.woff2 +0 -0
  47. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-Thin.woff2 +0 -0
  48. package/.codex-tmp-pack/extract/package/assets/fonts/InterDisplay-ThinItalic.woff2 +0 -0
  49. package/.codex-tmp-pack/extract/package/assets/fonts/InterVariable-Italic.woff2 +0 -0
  50. package/.codex-tmp-pack/extract/package/assets/fonts/InterVariable.woff2 +0 -0
  51. package/.codex-tmp-pack/extract/package/assets/i18n/ar.json +44 -0
  52. package/.codex-tmp-pack/extract/package/assets/i18n/en.json +44 -0
  53. package/.codex-tmp-pack/extract/package/assets/inter.css +418 -0
  54. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-avatar-text.mjs +46 -0
  55. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-avatar-text.mjs.map +1 -0
  56. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-avatar.mjs +45 -0
  57. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-avatar.mjs.map +1 -0
  58. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-breadcrumb.mjs +27 -0
  59. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-breadcrumb.mjs.map +1 -0
  60. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-business-fields.mjs +222 -0
  61. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-business-fields.mjs.map +1 -0
  62. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-button-group.mjs +20 -0
  63. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-button-group.mjs.map +1 -0
  64. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-button.mjs +52 -0
  65. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-button.mjs.map +1 -0
  66. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-card.mjs +28 -0
  67. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-card.mjs.map +1 -0
  68. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-checkbox-field.mjs +88 -0
  69. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-checkbox-field.mjs.map +1 -0
  70. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-chip.mjs +35 -0
  71. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-chip.mjs.map +1 -0
  72. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-client-page-menu.mjs +92 -0
  73. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-client-page-menu.mjs.map +1 -0
  74. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-client-page.mjs +93 -0
  75. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-client-page.mjs.map +1 -0
  76. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-color-picker-field.mjs +94 -0
  77. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-color-picker-field.mjs.map +1 -0
  78. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-confirmation.mjs +93 -0
  79. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-confirmation.mjs.map +1 -0
  80. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-date-field.mjs +94 -0
  81. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-date-field.mjs.map +1 -0
  82. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-dialog.mjs +33 -0
  83. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-dialog.mjs.map +1 -0
  84. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-drawer.mjs +69 -0
  85. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-drawer.mjs.map +1 -0
  86. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-dynamic-drawer.mjs +321 -0
  87. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-dynamic-drawer.mjs.map +1 -0
  88. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-editor-field.mjs +96 -0
  89. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-editor-field.mjs.map +1 -0
  90. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-entities.mjs +572 -0
  91. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-entities.mjs.map +1 -0
  92. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-field-validation.mjs +103 -0
  93. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-field-validation.mjs.map +1 -0
  94. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-formula.mjs +3102 -0
  95. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-formula.mjs.map +1 -0
  96. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-icon-field.mjs +63 -0
  97. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-icon-field.mjs.map +1 -0
  98. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-list.mjs +31 -0
  99. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-list.mjs.map +1 -0
  100. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-menu.mjs +136 -0
  101. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-menu.mjs.map +1 -0
  102. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-modal.mjs +50 -0
  103. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-modal.mjs.map +1 -0
  104. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-module-summary-card.mjs +32 -0
  105. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-module-summary-card.mjs.map +1 -0
  106. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-multi-select-field.mjs +197 -0
  107. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-multi-select-field.mjs.map +1 -0
  108. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-number-field.mjs +95 -0
  109. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-number-field.mjs.map +1 -0
  110. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-page-header.mjs +42 -0
  111. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-page-header.mjs.map +1 -0
  112. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-page.mjs +35 -0
  113. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-page.mjs.map +1 -0
  114. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-paginator.mjs +44 -0
  115. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-paginator.mjs.map +1 -0
  116. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-pick-list-field.mjs +204 -0
  117. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-pick-list-field.mjs.map +1 -0
  118. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-progress.mjs +41 -0
  119. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-progress.mjs.map +1 -0
  120. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-property-filter-builder.mjs +383 -0
  121. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-property-filter-builder.mjs.map +1 -0
  122. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-radio-button-field.mjs +85 -0
  123. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-radio-button-field.mjs.map +1 -0
  124. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-radio-cards-field.mjs +68 -0
  125. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-radio-cards-field.mjs.map +1 -0
  126. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-radio-cards.mjs +74 -0
  127. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-radio-cards.mjs.map +1 -0
  128. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-select-field.mjs +258 -0
  129. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-select-field.mjs.map +1 -0
  130. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-sidebar.mjs +36 -0
  131. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-sidebar.mjs.map +1 -0
  132. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-slider-field.mjs +104 -0
  133. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-slider-field.mjs.map +1 -0
  134. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-statistic-card.mjs +21 -0
  135. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-statistic-card.mjs.map +1 -0
  136. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-table.mjs +583 -0
  137. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-table.mjs.map +1 -0
  138. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-tabs.mjs +44 -0
  139. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-tabs.mjs.map +1 -0
  140. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-text-field.mjs +159 -0
  141. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-text-field.mjs.map +1 -0
  142. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-textarea-field.mjs +92 -0
  143. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-textarea-field.mjs.map +1 -0
  144. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-toast.mjs +75 -0
  145. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-toast.mjs.map +1 -0
  146. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-toggle-field.mjs +104 -0
  147. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-toggle-field.mjs.map +1 -0
  148. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-tooltip.mjs +45 -0
  149. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-tooltip.mjs.map +1 -0
  150. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-topbar.mjs +28 -0
  151. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-topbar.mjs.map +1 -0
  152. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-tree.mjs +219 -0
  153. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-tree.mjs.map +1 -0
  154. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-upload-field.mjs +480 -0
  155. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-upload-field.mjs.map +1 -0
  156. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-user-search-field.mjs +153 -0
  157. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components-user-search-field.mjs.map +1 -0
  158. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components.mjs +1338 -0
  159. package/.codex-tmp-pack/extract/package/fesm2022/masterteam-components.mjs.map +1 -0
  160. package/.codex-tmp-pack/extract/package/types/masterteam-components-avatar-text.d.ts +23 -0
  161. package/.codex-tmp-pack/extract/package/types/masterteam-components-avatar.d.ts +21 -0
  162. package/.codex-tmp-pack/extract/package/types/masterteam-components-breadcrumb.d.ts +18 -0
  163. package/.codex-tmp-pack/extract/package/types/masterteam-components-business-fields.d.ts +114 -0
  164. package/.codex-tmp-pack/extract/package/types/masterteam-components-button-group.d.ts +8 -0
  165. package/.codex-tmp-pack/extract/package/types/masterteam-components-button.d.ts +36 -0
  166. package/.codex-tmp-pack/extract/package/types/masterteam-components-card.d.ts +14 -0
  167. package/.codex-tmp-pack/extract/package/types/masterteam-components-checkbox-field.d.ts +34 -0
  168. package/.codex-tmp-pack/extract/package/types/masterteam-components-chip.d.ts +19 -0
  169. package/.codex-tmp-pack/extract/package/types/masterteam-components-client-page-menu.d.ts +35 -0
  170. package/.codex-tmp-pack/extract/package/types/masterteam-components-client-page.d.ts +42 -0
  171. package/.codex-tmp-pack/extract/package/types/masterteam-components-color-picker-field.d.ts +35 -0
  172. package/.codex-tmp-pack/extract/package/types/masterteam-components-confirmation.d.ts +41 -0
  173. package/.codex-tmp-pack/extract/package/types/masterteam-components-date-field.d.ts +41 -0
  174. package/.codex-tmp-pack/extract/package/types/masterteam-components-dialog.d.ts +12 -0
  175. package/.codex-tmp-pack/extract/package/types/masterteam-components-drawer.d.ts +30 -0
  176. package/.codex-tmp-pack/extract/package/types/masterteam-components-dynamic-drawer.d.ts +93 -0
  177. package/.codex-tmp-pack/extract/package/types/masterteam-components-editor-field.d.ts +34 -0
  178. package/.codex-tmp-pack/extract/package/types/masterteam-components-entities.d.ts +326 -0
  179. package/.codex-tmp-pack/extract/package/types/masterteam-components-field-validation.d.ts +13 -0
  180. package/.codex-tmp-pack/extract/package/types/masterteam-components-formula.d.ts +651 -0
  181. package/.codex-tmp-pack/extract/package/types/masterteam-components-icon-field.d.ts +27 -0
  182. package/.codex-tmp-pack/extract/package/types/masterteam-components-list.d.ts +18 -0
  183. package/.codex-tmp-pack/extract/package/types/masterteam-components-menu.d.ts +55 -0
  184. package/.codex-tmp-pack/extract/package/types/masterteam-components-modal.d.ts +18 -0
  185. package/.codex-tmp-pack/extract/package/types/masterteam-components-module-summary-card.d.ts +17 -0
  186. package/.codex-tmp-pack/extract/package/types/masterteam-components-multi-select-field.d.ts +74 -0
  187. package/.codex-tmp-pack/extract/package/types/masterteam-components-number-field.d.ts +42 -0
  188. package/.codex-tmp-pack/extract/package/types/masterteam-components-page-header.d.ts +30 -0
  189. package/.codex-tmp-pack/extract/package/types/masterteam-components-page.d.ts +26 -0
  190. package/.codex-tmp-pack/extract/package/types/masterteam-components-paginator.d.ts +20 -0
  191. package/.codex-tmp-pack/extract/package/types/masterteam-components-pick-list-field.d.ts +60 -0
  192. package/.codex-tmp-pack/extract/package/types/masterteam-components-progress.d.ts +20 -0
  193. package/.codex-tmp-pack/extract/package/types/masterteam-components-property-filter-builder.d.ts +90 -0
  194. package/.codex-tmp-pack/extract/package/types/masterteam-components-radio-button-field.d.ts +41 -0
  195. package/.codex-tmp-pack/extract/package/types/masterteam-components-radio-cards-field.d.ts +30 -0
  196. package/.codex-tmp-pack/extract/package/types/masterteam-components-radio-cards.d.ts +33 -0
  197. package/.codex-tmp-pack/extract/package/types/masterteam-components-select-field.d.ts +84 -0
  198. package/.codex-tmp-pack/extract/package/types/masterteam-components-sidebar.d.ts +28 -0
  199. package/.codex-tmp-pack/extract/package/types/masterteam-components-slider-field.d.ts +45 -0
  200. package/.codex-tmp-pack/extract/package/types/masterteam-components-statistic-card.d.ts +17 -0
  201. package/.codex-tmp-pack/extract/package/types/masterteam-components-table.d.ts +207 -0
  202. package/.codex-tmp-pack/extract/package/types/masterteam-components-tabs.d.ts +23 -0
  203. package/.codex-tmp-pack/extract/package/types/masterteam-components-text-field.d.ts +44 -0
  204. package/.codex-tmp-pack/extract/package/types/masterteam-components-textarea-field.d.ts +38 -0
  205. package/.codex-tmp-pack/extract/package/types/masterteam-components-toast.d.ts +26 -0
  206. package/.codex-tmp-pack/extract/package/types/masterteam-components-toggle-field.d.ts +41 -0
  207. package/.codex-tmp-pack/extract/package/types/masterteam-components-tooltip.d.ts +9 -0
  208. package/.codex-tmp-pack/extract/package/types/masterteam-components-topbar.d.ts +17 -0
  209. package/.codex-tmp-pack/extract/package/types/masterteam-components-tree.d.ts +98 -0
  210. package/.codex-tmp-pack/extract/package/types/masterteam-components-upload-field.d.ts +77 -0
  211. package/.codex-tmp-pack/extract/package/types/masterteam-components-user-search-field.d.ts +61 -0
  212. package/.codex-tmp-pack/extract/package/types/masterteam-components.d.ts +780 -0
  213. package/.codex-tmp-pack/masterteam-components-0.0.108.tgz +0 -0
  214. package/assets/common.css +1 -1
  215. package/fesm2022/masterteam-components-entities.mjs +2 -2
  216. package/fesm2022/masterteam-components-entities.mjs.map +1 -1
  217. package/fesm2022/masterteam-components-number-field.mjs +4 -3
  218. package/fesm2022/masterteam-components-number-field.mjs.map +1 -1
  219. package/fesm2022/masterteam-components-slider-field.mjs +12 -5
  220. package/fesm2022/masterteam-components-slider-field.mjs.map +1 -1
  221. package/fesm2022/masterteam-components.mjs +2 -0
  222. package/fesm2022/masterteam-components.mjs.map +1 -1
  223. package/package.json +1 -1
  224. package/types/masterteam-components-number-field.d.ts +2 -1
  225. package/types/masterteam-components-slider-field.d.ts +1 -0
  226. package/types/masterteam-components.d.ts +2 -0
@@ -0,0 +1,480 @@
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