@sneat/contactus-shared 0.2.0

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 (320) hide show
  1. package/esm2022/index.js +4 -0
  2. package/esm2022/index.js.map +1 -0
  3. package/esm2022/lib/components/address-form/address-form.component.js +182 -0
  4. package/esm2022/lib/components/address-form/address-form.component.js.map +1 -0
  5. package/esm2022/lib/components/address-form/index.js +2 -0
  6. package/esm2022/lib/components/address-form/index.js.map +1 -0
  7. package/esm2022/lib/components/basic-contact-form/basic-contact-form.component.js +71 -0
  8. package/esm2022/lib/components/basic-contact-form/basic-contact-form.component.js.map +1 -0
  9. package/esm2022/lib/components/basic-contact-form/index.js +2 -0
  10. package/esm2022/lib/components/basic-contact-form/index.js.map +1 -0
  11. package/esm2022/lib/components/contact-comm-channels/comm-channel-form.component.js +90 -0
  12. package/esm2022/lib/components/contact-comm-channels/comm-channel-form.component.js.map +1 -0
  13. package/esm2022/lib/components/contact-comm-channels/comm-channel-item.component.js +128 -0
  14. package/esm2022/lib/components/contact-comm-channels/comm-channel-item.component.js.map +1 -0
  15. package/esm2022/lib/components/contact-comm-channels/comm-channels-list.component.js +30 -0
  16. package/esm2022/lib/components/contact-comm-channels/comm-channels-list.component.js.map +1 -0
  17. package/esm2022/lib/components/contact-comm-channels/contact-comm-channels.component.js +16 -0
  18. package/esm2022/lib/components/contact-comm-channels/contact-comm-channels.component.js.map +1 -0
  19. package/esm2022/lib/components/contact-comm-channels/contact-emails.component.js +30 -0
  20. package/esm2022/lib/components/contact-comm-channels/contact-emails.component.js.map +1 -0
  21. package/esm2022/lib/components/contact-comm-channels/contact-phones.component.js +30 -0
  22. package/esm2022/lib/components/contact-comm-channels/contact-phones.component.js.map +1 -0
  23. package/esm2022/lib/components/contact-comm-channels/index.js +2 -0
  24. package/esm2022/lib/components/contact-comm-channels/index.js.map +1 -0
  25. package/esm2022/lib/components/contact-details/contact-details.component.js +235 -0
  26. package/esm2022/lib/components/contact-details/contact-details.component.js.map +1 -0
  27. package/esm2022/lib/components/contact-details/index.js +2 -0
  28. package/esm2022/lib/components/contact-details/index.js.map +1 -0
  29. package/esm2022/lib/components/contact-details/related-contacts.component.js +116 -0
  30. package/esm2022/lib/components/contact-details/related-contacts.component.js.map +1 -0
  31. package/esm2022/lib/components/contact-dob/contact-dob.component.js +57 -0
  32. package/esm2022/lib/components/contact-dob/contact-dob.component.js.map +1 -0
  33. package/esm2022/lib/components/contact-dob/index.js +2 -0
  34. package/esm2022/lib/components/contact-dob/index.js.map +1 -0
  35. package/esm2022/lib/components/contact-events.js +2 -0
  36. package/esm2022/lib/components/contact-events.js.map +1 -0
  37. package/esm2022/lib/components/contact-forms/contact-form-base.component.js +30 -0
  38. package/esm2022/lib/components/contact-forms/contact-form-base.component.js.map +1 -0
  39. package/esm2022/lib/components/contact-forms/emails-form/emails-form.component.js +76 -0
  40. package/esm2022/lib/components/contact-forms/emails-form/emails-form.component.js.map +1 -0
  41. package/esm2022/lib/components/contact-forms/emails-form/index.js +2 -0
  42. package/esm2022/lib/components/contact-forms/emails-form/index.js.map +1 -0
  43. package/esm2022/lib/components/contact-forms/index.js +11 -0
  44. package/esm2022/lib/components/contact-forms/index.js.map +1 -0
  45. package/esm2022/lib/components/contact-forms/location-form/index.js +2 -0
  46. package/esm2022/lib/components/contact-forms/location-form/index.js.map +1 -0
  47. package/esm2022/lib/components/contact-forms/location-form/location-form.component.js +194 -0
  48. package/esm2022/lib/components/contact-forms/location-form/location-form.component.js.map +1 -0
  49. package/esm2022/lib/components/contact-forms/new-contact/index.js +5 -0
  50. package/esm2022/lib/components/contact-forms/new-contact/index.js.map +1 -0
  51. package/esm2022/lib/components/contact-forms/new-contact/new-company-form.component.js +115 -0
  52. package/esm2022/lib/components/contact-forms/new-contact/new-company-form.component.js.map +1 -0
  53. package/esm2022/lib/components/contact-forms/new-contact/new-contact-form-base.component.js +34 -0
  54. package/esm2022/lib/components/contact-forms/new-contact/new-contact-form-base.component.js.map +1 -0
  55. package/esm2022/lib/components/contact-forms/new-contact/new-contact-form.component.js +82 -0
  56. package/esm2022/lib/components/contact-forms/new-contact/new-contact-form.component.js.map +1 -0
  57. package/esm2022/lib/components/contact-forms/new-contact/new-person-form.component.js +282 -0
  58. package/esm2022/lib/components/contact-forms/new-contact/new-person-form.component.js.map +1 -0
  59. package/esm2022/lib/components/contact-forms/new-contact/new-pet-form.component.js +25 -0
  60. package/esm2022/lib/components/contact-forms/new-contact/new-pet-form.component.js.map +1 -0
  61. package/esm2022/lib/components/contact-forms/person-forms/age-group/age-group-form.component.js +64 -0
  62. package/esm2022/lib/components/contact-forms/person-forms/age-group/age-group-form.component.js.map +1 -0
  63. package/esm2022/lib/components/contact-forms/person-forms/age-group/index.js +2 -0
  64. package/esm2022/lib/components/contact-forms/person-forms/age-group/index.js.map +1 -0
  65. package/esm2022/lib/components/contact-forms/person-forms/gender-form/gender-form.component.js +118 -0
  66. package/esm2022/lib/components/contact-forms/person-forms/gender-form/gender-form.component.js.map +1 -0
  67. package/esm2022/lib/components/contact-forms/person-forms/gender-form/index.js +2 -0
  68. package/esm2022/lib/components/contact-forms/person-forms/gender-form/index.js.map +1 -0
  69. package/esm2022/lib/components/contact-forms/person-forms/names-form/index.js +2 -0
  70. package/esm2022/lib/components/contact-forms/person-forms/names-form/index.js.map +1 -0
  71. package/esm2022/lib/components/contact-forms/person-forms/names-form/names-form.component.js +296 -0
  72. package/esm2022/lib/components/contact-forms/person-forms/names-form/names-form.component.js.map +1 -0
  73. package/esm2022/lib/components/contact-forms/pesson-wizard/index.js +2 -0
  74. package/esm2022/lib/components/contact-forms/pesson-wizard/index.js.map +1 -0
  75. package/esm2022/lib/components/contact-forms/pesson-wizard/person-wizard.component.js +369 -0
  76. package/esm2022/lib/components/contact-forms/pesson-wizard/person-wizard.component.js.map +1 -0
  77. package/esm2022/lib/components/contact-forms/pet-kind-and-breed-form/index.js +2 -0
  78. package/esm2022/lib/components/contact-forms/pet-kind-and-breed-form/index.js.map +1 -0
  79. package/esm2022/lib/components/contact-forms/pet-kind-and-breed-form/pet-kind-and-breed-form.component.js +66 -0
  80. package/esm2022/lib/components/contact-forms/pet-kind-and-breed-form/pet-kind-and-breed-form.component.js.map +1 -0
  81. package/esm2022/lib/components/contact-forms/phones-form/index.js +2 -0
  82. package/esm2022/lib/components/contact-forms/phones-form/index.js.map +1 -0
  83. package/esm2022/lib/components/contact-forms/phones-form/phones-form.component.js +79 -0
  84. package/esm2022/lib/components/contact-forms/phones-form/phones-form.component.js.map +1 -0
  85. package/esm2022/lib/components/contact-forms/relationship-form/contact-relationship-form.component.js +125 -0
  86. package/esm2022/lib/components/contact-forms/relationship-form/contact-relationship-form.component.js.map +1 -0
  87. package/esm2022/lib/components/contact-forms/relationship-form/index.js +2 -0
  88. package/esm2022/lib/components/contact-forms/relationship-form/index.js.map +1 -0
  89. package/esm2022/lib/components/contact-forms/relationship-form/relationship-form.component.js +136 -0
  90. package/esm2022/lib/components/contact-forms/relationship-form/relationship-form.component.js.map +1 -0
  91. package/esm2022/lib/components/contact-forms/role-form/contact-role-form.component.js +98 -0
  92. package/esm2022/lib/components/contact-forms/role-form/contact-role-form.component.js.map +1 -0
  93. package/esm2022/lib/components/contact-forms/role-form/index.js +2 -0
  94. package/esm2022/lib/components/contact-forms/role-form/index.js.map +1 -0
  95. package/esm2022/lib/components/contact-forms/roles-form/index.js +2 -0
  96. package/esm2022/lib/components/contact-forms/roles-form/index.js.map +1 -0
  97. package/esm2022/lib/components/contact-forms/roles-form/roles-form.component.js +59 -0
  98. package/esm2022/lib/components/contact-forms/roles-form/roles-form.component.js.map +1 -0
  99. package/esm2022/lib/components/contact-forms/space-related-form.component.js +32 -0
  100. package/esm2022/lib/components/contact-forms/space-related-form.component.js.map +1 -0
  101. package/esm2022/lib/components/contact-input/contact-input.component.js +151 -0
  102. package/esm2022/lib/components/contact-input/contact-input.component.js.map +1 -0
  103. package/esm2022/lib/components/contact-input/index.js +2 -0
  104. package/esm2022/lib/components/contact-input/index.js.map +1 -0
  105. package/esm2022/lib/components/contact-locations/contact-locations.component.js +52 -0
  106. package/esm2022/lib/components/contact-locations/contact-locations.component.js.map +1 -0
  107. package/esm2022/lib/components/contact-locations/index.js +2 -0
  108. package/esm2022/lib/components/contact-locations/index.js.map +1 -0
  109. package/esm2022/lib/components/contact-modules-menu/contact-modules-menu.component.js +29 -0
  110. package/esm2022/lib/components/contact-modules-menu/contact-modules-menu.component.js.map +1 -0
  111. package/esm2022/lib/components/contact-modules-menu/index.js +2 -0
  112. package/esm2022/lib/components/contact-modules-menu/index.js.map +1 -0
  113. package/esm2022/lib/components/contact-role-badges/contact-role-badges.component.js +44 -0
  114. package/esm2022/lib/components/contact-role-badges/contact-role-badges.component.js.map +1 -0
  115. package/esm2022/lib/components/contact-roles-input/contact-roles-input.component.js +37 -0
  116. package/esm2022/lib/components/contact-roles-input/contact-roles-input.component.js.map +1 -0
  117. package/esm2022/lib/components/contact-roles-input/index.js +2 -0
  118. package/esm2022/lib/components/contact-roles-input/index.js.map +1 -0
  119. package/esm2022/lib/components/contacts-by-type/contacts-by-type.component.js +200 -0
  120. package/esm2022/lib/components/contacts-by-type/contacts-by-type.component.js.map +1 -0
  121. package/esm2022/lib/components/contacts-by-type/index.js +2 -0
  122. package/esm2022/lib/components/contacts-by-type/index.js.map +1 -0
  123. package/esm2022/lib/components/contacts-checklist/contacts-checklist-item.component.js +32 -0
  124. package/esm2022/lib/components/contacts-checklist/contacts-checklist-item.component.js.map +1 -0
  125. package/esm2022/lib/components/contacts-checklist/contacts-checklist.component.js +140 -0
  126. package/esm2022/lib/components/contacts-checklist/contacts-checklist.component.js.map +1 -0
  127. package/esm2022/lib/components/contacts-checklist/index.js +2 -0
  128. package/esm2022/lib/components/contacts-checklist/index.js.map +1 -0
  129. package/esm2022/lib/components/contacts-component/contacts.component.js +200 -0
  130. package/esm2022/lib/components/contacts-component/contacts.component.js.map +1 -0
  131. package/esm2022/lib/components/contacts-component.commands.js +2 -0
  132. package/esm2022/lib/components/contacts-component.commands.js.map +1 -0
  133. package/esm2022/lib/components/contacts-list/contacts-list.component.js +32 -0
  134. package/esm2022/lib/components/contacts-list/contacts-list.component.js.map +1 -0
  135. package/esm2022/lib/components/contacts-list/index.js +3 -0
  136. package/esm2022/lib/components/contacts-list/index.js.map +1 -0
  137. package/esm2022/lib/components/contacts-list-item/contacts-list-item.component.js +138 -0
  138. package/esm2022/lib/components/contacts-list-item/contacts-list-item.component.js.map +1 -0
  139. package/esm2022/lib/components/contacts-list-item/related-as.component.js +34 -0
  140. package/esm2022/lib/components/contacts-list-item/related-as.component.js.map +1 -0
  141. package/esm2022/lib/components/contacts-selector/contacts-selector-input.component.js +91 -0
  142. package/esm2022/lib/components/contacts-selector/contacts-selector-input.component.js.map +1 -0
  143. package/esm2022/lib/components/contacts-selector/contacts-selector.component.js +415 -0
  144. package/esm2022/lib/components/contacts-selector/contacts-selector.component.js.map +1 -0
  145. package/esm2022/lib/components/contacts-selector/contacts-selector.interfaces.js +2 -0
  146. package/esm2022/lib/components/contacts-selector/contacts-selector.interfaces.js.map +1 -0
  147. package/esm2022/lib/components/contacts-selector/contacts-selector.module.js +28 -0
  148. package/esm2022/lib/components/contacts-selector/contacts-selector.module.js.map +1 -0
  149. package/esm2022/lib/components/contacts-selector/contacts-selector.service.js +18 -0
  150. package/esm2022/lib/components/contacts-selector/contacts-selector.service.js.map +1 -0
  151. package/esm2022/lib/components/contacts-selector/lib-exports.js +6 -0
  152. package/esm2022/lib/components/contacts-selector/lib-exports.js.map +1 -0
  153. package/esm2022/lib/components/contactus-module.base.component.js +4 -0
  154. package/esm2022/lib/components/contactus-module.base.component.js.map +1 -0
  155. package/esm2022/lib/components/inlist-options/inlist-age-group.component.js +53 -0
  156. package/esm2022/lib/components/inlist-options/inlist-age-group.component.js.map +1 -0
  157. package/esm2022/lib/components/inlist-options/inlist-options.component.js +27 -0
  158. package/esm2022/lib/components/inlist-options/inlist-options.component.js.map +1 -0
  159. package/esm2022/lib/components/invite-links/invite-links.component.js +87 -0
  160. package/esm2022/lib/components/invite-links/invite-links.component.js.map +1 -0
  161. package/esm2022/lib/components/lib-exports.js +29 -0
  162. package/esm2022/lib/components/lib-exports.js.map +1 -0
  163. package/esm2022/lib/components/members-as-badges/contacts-as-badges.component.js +39 -0
  164. package/esm2022/lib/components/members-as-badges/contacts-as-badges.component.js.map +1 -0
  165. package/esm2022/lib/components/members-as-badges/index.js +2 -0
  166. package/esm2022/lib/components/members-as-badges/index.js.map +1 -0
  167. package/esm2022/lib/components/members-by-role/family-members.component.js +180 -0
  168. package/esm2022/lib/components/members-by-role/family-members.component.js.map +1 -0
  169. package/esm2022/lib/components/members-by-role/index.js +4 -0
  170. package/esm2022/lib/components/members-by-role/index.js.map +1 -0
  171. package/esm2022/lib/components/members-by-role/member-group.js +2 -0
  172. package/esm2022/lib/components/members-by-role/member-group.js.map +1 -0
  173. package/esm2022/lib/components/members-by-role/members-by-role.component.js +34 -0
  174. package/esm2022/lib/components/members-by-role/members-by-role.component.js.map +1 -0
  175. package/esm2022/lib/components/members-card-header/members-card-header.component.js +33 -0
  176. package/esm2022/lib/components/members-card-header/members-card-header.component.js.map +1 -0
  177. package/esm2022/lib/components/members-list/index.js +2 -0
  178. package/esm2022/lib/components/members-list/index.js.map +1 -0
  179. package/esm2022/lib/components/members-list/members-list.component.js +164 -0
  180. package/esm2022/lib/components/members-list/members-list.component.js.map +1 -0
  181. package/esm2022/lib/components/members-short-list-card/members-short-list-card.component.js +60 -0
  182. package/esm2022/lib/components/members-short-list-card/members-short-list-card.component.js.map +1 -0
  183. package/esm2022/lib/components/shared-with/index.js +2 -0
  184. package/esm2022/lib/components/shared-with/index.js.map +1 -0
  185. package/esm2022/lib/components/shared-with/shared-with.component.js +25 -0
  186. package/esm2022/lib/components/shared-with/shared-with.component.js.map +1 -0
  187. package/esm2022/lib/components/with-new-contact-input.js +18 -0
  188. package/esm2022/lib/components/with-new-contact-input.js.map +1 -0
  189. package/esm2022/lib/constants.js +2 -0
  190. package/esm2022/lib/constants.js.map +1 -0
  191. package/esm2022/lib/index.js +3 -0
  192. package/esm2022/lib/index.js.map +1 -0
  193. package/esm2022/lib/modals/contact-names-modal/contact-names-modal.component.js +88 -0
  194. package/esm2022/lib/modals/contact-names-modal/contact-names-modal.component.js.map +1 -0
  195. package/esm2022/lib/modals/invite-modal/index.js +2 -0
  196. package/esm2022/lib/modals/invite-modal/index.js.map +1 -0
  197. package/esm2022/lib/modals/invite-modal/invite-modal.component.js +255 -0
  198. package/esm2022/lib/modals/invite-modal/invite-modal.component.js.map +1 -0
  199. package/esm2022/lib/pipes/contact-title.pipe.js +25 -0
  200. package/esm2022/lib/pipes/contact-title.pipe.js.map +1 -0
  201. package/esm2022/lib/pipes/index.js +4 -0
  202. package/esm2022/lib/pipes/index.js.map +1 -0
  203. package/esm2022/lib/pipes/person-title.pipe.js +21 -0
  204. package/esm2022/lib/pipes/person-title.pipe.js.map +1 -0
  205. package/esm2022/lib/pipes/selected-contacts.pipe.js +22 -0
  206. package/esm2022/lib/pipes/selected-contacts.pipe.js.map +1 -0
  207. package/esm2022/lib/providers/user-space-brief.provider.js +30 -0
  208. package/esm2022/lib/providers/user-space-brief.provider.js.map +1 -0
  209. package/esm2022/lib/ui-types.js +2 -0
  210. package/esm2022/lib/ui-types.js.map +1 -0
  211. package/esm2022/sneat-contactus-shared.js +5 -0
  212. package/esm2022/sneat-contactus-shared.js.map +1 -0
  213. package/index.d.ts +3 -0
  214. package/lib/components/address-form/address-form.component.d.ts +51 -0
  215. package/lib/components/address-form/index.d.ts +1 -0
  216. package/lib/components/basic-contact-form/basic-contact-form.component.d.ts +20 -0
  217. package/lib/components/basic-contact-form/index.d.ts +1 -0
  218. package/lib/components/contact-comm-channels/comm-channel-form.component.d.ts +20 -0
  219. package/lib/components/contact-comm-channels/comm-channel-item.component.d.ts +24 -0
  220. package/lib/components/contact-comm-channels/comm-channels-list.component.d.ts +15 -0
  221. package/lib/components/contact-comm-channels/contact-comm-channels.component.d.ts +7 -0
  222. package/lib/components/contact-comm-channels/contact-emails.component.d.ts +9 -0
  223. package/lib/components/contact-comm-channels/contact-phones.component.d.ts +9 -0
  224. package/lib/components/contact-comm-channels/index.d.ts +1 -0
  225. package/lib/components/contact-details/contact-details.component.d.ts +32 -0
  226. package/lib/components/contact-details/index.d.ts +1 -0
  227. package/lib/components/contact-details/related-contacts.component.d.ts +24 -0
  228. package/lib/components/contact-dob/contact-dob.component.d.ts +13 -0
  229. package/lib/components/contact-dob/index.d.ts +1 -0
  230. package/lib/components/contact-events.d.ts +6 -0
  231. package/lib/components/contact-forms/contact-form-base.component.d.ts +15 -0
  232. package/lib/components/contact-forms/emails-form/emails-form.component.d.ts +27 -0
  233. package/lib/components/contact-forms/emails-form/index.d.ts +1 -0
  234. package/lib/components/contact-forms/index.d.ts +10 -0
  235. package/lib/components/contact-forms/location-form/index.d.ts +1 -0
  236. package/lib/components/contact-forms/location-form/location-form.component.d.ts +39 -0
  237. package/lib/components/contact-forms/new-contact/index.d.ts +4 -0
  238. package/lib/components/contact-forms/new-contact/new-company-form.component.d.ts +26 -0
  239. package/lib/components/contact-forms/new-contact/new-contact-form-base.component.d.ts +15 -0
  240. package/lib/components/contact-forms/new-contact/new-contact-form.component.d.ts +20 -0
  241. package/lib/components/contact-forms/new-contact/new-person-form.component.d.ts +51 -0
  242. package/lib/components/contact-forms/new-contact/new-pet-form.component.d.ts +8 -0
  243. package/lib/components/contact-forms/person-forms/age-group/age-group-form.component.d.ts +17 -0
  244. package/lib/components/contact-forms/person-forms/age-group/index.d.ts +1 -0
  245. package/lib/components/contact-forms/person-forms/gender-form/gender-form.component.d.ts +22 -0
  246. package/lib/components/contact-forms/person-forms/gender-form/index.d.ts +1 -0
  247. package/lib/components/contact-forms/person-forms/names-form/index.d.ts +1 -0
  248. package/lib/components/contact-forms/person-forms/names-form/names-form.component.d.ts +63 -0
  249. package/lib/components/contact-forms/pesson-wizard/index.d.ts +1 -0
  250. package/lib/components/contact-forms/pesson-wizard/person-wizard.component.d.ts +63 -0
  251. package/lib/components/contact-forms/pet-kind-and-breed-form/index.d.ts +1 -0
  252. package/lib/components/contact-forms/pet-kind-and-breed-form/pet-kind-and-breed-form.component.d.ts +14 -0
  253. package/lib/components/contact-forms/phones-form/index.d.ts +1 -0
  254. package/lib/components/contact-forms/phones-form/phones-form.component.d.ts +21 -0
  255. package/lib/components/contact-forms/relationship-form/contact-relationship-form.component.d.ts +24 -0
  256. package/lib/components/contact-forms/relationship-form/index.d.ts +1 -0
  257. package/lib/components/contact-forms/relationship-form/relationship-form.component.d.ts +34 -0
  258. package/lib/components/contact-forms/role-form/contact-role-form.component.d.ts +33 -0
  259. package/lib/components/contact-forms/role-form/index.d.ts +1 -0
  260. package/lib/components/contact-forms/roles-form/index.d.ts +1 -0
  261. package/lib/components/contact-forms/roles-form/roles-form.component.d.ts +21 -0
  262. package/lib/components/contact-forms/space-related-form.component.d.ts +11 -0
  263. package/lib/components/contact-input/contact-input.component.d.ts +36 -0
  264. package/lib/components/contact-input/index.d.ts +1 -0
  265. package/lib/components/contact-locations/contact-locations.component.d.ts +14 -0
  266. package/lib/components/contact-locations/index.d.ts +1 -0
  267. package/lib/components/contact-modules-menu/contact-modules-menu.component.d.ts +12 -0
  268. package/lib/components/contact-modules-menu/index.d.ts +1 -0
  269. package/lib/components/contact-role-badges/contact-role-badges.component.d.ts +12 -0
  270. package/lib/components/contact-roles-input/contact-roles-input.component.d.ts +18 -0
  271. package/lib/components/contact-roles-input/index.d.ts +1 -0
  272. package/lib/components/contacts-by-type/contacts-by-type.component.d.ts +38 -0
  273. package/lib/components/contacts-by-type/index.d.ts +1 -0
  274. package/lib/components/contacts-checklist/contacts-checklist-item.component.d.ts +21 -0
  275. package/lib/components/contacts-checklist/contacts-checklist.component.d.ts +40 -0
  276. package/lib/components/contacts-checklist/index.d.ts +1 -0
  277. package/lib/components/contacts-component/contacts.component.d.ts +45 -0
  278. package/lib/components/contacts-component.commands.d.ts +5 -0
  279. package/lib/components/contacts-list/contacts-list.component.d.ts +11 -0
  280. package/lib/components/contacts-list/index.d.ts +2 -0
  281. package/lib/components/contacts-list-item/contacts-list-item.component.d.ts +29 -0
  282. package/lib/components/contacts-list-item/related-as.component.d.ts +16 -0
  283. package/lib/components/contacts-selector/contacts-selector-input.component.d.ts +24 -0
  284. package/lib/components/contacts-selector/contacts-selector.component.d.ts +80 -0
  285. package/lib/components/contacts-selector/contacts-selector.interfaces.d.ts +22 -0
  286. package/lib/components/contacts-selector/contacts-selector.module.d.ts +6 -0
  287. package/lib/components/contacts-selector/contacts-selector.service.d.ts +10 -0
  288. package/lib/components/contacts-selector/lib-exports.d.ts +5 -0
  289. package/lib/components/contactus-module.base.component.d.ts +4 -0
  290. package/lib/components/inlist-options/inlist-age-group.component.d.ts +12 -0
  291. package/lib/components/inlist-options/inlist-options.component.d.ts +18 -0
  292. package/lib/components/invite-links/invite-links.component.d.ts +28 -0
  293. package/lib/components/lib-exports.d.ts +27 -0
  294. package/lib/components/members-as-badges/contacts-as-badges.component.d.ts +18 -0
  295. package/lib/components/members-as-badges/index.d.ts +1 -0
  296. package/lib/components/members-by-role/family-members.component.d.ts +21 -0
  297. package/lib/components/members-by-role/index.d.ts +3 -0
  298. package/lib/components/members-by-role/member-group.d.ts +9 -0
  299. package/lib/components/members-by-role/members-by-role.component.d.ts +12 -0
  300. package/lib/components/members-card-header/members-card-header.component.d.ts +13 -0
  301. package/lib/components/members-list/index.d.ts +1 -0
  302. package/lib/components/members-list/members-list.component.d.ts +32 -0
  303. package/lib/components/members-short-list-card/members-short-list-card.component.d.ts +12 -0
  304. package/lib/components/shared-with/index.d.ts +1 -0
  305. package/lib/components/shared-with/shared-with.component.d.ts +6 -0
  306. package/lib/components/with-new-contact-input.d.ts +10 -0
  307. package/lib/constants.d.ts +13 -0
  308. package/lib/index.d.ts +2 -0
  309. package/lib/modals/contact-names-modal/contact-names-modal.component.d.ts +15 -0
  310. package/lib/modals/invite-modal/index.d.ts +1 -0
  311. package/lib/modals/invite-modal/invite-modal.component.d.ts +49 -0
  312. package/lib/pipes/contact-title.pipe.d.ts +10 -0
  313. package/lib/pipes/index.d.ts +3 -0
  314. package/lib/pipes/person-title.pipe.d.ts +9 -0
  315. package/lib/pipes/selected-contacts.pipe.d.ts +8 -0
  316. package/lib/providers/user-space-brief.provider.d.ts +12 -0
  317. package/lib/ui-types.d.ts +9 -0
  318. package/package.json +27 -0
  319. package/sneat-contactus-shared.d.ts +5 -0
  320. package/tsconfig.lib.prod.tsbuildinfo +1 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts-selector.component.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/components/contacts-selector/contacts-selector.component.ts","../../../../../../../../libs/contactus/shared/src/lib/components/contacts-selector/contacts-selector.component.html"],"names":[],"mappings":"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","sourcesContent":["import { TitleCasePipe } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n EffectRef,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n signal,\n SimpleChanges,\n inject,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n IonButton,\n IonButtons,\n IonCard,\n IonCardHeader,\n IonCardSubtitle,\n IonContent,\n IonFooter,\n IonHeader,\n IonIcon,\n IonItemDivider,\n IonLabel,\n IonSegment,\n IonSegmentButton,\n IonSpinner,\n IonText,\n IonToolbar,\n ModalController,\n} from '@ionic/angular/standalone';\nimport { CONTACT_ROLES_BY_TYPE, ContactRolesByType } from '@sneat/app';\nimport { getFullName } from '@sneat/auth-models';\nimport { countryFlagEmoji } from '@sneat/components';\nimport {\n ClassName,\n ISelectItem,\n OverlayController,\n SelectFromListComponent,\n SelectorModalComponent,\n} from '@sneat/ui';\nimport {\n ContactRole,\n ContactType,\n IContactContext,\n IContactWithBrief,\n IContactWithCheck,\n IContactWithBriefAndSpace,\n ContactIdAndDboWithSpaceRef,\n IContactDbo,\n NewContactBaseDboAndSpaceRef,\n} from '@sneat/contactus-core';\nimport { ContactusSpaceService } from '@sneat/contactus-services';\nimport {\n computeSpaceRefFromSpaceContext,\n ISpaceContext,\n} from '@sneat/space-models';\nimport { BehaviorSubject, map, Subject, Subscription, takeUntil } from 'rxjs';\nimport { IContactAddEventArgs } from '../contact-events';\nimport { NewContactFormComponent } from '../contact-forms/new-contact';\nimport { ContactsComponent } from '../contacts-component/contacts.component';\nimport {\n NewCompanyFormComponent,\n NewContactFormCommand,\n} from '../contact-forms/new-contact';\nimport { IContactSelectorOptions } from './contacts-selector.interfaces';\n\n@Component({\n imports: [\n FormsModule,\n SelectFromListComponent,\n NewCompanyFormComponent,\n TitleCasePipe,\n TitleCasePipe,\n ContactsComponent,\n IonButton,\n IonLabel,\n IonSpinner,\n IonIcon,\n IonButtons,\n IonFooter,\n IonToolbar,\n IonContent,\n IonCard,\n IonSegment,\n IonSegmentButton,\n IonCardSubtitle,\n IonCardHeader,\n IonText,\n IonItemDivider,\n IonHeader,\n NewContactFormComponent,\n ],\n providers: [\n {\n provide: ClassName,\n useValue: 'ContactsSelectorComponent',\n },\n {\n provide: OverlayController,\n useClass: ModalController,\n },\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sneat-contacts-selector',\n templateUrl: './contacts-selector.component.html',\n})\nexport class ContactsSelectorComponent\n extends SelectorModalComponent<IContactWithBriefAndSpace>\n implements IContactSelectorOptions, OnInit, OnChanges, OnDestroy\n{\n private readonly contactRolesByType = inject<ContactRolesByType>(\n CONTACT_ROLES_BY_TYPE,\n );\n private readonly contactusSpaceService = inject(ContactusSpaceService);\n\n private readonly parentChanged = new Subject<void>();\n\n protected readonly $parentTab = signal<'existing' | 'new'>('existing');\n\n protected onParentTabChanged = (event: CustomEvent) => {\n this.$parentTab.set(event.detail.value);\n };\n\n protected readonly $contactTab = signal<'existing' | 'new'>('existing');\n\n protected onContactTabChanged = (event: CustomEvent) => {\n this.$contactTab.set(event.detail.value);\n if (this.$contactTab() === 'existing') {\n this.selectGroupAndRole$.next({ event });\n // this.newContactCommand$.next('reset');\n }\n };\n\n private spaceIDChangesCount = 0;\n\n @Input({ required: true }) space?: ISpaceContext;\n\n @Input() okButtonLabel = 'OK';\n\n private effects?: readonly EffectRef[];\n\n // we can't yet use `$space = input.required` for modal component yet\n protected readonly $space = signal<ISpaceContext>({ id: '' });\n protected readonly $spaceRef = computeSpaceRefFromSpaceContext(this.$space);\n protected readonly $spaceID = computed(() => {\n const spaceID = this.$spaceRef().id;\n // `ContactsSelectorComponent.$spaceID(spaceID=${spaceID})`,\n // this.spaceIDChangesCount,\n if (spaceID && !this.spaceIDChangesCount) {\n this.spaceIDChangesCount += 1;\n // this.setupEffects();\n }\n return spaceID;\n });\n\n private setupEffects(): void {\n this.destroyEffects();\n this.effects = [effect(() => this.onSpaceIDChanged())];\n // runInInjectionContext(this.injector, () => {\n // \tthis.effects = [effect(() => this.onSpaceIDChanged())];\n // });\n }\n\n private onSpaceIDChanged(): void {\n const spaceID = this.$spaceID();\n this.spaceID$.next(spaceID);\n this.watchContactBriefs();\n }\n\n // We use it to cancel request to ContactusSpace if space ID changed.\n protected readonly spaceID$ = new Subject<string>();\n\n @Input() parentIcon = 'business-outline';\n @Input() contactIcon = 'business-outline';\n\n @Input() title = 'Contacts selector';\n @Input() contactRoleID?: ContactRole;\n @Input() parentType?: ContactType;\n @Input() parentRole?: ContactRole;\n @Input() contactType?: ContactType;\n @Input() excludeContactIDs?: string[];\n @Input() excludeParentIDs?: string[];\n\n protected readonly $contact = signal<IContactContext>({} as IContactContext);\n protected readonly $contactWithDbo = computed<ContactIdAndDboWithSpaceRef>(\n () => {\n const contact = this.$contact();\n let contactWithDbo: ContactIdAndDboWithSpaceRef | undefined;\n if (contact.dbo) {\n // Applying cast to ContactIdAndDboWithSpaceRef as seems to be a bug in TS\n contactWithDbo = contact as ContactIdAndDboWithSpaceRef;\n } else if (contact.brief) {\n contactWithDbo = { ...contact, dbo: contact.brief };\n } else {\n contactWithDbo = { ...contact, dbo: {} as IContactDbo };\n }\n return contactWithDbo;\n },\n );\n\n @Input() onSelected?: (\n items?: readonly IContactWithBriefAndSpace[],\n ) => Promise<void>;\n\n readonly contactRoles: ISelectItem[] = [\n { id: 'agent', title: 'Agent', iconName: 'body-outline' },\n { id: 'buyer', title: 'Buyer', iconName: 'cash-outline' },\n { id: 'freight_agent', title: 'Freight Agent', iconName: 'train-outline' },\n { id: 'dispatcher', title: 'Dispatcher', iconName: 'business-outline' },\n { id: 'shipper', title: 'Shipper', iconName: 'boat-outline' },\n ];\n\n // @Input() public contacts?: IContactContext[];\n\n private contactBriefsSub?: Subscription;\n\n private allContacts?: IContactWithBriefAndSpace[];\n //\n protected parentContacts?: readonly IContactWithBriefAndSpace[];\n\n protected readonly $contacts = signal<\n readonly IContactWithCheck[] | undefined\n >(undefined);\n\n protected readonly $selectedContacts = computed(() =>\n this.$contacts()?.filter((c) => c.isChecked),\n );\n protected readonly $selectedContactsCount = computed(\n () => this.$selectedContacts()?.length || 0,\n );\n\n protected selectedParent?: IContactWithBriefAndSpace;\n protected selectedContact?: IContactWithCheck;\n\n protected parentContactID?: string;\n\n // private readonly items$ = new Subject<readonly IContactWithSpace[]>();\n // public readonly items = this.items$.asObservable();\n\n protected parentItems?: ISelectItem[];\n\n protected contactItems?: ISelectItem[];\n\n protected readonly newContactCommand$ = new Subject<NewContactFormCommand>();\n protected readonly $isNewContactCreating = signal(false);\n\n get label(): string {\n const r = this.contactRoleID;\n return r ? r[0].toUpperCase() + r.substr(1) : 'Contact';\n }\n\n constructor() {\n super();\n this.setupEffects();\n }\n\n public ngOnInit(): void {\n if (this.space) {\n // When dynamically creating the component in modal ngOnChanges are not called.\n this.$space.set(this.space);\n // we need to call this as effects would not be set without something consumers\n // this.onSpaceIDChanged();\n }\n if (this.contactType) {\n this.$contact.set({\n id: '',\n space: this.$spaceRef(),\n dbo: { type: this.contactType },\n });\n }\n }\n\n override ngOnDestroy(): void {\n super.ngOnDestroy();\n this.destroyEffects();\n }\n\n private destroyEffects(): void {\n this.effects?.forEach((effect) => effect.destroy());\n this.effects = undefined;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes['space']) {\n // we use @Input() due to modal not able to set signal property\n this.$space.set(this.space || { id: '' });\n }\n }\n\n private watchContactBriefs(): void {\n const spaceID = this.$spaceID();\n this.contactBriefsSub?.unsubscribe();\n this.contactBriefsSub = this.contactusSpaceService\n .watchContactBriefs(spaceID)\n .pipe(\n this.takeUntilDestroyed(),\n takeUntil(this.spaceID$),\n map((contacts) => {\n const space = this.$space();\n return contacts.map((c) => ({ ...c, space }));\n }),\n )\n .subscribe((contacts) => {\n this.allContacts = contacts;\n // 'ContactSelectorComponent.watchContactBriefs() => contacts:',\n // contacts,\n this.setContacts();\n });\n }\n\n private setContacts(): void {\n const filterByTypeRoleAndParentID =\n (t?: ContactType, r?: ContactRole, parentID?: string) =>\n (c: IContactWithBrief) => {\n const roleIDs: ContactRole[] = [];\n if (r) {\n roleIDs.push(r);\n if (t && r) {\n const role = this.contactRolesByType[t]?.find(\n (role) => role.id === r,\n );\n if (role?.canBeImpersonatedByRoles?.length) {\n roleIDs.push(...role.canBeImpersonatedByRoles);\n }\n }\n }\n return (\n (!t || c.brief?.type === t) &&\n (!r || roleIDs.some((roleID) => c.brief?.roles?.includes(roleID))) &&\n (!parentID || c.brief?.parentID === parentID)\n );\n };\n const allContactBriefs = this.allContacts;\n this.parentContacts =\n this.parentType || this.parentRole\n ? allContactBriefs?.filter(\n filterByTypeRoleAndParentID(this.parentType, this.parentRole),\n ) || []\n : undefined;\n this.$contacts.set(\n allContactBriefs?.filter(\n filterByTypeRoleAndParentID(\n this.contactType,\n this.contactRoleID,\n this.parentContactID,\n ),\n ),\n );\n\n const removeExcluded = (ids?: string[]) => (c: IContactWithBrief) =>\n !ids?.includes(c.id);\n this.contactItems = this.$contacts()\n ?.filter(removeExcluded(this.excludeContactIDs))\n .map(this.getChildItem);\n this.parentItems = this.parentContacts\n ?.filter(removeExcluded(this.excludeParentIDs))\n .map(this.getChildItem);\n\n if (this.parentType || this.parentRole) {\n if (\n !this.parentContactID &&\n this.parentContacts &&\n !this.parentContacts.length\n ) {\n this.$parentTab.set('new');\n }\n }\n // if (this.$contacts && !this.$contacts.length) {\n // \tthis.contactTab = 'new';\n // }\n // 'setContacts',\n // this.allContacts,\n // this.contactRoleID,\n // this.contactType,\n // this.$contacts,\n // this.parentType,\n // this.parentRole,\n // this.parentContactID,\n // this.parentContacts,\n }\n\n private readonly getParentItem = (c: IContactContext): ISelectItem => ({\n id: c.id,\n emoji: countryFlagEmoji(c.brief?.countryID),\n title: `${c.brief?.title || c.id}`,\n iconName: this.parentIcon,\n });\n\n private readonly getChildItem = (c: IContactWithBrief): ISelectItem => {\n const { brief } = c;\n let title = brief.title;\n if (!title && brief.names) {\n title = getFullName(brief.names);\n }\n return {\n id: c.id,\n title: title || c.id,\n emoji: countryFlagEmoji(brief.countryID),\n iconName: this.contactIcon,\n };\n };\n\n protected onParentContactIDChanged(contactID: string): void {\n // 'ContactsSelectorComponent.onParentContactSelected()',\n // contactID,\n const parentContact = this.parentContacts?.find((c) => c.id === contactID);\n this.onParentContactChanged(parentContact);\n }\n\n protected onParentContactCreated(contact: ContactIdAndDboWithSpaceRef): void {\n const parentContact: IContactWithBriefAndSpace = {\n ...contact,\n brief: contact.dbo,\n };\n this.parentItems?.push(this.getParentItem(parentContact));\n this.onParentContactChanged(parentContact);\n }\n\n protected onNewContactChanged(contact: NewContactBaseDboAndSpaceRef): void {\n this.$contact.set(contact as IContactContext);\n }\n\n protected onContactChanged(contact: IContactContext): void {\n this.$contact.set(contact);\n }\n\n protected onContactCreated(contact: IContactWithBrief): void {\n this.selectedContact = {\n ...contact,\n space: this.$spaceRef(),\n isChecked: true,\n };\n this.emitOnSelected(this.selectedContact);\n }\n\n private onParentContactChanged(contact?: IContactWithBriefAndSpace): void {\n this.$parentTab.set('existing');\n this.selectedParent = contact || undefined;\n this.parentContactID = contact?.id;\n this.setContacts();\n this.parentChanged.next();\n }\n\n protected onContactSelected(contactID: string): void {\n const selectedContact = this.$contacts()?.find((c) => c.id === contactID);\n if (!selectedContact) {\n console.error('contact not found by ID', contactID, this.$contacts);\n return;\n }\n this.selectedContact = { ...selectedContact, space: this.$spaceRef() };\n this.emitOnSelected(this.selectedContact);\n // if (this.selectedParent?.dto) {\n // \tconst contactBrief = this.selectedParent.dto.relatedContacts?.find(c => c.id === contactID);\n // \tif (contactBrief) {\n // \t\tconst subContact: IContactContext = contactContextFromBrief(this.team, contactBrief);\n // \t\tthis.emitOnSelected(subContact);\n // \t}\n // } else {\n //\n // }\n this.close(undefined);\n }\n\n protected readonly $isSubmitting = signal(false);\n\n protected async submitSelected(event: Event): Promise<void> {\n\n event.stopPropagation();\n event.preventDefault();\n const selectedContacts = this.$selectedContacts();\n if (this.onSelected) {\n this.$isSubmitting.set(true);\n try {\n await this.onSelected(selectedContacts);\n } catch (e) {\n this.errorLogger.logError(e, 'failed to call onSelected callback');\n this.$isSubmitting.set(false);\n }\n } else {\n console.error('onSelected is not set');\n }\n }\n\n // protected onContactSelected2(contactID: string): void {\n // \tconsole.log('onContactSelected()', contactID);\n // \tthis.selectedContact = this.contacts?.find(c => c.id === contactID);\n // \tif (!this.contactType && this.selectedContact) {\n // \t\tthis.emitOnSelected(this.selectedContact);\n // \t\tthis.close(undefined);\n // \t\treturn;\n // \t}\n // \tconst contactType = this.contactType;\n // \tif (contactType) {\n // \t\tthis.contactItems = this.selectedContact?.dto?.relatedContacts?.filter(c => c.type === contactType).map(c => ({\n // \t\t\tid: c.id,\n // \t\t\ttitle: ((c.title + ' - ') + (c.address?.lines?.join(', ') || '')).trim(),\n // \t\t}));\n // \t}\n // \tthis.newLocationContact = {\n // \t\tid: '',\n // \t\tteam: this.team,\n // \t\tdto: {\n // \t\t\ttype: 'location',\n // \t\t\tcountryID: this.selectedContact?.dto?.countryID,\n // \t\t\taddress: this.selectedContact?.dto?.address,\n // \t\t},\n // \t};\n // }\n\n protected emitOnSelected(contact?: IContactWithBriefAndSpace): void {\n if (this.onSelected) {\n this.onSelected(contact ? [contact] : undefined).catch(\n this.errorLogger.logErrorHandler('Failed to call onSelected callback'),\n );\n } else {\n console.warn(\n 'instance ContactSelectorComponent has unset `onSelected` input callback.',\n );\n }\n }\n\n protected cancel(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n this.modalController\n .dismiss()\n .catch(\n this.errorLogger.logErrorHandler(\n 'Failed to close contacts selector modal',\n ),\n );\n }\n\n protected readonly selectGroupAndRole$ = new BehaviorSubject<\n IContactAddEventArgs | undefined\n >(undefined);\n\n protected switchToNewContact(args: IContactAddEventArgs): void {\n args.event.stopPropagation();\n args.event.preventDefault();\n this.$contactTab.set('new');\n this.selectGroupAndRole$.next(args);\n }\n\n protected readonly contactClicked = (\n event: Event,\n contact: IContactWithBrief,\n ): void => {\n event.preventDefault();\n event.stopPropagation();\n this.$contacts.update((contacts) =>\n contacts?.map((c) =>\n c.id === contact.id ? { ...c, isChecked: !c.isChecked } : c,\n ),\n );\n // 'ContactsSelectorComponent.contactClicked() => $selectedContacts:',\n // this.$selectedContacts(),\n };\n}\n","<ion-header>\n <ion-toolbar color=\"light\">\n <ion-label slot=\"start\" color=\"medium\" class=\"ion-padding-start\">\n @if (contactRoleID) {\n {{ contactRoleID | titlecase }} selector\n } @else {\n {{ title }}\n }\n </ion-label>\n\n @if (!parentRole) {\n <ion-segment\n [value]=\"$contactTab()\"\n (ionChange)=\"onContactTabChanged($event)\"\n class=\"ion-margin-start ion-margin-end\"\n >\n <ion-segment-button value=\"existing\">Existing</ion-segment-button>\n <ion-segment-button value=\"new\">New</ion-segment-button>\n </ion-segment>\n }\n\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"close($event)\">\n <ion-icon name=\"close-outline\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<!--<ion-item color=\"primary\" class=\"sneat-tiny-end-padding\">-->\n<!--\t<ion-label>-->\n<!--\t\t@if (contactRole) {-->\n<!--\t\t\t{{ contactRole | titlecase }} selector-->\n<!--\t\t} @else {-->\n<!--\t\t\t{{ title }}-->\n<!--\t\t}-->\n<!--\t</ion-label>-->\n<!--\t<ion-buttons slot=\"end\">-->\n<!--\t\t<ion-button (click)=\"close($event)\">-->\n<!--\t\t\t<ion-icon name=\"close-outline\" />-->\n<!--\t\t</ion-button>-->\n<!--\t</ion-buttons>-->\n<!--</ion-item>-->\n\n<ion-content>\n @if (parentRole) {\n @if (!selectedParent) {\n <ion-card-header>\n <ion-card-subtitle>\n Step 1 of 2: Select {{ parentRole }}\n </ion-card-subtitle>\n </ion-card-header>\n }\n <ion-card>\n @if (!selectedParent) {\n <ion-segment\n [value]=\"$parentTab()\"\n (ionChange)=\"onParentTabChanged($event)\"\n class=\"ion-padding-horizontal\"\n >\n <ion-segment-button value=\"existing\">Existing</ion-segment-button>\n <ion-segment-button value=\"new\">New</ion-segment-button>\n </ion-segment>\n }\n\n @switch ($parentTab()) {\n @case (\"existing\") {\n <sneat-select-from-list\n [label]=\"(selectedParent ? parentRole : '') | titlecase\"\n [items]=\"parentItems\"\n [(ngModel)]=\"parentContactID\"\n (ngModelChange)=\"onParentContactIDChanged($event)\"\n [isFilterable]=\"true\"\n labelPlacement=\"start\"\n />\n }\n @case (\"new\") {\n <sneat-new-company-form\n [$space]=\"$space()\"\n [$contact]=\"$contactWithDbo()\"\n [contactRoles]=\"contactRoles\"\n [contactRole]=\"contactRoleID\"\n [hideRole]=\"true\"\n (contactCreated)=\"onParentContactCreated($event)\"\n (contactChange)=\"onNewContactChanged($event)\"\n />\n }\n }\n </ion-card>\n @if (selectedParent) {\n <ion-card-header>\n <ion-card-subtitle\n >Step 2 of 2: Select {{ contactRoleID }}\n </ion-card-subtitle>\n </ion-card-header>\n }\n }\n\n @if (!parentRole || selectedParent) {\n @if (parentRole && selectedParent) {\n <ion-segment\n [value]=\"$contactTab()\"\n (ionChange)=\"onContactTabChanged($event)\"\n class=\"ion-margin-start ion-margin-end\"\n >\n <ion-segment-button value=\"existing\">Existing</ion-segment-button>\n <ion-segment-button value=\"new\">New</ion-segment-button>\n </ion-segment>\n }\n\n @switch ($contactTab()) {\n @case (\"existing\") {\n @if ($contacts(); as contacts) {\n @if (selectedParent && !contacts.length) {\n <ion-text color=\"medium\" class=\"ion-padding\">\n <p>No locations for selected contact</p>\n </ion-text>\n }\n }\n <sneat-contacts\n [$space]=\"$space()\"\n [$allContacts]=\"$contacts()\"\n (contactsChange)=\"$contacts.set($event)\"\n (addContactClick)=\"switchToNewContact($event)\"\n [goToNewContactPage]=\"false\"\n [contactClicked]=\"contactClicked\"\n />\n <!--\t\t\t\t\t<sneat-select-from-list-->\n <!--\t\t\t\t\t\t[selectMode]=\"'multiple'\"-->\n <!--\t\t\t\t\t\tlabel=\"\"-->\n <!--\t\t\t\t\t\tlabelPlacement=\"start\"-->\n <!--\t\t\t\t\t\t[items]=\"contactItems\"-->\n <!--\t\t\t\t\t\t[(ngModel)]=\"selectedSubContactID\"-->\n <!--\t\t\t\t\t\t(ngModelChange)=\"onContactSelected($event)\"-->\n <!--\t\t\t\t\t\t[isFilterable]=\"true\"-->\n <!--\t\t\t\t\t/>-->\n }\n @case (\"new\") {\n @if (contactRoleID) {\n <!-- TODO: Not clear what it is for - needs a comment or removal or move to sneat-new-contact-form -->\n <ion-item-divider>\n <ion-label>{{ contactRoleID || \"\" | titlecase }}</ion-label>\n </ion-item-divider>\n }\n\n <sneat-new-contact-form\n [$space]=\"$space()\"\n [$contact]=\"$contactWithDbo()\"\n [command]=\"newContactCommand$\"\n [selectGroupAndRole$]=\"selectGroupAndRole$\"\n (creatingChange)=\"$isNewContactCreating.set($event)\"\n />\n }\n }\n }\n</ion-content>\n\n@if (selectMode === \"multiple\") {\n <ion-footer>\n <ion-toolbar color=\"light\">\n @if ($selectedContactsCount(); as selectedContactsCount) {\n <ion-label class=\"ion-margin-start ion-margin-end\">\n @if (selectedContactsCount === 1) {\n {{ selectedContactsCount }} contact selected\n } @else {\n {{ selectedContactsCount }} contacts selected\n }\n </ion-label>\n }\n <!--\t\t\t<ion-buttons slot=\"start\">-->\n <!--\t\t\t\t<ion-button (click)=\"cancel($event)\" color=\"medium\">-->\n <!--\t\t\t\t\t<ion-icon name=\"close-outline\" slot=\"start\"></ion-icon>-->\n <!--\t\t\t\t\t<ion-label>Cancel</ion-label>-->\n <!--\t\t\t\t</ion-button>-->\n <!--\t\t\t</ion-buttons>-->\n @if ($isSubmitting()) {\n <ion-spinner name=\"lines-small\" slot=\"end\" />\n }\n <ion-buttons slot=\"end\">\n @switch ($contactTab()) {\n @case (\"existing\") {\n <ion-button\n fill=\"solid\"\n (click)=\"submitSelected($event)\"\n color=\"primary\"\n [disabled]=\"!$selectedContactsCount() || $isSubmitting()\"\n >\n <ion-icon name=\"save-outline\" slot=\"start\"></ion-icon>\n <ion-label>{{ okButtonLabel }}</ion-label>\n </ion-button>\n }\n @case (\"new\") {\n <ion-button\n fill=\"solid\"\n color=\"primary\"\n [disabled]=\"$isNewContactCreating()\"\n (click)=\"newContactCommand$.next('create')\"\n >\n @if ($isNewContactCreating()) {\n <ion-spinner name=\"lines-small\" slot=\"start\" />\n <ion-label>Creating contact...</ion-label>\n } @else {\n <ion-icon name=\"save-outline\" slot=\"start\"></ion-icon>\n <ion-label>Create contact</ion-label>\n }\n </ion-button>\n }\n }\n </ion-buttons>\n </ion-toolbar>\n </ion-footer>\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=contacts-selector.interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts-selector.interfaces.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/components/contacts-selector/contacts-selector.interfaces.ts"],"names":[],"mappings":"","sourcesContent":["import {\n ContactRole,\n ContactType,\n IContactContext,\n IContactWithBriefAndSpace,\n} from '@sneat/contactus-core';\nimport { ISpaceContext } from '@sneat/space-models';\nimport { ISelectorOptions } from '@sneat/ui';\n\nexport interface IContactSelectorProps {\n readonly space: ISpaceContext;\n readonly contactRole?: ContactRole;\n readonly contactType?: ContactType;\n readonly parentType?: ContactType;\n readonly parentRole?: ContactRole;\n readonly parentContact?: IContactContext;\n readonly subType?: ContactRole;\n readonly subRoleRequired?: boolean;\n readonly excludeContacts?: readonly IContactContext[];\n readonly okButtonLabel?: string;\n}\n\nexport interface IContactSelectorOptions extends ISelectorOptions<IContactWithBriefAndSpace> {\n readonly componentProps?: IContactSelectorProps;\n}\n\nexport interface ISelectedContact {\n readonly contact: IContactContext;\n readonly role: string;\n}\n"]}
@@ -0,0 +1,28 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { ContactsSelectorComponent } from './contacts-selector.component';
3
+ import { ContactsSelectorService } from './contacts-selector.service';
4
+ import * as i0 from "@angular/core";
5
+ export class ContactsSelectorModule {
6
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactsSelectorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
7
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: ContactsSelectorModule }); }
8
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactsSelectorModule, providers: [
9
+ {
10
+ provide: ContactsSelectorComponent,
11
+ useClass: ContactsSelectorComponent,
12
+ },
13
+ ContactsSelectorService,
14
+ ] }); }
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactsSelectorModule, decorators: [{
17
+ type: NgModule,
18
+ args: [{
19
+ providers: [
20
+ {
21
+ provide: ContactsSelectorComponent,
22
+ useClass: ContactsSelectorComponent,
23
+ },
24
+ ContactsSelectorService,
25
+ ],
26
+ }]
27
+ }] });
28
+ //# sourceMappingURL=contacts-selector.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts-selector.module.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/components/contacts-selector/contacts-selector.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;;AAWtE,MAAM,OAAO,sBAAsB;8GAAtB,sBAAsB;+GAAtB,sBAAsB;+GAAtB,sBAAsB,aARtB;YACT;gBACE,OAAO,EAAE,yBAAyB;gBAClC,QAAQ,EAAE,yBAAyB;aACpC;YACD,uBAAuB;SACxB;;2FAEU,sBAAsB;kBATlC,QAAQ;mBAAC;oBACR,SAAS,EAAE;wBACT;4BACE,OAAO,EAAE,yBAAyB;4BAClC,QAAQ,EAAE,yBAAyB;yBACpC;wBACD,uBAAuB;qBACxB;iBACF","sourcesContent":["import { NgModule } from '@angular/core';\nimport { ContactsSelectorComponent } from './contacts-selector.component';\nimport { ContactsSelectorService } from './contacts-selector.service';\n\n@NgModule({\n providers: [\n {\n provide: ContactsSelectorComponent,\n useClass: ContactsSelectorComponent,\n },\n ContactsSelectorService,\n ],\n})\nexport class ContactsSelectorModule {}\n"]}
@@ -0,0 +1,18 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { SelectorBaseService } from '@sneat/ui';
3
+ import { ContactsSelectorComponent } from './contacts-selector.component';
4
+ import * as i0 from "@angular/core";
5
+ export class ContactsSelectorService extends SelectorBaseService {
6
+ constructor() {
7
+ super(ContactsSelectorComponent);
8
+ }
9
+ async selectMultipleContacts(options) {
10
+ return this.selectMultipleInModal(options);
11
+ }
12
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactsSelectorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
13
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactsSelectorService }); }
14
+ }
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactsSelectorService, decorators: [{
16
+ type: Injectable
17
+ }], ctorParameters: () => [] });
18
+ //# sourceMappingURL=contacts-selector.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts-selector.service.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/components/contacts-selector/contacts-selector.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAEhD,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;;AAI1E,MAAM,OAAO,uBAAwB,SAAQ,mBAA8C;IACzF;QACE,KAAK,CAAC,yBAAyB,CAAC,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,sBAAsB,CAAC,OAAgC;QAClE,OAAO,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;8GAPU,uBAAuB;kHAAvB,uBAAuB;;2FAAvB,uBAAuB;kBADnC,UAAU","sourcesContent":["import { Injectable } from '@angular/core';\nimport { SelectorBaseService } from '@sneat/ui';\nimport { IContactWithBriefAndSpace } from '@sneat/contactus-core';\nimport { ContactsSelectorComponent } from './contacts-selector.component';\nimport { IContactSelectorOptions } from './contacts-selector.interfaces';\n\n@Injectable()\nexport class ContactsSelectorService extends SelectorBaseService<IContactWithBriefAndSpace> {\n constructor() {\n super(ContactsSelectorComponent);\n }\n\n public async selectMultipleContacts(options: IContactSelectorOptions) {\n return this.selectMultipleInModal(options);\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ export * from './contacts-selector.component';
2
+ export * from './contacts-selector.service';
3
+ export * from './contacts-selector.module';
4
+ export * from './contacts-selector.interfaces';
5
+ export * from './contacts-selector-input.component';
6
+ //# sourceMappingURL=lib-exports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib-exports.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/components/contacts-selector/lib-exports.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC","sourcesContent":["export * from './contacts-selector.component';\nexport * from './contacts-selector.service';\nexport * from './contacts-selector.module';\nexport * from './contacts-selector.interfaces';\nexport * from './contacts-selector-input.component';\n"]}
@@ -0,0 +1,4 @@
1
+ import { SpaceModuleBaseComponent } from '@sneat/space-components';
2
+ export class ContactusModuleBaseComponent extends SpaceModuleBaseComponent {
3
+ }
4
+ //# sourceMappingURL=contactus-module.base.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contactus-module.base.component.js","sourceRoot":"","sources":["../../../../../../../libs/contactus/shared/src/lib/components/contactus-module.base.component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,MAAM,OAAgB,4BAA6B,SAAQ,wBAG1D;CAAG","sourcesContent":["import { IContactusSpaceDbo } from '@sneat/contactus-core';\nimport { SpaceModuleBaseComponent } from '@sneat/space-components';\n\nexport abstract class ContactusModuleBaseComponent extends SpaceModuleBaseComponent<\n IContactusSpaceDbo,\n IContactusSpaceDbo\n> {}\n"]}
@@ -0,0 +1,53 @@
1
+ import { Component, Input, inject } from '@angular/core';
2
+ import { ContactService, } from '@sneat/contactus-services';
3
+ import { WithSpaceInput } from '@sneat/space-services';
4
+ import { ClassName } from '@sneat/ui';
5
+ import { InlistOptionsComponent, } from './inlist-options.component';
6
+ import * as i0 from "@angular/core";
7
+ export class InlistAgeGroupComponent extends WithSpaceInput {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.contactService = inject(ContactService);
11
+ this.contactID = '';
12
+ this.ageOptions = [
13
+ { id: 'adult', title: 'Adult' },
14
+ { id: 'child', title: 'Child' },
15
+ ];
16
+ }
17
+ onAgeGroupSelected(optionEvent) {
18
+ optionEvent.uiEvent.preventDefault();
19
+ optionEvent.uiEvent.stopPropagation();
20
+ this.selectedOption = optionEvent.option;
21
+ const spaceID = this.$spaceID();
22
+ if (!spaceID) {
23
+ return;
24
+ }
25
+ const request = {
26
+ spaceID,
27
+ contactID: this.contactID,
28
+ ageGroup: optionEvent.option.id,
29
+ };
30
+ this.contactService.updateContact(request).subscribe({
31
+ next: () => console.log('age group updated'),
32
+ error: (err) => {
33
+ this.errorLogger.logError(err, 'failed to update contact with age group');
34
+ setTimeout(() => (this.selectedOption = undefined), 500);
35
+ },
36
+ });
37
+ }
38
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: InlistAgeGroupComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
39
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: InlistAgeGroupComponent, isStandalone: true, selector: "sneat-inlist-age-group", inputs: { contactID: "contactID" }, providers: [{ provide: ClassName, useValue: 'InlistAgeGroupComponent' }], usesInheritance: true, ngImport: i0, template: '<sneat-inlist-options [options]="ageOptions" [selectedOption]="selectedOption" (optionSelected)="onAgeGroupSelected($event)"/>', isInline: true, dependencies: [{ kind: "component", type: InlistOptionsComponent, selector: "sneat-inlist-options", inputs: ["options", "selectedOption"], outputs: ["optionSelected"] }] }); }
40
+ }
41
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: InlistAgeGroupComponent, decorators: [{
42
+ type: Component,
43
+ args: [{
44
+ selector: 'sneat-inlist-age-group',
45
+ template: '<sneat-inlist-options [options]="ageOptions" [selectedOption]="selectedOption" (optionSelected)="onAgeGroupSelected($event)"/>',
46
+ imports: [InlistOptionsComponent],
47
+ providers: [{ provide: ClassName, useValue: 'InlistAgeGroupComponent' }],
48
+ }]
49
+ }], propDecorators: { contactID: [{
50
+ type: Input,
51
+ args: [{ required: true }]
52
+ }] } });
53
+ //# sourceMappingURL=inlist-age-group.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inlist-age-group.component.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/components/inlist-options/inlist-age-group.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EACL,cAAc,GAEf,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAGL,sBAAsB,GACvB,MAAM,4BAA4B,CAAC;;AASpC,MAAM,OAAO,uBAAwB,SAAQ,cAAc;IAP3D;;QAQmB,mBAAc,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;QAIvB,cAAS,GAAG,EAAE,CAAC;QAE9B,eAAU,GAAsB;YACjD,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;YAC/B,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;SAChC,CAAC;KA0BH;IAxBW,kBAAkB,CAAC,WAAwB;QACnD,WAAW,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QACrC,WAAW,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAA0B;YACrC,OAAO;YACP,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,EAAgB;SAC9C,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;YACnD,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;YAC5C,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;gBACb,IAAI,CAAC,WAAW,CAAC,QAAQ,CACvB,GAAG,EACH,yCAAyC,CAC1C,CAAC;gBACF,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;YAC3D,CAAC;SACF,CAAC,CAAC;IACL,CAAC;8GAnCU,uBAAuB;kGAAvB,uBAAuB,yGAFvB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,yBAAyB,EAAE,CAAC,iDAFtE,gIAAgI,4DACxH,sBAAsB;;2FAGrB,uBAAuB;kBAPnC,SAAS;mBAAC;oBACT,QAAQ,EAAE,wBAAwB;oBAClC,QAAQ,EACN,gIAAgI;oBAClI,OAAO,EAAE,CAAC,sBAAsB,CAAC;oBACjC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,yBAAyB,EAAE,CAAC;iBACzE;;sBAME,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE","sourcesContent":["import { Component, Input, inject } from '@angular/core';\nimport {\n ContactService,\n IUpdateContactRequest,\n} from '@sneat/contactus-services';\nimport { AgeGroupID } from '@sneat/core';\nimport { WithSpaceInput } from '@sneat/space-services';\nimport { ClassName } from '@sneat/ui';\nimport {\n OptionEvent,\n Option,\n InlistOptionsComponent,\n} from './inlist-options.component';\n\n@Component({\n selector: 'sneat-inlist-age-group',\n template:\n '<sneat-inlist-options [options]=\"ageOptions\" [selectedOption]=\"selectedOption\" (optionSelected)=\"onAgeGroupSelected($event)\"/>',\n imports: [InlistOptionsComponent],\n providers: [{ provide: ClassName, useValue: 'InlistAgeGroupComponent' }],\n})\nexport class InlistAgeGroupComponent extends WithSpaceInput {\n private readonly contactService = inject(ContactService);\n\n protected selectedOption?: Option;\n\n @Input({ required: true }) public contactID = '';\n\n protected readonly ageOptions: readonly Option[] = [\n { id: 'adult', title: 'Adult' },\n { id: 'child', title: 'Child' },\n ];\n\n protected onAgeGroupSelected(optionEvent: OptionEvent): void {\n optionEvent.uiEvent.preventDefault();\n optionEvent.uiEvent.stopPropagation();\n this.selectedOption = optionEvent.option;\n const spaceID = this.$spaceID();\n if (!spaceID) {\n return;\n }\n const request: IUpdateContactRequest = {\n spaceID,\n contactID: this.contactID,\n ageGroup: optionEvent.option.id as AgeGroupID,\n };\n this.contactService.updateContact(request).subscribe({\n next: () => console.log('age group updated'),\n error: (err) => {\n this.errorLogger.logError(\n err,\n 'failed to update contact with age group',\n );\n setTimeout(() => (this.selectedOption = undefined), 500);\n },\n });\n }\n}\n"]}
@@ -0,0 +1,27 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { IonButton, IonButtons, IonIcon, IonLabel, IonSpinner, } from '@ionic/angular/standalone';
3
+ import * as i0 from "@angular/core";
4
+ export class InlistOptionsComponent {
5
+ constructor() {
6
+ this.optionSelected = new EventEmitter();
7
+ }
8
+ onOptionSelected($event, selected) {
9
+ $event.stopPropagation();
10
+ $event.preventDefault();
11
+ this.selectedOption = selected;
12
+ this.optionSelected.emit({ uiEvent: $event, option: selected });
13
+ }
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: InlistOptionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
15
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: InlistOptionsComponent, isStandalone: true, selector: "sneat-inlist-options", inputs: { options: "options", selectedOption: "selectedOption" }, outputs: { optionSelected: "optionSelected" }, ngImport: i0, template: "<ion-buttons slot=\"end\">\n @if (selectedOption) {\n <ion-button disabled=\"true\">\n <ion-spinner slot=\"start\" name=\"lines-small\" />\n <ion-label>{{ selectedOption.title || selectedOption.id }}</ion-label>\n </ion-button>\n } @else {\n @for (option of options; track option.id) {\n <ion-button (click)=\"onOptionSelected($event, option)\">\n <ion-icon slot=\"start\" name=\"radio-button-off-outline\" />\n <ion-label>{{ option.title || option.id }}</ion-label>\n </ion-button>\n }\n }\n</ion-buttons>\n", dependencies: [{ kind: "component", type: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
16
+ }
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: InlistOptionsComponent, decorators: [{
18
+ type: Component,
19
+ args: [{ selector: 'sneat-inlist-options', imports: [IonButtons, IonButton, IonSpinner, IonLabel, IonIcon], template: "<ion-buttons slot=\"end\">\n @if (selectedOption) {\n <ion-button disabled=\"true\">\n <ion-spinner slot=\"start\" name=\"lines-small\" />\n <ion-label>{{ selectedOption.title || selectedOption.id }}</ion-label>\n </ion-button>\n } @else {\n @for (option of options; track option.id) {\n <ion-button (click)=\"onOptionSelected($event, option)\">\n <ion-icon slot=\"start\" name=\"radio-button-off-outline\" />\n <ion-label>{{ option.title || option.id }}</ion-label>\n </ion-button>\n }\n }\n</ion-buttons>\n" }]
20
+ }], propDecorators: { options: [{
21
+ type: Input
22
+ }], optionSelected: [{
23
+ type: Output
24
+ }], selectedOption: [{
25
+ type: Input
26
+ }] } });
27
+ //# sourceMappingURL=inlist-options.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inlist-options.component.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/components/inlist-options/inlist-options.component.ts","../../../../../../../../libs/contactus/shared/src/lib/components/inlist-options/inlist-options.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EACL,SAAS,EACT,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,GACX,MAAM,2BAA2B,CAAC;;AAiBnC,MAAM,OAAO,sBAAsB;IALnC;QAO4B,mBAAc,GAAG,IAAI,YAAY,EAAe,CAAC;KAU5E;IANW,gBAAgB,CAAC,MAAa,EAAE,QAAgB;QACxD,MAAM,CAAC,eAAe,EAAE,CAAC;QACzB,MAAM,CAAC,cAAc,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;QAC/B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClE,CAAC;8GAXU,sBAAsB;kGAAtB,sBAAsB,iMCxBnC,+iBAeA,4CDOY,UAAU,8EAAE,SAAS,oPAAE,UAAU,yGAAE,QAAQ,6FAAE,OAAO;;2FAEnD,sBAAsB;kBALlC,SAAS;+BACE,sBAAsB,WAEvB,CAAC,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC;;sBAG9D,KAAK;;sBACL,MAAM;;sBAEN,KAAK","sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport {\n IonButton,\n IonButtons,\n IonIcon,\n IonLabel,\n IonSpinner,\n} from '@ionic/angular/standalone';\n\nexport interface Option {\n readonly id: string;\n readonly title?: string;\n}\n\nexport interface OptionEvent {\n readonly uiEvent: Event;\n readonly option: Option;\n}\n\n@Component({\n selector: 'sneat-inlist-options',\n templateUrl: './inlist-options.component.html',\n imports: [IonButtons, IonButton, IonSpinner, IonLabel, IonIcon],\n})\nexport class InlistOptionsComponent {\n @Input() public options?: readonly Option[];\n @Output() public readonly optionSelected = new EventEmitter<OptionEvent>();\n\n @Input() public selectedOption?: Option;\n\n protected onOptionSelected($event: Event, selected: Option): void {\n $event.stopPropagation();\n $event.preventDefault();\n this.selectedOption = selected;\n this.optionSelected.emit({ uiEvent: $event, option: selected });\n }\n}\n","<ion-buttons slot=\"end\">\n @if (selectedOption) {\n <ion-button disabled=\"true\">\n <ion-spinner slot=\"start\" name=\"lines-small\" />\n <ion-label>{{ selectedOption.title || selectedOption.id }}</ion-label>\n </ion-button>\n } @else {\n @for (option of options; track option.id) {\n <ion-button (click)=\"onOptionSelected($event, option)\">\n <ion-icon slot=\"start\" name=\"radio-button-off-outline\" />\n <ion-label>{{ option.title || option.id }}</ion-label>\n </ion-button>\n }\n }\n</ion-buttons>\n"]}
@@ -0,0 +1,87 @@
1
+ import { Component, inject, Input } from '@angular/core';
2
+ import { FormsModule } from '@angular/forms';
3
+ import { IonButton, IonIcon, IonLabel, IonSkeletonText, NavController, } from '@ionic/angular/standalone';
4
+ import { ContactusNavService } from '@sneat/contactus-services';
5
+ import { ErrorLogger } from '@sneat/core';
6
+ import { SpaceNavService } from '@sneat/space-services';
7
+ import { SneatUserService } from '@sneat/auth-core';
8
+ import * as i0 from "@angular/core";
9
+ export const stringHash = (s) => {
10
+ let hash = 0;
11
+ if (!s.length) {
12
+ return hash;
13
+ }
14
+ for (let i = 0; i < s.length; i++) {
15
+ const char = s.charCodeAt(i);
16
+ hash = (hash << 5) - hash + char;
17
+ hash = hash & hash; // Convert to 32bit integer
18
+ }
19
+ return hash;
20
+ };
21
+ export class InviteLinksComponent {
22
+ constructor() {
23
+ this.userService = inject(SneatUserService);
24
+ this.navService = inject(SpaceNavService);
25
+ this.navController = inject(NavController);
26
+ this.errorLogger = inject(ErrorLogger);
27
+ this.contactusNavService = inject(ContactusNavService);
28
+ const userService = this.userService;
29
+ this.subscription = userService.userChanged.subscribe((uid) => {
30
+ this.currentUserId = uid;
31
+ this.setPins();
32
+ });
33
+ }
34
+ ngOnDestroy() {
35
+ if (this.subscription) {
36
+ this.subscription.unsubscribe();
37
+ }
38
+ }
39
+ ngOnChanges() {
40
+ this.setPins();
41
+ }
42
+ goNewMember(event) {
43
+ // console.log('InviteLinksComponent.goNewMember()');
44
+ if (event) {
45
+ event.preventDefault();
46
+ event.stopPropagation();
47
+ }
48
+ const space = this.contactusSpace;
49
+ if (!space?.id) {
50
+ this.errorLogger.logError('Not able to navigate to space member is spaceId is now known');
51
+ return;
52
+ }
53
+ this.contactusNavService
54
+ .navigateToAddMember({ id: space.id })
55
+ .catch(this.errorLogger.logErrorHandler('Failed to navigate to add member'));
56
+ }
57
+ copy(s) {
58
+ if (navigator.clipboard) {
59
+ navigator.clipboard
60
+ .writeText(s)
61
+ .catch((err) => this.errorLogger.logError(err, 'Failed to copy invite URL to clipboard'));
62
+ }
63
+ }
64
+ setPins() {
65
+ const uid = this.currentUserId;
66
+ if (!uid) {
67
+ this.inviteUrlsFor = undefined;
68
+ return;
69
+ }
70
+ const spaceID = this.contactusSpace?.id;
71
+ const getPin = (role) => Math.abs(stringHash(`${spaceID}-${role}-${uid}`));
72
+ const url = `${document.baseURI}join-space?id=${spaceID}#pin=`;
73
+ this.inviteUrlsFor = {
74
+ contributors: url + getPin('contributor'),
75
+ spectators: url + getPin('spectator'),
76
+ };
77
+ }
78
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: InviteLinksComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
79
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: InviteLinksComponent, isStandalone: true, selector: "sneat-invite-links", inputs: { contactusSpace: "contactusSpace" }, usesOnChanges: true, ngImport: i0, template: "@if (!inviteUrlsFor) {\n <ion-skeleton-text style=\"width: 100%\" animated />\n}\n@if (inviteUrlsFor) {\n <p>Share this links for mass invite:</p>\n <ul style=\"list-style: none; padding: 1em\">\n <li class=\"ion-margin-bottom\">\n <ion-button\n size=\"small\"\n fill=\"outline\"\n class=\"copy-link\"\n (click)=\"copy(inviteUrlsFor.contributors)\"\n >\n <ion-icon slot=\"start\" name=\"copy-outline\" />\n <ion-label>Copy link</ion-label>\n </ion-button>\n <b>For contributors:</b><br />\n <a target=\"_blank\" href=\"{{ inviteUrlsFor.contributors }}\">{{\n inviteUrlsFor.contributors\n }}</a>\n </li>\n <li>\n <ion-button\n size=\"small\"\n fill=\"outline\"\n class=\"copy-link\"\n (click)=\"copy(inviteUrlsFor.spectators)\"\n >\n <ion-icon slot=\"start\" name=\"copy-outline\" />\n <ion-label>Copy link</ion-label>\n </ion-button>\n <b>For spectators:</b><br />\n <a target=\"_blank\" href=\"{{ inviteUrlsFor.spectators }}\">{{\n inviteUrlsFor.spectators\n }}</a>\n <br />\n </li>\n </ul>\n}\n", styles: ["ion-button.copy-link{float:right}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "component", type: IonSkeletonText, selector: "ion-skeleton-text", inputs: ["animated"] }, { kind: "component", type: IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }] }); }
80
+ }
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: InviteLinksComponent, decorators: [{
82
+ type: Component,
83
+ args: [{ selector: 'sneat-invite-links', imports: [FormsModule, IonSkeletonText, IonButton, IonIcon, IonLabel], template: "@if (!inviteUrlsFor) {\n <ion-skeleton-text style=\"width: 100%\" animated />\n}\n@if (inviteUrlsFor) {\n <p>Share this links for mass invite:</p>\n <ul style=\"list-style: none; padding: 1em\">\n <li class=\"ion-margin-bottom\">\n <ion-button\n size=\"small\"\n fill=\"outline\"\n class=\"copy-link\"\n (click)=\"copy(inviteUrlsFor.contributors)\"\n >\n <ion-icon slot=\"start\" name=\"copy-outline\" />\n <ion-label>Copy link</ion-label>\n </ion-button>\n <b>For contributors:</b><br />\n <a target=\"_blank\" href=\"{{ inviteUrlsFor.contributors }}\">{{\n inviteUrlsFor.contributors\n }}</a>\n </li>\n <li>\n <ion-button\n size=\"small\"\n fill=\"outline\"\n class=\"copy-link\"\n (click)=\"copy(inviteUrlsFor.spectators)\"\n >\n <ion-icon slot=\"start\" name=\"copy-outline\" />\n <ion-label>Copy link</ion-label>\n </ion-button>\n <b>For spectators:</b><br />\n <a target=\"_blank\" href=\"{{ inviteUrlsFor.spectators }}\">{{\n inviteUrlsFor.spectators\n }}</a>\n <br />\n </li>\n </ul>\n}\n", styles: ["ion-button.copy-link{float:right}\n"] }]
84
+ }], ctorParameters: () => [], propDecorators: { contactusSpace: [{
85
+ type: Input
86
+ }] } });
87
+ //# sourceMappingURL=invite-links.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invite-links.component.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/components/invite-links/invite-links.component.ts","../../../../../../../../libs/contactus/shared/src/lib/components/invite-links/invite-links.component.html"],"names":[],"mappings":"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","sourcesContent":["import { Component, inject, Input, OnChanges, OnDestroy } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport {\n IonButton,\n IonIcon,\n IonLabel,\n IonSkeletonText,\n NavController,\n} from '@ionic/angular/standalone';\nimport { ContactusNavService } from '@sneat/contactus-services';\nimport { IIdAndOptionalDbo } from '@sneat/core';\nimport { ErrorLogger, IErrorLogger } from '@sneat/core';\nimport { IContactusSpaceDbo } from '@sneat/contactus-core';\nimport { SpaceNavService } from '@sneat/space-services';\nimport { SneatUserService } from '@sneat/auth-core';\nimport { Subscription } from 'rxjs';\n\nexport const stringHash = (s: string): number => {\n let hash = 0;\n if (!s.length) {\n return hash;\n }\n for (let i = 0; i < s.length; i++) {\n const char = s.charCodeAt(i);\n\n hash = (hash << 5) - hash + char;\n\n hash = hash & hash; // Convert to 32bit integer\n }\n return hash;\n};\n\n@Component({\n selector: 'sneat-invite-links',\n templateUrl: './invite-links.component.html',\n styleUrls: ['./invite-links.component.scss'],\n imports: [FormsModule, IonSkeletonText, IonButton, IonIcon, IonLabel],\n})\nexport class InviteLinksComponent implements OnChanges, OnDestroy {\n readonly userService = inject(SneatUserService);\n private readonly navService = inject(SpaceNavService);\n private readonly navController = inject(NavController);\n private readonly errorLogger = inject<IErrorLogger>(ErrorLogger);\n\n @Input() public contactusSpace?: IIdAndOptionalDbo<IContactusSpaceDbo>;\n\n public inviteUrlsFor?: {\n contributors: string;\n spectators: string;\n };\n\n private currentUserId?: string;\n private readonly subscription: Subscription;\n\n private readonly contactusNavService = inject(ContactusNavService);\n\n constructor() {\n const userService = this.userService;\n\n this.subscription = userService.userChanged.subscribe((uid) => {\n this.currentUserId = uid;\n this.setPins();\n });\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n ngOnChanges() {\n this.setPins();\n }\n\n goNewMember(event?: Event): void {\n // console.log('InviteLinksComponent.goNewMember()');\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n const space = this.contactusSpace;\n if (!space?.id) {\n this.errorLogger.logError(\n 'Not able to navigate to space member is spaceId is now known',\n );\n return;\n }\n this.contactusNavService\n .navigateToAddMember({ id: space.id })\n .catch(\n this.errorLogger.logErrorHandler('Failed to navigate to add member'),\n );\n }\n\n copy(s: string): void {\n if (navigator.clipboard) {\n navigator.clipboard\n .writeText(s)\n .catch((err) =>\n this.errorLogger.logError(\n err,\n 'Failed to copy invite URL to clipboard',\n ),\n );\n }\n }\n\n private setPins(): void {\n const uid = this.currentUserId;\n if (!uid) {\n this.inviteUrlsFor = undefined;\n return;\n }\n const spaceID = this.contactusSpace?.id;\n const getPin = (role: 'contributor' | 'spectator'): number =>\n Math.abs(stringHash(`${spaceID}-${role}-${uid}`));\n const url = `${document.baseURI}join-space?id=${spaceID}#pin=`;\n this.inviteUrlsFor = {\n contributors: url + getPin('contributor'),\n spectators: url + getPin('spectator'),\n };\n }\n}\n","@if (!inviteUrlsFor) {\n <ion-skeleton-text style=\"width: 100%\" animated />\n}\n@if (inviteUrlsFor) {\n <p>Share this links for mass invite:</p>\n <ul style=\"list-style: none; padding: 1em\">\n <li class=\"ion-margin-bottom\">\n <ion-button\n size=\"small\"\n fill=\"outline\"\n class=\"copy-link\"\n (click)=\"copy(inviteUrlsFor.contributors)\"\n >\n <ion-icon slot=\"start\" name=\"copy-outline\" />\n <ion-label>Copy link</ion-label>\n </ion-button>\n <b>For contributors:</b><br />\n <a target=\"_blank\" href=\"{{ inviteUrlsFor.contributors }}\">{{\n inviteUrlsFor.contributors\n }}</a>\n </li>\n <li>\n <ion-button\n size=\"small\"\n fill=\"outline\"\n class=\"copy-link\"\n (click)=\"copy(inviteUrlsFor.spectators)\"\n >\n <ion-icon slot=\"start\" name=\"copy-outline\" />\n <ion-label>Copy link</ion-label>\n </ion-button>\n <b>For spectators:</b><br />\n <a target=\"_blank\" href=\"{{ inviteUrlsFor.spectators }}\">{{\n inviteUrlsFor.spectators\n }}</a>\n <br />\n </li>\n </ul>\n}\n"]}
@@ -0,0 +1,29 @@
1
+ // TODO: always export from './folder/file'
2
+ export * from './with-new-contact-input';
3
+ export * from './basic-contact-form';
4
+ export * from './contact-details';
5
+ export * from './contact-dob';
6
+ export * from './contact-forms';
7
+ export * from './contact-forms/location-form';
8
+ export * from './contact-forms/new-contact';
9
+ export * from './contact-forms/role-form';
10
+ export * from './contact-input';
11
+ export * from './contact-locations';
12
+ export * from './contact-modules-menu';
13
+ export * from './contact-roles-input';
14
+ export * from './contacts-by-type';
15
+ export * from './contacts-checklist';
16
+ export * from './contacts-component.commands';
17
+ export * from './contacts-component/contacts.component';
18
+ export * from './contacts-list';
19
+ export * from './contacts-selector/lib-exports';
20
+ export * from './contactus-module.base.component';
21
+ export * from './members-by-role';
22
+ export * from './members-card-header/members-card-header.component';
23
+ export * from './members-list';
24
+ export * from './members-short-list-card/members-short-list-card.component';
25
+ export * from './shared-with';
26
+ export * from './invite-links/invite-links.component';
27
+ export * from './members-as-badges';
28
+ export * from './address-form';
29
+ //# sourceMappingURL=lib-exports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib-exports.js","sourceRoot":"","sources":["../../../../../../../libs/contactus/shared/src/lib/components/lib-exports.ts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,sBAAsB,CAAC;AACrC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,iBAAiB,CAAC;AAChC,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mBAAmB,CAAC;AAClC,cAAc,qDAAqD,CAAC;AACpE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,6DAA6D,CAAC;AAC5E,cAAc,eAAe,CAAC;AAC9B,cAAc,uCAAuC,CAAC;AACtD,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC","sourcesContent":["// TODO: always export from './folder/file'\nexport * from './with-new-contact-input';\nexport * from './basic-contact-form';\nexport * from './contact-details';\nexport * from './contact-dob';\nexport * from './contact-forms';\nexport * from './contact-forms/location-form';\nexport * from './contact-forms/new-contact';\nexport * from './contact-forms/role-form';\nexport * from './contact-input';\nexport * from './contact-locations';\nexport * from './contact-modules-menu';\nexport * from './contact-roles-input';\nexport * from './contacts-by-type';\nexport * from './contacts-checklist';\nexport * from './contacts-component.commands';\nexport * from './contacts-component/contacts.component';\nexport * from './contacts-list';\nexport * from './contacts-selector/lib-exports';\nexport * from './contactus-module.base.component';\nexport * from './members-by-role';\nexport * from './members-card-header/members-card-header.component';\nexport * from './members-list';\nexport * from './members-short-list-card/members-short-list-card.component';\nexport * from './shared-with';\nexport * from './invite-links/invite-links.component';\nexport * from './members-as-badges';\nexport * from './address-form';\n"]}
@@ -0,0 +1,39 @@
1
+ import { ChangeDetectionStrategy, Component, computed, EventEmitter, input, Input, Output, signal, } from '@angular/core';
2
+ import { IonChip, IonIcon, IonLabel, IonSpinner, } from '@ionic/angular/standalone';
3
+ import { PersonTitle } from '../../pipes';
4
+ import * as i0 from "@angular/core";
5
+ export class ContactsAsBadgesComponent {
6
+ constructor() {
7
+ this.$deletingContactIDs = signal([], ...(ngDevMode ? [{ debugName: "$deletingContactIDs" }] : []));
8
+ this.$contacts = input.required(...(ngDevMode ? [{ debugName: "$contacts" }] : []));
9
+ this.$contactsWithState = computed(() => {
10
+ const deletingContactIDs = this.$deletingContactIDs();
11
+ const result = this.$contacts().map((c) => Object.assign(c, { isDeleting: deletingContactIDs.includes(c.id) }));
12
+ if (deletingContactIDs.some((id) => result.some((c) => c.id === id))) {
13
+ this.$deletingContactIDs.update((deletingContactIDs) => deletingContactIDs.filter((id) => result.some((c) => c.id === id)));
14
+ }
15
+ return result;
16
+ }, ...(ngDevMode ? [{ debugName: "$contactsWithState" }] : []));
17
+ this.color = 'light';
18
+ this.showDelete = false;
19
+ this.deleteContact = new EventEmitter();
20
+ }
21
+ delete(event, member) {
22
+ event.stopPropagation();
23
+ this.$deletingContactIDs.update((ids) => [...ids, member.id]);
24
+ this.deleteContact.emit(member);
25
+ }
26
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactsAsBadgesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
27
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: ContactsAsBadgesComponent, isStandalone: true, selector: "sneat-contacts-as-badges", inputs: { $contacts: { classPropertyName: "$contacts", publicName: "$contacts", isSignal: true, isRequired: true, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: false, isRequired: false, transformFunction: null }, showDelete: { classPropertyName: "showDelete", publicName: "showDelete", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { deleteContact: "deleteContact" }, ngImport: i0, template: "@for (contact of $contactsWithState(); track contact.id) {\n <ion-chip outline=\"true\">\n <ion-label color=\"tertiary\" [class.deleting]=\"contact.isDeleting\">\n {{ contact | personTitle }}\n </ion-label>\n @if (contact.isDeleting) {\n <ion-spinner name=\"lines-sharp-small\" />\n } @else if (showDelete) {\n <ion-icon name=\"close-outline\" (click)=\"delete($event, contact)\" />\n }\n </ion-chip>\n}\n", styles: [".deleting{text-decoration:line-through}\n"], dependencies: [{ kind: "component", type: IonChip, selector: "ion-chip", inputs: ["color", "disabled", "mode", "outline"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "pipe", type: PersonTitle, name: "personTitle" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28
+ }
29
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactsAsBadgesComponent, decorators: [{
30
+ type: Component,
31
+ args: [{ imports: [PersonTitle, IonChip, IonLabel, IonIcon, IonSpinner, PersonTitle], changeDetection: ChangeDetectionStrategy.OnPush, selector: 'sneat-contacts-as-badges', template: "@for (contact of $contactsWithState(); track contact.id) {\n <ion-chip outline=\"true\">\n <ion-label color=\"tertiary\" [class.deleting]=\"contact.isDeleting\">\n {{ contact | personTitle }}\n </ion-label>\n @if (contact.isDeleting) {\n <ion-spinner name=\"lines-sharp-small\" />\n } @else if (showDelete) {\n <ion-icon name=\"close-outline\" (click)=\"delete($event, contact)\" />\n }\n </ion-chip>\n}\n", styles: [".deleting{text-decoration:line-through}\n"] }]
32
+ }], propDecorators: { $contacts: [{ type: i0.Input, args: [{ isSignal: true, alias: "$contacts", required: true }] }], color: [{
33
+ type: Input
34
+ }], showDelete: [{
35
+ type: Input
36
+ }], deleteContact: [{
37
+ type: Output
38
+ }] } });
39
+ //# sourceMappingURL=contacts-as-badges.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contacts-as-badges.component.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/components/members-as-badges/contacts-as-badges.component.ts","../../../../../../../../libs/contactus/shared/src/lib/components/members-as-badges/contacts-as-badges.component.html"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,QAAQ,EACR,YAAY,EACZ,KAAK,EACL,KAAK,EACL,MAAM,EACN,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,OAAO,EACP,OAAO,EACP,QAAQ,EACR,UAAU,GACX,MAAM,2BAA2B,CAAC;AAKnC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;;AAa1C,MAAM,OAAO,yBAAyB;IAPtC;QAQmB,wBAAmB,GAAG,MAAM,CAAoB,EAAE,+DAAC,CAAC;QAErD,cAAS,GACvB,KAAK,CAAC,QAAQ,oDAAwC,CAAC;QAEtC,uBAAkB,GAAG,QAAQ,CAE9C,GAAG,EAAE;YACL,MAAM,kBAAkB,GAAG,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACtD,MAAM,MAAM,GAAiC,IAAI,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACtE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,UAAU,EAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CACpE,CAAC;YACF,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC;gBACrE,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,kBAAkB,EAAE,EAAE,CACrD,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CACnE,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC,8DAAC,CAAC;QAEM,UAAK,GAMG,OAAO,CAAC;QAEhB,eAAU,GAAG,KAAK,CAAC;QAET,kBAAa,GAAG,IAAI,YAAY,EAAqB,CAAC;KAO1E;IALW,MAAM,CAAC,KAAY,EAAE,MAAyB;QACtD,KAAK,CAAC,eAAe,EAAE,CAAC;QACxB,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;8GArCU,yBAAyB;kGAAzB,yBAAyB,ihBCjCtC,ubAYA,mGDeyB,OAAO,uGAAE,QAAQ,6FAAE,OAAO,2JAAE,UAAU,oGAAnD,WAAW;;2FAMV,yBAAyB;kBAPrC,SAAS;8BACC,CAAC,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,mBAE1D,uBAAuB,CAAC,MAAM,YACrC,0BAA0B;;sBAwBnC,KAAK;;sBAQL,KAAK;;sBAEL,MAAM","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n computed,\n EventEmitter,\n input,\n Input,\n Output,\n signal,\n} from '@angular/core';\nimport {\n IonChip,\n IonIcon,\n IonLabel,\n IonSpinner,\n} from '@ionic/angular/standalone';\nimport {\n IContactWithBrief,\n IContactWithBriefAndSpace,\n} from '@sneat/contactus-core';\nimport { PersonTitle } from '../../pipes';\n\ninterface IContactWithState extends IContactWithBriefAndSpace {\n readonly isDeleting?: boolean;\n}\n\n@Component({\n imports: [PersonTitle, IonChip, IonLabel, IonIcon, IonSpinner, PersonTitle],\n styles: ['.deleting {text-decoration: line-through}'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'sneat-contacts-as-badges',\n templateUrl: 'contacts-as-badges.component.html',\n})\nexport class ContactsAsBadgesComponent {\n private readonly $deletingContactIDs = signal<readonly string[]>([]);\n\n public readonly $contacts =\n input.required<readonly IContactWithBriefAndSpace[]>();\n\n protected readonly $contactsWithState = computed<\n readonly IContactWithState[]\n >(() => {\n const deletingContactIDs = this.$deletingContactIDs();\n const result: readonly IContactWithState[] = this.$contacts().map((c) =>\n Object.assign(c, { isDeleting: deletingContactIDs.includes(c.id) }),\n );\n if (deletingContactIDs.some((id) => result.some((c) => c.id === id))) {\n this.$deletingContactIDs.update((deletingContactIDs) =>\n deletingContactIDs.filter((id) => result.some((c) => c.id === id)),\n );\n }\n return result;\n });\n\n @Input() color:\n | 'primary'\n | 'light'\n | 'dark'\n | 'medium'\n | 'secondary'\n | 'tertiary' = 'light';\n\n @Input() showDelete = false;\n\n @Output() readonly deleteContact = new EventEmitter<IContactWithBrief>();\n\n protected delete(event: Event, member: IContactWithBrief): void {\n event.stopPropagation();\n this.$deletingContactIDs.update((ids) => [...ids, member.id]);\n this.deleteContact.emit(member);\n }\n}\n","@for (contact of $contactsWithState(); track contact.id) {\n <ion-chip outline=\"true\">\n <ion-label color=\"tertiary\" [class.deleting]=\"contact.isDeleting\">\n {{ contact | personTitle }}\n </ion-label>\n @if (contact.isDeleting) {\n <ion-spinner name=\"lines-sharp-small\" />\n } @else if (showDelete) {\n <ion-icon name=\"close-outline\" (click)=\"delete($event, contact)\" />\n }\n </ion-chip>\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export * from './contacts-as-badges.component';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/components/members-as-badges/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAC","sourcesContent":["export * from './contacts-as-badges.component';\n"]}