@verdocs/web-sdk 6.13.3 → 6.14.1
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.
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{utils-BtmSHO0F.js → utils-D97WoGBX.js} +12 -2
- package/dist/cjs/utils-D97WoGBX.js.map +1 -0
- package/dist/cjs/verdocs-adopt-signature-dialog_7.cjs.entry.js +3 -3
- package/dist/cjs/verdocs-adopt-signature-dialog_7.cjs.entry.js.map +1 -1
- package/dist/cjs/verdocs-checkbox_5.cjs.entry.js +56 -11
- package/dist/cjs/verdocs-checkbox_5.cjs.entry.js.map +1 -1
- package/dist/cjs/verdocs-contact-picker.cjs.entry.js +1 -1
- package/dist/cjs/verdocs-download-dialog_4.cjs.entry.js +1 -1
- package/dist/cjs/verdocs-envelope-sidebar.cjs.entry.js +1 -1
- package/dist/cjs/verdocs-envelope-sidebar.cjs.entry.js.map +1 -1
- package/dist/cjs/verdocs-envelopes-list.cjs.entry.js +1 -1
- package/dist/cjs/verdocs-field-attachment_11.cjs.entry.js +89 -9
- package/dist/cjs/verdocs-field-attachment_11.cjs.entry.js.map +1 -1
- package/dist/cjs/verdocs-pagination_2.cjs.entry.js +1 -1
- package/dist/cjs/verdocs-preview_6.cjs.entry.js +285 -40
- package/dist/cjs/verdocs-preview_6.cjs.entry.js.map +1 -1
- package/dist/cjs/verdocs-sign.cjs.entry.js +37 -6
- package/dist/cjs/verdocs-sign.cjs.entry.js.map +1 -1
- package/dist/cjs/verdocs-signing-progress.cjs.entry.js +1 -1
- package/dist/cjs/verdocs-template-document-page_2.cjs.entry.js +1 -1
- package/dist/cjs/verdocs-template-star.cjs.entry.js +2 -2
- package/dist/cjs/verdocs-template-star.cjs.entry.js.map +1 -1
- package/dist/cjs/verdocs-web-sdk.cjs.js +1 -1
- package/dist/collection/components/controls/verdocs-checkbox/verdocs-checkbox.css +18 -1
- package/dist/collection/components/dialogs/verdocs-adopt-signature-dialog/verdocs-adopt-signature-dialog.js +3 -3
- package/dist/collection/components/dialogs/verdocs-adopt-signature-dialog/verdocs-adopt-signature-dialog.js.map +1 -1
- package/dist/collection/components/embeds/verdocs-send/verdocs-send.css +6 -0
- package/dist/collection/components/embeds/verdocs-send/verdocs-send.js +1 -1
- package/dist/collection/components/embeds/verdocs-send/verdocs-send.js.map +1 -1
- package/dist/collection/components/embeds/verdocs-sign/verdocs-sign.js +38 -5
- package/dist/collection/components/embeds/verdocs-sign/verdocs-sign.js.map +1 -1
- package/dist/collection/components/envelopes/verdocs-envelope-sidebar/verdocs-envelope-sidebar.js +1 -1
- package/dist/collection/components/envelopes/verdocs-envelope-sidebar/verdocs-envelope-sidebar.js.map +1 -1
- package/dist/collection/components/envelopes/verdocs-envelopes-list/verdocs-envelopes-list.js +2 -2
- package/dist/collection/components/envelopes/verdocs-status-indicator/verdocs-status-indicator.js +1 -1
- package/dist/collection/components/fields/verdocs-field-checkbox/verdocs-field-checkbox.css +22 -0
- package/dist/collection/components/fields/verdocs-field-checkbox/verdocs-field-checkbox.js +14 -1
- package/dist/collection/components/fields/verdocs-field-checkbox/verdocs-field-checkbox.js.map +1 -1
- package/dist/collection/components/fields/verdocs-field-date/verdocs-field-date.js +1 -2
- package/dist/collection/components/fields/verdocs-field-date/verdocs-field-date.js.map +1 -1
- package/dist/collection/components/fields/verdocs-field-initial/verdocs-field-initial.js +1 -1
- package/dist/collection/components/fields/verdocs-field-initial/verdocs-field-initial.js.map +1 -1
- package/dist/collection/components/fields/verdocs-field-radio/verdocs-field-radio.css +29 -2
- package/dist/collection/components/fields/verdocs-field-radio/verdocs-field-radio.js +14 -1
- package/dist/collection/components/fields/verdocs-field-radio/verdocs-field-radio.js.map +1 -1
- package/dist/collection/components/fields/verdocs-field-signature/verdocs-field-signature.js +1 -1
- package/dist/collection/components/fields/verdocs-field-signature/verdocs-field-signature.js.map +1 -1
- package/dist/collection/components/fields/verdocs-field-textbox/verdocs-field-textbox.js +1 -1
- package/dist/collection/components/fields/verdocs-field-textbox/verdocs-field-textbox.js.map +1 -1
- package/dist/collection/components/templates/verdocs-template-field-properties/verdocs-template-field-properties.css +5 -0
- package/dist/collection/components/templates/verdocs-template-field-properties/verdocs-template-field-properties.js +55 -9
- package/dist/collection/components/templates/verdocs-template-field-properties/verdocs-template-field-properties.js.map +1 -1
- package/dist/collection/components/templates/verdocs-template-fields/verdocs-template-fields.css +4 -0
- package/dist/collection/components/templates/verdocs-template-fields/verdocs-template-fields.js +281 -36
- package/dist/collection/components/templates/verdocs-template-fields/verdocs-template-fields.js.map +1 -1
- package/dist/collection/components/templates/verdocs-template-star/verdocs-template-star.js +2 -2
- package/dist/collection/components/templates/verdocs-template-star/verdocs-template-star.js.map +1 -1
- package/dist/collection/utils/ToggleFields.js +61 -0
- package/dist/collection/utils/ToggleFields.js.map +1 -0
- package/dist/collection/utils/utils.js +9 -0
- package/dist/collection/utils/utils.js.map +1 -1
- package/dist/components/{p-CEkRxfcu.js → p-58qb6gkU.js} +2 -2
- package/dist/components/{p-BKLlc2r0.js → p-5M_R8La0.js} +2 -2
- package/dist/components/{p-D-X-Zcsr.js → p-BIi4c9Gz.js} +2 -2
- package/dist/components/p-BLsFdjFq.js +2 -0
- package/dist/components/p-BLsFdjFq.js.map +1 -0
- package/dist/components/{p-CQzPkAVQ.js → p-BPcxbmXF.js} +2 -2
- package/dist/components/{p-CQzPkAVQ.js.map → p-BPcxbmXF.js.map} +1 -1
- package/dist/components/{p-DTG2X1A2.js → p-BeDDvLcN.js} +2 -2
- package/dist/components/p-ByEpps_M.js +2 -0
- package/dist/components/p-ByEpps_M.js.map +1 -0
- package/dist/components/{p-D0MFs2Dv.js → p-C8ZliaLz.js} +2 -2
- package/dist/components/{p-D0MFs2Dv.js.map → p-C8ZliaLz.js.map} +1 -1
- package/dist/components/{p-B4tpmyon.js → p-CAJJndLX.js} +2 -2
- package/dist/components/{p-lCn8WPSe.js → p-CaFhF-9s.js} +2 -2
- package/dist/components/p-Cisooi3V.js +2 -0
- package/dist/components/p-Cisooi3V.js.map +1 -0
- package/dist/components/{p-DslyN9XL.js → p-ClWqxMkZ.js} +2 -2
- package/dist/components/{p-DslyN9XL.js.map → p-ClWqxMkZ.js.map} +1 -1
- package/dist/components/{p-DscL0SIM.js → p-D56nBgHQ.js} +2 -2
- package/dist/components/{p-CFacV7mg.js → p-DMaRtkQF.js} +2 -2
- package/dist/components/{p-CFacV7mg.js.map → p-DMaRtkQF.js.map} +1 -1
- package/dist/components/{p-CEcG_ay-.js → p-DReW8CSB.js} +2 -2
- package/dist/components/{p-BhG0HGg6.js → p-DX713VO2.js} +2 -2
- package/dist/components/p-DbWcp3S8.js +2 -0
- package/dist/components/p-DbWcp3S8.js.map +1 -0
- package/dist/components/p-DvxzLwaB.js +2 -0
- package/dist/components/p-DvxzLwaB.js.map +1 -0
- package/dist/components/p-NtvxlYzY.js +2 -0
- package/dist/components/p-NtvxlYzY.js.map +1 -0
- package/dist/components/{p-Cij_2Ym2.js → p-Vs72fn43.js} +2 -2
- package/dist/components/p-Vs72fn43.js.map +1 -0
- package/dist/components/{p-9kEZy9MP.js → p-YCI5JKXK.js} +2 -2
- package/dist/components/{p-B1AE2j97.js → p-h3swu3rA.js} +2 -2
- package/dist/components/{p-B1AE2j97.js.map → p-h3swu3rA.js.map} +1 -1
- package/dist/components/{p-kHTZa3Ev.js → p-hwu-GrDS.js} +2 -2
- package/dist/components/p-qLNetL5t.js +2 -0
- package/dist/components/p-qLNetL5t.js.map +1 -0
- package/dist/components/{p-06em1_P-.js → p-vuCjHk-M.js} +2 -2
- package/dist/components/p-zYtapVJ0.js +2 -0
- package/dist/components/p-zYtapVJ0.js.map +1 -0
- package/dist/components/verdocs-adopt-signature-dialog.js +1 -1
- package/dist/components/verdocs-build.js +1 -1
- package/dist/components/verdocs-checkbox.js +1 -1
- package/dist/components/verdocs-contact-picker.js +1 -1
- package/dist/components/verdocs-disclosure-dialog.js +1 -1
- package/dist/components/verdocs-envelope-document-page.js +1 -1
- package/dist/components/verdocs-envelope-sidebar.js +1 -1
- package/dist/components/verdocs-envelope-sidebar.js.map +1 -1
- package/dist/components/verdocs-envelopes-list.js +1 -1
- package/dist/components/verdocs-field-attachment.js +1 -1
- package/dist/components/verdocs-field-checkbox.js +1 -1
- package/dist/components/verdocs-field-date.js +1 -1
- package/dist/components/verdocs-field-dropdown.js +1 -1
- package/dist/components/verdocs-field-initial.js +1 -1
- package/dist/components/verdocs-field-payment.js +1 -1
- package/dist/components/verdocs-field-radio.js +1 -1
- package/dist/components/verdocs-field-signature.js +1 -1
- package/dist/components/verdocs-field-textarea.js +1 -1
- package/dist/components/verdocs-field-textbox.js +1 -1
- package/dist/components/verdocs-field-timestamp.js +1 -1
- package/dist/components/verdocs-kba-dialog.js +1 -1
- package/dist/components/verdocs-multiselect.js +1 -1
- package/dist/components/verdocs-preview.js +1 -1
- package/dist/components/verdocs-quick-filter.js +1 -1
- package/dist/components/verdocs-send.js +1 -1
- package/dist/components/verdocs-sign.js +1 -1
- package/dist/components/verdocs-sign.js.map +1 -1
- package/dist/components/verdocs-signing-progress.js +1 -1
- package/dist/components/verdocs-template-document-page.js +1 -1
- package/dist/components/verdocs-template-field-properties.js +1 -1
- package/dist/components/verdocs-template-fields.js +1 -1
- package/dist/components/verdocs-template-star.js +1 -1
- package/dist/components/verdocs-templates-list.js +1 -1
- package/dist/components/verdocs-view.js +1 -1
- package/dist/custom-elements.json +6 -0
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{utils-Bh3zb1Xs.js → utils-T8dqWH7y.js} +12 -3
- package/dist/esm/utils-T8dqWH7y.js.map +1 -0
- package/dist/esm/verdocs-adopt-signature-dialog_7.entry.js +3 -3
- package/dist/esm/verdocs-adopt-signature-dialog_7.entry.js.map +1 -1
- package/dist/esm/verdocs-checkbox_5.entry.js +56 -11
- package/dist/esm/verdocs-checkbox_5.entry.js.map +1 -1
- package/dist/esm/verdocs-contact-picker.entry.js +1 -1
- package/dist/esm/verdocs-download-dialog_4.entry.js +1 -1
- package/dist/esm/verdocs-envelope-sidebar.entry.js +1 -1
- package/dist/esm/verdocs-envelope-sidebar.entry.js.map +1 -1
- package/dist/esm/verdocs-envelopes-list.entry.js +1 -1
- package/dist/esm/verdocs-field-attachment_11.entry.js +89 -9
- package/dist/esm/verdocs-field-attachment_11.entry.js.map +1 -1
- package/dist/esm/verdocs-pagination_2.entry.js +1 -1
- package/dist/esm/verdocs-preview_6.entry.js +285 -40
- package/dist/esm/verdocs-preview_6.entry.js.map +1 -1
- package/dist/esm/verdocs-sign.entry.js +37 -6
- package/dist/esm/verdocs-sign.entry.js.map +1 -1
- package/dist/esm/verdocs-signing-progress.entry.js +1 -1
- package/dist/esm/verdocs-template-document-page_2.entry.js +1 -1
- package/dist/esm/verdocs-template-star.entry.js +2 -2
- package/dist/esm/verdocs-template-star.entry.js.map +1 -1
- package/dist/esm/verdocs-web-sdk.js +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/utils-T8dqWH7y.js +2 -0
- package/dist/esm-es5/utils-T8dqWH7y.js.map +1 -0
- package/dist/esm-es5/verdocs-adopt-signature-dialog_7.entry.js +1 -1
- package/dist/esm-es5/verdocs-adopt-signature-dialog_7.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-checkbox_5.entry.js +1 -1
- package/dist/esm-es5/verdocs-checkbox_5.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-contact-picker.entry.js +1 -1
- package/dist/esm-es5/verdocs-download-dialog_4.entry.js +1 -1
- package/dist/esm-es5/verdocs-envelope-sidebar.entry.js +1 -1
- package/dist/esm-es5/verdocs-envelope-sidebar.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-envelopes-list.entry.js +1 -1
- package/dist/esm-es5/verdocs-field-attachment_11.entry.js +1 -1
- package/dist/esm-es5/verdocs-field-attachment_11.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-pagination_2.entry.js +1 -1
- package/dist/esm-es5/verdocs-preview_6.entry.js +2 -2
- package/dist/esm-es5/verdocs-preview_6.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-sign.entry.js +1 -1
- package/dist/esm-es5/verdocs-sign.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-signing-progress.entry.js +1 -1
- package/dist/esm-es5/verdocs-template-document-page_2.entry.js +1 -1
- package/dist/esm-es5/verdocs-template-star.entry.js +1 -1
- package/dist/esm-es5/verdocs-template-star.entry.js.map +1 -1
- package/dist/esm-es5/verdocs-web-sdk.js +1 -1
- package/dist/types/components/embeds/verdocs-sign/verdocs-sign.d.ts +3 -0
- package/dist/types/components/fields/verdocs-field-checkbox/verdocs-field-checkbox.d.ts +1 -0
- package/dist/types/components/fields/verdocs-field-date/verdocs-field-date.d.ts +1 -1
- package/dist/types/components/fields/verdocs-field-radio/verdocs-field-radio.d.ts +1 -0
- package/dist/types/components/templates/verdocs-template-field-properties/verdocs-template-field-properties.d.ts +1 -0
- package/dist/types/components/templates/verdocs-template-fields/verdocs-template-fields.d.ts +50 -3
- package/dist/types/utils/ToggleFields.d.ts +12 -0
- package/dist/types/utils/utils.d.ts +8 -2
- package/dist/verdocs-web-sdk/{p-46d6279e.entry.js → p-002fee52.entry.js} +2 -2
- package/dist/verdocs-web-sdk/p-1b4cde18.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-1b4cde18.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-1f708b6a.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-1f708b6a.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/{p-7dd394be.system.entry.js → p-259e53e2.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-0d19368a.system.entry.js → p-298ee271.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/p-2cddbced.system.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-2cddbced.system.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/{p-99a6b317.system.entry.js → p-36f2fe29.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-5455e818.entry.js → p-442b6b04.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-5455e818.entry.js.map → p-442b6b04.entry.js.map} +1 -1
- package/dist/verdocs-web-sdk/{p-143428bc.system.entry.js → p-4a934b98.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-478de2c9.entry.js → p-6ac28b30.entry.js} +2 -2
- package/dist/verdocs-web-sdk/p-6fdd258b.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-6fdd258b.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/{p-78a18a3b.entry.js → p-72702300.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-228c0fa3.system.entry.js → p-83b4e117.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-228c0fa3.system.entry.js.map → p-83b4e117.system.entry.js.map} +1 -1
- package/dist/verdocs-web-sdk/{p-58b84a5a.entry.js → p-923aabca.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-58b84a5a.entry.js.map → p-923aabca.entry.js.map} +1 -1
- package/dist/verdocs-web-sdk/p-BdZ5Ghsa.system.js +1 -1
- package/dist/verdocs-web-sdk/p-CHdb5wzt.js +2 -0
- package/dist/verdocs-web-sdk/p-CHdb5wzt.js.map +1 -0
- package/dist/verdocs-web-sdk/p-DeoYp6nD.system.js +2 -0
- package/dist/verdocs-web-sdk/p-DeoYp6nD.system.js.map +1 -0
- package/dist/verdocs-web-sdk/p-ab798e66.system.entry.js +8 -0
- package/dist/verdocs-web-sdk/p-ab798e66.system.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-ad4ae5c3.entry.js +8 -0
- package/dist/verdocs-web-sdk/p-ad4ae5c3.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/{p-3a97f4b4.system.entry.js → p-b3cad1ae.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/p-b5fbfc6e.system.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-b5fbfc6e.system.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/{p-ea6c0b55.entry.js → p-bdfda300.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-1a91a922.entry.js → p-c273b465.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-eccac670.system.entry.js → p-c43a5bce.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/p-d7bb1eaa.system.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-d7bb1eaa.system.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/p-d8dbcb2c.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-d8dbcb2c.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/{p-20bc8055.system.entry.js → p-dea0ae12.system.entry.js} +2 -2
- package/dist/verdocs-web-sdk/{p-20bc8055.system.entry.js.map → p-dea0ae12.system.entry.js.map} +1 -1
- package/dist/verdocs-web-sdk/{p-8f50f83f.entry.js → p-efc80cbf.entry.js} +2 -2
- package/dist/verdocs-web-sdk/p-fd614aa0.system.entry.js +2 -0
- package/dist/verdocs-web-sdk/p-fd614aa0.system.entry.js.map +1 -0
- package/dist/verdocs-web-sdk/verdocs-web-sdk.esm.js +1 -1
- package/package.json +2 -2
- package/dist/cjs/utils-BtmSHO0F.js.map +0 -1
- package/dist/components/p-1FjgijEi.js +0 -2
- package/dist/components/p-1FjgijEi.js.map +0 -1
- package/dist/components/p-BCwFpXpV.js +0 -2
- package/dist/components/p-BCwFpXpV.js.map +0 -1
- package/dist/components/p-Bxvw_LqR.js +0 -2
- package/dist/components/p-Bxvw_LqR.js.map +0 -1
- package/dist/components/p-Cij_2Ym2.js.map +0 -1
- package/dist/components/p-DGNIsXfr.js +0 -2
- package/dist/components/p-DGNIsXfr.js.map +0 -1
- package/dist/components/p-DRP4Xxiu.js +0 -2
- package/dist/components/p-DRP4Xxiu.js.map +0 -1
- package/dist/components/p-K-sDaUxS.js +0 -2
- package/dist/components/p-K-sDaUxS.js.map +0 -1
- package/dist/components/p-ek0LNMtb.js +0 -2
- package/dist/components/p-ek0LNMtb.js.map +0 -1
- package/dist/esm/utils-Bh3zb1Xs.js.map +0 -1
- package/dist/esm-es5/utils-Bh3zb1Xs.js +0 -2
- package/dist/esm-es5/utils-Bh3zb1Xs.js.map +0 -1
- package/dist/verdocs-web-sdk/p-6fb7fd6d.system.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-6fb7fd6d.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-895174e4.system.entry.js +0 -8
- package/dist/verdocs-web-sdk/p-895174e4.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-8ec770c3.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-8ec770c3.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-8f7d0062.entry.js +0 -8
- package/dist/verdocs-web-sdk/p-8f7d0062.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-935267a6.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-935267a6.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-CGsVCy75.js +0 -2
- package/dist/verdocs-web-sdk/p-CGsVCy75.js.map +0 -1
- package/dist/verdocs-web-sdk/p-a9899fce.system.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-a9899fce.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-bf38aa98.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-bf38aa98.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-c5f8125b.system.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-c5f8125b.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-df921f12.system.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-df921f12.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-f6ad24c5.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-f6ad24c5.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-nfw6V5pF.system.js +0 -2
- package/dist/verdocs-web-sdk/p-nfw6V5pF.system.js.map +0 -1
- /package/dist/components/{p-CEkRxfcu.js.map → p-58qb6gkU.js.map} +0 -0
- /package/dist/components/{p-BKLlc2r0.js.map → p-5M_R8La0.js.map} +0 -0
- /package/dist/components/{p-D-X-Zcsr.js.map → p-BIi4c9Gz.js.map} +0 -0
- /package/dist/components/{p-DTG2X1A2.js.map → p-BeDDvLcN.js.map} +0 -0
- /package/dist/components/{p-B4tpmyon.js.map → p-CAJJndLX.js.map} +0 -0
- /package/dist/components/{p-lCn8WPSe.js.map → p-CaFhF-9s.js.map} +0 -0
- /package/dist/components/{p-DscL0SIM.js.map → p-D56nBgHQ.js.map} +0 -0
- /package/dist/components/{p-CEcG_ay-.js.map → p-DReW8CSB.js.map} +0 -0
- /package/dist/components/{p-BhG0HGg6.js.map → p-DX713VO2.js.map} +0 -0
- /package/dist/components/{p-9kEZy9MP.js.map → p-YCI5JKXK.js.map} +0 -0
- /package/dist/components/{p-kHTZa3Ev.js.map → p-hwu-GrDS.js.map} +0 -0
- /package/dist/components/{p-06em1_P-.js.map → p-vuCjHk-M.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-46d6279e.entry.js.map → p-002fee52.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-7dd394be.system.entry.js.map → p-259e53e2.system.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-0d19368a.system.entry.js.map → p-298ee271.system.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-99a6b317.system.entry.js.map → p-36f2fe29.system.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-143428bc.system.entry.js.map → p-4a934b98.system.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-478de2c9.entry.js.map → p-6ac28b30.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-78a18a3b.entry.js.map → p-72702300.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-3a97f4b4.system.entry.js.map → p-b3cad1ae.system.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-ea6c0b55.entry.js.map → p-bdfda300.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-1a91a922.entry.js.map → p-c273b465.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-eccac670.system.entry.js.map → p-c43a5bce.system.entry.js.map} +0 -0
- /package/dist/verdocs-web-sdk/{p-8f50f83f.entry.js.map → p-efc80cbf.entry.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["verdocsFieldAttachmentCss","PaperclipIcon","AttachedIcon","VerdocsFieldAttachment","constructor","hostRef","this","source","sourceid","fieldname","field","disabled","editable","moveable","done","xscale","yscale","pagenumber","showingProperties","dialogOpen","selectedFile","focused","handleUploadNext","e","console","log","detail","_a","attached","emit","handleUploadRemove","preventDefault","stopPropagation","deleted","fieldName","handleBlur","focusField","el","focus","showSettingsPanel","settingsPanel","document","getElementById","showPanel","hideSettingsPanel","hidePanel","onEditableChanged","newVal","oldVal","interact","unset","disconnectedCallback","handleShow","render","index","Store","getField","required","value","label","readonly","settings","signerClass","hasFile","h","Host","class","innerHTML","onClick","Fragment","id","style","transform","Math","floor","SettingsIcon","anchor","onClickAway","templateId","onClose","onDelete","onSettingsChanged","settingsChanged","helpText","existingFile","onNext","onRemove","onExit","verdocsFieldCheckboxCss","VerdocsFieldCheckbox","checked","htmlFor","name","type","verdocsFieldDateCss","VerdocsFieldDate","containerId","random","toString","substring","picker","inputEl","componentDidLoad","AirDatepicker","locale","localeEn","isMobile","autoClose","onShow","onHide","onSelect","date","formattedDate","event","CustomEvent","dispatchEvent","componentDidRender","dynamicDrop","resizable","edges","top","left","bottom","right","modifiers","restrictSize","min","width","height","listeners","start","handleResizeStart","bind","move","handleResize","end","handleResizeEnd","target","dataset","originalBottom","rect","dX","deltaRect","dY","currentLeft","parseFloat","currentBottom","Object","assign","round","newBottom","template","getTemplate","VerdocsEndpoint","getDefault","oldField","fields","find","f","y","updateField","then","async","updatedField","newTemplate","JSON","parse","stringify","fieldIndex","findIndex","updateTemplate","x","catch","placeholder","small","formattedValue","format","Date","FORMAT_DATE","ref","onFocus","onBlur","verdocsFieldDropdownCss","VerdocsFieldDropdown","selectEl","showPicker","handleChange","fieldChange","options","onChange","map","option","selected","length","verdocsFieldInitialCss","VerdocsFieldInitial","initials","menuOpen","closeMenuTimer","outsideMenuHandler","tempInitials","openMenu","clearTimeout","scheduleCloseMenu","setTimeout","closeMenu","contains","addEventListener","removeEventListener","base64","src","alt","filled","onMouseEnter","onMouseLeave","adopt","initialid","verdocsFieldRadioCss","RadioIconUnselected","RadioIconSelected","VerdocsFieldRadio","group","maxWidth","verdocsFieldSignatureCss","VerdocsFieldSignature","tempSignature","signatureid","verdocsFieldTextareaCss","VerdocsFieldTextarea","endpoint","translateX","translateY","split","verdocsFieldTextboxCss","VerdocsFieldTextbox","multiline","default","maxlength","verdocsFieldTimestampCss","VerdocsFieldTimestamp","formatted","toISOString","FORMAT_TIMESTAMP","verdocsUploadDialogCss","TrashIcon","VerdocsUploadDialog","maxSize","draggingOver","confirmDelete","selectedFiles","errorMessage","handleCancel","exit","handleDismiss","handleDone","next","handleDragOver","handleDragLeave","handleDrop","handleSetSelected","Array","from","dataTransfer","files","handleRemoveAttachment","newFiles","splice","totalSize","reduce","acc","file","size","handleDeleteAttachment","remove","handleSelectFile","fileInput","click","handleFileChange","key","marginTop","onDragOver","onDragLeave","onDrop","display","accept","variant","heading","message","showCancel"],"sources":["src/components/fields/verdocs-field-attachment/verdocs-field-attachment.scss?tag=verdocs-field-attachment","src/components/fields/verdocs-field-attachment/verdocs-field-attachment.tsx","src/components/fields/verdocs-field-checkbox/verdocs-field-checkbox.scss?tag=verdocs-field-checkbox","src/components/fields/verdocs-field-checkbox/verdocs-field-checkbox.tsx","src/components/fields/verdocs-field-date/verdocs-field-date.scss?tag=verdocs-field-date","src/components/fields/verdocs-field-date/verdocs-field-date.tsx","src/components/fields/verdocs-field-dropdown/verdocs-field-dropdown.scss?tag=verdocs-field-dropdown","src/components/fields/verdocs-field-dropdown/verdocs-field-dropdown.tsx","src/components/fields/verdocs-field-initial/verdocs-field-initial.scss?tag=verdocs-field-initial","src/components/fields/verdocs-field-initial/verdocs-field-initial.tsx","src/components/fields/verdocs-field-radio/verdocs-field-radio.scss?tag=verdocs-field-radio","src/components/fields/verdocs-field-radio/verdocs-field-radio.tsx","src/components/fields/verdocs-field-signature/verdocs-field-signature.scss?tag=verdocs-field-signature","src/components/fields/verdocs-field-signature/verdocs-field-signature.tsx","src/components/fields/verdocs-field-textarea/verdocs-field-textarea.scss?tag=verdocs-field-textarea","src/components/fields/verdocs-field-textarea/verdocs-field-textarea.tsx","src/components/fields/verdocs-field-textbox/verdocs-field-textbox.scss?tag=verdocs-field-textbox","src/components/fields/verdocs-field-textbox/verdocs-field-textbox.tsx","src/components/fields/verdocs-field-timestamp/verdocs-field-timestamp.scss?tag=verdocs-field-timestamp","src/components/fields/verdocs-field-timestamp/verdocs-field-timestamp.tsx","src/components/dialogs/verdocs-upload-dialog/verdocs-upload-dialog.scss?tag=verdocs-upload-dialog","src/components/dialogs/verdocs-upload-dialog/verdocs-upload-dialog.tsx"],"sourcesContent":["@import '../../../theme.scss';\n\nverdocs-field-attachment {\n font-family: $verdocs-primary-font;\n box-sizing: border-box;\n width: 24px;\n height: 24px;\n display: block;\n font-size: 11px;\n position: relative;\n scroll-margin: 20px 0;\n background-color: transparent;\n transform-origin: bottom left;\n\n label {\n top: -14px;\n left: -1px;\n height: 14px;\n color: white;\n padding: 0 4px;\n font-size: 9px;\n line-height: 13px;\n position: absolute;\n background: #4a4a99;\n border-top-left-radius: 2px;\n border-top-right-radius: 2px;\n }\n\n svg {\n width: 16px;\n height: 16px;\n }\n\n &.disabled svg {\n opacity: 0.5;\n\n span {\n cursor: inherit;\n }\n }\n\n .attach {\n // This is needed to bring down the cursor from the parent element, which is where interactjs applies it\n cursor: inherit;\n width: 24px;\n height: 24px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--verdocs-field-radius);\n }\n\n &.required {\n .attach {\n border: 1px solid var(--verdocs-required-field-border);\n }\n }\n\n verdocs-button-panel {\n top: 1px;\n left: -19px;\n opacity: 0.5;\n z-index: 1000;\n cursor: pointer;\n position: absolute;\n transform: scale(0.6);\n\n &[data-active],\n &:hover {\n opacity: 1;\n }\n\n .icon {\n svg {\n fill: #333333;\n }\n\n &:hover {\n svg {\n fill: #000000;\n }\n }\n }\n }\n\n .settings-icon {\n position: absolute;\n top: -3px;\n left: -20px;\n display: inline-block;\n cursor: pointer;\n opacity: 0.3;\n\n svg {\n fill: $border-color;\n }\n\n &:hover {\n opacity: 1;\n }\n }\n}\n","import interact from 'interactjs';\nimport {ITemplateField, IEnvelopeField} from '@verdocs/js-sdk';\nimport {Component, h, Host, Prop, Method, Event, EventEmitter, State, Fragment, Element, Listen, Watch} from '@stencil/core';\nimport {SettingsIcon} from '../../../utils/Icons';\nimport {Store} from '../../../utils/Datastore';\n\nexport interface ISelectedFile {\n lastModified: number;\n size: number;\n type: string;\n name: string;\n data: string;\n}\n\nconst PaperclipIcon = `<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"var(--verdocs-field-text-color, currentColor)\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15.172 7l-6.586 6.586a2 2 0 102.828 2.828l6.414-6.586a4 4 0 00-5.656-5.656l-6.415 6.585a6 6 0 108.486 8.486L20.5 13\" /></svg>`;\n\nconst AttachedIcon = `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"var(--verdocs-attachment-icon-color, #339933)\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-file-check\"><path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\"/><path d=\"M14 2v4a2 2 0 0 0 2 2h4\"/><path d=\"m9 15 2 2 4-4\"/></svg>`;\n\n/**\n * Displays an attachment field.\n */\n@Component({\n tag: 'verdocs-field-attachment',\n styleUrl: 'verdocs-field-attachment.scss',\n shadow: false,\n})\nexport class VerdocsFieldAttachment {\n @Element() el: HTMLElement;\n\n /**\n * Fields may be attached to templates or envelopes, but only template fields may be edited.\n */\n @Prop({reflect: true}) source: 'template' | 'envelope' = 'template';\n\n /**\n * The source template or envelope ID the field is found in.\n */\n @Prop({reflect: true}) sourceid: string = '';\n\n /**\n * The name of the field to display.\n */\n @Prop({reflect: true}) fieldname: string = '';\n\n /**\n * Override the field's settings. This is intended to be used during signing when fields are being\n * mutated.\n */\n @Prop() field: IEnvelopeField | null | undefined = null;\n\n /**\n * If set to true, it will force interact to unset the el, resulting in no dragging the field.\n */\n @Prop({reflect: true}) isPreview?: boolean;\n\n /**\n * If set, overrides the field's settings object. Primarily used to support \"preview\" modes where all fields are disabled.\n */\n @Prop({reflect: true}) disabled?: boolean = false;\n\n /**\n * If set, a settings icon will be displayed on hover. The settings shown allow the field's recipient and other settings to be\n * changed, so it should typically only be enabled in the Builder.\n */\n @Prop({reflect: true}) editable?: boolean = false;\n\n /**\n * If set, the field may be dragged to a new location. This should only be enabled in the Builder, or for self-placed fields.\n */\n @Prop({reflect: true}) moveable?: boolean = false;\n\n /**\n * If set, the field is considered \"done\" and is drawn in a display-final-value state.\n */\n @Prop({reflect: true}) done?: boolean = false;\n\n /**\n * If set, the field will be be scaled horizontally by this factor.\n */\n @Prop({reflect: true}) xscale?: number = 1;\n\n /**\n * If set, the field will be be scaled vertically by this factor.\n */\n @Prop({reflect: true}) yscale?: number = 1;\n\n /**\n * The page the field is on\n */\n @Prop({reflect: true}) pagenumber?: number = 1;\n\n /**\n * Event fired when the field's settings are changed.\n */\n @Event({composed: true}) settingsChanged: EventEmitter<{fieldName: string; field: ITemplateField}>;\n\n /**\n * Event fired when a file is attached by the signer.\n */\n @Event({composed: true}) attached: EventEmitter<ISelectedFile>;\n\n /**\n * Event fired when the field is deleted. Note that this is for the FIELD (e.g. in\n * Build) not for any attachments (during signing).\n */\n @Event({composed: true}) deleted: EventEmitter<{fieldName: string}>;\n\n @State() showingProperties?: boolean = false;\n @State() dialogOpen?: boolean = false;\n @State() selectedFile?: ISelectedFile | null = null;\n @State() focused = false;\n\n @Listen('blur')\n handleBlur() {\n this.focused = false;\n }\n\n @Method()\n async focusField() {\n this.el.focus();\n this.focused = true;\n this.dialogOpen = true;\n }\n\n @Method()\n async showSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.showPanel) {\n settingsPanel.showPanel();\n }\n }\n\n @Method()\n async hideSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.hidePanel) {\n settingsPanel.hidePanel();\n }\n }\n\n @Watch('editable')\n onEditableChanged(newVal: boolean, oldVal: boolean) {\n // When transitioning out of editable mode (e.g., builder -> preview tab), clear interact bindings\n if (oldVal && !newVal) {\n interact(this.el).unset();\n }\n }\n\n disconnectedCallback() {\n // Clear any interact.js drag/resize bindings so they don't leak if the DOM element is reused elsewhere\n interact(this.el).unset();\n }\n\n handleShow() {\n this.dialogOpen = true;\n }\n\n handleUploadNext = (e: any) => {\n console.log('Upload next', e);\n this.dialogOpen = false;\n this.selectedFile = e.detail[0];\n this.attached?.emit(e.detail[0]);\n };\n\n handleUploadRemove = (e: any) => {\n e.preventDefault();\n e.stopPropagation();\n this.dialogOpen = false;\n this.selectedFile = null;\n this.deleted?.emit({fieldName: this.fieldname});\n };\n\n render() {\n const {source, sourceid, fieldname, editable = false, done = false, disabled = false, focused, xscale = 1, yscale = 1} = this;\n\n const {index, field} = Store.getField(source, sourceid, fieldname, this.field);\n const {required = false, value = '', label = '', readonly = false, settings = {}} = field || {};\n const signerClass = `signer-${(index % 10) + 1}`;\n\n const hasFile = value || !!this.selectedFile;\n\n if (done) {\n return (\n <Host class={{'verdocs-field': true,done}}>\n <div class=\"attach\" innerHTML={hasFile ? AttachedIcon : PaperclipIcon} />\n </Host>\n );\n }\n\n return (\n <Host class={{'verdocs-field': true,required, disabled, done, focused, [signerClass]: true}}>\n {label && <label>{label}</label>}\n\n <div class=\"attach\" innerHTML={hasFile ? AttachedIcon : PaperclipIcon} onClick={() => !disabled && !readonly && this.handleShow()} />\n\n {editable && (\n <Fragment>\n <div\n id={`verdocs-settings-panel-trigger-${fieldname}`}\n style={{transform: `scale(${Math.floor((1 / xscale) * 1000) / 1000}, ${Math.floor((1 / yscale) * 1000) / 1000})`}}\n class=\"settings-icon\"\n innerHTML={SettingsIcon}\n onClick={(e: any) => {\n e.stopPropagation();\n this.showingProperties = !this.showingProperties;\n }}\n />\n\n {this.showingProperties && (\n <verdocs-portal anchor={`verdocs-settings-panel-trigger-${fieldname}`} onClickAway={() => (this.showingProperties = false)}>\n <verdocs-template-field-properties\n templateId={sourceid}\n fieldName={fieldname}\n onClose={() => (this.showingProperties = false)}\n onDelete={() => {\n this.deleted?.emit({fieldName: fieldname});\n return this.hideSettingsPanel();\n }}\n onSettingsChanged={e => {\n this.settingsChanged?.emit(e.detail);\n return this.hideSettingsPanel();\n }}\n helpText={'Attachments allow the user to attach their own documents (e.g. resumes or disclosures) to a signing flow.'}\n />\n </verdocs-portal>\n )}\n </Fragment>\n )}\n\n {this.dialogOpen && (\n <verdocs-portal>\n <verdocs-upload-dialog\n existingFile={settings}\n onNext={e => this.handleUploadNext(e)}\n onRemove={e => this.handleUploadRemove(e)}\n onExit={() => (this.dialogOpen = false)}\n />\n </verdocs-portal>\n )}\n </Host>\n );\n }\n}\n","@import '../../../theme.scss';\n\n// See https://www.kallmanation.com/styling-a-checkbox-with-only-css\nverdocs-field-checkbox {\n padding: 0;\n width: 16px;\n height: 16px;\n display: block;\n scroll-margin: 20px 0;\n box-sizing: border-box;\n transform-origin: bottom left;\n font-family: $verdocs-primary-font;\n\n // To avoid conflicting with the use of a label for the checkbox itself\n div.label {\n top: -14px;\n left: -1px;\n height: 14px;\n color: white;\n padding: 0 4px;\n font-size: 9px;\n line-height: 13px;\n position: absolute;\n background: #4a4a99;\n border-top-left-radius: 2px;\n border-top-right-radius: 2px;\n }\n\n label {\n // This is needed to bring down the cursor from the parent element, which is where interactjs applies it\n cursor: inherit;\n\n width: 14px;\n height: 14px;\n display: block;\n box-sizing: border-box;\n }\n\n &.disabled label {\n opacity: 0.5;\n }\n\n label > input[type='checkbox'] {\n display: none;\n }\n\n label > input[type='checkbox'] + *::before {\n margin: 0;\n content: '';\n width: 12px;\n height: 12px;\n display: block;\n line-height: 12px;\n border-radius: var(--verdocs-field-radius);\n box-sizing: border-box;\n border: 1px solid $verdocs-grey-2;\n }\n\n label > input[type='checkbox']:checked + * {\n color: $verdocs-green;\n }\n\n label > input[type='checkbox']:checked + *::before {\n content: '✓';\n color: white;\n font-size: 12px;\n text-align: center;\n background: $verdocs-green;\n border-color: $verdocs-green;\n }\n\n &.required {\n border: 1px solid var(--verdocs-required-field-border);\n }\n\n &.hide {\n display: none;\n }\n\n verdocs-button-panel {\n display: block;\n margin-left: -20px;\n margin-top: -17px;\n transform: scale(0.7);\n }\n\n .settings-icon {\n position: absolute;\n top: -5px;\n left: -20px;\n display: inline-block;\n cursor: pointer;\n opacity: 0.3;\n\n svg {\n fill: $border-color;\n }\n\n &:hover {\n opacity: 1;\n }\n }\n}\n","import interact from 'interactjs';\nimport {ITemplateField, IEnvelopeField} from '@verdocs/js-sdk';\nimport {Component, Event, EventEmitter, Fragment, h, Host, Method, Prop, State, Element, Listen, Watch} from '@stencil/core';\nimport {SettingsIcon} from '../../../utils/Icons';\nimport {Store} from '../../../utils/Datastore';\n\n/**\n * Displays a checkbox.\n */\n@Component({\n tag: 'verdocs-field-checkbox',\n styleUrl: 'verdocs-field-checkbox.scss',\n shadow: false,\n})\nexport class VerdocsFieldCheckbox {\n @Element() el: HTMLElement;\n\n /**\n * Fields may be attached to templates or envelopes, but only template fields may be edited.\n */\n @Prop({reflect: true}) source: 'template' | 'envelope' = 'template';\n\n /**\n * The source template or envelope ID the field is found in.\n */\n @Prop({reflect: true}) sourceid: string = '';\n\n /**\n * The name of the field to display.\n */\n @Prop({reflect: true}) fieldname: string = '';\n\n /**\n * Override the field's settings. This is intended to be used during signing when fields are being\n * mutated.\n */\n @Prop() field: IEnvelopeField | null | undefined = null;\n\n /**\n * If set to true, it will force interact to unset the el, resulting in no dragging the field.\n */\n @Prop({reflect: true}) isPreview?: boolean;\n\n /**\n * If set, overrides the field's settings object. Primarily used to support \"preview\" modes where all fields are disabled.\n */\n @Prop({reflect: true}) disabled?: boolean = false;\n\n /**\n * If set, the field is considered \"done\" and is drawn in a display-final-value state.\n */\n @Prop({reflect: true}) done?: boolean = false;\n\n /**\n * If set, a settings icon will be displayed on hover. The settings shown allow the field's recipient and other settings to be\n * changed, so it should typically only be enabled in the Builder.\n */\n @Prop({reflect: true}) editable?: boolean = false;\n\n /**\n * If set, the field may be dragged to a new location. This should only be enabled in the Builder, or for self-placed fields.\n */\n @Prop({reflect: true}) moveable?: boolean = false;\n\n /**\n * If set, the field will be be scaled horizontally by this factor.\n */\n @Prop({reflect: true}) xscale?: number = 1;\n\n /**\n * If set, the field will be be scaled vertically by this factor.\n */\n @Prop({reflect: true}) yscale?: number = 1;\n\n /**\n * The page the field is on\n */\n @Prop({reflect: true}) pagenumber?: number = 1;\n\n /**\n * Event fired when the field's settings are changed.\n */\n @Event({composed: true}) settingsChanged: EventEmitter<{fieldName: string; field: ITemplateField}>;\n\n /**\n * Event fired when the field is deleted.\n */\n @Event({composed: true}) deleted: EventEmitter<{fieldName: string}>;\n\n @State() showingProperties?: boolean = false;\n @State() focused = false;\n\n @Listen('blur')\n handleBlur() {\n this.focused = false;\n }\n\n @Method()\n async focusField() {\n this.el.focus();\n this.focused = true;\n }\n\n @Method()\n async showSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.showPanel) {\n settingsPanel.showPanel();\n }\n }\n\n @Method()\n async hideSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.hidePanel) {\n settingsPanel.hidePanel();\n }\n }\n\n @Watch('editable')\n onEditableChanged(newVal: boolean, oldVal: boolean) {\n // When transitioning out of editable mode (e.g., builder -> preview tab), clear interact bindings\n if (oldVal && !newVal) {\n interact(this.el).unset();\n }\n }\n\n disconnectedCallback() {\n // Clear any interact.js drag/resize bindings so they don't leak if the DOM element is reused elsewhere\n interact(this.el).unset();\n }\n\n render() {\n const {source, sourceid, fieldname, editable = false, done = false, disabled = false, focused, xscale = 1, yscale = 1} = this;\n const {index, field} = Store.getField(source, sourceid, fieldname, this.field);\n const {required = false, label = '', value = false, readonly = false} = field || {};\n const signerClass = `signer-${(index % 10) + 1}`;\n\n const checked = value === 'true';\n\n if (done) {\n return <Host class={{'verdocs-field': true,done}}>{checked ? '✓' : '☐'}</Host>;\n }\n\n return (\n <Host class={{'verdocs-field': true,required, disabled, done, focused, [signerClass]: true}}>\n {label && <div class=\"label\">{label}</div>}\n\n <label htmlFor={fieldname}>\n <input id={fieldname} name={fieldname} type=\"checkbox\" checked={checked} disabled={readonly || disabled} required={required} />\n <span />\n\n {editable && (\n <Fragment>\n <div\n id={`verdocs-settings-panel-trigger-${fieldname}`}\n style={{transform: `scale(${Math.floor((1 / xscale) * 1000) / 1000}, ${Math.floor((1 / yscale) * 1000) / 1000})`}}\n class=\"settings-icon\"\n innerHTML={SettingsIcon}\n onClick={(e: any) => {\n e.stopPropagation();\n this.showingProperties = !this.showingProperties;\n }}\n />\n\n {this.showingProperties && (\n <verdocs-portal anchor={`verdocs-settings-panel-trigger-${field.name}`} onClickAway={() => (this.showingProperties = false)}>\n <verdocs-template-field-properties\n templateId={sourceid}\n fieldName={field.name}\n onClose={() => (this.showingProperties = false)}\n onDelete={() => {\n this.deleted?.emit({fieldName: fieldname});\n return this.hideSettingsPanel();\n }}\n onSettingsChanged={e => {\n this.settingsChanged?.emit(e.detail);\n return this.hideSettingsPanel();\n }}\n helpText={'Check boxes allow the user to select one or more (non-exclusive) options.'}\n />\n </verdocs-portal>\n )}\n </Fragment>\n )}\n </label>\n </Host>\n );\n }\n}\n","@import '../../../theme.scss';\n\nverdocs-field-date {\n font-family: $verdocs-primary-font;\n width: 74px;\n height: 20px;\n display: block;\n font-size: 11px;\n position: relative;\n scroll-margin: 20px 0;\n letter-spacing: 0.3px;\n background-color: var(--verdocs-field-background, transparent);\n transform-origin: bottom left;\n\n &.small input {\n font-size: 7px;\n }\n\n .edge-top,\n .edge-right,\n .edge-left,\n .edge-bottom {\n position: absolute;\n z-index: 10;\n }\n\n .edge-top {\n top: -2px;\n left: 0;\n right: 0;\n height: 5px;\n }\n\n .edge-right {\n top: 0;\n bottom: 0;\n right: -2px;\n width: 5px;\n }\n\n .edge-left {\n top: 0;\n left: -2px;\n bottom: 0;\n width: 5px;\n }\n\n .edge-bottom {\n bottom: -2px;\n left: 0;\n right: 0;\n height: 5px;\n }\n\n label {\n top: -14px;\n left: 0;\n height: 14px;\n color: white;\n padding: 0 4px;\n font-size: 9px;\n line-height: 13px;\n position: absolute;\n background: #4a4a99;\n border-top-left-radius: 2px;\n border-top-right-radius: 2px;\n }\n\n input {\n position: absolute;\n\n font-size: 12px;\n\n // This is needed to bring down the cursor from the parent element, which is where interactjs applies it\n cursor: inherit;\n\n box-sizing: border-box;\n color: var(--verdocs-field-text-color, rgba(0, 0, 0, 0.87));\n font-weight: 500;\n transform-origin: 0 0;\n height: 100%;\n width: 100%;\n background: none;\n border: var(--verdocs-field-border, 1px solid $light-border-color);\n border-radius: var(--verdocs-field-radius);\n appearance: none;\n\n &.hide {\n display: none;\n }\n }\n\n &.disabled input {\n opacity: 0.5;\n }\n\n &.required {\n input {\n border: 1px solid var(--verdocs-required-field-border);\n }\n }\n\n verdocs-button-panel {\n top: -3px;\n left: -2px;\n opacity: 0.5;\n z-index: 1000;\n cursor: pointer;\n position: absolute;\n transform: scale(0.6);\n\n &[data-active],\n &:hover {\n opacity: 1;\n }\n\n .icon {\n svg {\n fill: #333333;\n }\n\n &:hover {\n svg {\n fill: #000000;\n }\n }\n }\n }\n\n .settings-icon {\n position: absolute;\n top: -3px;\n left: -18px;\n display: inline-block;\n cursor: pointer;\n opacity: 0.3;\n\n svg {\n fill: $border-color;\n }\n\n &:hover {\n opacity: 1;\n }\n }\n}\n\n.air-datepicker-cell.-year-.-other-decade-,\n.air-datepicker-cell.-day-.-other-month- {\n color: var(--adp-color-other-month);\n}\n\n.air-datepicker-cell.-year-.-other-decade-:hover,\n.air-datepicker-cell.-day-.-other-month-:hover {\n color: var(--adp-color-other-month-hover);\n}\n\n.-disabled-.-focus-.air-datepicker-cell.-year-.-other-decade-,\n.-disabled-.-focus-.air-datepicker-cell.-day-.-other-month- {\n color: var(--adp-color-other-month);\n}\n\n.-selected-.air-datepicker-cell.-year-.-other-decade-,\n.-selected-.air-datepicker-cell.-day-.-other-month- {\n color: #fff;\n background: var(--adp-background-color-selected-other-month);\n}\n\n.-selected-.-focus-.air-datepicker-cell.-year-.-other-decade-,\n.-selected-.-focus-.air-datepicker-cell.-day-.-other-month- {\n background: var(--adp-background-color-selected-other-month-focused);\n}\n\n.-in-range-.air-datepicker-cell.-year-.-other-decade-,\n.-in-range-.air-datepicker-cell.-day-.-other-month- {\n background-color: var(--adp-background-color-in-range);\n color: var(--adp-color);\n}\n\n.-in-range-.-focus-.air-datepicker-cell.-year-.-other-decade-,\n.-in-range-.-focus-.air-datepicker-cell.-day-.-other-month- {\n background-color: var(--adp-background-color-in-range-focused);\n}\n\n.air-datepicker-cell.-year-.-other-decade-:empty,\n.air-datepicker-cell.-day-.-other-month-:empty {\n background: none;\n border: none;\n}\n\n.air-datepicker-cell {\n border-radius: var(--adp-cell-border-radius);\n box-sizing: border-box;\n cursor: pointer;\n display: flex;\n position: relative;\n align-items: center;\n justify-content: center;\n z-index: 1;\n}\n\n.air-datepicker-cell.-focus- {\n background: var(--adp-cell-background-color-hover);\n}\n\n.air-datepicker-cell.-current- {\n color: var(--adp-color-current-date);\n}\n\n.air-datepicker-cell.-current-.-focus- {\n color: var(--adp-color);\n}\n\n.air-datepicker-cell.-current-.-in-range- {\n color: var(--adp-color-current-date);\n}\n\n.air-datepicker-cell.-disabled- {\n cursor: default;\n color: var(--adp-color-disabled);\n}\n\n.air-datepicker-cell.-disabled-.-focus- {\n color: var(--adp-color-disabled);\n}\n\n.air-datepicker-cell.-disabled-.-in-range- {\n color: var(--adp-color-disabled-in-range);\n}\n\n.air-datepicker-cell.-disabled-.-current-.-focus- {\n color: var(--adp-color-disabled);\n}\n\n.air-datepicker-cell.-in-range- {\n background: var(--adp-cell-background-color-in-range);\n border-radius: 0;\n}\n\n.air-datepicker-cell.-in-range-:hover {\n background: var(--adp-cell-background-color-in-range-hover);\n}\n\n.air-datepicker-cell.-range-from- {\n border: 1px solid var(--adp-cell-border-color-in-range);\n background-color: var(--adp-cell-background-color-in-range);\n border-radius: var(--adp-cell-border-radius) 0 0 var(--adp-cell-border-radius);\n}\n\n.air-datepicker-cell.-range-to- {\n border: 1px solid var(--adp-cell-border-color-in-range);\n background-color: var(--adp-cell-background-color-in-range);\n border-radius: 0 var(--adp-cell-border-radius) var(--adp-cell-border-radius) 0;\n}\n\n.air-datepicker-cell.-range-to-.-range-from- {\n border-radius: var(--adp-cell-border-radius);\n}\n\n.air-datepicker-cell.-selected- {\n color: #fff;\n border: none;\n background: var(--adp-cell-background-color-selected);\n}\n\n.air-datepicker-cell.-selected-.-current- {\n color: #fff;\n background: var(--adp-cell-background-color-selected);\n}\n\n.air-datepicker-cell.-selected-.-focus- {\n background: var(--adp-cell-background-color-selected-hover);\n}\n\n.air-datepicker-body {\n transition: all var(--adp-transition-duration) var(--adp-transition-ease);\n}\n\n.air-datepicker-body.-hidden- {\n display: none;\n}\n\n.air-datepicker-body--day-names {\n display: grid;\n grid-template-columns: repeat(7, var(--adp-day-cell-width));\n margin: 8px 0 3px;\n}\n\n.air-datepicker-body--day-name {\n color: var(--adp-day-name-color);\n display: flex;\n align-items: center;\n justify-content: center;\n flex: 1;\n text-align: center;\n text-transform: uppercase;\n font-size: 0.8em;\n}\n\n.air-datepicker-body--day-name.-clickable- {\n cursor: pointer;\n}\n\n.air-datepicker-body--day-name.-clickable-:hover {\n color: var(--adp-day-name-color-hover);\n}\n\n.air-datepicker-body--cells {\n display: grid;\n}\n\n.air-datepicker-body--cells.-days- {\n grid-template-columns: repeat(7, var(--adp-day-cell-width));\n grid-auto-rows: var(--adp-day-cell-height);\n}\n\n.air-datepicker-body--cells.-months- {\n grid-template-columns: repeat(3, 1fr);\n grid-auto-rows: var(--adp-month-cell-height);\n}\n\n.air-datepicker-body--cells.-years- {\n grid-template-columns: repeat(4, 1fr);\n grid-auto-rows: var(--adp-year-cell-height);\n}\n\n.air-datepicker-nav {\n display: flex;\n justify-content: space-between;\n border-bottom: 1px solid var(--adp-border-color-inner);\n min-height: var(--adp-nav-height);\n padding: var(--adp-padding);\n box-sizing: content-box;\n}\n\n.-only-timepicker- .air-datepicker-nav {\n display: none;\n}\n\n.air-datepicker-nav--title,\n.air-datepicker-nav--action {\n display: flex;\n cursor: pointer;\n align-items: center;\n justify-content: center;\n}\n\n.air-datepicker-nav--action {\n width: var(--adp-nav-action-size);\n border-radius: var(--adp-border-radius);\n -webkit-user-select: none;\n -moz-user-select: none;\n user-select: none;\n}\n\n.air-datepicker-nav--action:hover {\n background: var(--adp-background-color-hover);\n}\n\n.air-datepicker-nav--action:active {\n background: var(--adp-background-color-active);\n}\n\n.air-datepicker-nav--action.-disabled- {\n visibility: hidden;\n}\n\n.air-datepicker-nav--action svg {\n width: 32px;\n height: 32px;\n}\n\n.air-datepicker-nav--action path {\n fill: none;\n stroke: var(--adp-nav-arrow-color);\n stroke-width: 2px;\n}\n\n.air-datepicker-nav--title {\n border-radius: var(--adp-border-radius);\n padding: 0 8px;\n}\n\n.air-datepicker-nav--title i {\n font-style: normal;\n color: var(--adp-nav-color-secondary);\n margin-left: 0.3em;\n}\n\n.air-datepicker-nav--title:hover {\n background: var(--adp-background-color-hover);\n}\n\n.air-datepicker-nav--title:active {\n background: var(--adp-background-color-active);\n}\n\n.air-datepicker-nav--title.-disabled- {\n cursor: default;\n background: none;\n}\n\n.air-datepicker-buttons {\n display: grid;\n grid-auto-columns: 1fr;\n grid-auto-flow: column;\n}\n\n.air-datepicker-button {\n display: inline-flex;\n color: var(--adp-btn-color);\n border-radius: var(--adp-btn-border-radius);\n cursor: pointer;\n height: var(--adp-btn-height);\n border: none;\n background: rgba(255, 255, 255, 0);\n}\n\n.air-datepicker-button:hover {\n color: var(--adp-btn-color-hover);\n background: var(--adp-btn-background-color-hover);\n}\n\n.air-datepicker-button:focus {\n color: var(--adp-btn-color-hover);\n background: var(--adp-btn-background-color-hover);\n outline: none;\n}\n\n.air-datepicker-button:active {\n background: var(--adp-btn-background-color-active);\n}\n\n.air-datepicker-button span {\n outline: none;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n}\n\n.air-datepicker-time {\n display: grid;\n grid-template-columns: max-content 1fr;\n grid-column-gap: 12px;\n align-items: center;\n position: relative;\n padding: 0 var(--adp-time-padding-inner);\n}\n\n.-only-timepicker- .air-datepicker-time {\n border-top: none;\n}\n\n.air-datepicker-time--current {\n display: flex;\n align-items: center;\n flex: 1;\n font-size: 14px;\n text-align: center;\n}\n\n.air-datepicker-time--current-colon {\n margin: 0 2px 3px;\n line-height: 1;\n}\n\n.air-datepicker-time--current-hours,\n.air-datepicker-time--current-minutes {\n line-height: 1;\n font-size: 19px;\n font-family: 'Century Gothic', CenturyGothic, AppleGothic, sans-serif;\n position: relative;\n z-index: 1;\n}\n\n.air-datepicker-time--current-hours:after,\n.air-datepicker-time--current-minutes:after {\n content: '';\n background: var(--adp-background-color-hover);\n border-radius: var(--adp-border-radius);\n position: absolute;\n left: -2px;\n top: -3px;\n right: -2px;\n bottom: -2px;\n z-index: -1;\n opacity: 0;\n}\n\n.air-datepicker-time--current-hours.-focus-:after,\n.air-datepicker-time--current-minutes.-focus-:after {\n opacity: 1;\n}\n\n.air-datepicker-time--current-ampm {\n text-transform: uppercase;\n align-self: flex-end;\n color: var(--adp-time-day-period-color);\n margin-left: 6px;\n font-size: 11px;\n margin-bottom: 1px;\n}\n\n.air-datepicker-time--row {\n display: flex;\n align-items: center;\n font-size: 11px;\n height: 17px;\n background: linear-gradient(to right, var(--adp-time-track-color), var(--adp-time-track-color)) left 50%/100% var(--adp-time-track-height) no-repeat;\n}\n\n.air-datepicker-time--row:first-child {\n margin-bottom: 4px;\n}\n\n.air-datepicker-time--row input[type='range'] {\n background: none;\n cursor: pointer;\n flex: 1;\n height: 100%;\n width: 100%;\n padding: 0;\n margin: 0;\n -webkit-appearance: none;\n}\n\n.air-datepicker-time--row input[type='range']::-webkit-slider-thumb {\n -webkit-appearance: none;\n}\n\n.air-datepicker-time--row input[type='range']::-ms-tooltip {\n display: none;\n}\n\n.air-datepicker-time--row input[type='range']:hover::-webkit-slider-thumb {\n border-color: var(--adp-time-track-color-hover);\n}\n\n.air-datepicker-time--row input[type='range']:hover::-moz-range-thumb {\n border-color: var(--adp-time-track-color-hover);\n}\n\n.air-datepicker-time--row input[type='range']:hover::-ms-thumb {\n border-color: var(--adp-time-track-color-hover);\n}\n\n.air-datepicker-time--row input[type='range']:focus {\n outline: none;\n}\n\n.air-datepicker-time--row input[type='range']:focus::-webkit-slider-thumb {\n background: var(--adp-cell-background-color-selected);\n border-color: var(--adp-cell-background-color-selected);\n}\n\n.air-datepicker-time--row input[type='range']:focus::-moz-range-thumb {\n background: var(--adp-cell-background-color-selected);\n border-color: var(--adp-cell-background-color-selected);\n}\n\n.air-datepicker-time--row input[type='range']:focus::-ms-thumb {\n background: var(--adp-cell-background-color-selected);\n border-color: var(--adp-cell-background-color-selected);\n}\n\n.air-datepicker-time--row input[type='range']::-webkit-slider-thumb {\n box-sizing: border-box;\n height: 12px;\n width: 12px;\n border-radius: 3px;\n border: 1px solid var(--adp-time-track-color);\n background: #fff;\n cursor: pointer;\n -webkit-transition: background var(--adp-transition-duration);\n transition: background var(--adp-transition-duration);\n}\n\n.air-datepicker-time--row input[type='range']::-moz-range-thumb {\n box-sizing: border-box;\n height: 12px;\n width: 12px;\n border-radius: 3px;\n border: 1px solid var(--adp-time-track-color);\n background: #fff;\n cursor: pointer;\n -moz-transition: background var(--adp-transition-duration);\n transition: background var(--adp-transition-duration);\n}\n\n.air-datepicker-time--row input[type='range']::-ms-thumb {\n box-sizing: border-box;\n height: 12px;\n width: 12px;\n border-radius: 3px;\n border: 1px solid var(--adp-time-track-color);\n background: #fff;\n cursor: pointer;\n -ms-transition: background var(--adp-transition-duration);\n transition: background var(--adp-transition-duration);\n}\n\n.air-datepicker-time--row input[type='range']::-webkit-slider-thumb {\n margin-top: calc(var(--adp-time-thumb-size) / 2 * -1);\n}\n\n.air-datepicker-time--row input[type='range']::-webkit-slider-runnable-track {\n border: none;\n height: var(--adp-time-track-height);\n cursor: pointer;\n color: rgba(0, 0, 0, 0);\n background: rgba(0, 0, 0, 0);\n}\n\n.air-datepicker-time--row input[type='range']::-moz-range-track {\n border: none;\n height: var(--adp-time-track-height);\n cursor: pointer;\n color: rgba(0, 0, 0, 0);\n background: rgba(0, 0, 0, 0);\n}\n\n.air-datepicker-time--row input[type='range']::-ms-track {\n border: none;\n height: var(--adp-time-track-height);\n cursor: pointer;\n color: rgba(0, 0, 0, 0);\n background: rgba(0, 0, 0, 0);\n}\n\n.air-datepicker-time--row input[type='range']::-ms-fill-lower {\n background: rgba(0, 0, 0, 0);\n}\n\n.air-datepicker-time--row input[type='range']::-ms-fill-upper {\n background: rgba(0, 0, 0, 0);\n}\n\n.air-datepicker {\n --adp-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';\n --adp-font-size: 14px;\n --adp-width: 246px;\n --adp-z-index: 100;\n --adp-padding: 4px;\n --adp-grid-areas: 'nav' 'body' 'timepicker' 'buttons';\n --adp-transition-duration: 0.3s;\n --adp-transition-ease: ease-out;\n --adp-transition-offset: 8px;\n --adp-background-color: #fff;\n --adp-background-color-hover: #f0f0f0;\n --adp-background-color-active: #eaeaea;\n --adp-background-color-in-range: rgba(92, 196, 239, 0.1);\n --adp-background-color-in-range-focused: rgba(92, 196, 239, 0.2);\n --adp-background-color-selected-other-month-focused: #8ad5f4;\n --adp-background-color-selected-other-month: #a2ddf6;\n --adp-color: #4a4a4a;\n --adp-color-secondary: #9c9c9c;\n --adp-accent-color: #4eb5e6;\n --adp-color-current-date: var(--adp-accent-color);\n --adp-color-other-month: #dedede;\n --adp-color-disabled: #aeaeae;\n --adp-color-disabled-in-range: #939393;\n --adp-color-other-month-hover: #c5c5c5;\n --adp-border-color: #dbdbdb;\n --adp-border-color-inner: #efefef;\n --adp-border-radius: 4px;\n --adp-border-color-inline: #d7d7d7;\n --adp-nav-height: 32px;\n --adp-nav-arrow-color: var(--adp-color-secondary);\n --adp-nav-action-size: 32px;\n --adp-nav-color-secondary: var(--adp-color-secondary);\n --adp-day-name-color: #ff9a19;\n --adp-day-name-color-hover: #8ad5f4;\n --adp-day-cell-width: 1fr;\n --adp-day-cell-height: 32px;\n --adp-month-cell-height: 42px;\n --adp-year-cell-height: 56px;\n --adp-pointer-size: 10px;\n --adp-poiner-border-radius: 2px;\n --adp-pointer-offset: 14px;\n --adp-cell-border-radius: 4px;\n --adp-cell-background-color-hover: var(--adp-background-color-hover);\n --adp-cell-background-color-selected: #5cc4ef;\n --adp-cell-background-color-selected-hover: #45bced;\n --adp-cell-background-color-in-range: rgba(92, 196, 239, 0.1);\n --adp-cell-background-color-in-range-hover: rgba(92, 196, 239, 0.2);\n --adp-cell-border-color-in-range: var(--adp-cell-background-color-selected);\n --adp-btn-height: 32px;\n --adp-btn-color: var(--adp-accent-color);\n --adp-btn-color-hover: var(--adp-color);\n --adp-btn-border-radius: var(--adp-border-radius);\n --adp-btn-background-color-hover: var(--adp-background-color-hover);\n --adp-btn-background-color-active: var(--adp-background-color-active);\n --adp-time-track-height: 1px;\n --adp-time-track-color: #dedede;\n --adp-time-track-color-hover: #b1b1b1;\n --adp-time-thumb-size: 12px;\n --adp-time-padding-inner: 10px;\n --adp-time-day-period-color: var(--adp-color-secondary);\n --adp-mobile-font-size: 16px;\n --adp-mobile-nav-height: 40px;\n --adp-mobile-width: 320px;\n --adp-mobile-day-cell-height: 38px;\n --adp-mobile-month-cell-height: 48px;\n --adp-mobile-year-cell-height: 64px;\n}\n\n.air-datepicker-overlay {\n --adp-overlay-background-color: rgba(0, 0, 0, 0.3);\n --adp-overlay-transition-duration: 0.3s;\n --adp-overlay-transition-ease: ease-out;\n --adp-overlay-z-index: 99;\n}\n\n.air-datepicker {\n background: var(--adp-background-color);\n border: 1px solid var(--adp-border-color);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n border-radius: var(--adp-border-radius);\n box-sizing: content-box;\n display: grid;\n grid-template-columns: 1fr;\n grid-template-rows: repeat(4, max-content);\n grid-template-areas: var(--adp-grid-areas);\n font-family: var(--adp-font-family), sans-serif;\n font-size: var(--adp-font-size);\n color: var(--adp-color);\n width: var(--adp-width);\n position: absolute;\n transition:\n opacity var(--adp-transition-duration) var(--adp-transition-ease),\n transform var(--adp-transition-duration) var(--adp-transition-ease);\n z-index: var(--adp-z-index);\n}\n\n.air-datepicker:not(.-custom-position-) {\n opacity: 0;\n}\n\n.air-datepicker.-from-top- {\n transform: translateY(calc(var(--adp-transition-offset) * -1));\n}\n\n.air-datepicker.-from-right- {\n transform: translateX(var(--adp-transition-offset));\n}\n\n.air-datepicker.-from-bottom- {\n transform: translateY(var(--adp-transition-offset));\n}\n\n.air-datepicker.-from-left- {\n transform: translateX(calc(var(--adp-transition-offset) * -1));\n}\n\n.air-datepicker.-active-:not(.-custom-position-) {\n transform: translate(0, 0);\n opacity: 1;\n}\n\n.air-datepicker.-active-.-custom-position- {\n transition: none;\n}\n\n.air-datepicker.-inline- {\n border-color: var(--adp-border-color-inline);\n box-shadow: none;\n position: static;\n left: auto;\n right: auto;\n opacity: 1;\n transform: none;\n}\n\n.air-datepicker.-inline- .air-datepicker--pointer {\n display: none;\n}\n\n.air-datepicker.-is-mobile- {\n --adp-font-size: var(--adp-mobile-font-size);\n --adp-day-cell-height: var(--adp-mobile-day-cell-height);\n --adp-month-cell-height: var(--adp-mobile-month-cell-height);\n --adp-year-cell-height: var(--adp-mobile-year-cell-height);\n --adp-nav-height: var(--adp-mobile-nav-height);\n --adp-nav-action-size: var(--adp-mobile-nav-height);\n position: fixed;\n width: var(--adp-mobile-width);\n border: none;\n}\n\n.air-datepicker.-is-mobile- * {\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n.air-datepicker.-is-mobile- .air-datepicker--pointer {\n display: none;\n}\n\n.air-datepicker.-is-mobile-:not(.-custom-position-) {\n transform: translate(-50%, calc(-50% + var(--adp-transition-offset)));\n}\n\n.air-datepicker.-is-mobile-.-active-:not(.-custom-position-) {\n transform: translate(-50%, -50%);\n}\n\n.air-datepicker.-custom-position- {\n transition: none;\n}\n\n.air-datepicker-global-container {\n position: absolute;\n left: 0;\n top: 0;\n}\n\n.air-datepicker--pointer {\n --pointer-half-size: calc(var(--adp-pointer-size) / 2);\n position: absolute;\n width: var(--adp-pointer-size);\n height: var(--adp-pointer-size);\n z-index: -1;\n}\n\n.air-datepicker--pointer:after {\n content: '';\n position: absolute;\n background: #fff;\n border-top: 1px solid var(--adp-border-color-inline);\n border-right: 1px solid var(--adp-border-color-inline);\n border-top-right-radius: var(--adp-poiner-border-radius);\n width: var(--adp-pointer-size);\n height: var(--adp-pointer-size);\n box-sizing: border-box;\n}\n\n.-top-left- .air-datepicker--pointer,\n.-top-center- .air-datepicker--pointer,\n.-top-right- .air-datepicker--pointer,\n[data-popper-placement^='top'] .air-datepicker--pointer {\n top: calc(100% - var(--pointer-half-size) + 1px);\n}\n\n.-top-left- .air-datepicker--pointer:after,\n.-top-center- .air-datepicker--pointer:after,\n.-top-right- .air-datepicker--pointer:after,\n[data-popper-placement^='top'] .air-datepicker--pointer:after {\n transform: rotate(135deg);\n}\n\n.-right-top- .air-datepicker--pointer,\n.-right-center- .air-datepicker--pointer,\n.-right-bottom- .air-datepicker--pointer,\n[data-popper-placement^='right'] .air-datepicker--pointer {\n right: calc(100% - var(--pointer-half-size) + 1px);\n}\n\n.-right-top- .air-datepicker--pointer:after,\n.-right-center- .air-datepicker--pointer:after,\n.-right-bottom- .air-datepicker--pointer:after,\n[data-popper-placement^='right'] .air-datepicker--pointer:after {\n transform: rotate(225deg);\n}\n\n.-bottom-left- .air-datepicker--pointer,\n.-bottom-center- .air-datepicker--pointer,\n.-bottom-right- .air-datepicker--pointer,\n[data-popper-placement^='bottom'] .air-datepicker--pointer {\n bottom: calc(100% - var(--pointer-half-size) + 1px);\n}\n\n.-bottom-left- .air-datepicker--pointer:after,\n.-bottom-center- .air-datepicker--pointer:after,\n.-bottom-right- .air-datepicker--pointer:after,\n[data-popper-placement^='bottom'] .air-datepicker--pointer:after {\n transform: rotate(315deg);\n}\n\n.-left-top- .air-datepicker--pointer,\n.-left-center- .air-datepicker--pointer,\n.-left-bottom- .air-datepicker--pointer,\n[data-popper-placement^='left'] .air-datepicker--pointer {\n left: calc(100% - var(--pointer-half-size) + 1px);\n}\n\n.-left-top- .air-datepicker--pointer:after,\n.-left-center- .air-datepicker--pointer:after,\n.-left-bottom- .air-datepicker--pointer:after,\n[data-popper-placement^='left'] .air-datepicker--pointer:after {\n transform: rotate(45deg);\n}\n\n.-top-left- .air-datepicker--pointer,\n.-bottom-left- .air-datepicker--pointer {\n left: var(--adp-pointer-offset);\n}\n\n.-top-right- .air-datepicker--pointer,\n.-bottom-right- .air-datepicker--pointer {\n right: var(--adp-pointer-offset);\n}\n\n.-top-center- .air-datepicker--pointer,\n.-bottom-center- .air-datepicker--pointer {\n left: calc(50% - var(--adp-pointer-size) / 2);\n}\n\n.-left-top- .air-datepicker--pointer,\n.-right-top- .air-datepicker--pointer {\n top: var(--adp-pointer-offset);\n}\n\n.-left-bottom- .air-datepicker--pointer,\n.-right-bottom- .air-datepicker--pointer {\n bottom: var(--adp-pointer-offset);\n}\n\n.-left-center- .air-datepicker--pointer,\n.-right-center- .air-datepicker--pointer {\n top: calc(50% - var(--adp-pointer-size) / 2);\n}\n\n.air-datepicker--navigation {\n grid-area: nav;\n}\n\n.air-datepicker--content {\n box-sizing: content-box;\n padding: var(--adp-padding);\n grid-area: body;\n}\n\n.-only-timepicker- .air-datepicker--content {\n display: none;\n}\n\n.air-datepicker--time {\n grid-area: timepicker;\n}\n\n.air-datepicker--buttons {\n grid-area: buttons;\n}\n\n.air-datepicker--buttons,\n.air-datepicker--time {\n padding: var(--adp-padding);\n border-top: 1px solid var(--adp-border-color-inner);\n}\n\n.air-datepicker-overlay {\n position: fixed;\n background: var(--adp-overlay-background-color);\n left: 0;\n top: 0;\n width: 0;\n height: 0;\n opacity: 0;\n transition:\n opacity var(--adp-overlay-transition-duration) var(--adp-overlay-transition-ease),\n left 0s,\n height 0s,\n width 0s;\n transition-delay: 0s, var(--adp-overlay-transition-duration), var(--adp-overlay-transition-duration), var(--adp-overlay-transition-duration);\n z-index: var(--adp-overlay-z-index);\n}\n\n.air-datepicker-overlay.-active- {\n opacity: 1;\n width: 100%;\n height: 100%;\n transition:\n opacity var(--adp-overlay-transition-duration) var(--adp-overlay-transition-ease),\n height 0s,\n width 0s;\n}\n\n@keyframes adp-spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n}\n","import {format} from 'date-fns';\n// import {getRGBA} from '@verdocs/js-sdk';\nimport interact from 'interactjs';\nimport {ResizeEvent} from '@interactjs/actions/resize/plugin';\nimport AirDatepicker from 'air-datepicker';\nimport localeEn from 'air-datepicker/locale/en';\nimport {type ITemplate, type ITemplateField, updateField, VerdocsEndpoint} from '@verdocs/js-sdk';\nimport {Component, Element, Event, EventEmitter, h, Host, Method, Prop, Fragment, State, Listen, Watch} from '@stencil/core';\nimport {SettingsIcon} from '../../../utils/Icons';\nimport {FORMAT_DATE} from '../../../utils/Types';\nimport {Store} from '../../../utils/Datastore';\n\n/**\n * Displays a date field. When tapped or clicked, the input element will display a date picker component.\n */\n@Component({\n tag: 'verdocs-field-date',\n styleUrl: 'verdocs-field-date.scss',\n shadow: false,\n})\nexport class VerdocsFieldDate {\n @Element() el: HTMLElement;\n private inputEl: HTMLInputElement;\n\n /**\n * Fields may be attached to templates or envelopes, but only template fields may be edited.\n */\n @Prop({reflect: true}) source: 'template' | 'envelope' = 'template';\n\n /**\n * The source template or envelope ID the field is found in.\n */\n @Prop({reflect: true}) sourceid: string = '';\n\n /**\n * The name of the field to display.\n */\n @Prop({reflect: true}) fieldname: string = '';\n\n /**\n * If set, overrides the field's settings object. Primarily used to support \"preview\" modes where all fields are disabled.\n */\n @Prop({reflect: true}) disabled?: boolean = false;\n\n /**\n * If set, a settings icon will be displayed on hover. The settings shown allow the field's recipient and other settings to be\n * changed, so it should typically only be enabled in the Builder.\n */\n @Prop({reflect: true}) editable?: boolean = false;\n\n /**\n * If set, the field may be dragged to a new location. This should only be enabled in the Builder, or for self-placed fields.\n */\n @Prop({reflect: true}) moveable?: boolean = false;\n\n /**\n * If set, the field is considered \"done\" and is drawn in a display-final-value state.\n */\n @Prop({reflect: true}) done?: boolean = false;\n\n /**\n * If set, the field will be be scaled horizontally by this factor.\n */\n @Prop({reflect: true}) xscale?: number = 1;\n\n /**\n * If set, the field will be be scaled vertically by this factor.\n */\n @Prop({reflect: true}) yscale?: number = 1;\n\n /**\n * The page the field is on\n */\n @Prop({reflect: true}) pagenumber?: number = 1;\n\n /**\n * If set, the field will be be scaled vertically by this factor.\n */\n @Prop() field?: ITemplateField;\n\n /**\n * If set to true, it will force interact to unset the el, resulting in no dragging the field.\n */\n @Prop({reflect: true}) isPreview?: boolean;\n\n /**\n * Event fired on every character entered into / deleted from the field.\n */\n @Event({composed: true}) settingsPress: EventEmitter;\n\n /**\n * Event fired when the field's settings are changed.\n */\n @Event({composed: true}) settingsChanged: EventEmitter<{fieldName: string; field: ITemplateField}>;\n\n /**\n * Event fired when the field is deleted.\n */\n @Event({composed: true}) deleted: EventEmitter<{fieldName: string}>;\n\n @State() containerId = `verdocs-date-picker-${Math.random().toString(36).substring(2, 11)}`;\n\n @State() showingProperties?: boolean = false;\n\n @State() focused = false;\n\n @Listen('blur', {capture: true})\n handleBlur() {\n this.focused = false;\n }\n\n @Method()\n async focusField() {\n this.inputEl.focus();\n this.focused = true;\n }\n\n picker: AirDatepicker<HTMLElement> | null = null;\n\n componentDidLoad() {\n const {source, sourceid, fieldname} = this;\n const {field} = Store.getField(source, sourceid, fieldname, this.field);\n const {readonly = false} = field || {};\n\n if (!readonly) {\n this.picker = new AirDatepicker<HTMLElement>(`#${this.containerId}`, {\n locale: localeEn,\n isMobile: true,\n autoClose: true,\n onShow: () => (this.focused = true),\n onHide: () => (this.focused = false),\n onSelect: ({date, formattedDate}) => {\n const event = new CustomEvent('fieldChange', {detail: {date, formattedDate}});\n this.el.dispatchEvent(event);\n },\n });\n }\n }\n\n @Watch('editable')\n onEditableChanged(newVal: boolean, oldVal: boolean) {\n // When transitioning out of editable mode (e.g., builder -> preview tab), clear interact bindings\n if (oldVal && !newVal) {\n interact(this.el).unset();\n }\n }\n\n disconnectedCallback() {\n // Clear any interact.js drag/resize bindings so they don't leak if the DOM element is reused elsewhere\n interact(this.el).unset();\n }\n\n componentDidRender() {\n interact.dynamicDrop(true);\n\n if (this.editable) {\n interact(this.el).resizable({\n edges: {\n top: '.edge-top',\n left: '.edge-left',\n bottom: '.edge-bottom',\n right: '.edge-right',\n },\n modifiers: [\n interact.modifiers.restrictSize({\n min: {width: 50, height: 12},\n }),\n ],\n listeners: {\n start: this.handleResizeStart.bind(this),\n move: this.handleResize.bind(this),\n end: this.handleResizeEnd.bind(this),\n },\n });\n }\n }\n\n handleResizeStart(e: ResizeEvent) {\n e.preventDefault();\n e.stopPropagation();\n e.target.dataset.originalBottom = e.target.style.bottom;\n }\n\n handleResize(e: any) {\n let {width, height} = e.rect;\n\n const dX = e.deltaRect.left;\n const dY = e.deltaRect.bottom;\n const currentLeft = parseFloat(e.target.style.left);\n const currentBottom = parseFloat(e.target.style.bottom);\n\n width /= this.xscale;\n height /= this.yscale;\n\n Object.assign(e.target.style, {\n width: `${width}px`,\n height: `${height}px`,\n left: `${currentLeft + dX}px`,\n bottom: `${currentBottom - dY}px`,\n });\n }\n\n async handleResizeEnd(e: any) {\n const {sourceid, fieldname} = this;\n\n const width = Math.round(parseFloat(e.target.style.width));\n let height = Math.round(parseFloat(e.target.style.height));\n if (height < 12) {\n height = 12;\n }\n\n const newBottom = parseFloat(e.target.style.bottom);\n const originalBottom = parseFloat(e.target.dataset.originalBottom);\n const template = await Store.getTemplate(VerdocsEndpoint.getDefault(), this.sourceid);\n const oldField = template.fields.find(f => f.name === fieldname);\n const y = newBottom !== originalBottom ? newBottom / this.yscale : oldField?.y;\n\n updateField(VerdocsEndpoint.getDefault(), sourceid, fieldname, {width, height, y})\n .then(async updatedField => {\n const template = await Store.getTemplate(VerdocsEndpoint.getDefault(), this.sourceid);\n const newTemplate = JSON.parse(JSON.stringify(template)) as ITemplate;\n const fieldIndex = newTemplate.fields.findIndex(field => field.name === fieldname);\n if (fieldIndex > -1) {\n newTemplate.fields[fieldIndex] = updatedField;\n }\n Store.updateTemplate(this.sourceid, newTemplate);\n\n this.settingsChanged?.emit({fieldName: fieldname, field: updatedField});\n Object.assign(e.target.dataset, {x: 0, y: 0, h: 0});\n })\n .catch(e => console.log('Field update failed', e));\n }\n\n @Method()\n async showSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.showPanel) {\n settingsPanel.showPanel();\n }\n }\n\n @Method()\n async hideSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.hidePanel) {\n settingsPanel.hidePanel();\n }\n }\n\n // NOTE: We don't use a \"date\" field here because browsers vary widely in their formatting of it.\n render() {\n const {source, sourceid, fieldname, editable = false, done = false, disabled = false, focused, xscale = 1, yscale = 1} = this;\n\n const {index, field} = Store.getField(source, sourceid, fieldname, this.field);\n const {required = false, placeholder = 'Date...', value = '', label = '', readonly = false, height = 20, width = 74} = field || {};\n const signerClass = `signer-${(index % 10) + 1}`;\n const small = height < 20 || width < 74;\n\n const formattedValue = value ? format(new Date(value), FORMAT_DATE) : '';\n\n if (this.done) {\n return <Host class={{'verdocs-field': true,done}}>{formattedValue}</Host>;\n }\n\n return (\n <Host class={{'verdocs-field': true,required, disabled, done, focused, small, [signerClass]: true}}>\n {editable && <div class=\"edge-top\" />}\n {editable && <div class=\"edge-right\" />}\n {editable && <div class=\"edge-left\" />}\n {editable && <div class=\"edge-bottom\" />}\n\n {label && <label>{label}</label>}\n\n <input\n name={fieldname}\n class=\"input-el\"\n type=\"text\"\n value={formattedValue}\n id={this.containerId}\n placeholder={placeholder}\n disabled={readonly || disabled}\n ref={el => (this.inputEl = el)}\n onFocus={() => (this.focused = true)}\n onBlur={() => (this.focused = false)}\n />\n\n {editable && (\n <Fragment>\n <div\n id={`verdocs-settings-panel-trigger-${fieldname}`}\n style={{transform: `scale(${Math.floor((1 / xscale) * 1000) / 1000}, ${Math.floor((1 / yscale) * 1000) / 1000})`}}\n class=\"settings-icon\"\n innerHTML={SettingsIcon}\n onClick={(e: any) => {\n e.stopPropagation();\n this.showingProperties = !this.showingProperties;\n }}\n />\n\n {this.showingProperties && (\n <verdocs-portal anchor={`verdocs-settings-panel-trigger-${field.name}`} onClickAway={() => (this.showingProperties = false)}>\n <verdocs-template-field-properties\n templateId={sourceid}\n fieldName={fieldname}\n onClose={() => (this.showingProperties = false)}\n onDelete={() => {\n this.deleted?.emit({fieldName: fieldname});\n return this.hideSettingsPanel();\n }}\n onSettingsChanged={e => {\n this.settingsChanged?.emit(e.detail);\n return this.hideSettingsPanel();\n }}\n helpText={'Date fields allow the user to select a date.'}\n />\n </verdocs-portal>\n )}\n </Fragment>\n )}\n </Host>\n );\n }\n}\n","@import '../../../theme.scss';\n\nverdocs-field-dropdown {\n font-family: $verdocs-primary-font;\n width: 85px;\n height: 20px;\n display: block;\n font-size: 11px;\n position: relative;\n scroll-margin: 20px 0;\n background-color: var(--verdocs-field-background, transparent);\n transform-origin: bottom left;\n border-radius: var(--verdocs-field-radius);\n\n label {\n top: -14px;\n left: 0;\n height: 14px;\n color: white;\n padding: 0 4px;\n font-size: 9px;\n line-height: 13px;\n position: absolute;\n background: #4a4a99;\n border-top-left-radius: 2px;\n border-top-right-radius: 2px;\n }\n\n select {\n // This is needed to bring down the cursor from the parent element, which is where interactjs applies it\n cursor: inherit;\n\n position: absolute;\n background:\n linear-gradient(55deg, transparent 50%, var(--verdocs-field-text-color, #333) 50%), linear-gradient(125deg, var(--verdocs-field-text-color, #333) 50%, transparent 50%),\n linear-gradient(to right, transparent, transparent);\n background-position:\n calc(100% - 7px) 6px,\n calc(100% - 3px) 6px,\n 100% 0;\n background-size:\n 5px 5px,\n 5px 5px,\n 2.5em 2.5em;\n background-repeat: no-repeat;\n appearance: none;\n\n box-sizing: border-box;\n color: var(--verdocs-field-text-color, rgba(0, 0, 0, 0.87));\n font-weight: 500;\n transform-origin: 0 0;\n height: 100%;\n width: 100%;\n font-size: 11px;\n border: var(--verdocs-field-border, 1px solid rgba(0, 0, 0, 0.2));\n border-radius: var(--verdocs-field-radius);\n padding: 0 5px;\n\n &:focus {\n outline: none;\n }\n\n &.hide {\n display: none;\n }\n }\n\n &.disabled select {\n opacity: 0.5;\n }\n\n &.required {\n select {\n border: 1px solid var(--verdocs-required-field-border);\n }\n }\n\n verdocs-button-panel {\n display: block;\n margin-left: -33px;\n margin-top: -1px;\n transform: scale(0.7);\n }\n\n .settings-icon {\n position: absolute;\n top: -2px;\n left: -20px;\n display: inline-block;\n cursor: pointer;\n opacity: 0.3;\n\n svg {\n fill: $border-color;\n }\n\n &:hover {\n opacity: 1;\n }\n }\n}\n","import interact from 'interactjs';\nimport {ITemplateField, IEnvelopeField} from '@verdocs/js-sdk';\nimport {Component, Event, EventEmitter, h, Host, Method, Prop, Fragment, State, Listen, Element, Watch} from '@stencil/core';\nimport {SettingsIcon} from '../../../utils/Icons';\nimport {Store} from '../../../utils/Datastore';\n\n/**\n * Displays a dropdown field that allows the user to choose one of a list of options.\n */\n@Component({\n tag: 'verdocs-field-dropdown',\n styleUrl: 'verdocs-field-dropdown.scss',\n shadow: false,\n})\nexport class VerdocsFieldDropdown {\n @Element() el: HTMLElement;\n private selectEl: HTMLSelectElement;\n\n /**\n * Fields may be attached to templates or envelopes, but only template fields may be edited.\n */\n @Prop({reflect: true}) source: 'template' | 'envelope' = 'template';\n\n /**\n * The source template or envelope ID the field is found in.\n */\n @Prop({reflect: true}) sourceid: string = '';\n\n /**\n * The name of the field to display.\n */\n @Prop({reflect: true}) fieldname: string = '';\n\n /**\n * Override the field's settings. This is intended to be used during signing when fields are being\n * mutated.\n */\n @Prop() field: IEnvelopeField | null | undefined = null;\n\n /**\n * If set to true, it will force interact to unset the el, resulting in no dragging the field.\n */\n @Prop({reflect: true}) isPreview?: boolean;\n\n /**\n * If set, overrides the field's settings object. Primarily used to support \"preview\" modes where all fields are disabled.\n */\n @Prop({reflect: true}) disabled?: boolean = false;\n\n /**\n * If set, a settings icon will be displayed on hover. The settings shown allow the field's recipient and other settings to be\n * changed, so it should typically only be enabled in the Builder.\n */\n @Prop({reflect: true}) editable?: boolean = false;\n\n /**\n * If set, the field may be dragged to a new location. This should only be enabled in the Builder, or for self-placed fields.\n */\n @Prop({reflect: true}) moveable?: boolean = false;\n\n /**\n * If set, the field is considered \"done\" and is drawn in a display-final-value state.\n */\n @Prop({reflect: true}) done?: boolean = false;\n\n /**\n * If set, the field will be be scaled horizontally by this factor.\n */\n @Prop({reflect: true}) xscale?: number = 1;\n\n /**\n * If set, the field will be be scaled vertically by this factor.\n */\n @Prop({reflect: true}) yscale?: number = 1;\n\n /**\n * The page the field is on\n */\n @Prop({reflect: true}) pagenumber?: number = 1;\n\n /**\n * Event fired when the input field value changes. Note that this will only be fired on blur, tab-out, ENTER key press, etc.\n * It is generally the best event to subscribe to than `input` for most cases EXCEPT autocomplete fields that need to see every\n * keypress.\n */\n @Event({composed: true}) fieldChange: EventEmitter<string>;\n\n /**\n * Event fired when the field's settings are changed.\n */\n @Event({composed: true}) settingsChanged: EventEmitter<{fieldName: string; field: ITemplateField}>;\n\n /**\n * Event fired when the field is deleted.\n */\n @Event({composed: true}) deleted: EventEmitter<{fieldName: string}>;\n\n @State() showingProperties?: boolean = false;\n @State() focused = false;\n\n @Listen('blur', {capture: true})\n handleBlur() {\n this.focused = false;\n }\n\n @Method()\n async focusField() {\n this.selectEl.focus();\n this.focused = true;\n\n const {source, sourceid, fieldname} = this;\n const {field} = Store.getField(source, sourceid, fieldname, this.field);\n const {readonly = false} = field || {};\n\n if (!readonly) {\n this.selectEl?.showPicker();\n }\n }\n\n handleChange(e: any) {\n this.fieldChange.emit(e.target.value);\n }\n\n @Method()\n async showSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.showPanel) {\n settingsPanel.showPanel();\n }\n }\n\n @Method()\n async hideSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.hidePanel) {\n settingsPanel.hidePanel();\n }\n }\n\n @Watch('editable')\n onEditableChanged(newVal: boolean, oldVal: boolean) {\n // When transitioning out of editable mode (e.g., builder -> preview tab), clear interact bindings\n if (oldVal && !newVal) {\n interact(this.el).unset();\n }\n }\n\n disconnectedCallback() {\n // Clear any interact.js drag/resize bindings so they don't leak if the DOM element is reused elsewhere\n interact(this.el).unset();\n }\n\n render() {\n const {source, sourceid, fieldname, editable = false, done = false, disabled = false, focused, xscale = 1, yscale = 1} = this;\n\n const {index, field} = Store.getField(source, sourceid, fieldname, this.field);\n let {required = false, value = '', label = '', options, readonly = false} = field || {};\n const signerClass = `signer-${(index % 10) + 1}`;\n\n // TODO: Consolidate value/defaultValue handling between template and envelope fields.\n if ((field as any)?.value) {\n value = (field as any)?.value;\n }\n\n if (done) {\n return <Host class={{'verdocs-field': true,done}}>{value}</Host>;\n }\n\n // TODO: Look for other places this mistaken assumption was made.\n // Defaults only apply in destructuring if undefined. null doesn't trigger it.\n options ||= [];\n\n return (\n <Host class={{'verdocs-field': true,required, disabled, done, focused, [signerClass]: true}}>\n {label && <label>{label}</label>}\n\n <select disabled={readonly || disabled} onChange={e => this.handleChange(e)} onFocus={() => (this.focused = true)} ref={el => (this.selectEl = el as HTMLSelectElement)}>\n <option value=\"\">Select...</option>\n {options.map(option => (\n <option value={option.id} selected={option.id === value}>\n {option.label}\n </option>\n ))}\n {!options.length && (\n <option value=\"NA\" selected={'NA' === value}>\n N/A\n </option>\n )}\n </select>\n\n {editable && (\n <Fragment>\n <div\n id={`verdocs-settings-panel-trigger-${fieldname}`}\n style={{transform: `scale(${Math.floor((1 / xscale) * 1000) / 1000}, ${Math.floor((1 / yscale) * 1000) / 1000})`}}\n class=\"settings-icon\"\n innerHTML={SettingsIcon}\n onClick={(e: any) => {\n e.stopPropagation();\n this.showingProperties = !this.showingProperties;\n }}\n />\n\n {this.showingProperties && (\n <verdocs-portal anchor={`verdocs-settings-panel-trigger-${fieldname}`} onClickAway={() => (this.showingProperties = false)}>\n <verdocs-template-field-properties\n templateId={sourceid}\n fieldName={fieldname}\n onClose={() => (this.showingProperties = false)}\n onDelete={() => {\n this.deleted?.emit({fieldName: fieldname});\n return this.hideSettingsPanel();\n }}\n onSettingsChanged={e => {\n this.settingsChanged?.emit(e.detail);\n return this.hideSettingsPanel();\n }}\n helpText={\"Dropdowns are used to capture a recipient's selection of one of several options.\"}\n />\n </verdocs-portal>\n )}\n </Fragment>\n )}\n </Host>\n );\n }\n}\n","@import '../../../theme.scss';\n\nverdocs-field-initial {\n font-family: $verdocs-primary-font;\n width: 83px;\n height: 36px;\n display: block;\n font-size: 11px;\n position: relative;\n letter-spacing: 0.3px;\n scroll-margin: 20px 0;\n transform-origin: bottom left;\n border-radius: var(--verdocs-field-radius);\n background-color: var(--verdocs-field-background, transparent);\n border: var(--verdocs-field-border, 1px solid rgba(0, 0, 0, 0.2));\n // Host is focusable via tabindex; hide any browser-rendered text caret and use a pointer cursor\n // so it doesn't look like an editable text area.\n cursor: pointer;\n caret-color: transparent;\n\n label {\n top: -14px;\n left: -1px;\n height: 14px;\n color: var(--verdocs-field-text-color, white);\n padding: 0 4px;\n font-size: 9px;\n line-height: 13px;\n position: absolute;\n background: #4a4a99;\n border-top-left-radius: 2px;\n border-top-right-radius: 2px;\n }\n\n &.done {\n border: none;\n opacity: 1;\n }\n\n // When the Edit/Clear dropdown is open, raise this field above its siblings so\n // the menu isn't clipped by neighboring fields.\n &.menu-open {\n z-index: 50;\n }\n\n .initial-container {\n width: 100%;\n height: 100%;\n position: relative;\n\n img {\n display: block;\n height: 100%;\n width: auto;\n max-width: none;\n max-height: none;\n }\n\n .action-menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n min-width: 90px;\n background: #ffffff;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 6px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n z-index: 1000;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n font-size: 12px;\n font-family: $verdocs-primary-font;\n\n .menu-item {\n background: #ffffff;\n border: none;\n padding: 8px 12px;\n color: #333333;\n cursor: pointer;\n text-align: left;\n width: 100%;\n font-size: 12px;\n line-height: 1.2;\n height: auto;\n font-family: inherit;\n\n &:hover {\n background-color: #f0f0f0;\n color: #000000;\n }\n\n &:not(:last-child) {\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n }\n }\n }\n }\n\n &.disabled .initial-container {\n opacity: 0.5;\n pointer-events: none;\n }\n\n button {\n // This is needed to bring down the cursor from the parent element, which is where interactjs applies it\n cursor: inherit;\n\n box-sizing: border-box;\n border: none;\n color: var(--verdocs-field-text-color, rgba(0, 0, 0, 0.87));\n font-weight: 500;\n transform-origin: 0 0;\n height: 100%;\n width: 100%;\n background: none;\n font-size: 11px;\n\n &.hide {\n display: none;\n }\n }\n\n &.required {\n border: 1px solid var(--verdocs-required-field-border);\n }\n\n &.filled {\n border: none !important;\n background-color: transparent !important;\n }\n\n verdocs-button-panel {\n top: -3px;\n left: -2px;\n opacity: 0.5;\n z-index: 1000;\n cursor: pointer;\n position: absolute;\n transform: scale(0.6);\n\n &[data-active],\n &:hover {\n opacity: 1;\n }\n\n .icon {\n svg {\n fill: #333333;\n }\n\n &:hover {\n svg {\n fill: #000000;\n }\n }\n }\n }\n\n .settings-icon {\n position: absolute;\n top: -3px;\n left: -20px;\n display: inline-block;\n cursor: pointer;\n opacity: 0.3;\n\n svg {\n fill: $border-color;\n }\n\n &:hover {\n opacity: 1;\n }\n }\n\n .edge-top,\n .edge-right,\n .edge-left,\n .edge-bottom {\n position: absolute;\n z-index: 10;\n }\n\n .edge-top {\n top: -2px;\n left: 0;\n right: 0;\n height: 5px;\n }\n\n .edge-right {\n top: 0;\n bottom: 0;\n right: -2px;\n width: 5px;\n }\n\n .edge-left {\n top: 0;\n left: -2px;\n bottom: 0;\n width: 5px;\n }\n\n .edge-bottom {\n bottom: -2px;\n left: 0;\n right: 0;\n height: 5px;\n }\n}\n","import interact from 'interactjs';\nimport {ResizeEvent} from '@interactjs/actions/resize/plugin';\nimport {ITemplateField, IEnvelopeField, VerdocsEndpoint, updateField, ITemplate} from '@verdocs/js-sdk';\nimport {Component, Event, EventEmitter, h, Host, Method, Prop, Fragment, State, Element, Listen, Watch} from '@stencil/core';\nimport {SettingsIcon} from '../../../utils/Icons';\nimport {Store} from '../../../utils/Datastore';\n\n/**\n * Displays an initial field. If an initial already exists, it will be displayed and the field\n * will be disabled. Otherwise, a placeholder button will be shown. Clicking the button will\n * show a dialog to adopt an initial.\n *\n * NOTE: When initial fields are completed they will be filled with an initial \"stamp\".\n * This requires operation against a live, valid envelope. If you are testing this component\n * in Storybook, it will not be visible here.\n */\n@Component({\n tag: 'verdocs-field-initial',\n styleUrl: 'verdocs-field-initial.scss',\n shadow: false,\n})\nexport class VerdocsFieldInitial {\n @Element() el: HTMLElement;\n\n /**\n * Fields may be attached to templates or envelopes, but only template fields may be edited.\n */\n @Prop({reflect: true}) source: 'template' | 'envelope' = 'template';\n\n /**\n * The source template or envelope ID the field is found in.\n */\n @Prop({reflect: true}) sourceid: string = '';\n\n /**\n * The name of the field to display.\n */\n @Prop({reflect: true}) fieldname: string = '';\n\n /**\n * Override the field's settings. This is intended to be used during signing when fields are being\n * mutated.\n */\n @Prop() field: IEnvelopeField | null | undefined = null;\n\n /**\n * If set, overrides the field's settings object. Primarily used to support \"preview\" modes where all fields are disabled.\n */\n @Prop({reflect: true}) disabled?: boolean = false;\n\n /**\n * The document or template field to display.\n */\n @Prop({reflect: true}) initials: string = '';\n\n /**\n * If set, a settings icon will be displayed on hover. The settings shown allow the field's recipient and other settings to be\n * changed, so it should typically only be enabled in the Builder.\n */\n @Prop({reflect: true}) editable?: boolean = false;\n\n /**\n * If set, the field may be dragged to a new location. This should only be enabled in the Builder, or for self-placed fields.\n */\n @Prop({reflect: true}) moveable?: boolean = false;\n\n /**\n * If set, the field is considered \"done\" and is drawn in a display-final-value state.\n */\n @Prop({reflect: true}) done?: boolean = false;\n\n /**\n * If set, the field will be be scaled horizontally by this factor.\n */\n @Prop({reflect: true}) xscale?: number = 1;\n\n /**\n * If set, the field will be be scaled vertically by this factor.\n */\n @Prop({reflect: true}) yscale?: number = 1;\n\n /**\n * The page the field is on\n */\n @Prop({reflect: true}) pagenumber?: number = 1;\n\n /**\n * If set, provides the ID of already-adopted initials. If present, clicking the field (when empty)\n * will immediately use these initials instead of showing the adoption dialog.\n */\n @Prop({reflect: true}) initialid?: string;\n\n /**\n * If set to true, it will force interact to unset the el, resulting in no dragging the field.\n */\n @Prop({reflect: true}) isPreview?: boolean;\n\n /**\n * Event emitted when an initial block is adopted by the user. The event detail will contain the base64 string of the initial image.\n */\n @Event({composed: true}) adopt: EventEmitter<string>;\n\n /**\n * Event fired when the step is cancelled. This is called exit to avoid conflicts with the JS-reserved \"cancel\" event name.\n */\n @Event({composed: true}) exit: EventEmitter;\n\n /**\n * Event fired when the input field value changes. Note that this will only be fired on blur, tab-out, ENTER key press, etc.\n * It is generally the best event to subscribe to than `input` for most cases EXCEPT autocomplete fields that need to see every\n * keypress.\n */\n @Event({composed: true}) fieldChange: EventEmitter<string>;\n\n /**\n * Event fired when the field's settings are changed.\n */\n @Event({composed: true}) settingsChanged: EventEmitter<{fieldName: string; field: ITemplateField}>;\n\n /**\n * Event fired on every character entered into / deleted from the field.\n */\n @Event({composed: true}) settingsPress: EventEmitter;\n\n /**\n * Event fired when the field is deleted.\n */\n @Event({composed: true}) deleted: EventEmitter<{fieldName: string}>;\n\n @State() showingProperties?: boolean = false;\n @State() focused?: boolean = false;\n @State() menuOpen = false;\n\n private closeMenuTimer: any = null;\n private outsideMenuHandler: ((e: Event) => void) | null = null;\n\n @Method() async focusField() {\n this.el.focus();\n this.focused = true;\n }\n\n @State()\n tempInitials: string = '';\n\n componentDidLoad() {\n this.outsideMenuHandler = (e: Event) => {\n if (this.menuOpen && !this.el.contains(e.target as Node)) {\n this.closeMenu();\n }\n };\n document.addEventListener('pointerdown', this.outsideMenuHandler);\n }\n\n disconnectedCallback() {\n if (this.closeMenuTimer) {\n clearTimeout(this.closeMenuTimer);\n this.closeMenuTimer = null;\n }\n if (this.outsideMenuHandler) {\n document.removeEventListener('pointerdown', this.outsideMenuHandler);\n this.outsideMenuHandler = null;\n }\n // Clear any interact.js drag/resize bindings so they don't leak if the DOM element is reused elsewhere\n interact(this.el).unset();\n }\n\n private openMenu = () => {\n if (this.closeMenuTimer) {\n clearTimeout(this.closeMenuTimer);\n this.closeMenuTimer = null;\n }\n this.menuOpen = true;\n };\n\n private scheduleCloseMenu = () => {\n if (this.closeMenuTimer) {\n clearTimeout(this.closeMenuTimer);\n }\n this.closeMenuTimer = setTimeout(() => {\n this.menuOpen = false;\n this.closeMenuTimer = null;\n }, 150);\n };\n\n private closeMenu = () => {\n if (this.closeMenuTimer) {\n clearTimeout(this.closeMenuTimer);\n this.closeMenuTimer = null;\n }\n this.menuOpen = false;\n };\n\n @Watch('editable')\n onEditableChanged(newVal: boolean, oldVal: boolean) {\n // When transitioning out of editable mode (e.g., builder -> preview tab), clear interact bindings\n if (oldVal && !newVal) {\n interact(this.el).unset();\n }\n }\n\n componentDidRender() {\n interact.dynamicDrop(true);\n\n if (this.editable) {\n interact(this.el).resizable({\n edges: {\n top: '.edge-top',\n left: '.edge-left',\n bottom: '.edge-bottom',\n right: '.edge-right',\n },\n modifiers: [\n interact.modifiers.restrictSize({\n min: {width: 71, height: 36},\n }),\n ],\n listeners: {\n start: this.handleResizeStart.bind(this),\n move: this.handleResize.bind(this),\n end: this.handleResizeEnd.bind(this),\n },\n });\n }\n }\n\n @Listen('blur')\n handleBlur() {\n this.focused = false;\n }\n\n handleResizeStart(e: ResizeEvent) {\n e.preventDefault();\n e.stopPropagation();\n e.target.dataset.originalBottom = e.target.style.bottom;\n }\n\n handleResize(e: any) {\n let {width, height} = e.rect;\n\n const dX = e.deltaRect.left;\n const dY = e.deltaRect.bottom;\n const currentLeft = parseFloat(e.target.style.left);\n const currentBottom = parseFloat(e.target.style.bottom);\n\n width /= this.xscale;\n height /= this.yscale;\n\n Object.assign(e.target.style, {\n width: `${width}px`,\n height: `${height}px`,\n left: `${currentLeft + dX}px`,\n bottom: `${currentBottom - dY}px`,\n });\n }\n\n async handleResizeEnd(e: any) {\n const {sourceid, fieldname} = this;\n\n const width = Math.round(parseFloat(e.target.style.width));\n let height = Math.round(parseFloat(e.target.style.height));\n if (height < 20) {\n height = 15;\n }\n\n const newBottom = parseFloat(e.target.style.bottom);\n const originalBottom = parseFloat(e.target.dataset.originalBottom);\n const template = await Store.getTemplate(VerdocsEndpoint.getDefault(), this.sourceid);\n const oldField = template.fields.find(f => f.name === fieldname);\n const y = newBottom !== originalBottom ? newBottom / this.yscale : oldField?.y;\n\n updateField(VerdocsEndpoint.getDefault(), sourceid, fieldname, {width, height, y})\n .then(async updatedField => {\n const template = await Store.getTemplate(VerdocsEndpoint.getDefault(), this.sourceid);\n const newTemplate = JSON.parse(JSON.stringify(template)) as ITemplate;\n const fieldIndex = newTemplate.fields.findIndex(field => field.name === fieldname);\n if (fieldIndex > -1) {\n newTemplate.fields[fieldIndex] = updatedField;\n }\n Store.updateTemplate(this.sourceid, newTemplate);\n\n this.settingsChanged?.emit({fieldName: fieldname, field: updatedField});\n Object.assign(e.target.dataset, {x: 0, y: 0, h: 0});\n })\n .catch(e => console.log('Field update failed', e));\n }\n\n @Method()\n async showSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.showPanel) {\n settingsPanel.showPanel();\n }\n }\n\n @Method()\n async hideSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.hidePanel) {\n settingsPanel.hidePanel();\n }\n }\n\n render() {\n const {source, sourceid, fieldname, editable = false, done = false, disabled = false, focused, xscale = 1, yscale = 1} = this;\n\n const {index, field} = Store.getField(source, sourceid, fieldname, this.field);\n const {required = false, value = '', label = '', settings = {}} = field || {};\n const signerClass = `signer-${(index % 10) + 1}`;\n const {base64} = settings;\n\n if (done) {\n return <Host class={{'verdocs-field': true,done}}>{value && <img src={value} alt=\"Initial\" />}</Host>;\n }\n\n return (\n <Host class={{'verdocs-field': true,required, disabled, done, focused, filled: !!base64, 'menu-open': this.menuOpen, [signerClass]: true}}>\n {editable && <div class=\"edge-right\" />}\n {editable && <div class=\"edge-left\" />}\n {editable && <div class=\"edge-top\" />}\n {editable && <div class=\"edge-bottom\" />}\n\n {label && <label>{label}</label>}\n\n {base64 ? (\n <div\n class={{'initial-container': true, 'menu-open': this.menuOpen}}\n onMouseEnter={() => !disabled && this.openMenu()}\n onMouseLeave={() => this.scheduleCloseMenu()}\n onClick={e => {\n e.stopPropagation();\n if (disabled) return;\n this.menuOpen ? this.closeMenu() : this.openMenu();\n }}\n >\n <img src={base64} alt=\"Initial\" />\n {this.menuOpen && (\n <div class=\"action-menu\" onMouseEnter={() => this.openMenu()} onMouseLeave={() => this.scheduleCloseMenu()}>\n <button\n type=\"button\"\n class=\"menu-item\"\n onClick={e => {\n e.stopPropagation();\n if (disabled) return;\n console.log('[INITIAL] Editing initials');\n this.closeMenu();\n this.adopt.emit();\n }}\n >\n Edit\n </button>\n <button\n type=\"button\"\n class=\"menu-item\"\n onClick={e => {\n e.stopPropagation();\n if (disabled) return;\n console.log('[INITIAL] Clearing initials');\n this.closeMenu();\n this.fieldChange?.emit(null);\n }}\n >\n Clear\n </button>\n </div>\n )}\n </div>\n ) : (\n <button\n onClick={() => {\n if (disabled) return;\n // If we already have an initial ID, use it immediately\n if (this.initialid) {\n console.log('[INITIAL] Reusing existing initials', this.initialid);\n this.fieldChange?.emit(this.initialid);\n } else {\n this.adopt.emit();\n }\n }}\n >\n Initial\n </button>\n )}\n\n {editable && (\n <Fragment>\n <div\n id={`verdocs-settings-panel-trigger-${fieldname}`}\n style={{transform: `scale(${Math.floor((1 / xscale) * 1000) / 1000}, ${Math.floor((1 / yscale) * 1000) / 1000})`}}\n class=\"settings-icon\"\n innerHTML={SettingsIcon}\n onClick={(e: any) => {\n e.stopPropagation();\n this.showingProperties = !this.showingProperties;\n }}\n />\n\n {this.showingProperties && (\n <verdocs-portal anchor={`verdocs-settings-panel-trigger-${fieldname}`} onClickAway={() => (this.showingProperties = false)}>\n <verdocs-template-field-properties\n templateId={sourceid}\n fieldName={fieldname}\n onClose={() => (this.showingProperties = false)}\n onDelete={() => {\n this.deleted?.emit({fieldName: field.name});\n return this.hideSettingsPanel();\n }}\n onSettingsChanged={e => {\n this.settingsChanged?.emit(e.detail);\n return this.hideSettingsPanel();\n }}\n helpText={\"initial fields capture the recipient's initials on a clause or page.\"}\n />\n </verdocs-portal>\n )}\n </Fragment>\n )}\n </Host>\n );\n }\n}\n","@import '../../../theme.scss';\n\n// See https://www.sliderrevolution.com/resources/styling-radio-buttons/\nverdocs-field-radio {\n font-family: $verdocs-primary-font;\n width: 14px;\n height: 14px;\n display: block;\n font-size: 11px;\n position: relative;\n scroll-margin: 20px 0;\n background-color: transparent;\n transform-origin: bottom left;\n border-radius: 100%;\n\n svg {\n margin-top: 4px;\n }\n\n &.disabled.done {\n opacity: 1;\n }\n\n // To avoid conflicting with the use of a label for the checkbox itself\n div.label {\n top: -14px;\n left: -1px;\n height: 14px;\n color: white;\n padding: 0 4px;\n font-size: 9px;\n line-height: 13px;\n position: absolute;\n background: #4a4a99;\n border-top-left-radius: 2px;\n border-top-right-radius: 2px;\n }\n\n div.group {\n top: 14px;\n left: -1px;\n height: 14px;\n color: white;\n padding: 0 4px;\n font-size: 9px;\n line-height: 13px;\n position: absolute;\n background: #bb0589;\n border-bottom-left-radius: 2px;\n border-bottom-right-radius: 2px;\n }\n\n input {\n // This is needed to bring down the cursor from the parent element, which is where interactjs applies it\n cursor: inherit;\n }\n\n &.disabled input {\n opacity: 0.5;\n }\n\n &.done input[type='radio'] {\n margin: 0;\n padding: 0;\n width: 10px;\n height: 10px;\n }\n\n &:not(.done) input[type='radio'] {\n position: absolute;\n opacity: 0;\n\n + label {\n &:before {\n content: '';\n //background: $verdocs-grey-3;\n border-radius: 100%;\n border: 1px solid rgba(0, 0, 0, 0.6);\n display: inline-block;\n width: 12px;\n height: 12px;\n position: absolute;\n // This looks off in Storybook but correct in apps.\n left: 1px;\n top: 1px;\n cursor: pointer;\n text-align: center;\n transition: all 250ms ease;\n }\n }\n\n &:checked {\n + label {\n &:before {\n background-color: $verdocs-green;\n box-shadow: inset 0 0 0 2px $verdocs-grey-3;\n }\n }\n }\n\n &:focus {\n + label {\n &:before {\n outline: none;\n border-color: $verdocs-green;\n }\n }\n }\n\n &:disabled {\n + label {\n &:before {\n box-shadow: inset 0 0 0 4px $verdocs-grey-3;\n border-color: #f3f3fc;\n background: #f3f3fc;\n }\n }\n }\n\n + label {\n &:empty {\n &:before {\n margin-right: 0;\n }\n }\n }\n }\n\n &.required {\n border: 1px solid var(--verdocs-required-field-border);\n }\n\n &.hide {\n display: none;\n }\n\n verdocs-button-panel {\n margin-left: -20px;\n margin-top: -7px;\n transform: scale(0.7);\n }\n\n .settings-icon {\n position: absolute;\n top: -6px;\n left: -20px;\n display: inline-block;\n cursor: pointer;\n opacity: 0.3;\n\n svg {\n fill: $border-color;\n }\n\n &:hover {\n opacity: 1;\n }\n }\n}\n","import interact from 'interactjs';\nimport {ITemplateField, IEnvelopeField} from '@verdocs/js-sdk';\nimport {Component, Event, EventEmitter, h, Host, Method, Prop, Fragment, State, Element, Listen, Watch} from '@stencil/core';\nimport {SettingsIcon} from '../../../utils/Icons';\nimport {Store} from '../../../utils/Datastore';\n\nconst RadioIconUnselected = `<svg focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\"><path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"></path></svg>`;\n\nconst RadioIconSelected = `<svg focusable=\"false\" aria-hidden=\"true\" viewBox=\"0 0 24 24\"><path d=\"M12 7c-2.76 0-5 2.24-5 5s2.24 5 5 5 5-2.24 5-5-2.24-5-5-5zm0-5C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8z\"></path></svg>`;\n\n/**\n * Displays a radio button.\n */\n@Component({\n tag: 'verdocs-field-radio',\n styleUrl: 'verdocs-field-radio.scss',\n shadow: false,\n})\nexport class VerdocsFieldRadio {\n @Element() el: HTMLElement;\n\n /**\n * Fields may be attached to templates or envelopes, but only template fields may be edited.\n */\n @Prop({reflect: true}) source: 'template' | 'envelope' = 'template';\n\n /**\n * The source template or envelope ID the field is found in.\n */\n @Prop({reflect: true}) sourceid: string = '';\n\n /**\n * The name of the field to display.\n */\n @Prop({reflect: true}) fieldname: string = '';\n\n /**\n * Override the field's settings. This is intended to be used during signing when fields are being\n * mutated.\n */\n @Prop() field: IEnvelopeField | null | undefined = null;\n\n /**\n * If set to true, it will force interact to unset the el, resulting in no dragging the field.\n */\n @Prop({reflect: true}) isPreview?: boolean;\n\n /**\n * If set, overrides the field's settings object. Primarily used in Storybook mode.\n */\n @Prop({reflect: true}) disabled?: boolean = false;\n\n /**\n * If set, overrides the field's required object. Primarily used in Storybook mode.\n */\n @Prop({reflect: true}) required?: boolean = false;\n\n /**\n * If set, the field is considered \"done\" and is drawn in a display-final-value state.\n */\n @Prop({reflect: true}) done?: boolean = false;\n\n /**\n * If set, a settings icon will be displayed on hover. The settings shown allow the field's recipient and other settings to be\n * changed, so it should typically only be enabled in the Builder.\n */\n @Prop({reflect: true}) editable?: boolean = false;\n\n /**\n * If set, the field may be dragged to a new location. This should only be enabled in the Builder, or for self-placed fields.\n */\n @Prop({reflect: true}) moveable?: boolean = false;\n\n /**\n * If set, the field will be be scaled horizontally by this factor.\n */\n @Prop({reflect: true}) xscale?: number = 1;\n\n /**\n * If set, the field will be be scaled vertically by this factor.\n */\n @Prop({reflect: true}) yscale?: number = 1;\n\n /**\n * The page the field is on\n */\n @Prop({reflect: true}) pagenumber?: number = 1;\n\n @State() showingProperties?: boolean = false;\n @State() focused = false;\n\n /**\n * Event fired when the field's settings are changed.\n */\n @Event({composed: true}) settingsChanged: EventEmitter<{fieldName: string; field: ITemplateField}>;\n\n /**\n * Event fired when the field is deleted.\n */\n @Event({composed: true}) deleted: EventEmitter<{fieldName: string}>;\n\n @Listen('blur')\n handleBlur() {\n this.focused = false;\n }\n\n @Method()\n async focusField() {\n this.el.focus();\n this.focused = true;\n }\n\n @Method()\n async showSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.showPanel) {\n settingsPanel.showPanel();\n }\n }\n\n @Method()\n async hideSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.hidePanel) {\n settingsPanel.hidePanel();\n }\n }\n\n @Watch('editable')\n onEditableChanged(newVal: boolean, oldVal: boolean) {\n // When transitioning out of editable mode (e.g., builder -> preview tab), clear interact bindings\n if (oldVal && !newVal) {\n interact(this.el).unset();\n }\n }\n\n disconnectedCallback() {\n // Clear any interact.js drag/resize bindings so they don't leak if the DOM element is reused elsewhere\n interact(this.el).unset();\n }\n\n render() {\n const {source, sourceid, fieldname, editable = false, done = false, disabled = false, focused, xscale = 1, yscale = 1} = this;\n const {index, field} = Store.getField(source, sourceid, fieldname, this.field);\n const {name, required = false, label = '', group = '', value = false, readonly = false} = field || {};\n const signerClass = `signer-${(index % 10) + 1}`;\n\n const selected = value === 'true';\n\n if (done) {\n return (\n <Host class={{'verdocs-field': true,done}} style={{maxWidth: '10px'}}>\n <span innerHTML={selected ? RadioIconSelected : RadioIconUnselected} />\n </Host>\n );\n }\n\n return (\n <Host class={{'verdocs-field': true,required: this.required || required, disabled, done, focused, [signerClass]: true}}>\n {label && <div class=\"label\">{label}</div>}\n {editable && group && <div class=\"group\">{group}</div>}\n\n <input id={fieldname} type=\"radio\" name={group || fieldname} value={name} checked={!!selected} disabled={readonly || disabled} required={required} />\n <label htmlFor={fieldname} />\n\n {editable && (\n <Fragment>\n <div\n id={`verdocs-settings-panel-trigger-${fieldname}`}\n style={{transform: `scale(${Math.floor((1 / xscale) * 1000) / 1000}, ${Math.floor((1 / yscale) * 1000) / 1000})`}}\n class=\"settings-icon\"\n innerHTML={SettingsIcon}\n onClick={(e: any) => {\n e.stopPropagation();\n this.showingProperties = !this.showingProperties;\n }}\n />\n\n {this.showingProperties && (\n <verdocs-portal anchor={`verdocs-settings-panel-trigger-${fieldname}`} onClickAway={() => (this.showingProperties = false)}>\n <verdocs-template-field-properties\n templateId={sourceid}\n fieldName={fieldname}\n onClose={() => (this.showingProperties = false)}\n onDelete={() => {\n this.deleted?.emit({fieldName: fieldname});\n return this.hideSettingsPanel();\n }}\n onSettingsChanged={e => {\n this.settingsChanged?.emit(e.detail);\n return this.hideSettingsPanel();\n }}\n helpText={\"Radio buttons capture the recipient's selection of just one of several related (exclusive) options.\"}\n />\n </verdocs-portal>\n )}\n </Fragment>\n )}\n </Host>\n );\n }\n}\n","@import '../../../theme.scss';\n\nverdocs-field-signature {\n font-family: $verdocs-primary-font;\n width: 83px;\n height: 36px;\n display: block;\n font-size: 11px;\n position: relative;\n scroll-margin: 20px 0;\n letter-spacing: 0.3px;\n background-color: var(--verdocs-field-background, transparent);\n transform-origin: bottom left;\n border: var(--verdocs-field-border, 1px solid rgba(0, 0, 0, 0.2));\n border-radius: var(--verdocs-field-radius);\n // Host is focusable via tabindex; hide any browser-rendered text caret and use a pointer cursor\n // so it doesn't look like an editable text area.\n cursor: pointer;\n caret-color: transparent;\n\n label {\n top: -14px;\n left: -1px;\n height: 14px;\n color: var(--verdocs-field-text-color, white);\n padding: 0 4px;\n font-size: 9px;\n line-height: 13px;\n position: absolute;\n background: #4a4a99;\n border-top-left-radius: 2px;\n border-top-right-radius: 2px;\n }\n\n &.done {\n border: none;\n opacity: 1;\n }\n\n // When the Edit/Clear dropdown is open, raise this field above its siblings so\n // the menu isn't clipped by neighboring fields.\n &.menu-open {\n z-index: 50;\n }\n\n .signature-container {\n width: 100%;\n height: 100%;\n position: relative;\n\n img {\n display: block;\n height: 100%;\n width: auto;\n max-width: none;\n max-height: none;\n }\n\n .action-menu {\n position: absolute;\n top: calc(100% + 4px);\n left: 0;\n min-width: 90px;\n background: #ffffff;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 6px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n z-index: 1000;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n font-size: 12px;\n font-family: $verdocs-primary-font;\n\n .menu-item {\n background: #ffffff;\n border: none;\n padding: 8px 12px;\n color: #333333;\n cursor: pointer;\n text-align: left;\n width: 100%;\n font-size: 12px;\n line-height: 1.2;\n height: auto;\n font-family: inherit;\n\n &:hover {\n background-color: #f0f0f0;\n color: #000000;\n }\n\n &:not(:last-child) {\n border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n }\n }\n }\n }\n\n &.disabled .signature-container {\n opacity: 0.5;\n pointer-events: none;\n }\n\n button {\n // This is needed to bring down the cursor from the parent element, which is where interactjs applies it\n cursor: inherit;\n\n box-sizing: border-box;\n border: none;\n color: var(--verdocs-field-text-color, rgba(0, 0, 0, 0.87));\n font-weight: 500;\n transform-origin: 0 0;\n height: 100%;\n width: 100%;\n background: none;\n font-size: 11px;\n\n &.hide {\n display: none;\n }\n }\n\n &.required {\n border: 1px solid var(--verdocs-required-field-border);\n }\n\n &.filled {\n border: none !important;\n background-color: transparent !important;\n }\n\n verdocs-button-panel {\n top: -3px;\n left: -2px;\n opacity: 0.5;\n z-index: 1000;\n cursor: pointer;\n position: absolute;\n transform: scale(0.6);\n\n &[data-active],\n &:hover {\n opacity: 1;\n }\n\n .icon {\n svg {\n fill: #333333;\n }\n\n &:hover {\n svg {\n fill: #000000;\n }\n }\n }\n }\n\n .settings-icon {\n position: absolute;\n top: -3px;\n left: -20px;\n display: inline-block;\n cursor: pointer;\n opacity: 0.3;\n\n svg {\n fill: $border-color;\n }\n\n &:hover {\n opacity: 1;\n }\n }\n\n .edge-top,\n .edge-right,\n .edge-left,\n .edge-bottom {\n position: absolute;\n z-index: 10;\n }\n\n .edge-top {\n top: -2px;\n left: 0;\n right: 0;\n height: 5px;\n }\n\n .edge-right {\n top: 0;\n bottom: 0;\n right: -2px;\n width: 5px;\n }\n\n .edge-left {\n top: 0;\n left: -2px;\n bottom: 0;\n width: 5px;\n }\n\n .edge-bottom {\n bottom: -2px;\n left: 0;\n right: 0;\n height: 5px;\n }\n}\n","import interact from 'interactjs';\nimport {ResizeEvent} from '@interactjs/actions/resize/plugin';\nimport {ITemplateField, IEnvelopeField, VerdocsEndpoint, updateField, ITemplate} from '@verdocs/js-sdk';\nimport {Component, h, Host, Prop, Event, EventEmitter, Method, Fragment, State, Element, Listen, Watch} from '@stencil/core';\nimport {SettingsIcon} from '../../../utils/Icons';\nimport {Store} from '../../../utils/Datastore';\n\n/**\n * Displays a signature field. If a signature already exists, it will be displayed and the field\n * will be disabled. Otherwise, a placeholder button will be shown. Clicking the button will\n * show a dialog to adopt a signature.\n *\n * NOTE: When signature fields are completed they will be filled with a signature \"stamp\".\n * This requires operation against a live, valid envelope. If you are testing this component\n * in Storybook, it will not be visible here.\n */\n@Component({\n tag: 'verdocs-field-signature',\n styleUrl: 'verdocs-field-signature.scss',\n shadow: false,\n})\nexport class VerdocsFieldSignature {\n @Element() el: HTMLElement;\n\n /**\n * Fields may be attached to templates or envelopes, but only template fields may be edited.\n */\n @Prop({reflect: true}) source: 'template' | 'envelope' = 'template';\n\n /**\n * The source template or envelope ID the field is found in.\n */\n @Prop({reflect: true}) sourceid: string = '';\n\n /**\n * The name of the field to display.\n */\n @Prop({reflect: true}) fieldname: string = '';\n\n /**\n * Override the field's settings. This is intended to be used during signing when fields are being\n * mutated.\n */\n @Prop() field: IEnvelopeField | null | undefined = null;\n\n /**\n * If set, the signature creation dialog will be initialized with this text.\n */\n @Prop({reflect: true}) name?: string = '';\n\n /**\n * If set, overrides the field's settings object. Primarily used to support \"preview\" modes where all fields are disabled.\n */\n @Prop({reflect: true}) disabled?: boolean = false;\n\n /**\n * If set, a settings icon will be displayed on hover. The settings shown allow the field's recipient and other settings to be\n * changed, so it should typically only be enabled in the Builder.\n */\n @Prop({reflect: true}) editable?: boolean = false;\n\n /**\n * If set, the field may be dragged to a new location. This should only be enabled in the Builder, or for self-placed fields.\n */\n @Prop({reflect: true}) moveable?: boolean = false;\n\n /**\n * If set, the field is considered \"done\" and is drawn in a display-final-value state.\n */\n @Prop({reflect: true}) done?: boolean = false;\n\n /**\n * If set, the field will be be scaled horizontally by this factor.\n */\n @Prop({reflect: true}) xscale?: number = 1;\n\n /**\n * If set, the field will be be scaled vertically by this factor.\n */\n @Prop({reflect: true}) yscale?: number = 1;\n\n /**\n * The page the field is on\n */\n @Prop({reflect: true}) pagenumber?: number = 1;\n\n /**\n * If set, provides the ID of an already-adopted signature. If present, clicking the field (when empty)\n * will immediately use this signature instead of showing the adoption dialog.\n */\n @Prop({reflect: true}) signatureid?: string;\n\n /**\n * If set to true, it will force interact to unset the el, resulting in no dragging the field.\n */\n @Prop({reflect: true}) isPreview?: boolean;\n\n /**\n * Event emitted when the field has changed.\n */\n @Event({composed: true}) fieldChange: EventEmitter<string>;\n\n /**\n * Event fired on every character entered into / deleted from the field.\n */\n @Event({composed: true}) settingsPress: EventEmitter;\n\n /**\n * Event fired when the field's settings are changed.\n */\n @Event({composed: true}) settingsChanged: EventEmitter<{fieldName: string; field: ITemplateField}>;\n\n /**\n * Event fired when the field is deleted.\n */\n @Event({composed: true}) deleted: EventEmitter<{fieldName: string}>;\n\n @State() showingProperties?: boolean = false;\n @State() focused = false;\n @State() menuOpen = false;\n\n private closeMenuTimer: any = null;\n private outsideMenuHandler: ((e: Event) => void) | null = null;\n\n @Listen('blur')\n handleBlur() {\n this.focused = false;\n }\n\n @Event({composed: true}) adopt: EventEmitter;\n\n @Method()\n async focusField() {\n this.el.focus();\n this.focused = true;\n }\n\n @State()\n tempSignature: string = '';\n\n componentDidLoad() {\n this.outsideMenuHandler = (e: Event) => {\n if (this.menuOpen && !this.el.contains(e.target as Node)) {\n this.closeMenu();\n }\n };\n document.addEventListener('pointerdown', this.outsideMenuHandler);\n }\n\n disconnectedCallback() {\n if (this.closeMenuTimer) {\n clearTimeout(this.closeMenuTimer);\n this.closeMenuTimer = null;\n }\n if (this.outsideMenuHandler) {\n document.removeEventListener('pointerdown', this.outsideMenuHandler);\n this.outsideMenuHandler = null;\n }\n // Clear any interact.js drag/resize bindings so they don't leak if the DOM element is reused elsewhere\n interact(this.el).unset();\n }\n\n private openMenu = () => {\n if (this.closeMenuTimer) {\n clearTimeout(this.closeMenuTimer);\n this.closeMenuTimer = null;\n }\n this.menuOpen = true;\n };\n\n private scheduleCloseMenu = () => {\n if (this.closeMenuTimer) {\n clearTimeout(this.closeMenuTimer);\n }\n this.closeMenuTimer = setTimeout(() => {\n this.menuOpen = false;\n this.closeMenuTimer = null;\n }, 150);\n };\n\n private closeMenu = () => {\n if (this.closeMenuTimer) {\n clearTimeout(this.closeMenuTimer);\n this.closeMenuTimer = null;\n }\n this.menuOpen = false;\n };\n\n @Watch('editable')\n onEditableChanged(newVal: boolean, oldVal: boolean) {\n // When transitioning out of editable mode (e.g., builder -> preview tab), clear interact bindings\n if (oldVal && !newVal) {\n interact(this.el).unset();\n }\n }\n\n componentDidRender() {\n interact.dynamicDrop(true);\n if (this.editable) {\n interact(this.el).resizable({\n edges: {\n top: '.edge-top',\n left: '.edge-left',\n bottom: '.edge-bottom',\n right: '.edge-right',\n },\n modifiers: [\n interact.modifiers.restrictSize({\n min: {width: 71, height: 36},\n }),\n ],\n listeners: {\n start: this.handleResizeStart.bind(this),\n move: this.handleResize.bind(this),\n end: this.handleResizeEnd.bind(this),\n },\n });\n }\n }\n\n @Listen('blur')\n onBlur() {\n this.focused = false;\n }\n\n handleResizeStart(e: ResizeEvent) {\n e.preventDefault();\n e.stopPropagation();\n e.target.dataset.originalBottom = e.target.style.bottom;\n }\n\n handleResize(e: any) {\n let {width, height} = e.rect;\n\n const dX = e.deltaRect.left;\n const dY = e.deltaRect.bottom;\n const currentLeft = parseFloat(e.target.style.left);\n const currentBottom = parseFloat(e.target.style.bottom);\n\n width /= this.xscale;\n height /= this.yscale;\n\n Object.assign(e.target.style, {\n width: `${width}px`,\n height: `${height}px`,\n left: `${currentLeft + dX}px`,\n bottom: `${currentBottom - dY}px`,\n });\n }\n\n async handleResizeEnd(e: any) {\n const {sourceid, fieldname} = this;\n\n const width = Math.round(parseFloat(e.target.style.width));\n let height = Math.round(parseFloat(e.target.style.height));\n if (height < 20) {\n height = 15;\n }\n\n const newBottom = parseFloat(e.target.style.bottom);\n const originalBottom = parseFloat(e.target.dataset.originalBottom);\n const template = await Store.getTemplate(VerdocsEndpoint.getDefault(), this.sourceid);\n const oldField = template.fields.find(f => f.name === fieldname);\n const y = newBottom !== originalBottom ? newBottom / this.yscale : oldField?.y;\n\n updateField(VerdocsEndpoint.getDefault(), sourceid, fieldname, {width, height, y})\n .then(async updatedField => {\n const template = await Store.getTemplate(VerdocsEndpoint.getDefault(), this.sourceid);\n const newTemplate = JSON.parse(JSON.stringify(template)) as ITemplate;\n const fieldIndex = newTemplate.fields.findIndex(field => field.name === fieldname);\n if (fieldIndex > -1) {\n newTemplate.fields[fieldIndex] = updatedField;\n }\n Store.updateTemplate(this.sourceid, newTemplate);\n\n this.settingsChanged?.emit({fieldName: fieldname, field: updatedField});\n Object.assign(e.target.dataset, {x: 0, y: 0, h: 0});\n })\n .catch(e => console.log('Field update failed', e));\n }\n\n @Method()\n async showSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.showPanel) {\n settingsPanel.showPanel();\n }\n }\n\n @Method()\n async hideSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.hidePanel) {\n settingsPanel.hidePanel();\n }\n this.showingProperties = false;\n }\n\n render() {\n const {source, sourceid, fieldname, editable = false, done = false, disabled = false, focused, xscale = 1, yscale = 1} = this;\n\n const {index, field} = Store.getField(source, sourceid, fieldname, this.field);\n const {required = false, value = '', label = '', settings = {}} = field || {};\n const {base64} = settings;\n const signerClass = `signer-${(index % 10) + 1}`;\n\n if (done) {\n return <Host class={{'verdocs-field': true,done}}>{value && <img src={base64} alt=\"\" />}</Host>;\n }\n\n return (\n <Host class={{'verdocs-field': true,required, disabled, done, focused, filled: !!base64, 'menu-open': this.menuOpen, [signerClass]: true}}>\n {editable && <div class=\"edge-right\" />}\n {editable && <div class=\"edge-left\" />}\n {editable && <div class=\"edge-top\" />}\n {editable && <div class=\"edge-bottom\" />}\n\n {label && <label>{label}</label>}\n\n {base64 ? (\n <div\n class={{'signature-container': true, 'menu-open': this.menuOpen}}\n onMouseEnter={() => !disabled && this.openMenu()}\n onMouseLeave={() => this.scheduleCloseMenu()}\n onClick={e => {\n e.stopPropagation();\n if (disabled) return;\n this.menuOpen ? this.closeMenu() : this.openMenu();\n }}\n >\n <img src={base64} alt=\"Signature\" />\n {this.menuOpen && (\n <div class=\"action-menu\" onMouseEnter={() => this.openMenu()} onMouseLeave={() => this.scheduleCloseMenu()}>\n <button\n type=\"button\"\n class=\"menu-item\"\n onClick={e => {\n e.stopPropagation();\n if (disabled) return;\n console.log('[SIGNATURE] Editing signature');\n this.closeMenu();\n this.adopt.emit();\n }}\n >\n Edit\n </button>\n <button\n type=\"button\"\n class=\"menu-item\"\n onClick={e => {\n e.stopPropagation();\n if (disabled) return;\n console.log('[SIGNATURE] Clearing signature');\n this.closeMenu();\n this.fieldChange?.emit(null);\n }}\n >\n Clear\n </button>\n </div>\n )}\n </div>\n ) : (\n <button\n onClick={() => {\n if (disabled) return;\n // If we already have a signature ID, use it immediately\n if (this.signatureid) {\n console.log('[SIGNATURE] Reusing existing signature', this.signatureid);\n this.fieldChange?.emit(this.signatureid);\n } else {\n this.adopt.emit();\n }\n }}\n >\n Signature\n </button>\n )}\n\n {editable && (\n <Fragment>\n <div\n id={`verdocs-settings-panel-trigger-${fieldname}`}\n style={{transform: `scale(${Math.floor((1 / xscale) * 1000) / 1000}, ${Math.floor((1 / yscale) * 1000) / 1000})`}}\n class=\"settings-icon\"\n innerHTML={SettingsIcon}\n onClick={(e: any) => {\n e.stopPropagation();\n this.showingProperties = !this.showingProperties;\n }}\n />\n\n {this.showingProperties && (\n <verdocs-portal anchor={`verdocs-settings-panel-trigger-${fieldname}`} onClickAway={() => (this.showingProperties = false)}>\n <verdocs-template-field-properties\n templateId={sourceid}\n fieldName={fieldname}\n onClose={() => this.hideSettingsPanel()}\n onDelete={() => {\n this.deleted?.emit({fieldName: fieldname});\n return this.hideSettingsPanel();\n }}\n onSettingsChanged={e => {\n this.settingsChanged?.emit(e.detail);\n return this.hideSettingsPanel();\n }}\n helpText={\"Signature fields capture a recipient's signature on a document.\"}\n />\n </verdocs-portal>\n )}\n </Fragment>\n )}\n </Host>\n );\n }\n}\n","@import '../../../theme.scss';\n\nverdocs-field-textarea {\n width: 150px;\n height: 15px;\n display: block;\n font-size: 11px;\n position: relative;\n scroll-margin: 20px 0;\n box-sizing: border-box;\n background-color: var(--verdocs-field-background, transparent);\n transform-origin: bottom left;\n font-family: $verdocs-primary-font;\n border: var(--verdocs-field-border, 1px solid rgba(0, 0, 0, 0.2));\n border-radius: var(--verdocs-field-radius);\n\n textarea {\n // This is needed to bring down the cursor from the parent element, which is where interactjs applies it\n cursor: inherit;\n\n width: 100%;\n height: 100%;\n resize: none;\n border: none;\n outline: none;\n padding: 0 3px;\n font-size: 11px;\n background: none;\n font-weight: 500;\n transform-origin: 0 0;\n box-sizing: border-box;\n color: var(--verdocs-field-text-color, rgba(0, 0, 0, 0.87));\n\n &.hide {\n display: none;\n }\n }\n\n &.disabled textarea {\n opacity: 0.5;\n }\n\n label {\n top: -14px;\n left: -1px;\n height: 14px;\n color: white;\n padding: 0 4px;\n font-size: 9px;\n line-height: 13px;\n position: absolute;\n background: #4a4a99;\n border-top-left-radius: 2px;\n border-top-right-radius: 2px;\n }\n\n &.required {\n &.required {\n border: 1px solid var(--verdocs-required-field-border);\n }\n }\n\n verdocs-button-panel {\n top: -3px;\n left: -2px;\n opacity: 0.5;\n z-index: 1000;\n cursor: pointer;\n position: absolute;\n transform: scale(0.6);\n\n &[data-active],\n &:hover {\n opacity: 1;\n }\n\n .icon {\n svg {\n fill: #333333;\n }\n\n &:hover {\n svg {\n fill: #000000;\n }\n }\n }\n }\n\n .settings-icon {\n position: absolute;\n top: -3px;\n left: -20px;\n display: inline-block;\n cursor: pointer;\n opacity: 0.3;\n\n svg {\n fill: $border-color;\n }\n\n &:hover {\n opacity: 1;\n }\n }\n}\n","import interact from 'interactjs';\nimport {IEnvelopeField, VerdocsEndpoint, ITemplateField, updateField} from '@verdocs/js-sdk';\nimport {Component, h, Host, Prop, Method, Event, EventEmitter, Element, Fragment, State, Listen, Watch} from '@stencil/core';\nimport {SettingsIcon} from '../../../utils/Icons';\nimport {Store} from '../../../utils/Datastore';\n\n/**\n * Display a multi-line text input field. Reminder: the \"position\" of the field is specified\n * as the BOTTOM-LEFT corner.\n */\n@Component({\n tag: 'verdocs-field-textarea',\n styleUrl: 'verdocs-field-textarea.scss',\n shadow: false,\n})\nexport class VerdocsFieldTextarea {\n @Element() el: HTMLElement;\n private inputEl: HTMLTextAreaElement;\n\n /**\n * The endpoint to use to communicate with Verdocs. If not set, the default endpoint will be used.\n * This component self-manages its resize (width) behavior when in edit-template mode, and uses\n * this endpoint to save changes.\n */\n @Prop() endpoint: VerdocsEndpoint = VerdocsEndpoint.getDefault();\n\n /**\n * Fields may be attached to templates or envelopes, but only template fields may be edited.\n */\n @Prop({reflect: true}) source: 'template' | 'envelope' = 'template';\n\n /**\n * The source template or envelope ID the field is found in.\n */\n @Prop({reflect: true}) sourceid: string = '';\n\n /**\n * The name of the field to display.\n */\n @Prop({reflect: true}) fieldname: string = '';\n\n /**\n * Override the field's settings. This is intended to be used during signing when fields are being\n * mutated.\n */\n @Prop() field: IEnvelopeField | null | undefined = null;\n\n /**\n * If set to true, it will force interact to unset the el, resulting in no dragging the field.\n */\n @Prop({reflect: true}) isPreview?: boolean;\n\n /**\n * If set, overrides the field's settings object. Primarily used to support \"preview\" modes where all fields are disabled.\n */\n @Prop({reflect: true}) disabled?: boolean = false;\n\n /**\n * If set, a settings icon will be displayed on hover. The settings shown allow the field's recipient and other settings to be\n * changed, so it should typically only be enabled in the Builder.\n */\n @Prop({reflect: true}) editable?: boolean = false;\n\n /**\n * If set, the field may be dragged to a new location. This should only be enabled in the Builder, or for self-placed fields.\n */\n @Prop({reflect: true}) moveable?: boolean = false;\n\n /**\n * If set, the field is considered \"done\" and is drawn in a display-final-value state.\n */\n @Prop({reflect: true}) done?: boolean = false;\n\n /**\n * If set, the field will be be scaled horizontally by this factor.\n */\n @Prop({reflect: true}) xscale?: number = 1;\n\n /**\n * If set, the field will be be scaled vertically by this factor.\n */\n @Prop({reflect: true}) yscale?: number = 1;\n\n /**\n * The page the field is on\n */\n @Prop({reflect: true}) pagenumber?: number = 1;\n\n @Method()\n async focusField() {\n this.inputEl.focus();\n this.focused = true;\n }\n\n /**\n * Event fired when the field's settings are changed.\n */\n @Event({composed: true}) settingsChanged: EventEmitter<{fieldName: string; field: ITemplateField}>;\n\n /**\n * Event fired when the field is deleted.\n */\n @Event({composed: true}) deleted: EventEmitter<{fieldName: string}>;\n\n @State() showingProperties?: boolean = false;\n\n @Method()\n async showSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.showPanel) {\n settingsPanel.showPanel();\n }\n }\n\n @Method()\n async hideSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.hidePanel) {\n settingsPanel.hidePanel();\n }\n }\n\n @State() focused = false;\n\n @Listen('blur', {capture: true})\n handleBlur() {\n this.focused = false;\n }\n\n @Watch('editable')\n onEditableChanged(newVal: boolean, oldVal: boolean) {\n // When transitioning out of editable mode (e.g., builder -> preview tab), clear interact bindings\n if (oldVal && !newVal) {\n interact(this.el).unset();\n }\n }\n\n disconnectedCallback() {\n // Clear any interact.js drag/resize bindings so they don't leak if the DOM element is reused elsewhere\n interact(this.el).unset();\n }\n\n componentDidRender() {\n interact.dynamicDrop(true);\n\n if (this.editable) {\n interact(this.el).resizable({\n edges: {top: true, bottom: true, left: true, right: true},\n listeners: {\n start: this.handleResizeStart.bind(this),\n move: this.handleResize.bind(this),\n end: this.handleResizeEnd.bind(this),\n },\n });\n }\n }\n\n handleResizeStart(e: any) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n handleResize(e: any) {\n let {x = 0, y = 0, h = 0} = e.target.dataset;\n let {width, height} = e.rect;\n\n x = (parseFloat(x) || 0) + e.deltaRect.left;\n y = (parseFloat(y) || 0) + e.deltaRect.top;\n h = (parseFloat(h) || 0) + e.deltaRect.height;\n\n Object.assign(e.target.style, {\n width: `${width}px`,\n height: `${height}px`,\n transform: `translate(${x}px, ${y + h}px)`,\n });\n\n Object.assign(e.target.dataset, {x, y, h});\n }\n\n handleResizeEnd(e: any) {\n const {source, sourceid, fieldname} = this;\n const {field} = Store.getField(source, sourceid, fieldname, this.field);\n if (!field) {\n return;\n }\n\n const [translateX, translateY] = e.target.style.transform.split('(')[1].split(')')[0].split(',').map(parseFloat);\n\n const width = Math.round(parseFloat(e.target.style.width) / this.xscale);\n const height = Math.round(parseFloat(e.target.style.height) / this.yscale);\n const x = Math.round(field.x + translateX / this.xscale);\n const y = Math.round(field.y - translateY / this.yscale);\n\n updateField(this.endpoint, this.sourceid, this.fieldname, {x, y, width, height})\n .then(field => {\n this.settingsChanged?.emit({fieldName: this.fieldname, field});\n Object.assign(e.target.dataset, {x: 0, y: 0, h: 0});\n })\n .catch(e => console.log('Field update failed', e));\n }\n\n render() {\n const {source, sourceid, fieldname, editable = false, done = false, disabled = false, focused, xscale = 1, yscale = 1} = this;\n\n const {index, field} = Store.getField(source, sourceid, fieldname, this.field);\n const {required = false, placeholder = '', value = '', label = '', readonly = false} = field || {};\n const signerClass = `signer-${(index % 10) + 1}`;\n\n if (done) {\n return <Host class={{'verdocs-field': true,done}}>{value}</Host>;\n }\n\n return (\n <Host class={{'verdocs-field': true,required, disabled, done, focused, [signerClass]: true}}>\n {label && <label>{label}</label>}\n\n <textarea\n name={fieldname}\n required={required}\n placeholder={placeholder}\n disabled={readonly || disabled}\n ref={el => (this.inputEl = el)}\n onFocus={() => (this.focused = true)}\n onBlur={() => (this.focused = false)}\n >\n {value}\n </textarea>\n\n {editable && (\n <Fragment>\n <div\n id={`verdocs-settings-panel-trigger-${fieldname}`}\n style={{transform: `scale(${Math.floor((1 / xscale) * 1000) / 1000}, ${Math.floor((1 / yscale) * 1000) / 1000})`}}\n class=\"settings-icon\"\n innerHTML={SettingsIcon}\n onClick={(e: any) => {\n e.stopPropagation();\n this.showingProperties = !this.showingProperties;\n }}\n />\n\n {this.showingProperties && (\n <verdocs-portal anchor={`verdocs-settings-panel-trigger-${fieldname}`} onClickAway={() => (this.showingProperties = false)}>\n <verdocs-template-field-properties\n templateId={sourceid}\n fieldName={fieldname}\n onClose={() => (this.showingProperties = false)}\n onDelete={() => {\n this.deleted?.emit({fieldName: fieldname});\n return this.hideSettingsPanel();\n }}\n onSettingsChanged={e => {\n this.settingsChanged?.emit(e.detail);\n return this.hideSettingsPanel();\n }}\n helpText={'Text areas may be used to create multi-line text fields.'}\n />\n </verdocs-portal>\n )}\n </Fragment>\n )}\n </Host>\n );\n }\n}\n","@import '../../../theme.scss';\n\nverdocs-field-textbox {\n font-family: $verdocs-primary-font;\n box-sizing: border-box;\n width: 150px;\n height: 15px;\n display: block;\n font-size: 11px;\n position: relative;\n scroll-margin: 20px 0;\n letter-spacing: -0.2px;\n background-color: var(--verdocs-field-background, transparent);\n transform-origin: bottom left;\n border: var(--verdocs-field-border, 1px solid rgba(0, 0, 0, 0.2));\n border-radius: var(--verdocs-field-radius);\n\n &.small input,\n &.small textarea {\n font-size: 8px;\n }\n\n .edge-top,\n .edge-right,\n .edge-left,\n .edge-bottom {\n position: absolute;\n z-index: 10;\n }\n\n .edge-top {\n top: -2px;\n left: 0;\n right: 0;\n height: 5px;\n }\n\n .edge-right {\n top: 0;\n bottom: 0;\n right: -2px;\n width: 5px;\n }\n\n .edge-left {\n top: 0;\n left: -2px;\n bottom: 0;\n width: 5px;\n }\n\n .edge-bottom {\n bottom: -2px;\n left: 0;\n right: 0;\n height: 5px;\n }\n\n input {\n // This is needed to bring down the cursor from the parent element, which is where interactjs applies it\n cursor: inherit;\n\n width: 100%;\n height: 100%;\n border: none;\n outline: none;\n padding: 0 3px;\n font-size: 11px;\n background: none;\n font-weight: 500;\n position: absolute;\n transform-origin: 0 0;\n box-sizing: border-box;\n color: var(--verdocs-field-text-color, rgba(0, 0, 0, 0.87));\n\n &.hide {\n display: none;\n }\n }\n\n &.disabled input {\n opacity: 0.5;\n }\n\n textarea {\n // This is needed to bring down the cursor from the parent element, which is where interactjs applies it\n cursor: inherit;\n\n width: 100%;\n height: 100%;\n resize: none;\n border: none;\n outline: none;\n padding: 0 3px;\n font-size: 11px;\n background: none;\n font-weight: 500;\n line-height: 13px;\n transform-origin: 0 0;\n box-sizing: border-box;\n color: var(--verdocs-field-text-color, rgba(0, 0, 0, 0.87));\n\n &.hide {\n display: none;\n }\n }\n\n &.disabled textarea {\n opacity: 0.5;\n }\n\n label {\n top: -14px;\n left: -1px;\n height: 14px;\n color: white;\n padding: 0 4px;\n font-size: 9px;\n line-height: 13px;\n position: absolute;\n background: #4a4a99;\n border-top-left-radius: 2px;\n border-top-right-radius: 2px;\n }\n\n &.required {\n &.required {\n border: 1px solid var(--verdocs-required-field-border);\n }\n }\n\n verdocs-button-panel {\n top: -3px;\n left: -2px;\n opacity: 0.5;\n z-index: 1000;\n cursor: pointer;\n position: absolute;\n transform: scale(0.6);\n\n &[data-active],\n &:hover {\n opacity: 1;\n }\n\n .icon {\n svg {\n fill: #333333;\n }\n\n &:hover {\n svg {\n fill: #000000;\n }\n }\n }\n }\n\n // @see https://community.logmein.com/t5/LastPass-Support-Discussions/placeholder-text-overrides-data-lpignore-quot-true-quot/td-p/295135\n // LastPass is ignoring the data-lpignore attribute in some cases\n [data-lastpass-icon-root] {\n display: none !important;\n }\n\n .settings-icon {\n position: absolute;\n top: -4px;\n left: -18px;\n display: inline-block;\n cursor: pointer;\n opacity: 0.3;\n\n svg {\n fill: $border-color;\n }\n\n &:hover {\n opacity: 1;\n }\n }\n}\n","import interact from 'interactjs';\nimport {ResizeEvent} from '@interactjs/actions/resize/plugin';\nimport {IEnvelopeField, ITemplate, ITemplateField, updateField, VerdocsEndpoint} from '@verdocs/js-sdk';\nimport {Component, h, Host, Element, Prop, Method, Event, EventEmitter, Fragment, State, Listen, Watch} from '@stencil/core';\nimport {SettingsIcon} from '../../../utils/Icons';\nimport {Store} from '../../../utils/Datastore';\n\n/**\n * Display a simple 1-line text input field.\n */\n@Component({\n tag: 'verdocs-field-textbox',\n styleUrl: 'verdocs-field-textbox.scss',\n shadow: false,\n})\nexport class VerdocsFieldTextbox {\n @Element() el: HTMLElement;\n private inputEl: HTMLInputElement | HTMLTextAreaElement;\n\n /**\n * Fields may be attached to templates or envelopes, but only template fields may be edited.\n */\n @Prop({reflect: true}) source: 'template' | 'envelope' = 'template';\n\n /**\n * The source template or envelope ID the field is found in.\n */\n @Prop({reflect: true}) sourceid: string = '';\n\n /**\n * The name of the field to display.\n */\n @Prop({reflect: true}) fieldname: string = '';\n\n /**\n * Override the field's settings. This is intended to be used during signing when fields are being\n * mutated.\n */\n @Prop() field: IEnvelopeField | null | undefined = null;\n\n /**\n * If set to true, it will force interact to unset the el, resulting in no dragging the field.\n */\n @Prop({reflect: true}) isPreview?: boolean;\n\n /**\n * If set, overrides the field's settings object. Primarily used to support \"preview\" modes where all fields are disabled.\n */\n @Prop({reflect: true}) disabled?: boolean = false;\n\n /**\n * If set, overrides the field's settings object. Primarily used to support \"preview\" modes where all fields are disabled.\n */\n @Prop({reflect: true}) multiline?: boolean = false;\n\n /**\n * If set, a settings icon will be displayed on hover. The settings shown allow the field's recipient and other settings to be\n * changed, so it should typically only be enabled in the Builder.\n */\n @Prop({reflect: true}) editable?: boolean = false;\n\n /**\n * If set, the field may be dragged to a new location. This should only be enabled in the Builder, or for self-placed fields.\n */\n @Prop({reflect: true}) moveable?: boolean = false;\n\n /**\n * If set, the field is considered \"done\" and is drawn in a display-final-value state.\n */\n @Prop({reflect: true}) done?: boolean = false;\n\n /**\n * If set, the field will be be scaled horizontally by this factor.\n */\n @Prop({reflect: true}) xscale?: number = 1;\n\n /**\n * If set, the field will be be scaled vertically by this factor.\n */\n @Prop({reflect: true}) yscale?: number = 1;\n\n /**\n * The page the field is on\n */\n @Prop({reflect: true}) pagenumber?: number = 1;\n\n /**\n * Event fired when the field's settings are changed.\n */\n @Event({composed: true}) settingsChanged: EventEmitter<{fieldName: string; field: ITemplateField}>;\n\n /**\n * Event fired when the field is deleted.\n */\n @Event({composed: true}) deleted: EventEmitter<{fieldName: string}>;\n\n @State() showingProperties?: boolean = false;\n @State() focused = false;\n\n @Listen('blur', {capture: true})\n handleBlur() {\n this.focused = false;\n }\n\n @Method()\n async focusField() {\n this.inputEl.focus();\n this.focused = true;\n }\n\n @Method()\n async showSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.showPanel) {\n settingsPanel.showPanel();\n }\n }\n\n @Method()\n async hideSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.hidePanel) {\n settingsPanel.hidePanel();\n }\n this.showingProperties = false;\n }\n\n @Watch('editable')\n onEditableChanged(newVal: boolean, oldVal: boolean) {\n // When transitioning out of editable mode (e.g., builder -> preview tab), clear interact bindings\n if (oldVal && !newVal) {\n interact(this.el).unset();\n }\n }\n\n disconnectedCallback() {\n // Clear any interact.js drag/resize bindings so they don't leak if the DOM element is reused elsewhere\n interact(this.el).unset();\n }\n\n componentDidRender() {\n interact.dynamicDrop(true);\n\n if (this.editable) {\n interact(this.el).resizable({\n edges: {\n top: '.edge-top',\n left: '.edge-left',\n bottom: '.edge-bottom',\n right: '.edge-right',\n },\n modifiers: [\n interact.modifiers.restrictSize({\n min: {width: 30, height: 10},\n }),\n ],\n listeners: {\n start: this.handleResizeStart.bind(this),\n move: this.handleResize.bind(this),\n end: this.handleResizeEnd.bind(this),\n },\n });\n }\n }\n\n handleResizeStart(e: ResizeEvent) {\n e.preventDefault();\n e.stopPropagation();\n e.target.dataset.originalBottom = e.target.style.bottom;\n }\n\n handleResize(e: any) {\n let {width, height} = e.rect;\n\n const dX = e.deltaRect.left;\n const dY = e.deltaRect.bottom;\n const currentLeft = parseFloat(e.target.style.left);\n const currentBottom = parseFloat(e.target.style.bottom);\n\n width /= this.xscale;\n height /= this.yscale;\n\n Object.assign(e.target.style, {\n width: `${width}px`,\n height: `${height}px`,\n left: `${currentLeft + dX}px`,\n bottom: `${currentBottom - dY}px`,\n });\n }\n\n async handleResizeEnd(e: any) {\n const {sourceid, fieldname} = this;\n\n const width = Math.round(parseFloat(e.target.style.width));\n let height = Math.round(parseFloat(e.target.style.height));\n if (height < 10) {\n height = 10;\n }\n const multiline = height > 15;\n\n const newBottom = parseFloat(e.target.style.bottom);\n const originalBottom = parseFloat(e.target.dataset.originalBottom);\n const template = await Store.getTemplate(VerdocsEndpoint.getDefault(), this.sourceid);\n const oldField = template.fields.find(f => f.name === fieldname);\n const y = newBottom !== originalBottom ? newBottom / this.yscale : oldField?.y;\n\n updateField(VerdocsEndpoint.getDefault(), sourceid, fieldname, {width, height, y, multiline})\n .then(async updatedField => {\n const template = await Store.getTemplate(VerdocsEndpoint.getDefault(), this.sourceid);\n const newTemplate = JSON.parse(JSON.stringify(template)) as ITemplate;\n const fieldIndex = newTemplate.fields.findIndex(field => field.name === fieldname);\n if (fieldIndex > -1) {\n newTemplate.fields[fieldIndex] = updatedField;\n }\n Store.updateTemplate(this.sourceid, newTemplate);\n\n this.settingsChanged?.emit({fieldName: fieldname, field: updatedField});\n Object.assign(e.target.dataset, {x: 0, y: 0, h: 0});\n })\n .catch(e => console.log('Field update failed', e));\n }\n\n render() {\n const {source, sourceid, fieldname, editable = false, done = false, disabled = false, focused, xscale = 1, yscale = 1} = this;\n const {index, field} = Store.getField(source, sourceid, fieldname, this.field);\n let {required = false, placeholder = '', label = '', width = 150, height = 15, readonly = false, default: value = '', multiline = false} = field || {};\n const signerClass = `signer-${(index % 10) + 1}`;\n const small = height < 15;\n\n // TODO: Consolidate value/defaultValue handling between template and envelope fields.\n if ((field as any)?.value) {\n value = (field as any)?.value;\n }\n\n // TODO: This is an outdated technique from the old system. We should compute it.\n const maxlength = width / 5;\n\n if (done) {\n return <Host class={{'verdocs-field': true,done}}>{value}</Host>;\n }\n\n return (\n <Host class={{'verdocs-field': true,required, disabled, done, focused, small, [signerClass]: true}}>\n {editable && <div class=\"edge-top\" />}\n {editable && <div class=\"edge-right\" />}\n {editable && <div class=\"edge-left\" />}\n {editable && <div class=\"edge-bottom\" />}\n\n {label && <label>{label}</label>}\n\n {multiline ? (\n <textarea\n name={fieldname}\n required={required}\n placeholder={placeholder}\n disabled={readonly || disabled}\n ref={el => (this.inputEl = el)}\n onFocus={() => (this.focused = true)}\n onBlur={() => (this.focused = false)}\n >\n {value}\n </textarea>\n ) : (\n <input\n type=\"text\"\n value={value}\n name={fieldname}\n required={required}\n maxlength={maxlength}\n placeholder={placeholder}\n disabled={readonly || disabled}\n ref={el => (this.inputEl = el)}\n onFocus={() => (this.focused = true)}\n onBlur={() => (this.focused = false)}\n />\n )}\n\n {editable && (\n <Fragment>\n <div\n id={`verdocs-settings-panel-trigger-${fieldname}`}\n style={{transform: `scale(${Math.floor((1 / xscale) * 1000) / 1000}, ${Math.floor((1 / yscale) * 1000) / 1000})`}}\n class=\"settings-icon\"\n innerHTML={SettingsIcon}\n onClick={(e: any) => {\n e.stopPropagation();\n this.showingProperties = !this.showingProperties;\n }}\n />\n\n {this.showingProperties && (\n <verdocs-portal anchor={`verdocs-settings-panel-trigger-${fieldname}`} onClickAway={() => (this.showingProperties = false)}>\n <verdocs-template-field-properties\n templateId={sourceid}\n fieldName={fieldname}\n onClose={() => this.hideSettingsPanel()}\n onDelete={() => {\n this.deleted?.emit({fieldName: fieldname});\n return this.hideSettingsPanel();\n }}\n onSettingsChanged={e => {\n this.settingsChanged?.emit(e.detail);\n return this.hideSettingsPanel();\n }}\n helpText={\n 'Text boxes may be used to capture simple text input. Participant-entered values will be stored for later retrieval via the \"name\" field.<br /><br />If marked required, the participant must complete the field before proceeding.'\n }\n />\n </verdocs-portal>\n )}\n </Fragment>\n )}\n </Host>\n );\n }\n}\n","@import '../../../theme.scss';\n\nverdocs-field-timestamp {\n width: 160px;\n height: 15px;\n display: block;\n font-size: 9px;\n position: relative;\n scroll-margin: 20px 0;\n background-color: var(--verdocs-field-background, transparent);\n transform-origin: bottom left;\n font-family: $verdocs-primary-font;\n\n &.done {\n opacity: 1;\n }\n\n input {\n position: absolute;\n\n // This is needed to bring down the cursor from the parent element, which is where interactjs applies it\n cursor: inherit;\n\n opacity: 0.5;\n width: 100%;\n height: 100%;\n font-size: 9px;\n background: none;\n font-weight: 500;\n transform-origin: 0 0;\n box-sizing: border-box;\n color: var(--verdocs-field-text-color, rgba(0, 0, 0, 0.87));\n border: var(--verdocs-field-border, 1px solid rgba(0, 0, 0, 0.2));\n border-radius: var(--verdocs-field-radius);\n\n &.hide {\n display: none;\n }\n }\n\n label {\n top: -14px;\n left: -1px;\n height: 14px;\n color: white;\n padding: 0 4px;\n font-size: 9px;\n line-height: 13px;\n position: absolute;\n background: #4a4a99;\n border-top-left-radius: 2px;\n border-top-right-radius: 2px;\n }\n\n &.required {\n border: 1px solid var(--verdocs-required-field-border);\n }\n\n verdocs-button-panel {\n top: -3px;\n left: -2px;\n opacity: 0.5;\n z-index: 1000;\n cursor: pointer;\n position: absolute;\n transform: scale(0.6);\n\n &[data-active],\n &:hover {\n opacity: 1;\n }\n\n .icon {\n svg {\n fill: #333333;\n }\n\n &:hover {\n svg {\n fill: #000000;\n }\n }\n }\n }\n\n .settings-icon {\n position: absolute;\n top: -3px;\n left: -20px;\n display: inline-block;\n cursor: pointer;\n opacity: 0.3;\n\n svg {\n fill: $border-color;\n }\n\n &:hover {\n opacity: 1;\n }\n }\n}\n","import interact from 'interactjs';\nimport {format} from 'date-fns/format';\nimport {ITemplateField, IEnvelopeField} from '@verdocs/js-sdk';\nimport {Component, h, Host, Prop, Method, Event, EventEmitter, Fragment, State, Listen, Watch} from '@stencil/core';\nimport {FORMAT_TIMESTAMP} from '../../../utils/Types';\nimport {SettingsIcon} from '../../../utils/Icons';\nimport {Store} from '../../../utils/Datastore';\n\n/**\n * Display a timestamp. Timestamps are not editable by signers. Instead, they are automatically\n * filled when the signer submits the document.\n */\n@Component({\n tag: 'verdocs-field-timestamp',\n styleUrl: 'verdocs-field-timestamp.scss',\n shadow: false,\n})\nexport class VerdocsFieldTimestamp {\n private el: HTMLInputElement;\n\n /**\n * Fields may be attached to templates or envelopes, but only template fields may be edited.\n */\n @Prop({reflect: true}) source: 'template' | 'envelope' = 'template';\n\n /**\n * The source template or envelope ID the field is found in.\n */\n @Prop({reflect: true}) sourceid: string = '';\n\n /**\n * The name of the field to display.\n */\n @Prop({reflect: true}) fieldname: string = '';\n\n /**\n * Override the field's settings. This is intended to be used during signing when fields are being\n * mutated.\n */\n @Prop() field: IEnvelopeField | null | undefined = null;\n\n /**\n * If set to true, it will force interact to unset the el, resulting in no dragging the field.\n */\n @Prop({reflect: true}) isPreview?: boolean;\n\n /**\n * If set, overrides the field's settings object. Primarily used to support \"preview\" modes where all fields are disabled.\n */\n @Prop({reflect: true}) disabled?: boolean = false;\n\n /**\n * If set, a settings icon will be displayed on hover. The settings shown allow the field's recipient and other settings to be\n * changed, so it should typically only be enabled in the Builder.\n */\n @Prop({reflect: true}) editable?: boolean = false;\n\n /**\n * If set, the field may be dragged to a new location. This should only be enabled in the Builder, or for self-placed fields.\n */\n @Prop({reflect: true}) moveable?: boolean = false;\n\n /**\n * If set, the field is considered \"done\" and is drawn in a display-final-value state.\n */\n @Prop({reflect: true}) done?: boolean = false;\n\n /**\n * If set, the field will be be scaled horizontally by this factor.\n */\n @Prop({reflect: true}) xscale?: number = 1;\n\n /**\n * If set, the field will be be scaled vertically by this factor.\n */\n @Prop({reflect: true}) yscale?: number = 1;\n\n /**\n * The page the field is on\n */\n @Prop() pagenumber?: number = 1;\n\n /**\n * Event fired when the field's settings are changed.\n */\n @Event({composed: true}) settingsChanged: EventEmitter<{fieldName: string; field: ITemplateField}>;\n\n /**\n * Event fired when the field is deleted.\n */\n @Event({composed: true}) deleted: EventEmitter<{fieldName: string}>;\n\n @State() showingProperties?: boolean = false;\n @State() focused = false;\n\n @Listen('blur', {capture: true})\n handleBlur() {\n this.focused = false;\n }\n\n @Method() async focusField() {\n this.el.focus();\n this.focused = true;\n }\n\n @Method()\n async showSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.showPanel) {\n settingsPanel.showPanel();\n }\n }\n\n @Method()\n async hideSettingsPanel() {\n const settingsPanel = document.getElementById(`verdocs-settings-panel-${this.fieldname}`) as any;\n if (settingsPanel && settingsPanel.hidePanel) {\n settingsPanel.hidePanel();\n }\n this.showingProperties = false;\n }\n\n @Watch('editable')\n onEditableChanged(newVal: boolean, oldVal: boolean) {\n // When transitioning out of editable mode (e.g., builder -> preview tab), clear interact bindings\n if (oldVal && !newVal && this.el) {\n interact(this.el).unset();\n }\n }\n\n disconnectedCallback() {\n // Clear any interact.js drag/resize bindings so they don't leak if the DOM element is reused elsewhere\n if (this.el) {\n interact(this.el).unset();\n }\n }\n\n render() {\n const {source, sourceid, fieldname, editable = false, done = false, disabled = false, focused, xscale = 1, yscale = 1} = this;\n\n const {index, field} = Store.getField(source, sourceid, fieldname, this.field);\n const {required = false, placeholder = '', value = '', label = ''} = field || {};\n const signerClass = `signer-${(index % 10) + 1}`;\n\n const formatted = format(new Date(value || new Date().toISOString()), FORMAT_TIMESTAMP);\n\n if (done) {\n return <Host class={{'verdocs-field': true,done}}>{formatted}</Host>;\n }\n\n return (\n <Host class={{'verdocs-field': true,required, disabled, done, focused, [signerClass]: true}}>\n {label && <label>{label}</label>}\n <input type=\"text\" placeholder={placeholder} value={formatted} disabled={true} ref={el => (this.el = el)} onFocus={() => (this.focused = true)} />\n\n {editable && (\n <Fragment>\n <div\n id={`verdocs-settings-panel-trigger-${fieldname}`}\n style={{transform: `scale(${Math.floor((1 / xscale) * 1000) / 1000}, ${Math.floor((1 / yscale) * 1000) / 1000})`}}\n class=\"settings-icon\"\n innerHTML={SettingsIcon}\n onClick={(e: any) => {\n e.stopPropagation();\n this.showingProperties = !this.showingProperties;\n }}\n />\n\n {this.showingProperties && (\n <verdocs-portal anchor={`verdocs-settings-panel-trigger-${fieldname}`} onClickAway={() => (this.showingProperties = false)}>\n <verdocs-template-field-properties\n templateId={sourceid}\n fieldName={fieldname}\n onClose={() => this.hideSettingsPanel()}\n onDelete={() => {\n this.deleted?.emit({fieldName: fieldname});\n return this.hideSettingsPanel();\n }}\n onSettingsChanged={e => {\n this.settingsChanged?.emit(e.detail);\n return this.hideSettingsPanel();\n }}\n helpText={'Time stamps are automatically set when the recipient signs the document.'}\n />\n </verdocs-portal>\n )}\n </Fragment>\n )}\n </Host>\n );\n }\n}\n","@import '../../../theme.scss';\n\nverdocs-upload-dialog {\n position: fixed;\n box-sizing: border-box;\n font-family: $primary-font;\n\n div {\n box-sizing: border-box;\n }\n\n .background-overlay {\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n z-index: 10000;\n position: fixed;\n align-items: center;\n background: #0000007f;\n justify-content: center;\n }\n\n // Not simple .dialog to avoid conflicts with ok-dialog. Should review that more.\n .upload-dialog-content {\n width: 320px;\n display: flex;\n flex-direction: column;\n border-radius: 4px;\n overflow: hidden;\n background: $verdocs-grey-4;\n padding: 16px;\n box-shadow: 3px 3px 5px 1px rgba(40, 40, 40, 0.4);\n }\n\n .heading {\n display: flex;\n font-size: 20px;\n font-weight: 500;\n flex-direction: row;\n }\n\n .buttons {\n display: flex;\n align-items: center;\n flex-direction: row;\n justify-content: flex-end;\n\n verdocs-button {\n margin-left: 16px;\n }\n }\n\n .current-label {\n margin: 20px 0 5px 0;\n }\n\n .drop-target {\n opacity: 1;\n width: 100%;\n display: flex;\n margin: 20px 0;\n min-height: 260px;\n padding: 30px 15px;\n text-align: center;\n align-items: center;\n flex-direction: column;\n justify-content: center;\n background-color: #f5f5f5;\n color: $verdocs-grey-1;\n border: 2px dashed #979797;\n\n p {\n margin: 12px 0;\n font-weight: 500;\n\n &.subscript {\n margin: 20px;\n color: $verdocs-bg-4;\n font-size: 14px;\n }\n }\n\n &.dragging-over {\n border: 5px solid $verdocs-deep-blue;\n }\n\n > verdocs-button {\n margin: 12px 0;\n display: inline-block;\n }\n }\n\n .attachments {\n height: 56px;\n font-size: 0;\n margin: 20px 0;\n padding: 0 16px;\n line-height: 56px;\n white-space: normal;\n box-shadow:\n 0 1px 3px 0 rgb(0 0 0 / 20%),\n 0 2px 2px 0 rgb(0 0 0 / 12%),\n 0 0 2px 0 rgb(0 0 0 / 14%);\n\n .attachment {\n gap: 10px;\n display: flex;\n align-items: center;\n flex-direction: row;\n\n .icon {\n width: 18px;\n height: 18px;\n line-height: 18px;\n\n &.trash {\n cursor: pointer;\n }\n }\n\n .name {\n flex: 1;\n font-size: 14px;\n overflow: hidden;\n font-weight: 400;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n }\n }\n\n .error {\n margin: 20px 0;\n color: $verdocs-red-1;\n }\n}\n","import {Component, h, Event, EventEmitter, Fragment, Host, State, Prop} from '@stencil/core';\n\nconst TrashIcon = `<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\" /></svg>`;\n\nconst PaperclipIcon = `<svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M15.172 7l-6.586 6.586a2 2 0 102.828 2.828l6.414-6.586a4 4 0 00-5.656-5.656l-6.415 6.585a6 6 0 108.486 8.486L20.5 13\" /></svg>`;\n\n/**\n * Display a file upload tool. Note that the file is not actually transmitted, so it may be used by\n * callers with a variety of workflows. Instead, data about the chosen file will be passed to the\n * caller via the onNext event handler. A delete event is also exposed to delete existing attachments.\n * To represent an existing attachment, set the existingFile property.\n */\n@Component({\n tag: 'verdocs-upload-dialog',\n styleUrl: 'verdocs-upload-dialog.scss',\n})\nexport class VerdocsUploadDialog {\n private fileInput?: HTMLInputElement;\n\n @Prop({mutable: true})\n maxSize: number = 20 * 1024 * 1024;\n\n @Prop({mutable: true})\n existingFile: any;\n\n /**\n * Event fired when the step is cancelled. This is called exit to avoid conflicts with the JS-reserved \"cancel\" event name.\n */\n @Event({composed: true}) exit: EventEmitter;\n\n /**\n * Event fired when the dialog is closed. The event data will contain the file selected.\n */\n @Event({composed: true}) next: EventEmitter<File[]>;\n\n /**\n * Event fired when an existing attachment is deleted. The parent component is\n * responsible for the actual removal.\n */\n @Event({composed: true}) remove: EventEmitter;\n\n @State() draggingOver = false;\n @State() confirmDelete = false;\n @State() selectedFiles = [] as File[];\n @State() errorMessage = '';\n\n handleCancel() {\n this.exit.emit();\n }\n\n // We need a separate event handler for clicking the background because it can receive events \"through\" other child components\n handleDismiss(e: any) {\n if (e.target.class === 'background-overlay') {\n e.preventDefault();\n this.handleCancel();\n }\n }\n\n handleDone() {\n this.next.emit(this.selectedFiles);\n }\n\n handleDragOver(e) {\n e.preventDefault();\n this.draggingOver = true;\n }\n\n handleDragLeave(e) {\n e.preventDefault();\n this.draggingOver = false;\n }\n\n async handleDrop(e) {\n e.preventDefault();\n this.draggingOver = false;\n this.handleSetSelected(Array.from(e.dataTransfer.files));\n }\n\n handleRemoveAttachment(index: number) {\n const newFiles = [...this.selectedFiles];\n newFiles.splice(index, 1);\n this.handleSetSelected(newFiles);\n }\n\n handleSetSelected(files: any[]) {\n this.selectedFiles = files;\n this.errorMessage = '';\n\n const totalSize = this.selectedFiles.reduce((acc, file) => acc + file.size, 0);\n if (totalSize > this.maxSize) {\n this.errorMessage = 'Total file size must not exceed 20MB.';\n }\n }\n\n handleDeleteAttachment(e: any) {\n // Stop the parent from seeing \"next\" and thinking an upload was done.\n // TODO: Rethink having so many commonalities in nested dialogs (next/exit).\n e.preventDefault();\n e.stopPropagation();\n\n this.remove?.emit();\n this.existingFile = null;\n this.confirmDelete = false;\n }\n\n handleSelectFile() {\n this.fileInput?.click();\n }\n\n async handleFileChange() {\n const selectedFiles = Array.from(this.fileInput?.files);\n let droppedFiles = [] as File[];\n for (let i = 0; i < this.fileInput?.files.length; i++) {\n droppedFiles.push(this.fileInput?.files[i]);\n }\n\n this.handleSetSelected(selectedFiles);\n }\n\n render() {\n const existingFile = this.existingFile?.name ? this.existingFile : null;\n\n return (\n <Host>\n <div class=\"background-overlay\" onClick={e => this.handleDismiss(e)}>\n <div class=\"upload-dialog-content\">\n <div class=\"heading\">Upload attachment</div>\n\n {this.selectedFiles.length < 1 && existingFile && (\n <Fragment>\n <div class=\"current-label\">Current Attachment</div>\n <div class=\"attachments\" style={{marginTop: '0'}}>\n <div class=\"attachment\">\n <div class=\"icon\" innerHTML={PaperclipIcon} />\n <div class=\"name\">{existingFile.name}</div>\n <div class=\"icon trash\" innerHTML={TrashIcon} onClick={() => (this.confirmDelete = true)} />\n </div>\n </div>\n </Fragment>\n )}\n\n {this.selectedFiles.length < 1 && !existingFile && (\n <div\n class={{'drop-target': true, 'dragging-over': this.draggingOver}}\n onDragOver={e => this.handleDragOver(e)}\n onDragLeave={e => this.handleDragLeave(e)}\n onDrop={e => this.handleDrop(e)}\n >\n <p>Drag and drop your files here</p>\n <p class=\"subscript\">Supported files: PDF, Word, JPG, PNG</p>\n\n <verdocs-button label={!!existingFile ? 'Replace files' : 'Select files'} onClick={() => this.handleSelectFile()} />\n <input\n type=\"file\"\n ref={el => (this.fileInput = el as HTMLInputElement)}\n style={{display: 'none'}}\n accept=\".pdf,application/pdf,.doc,.docx,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document,image/*\"\n onChange={() => this.handleFileChange()}\n />\n </div>\n )}\n\n {this.selectedFiles.length > 0 && (\n <div class=\"attachments\">\n {this.selectedFiles.map((file, index) => (\n <div class=\"attachment\">\n <div class=\"icon\" innerHTML={PaperclipIcon} />\n <div class=\"name\">{file.name}</div>\n <div class=\"icon trash\" innerHTML={TrashIcon} onClick={() => this.handleRemoveAttachment(index)} />\n </div>\n ))}\n </div>\n )}\n\n {!!this.errorMessage && <div class=\"error\">{this.errorMessage}</div>}\n\n <div class=\"buttons\">\n <verdocs-button label=\"Cancel\" variant=\"outline\" onClick={() => this.handleCancel()} />\n <verdocs-button label=\"Upload\" onClick={() => this.handleDone()} disabled={!!this.errorMessage || this.selectedFiles.length < 1} />\n </div>\n </div>\n </div>\n\n {this.confirmDelete && (\n <verdocs-ok-dialog\n heading=\"Delete Attachment?\"\n message=\"Are you sure you wish to delete this attachment? This action cannot be undone.\"\n showCancel={true}\n onExit={e => {\n // So we don't close the upload dialog\n e.preventDefault();\n e.stopPropagation();\n this.confirmDelete = false;\n }}\n onNext={e => this.handleDeleteAttachment(e)}\n />\n )}\n </Host>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var __awaiter=this&&this.__awaiter||function(e,t,r,n){function a(e){return e instanceof r?e:new r((function(t){t(e)}))}return new(r||(r=Promise))((function(r,i){function o(e){try{u(n.next(e))}catch(e){i(e)}}function c(e){try{u(n["throw"](e))}catch(e){i(e)}}function u(e){e.done?r(e.value):a(e.value).then(o,c)}u((n=n.apply(e,t||[])).next())}))};var __generator=this&&this.__generator||function(e,t){var r={label:0,sent:function(){if(i[0]&1)throw i[1];return i[1]},trys:[],ops:[]},n,a,i,o=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return o.next=c(0),o["throw"]=c(1),o["return"]=c(2),typeof Symbol==="function"&&(o[Symbol.iterator]=function(){return this}),o;function c(e){return function(t){return u([e,t])}}function u(c){if(n)throw new TypeError("Generator is already executing.");while(o&&(o=0,c[0]&&(r=0)),r)try{if(n=1,a&&(i=c[0]&2?a["return"]:c[0]?a["throw"]||((i=a["return"])&&i.call(a),0):a.next)&&!(i=i.call(a,c[1])).done)return i;if(a=0,i)c=[c[0]&2,i.value];switch(c[0]){case 0:case 1:i=c;break;case 4:r.label++;return{value:c[1],done:false};case 5:r.label++;a=c[1];c=[0];continue;case 7:c=r.ops.pop();r.trys.pop();continue;default:if(!(i=r.trys,i=i.length>0&&i[i.length-1])&&(c[0]===6||c[0]===2)){r=0;continue}if(c[0]===3&&(!i||c[1]>i[0]&&c[1]<i[3])){r.label=c[1];break}if(c[0]===6&&r.label<i[1]){r.label=i[1];i=c;break}if(i&&r.label<i[2]){r.label=i[2];r.ops.push(c);break}if(i[2])r.ops.pop();r.trys.pop();continue}c=t.call(e,r)}catch(e){c=[6,e];a=0}finally{n=i=0}if(c[0]&5)throw c[1];return{value:c[0]?c[1]:void 0,done:true}}};System.register(["./p-C7pDryJb.system.js","@verdocs/js-sdk","./p-CwIkMPyJ.system.js"],(function(e){"use strict";var t,r,n,a,i;return{setters:[function(e){t=e.d},function(e){r=e.getEnvelopesZip;n=e.downloadBlob;a=e.rescale},function(e){i=e.F}],execute:function(){var o=this;var c=e("k",(function(e){switch(e){case"textarea":return 150;case"textbox":return 150;case"timestamp":return 105;case"date":return 75;case"dropdown":return 85;case"attachment":case"payment":return 24;case"radio":case"checkbox":return 14;case"signature":case"initial":return 71}return 150}));var u=e("d",(function(e){switch(e){case"textarea":return 41;case"textbox":return 15;case"timestamp":return 15;case"date":return 15;case"dropdown":return 20;case"attachment":case"payment":return 24;case"radio":case"checkbox":return 14;case"signature":case"initial":return 36}return 50}));var s=e("j",(function(e,t,r,n){var i,o;var s=t.x,d=s===void 0?0:s,f=t.y,v=f===void 0?0:f,l=t.width,p=l===void 0?c(t.type):l,x=t.height,m=x===void 0?u(t.type):x,h=t.settings;var b=t.type==="signature"||t.type==="initial";var w=!b?p:(i=h===null||h===void 0?void 0:h.canvasWidth)!==null&&i!==void 0?i:p;var y=!b?m:(o=h===null||h===void 0?void 0:h.canvasHeight)!==null&&o!==void 0?o:m;e.style.width="".concat(w,"px");e.style.height="".concat(y,"px");e.style.position="absolute";e.style.left="".concat(a(r,d),"px");e.style.bottom="".concat(a(n,v),"px");e.style.transform="scale(".concat(r,", ").concat(n,")")}));var d=e("f",(function(e,t,r){var n=e.x,i=n===void 0?0:n,o=e.y,s=o===void 0?0:o,d=e.width,f=d===void 0?c(e.type):d,v=e.height,l=v===void 0?u(e.type):v;return{zIndex:"100",width:"".concat(f,"px"),height:"".concat(l,"px"),position:"absolute",left:"".concat(a(t,i),"px"),bottom:"".concat(a(r,s),"px"),transform:"scale(".concat(t,", ").concat(r,")")}}));var f=e("g",(function(e){return"verdocs-doc-fld-".concat(e.name)}));var v=e("u",(function(e){var t=f(e);var r=document.getElementById(t);if(r){r.field=e;r.roleindex=e;r.setAttribute("id",t);r.setAttribute("disabled",true);r.setAttribute("disabled",false)}}));var l=e("a",(function(e,t,r,n,a){if(a===void 0){a=1}var i,o;var c=n.disabled,u=c===void 0?false:c,d=n.editable,v=d===void 0?false:d,l=n.draggable,p=l===void 0?false:l,x=n.done,m=x===void 0?false:x;var h=document.getElementById(r.containerId+"-controls");if(!h){return}switch(t.type){case"radio":case"checkbox":case"attachment":case"date":case"dropdown":case"initial":case"payment":case"signature":case"timestamp":case"textarea":case"textbox":{var b=f(t);var w=document.getElementById(b);if(w){w.field=t;w.done=m;s(w,t,r.xScale,r.yScale);return w}var y=t.type;if(y==="textbox"){if(((i=t["setting"])===null||i===void 0?void 0:i.leading)>0||((o=t["settings"])===null||o===void 0?void 0:o.leading)>0){y="textarea"}}var g=document.createElement("verdocs-field-".concat(y));g.field=t;g.setAttribute("id",b);g.setAttribute("fieldname",t.name);g.setAttribute("source",e);g.setAttribute("sourceid","template_id"in t?t.template_id:t.envelope_id);if(u){g.setAttribute("tabindex",-1);g.setAttribute("disabled",true)}else{g.setAttribute("tabindex",a)}g.setAttribute("editable",v);g.setAttribute("draggable",p);g.setAttribute("done",m);s(g,t,r.xScale,r.yScale);h.appendChild(g);return g}default:console.log("[PREVIEW] Skipping unsupported field type",t);return null}}));var p=e("h",(function(e,t,r){var n=e.style.transform||"";var a="".concat(t,"(").concat(r,")");if(n.includes(t)){e.style.transform=n.replace(new RegExp("".concat(t,"\\(.+?\\)")),a)}else{e.style.transform=n+" "+a}}));var x=e("i",(function(e){e.style.transform=e.style.transform.split(")")[0]+")"}));var m=e("s",(function(e,a){return __awaiter(o,void 0,void 0,(function(){var o,c,u;return __generator(this,(function(s){switch(s.label){case 0:o=t.format(a.length===1?new Date(a[0].updated_at):new Date,i);c=a.length===1?"".concat(a[0].name," - ").concat(o,".zip"):"Verdocs-Envelopes-".concat(o);console.log("Downloading envelopes as ZIP",a,c);return[4,r(e,a.map((function(e){return e.id})))];case 1:u=s.sent();n(u.data,c);return[2]}}))}))}));var h=e("t",(function(e,t){var r=0;return function(){var n=this;var a=[];for(var i=0;i<arguments.length;i++){a[i]=arguments[i]}clearTimeout(r);r=setTimeout((function(){return e.apply(n,a)}),t)}}));var b=e("e",(function(e,t){if(t===void 0){t="16px Arial"}var r=document.createElement("canvas");var n=r.getContext("2d");n.font=t;return n.measureText(e).width}));var w=e("c",(function(e){var t=(e||"").trim();if(!t||t.startsWith("+")){return t}t=t.replace(/[^0-9]/g,"");t=t.replace(/^0/g,"");return"+1".concat(t)}));var y=e("r",(function(e,t,r,n){var i=document.getElementById(e.containerId+"-controls");if(!i){return}var o=document.createElement("verdocs-flag");o.variant=n.variant;o.label=n.label;o.showSkip=n.showSkip;if(n.id){o.setAttribute("id",n.id)}o.classList.add("verdocs-flag-instance");if(n.onSkip){o.addEventListener("skip",n.onSkip)}if(n.onClick){o.addEventListener("flagClick",n.onClick)}o.style.position="absolute";o.style.left="calc(100% - 14px)";var c=a(e.yScale,t);var u=a(e.yScale,r);var s=c+u;o.style.bottom="".concat(s,"px");i.appendChild(o);return o}));var g=e("b",(function(e){if(!e)return"";var t={signature:"Signature",initial:"Initials",date:"Date",textbox:"Text Field",checkbox:"Checkbox",radio:"Radio Button",dropdown:"Dropdown",attachment:"Attachment",payment:"Payment"};var r=t[e.type]||"Field";if(e.required){return"Required ".concat(r,"*")}return"Optional ".concat(r)}))}}}));
|
|
2
|
-
//# sourceMappingURL=p-nfw6V5pF.system.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"p-nfw6V5pF.system.js","sources":["src/utils/utils.ts"],"sourcesContent":["import {format} from 'date-fns';\nimport {downloadBlob, getEnvelopeFile, getEnvelopesZip, IEnvelope, IEnvelopeField, ITemplateField, rescale, TFieldType, VerdocsEndpoint} from '@verdocs/js-sdk';\nimport {FORMAT_DATE, IDocumentPageInfo} from './Types';\n\nexport const defaultWidth = (type: TFieldType) => {\n // checkbox was a legacy field type\n switch (type as any) {\n case 'textarea':\n return 150;\n case 'textbox':\n return 150;\n case 'timestamp':\n return 105;\n case 'date':\n return 75;\n case 'dropdown':\n return 85;\n case 'attachment':\n case 'payment':\n return 24;\n case 'radio':\n case 'checkbox':\n return 14;\n case 'signature':\n case 'initial':\n return 71;\n }\n\n return 150;\n};\n\nexport const defaultHeight = (type: TFieldType) => {\n switch (type as any) {\n case 'textarea':\n return 41;\n case 'textbox':\n return 15;\n case 'timestamp':\n return 15;\n case 'date':\n return 15;\n case 'dropdown':\n return 20;\n case 'attachment':\n case 'payment':\n return 24;\n case 'radio':\n case 'checkbox':\n return 14;\n case 'signature':\n case 'initial':\n return 36;\n }\n\n return 50;\n};\n\nexport const setControlStyles = (el: HTMLElement, field: ITemplateField | IEnvelopeField, xScale: number, yScale: number) => {\n let {x = 0, y = 0, width = defaultWidth(field.type), height = defaultHeight(field.type), settings} = field;\n const isCanvasField = field.type === 'signature' || field.type === 'initial';\n const canvasWidth = !isCanvasField ? width : (settings?.canvasWidth ?? width);\n const canvasHeight = !isCanvasField ? height : (settings?.canvasHeight ?? height);\n\n el.style.width = `${canvasWidth}px`;\n el.style.height = `${canvasHeight}px`;\n el.style.position = 'absolute';\n el.style.left = `${rescale(xScale, x)}px`;\n el.style.bottom = `${rescale(yScale, y)}px`;\n el.style.transform = `scale(${xScale}, ${yScale})`;\n};\n\nexport const getControlStyles = (field: ITemplateField | IEnvelopeField, xScale: number, yScale: number) => {\n let {x = 0, y = 0, width = defaultWidth(field.type), height = defaultHeight(field.type)} = field;\n\n return {\n zIndex: '100',\n width: `${width}px`,\n height: `${height}px`,\n position: 'absolute',\n left: `${rescale(xScale, x)}px`,\n bottom: `${rescale(yScale, y)}px`,\n transform: `scale(${xScale}, ${yScale})`,\n };\n};\n\nexport const getFieldId = (field: ITemplateField | IEnvelopeField) => {\n return `verdocs-doc-fld-${field.name}`;\n};\n\ninterface IFieldOptions {\n disabled?: boolean;\n editable?: boolean;\n draggable?: boolean;\n done?: boolean;\n}\n\nexport const updateDocumentFieldValue = (field: ITemplateField | IEnvelopeField) => {\n const id = getFieldId(field);\n const existingField = document.getElementById(id) as any;\n if (existingField) {\n existingField.field = field;\n existingField.roleindex = field;\n existingField.setAttribute('id', id); // We need this to trigger a re-render\n existingField.setAttribute('disabled', true); // We need this to trigger a re-render\n existingField.setAttribute('disabled', false); // We need this to trigger a re-render\n }\n};\n\nexport const renderDocumentField = (\n source: 'envelope' | 'template',\n field: ITemplateField | IEnvelopeField,\n docPage: IDocumentPageInfo,\n fieldOptions: IFieldOptions,\n tabIndex: number = 1,\n) => {\n const {disabled = false, editable = false, draggable = false, done = false} = fieldOptions;\n const controlsDiv = document.getElementById(docPage.containerId + '-controls');\n if (!controlsDiv) {\n // TODO: This gets emitted a lot by the builder naturally, when placing or updating fields, because Store.updateTemplate\n // triggers a re-render but we still have async code pending in contexts with references to the old/wrong controls DIV\n // IDs. It doesn't break anything because the re-render fixes it all up. But we do want to trap this for \"other\" situations.\n // console.log('[renderDocumentField] No controls DIV found', docPage.containerId + '-controls', docPage);\n return;\n }\n\n switch (field.type as any) {\n case 'radio':\n case 'checkbox':\n case 'attachment':\n case 'date':\n case 'dropdown':\n case 'initial':\n case 'payment':\n case 'signature':\n case 'timestamp':\n case 'textarea':\n case 'textbox': {\n const id = getFieldId(field);\n const existingField = document.getElementById(id) as any;\n if (existingField) {\n existingField.field = field;\n existingField.done = done;\n setControlStyles(existingField, field, docPage.xScale, docPage.yScale);\n return existingField;\n }\n\n let {type} = field;\n if (type === 'textbox') {\n if (field['setting']?.leading > 0 || field['settings']?.leading > 0) {\n type = 'textarea';\n }\n }\n\n const el: any = document.createElement(`verdocs-field-${type}`);\n el.field = field;\n el.setAttribute('id', id);\n el.setAttribute('fieldname', field.name);\n el.setAttribute('source', source);\n el.setAttribute('sourceid', 'template_id' in field ? field.template_id : field.envelope_id);\n\n if (disabled) {\n el.setAttribute('tabindex', -1);\n el.setAttribute('disabled', true);\n } else {\n el.setAttribute('tabindex', tabIndex);\n }\n\n el.setAttribute('editable', editable);\n el.setAttribute('draggable', draggable);\n el.setAttribute('done', done);\n\n setControlStyles(el, field, docPage.xScale, docPage.yScale);\n controlsDiv.appendChild(el);\n\n return el;\n }\n\n default:\n console.log('[PREVIEW] Skipping unsupported field type', field);\n return null;\n }\n};\n\n/**\n * Helper function to safely set/update components in a CSS transform attribute. Transform is normally set as a string of\n * `operation1(param) operation2(param) ...` components, which makes updating them a bit of a pain. This will remove the\n * specified component if it's already set and replace it with the new value, without touching the other components that\n * may already be set. Note that this operation moves the component to the end of the transform chain so it's not meant\n * to be used for order-sensitive components e.g. translate-then-rotate.\n */\nexport const updateCssTransform = (el: HTMLElement, key: string, value: string) => {\n const currentTransform = el.style.transform || '';\n\n const newValue = `${key}(${value})`;\n if (currentTransform.includes(key)) {\n el.style.transform = currentTransform.replace(new RegExp(`${key}\\\\(.+?\\\\)`), newValue);\n } else {\n el.style.transform = currentTransform + ' ' + newValue;\n }\n};\n\nexport const removeCssTransform = (el: HTMLElement) => {\n // const currentTransform = el.style.transform || '';\n el.style.transform = el.style.transform.split(')')[0] + ')';\n // TODO: This is not working\n // el.style.transform = currentTransform.replace(new RegExp(`\\(${key}\\\\(.+?\\\\)\\)`), '');\n};\n\n// TODO: Shift to getDownloadLilnk\nexport const saveAttachment = async (endpoint: VerdocsEndpoint, envelope: IEnvelope, documentId: string) => {\n // e.g. \"Colorado-Motor-Vehicle-Bill-of-Sale.pdf\"\n const date = format(new Date(envelope.updated_at), FORMAT_DATE);\n const fileName = `${envelope.name} - ${date}.pdf`;\n const data = await getEnvelopeFile(endpoint, documentId);\n downloadBlob(data, fileName);\n};\n\nexport const saveEnvelopesAsZip = async (endpoint: VerdocsEndpoint, envelopes: IEnvelope[]) => {\n const formattedDate = format(envelopes.length === 1 ? new Date(envelopes[0].updated_at) : new Date(), FORMAT_DATE);\n const zipFileName = envelopes.length === 1 ? `${envelopes[0].name} - ${formattedDate}.zip` : `Verdocs-Envelopes-${formattedDate}`;\n console.log('Downloading envelopes as ZIP', envelopes, zipFileName);\n const result = await getEnvelopesZip(\n endpoint,\n envelopes.map(e => e.id),\n );\n downloadBlob(result.data, zipFileName);\n};\n\n/**\n * Throttle a given function by a delay value. Useful for things like resizeObserver.\n */\nexport const throttle = (f: Function, delay: number) => {\n let timer: any = 0;\n return function (...args) {\n clearTimeout(timer);\n timer = setTimeout(() => f.apply(this, args), delay);\n };\n};\n\n/**\n * Compute the rendered width of a given text string, using a given font.\n */\nexport const renderedTextWidth = (text: string, font: string = '16px Arial') => {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n ctx.font = font;\n return ctx.measureText(text).width;\n};\n\n// \"(212) 555-1212\" => +12125551212\n// \"+46766861004\" => \"+46766861004\"\n// \"212-555-1212\" => +12125551212\n// \"212.555.1212\" => +12125551212\n// \"212 555 1212\" => +12125551212\n// @see https://46elks.com/kb/e164\nexport const convertToE164 = (input: string) => {\n let temp = (input || '').trim();\n // If we are already prefixed, assume the user did it deliberately and attempt to use what they entered. We also short-circuit blanks.\n if (!temp || temp.startsWith('+')) {\n return temp;\n }\n\n // Remove any spaces, parenthesis or other punctuation.\n temp = temp.replace(/[^0-9]/g, '');\n\n // If the number begins with a zero, remove the leading zero. Do not combine this with the previous step because it needs to be removed\n // whether it's the actual first character e.g. `0(5)` or just the first digit e.g. `(05`.\n temp = temp.replace(/^0/g, '');\n\n // Prepend the country code and +. We're assuming US in this case given the target demographic. Users in other countries would/should be\n // already entering a prefix so they'd shortcut out of this routine via the + prefix check.\n return `+1${temp}`;\n};\n\nexport interface IFlagOptions {\n variant: 'fill' | 'next';\n label: string;\n showSkip?: boolean;\n onSkip?: () => void;\n onClick?: () => void;\n id?: string;\n}\n\nexport const renderDocumentFlag = (\n docPage: IDocumentPageInfo,\n y: number, // Bottom position from field\n height: number, // Field height\n options: IFlagOptions,\n) => {\n const controlsDiv = document.getElementById(docPage.containerId + '-controls');\n if (!controlsDiv) {\n return;\n }\n\n const el: any = document.createElement('verdocs-flag');\n el.variant = options.variant;\n el.label = options.label;\n el.showSkip = options.showSkip;\n if (options.id) {\n el.setAttribute('id', options.id);\n }\n el.classList.add('verdocs-flag-instance'); // Marker class for easy removal\n\n if (options.onSkip) {\n el.addEventListener('skip', options.onSkip);\n }\n if (options.onClick) {\n el.addEventListener('flagClick', options.onClick);\n }\n\n // Position the flag to stick out of the right edge of the page\n el.style.position = 'absolute';\n\n // The flag has a left-pointing arrow that is 14px wide (15% of 97px ~= 14.5px).\n // We want the \"body\" of the rectangle (starting after the arrow) to align with the\n // right edge of the page.\n el.style.left = 'calc(100% - 14px)';\n\n /*\n * Positioning Logic:\n * Field Y is distance from bottom.\n * Fields have `transform-origin: bottom left`.\n * Visual Bottom = y * scale.\n * Visual Top = (y * scale) + (height * scale).\n * Visual Center = (y * scale) + (height * scale) / 2.\n */\n // const flagHeight = 24; // Matches CSS\n const scaledY = rescale(docPage.yScale, y);\n const scaledHeight = rescale(docPage.yScale, height);\n\n // Align Flag Bottom with Field Top\n const bottom = scaledY + scaledHeight;\n\n el.style.bottom = `${bottom}px`;\n\n controlsDiv.appendChild(el);\n return el;\n};\n\n/**\n * Helper to generate a human-readable label for a field.\n */\nexport const getFieldLabel = (field: IEnvelopeField | ITemplateField) => {\n if (!field) return '';\n const typeMap: Record<string, string> = {\n signature: 'Signature',\n initial: 'Initials',\n date: 'Date',\n textbox: 'Text Field',\n checkbox: 'Checkbox',\n radio: 'Radio Button',\n dropdown: 'Dropdown',\n attachment: 'Attachment',\n payment: 'Payment',\n };\n\n const typeName = typeMap[field.type] || 'Field';\n if (field.required) {\n return `Required ${typeName}*`;\n }\n return `Optional ${typeName}`;\n};\n"],"names":["format"],"mappings":"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"}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|