@verdocs/web-sdk 2.2.5 → 2.2.7

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 (152) hide show
  1. package/dist/cjs/{Primitives-be5088cb.js → Primitives-a59870a2.js} +20 -0
  2. package/dist/cjs/{Profiles-244e8254.js → Profiles-54271244.js} +15 -0
  3. package/dist/cjs/loader.cjs.js +1 -1
  4. package/dist/cjs/verdocs-activity-box.cjs.entry.js +1 -1
  5. package/dist/cjs/verdocs-auth.cjs.entry.js +1 -1
  6. package/dist/cjs/verdocs-button_3.cjs.entry.js +113 -0
  7. package/dist/cjs/{verdocs-checkbox_4.cjs.entry.js → verdocs-checkbox_3.cjs.entry.js} +0 -38
  8. package/dist/cjs/verdocs-dialog_3.cjs.entry.js +74 -0
  9. package/dist/cjs/verdocs-envelopes-list.cjs.entry.js +1 -1
  10. package/dist/cjs/verdocs-pagination_3.cjs.entry.js +1 -1
  11. package/dist/cjs/verdocs-settings-api-keys_4.cjs.entry.js +304 -28
  12. package/dist/cjs/verdocs-sign.cjs.entry.js +1 -1
  13. package/dist/cjs/verdocs-template-fields_4.cjs.entry.js +1 -1
  14. package/dist/cjs/verdocs-templates-list.cjs.entry.js +1 -1
  15. package/dist/cjs/verdocs-view.cjs.entry.js +10 -3
  16. package/dist/cjs/verdocs-web-sdk.cjs.js +1 -1
  17. package/dist/collection/collection-manifest.json +1 -0
  18. package/dist/collection/components/controls/verdocs-table/verdocs-table.css +13 -8
  19. package/dist/collection/components/controls/verdocs-tabs/verdocs-tabs.css +33 -0
  20. package/dist/collection/components/controls/verdocs-tabs/verdocs-tabs.js +102 -0
  21. package/dist/collection/components/controls/verdocs-tabs/verdocs-tabs.stories.js +25 -0
  22. package/dist/collection/components/controls/verdocs-text-input/verdocs-text-input.css +15 -0
  23. package/dist/collection/components/controls/verdocs-text-input/verdocs-text-input.js +30 -2
  24. package/dist/collection/components/dialogs/verdocs-dialog/verdocs-dialog.css +21 -5
  25. package/dist/collection/components/dialogs/verdocs-dialog/verdocs-dialog.js +3 -2
  26. package/dist/collection/components/embeds/verdocs-view/verdocs-view.js +9 -2
  27. package/dist/collection/components/settings/verdocs-settings-api-keys/verdocs-settings-api-keys.css +27 -18
  28. package/dist/collection/components/settings/verdocs-settings-api-keys/verdocs-settings-api-keys.js +120 -15
  29. package/dist/collection/components/settings/verdocs-settings-members/verdocs-settings-members.css +31 -7
  30. package/dist/collection/components/settings/verdocs-settings-members/verdocs-settings-members.js +137 -10
  31. package/dist/components/Members.js +17 -0
  32. package/dist/components/Primitives.js +18 -1
  33. package/dist/components/Profiles.js +15 -1
  34. package/dist/components/index.d.ts +1 -0
  35. package/dist/components/index.js +1 -0
  36. package/dist/components/verdocs-dialog.js +1 -36
  37. package/dist/components/verdocs-dialog2.js +39 -0
  38. package/dist/components/verdocs-settings-api-keys2.js +191 -19
  39. package/dist/components/verdocs-settings-members2.js +189 -22
  40. package/dist/components/verdocs-settings-profile2.js +1 -1
  41. package/dist/components/verdocs-settings.js +30 -18
  42. package/dist/components/verdocs-table2.js +1 -1
  43. package/dist/components/verdocs-tabs.d.ts +11 -0
  44. package/dist/components/verdocs-tabs.js +6 -0
  45. package/dist/components/verdocs-tabs2.js +46 -0
  46. package/dist/components/verdocs-text-input2.js +14 -3
  47. package/dist/components/verdocs-view2.js +9 -2
  48. package/dist/docs.json +147 -9
  49. package/dist/esm/Primitives-8fe93caf.js +37 -0
  50. package/dist/esm/{Profiles-7645e6f1.js → Profiles-4cc942ef.js} +15 -1
  51. package/dist/esm/loader.js +1 -1
  52. package/dist/esm/verdocs-activity-box.entry.js +1 -1
  53. package/dist/esm/verdocs-auth.entry.js +1 -1
  54. package/dist/esm/verdocs-button_3.entry.js +107 -0
  55. package/dist/esm/verdocs-checkbox_3.entry.js +50 -0
  56. package/dist/esm/verdocs-dialog_3.entry.js +68 -0
  57. package/dist/esm/verdocs-envelopes-list.entry.js +1 -1
  58. package/dist/esm/verdocs-pagination_3.entry.js +1 -1
  59. package/dist/esm/verdocs-settings-api-keys_4.entry.js +304 -28
  60. package/dist/esm/verdocs-sign.entry.js +1 -1
  61. package/dist/esm/verdocs-template-fields_4.entry.js +1 -1
  62. package/dist/esm/verdocs-templates-list.entry.js +1 -1
  63. package/dist/esm/verdocs-view.entry.js +10 -3
  64. package/dist/esm/verdocs-web-sdk.js +1 -1
  65. package/dist/esm-es5/Primitives-8fe93caf.js +1 -0
  66. package/dist/esm-es5/Profiles-4cc942ef.js +1 -0
  67. package/dist/esm-es5/loader.js +1 -1
  68. package/dist/esm-es5/verdocs-activity-box.entry.js +1 -1
  69. package/dist/esm-es5/verdocs-auth.entry.js +1 -1
  70. package/dist/esm-es5/verdocs-button_3.entry.js +1 -0
  71. package/dist/esm-es5/verdocs-checkbox_3.entry.js +1 -0
  72. package/dist/esm-es5/verdocs-dialog_3.entry.js +1 -0
  73. package/dist/esm-es5/verdocs-envelopes-list.entry.js +1 -1
  74. package/dist/esm-es5/verdocs-pagination_3.entry.js +1 -1
  75. package/dist/esm-es5/verdocs-settings-api-keys_4.entry.js +1 -1
  76. package/dist/esm-es5/verdocs-sign.entry.js +1 -1
  77. package/dist/esm-es5/verdocs-template-fields_4.entry.js +1 -1
  78. package/dist/esm-es5/verdocs-templates-list.entry.js +1 -1
  79. package/dist/esm-es5/verdocs-view.entry.js +1 -1
  80. package/dist/esm-es5/verdocs-web-sdk.js +1 -1
  81. package/dist/types/components/controls/verdocs-tabs/verdocs-tabs.d.ts +31 -0
  82. package/dist/types/components/controls/verdocs-tabs/verdocs-tabs.stories.d.ts +7 -0
  83. package/dist/types/components/controls/verdocs-text-input/verdocs-text-input.d.ts +7 -0
  84. package/dist/types/components/settings/verdocs-settings-api-keys/verdocs-settings-api-keys.d.ts +12 -1
  85. package/dist/types/components/settings/verdocs-settings-members/verdocs-settings-members.d.ts +17 -1
  86. package/dist/types/components.d.ts +46 -0
  87. package/dist/verdocs-web-sdk/{p-68487ce7.system.entry.js → p-02bbfba3.system.entry.js} +1 -1
  88. package/dist/verdocs-web-sdk/p-0578c85b.system.entry.js +1 -0
  89. package/dist/verdocs-web-sdk/{p-4c9d9cd6.entry.js → p-0899dd63.entry.js} +1 -1
  90. package/dist/verdocs-web-sdk/p-19a0fdf2.entry.js +1 -0
  91. package/dist/verdocs-web-sdk/{p-690a485e.system.entry.js → p-1b10240a.system.entry.js} +1 -1
  92. package/dist/verdocs-web-sdk/p-3a0c5966.system.entry.js +1 -0
  93. package/dist/verdocs-web-sdk/p-3bcd86ea.system.js +1 -0
  94. package/dist/verdocs-web-sdk/{p-4f0c253e.system.entry.js → p-3cf4bd84.system.entry.js} +1 -1
  95. package/dist/verdocs-web-sdk/p-4f8dbb97.entry.js +1 -0
  96. package/dist/verdocs-web-sdk/p-5e808a0b.js +1 -0
  97. package/dist/verdocs-web-sdk/p-647cdb84.system.js +1 -1
  98. package/dist/verdocs-web-sdk/p-6572cc71.system.entry.js +1 -0
  99. package/dist/verdocs-web-sdk/{p-0d590026.entry.js → p-7967b361.entry.js} +1 -1
  100. package/dist/verdocs-web-sdk/p-803924f3.entry.js +1 -0
  101. package/dist/verdocs-web-sdk/p-937cd171.system.entry.js +1 -0
  102. package/dist/verdocs-web-sdk/p-96ca789b.system.entry.js +1 -0
  103. package/dist/verdocs-web-sdk/{p-075dc36d.js → p-983da2f6.js} +1 -1
  104. package/dist/verdocs-web-sdk/{p-e9d2b68a.entry.js → p-a2b83969.entry.js} +1 -1
  105. package/dist/verdocs-web-sdk/{p-043eab3f.system.entry.js → p-c556a377.system.entry.js} +1 -1
  106. package/dist/verdocs-web-sdk/p-cb9985fe.entry.js +1 -0
  107. package/dist/verdocs-web-sdk/p-cfead4df.entry.js +1 -0
  108. package/dist/verdocs-web-sdk/{p-dd5460ea.entry.js → p-d277233c.entry.js} +1 -1
  109. package/dist/verdocs-web-sdk/{p-b3e0db4b.system.entry.js → p-e0a212a1.system.entry.js} +1 -1
  110. package/dist/verdocs-web-sdk/{p-b4ac7a21.entry.js → p-ed38d3d2.entry.js} +1 -1
  111. package/dist/verdocs-web-sdk/p-f65a1b9e.system.js +1 -0
  112. package/dist/verdocs-web-sdk/{p-986f78e3.entry.js → p-f7fecffd.entry.js} +1 -1
  113. package/dist/verdocs-web-sdk/{p-1d7846c9.entry.js → p-fb609f37.entry.js} +1 -1
  114. package/dist/verdocs-web-sdk/{p-bf8bded0.system.entry.js → p-fb71f28a.system.entry.js} +1 -1
  115. package/dist/verdocs-web-sdk/{p-febebe69.system.entry.js → p-ff850808.system.entry.js} +1 -1
  116. package/dist/verdocs-web-sdk/verdocs-web-sdk.esm.js +1 -1
  117. package/package.json +2 -2
  118. package/dist/cjs/verdocs-button.cjs.entry.js +0 -26
  119. package/dist/cjs/verdocs-dialog.cjs.entry.js +0 -27
  120. package/dist/cjs/verdocs-help-icon.cjs.entry.js +0 -45
  121. package/dist/cjs/verdocs-table.cjs.entry.js +0 -27
  122. package/dist/components/Strings.js +0 -6
  123. package/dist/esm/Primitives-054bc6e5.js +0 -20
  124. package/dist/esm/verdocs-button.entry.js +0 -22
  125. package/dist/esm/verdocs-checkbox_4.entry.js +0 -87
  126. package/dist/esm/verdocs-dialog.entry.js +0 -23
  127. package/dist/esm/verdocs-help-icon.entry.js +0 -41
  128. package/dist/esm/verdocs-table.entry.js +0 -23
  129. package/dist/esm-es5/Primitives-054bc6e5.js +0 -1
  130. package/dist/esm-es5/Profiles-7645e6f1.js +0 -1
  131. package/dist/esm-es5/verdocs-button.entry.js +0 -1
  132. package/dist/esm-es5/verdocs-checkbox_4.entry.js +0 -1
  133. package/dist/esm-es5/verdocs-dialog.entry.js +0 -1
  134. package/dist/esm-es5/verdocs-help-icon.entry.js +0 -1
  135. package/dist/esm-es5/verdocs-table.entry.js +0 -1
  136. package/dist/verdocs-web-sdk/p-144d4ed1.system.entry.js +0 -1
  137. package/dist/verdocs-web-sdk/p-268a29a9.system.entry.js +0 -1
  138. package/dist/verdocs-web-sdk/p-40361f22.entry.js +0 -1
  139. package/dist/verdocs-web-sdk/p-606e0405.entry.js +0 -1
  140. package/dist/verdocs-web-sdk/p-7213a107.system.entry.js +0 -1
  141. package/dist/verdocs-web-sdk/p-7291906c.js +0 -1
  142. package/dist/verdocs-web-sdk/p-84f9fe5d.entry.js +0 -1
  143. package/dist/verdocs-web-sdk/p-a69359d3.entry.js +0 -1
  144. package/dist/verdocs-web-sdk/p-ab26744f.system.entry.js +0 -1
  145. package/dist/verdocs-web-sdk/p-c69b5a99.system.entry.js +0 -1
  146. package/dist/verdocs-web-sdk/p-cbebc039.system.js +0 -1
  147. package/dist/verdocs-web-sdk/p-d309ef6f.entry.js +0 -1
  148. package/dist/verdocs-web-sdk/p-d50523fd.system.js +0 -1
  149. package/dist/verdocs-web-sdk/p-d734ced3.system.entry.js +0 -1
  150. package/dist/verdocs-web-sdk/p-db4cfbfe.entry.js +0 -1
  151. package/dist/verdocs-web-sdk/p-f8a2988e.entry.js +0 -1
  152. package/dist/verdocs-web-sdk/p-fbabbcea.system.entry.js +0 -1
@@ -1,10 +1,14 @@
1
- import { Members } from '@verdocs/js-sdk/Organizations';
1
+ import { Profiles } from '@verdocs/js-sdk/Users';
2
2
  import { VerdocsEndpoint } from '@verdocs/js-sdk';
3
+ import { capitalize } from '@verdocs/js-sdk/Utils/Strings';
4
+ import { Members, Invitations } from '@verdocs/js-sdk/Organizations';
5
+ import { formatFullName, formatInitials } from '@verdocs/js-sdk/Utils/Primitives';
3
6
  import { h, Host } from '@stencil/core';
4
7
  import { VerdocsToast } from '../../../utils/Toast';
5
8
  import { SDKError } from '../../../utils/errors';
6
- import { capitalize } from '@verdocs/js-sdk/Utils/Strings';
9
+ import { format } from 'date-fns';
7
10
  const TrashIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0" /></svg>`;
11
+ const ArrowPathIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" stroke-width="1.5"><path stroke-linecap="round" stroke-linejoin="round" d="M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0l3.181 3.183a8.25 8.25 0 0013.803-3.7M4.031 9.865a8.25 8.25 0 0113.803-3.7l3.181 3.182m0-4.991v4.99" /></svg>`;
8
12
  const getRoleLabel = (roles) => {
9
13
  if (roles.find(role => role.name === 'owner') !== undefined)
10
14
  return 'Owner';
@@ -36,6 +40,16 @@ export class VerdocsSettingsMembers {
36
40
  constructor() {
37
41
  this.endpoint = VerdocsEndpoint.getDefault();
38
42
  this.members = [];
43
+ this.invited = [];
44
+ this.roles = [];
45
+ this.selectedTab = 0;
46
+ this.invitingMember = false;
47
+ this.newEmailAddress = '';
48
+ this.newRoleId = '';
49
+ this.submitting = false;
50
+ this.deletingInvitation = null;
51
+ this.resendingInvitation = null;
52
+ this.deletingMember = null;
39
53
  }
40
54
  componentWillLoad() {
41
55
  this.endpoint.loadSession();
@@ -45,31 +59,134 @@ export class VerdocsSettingsMembers {
45
59
  }
46
60
  }
47
61
  async componentDidLoad() {
48
- var _a, _b, _c;
62
+ this.loadMembers().catch((e) => console.log('Unknown Error', e));
63
+ }
64
+ async loadMembers() {
65
+ var _a, _b, _c, _d;
49
66
  try {
50
- this.members = await Members.getMembers(this.endpoint, this.endpoint.session.organization_id);
67
+ const [roles, members, invites] = await Promise.all([
68
+ Profiles.getRoles(this.endpoint),
69
+ Members.getMembers(this.endpoint, this.endpoint.session.organization_id),
70
+ Invitations.getInvitations(this.endpoint, this.endpoint.session.organization_id),
71
+ ]);
72
+ this.roles = roles;
73
+ this.members = members;
74
+ this.invited = invites;
75
+ this.newRoleId = ((_a = roles.find(role => role.name === 'member')) === null || _a === void 0 ? void 0 : _a.id) || '';
51
76
  }
52
77
  catch (e) {
53
- (_a = this.sdkError) === null || _a === void 0 ? void 0 : _a.emit(new SDKError(e.message, (_b = e.response) === null || _b === void 0 ? void 0 : _b.status, (_c = e.response) === null || _c === void 0 ? void 0 : _c.data));
78
+ (_b = this.sdkError) === null || _b === void 0 ? void 0 : _b.emit(new SDKError(e.message, (_c = e.response) === null || _c === void 0 ? void 0 : _c.status, (_d = e.response) === null || _d === void 0 ? void 0 : _d.data));
54
79
  VerdocsToast('Unable to load members. Please try again later');
55
80
  }
56
81
  }
82
+ async handleInviteMember() {
83
+ this.submitting = true;
84
+ Invitations.createInvitation(VerdocsEndpoint.getDefault(), this.endpoint.session.organization_id, {
85
+ email: this.newEmailAddress,
86
+ role_id: this.newRoleId,
87
+ organization_id: this.endpoint.session.organization_id,
88
+ })
89
+ .then(r => {
90
+ console.log('[SETTINGS] Invited member', r);
91
+ this.invitingMember = false;
92
+ this.submitting = false;
93
+ this.newRoleId = '';
94
+ this.newEmailAddress = '';
95
+ VerdocsToast('Invitation sent!', { style: 'success' });
96
+ this.loadMembers();
97
+ })
98
+ .catch(e => {
99
+ console.log('[SETTINGS] Unable to invite member', e);
100
+ this.invitingMember = false;
101
+ this.submitting = false;
102
+ this.newRoleId = '';
103
+ this.newEmailAddress = '';
104
+ VerdocsToast('Unable to invite member. Please try again later', { style: 'error' });
105
+ });
106
+ }
107
+ async handleDeleteMember() {
108
+ this.submitting = true;
109
+ Members.deleteMember(VerdocsEndpoint.getDefault(), this.deletingMember.organization_id, this.deletingMember.email)
110
+ .then(() => {
111
+ this.submitting = false;
112
+ this.deletingMember = null;
113
+ VerdocsToast('The member has been deleted.', { style: 'success' });
114
+ this.loadMembers();
115
+ })
116
+ .catch(e => {
117
+ this.submitting = false;
118
+ this.deletingMember = null;
119
+ console.log('Delete error', e);
120
+ VerdocsToast('Unable to cancel invitation. Please try again later', { style: 'error' });
121
+ });
122
+ }
123
+ async handleDeleteInvitation() {
124
+ this.submitting = true;
125
+ Invitations.deleteInvitation(VerdocsEndpoint.getDefault(), this.deletingInvitation.organization_id, this.deletingInvitation.email)
126
+ .then(() => {
127
+ this.submitting = false;
128
+ this.deletingInvitation = null;
129
+ VerdocsToast('The invitation has been cancelled.', { style: 'success' });
130
+ this.loadMembers();
131
+ })
132
+ .catch(e => {
133
+ this.submitting = false;
134
+ this.deletingInvitation = null;
135
+ console.log('Delete error', e);
136
+ VerdocsToast('Unable to cancel invitation. Please try again later', { style: 'error' });
137
+ });
138
+ }
139
+ async handleResendInvitation() {
140
+ this.submitting = true;
141
+ Invitations.resendInvitation(VerdocsEndpoint.getDefault(), this.resendingInvitation.organization_id, this.resendingInvitation.email)
142
+ .then(() => {
143
+ this.submitting = false;
144
+ this.resendingInvitation = null;
145
+ VerdocsToast('The invitation has been resent.', { style: 'success' });
146
+ this.loadMembers();
147
+ })
148
+ .catch(e => {
149
+ this.submitting = false;
150
+ this.resendingInvitation = null;
151
+ console.log('REsend error', e);
152
+ VerdocsToast('Unable to resend invitation. Please try again later', { style: 'error' });
153
+ });
154
+ }
57
155
  render() {
58
156
  if (!this.endpoint.session) {
59
157
  console.log('[SETTINGS] Must be authenticated');
60
158
  return h(Host, { class: "authentication-required" }, "Must be authenticated");
61
159
  }
62
- return (h(Host, null, h("h1", null, "Members"), h("verdocs-table", { data: this.members, columns: [
160
+ const roleOptions = this.roles.map(role => ({ label: getRoleLabel([{ name: role.name }]), value: role.id }));
161
+ return (h(Host, null, h("verdocs-tabs", { tabs: [{ label: `Members (${this.members.length})` }, { label: `Pending Invitations (${this.invited.length})` }], onSelectTab: e => (this.selectedTab = e.detail.index) }), this.selectedTab === 0 && (h("verdocs-table", { data: this.members, columns: [
63
162
  {
64
163
  id: 'name',
65
164
  renderHeader: () => 'Member',
66
- renderCell: (_, row) => (h("div", { style: { display: 'flex', flexDirection: 'row', gap: '10px', alignItems: 'center' } }, h("div", { class: "role", style: { backgroundColor: getRoleColor(row.roles) } }, row.first_name.charAt(0), " ", row.last_name.charAt(0)), h("span", null, capitalize(row.first_name), " ", capitalize(row.last_name)))),
165
+ renderCell: (_, row) => (h("div", { style: { display: 'flex', flexDirection: 'row', gap: '10px', alignItems: 'center' } }, h("div", { class: "role", style: { backgroundColor: getRoleColor(row.roles) } }, formatInitials(row)), h("span", null, formatFullName(row)))),
67
166
  },
68
167
  { id: 'email', header: 'E-mail Address' },
69
168
  { id: 'phone', header: 'Phone Number' },
70
169
  { id: 'roles', header: 'Role', renderCell: (_, row) => `${getRoleLabel(row.roles)}` },
71
- { id: 'actions', header: 'Actions', renderCell: () => h("span", { innerHTML: TrashIcon, onClick: () => { } }) },
72
- ] }), h("verdocs-button", { label: "Invite New Member", size: "normal", disabled: true })));
170
+ {
171
+ id: 'actions',
172
+ header: 'Actions',
173
+ renderCell: (_, row) => h("div", null, row.id !== this.endpoint.session.profile_id && h("div", { innerHTML: TrashIcon, onClick: () => (this.deletingMember = row) })),
174
+ },
175
+ ] })), this.selectedTab === 1 && (h("verdocs-table", { data: this.invited, columns: [
176
+ { id: 'email', header: 'E-mail Address' },
177
+ { id: 'generated_at', header: 'Invited', renderCell: (_, row) => h("div", null, format(new Date(row.generated_at), 'MMM d, Y')) },
178
+ { id: 'role_id', header: 'Role', renderCell: (_, row) => { var _a; return h("div", null, getRoleLabel([{ name: (_a = this.roles.find(r => r.id === row.role_id)) === null || _a === void 0 ? void 0 : _a.name }])); } },
179
+ { id: 'status', header: 'Status', renderCell: (_, row) => h("div", null, capitalize(row.status)) },
180
+ {
181
+ id: 'actions',
182
+ header: 'Actions',
183
+ renderCell: (_, row) => (h("div", null, h("div", { innerHTML: TrashIcon, onClick: () => (this.deletingInvitation = row) }), h("div", { innerHTML: ArrowPathIcon, onClick: () => (this.resendingInvitation = row) }))),
184
+ },
185
+ ] })), h("verdocs-button", { label: "Invite New Member", size: "normal", disabled: this.submitting, onClick: () => (this.invitingMember = true) }), this.invitingMember && (h("verdocs-dialog", { onExit: () => (this.invitingMember = false) }, h("div", { slot: "title", class: "heading" }, "Invite New Member"), h("div", { class: "content" }, h("verdocs-text-input", { label: "E-mail Address", placeholder: "Enter the user's email address...", id: "verdocs-invite-email", value: this.newEmailAddress, autocomplete: "off", required: true, onInput: (e) => (this.newEmailAddress = e.target.value), onFocusout: (e) => {
186
+ this.newEmailAddress = e.target.value.trim();
187
+ } }), h("div", { style: { marginBottom: '20px' } }), h("verdocs-select-input", { options: roleOptions, label: "Role", onInput: (e) => {
188
+ this.newRoleId = e.target.value;
189
+ } }), h("div", { class: "buttons" }, h("verdocs-button", { variant: "outline", size: "small", label: "Cancel", disabled: this.submitting, onClick: () => (this.invitingMember = false) }), h("verdocs-button", { size: "small", label: "OK", disabled: this.submitting || !this.newEmailAddress || !this.newRoleId, onClick: () => this.handleInviteMember() }))))), this.deletingMember && (h("verdocs-dialog", { onExit: () => (this.deletingMember = null) }, h("div", { slot: "title", class: "heading" }, "Delete Member?"), h("div", { class: "content" }, h("p", null, "Are you sure you want to delete this member? This action cannot be undone."), h("div", { class: "buttons" }, h("verdocs-button", { variant: "outline", size: "small", disabled: this.submitting, label: "Cancel", onClick: () => (this.deletingMember = null) }), h("verdocs-button", { size: "small", label: "OK", disabled: this.submitting, onClick: () => this.handleDeleteMember() }))))), this.deletingInvitation && (h("verdocs-dialog", { onExit: () => (this.deletingInvitation = null) }, h("div", { slot: "title", class: "heading" }, "Cancel Invitation?"), h("div", { class: "content" }, h("p", null, "Are you sure you want to cancel this invitation? This action cannot be undone."), h("div", { class: "buttons" }, h("verdocs-button", { variant: "outline", size: "small", disabled: this.submitting, label: "Cancel", onClick: () => (this.deletingInvitation = null) }), h("verdocs-button", { size: "small", label: "OK", disabled: this.submitting, onClick: () => this.handleDeleteInvitation() }))))), this.resendingInvitation && (h("verdocs-dialog", { onExit: () => (this.resendingInvitation = null) }, h("div", { slot: "title", class: "heading" }, "Resend Invitation?"), h("div", { class: "content" }, h("p", null, "The user will receive an email reminder to join your organization."), h("div", { class: "buttons" }, h("verdocs-button", { variant: "outline", size: "small", disabled: this.submitting, label: "Cancel", onClick: () => (this.resendingInvitation = null) }), h("verdocs-button", { size: "small", label: "OK", disabled: this.submitting, onClick: () => this.handleResendInvitation() })))))));
73
190
  }
74
191
  static get is() { return "verdocs-settings-members"; }
75
192
  static get originalStyleUrls() {
@@ -109,7 +226,17 @@ export class VerdocsSettingsMembers {
109
226
  }
110
227
  static get states() {
111
228
  return {
112
- "members": {}
229
+ "members": {},
230
+ "invited": {},
231
+ "roles": {},
232
+ "selectedTab": {},
233
+ "invitingMember": {},
234
+ "newEmailAddress": {},
235
+ "newRoleId": {},
236
+ "submitting": {},
237
+ "deletingInvitation": {},
238
+ "resendingInvitation": {},
239
+ "deletingMember": {}
113
240
  };
114
241
  }
115
242
  static get events() {
@@ -0,0 +1,17 @@
1
+ /**
2
+ * An Organization Member (aka Profile) is an individual user with access to an organization.
3
+ *
4
+ * @module
5
+ */
6
+ var getMembers = function (endpoint, organizationId) {
7
+ return endpoint.api //
8
+ .get("/organizations/".concat(organizationId, "/profiles"))
9
+ .then(function (r) { return r.data; });
10
+ };
11
+ var deleteMember = function (endpoint, organizationId, profileId) {
12
+ return endpoint.api //
13
+ .delete("/organizations/".concat(organizationId, "/profiles/").concat(profileId))
14
+ .then(function (r) { return r.data; });
15
+ };
16
+
17
+ export { deleteMember as d, getMembers as g };
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Capitalize the first letter of a string.
3
+ */
4
+ var capitalize = function (str) { return str.charAt(0).toUpperCase() + str.slice(1); };
5
+
1
6
  /**
2
7
  * Create an array containing a sequence of integers, e.g. [START, START+1, START+2, ...] This is frequently useful
3
8
  * in rendering operations when there is no source array to .map() across.
@@ -7,6 +12,18 @@ var integerSequence = function (start, count) {
7
12
  .fill(1)
8
13
  .map(function (_, index) { return index + start; });
9
14
  };
15
+ /**
16
+ * Format a profile's full name
17
+ */
18
+ var formatFullName = function (profile) {
19
+ return profile ? "".concat(capitalize(profile.first_name), " ").concat(capitalize(profile.last_name)) : 'Invalid User';
20
+ };
21
+ /**
22
+ * Format a profile's initials
23
+ */
24
+ var formatInitials = function (profile) {
25
+ return profile ? "".concat(capitalize(profile.first_name).charAt(0), " ").concat(capitalize(profile.last_name).charAt(0)) : '--';
26
+ };
10
27
  /**
11
28
  * Generate suggested initials for a full name, e.g. "John Doe" will yield "JD".
12
29
  */
@@ -17,4 +34,4 @@ var fullNameToInitials = function (name) {
17
34
  .join('');
18
35
  };
19
36
 
20
- export { fullNameToInitials as f, integerSequence as i };
37
+ export { formatFullName as a, formatInitials as b, capitalize as c, fullNameToInitials as f, integerSequence as i };
@@ -21,6 +21,20 @@ var getCurrentProfile = function (endpoint) {
21
21
  .get('/profiles')
22
22
  .then(function (r) { return (r.data || []).find(function (profile) { return profile.current; }); });
23
23
  };
24
+ /**
25
+ * Get a list of system roles.
26
+ *
27
+ * ```typescript
28
+ * import {Profiles} from '@verdocs/js-sdk/Users';
29
+ *
30
+ * const roles = await Profiles.getRoles();
31
+ * ```
32
+ */
33
+ var getRoles = function (endpoint) {
34
+ return endpoint.api //
35
+ .get('/roles')
36
+ .then(function (r) { return r.data; });
37
+ };
24
38
  /**
25
39
  * Update a profile. For future expansion, the profile ID to update is required, but currently this must also be the
26
40
  * "current" profile for the caller.
@@ -54,4 +68,4 @@ var createBusinessAccount = function (endpoint, params) {
54
68
  .then(function (r) { return r.data; });
55
69
  };
56
70
 
57
- export { createBusinessAccount as c, getCurrentProfile as g, updateProfile as u };
71
+ export { getCurrentProfile as a, createBusinessAccount as c, getRoles as g, updateProfile as u };
@@ -56,6 +56,7 @@ export { VerdocsSignatureDialog as VerdocsSignatureDialog } from '../types/compo
56
56
  export { VerdocsQuickFilter as VerdocsSpinner } from '../types/components/controls/verdocs-spinner/verdocs-spinner';
57
57
  export { VerdocsStatusIndicator as VerdocsStatusIndicator } from '../types/components/envelopes/verdocs-status-indicator/verdocs-status-indicator';
58
58
  export { VerdocsTable as VerdocsTable } from '../types/components/controls/verdocs-table/verdocs-table';
59
+ export { VerdocsTabs as VerdocsTabs } from '../types/components/controls/verdocs-tabs/verdocs-tabs';
59
60
  export { VerdocsTemplateAttachments as VerdocsTemplateAttachments } from '../types/components/templates/verdocs-template-attachments/verdocs-template-attachments';
60
61
  export { VerdocsTemplateCard as VerdocsTemplateCard } from '../types/components/templates/verdocs-template-card/verdocs-template-card';
61
62
  export { VerdocsTemplateCreate as VerdocsTemplateCreate } from '../types/components/templates/verdocs-template-create/verdocs-template-create';
@@ -56,6 +56,7 @@ export { VerdocsSignatureDialog, defineCustomElement as defineCustomElementVerdo
56
56
  export { VerdocsSpinner, defineCustomElement as defineCustomElementVerdocsSpinner } from './verdocs-spinner.js';
57
57
  export { VerdocsStatusIndicator, defineCustomElement as defineCustomElementVerdocsStatusIndicator } from './verdocs-status-indicator.js';
58
58
  export { VerdocsTable, defineCustomElement as defineCustomElementVerdocsTable } from './verdocs-table.js';
59
+ export { VerdocsTabs, defineCustomElement as defineCustomElementVerdocsTabs } from './verdocs-tabs.js';
59
60
  export { VerdocsTemplateAttachments, defineCustomElement as defineCustomElementVerdocsTemplateAttachments } from './verdocs-template-attachments.js';
60
61
  export { VerdocsTemplateCard, defineCustomElement as defineCustomElementVerdocsTemplateCard } from './verdocs-template-card.js';
61
62
  export { VerdocsTemplateCreate, defineCustomElement as defineCustomElementVerdocsTemplateCreate } from './verdocs-template-create.js';
@@ -1,39 +1,4 @@
1
- import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
-
3
- const verdocsDialogCss = "verdocs-dialog{font-family:\"Inter\", \"Barlow\", sans-serif;-webkit-box-sizing:border-box;box-sizing:border-box}verdocs-dialog div{-webkit-box-sizing:border-box;box-sizing:border-box}verdocs-dialog .background-overlay{top:0;left:0;right:0;bottom:0;display:-ms-flexbox;display:flex;z-index:10000;position:absolute;-ms-flex-align:center;align-items:center;background:#0000007f;-ms-flex-pack:center;justify-content:center}verdocs-dialog .dialog{width:320px;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;border-radius:4px;overflow:hidden;background:#ffffff;padding:16px;-webkit-box-shadow:3px 3px 5px 1px rgba(40, 40, 40, 0.4);box-shadow:3px 3px 5px 1px rgba(40, 40, 40, 0.4)}verdocs-dialog .heading{display:-ms-flexbox;display:flex;font-size:20px;font-weight:500;-ms-flex-direction:row;flex-direction:row}";
4
-
5
- const VerdocsDialog$1 = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
6
- constructor() {
7
- super();
8
- this.__registerHost();
9
- this.exit = createEvent(this, "exit", 7);
10
- }
11
- // We need a separate event handler for clicking the background because it can receive events "through" other child components
12
- handleDismiss(e) {
13
- if (e.target.className === 'background-overlay') {
14
- e.preventDefault();
15
- this.exit.emit();
16
- }
17
- }
18
- render() {
19
- return (h(Host, null, h("div", { class: "background-overlay", onClick: e => this.handleDismiss(e) }, h("div", { class: "dialog" }, h("slot", { name: "title" }, h("div", { class: "heading" }, "Please Confirm")), h("slot", null, h("p", null))))));
20
- }
21
- static get style() { return verdocsDialogCss; }
22
- }, [4, "verdocs-dialog"]);
23
- function defineCustomElement$1() {
24
- if (typeof customElements === "undefined") {
25
- return;
26
- }
27
- const components = ["verdocs-dialog"];
28
- components.forEach(tagName => { switch (tagName) {
29
- case "verdocs-dialog":
30
- if (!customElements.get(tagName)) {
31
- customElements.define(tagName, VerdocsDialog$1);
32
- }
33
- break;
34
- } });
35
- }
36
- defineCustomElement$1();
1
+ import { V as VerdocsDialog$1, d as defineCustomElement$1 } from './verdocs-dialog2.js';
37
2
 
38
3
  const VerdocsDialog = VerdocsDialog$1;
39
4
  const defineCustomElement = defineCustomElement$1;
@@ -0,0 +1,39 @@
1
+ import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
2
+
3
+ const verdocsDialogCss = "verdocs-dialog{font-family:\"Inter\", \"Barlow\", sans-serif;-webkit-box-sizing:border-box;box-sizing:border-box}verdocs-dialog div{-webkit-box-sizing:border-box;box-sizing:border-box}verdocs-dialog .background-overlay{top:0;left:0;right:0;bottom:0;display:-ms-flexbox;display:flex;z-index:10000;position:absolute;-ms-flex-align:center;align-items:center;background:#0000007f;-ms-flex-pack:center;justify-content:center}verdocs-dialog .dialog{width:420px;display:-ms-flexbox;display:flex;max-width:100%;overflow:hidden;border-radius:4px;-ms-flex-direction:column;flex-direction:column;background:#ffffff;-webkit-box-shadow:3px 3px 5px 1px rgba(40, 40, 40, 0.4);box-shadow:3px 3px 5px 1px rgba(40, 40, 40, 0.4)}verdocs-dialog .heading{display:-ms-flexbox;display:flex;font-size:16px;font-weight:500;padding:8px 16px;-ms-flex-direction:row;flex-direction:row;color:#ffffff;background:#46497d}verdocs-dialog .content{padding:16px}verdocs-dialog .content p{margin:0 0 1em 0}verdocs-dialog .buttons{gap:14px;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end}";
4
+
5
+ const VerdocsDialog = /*@__PURE__*/ proxyCustomElement(class extends HTMLElement {
6
+ constructor() {
7
+ super();
8
+ this.__registerHost();
9
+ this.exit = createEvent(this, "exit", 7);
10
+ }
11
+ // We need a separate event handler for clicking the background because it can receive events "through" other child components
12
+ handleDismiss(e) {
13
+ var _a;
14
+ if (e.target.className === 'background-overlay') {
15
+ e.preventDefault();
16
+ (_a = this.exit) === null || _a === void 0 ? void 0 : _a.emit();
17
+ }
18
+ }
19
+ render() {
20
+ return (h(Host, null, h("div", { class: "background-overlay", onClick: e => this.handleDismiss(e) }, h("div", { class: "dialog" }, h("slot", { name: "title" }, h("div", { class: "heading" }, "Please Confirm")), h("slot", null, h("div", { class: "content" }))))));
21
+ }
22
+ static get style() { return verdocsDialogCss; }
23
+ }, [4, "verdocs-dialog"]);
24
+ function defineCustomElement() {
25
+ if (typeof customElements === "undefined") {
26
+ return;
27
+ }
28
+ const components = ["verdocs-dialog"];
29
+ components.forEach(tagName => { switch (tagName) {
30
+ case "verdocs-dialog":
31
+ if (!customElements.get(tagName)) {
32
+ customElements.define(tagName, VerdocsDialog);
33
+ }
34
+ break;
35
+ } });
36
+ }
37
+ defineCustomElement();
38
+
39
+ export { VerdocsDialog as V, defineCustomElement as d };