@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,60 @@
1
+ import { ChangeDetectionStrategy, Component, Input, input, computed, } from '@angular/core';
2
+ import { IonCard } from '@ionic/angular/standalone';
3
+ import { zipMapBriefsWithIDs } from '@sneat/space-models';
4
+ import { MembersCardHeaderComponent } from '../members-card-header/members-card-header.component';
5
+ import { MembersListComponent } from '../members-list';
6
+ import * as i0 from "@angular/core";
7
+ export class MembersShortListCardComponent {
8
+ constructor() {
9
+ this.$space = input.required(...(ngDevMode ? [{ debugName: "$space" }] : []));
10
+ this.$contactusSpaceDbo = input.required(...(ngDevMode ? [{ debugName: "$contactusSpaceDbo" }] : []));
11
+ this.$spaceContacts = computed(() => zipMapBriefsWithIDs(this.$contactusSpaceDbo()?.contacts), ...(ngDevMode ? [{ debugName: "$spaceContacts" }] : []));
12
+ this.filterMembers = (contacts) => {
13
+ return !this.role
14
+ ? contacts
15
+ : contacts?.filter((m) => m.brief?.roles?.some((r) => r === this.role));
16
+ };
17
+ }
18
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: MembersShortListCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
19
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.0", type: MembersShortListCardComponent, isStandalone: true, selector: "sneat-members-short-list", inputs: { $space: { classPropertyName: "$space", publicName: "$space", isSignal: true, isRequired: true, transformFunction: null }, $contactusSpaceDbo: { classPropertyName: "$contactusSpaceDbo", publicName: "$contactusSpaceDbo", isSignal: true, isRequired: true, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: false, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
20
+ <ion-card>
21
+ <sneat-members-card-header
22
+ [$space]="$space()"
23
+ [$contactusSpace]="{
24
+ id: $space().id || '',
25
+ dbo: $contactusSpaceDbo() || null,
26
+ }"
27
+ />
28
+ <sneat-members-list
29
+ [$space]="$space()"
30
+ [$members]="$spaceContacts()"
31
+ ></sneat-members-list>
32
+ </ion-card>
33
+ `, isInline: true, dependencies: [{ kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: MembersListComponent, selector: "sneat-members-list", inputs: ["$members", "$role", "contactsByMember", "hideRoles"], outputs: ["selfRemoved"] }, { kind: "component", type: MembersCardHeaderComponent, selector: "sneat-members-card-header", inputs: ["$space", "$contactusSpace"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34
+ }
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: MembersShortListCardComponent, decorators: [{
36
+ type: Component,
37
+ args: [{
38
+ selector: 'sneat-members-short-list',
39
+ template: `
40
+ <ion-card>
41
+ <sneat-members-card-header
42
+ [$space]="$space()"
43
+ [$contactusSpace]="{
44
+ id: $space().id || '',
45
+ dbo: $contactusSpaceDbo() || null,
46
+ }"
47
+ />
48
+ <sneat-members-list
49
+ [$space]="$space()"
50
+ [$members]="$spaceContacts()"
51
+ ></sneat-members-list>
52
+ </ion-card>
53
+ `,
54
+ imports: [IonCard, MembersListComponent, MembersCardHeaderComponent],
55
+ changeDetection: ChangeDetectionStrategy.OnPush,
56
+ }]
57
+ }], propDecorators: { $space: [{ type: i0.Input, args: [{ isSignal: true, alias: "$space", required: true }] }], $contactusSpaceDbo: [{ type: i0.Input, args: [{ isSignal: true, alias: "$contactusSpaceDbo", required: true }] }], role: [{
58
+ type: Input
59
+ }] } });
60
+ //# sourceMappingURL=members-short-list-card.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"members-short-list-card.component.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/components/members-short-list-card/members-short-list-card.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,KAAK,EACL,KAAK,EACL,QAAQ,GACT,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AAEpD,OAAO,EAAiB,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,0BAA0B,EAAE,MAAM,sDAAsD,CAAC;AAClG,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;;AAsBvD,MAAM,OAAO,6BAA6B;IApB1C;QAqBkB,WAAM,GAAG,KAAK,CAAC,QAAQ,iDAAiB,CAAC;QAEzC,uBAAkB,GAAG,KAAK,CAAC,QAAQ,6DAEhD,CAAC;QAEe,mBAAc,GAAG,QAAQ,CAAC,GAAG,EAAE,CAChD,mBAAmB,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,QAAQ,CAAC,0DACzD,CAAC;QAIe,kBAAa,GAAG,CAC/B,QAAuC,EACG,EAAE;YAC5C,OAAO,CAAC,IAAI,CAAC,IAAI;gBACf,CAAC,CAAC,QAAQ;gBACV,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5E,CAAC,CAAC;KACH;8GApBY,6BAA6B;kGAA7B,6BAA6B,8eAlB9B;;;;;;;;;;;;;;GAcT,4DACS,OAAO,yLAAE,oBAAoB,yJAAE,0BAA0B;;2FAGxD,6BAA6B;kBApBzC,SAAS;mBAAC;oBACT,QAAQ,EAAE,0BAA0B;oBACpC,QAAQ,EAAE;;;;;;;;;;;;;;GAcT;oBACD,OAAO,EAAE,CAAC,OAAO,EAAE,oBAAoB,EAAE,0BAA0B,CAAC;oBACpE,eAAe,EAAE,uBAAuB,CAAC,MAAM;iBAChD;;sBAYE,KAAK","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n Input,\n input,\n computed,\n} from '@angular/core';\nimport { IonCard } from '@ionic/angular/standalone';\nimport { IContactusSpaceDbo, IContactWithBrief } from '@sneat/contactus-core';\nimport { ISpaceContext, zipMapBriefsWithIDs } from '@sneat/space-models';\nimport { MembersCardHeaderComponent } from '../members-card-header/members-card-header.component';\nimport { MembersListComponent } from '../members-list';\n\n@Component({\n selector: 'sneat-members-short-list',\n template: `\n <ion-card>\n <sneat-members-card-header\n [$space]=\"$space()\"\n [$contactusSpace]=\"{\n id: $space().id || '',\n dbo: $contactusSpaceDbo() || null,\n }\"\n />\n <sneat-members-list\n [$space]=\"$space()\"\n [$members]=\"$spaceContacts()\"\n ></sneat-members-list>\n </ion-card>\n `,\n imports: [IonCard, MembersListComponent, MembersCardHeaderComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class MembersShortListCardComponent {\n public readonly $space = input.required<ISpaceContext>();\n\n public readonly $contactusSpaceDbo = input.required<\n IContactusSpaceDbo | null | undefined\n >();\n\n protected readonly $spaceContacts = computed(() =>\n zipMapBriefsWithIDs(this.$contactusSpaceDbo()?.contacts),\n );\n\n @Input() public role?: string;\n\n private readonly filterMembers = (\n contacts?: readonly IContactWithBrief[],\n ): readonly IContactWithBrief[] | undefined => {\n return !this.role\n ? contacts\n : contacts?.filter((m) => m.brief?.roles?.some((r) => r === this.role));\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export * from './shared-with.component';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/components/shared-with/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC","sourcesContent":["export * from './shared-with.component';\n"]}
@@ -0,0 +1,25 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { IonCard, IonCardHeader, IonCardTitle, IonCheckbox, IonIcon, IonItem, IonLabel, IonSelect, IonSelectOption, IonToggle, } from '@ionic/angular/standalone';
3
+ import * as i0 from "@angular/core";
4
+ export class SharedWithComponent {
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SharedWithComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: SharedWithComponent, isStandalone: true, selector: "sneat-shared-with", inputs: { title: "title" }, ngImport: i0, template: "<ion-card>\n <ion-card-header>\n <ion-card-title>{{ title }}</ion-card-title>\n </ion-card-header>\n <ion-item>\n <ion-label>Group</ion-label>\n <ion-select disabled=\"true\" value=\"family\" interface=\"popover\">\n <ion-select-option value=\"personal\">Personal</ion-select-option>\n <ion-select-option value=\"family\">Family</ion-select-option>\n </ion-select>\n </ion-item>\n <ion-item color=\"light\">\n <ion-checkbox slot=\"start\" />\n <ion-label><b>Adults</b></ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Janet</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Jack</ion-label>\n </ion-item>\n <ion-item color=\"light\">\n <ion-checkbox slot=\"start\" />\n <ion-label>Kids</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Janet</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Jack</ion-label>\n </ion-item>\n <ion-item button=\"\">\n <ion-icon name=\"add\" slot=\"start\" color=\"primary\" />\n <ion-label color=\"primary\">Add member</ion-label>\n </ion-item>\n</ion-card>\n", dependencies: [{ kind: "component", type: IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonToggle, selector: "ion-toggle", inputs: ["checked", "color", "disabled", "enableOnOffLabels", "errorText", "helperText", "justify", "labelPlacement", "mode", "name", "value"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }] }); }
7
+ }
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: SharedWithComponent, decorators: [{
9
+ type: Component,
10
+ args: [{ selector: 'sneat-shared-with', imports: [
11
+ IonCard,
12
+ IonCardHeader,
13
+ IonItem,
14
+ IonLabel,
15
+ IonSelect,
16
+ IonSelectOption,
17
+ IonCardTitle,
18
+ IonCheckbox,
19
+ IonToggle,
20
+ IonIcon,
21
+ ], template: "<ion-card>\n <ion-card-header>\n <ion-card-title>{{ title }}</ion-card-title>\n </ion-card-header>\n <ion-item>\n <ion-label>Group</ion-label>\n <ion-select disabled=\"true\" value=\"family\" interface=\"popover\">\n <ion-select-option value=\"personal\">Personal</ion-select-option>\n <ion-select-option value=\"family\">Family</ion-select-option>\n </ion-select>\n </ion-item>\n <ion-item color=\"light\">\n <ion-checkbox slot=\"start\" />\n <ion-label><b>Adults</b></ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Janet</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Jack</ion-label>\n </ion-item>\n <ion-item color=\"light\">\n <ion-checkbox slot=\"start\" />\n <ion-label>Kids</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Janet</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Jack</ion-label>\n </ion-item>\n <ion-item button=\"\">\n <ion-icon name=\"add\" slot=\"start\" color=\"primary\" />\n <ion-label color=\"primary\">Add member</ion-label>\n </ion-item>\n</ion-card>\n" }]
22
+ }], propDecorators: { title: [{
23
+ type: Input
24
+ }] } });
25
+ //# sourceMappingURL=shared-with.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-with.component.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/components/shared-with/shared-with.component.ts","../../../../../../../../libs/contactus/shared/src/lib/components/shared-with/shared-with.component.html"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EACL,OAAO,EACP,aAAa,EACb,YAAY,EACZ,WAAW,EACX,OAAO,EACP,OAAO,EACP,QAAQ,EACR,SAAS,EACT,eAAe,EACf,SAAS,GACV,MAAM,2BAA2B,CAAC;;AAkBnC,MAAM,OAAO,mBAAmB;8GAAnB,mBAAmB;kGAAnB,mBAAmB,yGC9BhC,orCAwCA,4CDtBI,OAAO,yLACP,aAAa,sGACb,OAAO,0NACP,QAAQ,6FACR,SAAS,kVACT,eAAe,6FACf,YAAY,sFACZ,WAAW,qMACX,SAAS,uMACT,OAAO;;2FAGE,mBAAmB;kBAhB/B,SAAS;+BACE,mBAAmB,WAEpB;wBACP,OAAO;wBACP,aAAa;wBACb,OAAO;wBACP,QAAQ;wBACR,SAAS;wBACT,eAAe;wBACf,YAAY;wBACZ,WAAW;wBACX,SAAS;wBACT,OAAO;qBACR;;sBAGA,KAAK","sourcesContent":["import { Component, Input } from '@angular/core';\nimport {\n IonCard,\n IonCardHeader,\n IonCardTitle,\n IonCheckbox,\n IonIcon,\n IonItem,\n IonLabel,\n IonSelect,\n IonSelectOption,\n IonToggle,\n} from '@ionic/angular/standalone';\n\n@Component({\n selector: 'sneat-shared-with',\n templateUrl: './shared-with.component.html',\n imports: [\n IonCard,\n IonCardHeader,\n IonItem,\n IonLabel,\n IonSelect,\n IonSelectOption,\n IonCardTitle,\n IonCheckbox,\n IonToggle,\n IonIcon,\n ],\n})\nexport class SharedWithComponent {\n @Input() title?: string;\n}\n","<ion-card>\n <ion-card-header>\n <ion-card-title>{{ title }}</ion-card-title>\n </ion-card-header>\n <ion-item>\n <ion-label>Group</ion-label>\n <ion-select disabled=\"true\" value=\"family\" interface=\"popover\">\n <ion-select-option value=\"personal\">Personal</ion-select-option>\n <ion-select-option value=\"family\">Family</ion-select-option>\n </ion-select>\n </ion-item>\n <ion-item color=\"light\">\n <ion-checkbox slot=\"start\" />\n <ion-label><b>Adults</b></ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Janet</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Jack</ion-label>\n </ion-item>\n <ion-item color=\"light\">\n <ion-checkbox slot=\"start\" />\n <ion-label>Kids</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Janet</ion-label>\n </ion-item>\n <ion-item>\n <ion-toggle slot=\"end\" />\n <ion-label>Jack</ion-label>\n </ion-item>\n <ion-item button=\"\">\n <ion-icon name=\"add\" slot=\"start\" color=\"primary\" />\n <ion-label color=\"primary\">Add member</ion-label>\n </ion-item>\n</ion-card>\n"]}
@@ -0,0 +1,18 @@
1
+ import { Directive, EventEmitter, input, Output } from '@angular/core';
2
+ import { WithSpaceInput } from '@sneat/space-services';
3
+ import * as i0 from "@angular/core";
4
+ export class WithNewContactInput extends WithSpaceInput {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.$contact = input.required(...(ngDevMode ? [{ debugName: "$contact" }] : []));
8
+ this.contactChange = new EventEmitter();
9
+ }
10
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: WithNewContactInput, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
11
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.0", type: WithNewContactInput, isStandalone: true, inputs: { $contact: { classPropertyName: "$contact", publicName: "$contact", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { contactChange: "contactChange" }, usesInheritance: true, ngImport: i0 }); }
12
+ }
13
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: WithNewContactInput, decorators: [{
14
+ type: Directive
15
+ }], propDecorators: { $contact: [{ type: i0.Input, args: [{ isSignal: true, alias: "$contact", required: true }] }], contactChange: [{
16
+ type: Output
17
+ }] } });
18
+ //# sourceMappingURL=with-new-contact-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-new-contact-input.js","sourceRoot":"","sources":["../../../../../../../libs/contactus/shared/src/lib/components/with-new-contact-input.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvE,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;;AAGvD,MAAM,OAAO,mBAAoB,SAAQ,cAAc;IADvD;;QAEkB,aAAQ,GAAG,KAAK,CAAC,QAAQ,mDAAgC,CAAC;QACvD,kBAAa,GAC9B,IAAI,YAAY,EAAgC,CAAC;KACpD;8GAJY,mBAAmB;kGAAnB,mBAAmB;;2FAAnB,mBAAmB;kBAD/B,SAAS;;sBAGP,MAAM","sourcesContent":["import { Directive, EventEmitter, input, Output } from '@angular/core';\nimport { NewContactBaseDboAndSpaceRef } from '@sneat/contactus-core';\nimport { WithSpaceInput } from '@sneat/space-services';\n\n@Directive()\nexport class WithNewContactInput extends WithSpaceInput {\n public readonly $contact = input.required<NewContactBaseDboAndSpaceRef>();\n @Output() readonly contactChange =\n new EventEmitter<NewContactBaseDboAndSpaceRef>();\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../libs/contactus/shared/src/lib/constants.ts"],"names":[],"mappings":"","sourcesContent":["import { EnumAsUnionOfKeys } from '@sneat/core';\n\nexport const enum MemberPageID {\n // Read README-DEV-FAQ.md#enum-as-union-of-keys\n member = 'member',\n 'edit-member' = 'edit-member',\n 'member-budget' = 'member-budget',\n 'member-assets' = 'member-assets',\n 'member-contacts' = 'member-contacts',\n 'member-documents' = 'member-documents',\n 'member-schedule' = 'member-schedule',\n 'remove-member' = 'remove-member',\n 'member-sizes' = 'member-sizes',\n}\n\nexport type MemberPages = EnumAsUnionOfKeys<typeof MemberPageID>; // Read README-DEV-FAQ.md#enum-as-union-of-keys\n"]}
@@ -0,0 +1,3 @@
1
+ export * from './ui-types';
2
+ export * from './constants';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/contactus/shared/src/lib/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC","sourcesContent":["export * from './ui-types';\nexport * from './constants';\n"]}
@@ -0,0 +1,88 @@
1
+ import { ChangeDetectionStrategy, Component, inject, Input, signal, } from '@angular/core';
2
+ import { IonButton, IonButtons, IonContent, IonFooter, IonHeader, IonIcon, IonLabel, IonTitle, IonToolbar, } from '@ionic/angular/standalone';
3
+ import { ContactService, } from '@sneat/contactus-services';
4
+ import { NamesFormComponent } from '../../components/contact-forms/person-forms/names-form';
5
+ import { ClassName, SneatBaseModalComponent } from '@sneat/ui';
6
+ import * as i0 from "@angular/core";
7
+ export class ContactNamesModalComponent extends SneatBaseModalComponent {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.names = {};
11
+ this.contactService = inject(ContactService);
12
+ this.$saving = signal(false, ...(ngDevMode ? [{ debugName: "$saving" }] : []));
13
+ this.personalbar = personalbar;
14
+ }
15
+ onNamesChanged(names) {
16
+ this.names = names;
17
+ }
18
+ saveChanges() {
19
+ this.$saving.set(true);
20
+ const contactID = this.contactID;
21
+ if (!contactID) {
22
+ this.errorLogger.logError('Contact ID is required');
23
+ return;
24
+ }
25
+ const spaceID = this.spaceID;
26
+ if (!spaceID) {
27
+ this.errorLogger.logError('Space ID is required');
28
+ return;
29
+ }
30
+ const names = this.names;
31
+ if (!names) {
32
+ this.errorLogger.logError('Names are required');
33
+ return;
34
+ }
35
+ const request = {
36
+ contactID,
37
+ spaceID,
38
+ names,
39
+ };
40
+ this.contactService.updateContact(request).subscribe({
41
+ next: () => {
42
+ this.$saving.set(false);
43
+ this.dismissModal(names);
44
+ },
45
+ error: (err) => {
46
+ this.$saving.set(false);
47
+ this.errorLogger.logError(err);
48
+ },
49
+ });
50
+ }
51
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactNamesModalComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
52
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.0", type: ContactNamesModalComponent, isStandalone: true, selector: "sneat-contact-names-modal", inputs: { spaceID: "spaceID", contactID: "contactID", names: "names" }, providers: [
53
+ {
54
+ provide: ClassName,
55
+ useValue: 'ContactNamesModalComponent',
56
+ },
57
+ ], usesInheritance: true, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"light\">\n <ion-title>Edit names</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"close()\">\n <ion-icon name=\"close-outline\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <sneat-names-form\n [name]=\"names\"\n [showHeader]=\"false\"\n (namesChanged)=\"onNamesChanged($event)\"\n />\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button\n [disabled]=\"$saving()\"\n fill=\"solid\"\n color=\"primary\"\n (click)=\"saveChanges()\"\n >\n <ion-label>Save</ion-label>\n </ion-button>\n <ion-button (click)=\"close()\">\n <ion-label>Cancel</ion-label>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-footer>\n", dependencies: [{ 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: IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: NamesFormComponent, selector: "sneat-names-form", inputs: ["showHeader", "name", "isActive", "disabled", "fields", "showNextButton"], outputs: ["keyupEnter", "namesChanged", "next"] }, { kind: "component", type: IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
58
+ }
59
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: ContactNamesModalComponent, decorators: [{
60
+ type: Component,
61
+ args: [{ imports: [
62
+ IonButton,
63
+ IonButtons,
64
+ IonContent,
65
+ IonHeader,
66
+ IonIcon,
67
+ IonTitle,
68
+ IonToolbar,
69
+ NamesFormComponent,
70
+ IonFooter,
71
+ IonLabel,
72
+ ], providers: [
73
+ {
74
+ provide: ClassName,
75
+ useValue: 'ContactNamesModalComponent',
76
+ },
77
+ ], selector: 'sneat-contact-names-modal', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar color=\"light\">\n <ion-title>Edit names</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"close()\">\n <ion-icon name=\"close-outline\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <sneat-names-form\n [name]=\"names\"\n [showHeader]=\"false\"\n (namesChanged)=\"onNamesChanged($event)\"\n />\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button\n [disabled]=\"$saving()\"\n fill=\"solid\"\n color=\"primary\"\n (click)=\"saveChanges()\"\n >\n <ion-label>Save</ion-label>\n </ion-button>\n <ion-button (click)=\"close()\">\n <ion-label>Cancel</ion-label>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-footer>\n" }]
78
+ }], propDecorators: { spaceID: [{
79
+ type: Input,
80
+ args: [{ required: true }]
81
+ }], contactID: [{
82
+ type: Input,
83
+ args: [{ required: true }]
84
+ }], names: [{
85
+ type: Input,
86
+ args: [{ required: true }]
87
+ }] } });
88
+ //# sourceMappingURL=contact-names-modal.component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contact-names-modal.component.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/modals/contact-names-modal/contact-names-modal.component.ts","../../../../../../../../libs/contactus/shared/src/lib/modals/contact-names-modal/contact-names-modal.component.html"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,MAAM,EACN,KAAK,EACL,MAAM,GACP,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,SAAS,EACT,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,UAAU,GACX,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,cAAc,GAEf,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;;AAyB/D,MAAM,OAAO,0BAA2B,SAAQ,uBAAuB;IAvBvE;;QA0BoC,UAAK,GAAiB,EAAE,CAAC;QAE1C,mBAAc,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;QAEtC,YAAO,GAAG,MAAM,CAAC,KAAK,mDAAC,CAAC;QAwCxB,gBAAW,GAAG,WAAW,CAAC;KAC9C;IAvCW,cAAc,CAAC,KAAmB;QAC1C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAES,WAAW;QACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;YAClD,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAA0B;YACrC,SAAS;YACT,OAAO;YACP,KAAK;SACN,CAAC;QACF,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;YACnD,IAAI,EAAE,GAAG,EAAE;gBACT,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACxB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC;YACD,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;gBACb,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;gBACxB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;SACF,CAAC,CAAC;IACL,CAAC;8GA7CU,0BAA0B;kGAA1B,0BAA0B,gJAV1B;YACT;gBACE,OAAO,EAAE,SAAS;gBAClB,QAAQ,EAAE,4BAA4B;aACvC;SACF,iDC5CH,41BAoCA,4CDRI,SAAS,oPACT,UAAU,8EACV,UAAU,wKACV,SAAS,oGACT,OAAO,2JACP,QAAQ,iFACR,UAAU,mFACV,kBAAkB,kMAClB,SAAS,oGACT,QAAQ;;2FAYC,0BAA0B;kBAvBtC,SAAS;8BACC;wBACP,SAAS;wBACT,UAAU;wBACV,UAAU;wBACV,SAAS;wBACT,OAAO;wBACP,QAAQ;wBACR,UAAU;wBACV,kBAAkB;wBAClB,SAAS;wBACT,QAAQ;qBACT,aACU;wBACT;4BACE,OAAO,EAAE,SAAS;4BAClB,QAAQ,EAAE,4BAA4B;yBACvC;qBACF,YACS,2BAA2B,mBAEpB,uBAAuB,CAAC,MAAM;;sBAG9C,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE;;sBACxB,KAAK;uBAAC,EAAE,QAAQ,EAAE,IAAI,EAAE","sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n inject,\n Input,\n signal,\n} from '@angular/core';\nimport {\n IonButton,\n IonButtons,\n IonContent,\n IonFooter,\n IonHeader,\n IonIcon,\n IonLabel,\n IonTitle,\n IonToolbar,\n} from '@ionic/angular/standalone';\nimport { IPersonNames } from '@sneat/auth-models';\nimport {\n ContactService,\n IUpdateContactRequest,\n} from '@sneat/contactus-services';\nimport { NamesFormComponent } from '../../components/contact-forms/person-forms/names-form';\nimport { ClassName, SneatBaseModalComponent } from '@sneat/ui';\n\n@Component({\n imports: [\n IonButton,\n IonButtons,\n IonContent,\n IonHeader,\n IonIcon,\n IonTitle,\n IonToolbar,\n NamesFormComponent,\n IonFooter,\n IonLabel,\n ],\n providers: [\n {\n provide: ClassName,\n useValue: 'ContactNamesModalComponent',\n },\n ],\n selector: 'sneat-contact-names-modal',\n templateUrl: './contact-names-modal.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ContactNamesModalComponent extends SneatBaseModalComponent {\n @Input({ required: true }) spaceID?: string;\n @Input({ required: true }) contactID?: string;\n @Input({ required: true }) public names: IPersonNames = {};\n\n private readonly contactService = inject(ContactService);\n\n protected readonly $saving = signal(false);\n\n protected onNamesChanged(names: IPersonNames): void {\n this.names = names;\n }\n\n protected saveChanges(): void {\n this.$saving.set(true);\n const contactID = this.contactID;\n if (!contactID) {\n this.errorLogger.logError('Contact ID is required');\n return;\n }\n const spaceID = this.spaceID;\n if (!spaceID) {\n this.errorLogger.logError('Space ID is required');\n return;\n }\n const names = this.names;\n if (!names) {\n this.errorLogger.logError('Names are required');\n return;\n }\n const request: IUpdateContactRequest = {\n contactID,\n spaceID,\n names,\n };\n this.contactService.updateContact(request).subscribe({\n next: () => {\n this.$saving.set(false);\n this.dismissModal(names);\n },\n error: (err) => {\n this.$saving.set(false);\n this.errorLogger.logError(err);\n },\n });\n }\n\n protected readonly personalbar = personalbar;\n}\n","<ion-header>\n <ion-toolbar color=\"light\">\n <ion-title>Edit names</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"close()\">\n <ion-icon name=\"close-outline\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n <sneat-names-form\n [name]=\"names\"\n [showHeader]=\"false\"\n (namesChanged)=\"onNamesChanged($event)\"\n />\n</ion-content>\n\n<ion-footer>\n <ion-toolbar>\n <ion-buttons slot=\"end\">\n <ion-button\n [disabled]=\"$saving()\"\n fill=\"solid\"\n color=\"primary\"\n (click)=\"saveChanges()\"\n >\n <ion-label>Save</ion-label>\n </ion-button>\n <ion-button (click)=\"close()\">\n <ion-label>Cancel</ion-label>\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-footer>\n"]}
@@ -0,0 +1,2 @@
1
+ export * from './invite-modal.component';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../libs/contactus/shared/src/lib/modals/invite-modal/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC","sourcesContent":["export * from './invite-modal.component';\n"]}
@@ -0,0 +1,255 @@
1
+ import { ChangeDetectionStrategy, Component, Input, Pipe, inject, } from '@angular/core';
2
+ import { FormControl, FormsModule, ReactiveFormsModule, UntypedFormGroup, Validators, } from '@angular/forms';
3
+ import { IonButton, IonButtons, IonCardContent, IonContent, IonHeader, IonIcon, IonInput, IonItem, IonLabel, IonSegment, IonSegmentButton, IonSpinner, IonText, IonTextarea, IonTitle, IonToolbar, ModalController, ToastController, } from '@ionic/angular/standalone';
4
+ import { ContactTitlePipe, getContactTitle, } from '../../pipes/contact-title.pipe';
5
+ import { ErrorLogger } from '@sneat/core';
6
+ import { InviteService } from '@sneat/contactus-services';
7
+ import { throwError } from 'rxjs';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/forms";
10
+ export class EncodeSmsText {
11
+ transform(text) {
12
+ return encodeURIComponent(text);
13
+ }
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: EncodeSmsText, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
15
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.2.0", ngImport: i0, type: EncodeSmsText, isStandalone: true, name: "encodeSmsText" }); }
16
+ }
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: EncodeSmsText, decorators: [{
18
+ type: Pipe,
19
+ args: [{ name: 'encodeSmsText' }]
20
+ }] });
21
+ export class InviteModalComponent {
22
+ constructor() {
23
+ this.errorLogger = inject(ErrorLogger);
24
+ this.modalController = inject(ModalController);
25
+ this.toastController = inject(ToastController);
26
+ this.inviteService = inject(InviteService);
27
+ this.tab = 'email';
28
+ this.creatingInvite = false;
29
+ this.email = new FormControl('', [
30
+ Validators.required,
31
+ Validators.email,
32
+ ]);
33
+ this.phone = new FormControl('', Validators.required);
34
+ this.message = new FormControl('');
35
+ this.emailForm = new UntypedFormGroup({
36
+ email: this.email,
37
+ message: this.message,
38
+ });
39
+ this.smsForm = new UntypedFormGroup({
40
+ phone: this.phone,
41
+ message: this.message,
42
+ });
43
+ }
44
+ async close() {
45
+ await this.modalController.dismiss();
46
+ }
47
+ getInviteText(invite) {
48
+ if (!this.member) {
49
+ throw new Error('!this.member');
50
+ }
51
+ const receiver = getContactTitle(this.member);
52
+ let m = `Hi ${receiver}, please join our family @ Sneat.app - https://sneat.app/pwa/join/family?id=${invite.id}#pin=${invite.pin}`;
53
+ if (this.message.value) {
54
+ m += '\n\n' + this.message.value;
55
+ }
56
+ return m;
57
+ }
58
+ composeInvite(channel, protocol, address) {
59
+ this.creatingInvite = true;
60
+ switch (protocol) {
61
+ case 'sms':
62
+ this.smsForm.disable();
63
+ break;
64
+ case 'mailto':
65
+ this.emailForm.disable();
66
+ break;
67
+ }
68
+ this.createInvite({ channel, address }).subscribe({
69
+ next: (response) => {
70
+ const m = this.getInviteText(response.invite);
71
+ const body = encodeURIComponent(m);
72
+ const url = protocol +
73
+ `:${address}?subject=You+are+invited+to+join+${this.space?.type}&body=${body}`;
74
+ this.creatingInvite = false;
75
+ switch (protocol) {
76
+ case 'sms':
77
+ this.smsForm.enable();
78
+ break;
79
+ case 'mailto':
80
+ this.emailForm.enable();
81
+ break;
82
+ }
83
+ window.open(url);
84
+ },
85
+ error: (err) => {
86
+ this.creatingInvite = false;
87
+ switch (protocol) {
88
+ case 'sms':
89
+ this.smsForm.enable();
90
+ break;
91
+ case 'mailto':
92
+ this.emailForm.enable();
93
+ break;
94
+ }
95
+ this.errorLogger.logError(err, 'failed to create an invite for SMS channel');
96
+ },
97
+ });
98
+ }
99
+ composeEmail() {
100
+ this.composeInvite('email', 'mailto', this.email.value || '');
101
+ }
102
+ composeSMS() {
103
+ this.composeInvite('sms', 'sms', this.phone.value || '');
104
+ }
105
+ sendInvite() {
106
+ if (!this.space) {
107
+ this.errorLogger.logError('can not send invite without team context');
108
+ return;
109
+ }
110
+ if (!this.member) {
111
+ this.errorLogger.logError('can not send invite without member context');
112
+ return;
113
+ }
114
+ switch (this.tab) {
115
+ case 'email':
116
+ this.emailForm.markAllAsTouched();
117
+ break;
118
+ case 'sms':
119
+ this.smsForm.markAllAsTouched();
120
+ break;
121
+ }
122
+ if (this.tab === 'email' && !this.email.value) {
123
+ this.error = 'Email address is required';
124
+ return;
125
+ }
126
+ if (this.tab === 'sms' && !this.phone.value) {
127
+ this.error = 'Phone number is required';
128
+ return;
129
+ }
130
+ const address = this.tab === 'email' ? this.email.value : this.phone.value;
131
+ this.createInvite({
132
+ channel: this.tab,
133
+ address: address || '',
134
+ send: true,
135
+ }).subscribe({
136
+ next: async () => {
137
+ // console.log('personal invite created:', response);
138
+ await this.showToast('Invite has been created and will be sent shortly', 2000);
139
+ await this.modalController.dismiss();
140
+ },
141
+ error: this.errorLogger.logErrorHandler('failed to create an invite for a member'),
142
+ });
143
+ }
144
+ createInvite(to) {
145
+ if (!this.space) {
146
+ return throwError(() => 'can not create invite without team context');
147
+ }
148
+ if (!this.member) {
149
+ return throwError(() => 'can not create invite without member context');
150
+ }
151
+ const request = {
152
+ spaceID: this.space.id,
153
+ to: {
154
+ ...to,
155
+ memberID: this.member.id,
156
+ },
157
+ message: this.message.value || '',
158
+ };
159
+ return this.inviteService.createInviteForMember(request);
160
+ }
161
+ async copyLinkToClipboard() {
162
+ if (!this.link) {
163
+ return;
164
+ }
165
+ await navigator.clipboard.writeText(this.link);
166
+ await this.showToast('Invite link has been copied to your clipboard');
167
+ }
168
+ async copyLinkWithInviteTextToClipboard() {
169
+ if (!this.link) {
170
+ return;
171
+ }
172
+ await navigator.clipboard.writeText(this.link);
173
+ await this.showToast('Invite text with a link has been copied to your clipboard');
174
+ }
175
+ async showToast(message, duration = 1500) {
176
+ await this.modalController.dismiss();
177
+ const toast = await this.toastController.create({
178
+ message,
179
+ duration,
180
+ position: 'middle',
181
+ keyboardClose: true,
182
+ color: 'tertiary',
183
+ buttons: [{ role: 'cancel', icon: 'close' }],
184
+ });
185
+ await toast.present();
186
+ }
187
+ onTabChanged() {
188
+ if (this.tab === 'link' && !this.link) {
189
+ this.generateLink();
190
+ }
191
+ }
192
+ generateLink() {
193
+ // console.log('generateLink()', this.space, this.member);
194
+ if (!this.space) {
195
+ return;
196
+ }
197
+ if (!this.member) {
198
+ return;
199
+ }
200
+ const request = {
201
+ spaceID: this.space.id,
202
+ to: {
203
+ channel: 'link',
204
+ memberID: this.member.id,
205
+ },
206
+ message: this.message.value || '',
207
+ };
208
+ this.inviteService.getInviteLinkForMember(request).subscribe({
209
+ next: (response) => {
210
+ // console.log('response', response);
211
+ const { id, pin } = response.invite;
212
+ const host = location.host.startsWith('localhost:')
213
+ ? location.host
214
+ : 'sneat.app/pwa';
215
+ const protocol = location.host.startsWith('localhost:')
216
+ ? 'http'
217
+ : 'https';
218
+ this.link = `${protocol}://${host}/join/${this.space?.brief?.type}?id=${id}#pin=${pin}`;
219
+ },
220
+ error: this.errorLogger.logErrorHandler('failed to generate an invite link'),
221
+ });
222
+ }
223
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: InviteModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
224
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.0", type: InviteModalComponent, isStandalone: true, selector: "sneat-invite-modal", inputs: { space: "space", member: "member" }, providers: [InviteService], ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-title>\n @if (member) {\n Invite {{ member | contactTitle }} to join\n } @else {\n Invite member to join\n }\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"close()\">\n <ion-icon name=\"close-outline\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-segment [(ngModel)]=\"tab\" (ionChange)=\"onTabChanged()\">\n <ion-segment-button value=\"email\">By Email</ion-segment-button>\n <ion-segment-button value=\"sms\">By SMS</ion-segment-button>\n <ion-segment-button value=\"link\">Get link</ion-segment-button>\n </ion-segment>\n <form>\n <ion-item>\n @if (tab === \"email\") {\n <ion-input\n placeholder=\"email@address\"\n label=\"To\"\n labelPlacement=\"stacked\"\n [required]=\"true\"\n [formControl]=\"email\"\n />\n }\n @if (tab === \"sms\") {\n <ion-input\n label=\"Invite link\"\n labelPlacement=\"stacked\"\n placeholder=\"phone #\"\n [formControl]=\"phone\"\n />\n }\n @if (tab === \"link\") {\n <ion-input\n label=\"Invite link\"\n labelPlacement=\"stacked\"\n readonly=\"readonly\"\n [disabled]=\"!link\"\n [value]=\"link ?? 'Generating...'\"\n [color]=\"link ? 'primary' : 'medium'\"\n />\n @if (link) {\n <ion-buttons slot=\"end\">\n <ion-button color=\"medium\" (click)=\"copyLinkToClipboard()\">\n <ion-icon name=\"copy-outline\" />\n </ion-button>\n </ion-buttons>\n } @else {\n <ion-spinner color=\"warning\" slot=\"end\" name=\"lines\"></ion-spinner>\n }\n }\n </ion-item>\n <ion-item>\n <ion-textarea\n [formControl]=\"message\"\n maxlength=\"100\"\n label=\"Message\"\n labelPlacement=\"stacked\"\n />\n </ion-item>\n @switch (tab) {\n @case (\"email\") {\n <ion-card-content>\n <p>\n @if (!email.value) {\n <ion-text color=\"danger\"\n >Email address is required for sending an invite.</ion-text\n >\n }\n @if (email.value && !email.valid) {\n <ion-text color=\"danger\">\n A valid email address is required for sending an invite.\n </ion-text>\n }\n </p>\n <ion-button (click)=\"sendInvite()\" [disabled]=\"!email.valid\">\n <ion-icon name=\"mail-outline\" slot=\"start\" />\n <ion-label>Send invite</ion-label>\n </ion-button>\n <ion-button\n [disabled]=\"true\"\n fill=\"clear\"\n color=\"medium\"\n style=\"text-transform: none\"\n >or\n </ion-button>\n <ion-button\n (click)=\"composeEmail()\"\n fill=\"outline\"\n [disabled]=\"!email.valid\"\n >\n <ion-icon name=\"mail-outline\" slot=\"start\" />\n <ion-label>Compose email</ion-label>\n </ion-button>\n </ion-card-content>\n }\n @case (\"sms\") {\n <ion-card-content>\n <ion-button\n style=\"text-transform: none\"\n fill=\"outline\"\n (click)=\"composeSMS()\"\n >\n <ion-icon name=\"phone-portrait-outline\" slot=\"start\" />\n <ion-label>Compose SMS</ion-label>\n @if (creatingInvite) {\n <ion-spinner\n name=\"lines-small\"\n color=\"medium\"\n class=\"ion-margin-start\"\n slot=\"end\"\n />\n }\n </ion-button>\n <p>\n <ion-text color=\"medium\"\n >This works on mobiles or if your computer supports sending SMS\n </ion-text>\n </p>\n </ion-card-content>\n }\n @case (\"link\") {\n <ion-card-content>\n <ion-button\n fill=\"outline\"\n (click)=\"copyLinkWithInviteTextToClipboard()\"\n [disabled]=\"creatingInvite || !link\"\n >\n <ion-icon slot=\"start\" name=\"copy-outline\" />\n <ion-label style=\"text-transform: none\"\n >Copy invite text with a link\n </ion-label>\n </ion-button>\n </ion-card-content>\n }\n }\n\n @if (error) {\n <ion-card-content>\n <ion-text class=\"ion-margin\" color=\"danger\">{{ error }}</ion-text>\n </ion-card-content>\n }\n </form>\n</ion-content>\n", dependencies: [{ kind: "component", type: IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { 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: IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: IonSegment, selector: "ion-segment", inputs: ["color", "disabled", "mode", "scrollable", "selectOnFocus", "swipeGesture", "value"] }, { kind: "component", type: IonSegmentButton, selector: "ion-segment-button", inputs: ["contentId", "disabled", "layout", "mode", "type", "value"] }, { kind: "component", type: IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: IonInput, selector: "ion-input", inputs: ["accept", "autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "size", "spellcheck", "step", "type", "value"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],[formArray],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]):not([formArray]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: IonTextarea, selector: "ion-textarea", inputs: ["autoGrow", "autocapitalize", "autofocus", "clearOnEdit", "color", "cols", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "maxlength", "minlength", "mode", "name", "placeholder", "readonly", "required", "rows", "shape", "spellcheck", "value", "wrap"] }, { kind: "component", type: IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "pipe", type: ContactTitlePipe, name: "contactTitle" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
225
+ }
226
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.0", ngImport: i0, type: InviteModalComponent, decorators: [{
227
+ type: Component,
228
+ args: [{ imports: [
229
+ IonHeader,
230
+ IonToolbar,
231
+ IonTitle,
232
+ IonButtons,
233
+ IonButton,
234
+ IonIcon,
235
+ IonContent,
236
+ IonSegment,
237
+ IonSegmentButton,
238
+ IonItem,
239
+ IonInput,
240
+ ReactiveFormsModule,
241
+ FormsModule,
242
+ IonCardContent,
243
+ IonTextarea,
244
+ IonLabel,
245
+ IonText,
246
+ IonSpinner,
247
+ ContactTitlePipe,
248
+ ], providers: [InviteService], changeDetection: ChangeDetectionStrategy.OnPush, selector: 'sneat-invite-modal', template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-title>\n @if (member) {\n Invite {{ member | contactTitle }} to join\n } @else {\n Invite member to join\n }\n </ion-title>\n <ion-buttons slot=\"end\">\n <ion-button (click)=\"close()\">\n <ion-icon name=\"close-outline\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <ion-segment [(ngModel)]=\"tab\" (ionChange)=\"onTabChanged()\">\n <ion-segment-button value=\"email\">By Email</ion-segment-button>\n <ion-segment-button value=\"sms\">By SMS</ion-segment-button>\n <ion-segment-button value=\"link\">Get link</ion-segment-button>\n </ion-segment>\n <form>\n <ion-item>\n @if (tab === \"email\") {\n <ion-input\n placeholder=\"email@address\"\n label=\"To\"\n labelPlacement=\"stacked\"\n [required]=\"true\"\n [formControl]=\"email\"\n />\n }\n @if (tab === \"sms\") {\n <ion-input\n label=\"Invite link\"\n labelPlacement=\"stacked\"\n placeholder=\"phone #\"\n [formControl]=\"phone\"\n />\n }\n @if (tab === \"link\") {\n <ion-input\n label=\"Invite link\"\n labelPlacement=\"stacked\"\n readonly=\"readonly\"\n [disabled]=\"!link\"\n [value]=\"link ?? 'Generating...'\"\n [color]=\"link ? 'primary' : 'medium'\"\n />\n @if (link) {\n <ion-buttons slot=\"end\">\n <ion-button color=\"medium\" (click)=\"copyLinkToClipboard()\">\n <ion-icon name=\"copy-outline\" />\n </ion-button>\n </ion-buttons>\n } @else {\n <ion-spinner color=\"warning\" slot=\"end\" name=\"lines\"></ion-spinner>\n }\n }\n </ion-item>\n <ion-item>\n <ion-textarea\n [formControl]=\"message\"\n maxlength=\"100\"\n label=\"Message\"\n labelPlacement=\"stacked\"\n />\n </ion-item>\n @switch (tab) {\n @case (\"email\") {\n <ion-card-content>\n <p>\n @if (!email.value) {\n <ion-text color=\"danger\"\n >Email address is required for sending an invite.</ion-text\n >\n }\n @if (email.value && !email.valid) {\n <ion-text color=\"danger\">\n A valid email address is required for sending an invite.\n </ion-text>\n }\n </p>\n <ion-button (click)=\"sendInvite()\" [disabled]=\"!email.valid\">\n <ion-icon name=\"mail-outline\" slot=\"start\" />\n <ion-label>Send invite</ion-label>\n </ion-button>\n <ion-button\n [disabled]=\"true\"\n fill=\"clear\"\n color=\"medium\"\n style=\"text-transform: none\"\n >or\n </ion-button>\n <ion-button\n (click)=\"composeEmail()\"\n fill=\"outline\"\n [disabled]=\"!email.valid\"\n >\n <ion-icon name=\"mail-outline\" slot=\"start\" />\n <ion-label>Compose email</ion-label>\n </ion-button>\n </ion-card-content>\n }\n @case (\"sms\") {\n <ion-card-content>\n <ion-button\n style=\"text-transform: none\"\n fill=\"outline\"\n (click)=\"composeSMS()\"\n >\n <ion-icon name=\"phone-portrait-outline\" slot=\"start\" />\n <ion-label>Compose SMS</ion-label>\n @if (creatingInvite) {\n <ion-spinner\n name=\"lines-small\"\n color=\"medium\"\n class=\"ion-margin-start\"\n slot=\"end\"\n />\n }\n </ion-button>\n <p>\n <ion-text color=\"medium\"\n >This works on mobiles or if your computer supports sending SMS\n </ion-text>\n </p>\n </ion-card-content>\n }\n @case (\"link\") {\n <ion-card-content>\n <ion-button\n fill=\"outline\"\n (click)=\"copyLinkWithInviteTextToClipboard()\"\n [disabled]=\"creatingInvite || !link\"\n >\n <ion-icon slot=\"start\" name=\"copy-outline\" />\n <ion-label style=\"text-transform: none\"\n >Copy invite text with a link\n </ion-label>\n </ion-button>\n </ion-card-content>\n }\n }\n\n @if (error) {\n <ion-card-content>\n <ion-text class=\"ion-margin\" color=\"danger\">{{ error }}</ion-text>\n </ion-card-content>\n }\n </form>\n</ion-content>\n" }]
249
+ }], propDecorators: { space: [{
250
+ type: Input,
251
+ args: [{ required: true }]
252
+ }], member: [{
253
+ type: Input
254
+ }] } });
255
+ //# sourceMappingURL=invite-modal.component.js.map