@masterteam/components 0.0.107 → 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 (219) 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/fesm2022/masterteam-components-number-field.mjs +2 -2
  215. package/fesm2022/masterteam-components-number-field.mjs.map +1 -1
  216. package/fesm2022/masterteam-components-slider-field.mjs +2 -2
  217. package/fesm2022/masterteam-components-slider-field.mjs.map +1 -1
  218. package/fesm2022/masterteam-components.mjs.map +1 -1
  219. package/package.json +16 -16
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masterteam-components-upload-field.mjs","sources":["../../../../packages/masterteam/components/upload-field/secure-image.pipe.ts","../../../../packages/masterteam/components/upload-field/upload-file-preview/upload-file-preview.ts","../../../../packages/masterteam/components/upload-field/upload-file-preview/upload-file-preview.html","../../../../packages/masterteam/components/upload-field/upload-user-preview/upload-user-preview.ts","../../../../packages/masterteam/components/upload-field/upload-user-preview/upload-user-preview.html","../../../../packages/masterteam/components/upload-field/upload-field.ts","../../../../packages/masterteam/components/upload-field/upload-field.html","../../../../packages/masterteam/components/upload-field/masterteam-components-upload-field.ts"],"sourcesContent":["import {\r\n filter,\r\n switchMap,\r\n map,\r\n catchError,\r\n tap,\r\n distinctUntilChanged,\r\n finalize,\r\n} from 'rxjs/operators';\r\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\r\nimport { Subscription, BehaviorSubject, of } from 'rxjs';\r\nimport {\r\n Pipe,\r\n PipeTransform,\r\n OnDestroy,\r\n ChangeDetectorRef,\r\n inject,\r\n} from '@angular/core';\r\nimport { HttpClient, HttpContext, HttpResponse } from '@angular/common/http';\r\n@Pipe({\r\n name: 'secureImage',\r\n pure: false,\r\n standalone: true,\r\n})\r\nexport class SecureImagePipe implements PipeTransform, OnDestroy {\r\n httpClient = inject(HttpClient);\r\n domSanitizer = inject(DomSanitizer);\r\n cdr = inject(ChangeDetectorRef);\r\n constructor() {\r\n this.setUpSubscription();\r\n }\r\n ngOnDestroy(): void {\r\n this.subscription.unsubscribe();\r\n }\r\n private subscription = new Subscription();\r\n private latestValue!: string | SafeUrl;\r\n private transformValue = new BehaviorSubject<string>('');\r\n private loading = true;\r\n private context: HttpContext | undefined;\r\n private wrapUrl = true;\r\n private useEndpoint = false;\r\n private endPoint = '';\r\n private sanitize = true;\r\n\r\n transform(\r\n imagePath: string,\r\n wrapUrlOrContext?: boolean | HttpContext,\r\n contextOrEndpoint?: HttpContext | string,\r\n endPoint: string = 'uploader/',\r\n ): string {\r\n const hasExtraArgs = arguments.length > 1;\r\n const isWrapFlag = typeof wrapUrlOrContext === 'boolean';\r\n\r\n this.context = undefined;\r\n this.wrapUrl = true;\r\n this.useEndpoint = false;\r\n this.endPoint = '';\r\n this.sanitize = true;\r\n\r\n if (!hasExtraArgs || isWrapFlag) {\r\n // Backward compatible mode: (imagePath, wrapUrl?, context?, endPoint?)\r\n this.wrapUrl = isWrapFlag ? wrapUrlOrContext : false;\r\n this.useEndpoint = true;\r\n this.endPoint = endPoint;\r\n if (contextOrEndpoint instanceof HttpContext) {\r\n this.context = contextOrEndpoint;\r\n } else if (typeof contextOrEndpoint === 'string') {\r\n this.endPoint = contextOrEndpoint;\r\n }\r\n this.sanitize = false;\r\n } else {\r\n // Components mode: (imagePath, context)\r\n this.context = wrapUrlOrContext as HttpContext | undefined;\r\n this.wrapUrl = true;\r\n this.useEndpoint = false;\r\n this.endPoint = '';\r\n this.sanitize = true;\r\n }\r\n\r\n const fullPath = this.useEndpoint\r\n ? imagePath\r\n ? this.endPoint + imagePath\r\n : ''\r\n : imagePath;\r\n this.transformValue.next(fullPath);\r\n\r\n if (this.loading || !this.latestValue) {\r\n return '';\r\n }\r\n\r\n if (!this.useEndpoint || this.wrapUrl) {\r\n return this.latestValue as string;\r\n }\r\n\r\n return `url('${this.latestValue}')`;\r\n }\r\n\r\n private setUpSubscription(): void {\r\n const transformSubscription = this.transformValue\r\n .asObservable()\r\n .pipe(\r\n distinctUntilChanged(),\r\n filter((v): v is string => !!v && !v.includes('null')),\r\n switchMap((imagePath: string) => {\r\n this.latestValue = '';\r\n this.loading = true;\r\n return this.httpClient\r\n .get(imagePath, {\r\n observe: 'response',\r\n responseType: 'blob',\r\n context: this.context,\r\n })\r\n .pipe(\r\n map((response: HttpResponse<any>) =>\r\n URL.createObjectURL(response.body),\r\n ),\r\n map((unsafeBlobUrl: string) =>\r\n this.sanitize\r\n ? this.domSanitizer.bypassSecurityTrustUrl(unsafeBlobUrl)\r\n : unsafeBlobUrl,\r\n ),\r\n filter((blobUrl) => blobUrl !== this.latestValue),\r\n catchError(() => of('')),\r\n finalize(() => (this.loading = false)),\r\n );\r\n }),\r\n tap((imagePath: string | SafeUrl) => {\r\n this.latestValue = imagePath;\r\n this.cdr.markForCheck();\r\n }),\r\n )\r\n .subscribe();\r\n this.subscription.add(transformSubscription);\r\n }\r\n}\r\n","import {\r\n Component,\r\n computed,\r\n input,\r\n model,\r\n OnInit,\r\n output,\r\n} from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { SecureImagePipe } from '../secure-image.pipe';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { HttpContext } from '@angular/common/http';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\nimport { Tooltip } from '@masterteam/components/tooltip';\r\n\r\n@Component({\r\n selector: 'mt-upload-file-preview',\r\n standalone: true,\r\n imports: [SecureImagePipe, Button, Avatar, TranslocoModule, Tooltip],\r\n templateUrl: './upload-file-preview.html',\r\n styleUrl: './upload-file-preview.scss',\r\n})\r\nexport class UploadFilePreview implements OnInit {\r\n value = input<any | null>(null);\r\n imgPath = input<any | undefined>();\r\n readonly context = input<HttpContext | undefined>(undefined);\r\n loading = input<boolean>(false);\r\n uploadProgress = input<number>(0);\r\n onUploadInputClicked = output<any>();\r\n ondDownloadFile = output<any>();\r\n onDeleteFile = output<any>();\r\n readonly disabled = model<boolean>(false);\r\n readonly readonly = input<boolean>(false);\r\n readonly size = input<'normal' | 'large' | 'xlarge' | undefined>();\r\n isImag = computed(() => {\r\n return this.value()?.contentType?.startsWith('image/');\r\n });\r\n ngOnInit(): void {\r\n if (this.readonly()) {\r\n this.disabled.set(true);\r\n }\r\n }\r\n defaultIcon = computed(() => {\r\n switch (this.value()?.extension) {\r\n case '.pdf':\r\n return 'file.file-06';\r\n case '.docx':\r\n case '.doc':\r\n return 'file.file-06';\r\n case '.xlsx':\r\n case '.xls':\r\n return 'file.file-06';\r\n default:\r\n return 'image.image-03';\r\n }\r\n });\r\n}\r\n","<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","import { SecureImagePipe } from '../secure-image.pipe';\r\nimport { Icon } from '@masterteam/icons';\r\nimport { Component, input, model, OnInit, output, signal } from '@angular/core';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { HttpContext } from '@angular/common/http';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\n\r\n@Component({\r\n selector: 'mt-upload-user-preview',\r\n standalone: true,\r\n imports: [Icon, SecureImagePipe, Button, Icon, Avatar, TranslocoModule],\r\n templateUrl: './upload-user-preview.html',\r\n styleUrl: './upload-user-preview.css',\r\n})\r\nexport class UploadUserPreview implements OnInit {\r\n value = input<any | null>(null);\r\n imgPath = input<any | undefined>();\r\n readonly context = input<HttpContext | undefined>(undefined);\r\n loading = input<boolean>(false);\r\n uploadProgress = input<number>(0);\r\n isDragging = input<boolean>(false);\r\n defaultIcon = signal<string>('image.image-03');\r\n onUploadInputClicked = output<any>();\r\n ondDownloadFile = output<any>();\r\n onDeleteFile = output<any>();\r\n onDragOver = output<any>();\r\n onDragLeave = output<any>();\r\n onDrop = output<any>();\r\n readonly disabled = model<boolean>(false);\r\n readonly readonly = input<boolean>(false);\r\n readonly size = input<'normal' | 'large' | 'xlarge' | undefined>();\r\n readonly userImgClass = input<string>('');\r\n OnUploadInputClicked(): void {\r\n if (!this.imgPath() && !this.loading() && !this.disabled()) {\r\n this.onUploadInputClicked.emit(true);\r\n }\r\n }\r\n ngOnInit(): void {\r\n if (this.readonly()) {\r\n this.disabled.set(true);\r\n }\r\n }\r\n OnDragOver(event: DragEvent): void {\r\n this.onDragOver.emit(event);\r\n }\r\n OnDragLeave(event: DragEvent): void {\r\n this.onDragLeave.emit(event);\r\n }\r\n\r\n OnDrop(event: DragEvent): void {\r\n this.onDrop.emit(event);\r\n }\r\n}\r\n","<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","import { UploadFilePreview } from './upload-file-preview/upload-file-preview';\r\nimport { UploadUserPreview } from './upload-user-preview/upload-user-preview';\r\nimport {\r\n Component,\r\n computed,\r\n inject,\r\n input,\r\n model,\r\n output,\r\n signal,\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl, Validators } from '@angular/forms';\r\nimport { HttpClient, HttpContext } from '@angular/common/http';\r\nimport { Icon } from '@masterteam/icons';\r\nimport {\r\n catchError,\r\n finalize,\r\n forkJoin,\r\n map,\r\n of,\r\n take,\r\n throwError,\r\n} from 'rxjs';\r\nimport { FieldValidation } from '@masterteam/components/field-validation';\r\nimport { Card } from '@masterteam/components/card';\r\nimport { Button } from '@masterteam/components/button';\r\nimport { TranslocoModule } from '@jsverse/transloco';\r\n\r\ninterface FileMetadata {\r\n id: string;\r\n name: string;\r\n contentType: string;\r\n extension: string;\r\n fileName: string;\r\n size?: number;\r\n}\r\n\r\ninterface MetadataResponse {\r\n data: FileMetadata;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-upload-field',\r\n standalone: true,\r\n imports: [\r\n Icon,\r\n UploadUserPreview,\r\n UploadFilePreview,\r\n FieldValidation,\r\n Card,\r\n Button,\r\n TranslocoModule,\r\n ],\r\n templateUrl: './upload-field.html',\r\n})\r\nexport class UploadField implements ControlValueAccessor {\r\n readonly label = input<string>();\r\n readonly title = input<string>('Upload File');\r\n readonly description = input<string>('Click or drop a file to upload');\r\n readonly endPoint = input<string>('uploader');\r\n readonly size = input<'normal' | 'large' | 'xlarge' | undefined>();\r\n readonly userImgClass = input<string | undefined>(\r\n 'w-25! h-25! text-4xl! text-gray-400!',\r\n );\r\n readonly shape = input<'circle' | 'field' | 'card'>('field');\r\n readonly multiple = input<boolean>(false);\r\n readonly accept = input<string | undefined>('.pdf,.doc,.docx,.xlsx,image/*');\r\n readonly isDragging = model<boolean>(false);\r\n readonly fileSizeLimit = input<number | undefined>();\r\n readonly = input<boolean>(false);\r\n readonly context = input<HttpContext | undefined>(undefined);\r\n\r\n readonly onChange = output<any>();\r\n readonly requiredValidator = Validators.required;\r\n readonly value = signal<any | any[] | null>(null);\r\n readonly files = computed<any[]>(() => {\r\n const value = this.value();\r\n if (Array.isArray(value)) {\r\n return value.filter((item) => item != null);\r\n }\r\n\r\n return value ? [value] : [];\r\n });\r\n readonly primaryFile = computed(() => this.files()[0] ?? null);\r\n readonly imgPath = computed(() => this.resolveImgPath(this.primaryFile()));\r\n readonly disabled = signal<boolean>(false);\r\n readonly uploadProgress = signal<number>(0);\r\n readonly loading = signal<boolean>(false);\r\n\r\n private readonly httpClient = inject(HttpClient);\r\n private readonly pendingUploads = signal(0);\r\n\r\n onTouched: () => void = () => {};\r\n onModelChange: (value: any) => void = () => {};\r\n readonly ngControl = inject(NgControl, { self: true });\r\n\r\n constructor() {\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (Array.isArray(value)) {\r\n const normalized = value.filter((item) => item != null);\r\n const fileIds = normalized.filter(\r\n (item): item is string =>\r\n typeof item === 'string' && item.trim().length > 0,\r\n );\r\n const files = normalized.filter(\r\n (item) => !!item && typeof item === 'object',\r\n );\r\n\r\n if (fileIds.length) {\r\n this.fetchMetadata(fileIds, files, true);\r\n return;\r\n }\r\n\r\n this.value.set(normalized);\r\n return;\r\n }\r\n\r\n if (typeof value === 'string' && value.trim().length > 0) {\r\n this.fetchMetadata([value], [], false);\r\n return;\r\n }\r\n\r\n this.value.set(value ?? null);\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.onModelChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(disabled: boolean): void {\r\n this.disabled.set(disabled);\r\n }\r\n\r\n onAdd(item: any): void {\r\n if (this.disabled()) {\r\n return;\r\n }\r\n\r\n const nextValue = this.multiple() ? [...this.files(), item] : item;\r\n this.value.set(nextValue);\r\n this.onModelChange(nextValue);\r\n this.onChange.emit(nextValue);\r\n }\r\n\r\n onDelete(item?: any): void {\r\n if (this.disabled()) {\r\n return;\r\n }\r\n\r\n if (!this.multiple()) {\r\n this.value.set(null);\r\n this.onModelChange(null);\r\n this.onChange.emit(null);\r\n return;\r\n }\r\n\r\n const nextValue = this.files().filter((file) => !isSameFile(file, item));\r\n const resolvedValue = nextValue.length ? nextValue : null;\r\n\r\n this.value.set(resolvedValue);\r\n this.onModelChange(resolvedValue);\r\n this.onChange.emit(resolvedValue);\r\n }\r\n\r\n onFileSelect(event: Event): void {\r\n const input = event.target as HTMLInputElement | null;\r\n const selectedFiles = Array.from(input?.files ?? []);\r\n\r\n if (!selectedFiles.length) {\r\n return;\r\n }\r\n\r\n if (!this.multiple()) {\r\n this.value.set(null);\r\n }\r\n\r\n this.prepareFiles(selectedFiles);\r\n\r\n if (input) {\r\n input.value = '';\r\n }\r\n }\r\n\r\n prepareFiles(files: File[]): void {\r\n this.ngControl.control?.setErrors({ uploading: true });\r\n\r\n if (\r\n this.shape() === 'circle' &&\r\n files.some((file) => !file?.type.startsWith('image/'))\r\n ) {\r\n this.ngControl.control?.setErrors({ invalidFileType: true });\r\n return;\r\n }\r\n\r\n const filesToUpload = this.multiple() ? files : [files[0]];\r\n filesToUpload.forEach((file) => this.uploadFile(file));\r\n }\r\n\r\n uploadFile(file: File): void {\r\n this.pendingUploads.update((count) => count + 1);\r\n this.loading.set(true);\r\n this.uploadProgress.set(10);\r\n\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n\r\n this.httpClient\r\n .post<any>(this.endPoint(), formData, {\r\n reportProgress: true,\r\n observe: 'events',\r\n context: this.context(),\r\n })\r\n .pipe(\r\n finalize(() => {\r\n const pending = Math.max(this.pendingUploads() - 1, 0);\r\n this.pendingUploads.set(pending);\r\n\r\n if (!pending) {\r\n setTimeout(() => {\r\n this.uploadProgress.set(0);\r\n this.loading.set(false);\r\n }, 700);\r\n }\r\n }),\r\n catchError(() => {\r\n this.uploadProgress.set(0);\r\n return throwError(() => new Error('Upload failed'));\r\n }),\r\n )\r\n .subscribe((event: any) => {\r\n if (!event?.body) {\r\n if (event.total) {\r\n this.uploadProgress.set(\r\n Math.round((100 * event.loaded) / event.total),\r\n );\r\n }\r\n return;\r\n }\r\n\r\n this.uploadProgress.set(100);\r\n this.handleUploadDone({ ...event.body?.data, size: file.size });\r\n });\r\n }\r\n\r\n handleUploadDone(file: any): void {\r\n if (!file) {\r\n return;\r\n }\r\n\r\n this.onAdd(file);\r\n\r\n if (this.fileSizeLimit() && file.size > this.fileSizeLimit()!) {\r\n this.ngControl.control?.setErrors({ fileSizeLimited: true });\r\n return;\r\n }\r\n\r\n if (this.pendingUploads() <= 1) {\r\n this.ngControl.control?.setErrors(null);\r\n }\r\n }\r\n\r\n downloadFile(value: any): void {\r\n const downloadUrl = this.resolveImgPath(value);\r\n const downloadFileName = value?.name;\r\n const mimeType = value?.contentType;\r\n\r\n if (!downloadUrl || !mimeType || !downloadFileName) {\r\n console.error('File metadata is incomplete. Cannot download.');\r\n return;\r\n }\r\n\r\n this.httpClient\r\n .get(downloadUrl, {\r\n responseType: 'blob',\r\n context: this.context(),\r\n })\r\n .pipe(take(1))\r\n .subscribe((res: Blob) => {\r\n const blob = new Blob([res], { type: mimeType });\r\n const data = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n\r\n link.href = data;\r\n link.download = downloadFileName;\r\n link.click();\r\n\r\n window.URL.revokeObjectURL(data);\r\n });\r\n }\r\n\r\n onDragOver(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if (!this.disabled()) {\r\n this.isDragging.set(true);\r\n }\r\n }\r\n\r\n onDragLeave(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragging.set(false);\r\n }\r\n\r\n onDrop(event: DragEvent): void {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.isDragging.set(false);\r\n\r\n if (this.disabled()) {\r\n return;\r\n }\r\n\r\n const files = Array.from(event.dataTransfer?.files ?? []);\r\n if (!files.length) {\r\n return;\r\n }\r\n\r\n if (!this.multiple()) {\r\n this.value.set(null);\r\n }\r\n\r\n this.prepareFiles(files);\r\n }\r\n\r\n protected resolveImgPath(value: any): string | undefined {\r\n return value?.fileName ? `${this.endPoint()}/${value.fileName}` : undefined;\r\n }\r\n\r\n private fetchMetadata(\r\n fileIds: string[],\r\n existingFiles: any[] = [],\r\n forceArray = false,\r\n ): void {\r\n const normalizedIds = fileIds\r\n .map((fileId) => fileId.trim())\r\n .filter((fileId) => fileId.length > 0);\r\n\r\n if (!normalizedIds.length) {\r\n this.value.set(forceArray ? existingFiles : (existingFiles[0] ?? null));\r\n return;\r\n }\r\n\r\n this.loading.set(true);\r\n\r\n forkJoin(\r\n normalizedIds.map((fileId) =>\r\n this.httpClient\r\n .get<MetadataResponse>(`${this.endPoint()}/${fileId}/metaData`, {\r\n context: this.context(),\r\n })\r\n .pipe(\r\n take(1),\r\n map((response) => response.data),\r\n catchError((error) => {\r\n console.error('Failed to fetch file metadata:', error);\r\n return of({\r\n id: fileId,\r\n name: fileId,\r\n fileName: fileId,\r\n contentType: '',\r\n extension: '',\r\n } as FileMetadata);\r\n }),\r\n ),\r\n ),\r\n )\r\n .pipe(finalize(() => this.loading.set(false)))\r\n .subscribe((files) => {\r\n const resolvedFiles = [...existingFiles, ...files];\r\n const resolvedValue =\r\n forceArray || this.multiple() || resolvedFiles.length > 1\r\n ? resolvedFiles\r\n : (resolvedFiles[0] ?? null);\r\n\r\n this.value.set(resolvedValue);\r\n });\r\n }\r\n}\r\n\r\nfunction isSameFile(source: any, target: any): boolean {\r\n if (!source || !target) {\r\n return source === target;\r\n }\r\n\r\n return (\r\n source === target ||\r\n (source.id && target.id && source.id === target.id) ||\r\n (source.fileName && target.fileName && source.fileName === target.fileName)\r\n );\r\n}\r\n","<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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["finalize","catchError","map"],"mappings":"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"}
@@ -0,0 +1,153 @@
1
+ import * as i0 from '@angular/core';
2
+ import { input, signal, viewChild, inject, effect, HostBinding, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import * as i1 from '@angular/forms';
4
+ import { Validators, NgControl, FormsModule } from '@angular/forms';
5
+ import * as i2 from 'primeng/autocomplete';
6
+ import { AutoCompleteModule } from 'primeng/autocomplete';
7
+ import * as i4 from 'primeng/inputgroup';
8
+ import { InputGroupModule } from 'primeng/inputgroup';
9
+ import * as i5 from 'primeng/inputgroupaddon';
10
+ import { InputGroupAddonModule } from 'primeng/inputgroupaddon';
11
+ import { Tooltip } from '@masterteam/components/tooltip';
12
+ import { FieldValidation } from '@masterteam/components/field-validation';
13
+ import { isInvalid } from '@masterteam/components';
14
+ import { Icon } from '@masterteam/icons';
15
+ import { Subject, distinctUntilChanged, tap, switchMap, of, finalize, catchError } from 'rxjs';
16
+ import { HttpClient, HttpParams } from '@angular/common/http';
17
+ import { Avatar } from '@masterteam/components/avatar';
18
+ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
19
+ import * as i3 from 'primeng/api';
20
+
21
+ class UserSearchField {
22
+ hint = input(...(ngDevMode ? [undefined, { debugName: "hint" }] : []));
23
+ label = input(...(ngDevMode ? [undefined, { debugName: "label" }] : []));
24
+ placeholder = input(...(ngDevMode ? [undefined, { debugName: "placeholder" }] : []));
25
+ class = input('', ...(ngDevMode ? [{ debugName: "class" }] : []));
26
+ readonly = input(false, ...(ngDevMode ? [{ debugName: "readonly" }] : []));
27
+ required = input(false, ...(ngDevMode ? [{ debugName: "required" }] : []));
28
+ apiUrl = input.required(...(ngDevMode ? [{ debugName: "apiUrl" }] : []));
29
+ dataKey = input('data', ...(ngDevMode ? [{ debugName: "dataKey" }] : []));
30
+ paramName = input('query', ...(ngDevMode ? [{ debugName: "paramName" }] : []));
31
+ context = input(undefined, ...(ngDevMode ? [{ debugName: "context" }] : []));
32
+ styleClass;
33
+ requiredValidator = Validators.required;
34
+ value = signal(null, ...(ngDevMode ? [{ debugName: "value" }] : []));
35
+ disabled = signal(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
36
+ loading = signal(false, ...(ngDevMode ? [{ debugName: "loading" }] : []));
37
+ size = input(...(ngDevMode ? [undefined, { debugName: "size" }] : []));
38
+ filteredUsers = signal([], ...(ngDevMode ? [{ debugName: "filteredUsers" }] : []));
39
+ searchTerms = new Subject();
40
+ autocomplete = viewChild('autocomplete', ...(ngDevMode ? [{ debugName: "autocomplete" }] : []));
41
+ onTouched = () => { };
42
+ onModelChange = () => { };
43
+ ngControl = null;
44
+ http = inject(HttpClient);
45
+ isInvalid = isInvalid;
46
+ constructor() {
47
+ this.ngControl = inject(NgControl, { self: true, optional: true });
48
+ if (this.ngControl) {
49
+ this.ngControl.valueAccessor = this;
50
+ }
51
+ effect(() => {
52
+ if (this.ngControl?.control && this.required()) {
53
+ this.ngControl.control.addValidators(Validators.required);
54
+ this.ngControl.control.updateValueAndValidity();
55
+ }
56
+ });
57
+ this.getUsers();
58
+ }
59
+ ngOnInit() {
60
+ this.styleClass = this.class();
61
+ }
62
+ search(event) {
63
+ this.loading.set(true);
64
+ this.searchTerms.next(event.query);
65
+ }
66
+ onFocus() {
67
+ if (this.filteredUsers().length > 0 && this.autocomplete()) {
68
+ this.autocomplete()?.show();
69
+ }
70
+ }
71
+ onSelect(event) {
72
+ const selectedUser = event.value;
73
+ this.value.set(selectedUser);
74
+ this.onModelChange(selectedUser);
75
+ this.onTouched();
76
+ this.loading.set(false);
77
+ this.filteredUsers.set([]);
78
+ if (this.autocomplete()) {
79
+ this.autocomplete()?.hide();
80
+ }
81
+ }
82
+ onClear() {
83
+ this.value.set(null);
84
+ this.onModelChange(null);
85
+ this.filteredUsers.set([]);
86
+ this.loading.set(false);
87
+ }
88
+ writeValue(value) {
89
+ this.value.set(value);
90
+ }
91
+ registerOnChange(fn) {
92
+ this.onModelChange = fn;
93
+ }
94
+ registerOnTouched(fn) {
95
+ this.onTouched = fn;
96
+ }
97
+ setDisabledState(disabled) {
98
+ this.disabled.set(disabled);
99
+ }
100
+ getUsers() {
101
+ this.searchTerms
102
+ .pipe(takeUntilDestroyed(), distinctUntilChanged(), tap(() => this.loading.set(true)), switchMap((term) => {
103
+ if (!term) {
104
+ this.filteredUsers.set([]);
105
+ this.loading.set(false);
106
+ return of([]);
107
+ }
108
+ const params = new HttpParams().set(this.paramName(), term);
109
+ return this.http
110
+ .get(this.apiUrl(), {
111
+ params,
112
+ context: this.context(),
113
+ })
114
+ .pipe(finalize(() => this.loading.set(false)), catchError((err) => {
115
+ console.error('API search failed:', err);
116
+ this.filteredUsers.set([]);
117
+ return of({ [this.dataKey()]: [] });
118
+ }));
119
+ }))
120
+ .subscribe({
121
+ next: (users) => {
122
+ this.filteredUsers.set((users[this.dataKey()] ?? []));
123
+ },
124
+ });
125
+ }
126
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: UserSearchField, deps: [], target: i0.ɵɵFactoryTarget.Component });
127
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: UserSearchField, isStandalone: true, selector: "mt-user-search-field", inputs: { hint: { classPropertyName: "hint", publicName: "hint", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, class: { classPropertyName: "class", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: true, isRequired: false, transformFunction: null }, apiUrl: { classPropertyName: "apiUrl", publicName: "apiUrl", isSignal: true, isRequired: true, transformFunction: null }, dataKey: { classPropertyName: "dataKey", publicName: "dataKey", isSignal: true, isRequired: false, transformFunction: null }, paramName: { classPropertyName: "paramName", publicName: "paramName", isSignal: true, isRequired: false, transformFunction: null }, context: { classPropertyName: "context", publicName: "context", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "this.styleClass" }, classAttribute: "grid gap-1" }, viewQueries: [{ propertyName: "autocomplete", first: true, predicate: ["autocomplete"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (label()) {\r\n <label\r\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\r\n [for]=\"ngControl?.name || label()\"\r\n >\r\n {{ label() }}\r\n </label>\r\n}\r\n<div class=\"relative\">\r\n <p-inputgroup>\r\n <p-autoComplete\r\n #autocomplete=\"\"\r\n [suggestions]=\"filteredUsers()\"\r\n (completeMethod)=\"search($event)\"\r\n (onSelect)=\"onSelect($event)\"\r\n (onClear)=\"onClear()\"\r\n (onFocus)=\"onFocus()\"\r\n (onBlur)=\"onTouched()\"\r\n [ngModel]=\"value()?.displayName\"\r\n [disabled]=\"disabled() || readonly()\"\r\n [id]=\"ngControl?.name || label()\"\r\n [invalid]=\"isInvalid(ngControl?.control)\"\r\n [placeholder]=\"placeholder()\"\r\n class=\"w-full\"\r\n appendTo=\"body\"\r\n styleClass=\"w-full\"\r\n [dropdown]=\"false\"\r\n [size]=\"size()\"\r\n >\r\n <ng-template let-user pTemplate=\"item\">\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar size=\"small\" icon=\"user.user-01\" />\r\n <div class=\"flex align-items-center gap-3\">\r\n <span class=\"font-medium\">{{ user.displayName }}</span>\r\n <medium class=\"text-gray-500\">{{ \"@\" + user.userName }}</medium>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- <ng-template let-user #pTemplate=\"selecteditem\">\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar size=\"small\" icon=\"user.user-01\" />\r\n <div class=\"flex align-items-center gap-3\">\r\n <span class=\"font-medium\">{{ user.displayName }}</span>\r\n <medium class=\"text-gray-500\">{{ \"@\" + user.userName }}</medium>\r\n </div>\r\n </div>\r\n </ng-template> -->\r\n </p-autoComplete>\r\n @if (hint()) {\r\n <p-inputgroup-addon [mtTooltip]=\"hint()\" tooltipPosition=\"top\">\r\n <mt-icon icon=\"general.help-circle\" />\r\n </p-inputgroup-addon>\r\n } @else {\r\n <p-inputgroup-addon tooltipPosition=\"top\">\r\n <mt-icon icon=\"user.user-03\" />\r\n </p-inputgroup-addon>\r\n }\r\n </p-inputgroup>\r\n\r\n @if (loading()) {\r\n <mt-icon\r\n icon=\"general.loading-01\"\r\n class=\"animate-spin absolute right-3 bg-white top-1/2 -translate-y-1/2\"\r\n />\r\n }\r\n</div>\r\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: AutoCompleteModule }, { kind: "component", type: i2.AutoComplete, selector: "p-autoComplete, p-autocomplete, p-auto-complete", inputs: ["minLength", "minQueryLength", "delay", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "addOnTab", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "typeahead", "addOnBlur", "separator", "appendTo", "motionOptions"], outputs: ["completeMethod", "onSelect", "onUnselect", "onAdd", "onFocus", "onBlur", "onDropdownClick", "onClear", "onInputKeydown", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: Tooltip, selector: "[mtTooltip]" }, { kind: "ngmodule", type: InputGroupModule }, { kind: "component", type: i4.InputGroup, selector: "p-inputgroup, p-inputGroup, p-input-group", inputs: ["styleClass"] }, { kind: "ngmodule", type: InputGroupAddonModule }, { kind: "component", type: i5.InputGroupAddon, selector: "p-inputgroup-addon, p-inputGroupAddon", inputs: ["style", "styleClass"] }, { kind: "component", type: FieldValidation, selector: "mt-field-validation", inputs: ["control", "touched"] }, { kind: "component", type: Icon, selector: "mt-icon", inputs: ["icon"] }, { kind: "component", type: Avatar, selector: "mt-avatar", inputs: ["label", "icon", "image", "styleClass", "size", "shape", "badge", "badgeSize", "badgeSeverity"], outputs: ["onImageError"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
128
+ }
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: UserSearchField, decorators: [{
130
+ type: Component,
131
+ args: [{ selector: 'mt-user-search-field', standalone: true, imports: [
132
+ FormsModule,
133
+ AutoCompleteModule,
134
+ Tooltip,
135
+ InputGroupModule,
136
+ InputGroupAddonModule,
137
+ FieldValidation,
138
+ Icon,
139
+ Avatar,
140
+ ], changeDetection: ChangeDetectionStrategy.OnPush, host: {
141
+ class: 'grid gap-1',
142
+ }, template: "@if (label()) {\r\n <label\r\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\r\n [for]=\"ngControl?.name || label()\"\r\n >\r\n {{ label() }}\r\n </label>\r\n}\r\n<div class=\"relative\">\r\n <p-inputgroup>\r\n <p-autoComplete\r\n #autocomplete=\"\"\r\n [suggestions]=\"filteredUsers()\"\r\n (completeMethod)=\"search($event)\"\r\n (onSelect)=\"onSelect($event)\"\r\n (onClear)=\"onClear()\"\r\n (onFocus)=\"onFocus()\"\r\n (onBlur)=\"onTouched()\"\r\n [ngModel]=\"value()?.displayName\"\r\n [disabled]=\"disabled() || readonly()\"\r\n [id]=\"ngControl?.name || label()\"\r\n [invalid]=\"isInvalid(ngControl?.control)\"\r\n [placeholder]=\"placeholder()\"\r\n class=\"w-full\"\r\n appendTo=\"body\"\r\n styleClass=\"w-full\"\r\n [dropdown]=\"false\"\r\n [size]=\"size()\"\r\n >\r\n <ng-template let-user pTemplate=\"item\">\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar size=\"small\" icon=\"user.user-01\" />\r\n <div class=\"flex align-items-center gap-3\">\r\n <span class=\"font-medium\">{{ user.displayName }}</span>\r\n <medium class=\"text-gray-500\">{{ \"@\" + user.userName }}</medium>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- <ng-template let-user #pTemplate=\"selecteditem\">\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar size=\"small\" icon=\"user.user-01\" />\r\n <div class=\"flex align-items-center gap-3\">\r\n <span class=\"font-medium\">{{ user.displayName }}</span>\r\n <medium class=\"text-gray-500\">{{ \"@\" + user.userName }}</medium>\r\n </div>\r\n </div>\r\n </ng-template> -->\r\n </p-autoComplete>\r\n @if (hint()) {\r\n <p-inputgroup-addon [mtTooltip]=\"hint()\" tooltipPosition=\"top\">\r\n <mt-icon icon=\"general.help-circle\" />\r\n </p-inputgroup-addon>\r\n } @else {\r\n <p-inputgroup-addon tooltipPosition=\"top\">\r\n <mt-icon icon=\"user.user-03\" />\r\n </p-inputgroup-addon>\r\n }\r\n </p-inputgroup>\r\n\r\n @if (loading()) {\r\n <mt-icon\r\n icon=\"general.loading-01\"\r\n class=\"animate-spin absolute right-3 bg-white top-1/2 -translate-y-1/2\"\r\n />\r\n }\r\n</div>\r\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\r\n" }]
143
+ }], ctorParameters: () => [], propDecorators: { hint: [{ type: i0.Input, args: [{ isSignal: true, alias: "hint", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], class: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], required: [{ type: i0.Input, args: [{ isSignal: true, alias: "required", required: false }] }], apiUrl: [{ type: i0.Input, args: [{ isSignal: true, alias: "apiUrl", required: true }] }], dataKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataKey", required: false }] }], paramName: [{ type: i0.Input, args: [{ isSignal: true, alias: "paramName", required: false }] }], context: [{ type: i0.Input, args: [{ isSignal: true, alias: "context", required: false }] }], styleClass: [{
144
+ type: HostBinding,
145
+ args: ['class']
146
+ }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], autocomplete: [{ type: i0.ViewChild, args: ['autocomplete', { isSignal: true }] }] } });
147
+
148
+ /**
149
+ * Generated bundle index. Do not edit.
150
+ */
151
+
152
+ export { UserSearchField };
153
+ //# sourceMappingURL=masterteam-components-user-search-field.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masterteam-components-user-search-field.mjs","sources":["../../../../packages/masterteam/components/user-search-field/user-search-field.ts","../../../../packages/masterteam/components/user-search-field/user-search-field.html","../../../../packages/masterteam/components/user-search-field/masterteam-components-user-search-field.ts"],"sourcesContent":["import {\r\n Component,\r\n HostBinding,\r\n signal,\r\n input,\r\n OnInit,\r\n inject,\r\n ChangeDetectionStrategy,\r\n effect,\r\n viewChild,\r\n} from '@angular/core';\r\nimport {\r\n ControlValueAccessor,\r\n FormsModule,\r\n NgControl,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { AutoComplete, AutoCompleteModule } from 'primeng/autocomplete';\r\nimport { InputGroupModule } from 'primeng/inputgroup';\r\nimport { InputGroupAddonModule } from 'primeng/inputgroupaddon';\r\nimport { Tooltip } from '@masterteam/components/tooltip';\r\nimport { FieldValidation } from '@masterteam/components/field-validation';\r\nimport { isInvalid } from '@masterteam/components';\r\nimport { Icon } from '@masterteam/icons';\r\nimport {\r\n Subject,\r\n distinctUntilChanged,\r\n switchMap,\r\n tap,\r\n of,\r\n finalize,\r\n catchError,\r\n} from 'rxjs';\r\nimport { HttpClient, HttpContext, HttpParams } from '@angular/common/http';\r\nimport { Avatar } from '@masterteam/components/avatar';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\n\r\nexport interface User {\r\n isExternal: boolean;\r\n id: string;\r\n displayName: string;\r\n userName: string;\r\n photo: string;\r\n}\r\n\r\n@Component({\r\n selector: 'mt-user-search-field',\r\n standalone: true,\r\n imports: [\r\n FormsModule,\r\n AutoCompleteModule,\r\n Tooltip,\r\n InputGroupModule,\r\n InputGroupAddonModule,\r\n FieldValidation,\r\n Icon,\r\n Avatar,\r\n ],\r\n templateUrl: './user-search-field.html',\r\n styleUrls: ['./user-search-field.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n class: 'grid gap-1',\r\n },\r\n})\r\nexport class UserSearchField implements ControlValueAccessor, OnInit {\r\n readonly hint = input<string>();\r\n readonly label = input<string>();\r\n readonly placeholder = input<string>();\r\n readonly class = input<string>('');\r\n readonly readonly = input<boolean>(false);\r\n readonly required = input<boolean>(false);\r\n readonly apiUrl = input.required<string>();\r\n readonly dataKey = input<string>('data');\r\n readonly paramName = input<string>('query');\r\n readonly context = input<HttpContext | undefined>(undefined);\r\n\r\n @HostBinding('class') styleClass: string;\r\n\r\n requiredValidator = Validators.required;\r\n value = signal<User | null>(null);\r\n disabled = signal<boolean>(false);\r\n loading = signal<boolean>(false);\r\n\r\n readonly size = input<'small' | 'large' | undefined>();\r\n\r\n filteredUsers = signal<User[]>([]);\r\n private searchTerms = new Subject<string>();\r\n\r\n readonly autocomplete = viewChild<AutoComplete>('autocomplete');\r\n\r\n onTouched: () => void = () => {};\r\n onModelChange: (value: any) => void = () => {};\r\n\r\n public ngControl: NgControl | null = null;\r\n private http = inject(HttpClient);\r\n\r\n isInvalid = isInvalid;\r\n\r\n constructor() {\r\n this.ngControl = inject(NgControl, { self: true, optional: true });\r\n if (this.ngControl) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n effect(() => {\r\n if (this.ngControl?.control && this.required()) {\r\n this.ngControl.control.addValidators(Validators.required);\r\n this.ngControl.control.updateValueAndValidity();\r\n }\r\n });\r\n this.getUsers();\r\n }\r\n\r\n ngOnInit() {\r\n this.styleClass = this.class();\r\n }\r\n\r\n search(event: { query: string }) {\r\n this.loading.set(true);\r\n this.searchTerms.next(event.query);\r\n }\r\n\r\n onFocus() {\r\n if (this.filteredUsers().length > 0 && this.autocomplete()) {\r\n this.autocomplete()?.show();\r\n }\r\n }\r\n\r\n onSelect(event: { originalEvent: Event; value: User }) {\r\n const selectedUser = event.value;\r\n this.value.set(selectedUser);\r\n this.onModelChange(selectedUser);\r\n this.onTouched();\r\n this.loading.set(false);\r\n this.filteredUsers.set([]);\r\n if (this.autocomplete()) {\r\n this.autocomplete()?.hide();\r\n }\r\n }\r\n\r\n onClear() {\r\n this.value.set(null);\r\n this.onModelChange(null);\r\n this.filteredUsers.set([]);\r\n this.loading.set(false);\r\n }\r\n\r\n writeValue(value: User | null): void {\r\n this.value.set(value);\r\n }\r\n\r\n registerOnChange(fn: (value: User | null) => void) {\r\n this.onModelChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any) {\r\n this.onTouched = fn;\r\n }\r\n\r\n setDisabledState(disabled: boolean) {\r\n this.disabled.set(disabled);\r\n }\r\n\r\n getUsers() {\r\n this.searchTerms\r\n .pipe(\r\n takeUntilDestroyed(),\r\n distinctUntilChanged(),\r\n tap(() => this.loading.set(true)),\r\n switchMap((term: string) => {\r\n if (!term) {\r\n this.filteredUsers.set([]);\r\n this.loading.set(false);\r\n return of([]);\r\n }\r\n const params = new HttpParams().set(this.paramName(), term);\r\n return this.http\r\n .get<any>(this.apiUrl(), {\r\n params,\r\n context: this.context(),\r\n })\r\n .pipe(\r\n finalize(() => this.loading.set(false)),\r\n catchError((err) => {\r\n console.error('API search failed:', err);\r\n this.filteredUsers.set([]);\r\n return of({ [this.dataKey()]: [] });\r\n }),\r\n );\r\n }),\r\n )\r\n .subscribe({\r\n next: (users) => {\r\n this.filteredUsers.set((users[this.dataKey()] ?? []) as User[]);\r\n },\r\n });\r\n }\r\n}\r\n","@if (label()) {\r\n <label\r\n [class.required]=\"ngControl?.control?.hasValidator(requiredValidator)\"\r\n [for]=\"ngControl?.name || label()\"\r\n >\r\n {{ label() }}\r\n </label>\r\n}\r\n<div class=\"relative\">\r\n <p-inputgroup>\r\n <p-autoComplete\r\n #autocomplete=\"\"\r\n [suggestions]=\"filteredUsers()\"\r\n (completeMethod)=\"search($event)\"\r\n (onSelect)=\"onSelect($event)\"\r\n (onClear)=\"onClear()\"\r\n (onFocus)=\"onFocus()\"\r\n (onBlur)=\"onTouched()\"\r\n [ngModel]=\"value()?.displayName\"\r\n [disabled]=\"disabled() || readonly()\"\r\n [id]=\"ngControl?.name || label()\"\r\n [invalid]=\"isInvalid(ngControl?.control)\"\r\n [placeholder]=\"placeholder()\"\r\n class=\"w-full\"\r\n appendTo=\"body\"\r\n styleClass=\"w-full\"\r\n [dropdown]=\"false\"\r\n [size]=\"size()\"\r\n >\r\n <ng-template let-user pTemplate=\"item\">\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar size=\"small\" icon=\"user.user-01\" />\r\n <div class=\"flex align-items-center gap-3\">\r\n <span class=\"font-medium\">{{ user.displayName }}</span>\r\n <medium class=\"text-gray-500\">{{ \"@\" + user.userName }}</medium>\r\n </div>\r\n </div>\r\n </ng-template>\r\n\r\n <!-- <ng-template let-user #pTemplate=\"selecteditem\">\r\n <div class=\"flex items-center gap-2\">\r\n <mt-avatar size=\"small\" icon=\"user.user-01\" />\r\n <div class=\"flex align-items-center gap-3\">\r\n <span class=\"font-medium\">{{ user.displayName }}</span>\r\n <medium class=\"text-gray-500\">{{ \"@\" + user.userName }}</medium>\r\n </div>\r\n </div>\r\n </ng-template> -->\r\n </p-autoComplete>\r\n @if (hint()) {\r\n <p-inputgroup-addon [mtTooltip]=\"hint()\" tooltipPosition=\"top\">\r\n <mt-icon icon=\"general.help-circle\" />\r\n </p-inputgroup-addon>\r\n } @else {\r\n <p-inputgroup-addon tooltipPosition=\"top\">\r\n <mt-icon icon=\"user.user-03\" />\r\n </p-inputgroup-addon>\r\n }\r\n </p-inputgroup>\r\n\r\n @if (loading()) {\r\n <mt-icon\r\n icon=\"general.loading-01\"\r\n class=\"animate-spin absolute right-3 bg-white top-1/2 -translate-y-1/2\"\r\n />\r\n }\r\n</div>\r\n<mt-field-validation [control]=\"ngControl?.control\"></mt-field-validation>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}