@verdocs/web-sdk 1.10.9 → 1.11.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 (236) hide show
  1. package/dist/cjs/{Envelopes-68058bbe.js → Envelopes-7381bd9a.js} +11 -0
  2. package/dist/cjs/{Envelopes-4cc18551.js → Envelopes-9886af0f.js} +4 -1
  3. package/dist/cjs/{Templates-a75b133d.js → Templates-2f2ea153.js} +2 -2
  4. package/dist/cjs/{interact.min-3e3c03a5.js → interact.min-d223d04b.js} +3 -19
  5. package/dist/cjs/utils-f4cfa1fb.js +349 -0
  6. package/dist/cjs/verdocs-build.cjs.entry.js +1 -1
  7. package/dist/cjs/verdocs-button-panel_3.cjs.entry.js +1 -1
  8. package/dist/cjs/verdocs-document-page_2.cjs.entry.js +3 -2
  9. package/dist/cjs/verdocs-dropdown.cjs.entry.js +2 -2
  10. package/dist/cjs/verdocs-envelope-sidebar.cjs.entry.js +6 -3
  11. package/dist/cjs/verdocs-field-checkbox.cjs.entry.js +3 -2
  12. package/dist/cjs/verdocs-field-date.cjs.entry.js +2 -2
  13. package/dist/cjs/verdocs-field-dropdown.cjs.entry.js +3 -2
  14. package/dist/cjs/verdocs-field-initial.cjs.entry.js +3 -2
  15. package/dist/cjs/verdocs-field-payment.cjs.entry.js +3 -2
  16. package/dist/cjs/verdocs-field-radio-button.cjs.entry.js +3 -2
  17. package/dist/cjs/verdocs-field-signature.cjs.entry.js +3 -2
  18. package/dist/cjs/verdocs-field-textarea.cjs.entry.js +3 -2
  19. package/dist/cjs/verdocs-field-textbox.cjs.entry.js +3 -2
  20. package/dist/cjs/verdocs-field-timestamp.cjs.entry.js +2 -2
  21. package/dist/cjs/verdocs-preview.cjs.entry.js +4 -3
  22. package/dist/cjs/verdocs-send.cjs.entry.js +4 -3
  23. package/dist/cjs/verdocs-sign.cjs.entry.js +12 -5
  24. package/dist/cjs/verdocs-template-attachments.cjs.entry.js +1 -1
  25. package/dist/cjs/verdocs-template-create_2.cjs.entry.js +12 -6
  26. package/dist/cjs/verdocs-template-name.cjs.entry.js +1 -1
  27. package/dist/cjs/verdocs-template-recipients.cjs.entry.js +7 -5
  28. package/dist/cjs/verdocs-template-reminders.cjs.entry.js +1 -1
  29. package/dist/cjs/verdocs-template-role-properties_2.cjs.entry.js +1 -1
  30. package/dist/cjs/verdocs-template-visibility.cjs.entry.js +1 -1
  31. package/dist/cjs/verdocs-view.cjs.entry.js +51 -11
  32. package/dist/collection/components/controls/verdocs-dropdown/verdocs-dropdown.css +6 -0
  33. package/dist/collection/components/controls/verdocs-dropdown/verdocs-dropdown.js +4 -2
  34. package/dist/collection/components/controls/verdocs-dropdown/verdocs-dropdown.stories.js +1 -1
  35. package/dist/collection/components/elements/verdocs-envelope-sidebar/verdocs-envelope-sidebar.js +27 -1
  36. package/dist/collection/components/embeds/verdocs-sign/verdocs-sign.js +10 -4
  37. package/dist/collection/components/embeds/verdocs-view/verdocs-view.js +70 -8
  38. package/dist/collection/components/templates/verdocs-template-fields/verdocs-template-fields.js +30 -2
  39. package/dist/collection/components/templates/verdocs-template-recipients/verdocs-template-recipients.js +25 -1
  40. package/dist/collection/utils/Templates.js +2 -2
  41. package/dist/collection/utils/envelopeStore.js +3 -0
  42. package/dist/collection/utils/utils.js +44 -3
  43. package/dist/components/Envelopes.js +4 -1
  44. package/dist/components/Envelopes2.js +11 -1
  45. package/dist/components/Templates.js +2 -2
  46. package/dist/components/interact.min.js +1 -17
  47. package/dist/components/utils.js +80 -4
  48. package/dist/components/verdocs-dropdown2.js +2 -2
  49. package/dist/components/verdocs-envelope-sidebar.js +4 -1
  50. package/dist/components/verdocs-sign.js +9 -3
  51. package/dist/components/verdocs-template-fields2.js +7 -2
  52. package/dist/components/verdocs-template-recipients.js +2 -1
  53. package/dist/components/verdocs-view2.js +47 -8
  54. package/dist/custom-elements.json +1 -1
  55. package/dist/docs.json +39 -3
  56. package/dist/esm/{Envelopes-91d7e139.js → Envelopes-b8945309.js} +4 -1
  57. package/dist/esm/{Envelopes-130fd6ea.js → Envelopes-eb3eef02.js} +11 -1
  58. package/dist/esm/{Templates-7595bdbf.js → Templates-a7530314.js} +2 -2
  59. package/dist/esm/{interact.min-32c1c1e4.js → interact.min-e472871a.js} +1 -17
  60. package/dist/esm/utils-8065a62d.js +334 -0
  61. package/dist/esm/verdocs-build.entry.js +1 -1
  62. package/dist/esm/verdocs-button-panel_3.entry.js +1 -1
  63. package/dist/esm/verdocs-document-page_2.entry.js +3 -2
  64. package/dist/esm/verdocs-dropdown.entry.js +2 -2
  65. package/dist/esm/verdocs-envelope-sidebar.entry.js +6 -3
  66. package/dist/esm/verdocs-field-checkbox.entry.js +3 -2
  67. package/dist/esm/verdocs-field-date.entry.js +2 -2
  68. package/dist/esm/verdocs-field-dropdown.entry.js +3 -2
  69. package/dist/esm/verdocs-field-initial.entry.js +3 -2
  70. package/dist/esm/verdocs-field-payment.entry.js +3 -2
  71. package/dist/esm/verdocs-field-radio-button.entry.js +3 -2
  72. package/dist/esm/verdocs-field-signature.entry.js +3 -2
  73. package/dist/esm/verdocs-field-textarea.entry.js +3 -2
  74. package/dist/esm/verdocs-field-textbox.entry.js +3 -2
  75. package/dist/esm/verdocs-field-timestamp.entry.js +2 -2
  76. package/dist/esm/verdocs-preview.entry.js +4 -3
  77. package/dist/esm/verdocs-send.entry.js +4 -3
  78. package/dist/esm/verdocs-sign.entry.js +12 -5
  79. package/dist/esm/verdocs-template-attachments.entry.js +1 -1
  80. package/dist/esm/verdocs-template-create_2.entry.js +12 -6
  81. package/dist/esm/verdocs-template-name.entry.js +1 -1
  82. package/dist/esm/verdocs-template-recipients.entry.js +7 -5
  83. package/dist/esm/verdocs-template-reminders.entry.js +1 -1
  84. package/dist/esm/verdocs-template-role-properties_2.entry.js +1 -1
  85. package/dist/esm/verdocs-template-visibility.entry.js +1 -1
  86. package/dist/esm/verdocs-view.entry.js +51 -11
  87. package/dist/esm-es5/Envelopes-b8945309.js +1 -0
  88. package/dist/esm-es5/{Envelopes-130fd6ea.js → Envelopes-eb3eef02.js} +1 -1
  89. package/dist/esm-es5/{Templates-7595bdbf.js → Templates-a7530314.js} +1 -1
  90. package/dist/esm-es5/interact.min-e472871a.js +1 -0
  91. package/dist/esm-es5/utils-8065a62d.js +13 -0
  92. package/dist/esm-es5/verdocs-build.entry.js +1 -1
  93. package/dist/esm-es5/verdocs-button-panel_3.entry.js +1 -1
  94. package/dist/esm-es5/verdocs-document-page_2.entry.js +1 -1
  95. package/dist/esm-es5/verdocs-dropdown.entry.js +1 -1
  96. package/dist/esm-es5/verdocs-envelope-sidebar.entry.js +1 -1
  97. package/dist/esm-es5/verdocs-field-checkbox.entry.js +1 -1
  98. package/dist/esm-es5/verdocs-field-date.entry.js +1 -1
  99. package/dist/esm-es5/verdocs-field-dropdown.entry.js +1 -1
  100. package/dist/esm-es5/verdocs-field-initial.entry.js +1 -1
  101. package/dist/esm-es5/verdocs-field-payment.entry.js +1 -1
  102. package/dist/esm-es5/verdocs-field-radio-button.entry.js +1 -1
  103. package/dist/esm-es5/verdocs-field-signature.entry.js +1 -1
  104. package/dist/esm-es5/verdocs-field-textarea.entry.js +1 -1
  105. package/dist/esm-es5/verdocs-field-textbox.entry.js +1 -1
  106. package/dist/esm-es5/verdocs-field-timestamp.entry.js +1 -1
  107. package/dist/esm-es5/verdocs-preview.entry.js +1 -1
  108. package/dist/esm-es5/verdocs-send.entry.js +1 -1
  109. package/dist/esm-es5/verdocs-sign.entry.js +1 -1
  110. package/dist/esm-es5/verdocs-template-attachments.entry.js +1 -1
  111. package/dist/esm-es5/verdocs-template-create_2.entry.js +1 -1
  112. package/dist/esm-es5/verdocs-template-name.entry.js +1 -1
  113. package/dist/esm-es5/verdocs-template-recipients.entry.js +1 -1
  114. package/dist/esm-es5/verdocs-template-reminders.entry.js +1 -1
  115. package/dist/esm-es5/verdocs-template-role-properties_2.entry.js +1 -1
  116. package/dist/esm-es5/verdocs-template-visibility.entry.js +1 -1
  117. package/dist/esm-es5/verdocs-view.entry.js +1 -1
  118. package/dist/types/components/controls/verdocs-dropdown/verdocs-dropdown.d.ts +3 -1
  119. package/dist/types/components/elements/verdocs-envelope-sidebar/verdocs-envelope-sidebar.d.ts +9 -1
  120. package/dist/types/components/embeds/verdocs-sign/verdocs-sign.d.ts +1 -1
  121. package/dist/types/components/embeds/verdocs-view/verdocs-view.d.ts +9 -0
  122. package/dist/types/components/templates/verdocs-template-fields/verdocs-template-fields.d.ts +9 -1
  123. package/dist/types/components/templates/verdocs-template-recipients/verdocs-template-recipients.d.ts +10 -1
  124. package/dist/types/components.d.ts +17 -1
  125. package/dist/types/utils/Templates.d.ts +1 -1
  126. package/dist/types/utils/envelopeStore.d.ts +1 -0
  127. package/dist/types/utils/utils.d.ts +4 -1
  128. package/dist/verdocs-web-sdk/{p-3a04acf4.system.entry.js → p-00307be5.system.entry.js} +1 -1
  129. package/dist/verdocs-web-sdk/{p-f2ae6ed5.entry.js → p-011eedf8.entry.js} +1 -1
  130. package/dist/verdocs-web-sdk/{p-51a99eed.system.entry.js → p-08270eb7.system.entry.js} +1 -1
  131. package/dist/verdocs-web-sdk/p-085d66a2.entry.js +1 -0
  132. package/dist/verdocs-web-sdk/{p-584e4fca.entry.js → p-0fc8ae0a.entry.js} +1 -1
  133. package/dist/verdocs-web-sdk/p-19763c4d.system.entry.js +1 -0
  134. package/dist/verdocs-web-sdk/p-19d13aca.system.entry.js +1 -0
  135. package/dist/verdocs-web-sdk/{p-d95b1215.system.entry.js → p-1e710eb7.system.entry.js} +1 -1
  136. package/dist/verdocs-web-sdk/p-25fa36d7.js +13 -0
  137. package/dist/verdocs-web-sdk/p-2faa3f2e.system.entry.js +1 -0
  138. package/dist/verdocs-web-sdk/p-32f9b201.system.entry.js +1 -0
  139. package/dist/verdocs-web-sdk/p-388b771c.js +1 -0
  140. package/dist/verdocs-web-sdk/p-38d00c38.system.js +13 -0
  141. package/dist/verdocs-web-sdk/p-3bed244c.system.entry.js +1 -0
  142. package/dist/verdocs-web-sdk/p-42a82518.entry.js +1 -0
  143. package/dist/verdocs-web-sdk/p-433a7bb3.entry.js +1 -0
  144. package/dist/verdocs-web-sdk/{p-7067adce.system.js → p-45a4da16.system.js} +1 -1
  145. package/dist/verdocs-web-sdk/p-4e521971.entry.js +1 -0
  146. package/dist/verdocs-web-sdk/{p-01117b44.entry.js → p-5a4b4373.entry.js} +1 -1
  147. package/dist/verdocs-web-sdk/p-5ced004c.entry.js +1 -0
  148. package/dist/verdocs-web-sdk/p-5d29152f.entry.js +1 -0
  149. package/dist/verdocs-web-sdk/p-63c55bc3.entry.js +1 -0
  150. package/dist/verdocs-web-sdk/{p-b39df234.system.entry.js → p-64f197a8.system.entry.js} +1 -1
  151. package/dist/verdocs-web-sdk/p-6619bc62.js +1 -0
  152. package/dist/verdocs-web-sdk/{p-abffbbaf.entry.js → p-68743993.entry.js} +1 -1
  153. package/dist/verdocs-web-sdk/p-695c2ea8.entry.js +1 -0
  154. package/dist/verdocs-web-sdk/p-6c4d28a2.entry.js +1 -0
  155. package/dist/verdocs-web-sdk/{p-b40a50a8.system.entry.js → p-6d295ee1.system.entry.js} +1 -1
  156. package/dist/verdocs-web-sdk/p-6d84b99c.entry.js +1 -0
  157. package/dist/verdocs-web-sdk/p-6e15a51e.system.entry.js +1 -0
  158. package/dist/verdocs-web-sdk/{p-7ac87084.system.js → p-6f53c098.system.js} +1 -1
  159. package/dist/verdocs-web-sdk/p-7149f974.system.entry.js +1 -0
  160. package/dist/verdocs-web-sdk/p-76bdb162.entry.js +1 -0
  161. package/dist/verdocs-web-sdk/p-79514d21.system.entry.js +1 -0
  162. package/dist/verdocs-web-sdk/p-7a26ed4a.entry.js +1 -0
  163. package/dist/verdocs-web-sdk/p-80fe8ac3.system.js +1 -0
  164. package/dist/verdocs-web-sdk/p-8b20b903.system.entry.js +1 -0
  165. package/dist/verdocs-web-sdk/p-93b857b6.system.entry.js +1 -0
  166. package/dist/verdocs-web-sdk/{p-50892057.system.entry.js → p-9576a08f.system.entry.js} +1 -1
  167. package/dist/verdocs-web-sdk/p-9dfcc6d4.system.entry.js +1 -0
  168. package/dist/verdocs-web-sdk/p-a892d5b4.js +1 -0
  169. package/dist/verdocs-web-sdk/{p-6cb274e3.entry.js → p-ac3a9c3c.entry.js} +1 -1
  170. package/dist/verdocs-web-sdk/p-ad6cc9f4.js +1 -0
  171. package/dist/verdocs-web-sdk/p-af2957cc.system.entry.js +1 -0
  172. package/dist/verdocs-web-sdk/p-b3fd9575.entry.js +1 -0
  173. package/dist/verdocs-web-sdk/{p-a7c75902.entry.js → p-b537b400.entry.js} +1 -1
  174. package/dist/verdocs-web-sdk/p-b7740fe7.system.entry.js +1 -0
  175. package/dist/verdocs-web-sdk/p-bea9fe06.system.entry.js +1 -0
  176. package/dist/verdocs-web-sdk/p-c08b737c.system.entry.js +1 -0
  177. package/dist/verdocs-web-sdk/p-c16b6ca4.system.js +1 -1
  178. package/dist/verdocs-web-sdk/{p-8c53e0ff.system.entry.js → p-c317702e.system.entry.js} +1 -1
  179. package/dist/verdocs-web-sdk/{p-7417cdc7.entry.js → p-c9eb3771.entry.js} +1 -1
  180. package/dist/verdocs-web-sdk/p-caaf2702.system.entry.js +1 -0
  181. package/dist/verdocs-web-sdk/{p-9345346d.entry.js → p-cb006a7e.entry.js} +1 -1
  182. package/dist/verdocs-web-sdk/{p-9f52748a.system.entry.js → p-cdff8cba.system.entry.js} +1 -1
  183. package/dist/verdocs-web-sdk/{p-0e1f1b27.entry.js → p-d06946ca.entry.js} +1 -1
  184. package/dist/verdocs-web-sdk/{p-0eb992eb.entry.js → p-d3e25ad3.entry.js} +1 -1
  185. package/dist/verdocs-web-sdk/p-d5836d39.entry.js +1 -0
  186. package/dist/verdocs-web-sdk/p-dd06fb2a.entry.js +1 -0
  187. package/dist/verdocs-web-sdk/p-e58ab5ca.entry.js +1 -0
  188. package/dist/verdocs-web-sdk/{p-e0cfad01.system.js → p-e764098e.system.js} +1 -1
  189. package/dist/verdocs-web-sdk/{p-34efc869.system.entry.js → p-e91b174d.system.entry.js} +1 -1
  190. package/dist/verdocs-web-sdk/{p-efa9bfa2.system.entry.js → p-f4f44d6f.system.entry.js} +1 -1
  191. package/dist/verdocs-web-sdk/verdocs-web-sdk.esm.js +1 -1
  192. package/package.json +3 -2
  193. package/dist/cjs/utils-865fd657.js +0 -269
  194. package/dist/esm/utils-274e2e93.js +0 -258
  195. package/dist/esm-es5/Envelopes-91d7e139.js +0 -1
  196. package/dist/esm-es5/interact.min-32c1c1e4.js +0 -1
  197. package/dist/esm-es5/utils-274e2e93.js +0 -1
  198. package/dist/verdocs-web-sdk/p-19f6e8c8.system.entry.js +0 -1
  199. package/dist/verdocs-web-sdk/p-1b58f506.entry.js +0 -1
  200. package/dist/verdocs-web-sdk/p-1c92741b.system.entry.js +0 -1
  201. package/dist/verdocs-web-sdk/p-2037252b.entry.js +0 -1
  202. package/dist/verdocs-web-sdk/p-242647c0.system.entry.js +0 -1
  203. package/dist/verdocs-web-sdk/p-25256749.entry.js +0 -1
  204. package/dist/verdocs-web-sdk/p-26bfe095.entry.js +0 -1
  205. package/dist/verdocs-web-sdk/p-36fd1c28.system.entry.js +0 -1
  206. package/dist/verdocs-web-sdk/p-47dfcf69.system.entry.js +0 -1
  207. package/dist/verdocs-web-sdk/p-4f12a8a7.js +0 -1
  208. package/dist/verdocs-web-sdk/p-50c9771e.js +0 -1
  209. package/dist/verdocs-web-sdk/p-628aef1d.system.entry.js +0 -1
  210. package/dist/verdocs-web-sdk/p-6c2d3b0f.system.entry.js +0 -1
  211. package/dist/verdocs-web-sdk/p-72f4b40b.entry.js +0 -1
  212. package/dist/verdocs-web-sdk/p-875f9455.system.entry.js +0 -1
  213. package/dist/verdocs-web-sdk/p-880b619d.js +0 -1
  214. package/dist/verdocs-web-sdk/p-950a8083.entry.js +0 -1
  215. package/dist/verdocs-web-sdk/p-96835e27.system.entry.js +0 -1
  216. package/dist/verdocs-web-sdk/p-996008f6.system.entry.js +0 -1
  217. package/dist/verdocs-web-sdk/p-a802a598.entry.js +0 -1
  218. package/dist/verdocs-web-sdk/p-b22a2c9a.system.entry.js +0 -1
  219. package/dist/verdocs-web-sdk/p-b981d415.entry.js +0 -1
  220. package/dist/verdocs-web-sdk/p-bda7353b.entry.js +0 -1
  221. package/dist/verdocs-web-sdk/p-c0538993.entry.js +0 -1
  222. package/dist/verdocs-web-sdk/p-c11a7c7e.entry.js +0 -1
  223. package/dist/verdocs-web-sdk/p-c73998d3.system.entry.js +0 -1
  224. package/dist/verdocs-web-sdk/p-c86a40a3.system.entry.js +0 -1
  225. package/dist/verdocs-web-sdk/p-c9216df9.system.entry.js +0 -1
  226. package/dist/verdocs-web-sdk/p-cd4270a9.system.entry.js +0 -1
  227. package/dist/verdocs-web-sdk/p-d122cadd.system.js +0 -1
  228. package/dist/verdocs-web-sdk/p-d1393a1a.js +0 -1
  229. package/dist/verdocs-web-sdk/p-d6e07c20.js +0 -1
  230. package/dist/verdocs-web-sdk/p-e090d5e1.system.js +0 -1
  231. package/dist/verdocs-web-sdk/p-e1754b47.entry.js +0 -1
  232. package/dist/verdocs-web-sdk/p-e6f3735e.entry.js +0 -1
  233. package/dist/verdocs-web-sdk/p-e845dc2c.entry.js +0 -1
  234. package/dist/verdocs-web-sdk/p-ef4603fd.entry.js +0 -1
  235. package/dist/verdocs-web-sdk/p-f81a559c.entry.js +0 -1
  236. package/dist/verdocs-web-sdk/p-fc751bc4.system.entry.js +0 -1
@@ -4,25 +4,23 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  const index = require('./index-1329d89c.js');
6
6
  const VerdocsEndpoint = require('./VerdocsEndpoint-25056c73.js');
7
- const Envelopes = require('./Envelopes-4cc18551.js');
7
+ const utils = require('./utils-f4cfa1fb.js');
8
+ const Envelopes = require('./Envelopes-9886af0f.js');
8
9
  const errors = require('./errors-0396da3d.js');
9
- const utils = require('./utils-865fd657.js');
10
10
  require('./Token-576f0e8a.js');
11
- require('./Envelopes-68058bbe.js');
11
+ require('./Envelopes-7381bd9a.js');
12
+ require('./Files-4bdc0c0f.js');
13
+ require('./index-6528b430.js');
12
14
  require('./index-eb130f52.js');
13
15
  require('./Templates-ed812768.js');
14
- require('./Files-4bdc0c0f.js');
15
16
 
16
17
  const verdocsViewCss = "verdocs-view{display:-ms-flexbox;display:flex;overflow:hidden;position:relative;min-height:600px;-ms-flex-direction:column;flex-direction:column;-webkit-box-sizing:border-box;box-sizing:border-box;font-family:\"Inter\", -apple-system, \"Segoe UI\", \"Roboto\", \"Helvetica Neue\", sans-serif}verdocs-view div,verdocs-view canvas{-webkit-box-sizing:border-box;box-sizing:border-box}verdocs-view .header{color:#fff;display:-ms-flexbox;display:flex;z-index:1000;-ms-flex:0 0 56px;flex:0 0 56px;padding:0 15px;font-size:12px;-ms-flex-align:center;align-items:center;-ms-flex-direction:row;flex-direction:row;-webkit-transition:all 0.25s;transition:all 0.25s;background-color:#33354c;-webkit-box-shadow:0 4px 4px 0 rgba(0, 0, 0, 0.24), 0 0 4px 0 rgba(0, 0, 0, 0.12);box-shadow:0 4px 4px 0 rgba(0, 0, 0, 0.24), 0 0 4px 0 rgba(0, 0, 0, 0.12)}verdocs-view .header .logo{width:80px;display:none;margin:-6px 0 0 10px}verdocs-view .header .title{padding-left:16px;font-size:18px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}verdocs-view .document{-ms-flex:1;flex:1;height:100%;display:-ms-flexbox;display:flex;padding:15px;row-gap:15px;min-height:200px;position:relative;overflow-y:scroll;-ms-flex-align:center;align-items:center;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center}verdocs-view .document .inner{width:100%;max-width:1028px}";
17
18
 
18
- const menuOptions = [
19
- { id: 'print', label: 'Print' },
20
- { id: 'download', label: 'Download' },
21
- ];
22
19
  const VerdocsView = class {
23
20
  constructor(hostRef) {
24
21
  index.registerInstance(this, hostRef);
25
22
  this.sdkError = index.createEvent(this, "sdkError", 7);
23
+ this.envelopeUpdated = index.createEvent(this, "envelopeUpdated", 7);
26
24
  this.endpoint = VerdocsEndpoint.VerdocsEndpoint.getDefault();
27
25
  this.envelopeId = '';
28
26
  }
@@ -64,15 +62,42 @@ const VerdocsView = class {
64
62
  // });
65
63
  }
66
64
  async handleOptionSelected(e) {
65
+ var _a;
67
66
  switch (e.detail.id) {
68
67
  case 'print':
69
68
  window.print();
69
+ (_a = this.envelopeUpdated) === null || _a === void 0 ? void 0 : _a.emit({ endpoint: this.endpoint, envelope: Envelopes.state.envelope, event: 'printed' });
70
+ break;
71
+ case 'download-attachments':
72
+ utils.saveAttachment(this.endpoint, Envelopes.state.envelope, Envelopes.state.envelope.envelope_document_id)
73
+ .then(() => {
74
+ var _a;
75
+ (_a = this.envelopeUpdated) === null || _a === void 0 ? void 0 : _a.emit({ endpoint: this.endpoint, envelope: Envelopes.state.envelope, event: 'downloaded' });
76
+ })
77
+ .catch(e => {
78
+ console.log('Error downloading PDF', e);
79
+ });
70
80
  break;
71
- case 'download':
72
- utils.savePDF(this.endpoint, Envelopes.state.envelope, Envelopes.state.envelope.envelope_document_id).catch(e => {
81
+ case 'download-certificate':
82
+ utils.saveCertificate(this.endpoint, Envelopes.state.envelope, Envelopes.state.envelope.certificate_document_id)
83
+ .then(() => {
84
+ var _a;
85
+ (_a = this.envelopeUpdated) === null || _a === void 0 ? void 0 : _a.emit({ endpoint: this.endpoint, envelope: Envelopes.state.envelope, event: 'downloaded' });
86
+ })
87
+ .catch(e => {
73
88
  console.log('Error downloading PDF', e);
74
89
  });
75
90
  break;
91
+ case 'download-all':
92
+ utils.saveEnvelopesAsZip(this.endpoint, [Envelopes.state.envelope])
93
+ .then(() => {
94
+ var _a;
95
+ (_a = this.envelopeUpdated) === null || _a === void 0 ? void 0 : _a.emit({ endpoint: this.endpoint, envelope: Envelopes.state.envelope, event: 'downloaded' });
96
+ })
97
+ .catch(e => {
98
+ console.log('Error downloading Zip', e);
99
+ });
100
+ break;
76
101
  }
77
102
  }
78
103
  render() {
@@ -84,7 +109,22 @@ const VerdocsView = class {
84
109
  if (Envelopes.state.error) {
85
110
  return (index.h(index.Host, null, index.h("div", null, Envelopes.state.error)));
86
111
  }
87
- return (index.h(index.Host, null, index.h("div", { class: "header" }, index.h(index.Fragment, null, index.h("img", { src: "https://verdocs.com/assets/white-logo.svg", alt: "Verdocs Logo", class: "logo" }), index.h("div", { class: "title" }, Envelopes.state.envelope.name), index.h("div", { style: { flex: '1' } }), index.h("div", { style: { marginLeft: '10px' } }), index.h("verdocs-dropdown", { options: menuOptions, onOptionSelected: e => this.handleOptionSelected(e) }))), index.h("div", { class: "document" }, (((_a = Envelopes.state.envelope) === null || _a === void 0 ? void 0 : _a.documents) || [])
112
+ const menuOptions = [{ id: 'print', label: 'Print' }];
113
+ const hasAttachments = Envelopes.state.envelope.documents.length > 0;
114
+ const hasCertificate = !!Envelopes.state.envelope.certificate;
115
+ if (hasAttachments || hasCertificate) {
116
+ menuOptions.push({ label: '' });
117
+ }
118
+ if (hasAttachments) {
119
+ menuOptions.push({ id: 'download-attachments', label: 'Download Attachment(s)' });
120
+ }
121
+ if (hasCertificate) {
122
+ menuOptions.push({ id: 'download-certificate', label: 'Download Certificate' });
123
+ }
124
+ if (hasAttachments && hasCertificate) {
125
+ menuOptions.push({ id: 'download-all', label: 'Download All Files' });
126
+ }
127
+ return (index.h(index.Host, { "data-r": Envelopes.state.updateCount }, index.h("div", { class: "header" }, index.h(index.Fragment, null, index.h("img", { src: "https://verdocs.com/assets/white-logo.svg", alt: "Verdocs Logo", class: "logo" }), index.h("div", { class: "title" }, Envelopes.state.envelope.name), index.h("div", { style: { flex: '1' } }), index.h("div", { style: { marginLeft: '10px' } }), index.h("verdocs-dropdown", { options: menuOptions, onOptionSelected: e => this.handleOptionSelected(e) }))), index.h("div", { class: "document" }, (((_a = Envelopes.state.envelope) === null || _a === void 0 ? void 0 : _a.documents) || [])
88
128
  .filter(document => document.type !== 'certificate')
89
129
  .map(envelopeDocument => {
90
130
  const pages = [...((envelopeDocument === null || envelopeDocument === void 0 ? void 0 : envelopeDocument.pages) || [])];
@@ -49,6 +49,12 @@ verdocs-dropdown .option[disabled]:hover {
49
49
  cursor: inherit;
50
50
  background: transparent;
51
51
  }
52
+ verdocs-dropdown .separator {
53
+ border-top: 1px solid #ffffff5f;
54
+ height: 1px;
55
+ padding-top: 5px;
56
+ margin-top: 5px;
57
+ }
52
58
  verdocs-dropdown.open .items {
53
59
  display: block;
54
60
  }
@@ -4,13 +4,15 @@ import { h } from '@stencil/core';
4
4
  const DropdownArrow = `<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#50BE80"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M7 10l5 5 5-5H7z"/></svg>`;
5
5
  /**
6
6
  * Display a drop-down menu button. A menu of the specified options will be displayed when the button is pressed. The menu will be hidden
7
- * when the button is pressed again, or an option is selected.
7
+ * when the button is pressed again, or an option is selected. Separators may be created by supplying an entry with an empty label.
8
8
  *
9
9
  * ```html
10
10
  * <verdocs-dropdown
11
11
  * options={[
12
12
  * {label: 'Option 1', disabled: true},
13
13
  * {label: 'Option 2', id: '2'}
14
+ * {label: ''}
15
+ * {label: 'Option 3', id: '2'}
14
16
  * ]}
15
17
  * label="OK" onClick={() => (console.log('OK clicked'))}
16
18
  * />
@@ -85,7 +87,7 @@ export class VerdocsDropdown {
85
87
  }
86
88
  render() {
87
89
  var _a;
88
- return (h(Host, { class: { open: !!this.open } }, h("button", { class: "arrow", innerHTML: DropdownArrow, "aria-label": "Open Menu", onClick: e => this.toggleDropdown(e), onBlur: e => this.handleHideDropdown(e), ref: el => (this.dropdownButton = el) }), h("div", { class: "items", "aria-hidden": !this.open, ref: el => (this.dropdownMenu = el) }, (_a = this.options) === null || _a === void 0 ? void 0 : _a.map(option => (h("button", { onClick: e => this.handleSelectOption(e, option), class: "option", disabled: option.disabled }, option.label))))));
90
+ return (h(Host, { class: { open: !!this.open } }, h("button", { class: "arrow", innerHTML: DropdownArrow, "aria-label": "Open Menu", onClick: e => this.toggleDropdown(e), onBlur: e => this.handleHideDropdown(e), ref: el => (this.dropdownButton = el) }), h("div", { class: "items", "aria-hidden": !this.open, ref: el => (this.dropdownMenu = el) }, (_a = this.options) === null || _a === void 0 ? void 0 : _a.map(option => option.label ? (h("button", { onClick: e => this.handleSelectOption(e, option), class: "option", disabled: option.disabled }, option.label)) : (h("div", { class: "separator" }))))));
89
91
  }
90
92
  static get is() { return "verdocs-dropdown"; }
91
93
  static get originalStyleUrls() {
@@ -12,7 +12,7 @@ export default {
12
12
  component: 'verdocs-dropdown',
13
13
  // We can apply default args only shown in Storybook as follows
14
14
  args: {
15
- options: [{ label: 'Option 1' }, { label: 'Disabled Option', disabled: true }, { label: 'Option 2' }],
15
+ options: [{ label: 'Option 1' }, { label: 'Disabled Option', disabled: true }, { lable: '' }, { label: 'Option 2' }],
16
16
  },
17
17
  // Here we can apply overrides to component property documentation. Note that we don't need to (and shouldn't) specify every field
18
18
  // here. Only those that need special attention.
@@ -72,6 +72,7 @@ export class VerdocsEnvelopeSidebar {
72
72
  !['complete', 'declined', 'canceled'].includes(EnvelopeStore.envelope.status));
73
73
  }
74
74
  handleRecipientAction(recipient, id) {
75
+ var _a;
75
76
  console.log('recipient action', id, recipient);
76
77
  switch (id) {
77
78
  case 'reminder':
@@ -80,6 +81,7 @@ export class VerdocsEnvelopeSidebar {
80
81
  case 'details':
81
82
  break;
82
83
  }
84
+ (_a = this.envelopeUpdated) === null || _a === void 0 ? void 0 : _a.emit({ endpoint: this.endpoint, envelope: EnvelopeStore.envelope, event: id });
83
85
  }
84
86
  prepareHistoryEntries() {
85
87
  const entries = [];
@@ -203,7 +205,7 @@ export class VerdocsEnvelopeSidebar {
203
205
  const session = this.endpoint.getSession();
204
206
  const isEnvelopeOwner = session.profile_id === EnvelopeStore.envelope.profile_id; // TODO: What about org admins?
205
207
  const historyEntries = this.prepareHistoryEntries();
206
- return (h(Host, { class: this.panelOpen ? 'open' : '' }, h("div", { class: "buttons" }, h("button", { class: this.activeTab === 1 ? 'active' : '', onClick: () => this.setTab(1), innerHTML: InformationCircle }), h("button", { class: this.activeTab === 2 ? 'active' : '', onClick: () => this.setTab(2), innerHTML: Users }), h("button", { class: this.activeTab === 3 ? 'active' : '', onClick: () => this.setTab(3), innerHTML: ClipboardDocuments })), this.activeTab === 1 && (h("div", { class: "content" }, h("div", { class: "title" }, "Details"), h("div", { class: "label" }, "Envelope ID"), h("div", { class: "value" }, EnvelopeStore.envelope.id), h("div", { class: "label" }, "Date Created"), h("div", { class: "value" }, format(new Date(EnvelopeStore.envelope.created_at), 'PP pp')), h("div", { class: "label" }, "Last Modified"), h("div", { class: "value" }, format(new Date(EnvelopeStore.envelope.updated_at), 'PP pp')), h("div", { class: "label" }, "Status"), h("div", { class: "value" }, EnvelopeStore.envelope.status), h("div", { class: "label" }, "Verdoc Owner UUID"), h("div", { class: "value" }, EnvelopeStore.envelope.profile_id), h("div", { class: "label" }, "Verdoc Owner Name"), h("div", { class: "value" }, (_a = EnvelopeStore.envelope.profile) === null || _a === void 0 ? void 0 :
208
+ return (h(Host, { class: this.panelOpen ? 'open' : '', "data-r": EnvelopeStore.updateCount }, h("div", { class: "buttons" }, h("button", { class: this.activeTab === 1 ? 'active' : '', onClick: () => this.setTab(1), innerHTML: InformationCircle }), h("button", { class: this.activeTab === 2 ? 'active' : '', onClick: () => this.setTab(2), innerHTML: Users }), h("button", { class: this.activeTab === 3 ? 'active' : '', onClick: () => this.setTab(3), innerHTML: ClipboardDocuments })), this.activeTab === 1 && (h("div", { class: "content" }, h("div", { class: "title" }, "Details"), h("div", { class: "label" }, "Envelope ID"), h("div", { class: "value" }, EnvelopeStore.envelope.id), h("div", { class: "label" }, "Date Created"), h("div", { class: "value" }, format(new Date(EnvelopeStore.envelope.created_at), 'PP pp')), h("div", { class: "label" }, "Last Modified"), h("div", { class: "value" }, format(new Date(EnvelopeStore.envelope.updated_at), 'PP pp')), h("div", { class: "label" }, "Status"), h("div", { class: "value" }, EnvelopeStore.envelope.status), h("div", { class: "label" }, "Verdoc Owner UUID"), h("div", { class: "value" }, EnvelopeStore.envelope.profile_id), h("div", { class: "label" }, "Verdoc Owner Name"), h("div", { class: "value" }, (_a = EnvelopeStore.envelope.profile) === null || _a === void 0 ? void 0 :
207
209
  _a.first_name, " ", (_b = EnvelopeStore.envelope.profile) === null || _b === void 0 ? void 0 :
208
210
  _b.last_name), h("div", { class: "label" }, "Verdoc Owner Email"), h("div", { class: "value" }, (_c = EnvelopeStore.envelope.profile) === null || _c === void 0 ? void 0 : _c.email))), this.activeTab === 2 && (h("div", { class: "content" }, h("div", { class: "title" }, "Recipients"), EnvelopeStore.envelope.recipients.map((recipient, index) => (h("div", { class: "recipient-detail" }, h("div", { class: "recipient-header" }, h("div", { class: "recipient-number" }, index + 1), h("div", { class: "recipient-type" }, recipient.type), h("div", { class: { 'recipient-status': true, [recipient.status]: true } }, recipient.status), isEnvelopeOwner && (h("verdocs-dropdown", { onOptionSelected: item => this.handleRecipientAction(recipient, item.detail.id), options: [
209
211
  { id: 'reminder', label: 'Send Reminder', disabled: !this.canResendRecipient(recipient) },
@@ -294,6 +296,30 @@ export class VerdocsEnvelopeSidebar {
294
296
  }
295
297
  }
296
298
  }
299
+ }, {
300
+ "method": "envelopeUpdated",
301
+ "name": "envelopeUpdated",
302
+ "bubbles": true,
303
+ "cancelable": true,
304
+ "composed": true,
305
+ "docs": {
306
+ "tags": [],
307
+ "text": "Event fired when the envelope is updated in any way. May be used for tasks such as cache invalidation or reporting to other systems."
308
+ },
309
+ "complexType": {
310
+ "original": "{endpoint: VerdocsEndpoint; envelope: IEnvelope; event: string}",
311
+ "resolved": "{ endpoint: VerdocsEndpoint; envelope: IEnvelope; event: string; }",
312
+ "references": {
313
+ "VerdocsEndpoint": {
314
+ "location": "import",
315
+ "path": "@verdocs/js-sdk"
316
+ },
317
+ "IEnvelope": {
318
+ "location": "import",
319
+ "path": "@verdocs/js-sdk/Envelopes/Types"
320
+ }
321
+ }
322
+ }
297
323
  }];
298
324
  }
299
325
  }
@@ -7,7 +7,7 @@ import { isValidEmail, isValidPhone } from '@verdocs/js-sdk/Templates/Validators
7
7
  import { Host, Fragment, h } from '@stencil/core';
8
8
  import { updateEnvelopeFieldInitials, updateEnvelopeFieldSignature } from '@verdocs/js-sdk/Envelopes/Envelopes';
9
9
  import { envelopeRecipientAgree, envelopeRecipientDecline, envelopeRecipientSubmit } from '@verdocs/js-sdk/Envelopes/Recipients';
10
- import { getFieldId, getRoleIndex, renderDocumentField, savePDF, updateDocumentFieldValue } from '../../../utils/utils';
10
+ import { getFieldId, getRoleIndex, renderDocumentField, saveAttachment, updateDocumentFieldValue } from '../../../utils/utils';
11
11
  import { getEnvelopeById } from '../../../utils/Envelopes';
12
12
  import EnvelopeStore from '../../../utils/envelopeStore';
13
13
  import { SDKError } from '../../../utils/errors';
@@ -131,29 +131,35 @@ export class VerdocsSign {
131
131
  });
132
132
  }
133
133
  async handleOptionSelected(e) {
134
+ var _a, _b, _c, _d, _e;
134
135
  switch (e.detail.id) {
135
136
  case 'later':
136
137
  this.finishLater = true;
137
138
  this.showFinishLater = true;
139
+ (_a = this.envelopeUpdated) === null || _a === void 0 ? void 0 : _a.emit({ endpoint: this.endpoint, envelope: EnvelopeStore.envelope, event: 'later' });
138
140
  // this.router.navigate([`view/sign/${this.envelopeId}/role/${this.roleName}/saved`]);
139
141
  break;
140
142
  case 'claim':
141
143
  window.alert('This feature will be available in an upcoming release.');
144
+ (_b = this.envelopeUpdated) === null || _b === void 0 ? void 0 : _b.emit({ endpoint: this.endpoint, envelope: EnvelopeStore.envelope, event: 'claimed' });
142
145
  break;
143
146
  case 'decline':
144
147
  {
145
148
  const declineResult = await envelopeRecipientDecline(this.endpoint, this.envelopeId, this.roleId);
146
149
  console.log('Decline result', declineResult);
150
+ (_c = this.envelopeUpdated) === null || _c === void 0 ? void 0 : _c.emit({ endpoint: this.endpoint, envelope: EnvelopeStore.envelope, event: 'declined' });
147
151
  this.isDone = true;
148
152
  }
149
153
  break;
150
154
  case 'print':
151
155
  window.print();
156
+ (_d = this.envelopeUpdated) === null || _d === void 0 ? void 0 : _d.emit({ endpoint: this.endpoint, envelope: EnvelopeStore.envelope, event: 'printed' });
152
157
  break;
153
158
  case 'download':
154
- savePDF(this.endpoint, EnvelopeStore.envelope, EnvelopeStore.envelope.envelope_document_id).catch(e => {
159
+ saveAttachment(this.endpoint, EnvelopeStore.envelope, EnvelopeStore.envelope.envelope_document_id).catch(e => {
155
160
  console.log('Error downloading PDF', e);
156
161
  });
162
+ (_e = this.envelopeUpdated) === null || _e === void 0 ? void 0 : _e.emit({ endpoint: this.endpoint, envelope: EnvelopeStore.envelope, event: 'downloaded' });
157
163
  break;
158
164
  }
159
165
  }
@@ -409,7 +415,7 @@ export class VerdocsSign {
409
415
  if (EnvelopeStore.loading || !EnvelopeStore.envelope) {
410
416
  return (h(Host, null, h("verdocs-loader", null)));
411
417
  }
412
- return (h(Host, { class: { agreed: this.agreed } }, !this.isDone && !this.finishLater && h("div", { class: "intro" }, "Please review and act on these documents."), !this.isDone && (h("div", { class: "header" }, !this.agreed ? (h("div", { class: "agree" }, h("verdocs-checkbox", { name: "agree", label: "I agree to use electronic records and signatures.", onInput: () => this.handleClickAgree() }))) : (h(Fragment, null, h("img", { src: "https://verdocs.com/assets/white-logo.svg", alt: "Verdocs Logo", class: "logo" }), h("div", { class: "title" }, EnvelopeStore.envelope.name), h("div", { style: { flex: '1' } }))), !this.isDone && !this.finishLater && h("verdocs-button", { size: "small", label: this.nextButtonLabel, disabled: !this.agreed, onClick: () => this.handleNext() }), h("div", { style: { marginLeft: '10px' } }), h("verdocs-dropdown", { options: !this.isDone && !this.finishLater ? inProgressMenuOptions : doneMenuOptions, onOptionSelected: e => this.handleOptionSelected(e) }))), !this.isDone && !this.agreed ? h("div", { class: "cover" }) : h("div", { style: { display: 'none' } }), this.isDone ? (
418
+ return (h(Host, { class: { agreed: this.agreed }, "data-r": EnvelopeStore.updateCount }, !this.isDone && !this.finishLater && h("div", { class: "intro" }, "Please review and act on these documents."), !this.isDone && (h("div", { class: "header" }, !this.agreed ? (h("div", { class: "agree" }, h("verdocs-checkbox", { name: "agree", label: "I agree to use electronic records and signatures.", onInput: () => this.handleClickAgree() }))) : (h(Fragment, null, h("img", { src: "https://verdocs.com/assets/white-logo.svg", alt: "Verdocs Logo", class: "logo" }), h("div", { class: "title" }, EnvelopeStore.envelope.name), h("div", { style: { flex: '1' } }))), !this.isDone && !this.finishLater && h("verdocs-button", { size: "small", label: this.nextButtonLabel, disabled: !this.agreed, onClick: () => this.handleNext() }), h("div", { style: { marginLeft: '10px' } }), h("verdocs-dropdown", { options: !this.isDone && !this.finishLater ? inProgressMenuOptions : doneMenuOptions, onOptionSelected: e => this.handleOptionSelected(e) }))), !this.isDone && !this.agreed ? h("div", { class: "cover" }) : h("div", { style: { display: 'none' } }), this.isDone ? (
413
419
  // <div>test</div>
414
420
  h("verdocs-view", { endpoint: this.endpoint, envelopeId: this.envelopeId, onSdkError: e => { var _a; return (_a = this.sdkError) === null || _a === void 0 ? void 0 : _a.emit(e.detail); } })) : (h("div", { class: "document" }, (EnvelopeStore.envelope.documents || []).map(envelopeDocument => {
415
421
  const pages = [...((envelopeDocument === null || envelopeDocument === void 0 ? void 0 : envelopeDocument.pages) || [])];
@@ -570,7 +576,7 @@ export class VerdocsSign {
570
576
  "composed": true,
571
577
  "docs": {
572
578
  "tags": [],
573
- "text": "Event fired when the envelope is updated in any way."
579
+ "text": "Event fired when the envelope is updated in any way. May be used for tasks such as cache invalidation or reporting to other systems."
574
580
  },
575
581
  "complexType": {
576
582
  "original": "{endpoint: VerdocsEndpoint; envelope: IEnvelope; event: string}",
@@ -1,13 +1,9 @@
1
1
  import { VerdocsEndpoint } from '@verdocs/js-sdk';
2
2
  import { h, Host, Fragment } from '@stencil/core';
3
+ import { saveAttachment, saveCertificate, saveEnvelopesAsZip } from '../../../utils/utils';
3
4
  import { getEnvelopeById } from '../../../utils/Envelopes';
4
5
  import EnvelopeStore from '../../../utils/envelopeStore';
5
6
  import { SDKError } from '../../../utils/errors';
6
- import { savePDF } from '../../../utils/utils';
7
- const menuOptions = [
8
- { id: 'print', label: 'Print' },
9
- { id: 'download', label: 'Download' },
10
- ];
11
7
  /**
12
8
  * Render the documents attached to an envelope in read-only (view) mode. All documents are displayed in order.
13
9
  */
@@ -54,15 +50,42 @@ export class VerdocsView {
54
50
  // });
55
51
  }
56
52
  async handleOptionSelected(e) {
53
+ var _a;
57
54
  switch (e.detail.id) {
58
55
  case 'print':
59
56
  window.print();
57
+ (_a = this.envelopeUpdated) === null || _a === void 0 ? void 0 : _a.emit({ endpoint: this.endpoint, envelope: EnvelopeStore.envelope, event: 'printed' });
58
+ break;
59
+ case 'download-attachments':
60
+ saveAttachment(this.endpoint, EnvelopeStore.envelope, EnvelopeStore.envelope.envelope_document_id)
61
+ .then(() => {
62
+ var _a;
63
+ (_a = this.envelopeUpdated) === null || _a === void 0 ? void 0 : _a.emit({ endpoint: this.endpoint, envelope: EnvelopeStore.envelope, event: 'downloaded' });
64
+ })
65
+ .catch(e => {
66
+ console.log('Error downloading PDF', e);
67
+ });
60
68
  break;
61
- case 'download':
62
- savePDF(this.endpoint, EnvelopeStore.envelope, EnvelopeStore.envelope.envelope_document_id).catch(e => {
69
+ case 'download-certificate':
70
+ saveCertificate(this.endpoint, EnvelopeStore.envelope, EnvelopeStore.envelope.certificate_document_id)
71
+ .then(() => {
72
+ var _a;
73
+ (_a = this.envelopeUpdated) === null || _a === void 0 ? void 0 : _a.emit({ endpoint: this.endpoint, envelope: EnvelopeStore.envelope, event: 'downloaded' });
74
+ })
75
+ .catch(e => {
63
76
  console.log('Error downloading PDF', e);
64
77
  });
65
78
  break;
79
+ case 'download-all':
80
+ saveEnvelopesAsZip(this.endpoint, [EnvelopeStore.envelope])
81
+ .then(() => {
82
+ var _a;
83
+ (_a = this.envelopeUpdated) === null || _a === void 0 ? void 0 : _a.emit({ endpoint: this.endpoint, envelope: EnvelopeStore.envelope, event: 'downloaded' });
84
+ })
85
+ .catch(e => {
86
+ console.log('Error downloading Zip', e);
87
+ });
88
+ break;
66
89
  }
67
90
  }
68
91
  render() {
@@ -74,7 +97,22 @@ export class VerdocsView {
74
97
  if (EnvelopeStore.error) {
75
98
  return (h(Host, null, h("div", null, EnvelopeStore.error)));
76
99
  }
77
- return (h(Host, null, h("div", { class: "header" }, h(Fragment, null, h("img", { src: "https://verdocs.com/assets/white-logo.svg", alt: "Verdocs Logo", class: "logo" }), h("div", { class: "title" }, EnvelopeStore.envelope.name), h("div", { style: { flex: '1' } }), h("div", { style: { marginLeft: '10px' } }), h("verdocs-dropdown", { options: menuOptions, onOptionSelected: e => this.handleOptionSelected(e) }))), h("div", { class: "document" }, (((_a = EnvelopeStore.envelope) === null || _a === void 0 ? void 0 : _a.documents) || [])
100
+ const menuOptions = [{ id: 'print', label: 'Print' }];
101
+ const hasAttachments = EnvelopeStore.envelope.documents.length > 0;
102
+ const hasCertificate = !!EnvelopeStore.envelope.certificate;
103
+ if (hasAttachments || hasCertificate) {
104
+ menuOptions.push({ label: '' });
105
+ }
106
+ if (hasAttachments) {
107
+ menuOptions.push({ id: 'download-attachments', label: 'Download Attachment(s)' });
108
+ }
109
+ if (hasCertificate) {
110
+ menuOptions.push({ id: 'download-certificate', label: 'Download Certificate' });
111
+ }
112
+ if (hasAttachments && hasCertificate) {
113
+ menuOptions.push({ id: 'download-all', label: 'Download All Files' });
114
+ }
115
+ return (h(Host, { "data-r": EnvelopeStore.updateCount }, h("div", { class: "header" }, h(Fragment, null, h("img", { src: "https://verdocs.com/assets/white-logo.svg", alt: "Verdocs Logo", class: "logo" }), h("div", { class: "title" }, EnvelopeStore.envelope.name), h("div", { style: { flex: '1' } }), h("div", { style: { marginLeft: '10px' } }), h("verdocs-dropdown", { options: menuOptions, onOptionSelected: e => this.handleOptionSelected(e) }))), h("div", { class: "document" }, (((_a = EnvelopeStore.envelope) === null || _a === void 0 ? void 0 : _a.documents) || [])
78
116
  .filter(document => document.type !== 'certificate')
79
117
  .map(envelopeDocument => {
80
118
  const pages = [...((envelopeDocument === null || envelopeDocument === void 0 ? void 0 : envelopeDocument.pages) || [])];
@@ -160,6 +198,30 @@ export class VerdocsView {
160
198
  }
161
199
  }
162
200
  }
201
+ }, {
202
+ "method": "envelopeUpdated",
203
+ "name": "envelopeUpdated",
204
+ "bubbles": true,
205
+ "cancelable": true,
206
+ "composed": true,
207
+ "docs": {
208
+ "tags": [],
209
+ "text": "Event fired when the envelope is updated in any way. May be used for tasks such as cache invalidation or reporting to other systems."
210
+ },
211
+ "complexType": {
212
+ "original": "{endpoint: VerdocsEndpoint; envelope: IEnvelope; event: string}",
213
+ "resolved": "{ endpoint: VerdocsEndpoint; envelope: IEnvelope; event: string; }",
214
+ "references": {
215
+ "VerdocsEndpoint": {
216
+ "location": "import",
217
+ "path": "@verdocs/js-sdk"
218
+ },
219
+ "IEnvelope": {
220
+ "location": "import",
221
+ "path": "@verdocs/js-sdk/Envelopes/Types"
222
+ }
223
+ }
224
+ }
163
225
  }];
164
226
  }
165
227
  static get elementRef() { return "component"; }
@@ -53,7 +53,7 @@ export class VerdocsTemplateFields {
53
53
  }
54
54
  try {
55
55
  console.log(`[FIELDS] Loading template ${this.templateId}`, this.endpoint.session);
56
- await loadTemplate(this.endpoint, this.templateId);
56
+ await loadTemplate(this.endpoint, this.templateId, true);
57
57
  this.selectedRoleName = TemplateStore.roleNames[0];
58
58
  console.log('Starting with role', this.selectedRoleName);
59
59
  }
@@ -76,7 +76,9 @@ export class VerdocsTemplateFields {
76
76
  attachFieldAttributes(pageInfo, field, roleIndex, el) {
77
77
  el.addEventListener('input', e => this.handleFieldChange(field, e));
78
78
  el.addEventListener('settingsChanged', () => {
79
+ var _a;
79
80
  el.setAttribute('roleindex', getRoleIndex(TemplateStore.roleNames, field.role_name));
81
+ (_a = this.templateUpdated) === null || _a === void 0 ? void 0 : _a.emit({ endpoint: this.endpoint, template: TemplateStore.template, event: 'updated-field' });
80
82
  });
81
83
  el.setAttribute('roleindex', roleIndex);
82
84
  el.setAttribute('pageNumber', pageInfo.pageNumber);
@@ -160,6 +162,7 @@ export class VerdocsTemplateFields {
160
162
  return { x, y };
161
163
  }
162
164
  async handleClickPage(e, page) {
165
+ var _a;
163
166
  if (this.placing) {
164
167
  const pageNumber = page.sequence;
165
168
  const clickedX = e.offsetX;
@@ -218,6 +221,7 @@ export class VerdocsTemplateFields {
218
221
  console.log('Saved field', saved);
219
222
  TemplateStore.fields.push(saved);
220
223
  this.placing = null;
224
+ (_a = this.templateUpdated) === null || _a === void 0 ? void 0 : _a.emit({ endpoint: this.endpoint, template: TemplateStore.template, event: 'added-field' });
221
225
  this.handlePageRendered({ detail: this.cachedPageInfo[pageNumber] });
222
226
  }
223
227
  }
@@ -232,7 +236,7 @@ export class VerdocsTemplateFields {
232
236
  }
233
237
  const pages = [...TemplateStore.template.pages];
234
238
  pages.sort((a, b) => a.sequence - b.sequence);
235
- return (h(Host, { class: this.placing ? { [`placing-${this.placing}`]: true } : {}, "data-updated": TemplateStore.updateCount, onSubmit: () => {
239
+ return (h(Host, { class: this.placing ? { [`placing-${this.placing}`]: true } : {}, "data-r": TemplateStore.updateCount, onSubmit: () => {
236
240
  console.log('onSubmit');
237
241
  } }, h("div", { class: "pages" }, pages.map(page => {
238
242
  // console.log('rendering page', page);
@@ -360,6 +364,30 @@ export class VerdocsTemplateFields {
360
364
  }
361
365
  }
362
366
  }
367
+ }, {
368
+ "method": "templateUpdated",
369
+ "name": "templateUpdated",
370
+ "bubbles": true,
371
+ "cancelable": true,
372
+ "composed": true,
373
+ "docs": {
374
+ "tags": [],
375
+ "text": "Event fired when the template is updated in any way. May be used for tasks such as cache invalidation or reporting to other systems."
376
+ },
377
+ "complexType": {
378
+ "original": "{endpoint: VerdocsEndpoint; template: ITemplate; event: string}",
379
+ "resolved": "{ endpoint: VerdocsEndpoint; template: ITemplate; event: string; }",
380
+ "references": {
381
+ "VerdocsEndpoint": {
382
+ "location": "import",
383
+ "path": "@verdocs/js-sdk"
384
+ },
385
+ "ITemplate": {
386
+ "location": "import",
387
+ "path": "@verdocs/js-sdk/Templates/Types"
388
+ }
389
+ }
390
+ }
363
391
  }];
364
392
  }
365
393
  }
@@ -50,7 +50,7 @@ export class VerdocsTemplateRecipients {
50
50
  }
51
51
  try {
52
52
  console.log(`[RECIPIENTS] Loading template ${this.templateId}`, this.endpoint.session);
53
- await loadTemplate(this.endpoint, this.templateId);
53
+ await loadTemplate(this.endpoint, this.templateId, true);
54
54
  }
55
55
  catch (e) {
56
56
  console.log('[RECIPIENTS] Error loading template', e);
@@ -347,6 +347,30 @@ export class VerdocsTemplateRecipients {
347
347
  }
348
348
  }
349
349
  }
350
+ }, {
351
+ "method": "templateUpdated",
352
+ "name": "templateUpdated",
353
+ "bubbles": true,
354
+ "cancelable": true,
355
+ "composed": true,
356
+ "docs": {
357
+ "tags": [],
358
+ "text": "Event fired when the template is updated in any way. May be used for tasks such as cache invalidation or reporting to other systems."
359
+ },
360
+ "complexType": {
361
+ "original": "{endpoint: VerdocsEndpoint; template: ITemplate; event: string}",
362
+ "resolved": "{ endpoint: VerdocsEndpoint; template: ITemplate; event: string; }",
363
+ "references": {
364
+ "VerdocsEndpoint": {
365
+ "location": "import",
366
+ "path": "@verdocs/js-sdk"
367
+ },
368
+ "ITemplate": {
369
+ "location": "import",
370
+ "path": "@verdocs/js-sdk/Templates/Types"
371
+ }
372
+ }
373
+ }
350
374
  }];
351
375
  }
352
376
  static get elementRef() { return "el"; }
@@ -1,7 +1,7 @@
1
1
  import { getTemplate } from '@verdocs/js-sdk/Templates/Templates';
2
2
  import TemplateStore from './templateStore';
3
3
  const pendingNotifications = [];
4
- export const loadTemplate = async (endpoint, templateId) => {
4
+ export const loadTemplate = async (endpoint, templateId, forceReload = false) => {
5
5
  if (!templateId) {
6
6
  console.log(`[TEMPLATES] Missing required template ID`);
7
7
  throw new Error('Missing required template ID');
@@ -15,7 +15,7 @@ export const loadTemplate = async (endpoint, templateId) => {
15
15
  pendingNotifications.push({ resolve, reject });
16
16
  });
17
17
  }
18
- if (templateId === TemplateStore.templateId) {
18
+ if (templateId === TemplateStore.templateId && !forceReload) {
19
19
  return TemplateStore.template;
20
20
  }
21
21
  TemplateStore.loading = true;
@@ -7,6 +7,9 @@ const { state, onChange } = createStore({
7
7
  loadProgress: 0,
8
8
  loading: true,
9
9
  error: '',
10
+ // This can be used as a data field on components that need to force re-rendering when the underlying data has changed. Stencil stores
11
+ // are handy but not very sophisticated. They don't re-render on "deep" changes.
12
+ updateCount: 1,
10
13
  roleNames: [],
11
14
  dirty: false,
12
15
  });
@@ -1,5 +1,7 @@
1
- import { rescale } from '@verdocs/js-sdk/Utils/Fields';
1
+ import jszip from 'jszip';
2
+ import { format } from 'date-fns';
2
3
  import { Envelopes } from '@verdocs/js-sdk/Envelopes';
4
+ import { rescale } from '@verdocs/js-sdk/Utils/Fields';
3
5
  import { downloadBlob } from '@verdocs/js-sdk/Utils/Files';
4
6
  export const defaultWidth = (type) => {
5
7
  // checkbox was a legacy field type
@@ -235,11 +237,50 @@ export const updateCssTransform = (el, key, value) => {
235
237
  `${key}(${value})`,
236
238
  ].join(' ');
237
239
  };
238
- export const savePDF = async (endpoint, envelope, documentId) => {
239
- const fileName = `${envelope.name} - ${envelope.updated_at.split('T')[0]}.pdf`;
240
+ export const formatLocalDate = (date) => format(date, 'P').replace(/\//g, '-');
241
+ const formatEnvelopeDate = (envelope) => formatLocalDate(new Date(envelope.updated_at));
242
+ export const saveAttachment = async (endpoint, envelope, documentId) => {
243
+ // e.g. "Colorado-Motor-Vehicle-Bill-of-Sale.pdf"
244
+ const fileName = `${envelope.name} - ${formatEnvelopeDate(envelope)}.pdf`;
240
245
  const data = await Envelopes.getEnvelopeFile(endpoint, envelope.id, documentId);
241
246
  downloadBlob(data, fileName);
242
247
  };
248
+ export const saveCertificate = async (endpoint, envelope, documentId) => {
249
+ // e.g "Colorado Motor Vehicle Bill of Sale_certificate.pdf"
250
+ const fileName = `${envelope.name} - ${formatEnvelopeDate(envelope)}_certificate.pdf`;
251
+ const data = await Envelopes.getEnvelopeFile(endpoint, envelope.id, documentId);
252
+ downloadBlob(data, fileName);
253
+ };
254
+ export const saveEnvelopesAsZip = async (endpoint, envelopes) => {
255
+ const zip = new jszip();
256
+ for await (let envelope of envelopes) {
257
+ // e.g. "98a13bc0-8861-4408-86fc-8f9af51e867a-TheSwanBrothers Phase 1 Agreement - 11-02-22"
258
+ const subFolder = envelopes.length > 0 ? zip.folder(`${envelope.id} - ${envelope.name} - ${formatEnvelopeDate(envelope)}`) : null;
259
+ for await (let document of envelope.documents) {
260
+ // TODO: When attachments are added to envelopes, add a field that reflects the full, original filename (including extension)
261
+ const documentFileName = document.type === 'certificate' ? `${envelope.name}_certificate.pdf` : `${document.name}.pdf`;
262
+ const data = await Envelopes.getEnvelopeFile(endpoint, envelope.id, document.id);
263
+ if (subFolder) {
264
+ subFolder.file(documentFileName, data, { compression: 'DEFLATE' });
265
+ }
266
+ else {
267
+ zip.file(documentFileName, data, { compression: 'DEFLATE' });
268
+ }
269
+ const attachFields = envelope.fields.filter(field => field.type === 'attachment' && field.settings['name']);
270
+ if (attachFields.length > 0) {
271
+ const attachmentsFolder = subFolder ? subFolder.folder('attachments') : zip.folder('attachments');
272
+ for await (let attachField of attachFields) {
273
+ const attachData = await Envelopes.getFieldAttachment(endpoint, envelope.id, attachField.name);
274
+ attachmentsFolder.file(attachField.settings.name, attachData, { compression: 'DEFLATE' });
275
+ }
276
+ }
277
+ }
278
+ }
279
+ // e.g. "Colorado Motor Vehicle Bill of Sale - 01-18-23.zip" or "Verdocs-Envelopes-02-13-23.zip"
280
+ const zipFileName = envelopes.length === 1 ? `${envelopes[0].name} - ${formatEnvelopeDate(envelopes[0])}.zip` : `Verdocs-Envelopes-${formatLocalDate(new Date())}`;
281
+ const zipped = await zip.generateAsync({ type: 'blob', compression: 'DEFLATE' });
282
+ downloadBlob(zipped, zipFileName);
283
+ };
243
284
  /**
244
285
  * Throttle a given function by a delay value. Useful for things like resizeObserver.
245
286
  */
@@ -1,4 +1,4 @@
1
- import { d as getEnvelope } from './Envelopes2.js';
1
+ import { e as getEnvelope } from './Envelopes2.js';
2
2
  import { c as createStore } from './index3.js';
3
3
  import { g as getTemplate } from './Templates2.js';
4
4
 
@@ -9,6 +9,9 @@ const { state, onChange } = createStore({
9
9
  loadProgress: 0,
10
10
  loading: true,
11
11
  error: '',
12
+ // This can be used as a data field on components that need to force re-rendering when the underlying data has changed. Stencil stores
13
+ // are handy but not very sophisticated. They don't re-render on "deep" changes.
14
+ updateCount: 1,
12
15
  roleNames: [],
13
16
  dirty: false,
14
17
  });
@@ -107,5 +107,15 @@ var updateEnvelopeFieldInitials = function (endpoint, envelopeId, fieldName, ini
107
107
  .then(function (r) { return r.data; })];
108
108
  });
109
109
  }); };
110
+ /**
111
+ * Get the attached file for an attachment field (if any)
112
+ */
113
+ var getFieldAttachment = function (endpoint, envelopeId, fieldName) { return __awaiter(void 0, void 0, void 0, function () {
114
+ return __generator(this, function (_a) {
115
+ return [2 /*return*/, endpoint.api //
116
+ .get("/envelopes/".concat(envelopeId, "/fields/").concat(fieldName, "/document"), { responseType: 'blob' })
117
+ .then(function (r) { return r.data; })];
118
+ });
119
+ }); };
110
120
 
111
- export { updateEnvelopeFieldSignature as a, updateEnvelopeFieldInitials as b, getEnvelopeFile as c, getEnvelope as d, getSigningSession as g, updateEnvelopeField as u };
121
+ export { updateEnvelopeFieldSignature as a, updateEnvelopeFieldInitials as b, getEnvelopeFile as c, getFieldAttachment as d, getEnvelope as e, getSigningSession as g, updateEnvelopeField as u };