@verdocs/web-sdk 1.9.34 → 1.9.35
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/Colors-e809dcc9.js +0 -2
- package/dist/cjs/{Envelopes-019e8a9f.js → Envelopes-e5649eb6.js} +1 -3
- package/dist/cjs/Files-4bdc0c0f.js +0 -2
- package/dist/cjs/Primitives-be5088cb.js +0 -2
- package/dist/cjs/Templates-358eaee4.js +0 -2
- package/dist/cjs/Templates-8ef16e3d.js +0 -2
- package/dist/cjs/Token-576f0e8a.js +0 -2
- package/dist/cjs/Types-da57ce69.js +0 -2
- package/dist/cjs/Validators-16e6d7d1.js +0 -2
- package/dist/cjs/VerdocsEndpoint-257ebdb3.js +0 -2
- package/dist/cjs/errors-0396da3d.js +0 -2
- package/dist/cjs/index-1329d89c.js +0 -2
- package/dist/cjs/index-6528b430.js +0 -2
- package/dist/cjs/index-eb130f52.js +0 -2
- package/dist/cjs/index.cjs.js +0 -2
- package/dist/cjs/loader.cjs.js +0 -2
- package/dist/cjs/popper-11d5f714.js +0 -2
- package/dist/cjs/templateStore-eed1f161.js +0 -2
- package/dist/cjs/{utils-787b2115.js → utils-23a9034a.js} +2 -4
- package/dist/cjs/verdocs-auth.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-build.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-button-panel_3.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-button.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-checkbox.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-contact-picker.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-document-page_2.cjs.entry.js +1 -3
- package/dist/cjs/verdocs-dropdown.cjs.entry.js +2 -6
- package/dist/cjs/verdocs-field-attachment.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-field-checkbox.cjs.entry.js +1 -3
- package/dist/cjs/verdocs-field-date.cjs.entry.js +1 -3
- package/dist/cjs/verdocs-field-dropdown.cjs.entry.js +1 -3
- package/dist/cjs/verdocs-field-initial.cjs.entry.js +1 -3
- package/dist/cjs/verdocs-field-payment.cjs.entry.js +1 -3
- package/dist/cjs/verdocs-field-radio-button.cjs.entry.js +1 -3
- package/dist/cjs/verdocs-field-signature_3.cjs.entry.js +1 -3
- package/dist/cjs/verdocs-field-textarea.cjs.entry.js +1 -3
- package/dist/cjs/verdocs-field-textbox.cjs.entry.js +1 -3
- package/dist/cjs/verdocs-field-timestamp.cjs.entry.js +1 -3
- package/dist/cjs/verdocs-help-icon_2.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-initial-dialog.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-kba-dialog.cjs.entry.js +2 -9
- package/dist/cjs/verdocs-ok-dialog.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-organization-card.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-preview.cjs.entry.js +1 -3
- package/dist/cjs/verdocs-quick-functions_3.cjs.entry.js +5 -18
- package/dist/cjs/verdocs-radio-button.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-search-tabs.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-search.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-send.cjs.entry.js +1 -4
- package/dist/cjs/verdocs-sign.cjs.entry.js +2 -4
- package/dist/cjs/verdocs-status-indicator.cjs.entry.js +20 -108
- package/dist/cjs/verdocs-template-card.cjs.entry.js +3 -19
- package/dist/cjs/verdocs-template-create_4.cjs.entry.js +1 -3
- package/dist/cjs/verdocs-template-tags.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-toggle-button.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-toggle.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-upload-dialog.cjs.entry.js +0 -2
- package/dist/cjs/verdocs-view.cjs.entry.js +2 -4
- package/dist/cjs/verdocs-web-sdk.cjs.js +0 -2
- package/dist/collection/components/controls/verdocs-button/verdocs-button.js +0 -1
- package/dist/collection/components/controls/verdocs-button/verdocs-button.stories.js +0 -1
- package/dist/collection/components/controls/verdocs-button-panel/verdocs-button-panel.js +0 -1
- package/dist/collection/components/controls/verdocs-button-panel/verdocs-button-panel.stories.js +0 -1
- package/dist/collection/components/controls/verdocs-checkbox/verdocs-checkbox.js +0 -1
- package/dist/collection/components/controls/verdocs-checkbox/verdocs-checkbox.stories.js +0 -1
- package/dist/collection/components/controls/verdocs-dropdown/verdocs-dropdown.js +2 -3
- package/dist/collection/components/controls/verdocs-dropdown/verdocs-dropdown.stories.js +0 -1
- package/dist/collection/components/controls/verdocs-help-icon/verdocs-help-icon.js +0 -1
- package/dist/collection/components/controls/verdocs-help-icon/verdocs-help-icon.stories.js +0 -1
- package/dist/collection/components/controls/verdocs-loader/verdocs-loader.js +0 -1
- package/dist/collection/components/controls/verdocs-loader/verdocs-loader.stories.js +0 -1
- package/dist/collection/components/controls/verdocs-organization-card/verdocs-organization-card.js +0 -1
- package/dist/collection/components/controls/verdocs-organization-card/verdocs-organization-card.stories.js +0 -1
- package/dist/collection/components/controls/verdocs-radio-button/verdocs-radio-button.js +0 -1
- package/dist/collection/components/controls/verdocs-radio-button/verdocs-radio-button.stories.js +0 -1
- package/dist/collection/components/controls/verdocs-select-input/verdocs-select-input.js +0 -1
- package/dist/collection/components/controls/verdocs-select-input/verdocs-select-input.stories.js +0 -1
- package/dist/collection/components/controls/verdocs-status-indicator/recipient-flow.js +0 -1
- package/dist/collection/components/controls/verdocs-status-indicator/verdocs-status-indicator.js +20 -21
- package/dist/collection/components/controls/verdocs-status-indicator/verdocs-status-indicator.stories.js +0 -1
- package/dist/collection/components/controls/verdocs-template-card/verdocs-template-card.js +4 -5
- package/dist/collection/components/controls/verdocs-template-card/verdocs-template-card.stories.js +0 -1
- package/dist/collection/components/controls/verdocs-template-tags/verdocs-template-tags.js +0 -1
- package/dist/collection/components/controls/verdocs-template-tags/verdocs-template-tags.stories.js +0 -1
- package/dist/collection/components/controls/verdocs-text-input/test/verdocs-text-input.js +0 -1
- package/dist/collection/components/controls/verdocs-text-input/verdocs-text-input.js +0 -1
- package/dist/collection/components/controls/verdocs-text-input/verdocs-text-input.stories.js +0 -1
- package/dist/collection/components/controls/verdocs-toggle/verdocs-toggle.js +0 -1
- package/dist/collection/components/controls/verdocs-toggle/verdocs-toggle.stories.js +0 -1
- package/dist/collection/components/controls/verdocs-toggle-button/verdocs-toggle-button.js +0 -1
- package/dist/collection/components/controls/verdocs-toggle-button/verdocs-toggle-button.stories.js +0 -1
- package/dist/collection/components/controls/verdocs-toolbar-icon/verdocs-toolbar-icon.js +0 -1
- package/dist/collection/components/controls/verdocs-toolbar-icon/verdocs-toolbar-icon.stories.js +0 -1
- package/dist/collection/components/dialogs/verdocs-initial-dialog/verdocs-initial-dialog.js +0 -1
- package/dist/collection/components/dialogs/verdocs-initial-dialog/verdocs-initial-dialog.stories.js +0 -1
- package/dist/collection/components/dialogs/verdocs-kba-dialog/verdocs-kba-dialog.js +2 -3
- package/dist/collection/components/dialogs/verdocs-kba-dialog/verdocs-kba-dialog.stories.js +0 -1
- package/dist/collection/components/dialogs/verdocs-ok-dialog/verdocs-ok-dialog.js +0 -1
- package/dist/collection/components/dialogs/verdocs-ok-dialog/verdocs-ok-dialog.stories.js +0 -1
- package/dist/collection/components/dialogs/verdocs-signature-dialog/verdocs-signature-dialog.js +0 -1
- package/dist/collection/components/dialogs/verdocs-signature-dialog/verdocs-signature-dialog.stories.js +0 -1
- package/dist/collection/components/dialogs/verdocs-template-sender-dialog/verdocs-template-sender-dialog.js +0 -1
- package/dist/collection/components/dialogs/verdocs-template-sender-dialog/verdocs-template-sender-dialog.stories.js +0 -1
- package/dist/collection/components/dialogs/verdocs-upload-dialog/verdocs-upload-dialog.js +0 -1
- package/dist/collection/components/dialogs/verdocs-upload-dialog/verdocs-upload-dialog.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-contact-picker/verdocs-contact-picker.js +0 -1
- package/dist/collection/components/elements/verdocs-contact-picker/verdocs-contact-picker.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-document-page/verdocs-document-page.js +0 -1
- package/dist/collection/components/elements/verdocs-field-attachment/verdocs-field-attachment.js +0 -1
- package/dist/collection/components/elements/verdocs-field-attachment/verdocs-field-attachment.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-field-checkbox/verdocs-field-checkbox.js +0 -1
- package/dist/collection/components/elements/verdocs-field-checkbox/verdocs-field-checkbox.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-field-date/verdocs-field-date.js +0 -1
- package/dist/collection/components/elements/verdocs-field-date/verdocs-field-date.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-field-dropdown/verdocs-field-dropdown.js +0 -1
- package/dist/collection/components/elements/verdocs-field-dropdown/verdocs-field-dropdown.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-field-initial/verdocs-field-initial.js +0 -1
- package/dist/collection/components/elements/verdocs-field-initial/verdocs-field-initial.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-field-payment/verdocs-field-payment.js +0 -1
- package/dist/collection/components/elements/verdocs-field-payment/verdocs-field-payment.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-field-radio-button-group/verdocs-field-radio-button.js +0 -1
- package/dist/collection/components/elements/verdocs-field-radio-button-group/verdocs-field-radio-button.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-field-signature/verdocs-field-signature.js +0 -1
- package/dist/collection/components/elements/verdocs-field-signature/verdocs-field-signature.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-field-textarea/verdocs-field-textarea.js +0 -1
- package/dist/collection/components/elements/verdocs-field-textarea/verdocs-field-textarea.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-field-textbox/verdocs-field-textbox.js +0 -1
- package/dist/collection/components/elements/verdocs-field-textbox/verdocs-field-textbox.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-field-timestamp/verdocs-field-timestamp.js +0 -1
- package/dist/collection/components/elements/verdocs-field-timestamp/verdocs-field-timestamp.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-quick-functions/verdocs-quick-functions.js +2 -3
- package/dist/collection/components/elements/verdocs-quick-functions/verdocs-quick-functions.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-search-activity/verdocs-search-activity.js +1 -2
- package/dist/collection/components/elements/verdocs-search-activity/verdocs-search-activity.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-search-box/verdocs-search-box.js +2 -3
- package/dist/collection/components/elements/verdocs-search-box/verdocs-search-box.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-search-tabs/verdocs-search-tabs.js +0 -1
- package/dist/collection/components/elements/verdocs-search-tabs/verdocs-search-tabs.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-template-create/verdocs-template-create.js +0 -1
- package/dist/collection/components/elements/verdocs-template-create/verdocs-template-create.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-template-fields/verdocs-template-fields.js +0 -1
- package/dist/collection/components/elements/verdocs-template-fields/verdocs-template-fields.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-template-properties/verdocs-template-properties.js +0 -1
- package/dist/collection/components/elements/verdocs-template-properties/verdocs-template-properties.stories.js +0 -1
- package/dist/collection/components/elements/verdocs-template-recipients/verdocs-template-recipients.js +0 -1
- package/dist/collection/components/elements/verdocs-template-recipients/verdocs-template-recipients.stories.js +0 -1
- package/dist/collection/components/embeds/verdocs-auth/verdocs-auth.js +0 -1
- package/dist/collection/components/embeds/verdocs-auth/verdocs-auth.stories.js +0 -1
- package/dist/collection/components/embeds/verdocs-build/utils.js +0 -1
- package/dist/collection/components/embeds/verdocs-build/verdocs-build.js +0 -1
- package/dist/collection/components/embeds/verdocs-build/verdocs-build.stories.js +0 -1
- package/dist/collection/components/embeds/verdocs-preview/verdocs-preview.js +0 -1
- package/dist/collection/components/embeds/verdocs-preview/verdocs-preview.stories.js +0 -1
- package/dist/collection/components/embeds/verdocs-search/verdocs-search.js +0 -1
- package/dist/collection/components/embeds/verdocs-search/verdocs-search.stories.js +0 -1
- package/dist/collection/components/embeds/verdocs-send/role-flow.js +0 -1
- package/dist/collection/components/embeds/verdocs-send/verdocs-send.js +0 -2
- package/dist/collection/components/embeds/verdocs-send/verdocs-send.stories.js +0 -1
- package/dist/collection/components/embeds/verdocs-sign/utils.js +0 -1
- package/dist/collection/components/embeds/verdocs-sign/verdocs-sign.js +0 -1
- package/dist/collection/components/embeds/verdocs-sign/verdocs-sign.stories.js +6 -5
- package/dist/collection/components/embeds/verdocs-view/verdocs-view.js +0 -1
- package/dist/collection/components/embeds/verdocs-view/verdocs-view.stories.js +0 -1
- package/dist/collection/index.js +0 -1
- package/dist/collection/utils/Envelopes.js +0 -1
- package/dist/collection/utils/Templates.js +0 -1
- package/dist/collection/utils/Types.js +0 -1
- package/dist/collection/utils/envelopeStore.js +0 -1
- package/dist/collection/utils/errors.js +0 -1
- package/dist/collection/utils/templateStore.js +0 -1
- package/dist/collection/utils/utils.js +2 -3
- package/dist/components/Colors.js +0 -2
- package/dist/components/Files.js +0 -2
- package/dist/components/Primitives.js +0 -2
- package/dist/components/Templates.js +0 -2
- package/dist/components/Templates2.js +0 -2
- package/dist/components/Token.js +0 -2
- package/dist/components/Types.js +0 -2
- package/dist/components/Validators.js +0 -2
- package/dist/components/VerdocsEndpoint.js +0 -2
- package/dist/components/errors.js +0 -2
- package/dist/components/index.js +0 -2
- package/dist/components/index2.js +0 -2
- package/dist/components/index3.js +0 -2
- package/dist/components/interact.min.js +0 -2
- package/dist/components/popper.js +0 -2
- package/dist/components/templateStore.js +0 -2
- package/dist/components/utils.js +2 -4
- package/dist/components/verdocs-auth.js +0 -2
- package/dist/components/verdocs-build.js +0 -2
- package/dist/components/verdocs-button-panel.js +0 -2
- package/dist/components/verdocs-button-panel2.js +0 -2
- package/dist/components/verdocs-button.js +0 -2
- package/dist/components/verdocs-button2.js +0 -2
- package/dist/components/verdocs-checkbox.js +0 -2
- package/dist/components/verdocs-checkbox2.js +0 -2
- package/dist/components/verdocs-contact-picker.js +0 -2
- package/dist/components/verdocs-contact-picker2.js +0 -2
- package/dist/components/verdocs-document-page.js +0 -2
- package/dist/components/verdocs-document-page2.js +0 -2
- package/dist/components/verdocs-dropdown.js +0 -2
- package/dist/components/verdocs-dropdown2.js +2 -6
- package/dist/components/verdocs-field-attachment.js +0 -2
- package/dist/components/verdocs-field-checkbox.js +0 -2
- package/dist/components/verdocs-field-date.js +0 -2
- package/dist/components/verdocs-field-dropdown.js +0 -2
- package/dist/components/verdocs-field-initial.js +0 -2
- package/dist/components/verdocs-field-payment.js +0 -2
- package/dist/components/verdocs-field-radio-button.js +0 -2
- package/dist/components/verdocs-field-signature.js +0 -2
- package/dist/components/verdocs-field-signature2.js +0 -2
- package/dist/components/verdocs-field-textarea.js +0 -2
- package/dist/components/verdocs-field-textbox.js +0 -2
- package/dist/components/verdocs-field-timestamp.js +0 -2
- package/dist/components/verdocs-help-icon.js +0 -2
- package/dist/components/verdocs-help-icon2.js +0 -2
- package/dist/components/verdocs-initial-dialog.js +0 -2
- package/dist/components/verdocs-initial-dialog2.js +0 -2
- package/dist/components/verdocs-kba-dialog.js +2 -9
- package/dist/components/verdocs-loader.js +0 -2
- package/dist/components/verdocs-loader2.js +0 -2
- package/dist/components/verdocs-ok-dialog.js +0 -2
- package/dist/components/verdocs-ok-dialog2.js +0 -2
- package/dist/components/verdocs-organization-card.js +0 -2
- package/dist/components/verdocs-preview.js +0 -2
- package/dist/components/verdocs-quick-functions.js +0 -2
- package/dist/components/verdocs-quick-functions2.js +2 -6
- package/dist/components/verdocs-radio-button.js +0 -2
- package/dist/components/verdocs-radio-button2.js +0 -2
- package/dist/components/verdocs-search-activity.js +0 -2
- package/dist/components/verdocs-search-activity2.js +1 -4
- package/dist/components/verdocs-search-box.js +0 -2
- package/dist/components/verdocs-search-box2.js +2 -12
- package/dist/components/verdocs-search-tabs.js +0 -2
- package/dist/components/verdocs-search.js +0 -2
- package/dist/components/verdocs-select-input.js +0 -2
- package/dist/components/verdocs-select-input2.js +0 -2
- package/dist/components/verdocs-send.js +0 -3
- package/dist/components/verdocs-sign.js +0 -2
- package/dist/components/verdocs-signature-dialog.js +0 -2
- package/dist/components/verdocs-signature-dialog2.js +0 -2
- package/dist/components/verdocs-status-indicator.js +20 -108
- package/dist/components/verdocs-template-card.js +3 -19
- package/dist/components/verdocs-template-create.js +0 -2
- package/dist/components/verdocs-template-create2.js +0 -2
- package/dist/components/verdocs-template-fields.js +0 -2
- package/dist/components/verdocs-template-fields2.js +0 -2
- package/dist/components/verdocs-template-properties.js +0 -2
- package/dist/components/verdocs-template-properties2.js +0 -2
- package/dist/components/verdocs-template-recipients.js +0 -2
- package/dist/components/verdocs-template-recipients2.js +0 -2
- package/dist/components/verdocs-template-sender-dialog.js +0 -2
- package/dist/components/verdocs-template-sender-dialog2.js +0 -2
- package/dist/components/verdocs-template-tags.js +0 -2
- package/dist/components/verdocs-text-input.js +0 -2
- package/dist/components/verdocs-text-input2.js +0 -2
- package/dist/components/verdocs-toggle-button.js +0 -2
- package/dist/components/verdocs-toggle-button2.js +0 -2
- package/dist/components/verdocs-toggle.js +0 -2
- package/dist/components/verdocs-toolbar-icon.js +0 -2
- package/dist/components/verdocs-toolbar-icon2.js +0 -2
- package/dist/components/verdocs-upload-dialog.js +0 -2
- package/dist/components/verdocs-upload-dialog2.js +0 -2
- package/dist/components/verdocs-view.js +0 -2
- package/dist/components/verdocs-view2.js +0 -2
- package/dist/docs.json +1 -1
- package/dist/esm/Colors-1b298092.js +0 -2
- package/dist/esm/{Envelopes-c2545a20.js → Envelopes-25b2110e.js} +1 -3
- package/dist/esm/Files-70a192df.js +0 -2
- package/dist/esm/Primitives-054bc6e5.js +0 -2
- package/dist/esm/Templates-0638b1e4.js +0 -2
- package/dist/esm/Templates-ad0e1ebe.js +0 -2
- package/dist/esm/Token-54690789.js +0 -2
- package/dist/esm/Types-ab9f6af8.js +0 -2
- package/dist/esm/Validators-f110bae2.js +0 -2
- package/dist/esm/VerdocsEndpoint-28ba21cc.js +0 -2
- package/dist/esm/errors-9b5498c8.js +0 -2
- package/dist/esm/index-d264c496.js +0 -2
- package/dist/esm/index-f78d163d.js +0 -2
- package/dist/esm/index-fd7b8a34.js +0 -2
- package/dist/esm/index.js +0 -2
- package/dist/esm/loader.js +0 -2
- package/dist/esm/popper-f860750c.js +0 -2
- package/dist/esm/templateStore-7b50460b.js +0 -2
- package/dist/esm/{utils-6e8bd73f.js → utils-4053ca0e.js} +2 -4
- package/dist/esm/verdocs-auth.entry.js +0 -2
- package/dist/esm/verdocs-build.entry.js +0 -2
- package/dist/esm/verdocs-button-panel_3.entry.js +0 -2
- package/dist/esm/verdocs-button.entry.js +0 -2
- package/dist/esm/verdocs-checkbox.entry.js +0 -2
- package/dist/esm/verdocs-contact-picker.entry.js +0 -2
- package/dist/esm/verdocs-document-page_2.entry.js +1 -3
- package/dist/esm/verdocs-dropdown.entry.js +2 -6
- package/dist/esm/verdocs-field-attachment.entry.js +0 -2
- package/dist/esm/verdocs-field-checkbox.entry.js +1 -3
- package/dist/esm/verdocs-field-date.entry.js +1 -3
- package/dist/esm/verdocs-field-dropdown.entry.js +1 -3
- package/dist/esm/verdocs-field-initial.entry.js +1 -3
- package/dist/esm/verdocs-field-payment.entry.js +1 -3
- package/dist/esm/verdocs-field-radio-button.entry.js +1 -3
- package/dist/esm/verdocs-field-signature_3.entry.js +1 -3
- package/dist/esm/verdocs-field-textarea.entry.js +1 -3
- package/dist/esm/verdocs-field-textbox.entry.js +1 -3
- package/dist/esm/verdocs-field-timestamp.entry.js +1 -3
- package/dist/esm/verdocs-help-icon_2.entry.js +0 -2
- package/dist/esm/verdocs-initial-dialog.entry.js +0 -2
- package/dist/esm/verdocs-kba-dialog.entry.js +2 -9
- package/dist/esm/verdocs-ok-dialog.entry.js +0 -2
- package/dist/esm/verdocs-organization-card.entry.js +0 -2
- package/dist/esm/verdocs-preview.entry.js +1 -3
- package/dist/esm/verdocs-quick-functions_3.entry.js +5 -18
- package/dist/esm/verdocs-radio-button.entry.js +0 -2
- package/dist/esm/verdocs-search-tabs.entry.js +0 -2
- package/dist/esm/verdocs-search.entry.js +0 -2
- package/dist/esm/verdocs-send.entry.js +1 -4
- package/dist/esm/verdocs-sign.entry.js +2 -4
- package/dist/esm/verdocs-status-indicator.entry.js +20 -108
- package/dist/esm/verdocs-template-card.entry.js +3 -19
- package/dist/esm/verdocs-template-create_4.entry.js +1 -3
- package/dist/esm/verdocs-template-tags.entry.js +0 -2
- package/dist/esm/verdocs-toggle-button.entry.js +0 -2
- package/dist/esm/verdocs-toggle.entry.js +0 -2
- package/dist/esm/verdocs-upload-dialog.entry.js +0 -2
- package/dist/esm/verdocs-view.entry.js +2 -4
- package/dist/esm/verdocs-web-sdk.js +0 -2
- package/dist/esm-es5/Colors-1b298092.js +1 -2
- package/dist/esm-es5/{Envelopes-c2545a20.js → Envelopes-25b2110e.js} +1 -2
- package/dist/esm-es5/Files-70a192df.js +1 -2
- package/dist/esm-es5/Primitives-054bc6e5.js +1 -2
- package/dist/esm-es5/Templates-0638b1e4.js +1 -2
- package/dist/esm-es5/Templates-ad0e1ebe.js +1 -2
- package/dist/esm-es5/Token-54690789.js +1 -2
- package/dist/esm-es5/Types-ab9f6af8.js +1 -2
- package/dist/esm-es5/Validators-f110bae2.js +1 -2
- package/dist/esm-es5/VerdocsEndpoint-28ba21cc.js +1 -2
- package/dist/esm-es5/errors-9b5498c8.js +1 -2
- package/dist/esm-es5/index-d264c496.js +1 -2
- package/dist/esm-es5/index-f78d163d.js +1 -2
- package/dist/esm-es5/index-fd7b8a34.js +1 -2
- package/dist/esm-es5/index.js +0 -2
- package/dist/esm-es5/loader.js +1 -2
- package/dist/esm-es5/popper-f860750c.js +1 -2
- package/dist/esm-es5/templateStore-7b50460b.js +1 -2
- package/dist/esm-es5/{utils-6e8bd73f.js → utils-4053ca0e.js} +1 -2
- package/dist/esm-es5/verdocs-auth.entry.js +1 -2
- package/dist/esm-es5/verdocs-build.entry.js +1 -2
- package/dist/esm-es5/verdocs-button-panel_3.entry.js +1 -2
- package/dist/esm-es5/verdocs-button.entry.js +1 -2
- package/dist/esm-es5/verdocs-checkbox.entry.js +1 -2
- package/dist/esm-es5/verdocs-contact-picker.entry.js +1 -2
- package/dist/esm-es5/verdocs-document-page_2.entry.js +1 -2
- package/dist/esm-es5/verdocs-dropdown.entry.js +1 -2
- package/dist/esm-es5/verdocs-field-attachment.entry.js +1 -2
- package/dist/esm-es5/verdocs-field-checkbox.entry.js +1 -2
- package/dist/esm-es5/verdocs-field-date.entry.js +1 -2
- package/dist/esm-es5/verdocs-field-dropdown.entry.js +1 -2
- package/dist/esm-es5/verdocs-field-initial.entry.js +1 -2
- package/dist/esm-es5/verdocs-field-payment.entry.js +1 -2
- package/dist/esm-es5/verdocs-field-radio-button.entry.js +1 -2
- package/dist/esm-es5/verdocs-field-signature_3.entry.js +1 -2
- package/dist/esm-es5/verdocs-field-textarea.entry.js +1 -2
- package/dist/esm-es5/verdocs-field-textbox.entry.js +1 -2
- package/dist/esm-es5/verdocs-field-timestamp.entry.js +1 -2
- package/dist/esm-es5/verdocs-help-icon_2.entry.js +1 -2
- package/dist/esm-es5/verdocs-initial-dialog.entry.js +1 -2
- package/dist/esm-es5/verdocs-kba-dialog.entry.js +1 -2
- package/dist/esm-es5/verdocs-ok-dialog.entry.js +1 -2
- package/dist/esm-es5/verdocs-organization-card.entry.js +1 -2
- package/dist/esm-es5/verdocs-preview.entry.js +1 -2
- package/dist/esm-es5/verdocs-quick-functions_3.entry.js +1 -2
- package/dist/esm-es5/verdocs-radio-button.entry.js +1 -2
- package/dist/esm-es5/verdocs-search-tabs.entry.js +1 -2
- package/dist/esm-es5/verdocs-search.entry.js +1 -2
- package/dist/esm-es5/verdocs-send.entry.js +1 -2
- package/dist/esm-es5/verdocs-sign.entry.js +1 -2
- package/dist/esm-es5/verdocs-status-indicator.entry.js +1 -2
- package/dist/esm-es5/verdocs-template-card.entry.js +1 -2
- package/dist/esm-es5/verdocs-template-create_4.entry.js +1 -2
- package/dist/esm-es5/verdocs-template-tags.entry.js +1 -2
- package/dist/esm-es5/verdocs-toggle-button.entry.js +1 -2
- package/dist/esm-es5/verdocs-toggle.entry.js +1 -2
- package/dist/esm-es5/verdocs-upload-dialog.entry.js +1 -2
- package/dist/esm-es5/verdocs-view.entry.js +1 -2
- package/dist/esm-es5/verdocs-web-sdk.js +1 -2
- package/dist/types/components/controls/verdocs-status-indicator/verdocs-status-indicator.d.ts +1 -1
- package/dist/verdocs-web-sdk/index.esm.js +0 -2
- package/dist/verdocs-web-sdk/p-05eb4fed.system.js +1 -2
- package/dist/verdocs-web-sdk/p-0a33398a.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-0f6da8c7.system.js +1 -2
- package/dist/verdocs-web-sdk/p-11ab1bd0.js +1 -2
- package/dist/verdocs-web-sdk/p-123572b9.entry.js +1 -0
- package/dist/verdocs-web-sdk/{p-c0cc2b8e.system.entry.js → p-1299cc92.system.entry.js} +1 -2
- package/dist/verdocs-web-sdk/p-14c69e28.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/p-150a172e.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/p-187b20b7.system.js +1 -2
- package/dist/verdocs-web-sdk/p-1bca9534.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-1d20d34e.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-21603661.js +1 -2
- package/dist/verdocs-web-sdk/{p-5c895ce6.system.entry.js → p-21f25ae1.system.entry.js} +1 -2
- package/dist/verdocs-web-sdk/p-2559db77.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-27707de4.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/p-2783520a.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-2883bb11.entry.js +1 -0
- package/dist/verdocs-web-sdk/{p-3e33cd27.system.entry.js → p-2b6e0363.system.entry.js} +1 -2
- package/dist/verdocs-web-sdk/p-2b822750.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/p-2b86f106.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-2d36b5a3.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-327858f0.system.js +1 -2
- package/dist/verdocs-web-sdk/p-353b8e87.system.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-37a75b0e.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/p-40dfb545.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-4125b8e7.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/p-4490a384.system.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-468318a3.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-49bc1855.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/p-4a0bff9c.entry.js +1 -0
- package/dist/verdocs-web-sdk/{p-87776dc1.system.entry.js → p-4aef0d96.system.entry.js} +1 -2
- package/dist/verdocs-web-sdk/p-50706b8d.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-50ea2036.system.js +1 -2
- package/dist/verdocs-web-sdk/p-515d27dd.js +1 -0
- package/dist/verdocs-web-sdk/p-51a3ea62.system.js +1 -2
- package/dist/verdocs-web-sdk/p-5597170d.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/p-5e67c42f.js +1 -2
- package/dist/verdocs-web-sdk/p-5ea05a1d.js +1 -2
- package/dist/verdocs-web-sdk/p-602a22c7.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-6121f103.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/p-6239f230.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-62dbe501.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-66d93aa1.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-67566473.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-67f1cc29.system.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-69a32638.system.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-6de76553.js +1 -2
- package/dist/verdocs-web-sdk/{p-46e776de.system.entry.js → p-70ac018a.system.entry.js} +1 -2
- package/dist/verdocs-web-sdk/p-7291906c.js +1 -2
- package/dist/verdocs-web-sdk/p-72b4fa6b.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-74207eb0.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/p-74401f2e.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/{p-553176fa.system.entry.js → p-75f264fc.system.entry.js} +1 -2
- package/dist/verdocs-web-sdk/p-771c7e4a.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-7a1b2643.js +1 -2
- package/dist/verdocs-web-sdk/p-7a5c37cd.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/p-7a6c829f.system.js +1 -2
- package/dist/verdocs-web-sdk/p-7d909ce4.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-7efc60cc.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-7efdefa3.system.js +1 -2
- package/dist/verdocs-web-sdk/p-80c287ff.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-896f1614.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-89f25d01.entry.js +1 -0
- package/dist/verdocs-web-sdk/{p-05b15286.system.entry.js → p-8bf2b907.system.entry.js} +1 -2
- package/dist/verdocs-web-sdk/{p-63fc3d17.system.entry.js → p-8c543f85.system.entry.js} +1 -2
- package/dist/verdocs-web-sdk/{p-ff3f1b98.system.entry.js → p-8e48977b.system.entry.js} +1 -2
- package/dist/verdocs-web-sdk/p-8efc9749.js +1 -2
- package/dist/verdocs-web-sdk/p-97329951.system.js +1 -2
- package/dist/verdocs-web-sdk/p-9cecb5df.system.js +1 -2
- package/dist/verdocs-web-sdk/{p-b9a1a471.system.entry.js → p-9f094ad7.system.entry.js} +1 -2
- package/dist/verdocs-web-sdk/p-9f6b4f8c.entry.js +1 -0
- package/dist/verdocs-web-sdk/{p-c3e82de2.system.entry.js → p-9fc9596b.system.entry.js} +1 -2
- package/dist/verdocs-web-sdk/{p-6f177552.system.entry.js → p-a1edb87a.system.entry.js} +1 -2
- package/dist/verdocs-web-sdk/p-a42a5853.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/p-a6c3fcb6.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/{p-252d594a.system.js → p-a7208ca7.system.js} +1 -2
- package/dist/verdocs-web-sdk/p-a7433630.system.js +1 -2
- package/dist/verdocs-web-sdk/p-a74a9c6b.system.js +1 -2
- package/dist/verdocs-web-sdk/{p-831ee1b6.system.js → p-a7a7fa71.system.js} +1 -2
- package/dist/verdocs-web-sdk/p-aa124212.js +1 -2
- package/dist/verdocs-web-sdk/p-aa3a42a4.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/p-ab01f71e.js +1 -2
- package/dist/verdocs-web-sdk/{p-14513fd8.system.entry.js → p-ab6d9011.system.entry.js} +1 -2
- package/dist/verdocs-web-sdk/p-af2c2f79.system.js +1 -2
- package/dist/verdocs-web-sdk/p-af9a9672.entry.js +1 -0
- package/dist/verdocs-web-sdk/{p-fa2ef80d.system.entry.js → p-b2bd6b91.system.entry.js} +1 -2
- package/dist/verdocs-web-sdk/{p-f36c6695.system.entry.js → p-b30044fd.system.entry.js} +1 -2
- package/dist/verdocs-web-sdk/p-b365612a.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-b4f33423.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-b859bbb4.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-b931c4bc.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-ba6c3671.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/p-bdb8b719.entry.js +1 -0
- package/dist/verdocs-web-sdk/{p-f4a3bc08.system.entry.js → p-c12d8d65.system.entry.js} +1 -2
- package/dist/verdocs-web-sdk/p-c16b6ca4.system.js +1 -2
- package/dist/verdocs-web-sdk/p-c22c0a96.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-c2cc4492.js +1 -2
- package/dist/verdocs-web-sdk/p-c8e8732b.system.js +1 -2
- package/dist/verdocs-web-sdk/p-cec73595.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-d250b3b4.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-d50523fd.system.js +1 -2
- package/dist/verdocs-web-sdk/{p-016521f8.system.entry.js → p-d5601b0e.system.entry.js} +1 -2
- package/dist/verdocs-web-sdk/p-d85e61ee.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/p-d8e182fb.system.entry.js +1 -2
- package/dist/verdocs-web-sdk/p-dc8aa1f0.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-de5ff286.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-e12b7fbc.system.js +1 -2
- package/dist/verdocs-web-sdk/p-e53f969c.js +1 -2
- package/dist/verdocs-web-sdk/p-e662f81b.js +1 -2
- package/dist/verdocs-web-sdk/p-ec26fc38.js +1 -2
- package/dist/verdocs-web-sdk/p-fab1b4fc.js +1 -0
- package/dist/verdocs-web-sdk/p-fdebf8b5.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-fedfe011.entry.js +1 -0
- package/dist/verdocs-web-sdk/p-ff1278ed.js +2 -3
- package/dist/verdocs-web-sdk/verdocs-web-sdk.esm.js +1 -2
- package/package.json +1 -2
- package/dist/cjs/Colors-e809dcc9.js.map +0 -1
- package/dist/cjs/Envelopes-019e8a9f.js.map +0 -1
- package/dist/cjs/Files-4bdc0c0f.js.map +0 -1
- package/dist/cjs/Primitives-be5088cb.js.map +0 -1
- package/dist/cjs/Templates-358eaee4.js.map +0 -1
- package/dist/cjs/Templates-8ef16e3d.js.map +0 -1
- package/dist/cjs/Token-576f0e8a.js.map +0 -1
- package/dist/cjs/Types-da57ce69.js.map +0 -1
- package/dist/cjs/Validators-16e6d7d1.js.map +0 -1
- package/dist/cjs/VerdocsEndpoint-257ebdb3.js.map +0 -1
- package/dist/cjs/errors-0396da3d.js.map +0 -1
- package/dist/cjs/index-1329d89c.js.map +0 -1
- package/dist/cjs/index-6528b430.js.map +0 -1
- package/dist/cjs/index-eb130f52.js.map +0 -1
- package/dist/cjs/index.cjs.js.map +0 -1
- package/dist/cjs/loader.cjs.js.map +0 -1
- package/dist/cjs/popper-11d5f714.js.map +0 -1
- package/dist/cjs/templateStore-eed1f161.js.map +0 -1
- package/dist/cjs/utils-787b2115.js.map +0 -1
- package/dist/cjs/verdocs-auth.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-build.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-button-panel_3.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-button.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-checkbox.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-contact-picker.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-document-page_2.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-dropdown.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-field-attachment.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-field-checkbox.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-field-date.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-field-dropdown.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-field-initial.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-field-payment.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-field-radio-button.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-field-signature_3.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-field-textarea.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-field-textbox.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-field-timestamp.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-help-icon_2.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-initial-dialog.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-kba-dialog.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-ok-dialog.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-organization-card.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-preview.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-quick-functions_3.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-radio-button.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-search-tabs.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-search.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-send.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-sign.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-status-indicator.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-template-card.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-template-create_4.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-template-tags.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-toggle-button.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-toggle.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-upload-dialog.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-view.cjs.entry.js.map +0 -1
- package/dist/cjs/verdocs-web-sdk.cjs.js.map +0 -1
- package/dist/collection/components/controls/verdocs-button/verdocs-button.js.map +0 -1
- package/dist/collection/components/controls/verdocs-button/verdocs-button.stories.js.map +0 -1
- package/dist/collection/components/controls/verdocs-button-panel/verdocs-button-panel.js.map +0 -1
- package/dist/collection/components/controls/verdocs-button-panel/verdocs-button-panel.stories.js.map +0 -1
- package/dist/collection/components/controls/verdocs-checkbox/verdocs-checkbox.js.map +0 -1
- package/dist/collection/components/controls/verdocs-checkbox/verdocs-checkbox.stories.js.map +0 -1
- package/dist/collection/components/controls/verdocs-dropdown/down-arrow.svg +0 -1
- package/dist/collection/components/controls/verdocs-dropdown/verdocs-dropdown.js.map +0 -1
- package/dist/collection/components/controls/verdocs-dropdown/verdocs-dropdown.stories.js.map +0 -1
- package/dist/collection/components/controls/verdocs-help-icon/verdocs-help-icon.js.map +0 -1
- package/dist/collection/components/controls/verdocs-help-icon/verdocs-help-icon.stories.js.map +0 -1
- package/dist/collection/components/controls/verdocs-loader/verdocs-loader.js.map +0 -1
- package/dist/collection/components/controls/verdocs-loader/verdocs-loader.stories.js.map +0 -1
- package/dist/collection/components/controls/verdocs-organization-card/verdocs-organization-card.js.map +0 -1
- package/dist/collection/components/controls/verdocs-organization-card/verdocs-organization-card.stories.js.map +0 -1
- package/dist/collection/components/controls/verdocs-radio-button/verdocs-radio-button.js.map +0 -1
- package/dist/collection/components/controls/verdocs-radio-button/verdocs-radio-button.stories.js.map +0 -1
- package/dist/collection/components/controls/verdocs-select-input/verdocs-select-input.js.map +0 -1
- package/dist/collection/components/controls/verdocs-select-input/verdocs-select-input.stories.js.map +0 -1
- package/dist/collection/components/controls/verdocs-status-indicator/accepted-dark.svg +0 -4
- package/dist/collection/components/controls/verdocs-status-indicator/accepted-light.svg +0 -4
- package/dist/collection/components/controls/verdocs-status-indicator/arrowright.svg +0 -3
- package/dist/collection/components/controls/verdocs-status-indicator/canceled-dark.svg +0 -3
- package/dist/collection/components/controls/verdocs-status-indicator/canceled-light.svg +0 -3
- package/dist/collection/components/controls/verdocs-status-indicator/complete-dark.svg +0 -3
- package/dist/collection/components/controls/verdocs-status-indicator/complete-light.svg +0 -3
- package/dist/collection/components/controls/verdocs-status-indicator/declined-dark.svg +0 -3
- package/dist/collection/components/controls/verdocs-status-indicator/declined-light.svg +0 -3
- package/dist/collection/components/controls/verdocs-status-indicator/in-progress-dark.svg +0 -3
- package/dist/collection/components/controls/verdocs-status-indicator/in-progress-light.svg +0 -3
- package/dist/collection/components/controls/verdocs-status-indicator/opened-dark.svg +0 -4
- package/dist/collection/components/controls/verdocs-status-indicator/opened-light.svg +0 -4
- package/dist/collection/components/controls/verdocs-status-indicator/pending-dark.svg +0 -3
- package/dist/collection/components/controls/verdocs-status-indicator/pending-light.svg +0 -3
- package/dist/collection/components/controls/verdocs-status-indicator/recipient-flow.js.map +0 -1
- package/dist/collection/components/controls/verdocs-status-indicator/signed-dark.svg +0 -4
- package/dist/collection/components/controls/verdocs-status-indicator/signed-light.svg +0 -4
- package/dist/collection/components/controls/verdocs-status-indicator/some-signed-dark.svg +0 -3
- package/dist/collection/components/controls/verdocs-status-indicator/some-signed-light.svg +0 -3
- package/dist/collection/components/controls/verdocs-status-indicator/submitted-dark.svg +0 -3
- package/dist/collection/components/controls/verdocs-status-indicator/submitted-light.svg +0 -3
- package/dist/collection/components/controls/verdocs-status-indicator/verdocs-status-indicator.js.map +0 -1
- package/dist/collection/components/controls/verdocs-status-indicator/verdocs-status-indicator.stories.js.map +0 -1
- package/dist/collection/components/controls/verdocs-template-card/actions.svg +0 -1
- package/dist/collection/components/controls/verdocs-template-card/email.svg +0 -1
- package/dist/collection/components/controls/verdocs-template-card/pages.svg +0 -1
- package/dist/collection/components/controls/verdocs-template-card/star.svg +0 -10
- package/dist/collection/components/controls/verdocs-template-card/verdocs-template-card.js.map +0 -1
- package/dist/collection/components/controls/verdocs-template-card/verdocs-template-card.stories.js.map +0 -1
- package/dist/collection/components/controls/verdocs-template-tags/verdocs-template-tags.js.map +0 -1
- package/dist/collection/components/controls/verdocs-template-tags/verdocs-template-tags.stories.js.map +0 -1
- package/dist/collection/components/controls/verdocs-text-input/test/verdocs-text-input.js.map +0 -1
- package/dist/collection/components/controls/verdocs-text-input/verdocs-text-input.js.map +0 -1
- package/dist/collection/components/controls/verdocs-text-input/verdocs-text-input.stories.js.map +0 -1
- package/dist/collection/components/controls/verdocs-toggle/verdocs-toggle.js.map +0 -1
- package/dist/collection/components/controls/verdocs-toggle/verdocs-toggle.stories.js.map +0 -1
- package/dist/collection/components/controls/verdocs-toggle-button/verdocs-toggle-button.js.map +0 -1
- package/dist/collection/components/controls/verdocs-toggle-button/verdocs-toggle-button.stories.js.map +0 -1
- package/dist/collection/components/controls/verdocs-toolbar-icon/verdocs-toolbar-icon.js.map +0 -1
- package/dist/collection/components/controls/verdocs-toolbar-icon/verdocs-toolbar-icon.stories.js.map +0 -1
- package/dist/collection/components/dialogs/verdocs-initial-dialog/verdocs-initial-dialog.js.map +0 -1
- package/dist/collection/components/dialogs/verdocs-initial-dialog/verdocs-initial-dialog.stories.js.map +0 -1
- package/dist/collection/components/dialogs/verdocs-kba-dialog/question.svg +0 -4
- package/dist/collection/components/dialogs/verdocs-kba-dialog/verdocs-kba-dialog.js.map +0 -1
- package/dist/collection/components/dialogs/verdocs-kba-dialog/verdocs-kba-dialog.stories.js.map +0 -1
- package/dist/collection/components/dialogs/verdocs-ok-dialog/verdocs-ok-dialog.js.map +0 -1
- package/dist/collection/components/dialogs/verdocs-ok-dialog/verdocs-ok-dialog.stories.js.map +0 -1
- package/dist/collection/components/dialogs/verdocs-signature-dialog/verdocs-signature-dialog.js.map +0 -1
- package/dist/collection/components/dialogs/verdocs-signature-dialog/verdocs-signature-dialog.stories.js.map +0 -1
- package/dist/collection/components/dialogs/verdocs-template-sender-dialog/verdocs-template-sender-dialog.js.map +0 -1
- package/dist/collection/components/dialogs/verdocs-template-sender-dialog/verdocs-template-sender-dialog.stories.js.map +0 -1
- package/dist/collection/components/dialogs/verdocs-upload-dialog/verdocs-upload-dialog.js.map +0 -1
- package/dist/collection/components/dialogs/verdocs-upload-dialog/verdocs-upload-dialog.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-contact-picker/verdocs-contact-picker.js.map +0 -1
- package/dist/collection/components/elements/verdocs-contact-picker/verdocs-contact-picker.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-document-page/verdocs-document-page.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-attachment/verdocs-field-attachment.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-attachment/verdocs-field-attachment.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-checkbox/verdocs-field-checkbox.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-checkbox/verdocs-field-checkbox.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-date/verdocs-field-date.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-date/verdocs-field-date.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-dropdown/verdocs-field-dropdown.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-dropdown/verdocs-field-dropdown.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-initial/verdocs-field-initial.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-initial/verdocs-field-initial.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-payment/verdocs-field-payment.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-payment/verdocs-field-payment.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-radio-button-group/verdocs-field-radio-button.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-radio-button-group/verdocs-field-radio-button.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-signature/verdocs-field-signature.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-signature/verdocs-field-signature.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-textarea/verdocs-field-textarea.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-textarea/verdocs-field-textarea.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-textbox/verdocs-field-textbox.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-textbox/verdocs-field-textbox.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-timestamp/verdocs-field-timestamp.js.map +0 -1
- package/dist/collection/components/elements/verdocs-field-timestamp/verdocs-field-timestamp.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-quick-functions/document-icon.svg +0 -1
- package/dist/collection/components/elements/verdocs-quick-functions/template-icon.svg +0 -1
- package/dist/collection/components/elements/verdocs-quick-functions/verdocs-quick-functions.js.map +0 -1
- package/dist/collection/components/elements/verdocs-quick-functions/verdocs-quick-functions.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-search-activity/document-icon.svg +0 -1
- package/dist/collection/components/elements/verdocs-search-activity/verdocs-search-activity.js.map +0 -1
- package/dist/collection/components/elements/verdocs-search-activity/verdocs-search-activity.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-search-box/close.svg +0 -3
- package/dist/collection/components/elements/verdocs-search-box/search.svg +0 -3
- package/dist/collection/components/elements/verdocs-search-box/verdocs-search-box.js.map +0 -1
- package/dist/collection/components/elements/verdocs-search-box/verdocs-search-box.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-search-tabs/verdocs-search-tabs.js.map +0 -1
- package/dist/collection/components/elements/verdocs-search-tabs/verdocs-search-tabs.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-template-create/verdocs-template-create.js.map +0 -1
- package/dist/collection/components/elements/verdocs-template-create/verdocs-template-create.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-template-fields/verdocs-template-fields.js.map +0 -1
- package/dist/collection/components/elements/verdocs-template-fields/verdocs-template-fields.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-template-properties/verdocs-template-properties.js.map +0 -1
- package/dist/collection/components/elements/verdocs-template-properties/verdocs-template-properties.stories.js.map +0 -1
- package/dist/collection/components/elements/verdocs-template-recipients/verdocs-template-recipients.js.map +0 -1
- package/dist/collection/components/elements/verdocs-template-recipients/verdocs-template-recipients.stories.js.map +0 -1
- package/dist/collection/components/embeds/verdocs-auth/verdocs-auth.js.map +0 -1
- package/dist/collection/components/embeds/verdocs-auth/verdocs-auth.stories.js.map +0 -1
- package/dist/collection/components/embeds/verdocs-build/utils.js.map +0 -1
- package/dist/collection/components/embeds/verdocs-build/verdocs-build.js.map +0 -1
- package/dist/collection/components/embeds/verdocs-build/verdocs-build.stories.js.map +0 -1
- package/dist/collection/components/embeds/verdocs-preview/verdocs-preview.js.map +0 -1
- package/dist/collection/components/embeds/verdocs-preview/verdocs-preview.stories.js.map +0 -1
- package/dist/collection/components/embeds/verdocs-search/verdocs-search.js.map +0 -1
- package/dist/collection/components/embeds/verdocs-search/verdocs-search.stories.js.map +0 -1
- package/dist/collection/components/embeds/verdocs-send/role-flow.js.map +0 -1
- package/dist/collection/components/embeds/verdocs-send/verdocs-send.js.map +0 -1
- package/dist/collection/components/embeds/verdocs-send/verdocs-send.stories.js.map +0 -1
- package/dist/collection/components/embeds/verdocs-sign/utils.js.map +0 -1
- package/dist/collection/components/embeds/verdocs-sign/verdocs-sign.js.map +0 -1
- package/dist/collection/components/embeds/verdocs-sign/verdocs-sign.stories.js.map +0 -1
- package/dist/collection/components/embeds/verdocs-view/verdocs-view.js.map +0 -1
- package/dist/collection/components/embeds/verdocs-view/verdocs-view.stories.js.map +0 -1
- package/dist/collection/index.js.map +0 -1
- package/dist/collection/utils/Envelopes.js.map +0 -1
- package/dist/collection/utils/Templates.js.map +0 -1
- package/dist/collection/utils/Types.js.map +0 -1
- package/dist/collection/utils/envelopeStore.js.map +0 -1
- package/dist/collection/utils/errors.js.map +0 -1
- package/dist/collection/utils/templateStore.js.map +0 -1
- package/dist/collection/utils/utils.js.map +0 -1
- package/dist/components/Colors.js.map +0 -1
- package/dist/components/Files.js.map +0 -1
- package/dist/components/Primitives.js.map +0 -1
- package/dist/components/Templates.js.map +0 -1
- package/dist/components/Templates2.js.map +0 -1
- package/dist/components/Token.js.map +0 -1
- package/dist/components/Types.js.map +0 -1
- package/dist/components/Validators.js.map +0 -1
- package/dist/components/VerdocsEndpoint.js.map +0 -1
- package/dist/components/errors.js.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/components/index2.js.map +0 -1
- package/dist/components/index3.js.map +0 -1
- package/dist/components/interact.min.js.map +0 -1
- package/dist/components/popper.js.map +0 -1
- package/dist/components/templateStore.js.map +0 -1
- package/dist/components/utils.js.map +0 -1
- package/dist/components/verdocs-auth.js.map +0 -1
- package/dist/components/verdocs-build.js.map +0 -1
- package/dist/components/verdocs-button-panel.js.map +0 -1
- package/dist/components/verdocs-button-panel2.js.map +0 -1
- package/dist/components/verdocs-button.js.map +0 -1
- package/dist/components/verdocs-button2.js.map +0 -1
- package/dist/components/verdocs-checkbox.js.map +0 -1
- package/dist/components/verdocs-checkbox2.js.map +0 -1
- package/dist/components/verdocs-contact-picker.js.map +0 -1
- package/dist/components/verdocs-contact-picker2.js.map +0 -1
- package/dist/components/verdocs-document-page.js.map +0 -1
- package/dist/components/verdocs-document-page2.js.map +0 -1
- package/dist/components/verdocs-dropdown.js.map +0 -1
- package/dist/components/verdocs-dropdown2.js.map +0 -1
- package/dist/components/verdocs-field-attachment.js.map +0 -1
- package/dist/components/verdocs-field-checkbox.js.map +0 -1
- package/dist/components/verdocs-field-date.js.map +0 -1
- package/dist/components/verdocs-field-dropdown.js.map +0 -1
- package/dist/components/verdocs-field-initial.js.map +0 -1
- package/dist/components/verdocs-field-payment.js.map +0 -1
- package/dist/components/verdocs-field-radio-button.js.map +0 -1
- package/dist/components/verdocs-field-signature.js.map +0 -1
- package/dist/components/verdocs-field-signature2.js.map +0 -1
- package/dist/components/verdocs-field-textarea.js.map +0 -1
- package/dist/components/verdocs-field-textbox.js.map +0 -1
- package/dist/components/verdocs-field-timestamp.js.map +0 -1
- package/dist/components/verdocs-help-icon.js.map +0 -1
- package/dist/components/verdocs-help-icon2.js.map +0 -1
- package/dist/components/verdocs-initial-dialog.js.map +0 -1
- package/dist/components/verdocs-initial-dialog2.js.map +0 -1
- package/dist/components/verdocs-kba-dialog.js.map +0 -1
- package/dist/components/verdocs-loader.js.map +0 -1
- package/dist/components/verdocs-loader2.js.map +0 -1
- package/dist/components/verdocs-ok-dialog.js.map +0 -1
- package/dist/components/verdocs-ok-dialog2.js.map +0 -1
- package/dist/components/verdocs-organization-card.js.map +0 -1
- package/dist/components/verdocs-preview.js.map +0 -1
- package/dist/components/verdocs-quick-functions.js.map +0 -1
- package/dist/components/verdocs-quick-functions2.js.map +0 -1
- package/dist/components/verdocs-radio-button.js.map +0 -1
- package/dist/components/verdocs-radio-button2.js.map +0 -1
- package/dist/components/verdocs-search-activity.js.map +0 -1
- package/dist/components/verdocs-search-activity2.js.map +0 -1
- package/dist/components/verdocs-search-box.js.map +0 -1
- package/dist/components/verdocs-search-box2.js.map +0 -1
- package/dist/components/verdocs-search-tabs.js.map +0 -1
- package/dist/components/verdocs-search.js.map +0 -1
- package/dist/components/verdocs-select-input.js.map +0 -1
- package/dist/components/verdocs-select-input2.js.map +0 -1
- package/dist/components/verdocs-send.js.map +0 -1
- package/dist/components/verdocs-sign.js.map +0 -1
- package/dist/components/verdocs-signature-dialog.js.map +0 -1
- package/dist/components/verdocs-signature-dialog2.js.map +0 -1
- package/dist/components/verdocs-status-indicator.js.map +0 -1
- package/dist/components/verdocs-template-card.js.map +0 -1
- package/dist/components/verdocs-template-create.js.map +0 -1
- package/dist/components/verdocs-template-create2.js.map +0 -1
- package/dist/components/verdocs-template-fields.js.map +0 -1
- package/dist/components/verdocs-template-fields2.js.map +0 -1
- package/dist/components/verdocs-template-properties.js.map +0 -1
- package/dist/components/verdocs-template-properties2.js.map +0 -1
- package/dist/components/verdocs-template-recipients.js.map +0 -1
- package/dist/components/verdocs-template-recipients2.js.map +0 -1
- package/dist/components/verdocs-template-sender-dialog.js.map +0 -1
- package/dist/components/verdocs-template-sender-dialog2.js.map +0 -1
- package/dist/components/verdocs-template-tags.js.map +0 -1
- package/dist/components/verdocs-text-input.js.map +0 -1
- package/dist/components/verdocs-text-input2.js.map +0 -1
- package/dist/components/verdocs-toggle-button.js.map +0 -1
- package/dist/components/verdocs-toggle-button2.js.map +0 -1
- package/dist/components/verdocs-toggle.js.map +0 -1
- package/dist/components/verdocs-toolbar-icon.js.map +0 -1
- package/dist/components/verdocs-toolbar-icon2.js.map +0 -1
- package/dist/components/verdocs-upload-dialog.js.map +0 -1
- package/dist/components/verdocs-upload-dialog2.js.map +0 -1
- package/dist/components/verdocs-view.js.map +0 -1
- package/dist/components/verdocs-view2.js.map +0 -1
- package/dist/esm/Colors-1b298092.js.map +0 -1
- package/dist/esm/Envelopes-c2545a20.js.map +0 -1
- package/dist/esm/Files-70a192df.js.map +0 -1
- package/dist/esm/Primitives-054bc6e5.js.map +0 -1
- package/dist/esm/Templates-0638b1e4.js.map +0 -1
- package/dist/esm/Templates-ad0e1ebe.js.map +0 -1
- package/dist/esm/Token-54690789.js.map +0 -1
- package/dist/esm/Types-ab9f6af8.js.map +0 -1
- package/dist/esm/Validators-f110bae2.js.map +0 -1
- package/dist/esm/VerdocsEndpoint-28ba21cc.js.map +0 -1
- package/dist/esm/errors-9b5498c8.js.map +0 -1
- package/dist/esm/index-d264c496.js.map +0 -1
- package/dist/esm/index-f78d163d.js.map +0 -1
- package/dist/esm/index-fd7b8a34.js.map +0 -1
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/loader.js.map +0 -1
- package/dist/esm/popper-f860750c.js.map +0 -1
- package/dist/esm/templateStore-7b50460b.js.map +0 -1
- package/dist/esm/utils-6e8bd73f.js.map +0 -1
- package/dist/esm/verdocs-auth.entry.js.map +0 -1
- package/dist/esm/verdocs-build.entry.js.map +0 -1
- package/dist/esm/verdocs-button-panel_3.entry.js.map +0 -1
- package/dist/esm/verdocs-button.entry.js.map +0 -1
- package/dist/esm/verdocs-checkbox.entry.js.map +0 -1
- package/dist/esm/verdocs-contact-picker.entry.js.map +0 -1
- package/dist/esm/verdocs-document-page_2.entry.js.map +0 -1
- package/dist/esm/verdocs-dropdown.entry.js.map +0 -1
- package/dist/esm/verdocs-field-attachment.entry.js.map +0 -1
- package/dist/esm/verdocs-field-checkbox.entry.js.map +0 -1
- package/dist/esm/verdocs-field-date.entry.js.map +0 -1
- package/dist/esm/verdocs-field-dropdown.entry.js.map +0 -1
- package/dist/esm/verdocs-field-initial.entry.js.map +0 -1
- package/dist/esm/verdocs-field-payment.entry.js.map +0 -1
- package/dist/esm/verdocs-field-radio-button.entry.js.map +0 -1
- package/dist/esm/verdocs-field-signature_3.entry.js.map +0 -1
- package/dist/esm/verdocs-field-textarea.entry.js.map +0 -1
- package/dist/esm/verdocs-field-textbox.entry.js.map +0 -1
- package/dist/esm/verdocs-field-timestamp.entry.js.map +0 -1
- package/dist/esm/verdocs-help-icon_2.entry.js.map +0 -1
- package/dist/esm/verdocs-initial-dialog.entry.js.map +0 -1
- package/dist/esm/verdocs-kba-dialog.entry.js.map +0 -1
- package/dist/esm/verdocs-ok-dialog.entry.js.map +0 -1
- package/dist/esm/verdocs-organization-card.entry.js.map +0 -1
- package/dist/esm/verdocs-preview.entry.js.map +0 -1
- package/dist/esm/verdocs-quick-functions_3.entry.js.map +0 -1
- package/dist/esm/verdocs-radio-button.entry.js.map +0 -1
- package/dist/esm/verdocs-search-tabs.entry.js.map +0 -1
- package/dist/esm/verdocs-search.entry.js.map +0 -1
- package/dist/esm/verdocs-send.entry.js.map +0 -1
- package/dist/esm/verdocs-sign.entry.js.map +0 -1
- package/dist/esm/verdocs-status-indicator.entry.js.map +0 -1
- package/dist/esm/verdocs-template-card.entry.js.map +0 -1
- package/dist/esm/verdocs-template-create_4.entry.js.map +0 -1
- package/dist/esm/verdocs-template-tags.entry.js.map +0 -1
- package/dist/esm/verdocs-toggle-button.entry.js.map +0 -1
- package/dist/esm/verdocs-toggle.entry.js.map +0 -1
- package/dist/esm/verdocs-upload-dialog.entry.js.map +0 -1
- package/dist/esm/verdocs-view.entry.js.map +0 -1
- package/dist/esm/verdocs-web-sdk.js.map +0 -1
- package/dist/esm-es5/Colors-1b298092.js.map +0 -1
- package/dist/esm-es5/Envelopes-c2545a20.js.map +0 -1
- package/dist/esm-es5/Files-70a192df.js.map +0 -1
- package/dist/esm-es5/Primitives-054bc6e5.js.map +0 -1
- package/dist/esm-es5/Templates-0638b1e4.js.map +0 -1
- package/dist/esm-es5/Templates-ad0e1ebe.js.map +0 -1
- package/dist/esm-es5/Token-54690789.js.map +0 -1
- package/dist/esm-es5/Types-ab9f6af8.js.map +0 -1
- package/dist/esm-es5/Validators-f110bae2.js.map +0 -1
- package/dist/esm-es5/VerdocsEndpoint-28ba21cc.js.map +0 -1
- package/dist/esm-es5/errors-9b5498c8.js.map +0 -1
- package/dist/esm-es5/index-d264c496.js.map +0 -1
- package/dist/esm-es5/index-f78d163d.js.map +0 -1
- package/dist/esm-es5/index-fd7b8a34.js.map +0 -1
- package/dist/esm-es5/index.js.map +0 -1
- package/dist/esm-es5/loader.js.map +0 -1
- package/dist/esm-es5/popper-f860750c.js.map +0 -1
- package/dist/esm-es5/templateStore-7b50460b.js.map +0 -1
- package/dist/esm-es5/utils-6e8bd73f.js.map +0 -1
- package/dist/esm-es5/verdocs-auth.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-build.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-button-panel_3.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-button.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-checkbox.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-contact-picker.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-document-page_2.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-dropdown.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-field-attachment.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-field-checkbox.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-field-date.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-field-dropdown.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-field-initial.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-field-payment.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-field-radio-button.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-field-signature_3.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-field-textarea.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-field-textbox.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-field-timestamp.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-help-icon_2.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-initial-dialog.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-kba-dialog.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-ok-dialog.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-organization-card.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-preview.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-quick-functions_3.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-radio-button.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-search-tabs.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-search.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-send.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-sign.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-status-indicator.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-template-card.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-template-create_4.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-template-tags.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-toggle-button.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-toggle.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-upload-dialog.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-view.entry.js.map +0 -1
- package/dist/esm-es5/verdocs-web-sdk.js.map +0 -1
- package/dist/verdocs-web-sdk/index.esm.js.map +0 -1
- package/dist/verdocs-web-sdk/p-008f67ce.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-008f67ce.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-016521f8.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-05433ef8.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-05433ef8.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-05b15286.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-05eb4fed.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-08800f26.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-08800f26.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-0f6da8c7.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-10911fd8.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-10911fd8.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-11ab1bd0.js.map +0 -1
- package/dist/verdocs-web-sdk/p-12fd1696.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-12fd1696.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-14513fd8.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-14c69e28.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-150a172e.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-187b20b7.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-194a9ea7.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-194a9ea7.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-1f18d214.system.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-1f18d214.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-202a569e.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-202a569e.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-210606ed.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-210606ed.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-21603661.js.map +0 -1
- package/dist/verdocs-web-sdk/p-23e0d562.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-23e0d562.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-252d594a.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-27707de4.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-2b822750.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-327858f0.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-32a83aa5.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-32a83aa5.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-37a198be.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-37a198be.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-37a75b0e.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-3bc9be49.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-3bc9be49.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-3cafb2e3.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-3cafb2e3.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-3e33cd27.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-3e76685d.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-3e76685d.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-4125b8e7.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-417ee5e0.js +0 -2
- package/dist/verdocs-web-sdk/p-417ee5e0.js.map +0 -1
- package/dist/verdocs-web-sdk/p-4363499a.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-4363499a.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-46e776de.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-49bc1855.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-50ea2036.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-51a3ea62.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-53011513.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-53011513.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-553176fa.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-554856fb.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-554856fb.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-5597170d.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-577d46e3.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-577d46e3.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-5bfc608d.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-5bfc608d.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-5c895ce6.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-5e6134d8.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-5e6134d8.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-5e67c42f.js.map +0 -1
- package/dist/verdocs-web-sdk/p-5ea05a1d.js.map +0 -1
- package/dist/verdocs-web-sdk/p-6121f103.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-619a388e.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-619a388e.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-63fc3d17.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-6de76553.js.map +0 -1
- package/dist/verdocs-web-sdk/p-6f177552.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-7291906c.js.map +0 -1
- package/dist/verdocs-web-sdk/p-74207eb0.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-74401f2e.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-763b1dd8.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-763b1dd8.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-77fdef53.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-77fdef53.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-78468adf.system.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-78468adf.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-78989f41.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-78989f41.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-7a1b2643.js.map +0 -1
- package/dist/verdocs-web-sdk/p-7a5c37cd.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-7a6c829f.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-7cf75533.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-7cf75533.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-7efdefa3.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-831ee1b6.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-87776dc1.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-87a424a0.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-87a424a0.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-8c0aa0e9.js +0 -2
- package/dist/verdocs-web-sdk/p-8c0aa0e9.js.map +0 -1
- package/dist/verdocs-web-sdk/p-8ef53023.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-8ef53023.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-8efc9749.js.map +0 -1
- package/dist/verdocs-web-sdk/p-902dfefb.system.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-902dfefb.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-97329951.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-9c208c1d.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-9c208c1d.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-9cecb5df.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-a42a5853.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-a6c3fcb6.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-a7433630.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-a74a9c6b.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-a8b91e3f.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-a8b91e3f.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-a8cc5e31.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-a8cc5e31.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-aa124212.js.map +0 -1
- package/dist/verdocs-web-sdk/p-aa3a42a4.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-ab01f71e.js.map +0 -1
- package/dist/verdocs-web-sdk/p-af2c2f79.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-b10f26f2.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-b10f26f2.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-b988a40a.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-b988a40a.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-b9a1a471.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-ba6c3671.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-bd503b85.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-bd503b85.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-c0cc2b8e.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-c132d66e.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-c132d66e.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-c16b6ca4.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-c2ad9de3.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-c2ad9de3.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-c2cc4492.js.map +0 -1
- package/dist/verdocs-web-sdk/p-c3e82de2.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-c8e8732b.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-ce27dc71.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-ce27dc71.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-d48d78a2.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-d48d78a2.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-d50523fd.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-d85e61ee.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-d8e182fb.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-d942510c.system.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-d942510c.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-d954919a.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-d954919a.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-e12b7fbc.system.js.map +0 -1
- package/dist/verdocs-web-sdk/p-e53f969c.js.map +0 -1
- package/dist/verdocs-web-sdk/p-e662f81b.js.map +0 -1
- package/dist/verdocs-web-sdk/p-ec26fc38.js.map +0 -1
- package/dist/verdocs-web-sdk/p-f36c6695.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-f4a3bc08.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-fa2ef80d.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-fd0a605f.entry.js +0 -2
- package/dist/verdocs-web-sdk/p-fd0a605f.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/p-ff1278ed.js.map +0 -1
- package/dist/verdocs-web-sdk/p-ff3f1b98.system.entry.js.map +0 -1
- package/dist/verdocs-web-sdk/verdocs-web-sdk.esm.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["node_modules/@svgdotjs/svg.js/dist/svg.esm.js","src/components/controls/verdocs-status-indicator/recipient-flow.ts","src/components/controls/verdocs-status-indicator/verdocs-status-indicator.scss?tag=verdocs-status-indicator","src/components/controls/verdocs-status-indicator/verdocs-status-indicator.tsx"],"names":["methods$1","names","registerMethods","name","m","Array","isArray","_name","addMethodNames","Object","getOwnPropertyNames","assign","getMethodsFor","getMethodNames","Set","_names","push","map","array","block","i","il","length","result","filter","radians","d","Math","PI","camelCase","s","toLowerCase","replace","g","toUpperCase","unCamelCase","capitalize","charAt","slice","proportionalSize","element","width","height","box","bbox","getOrigin","o","origin","ox","originX","oy","originY","x","y","condX","condY","includes","svg","html","xmlns","xlink","svgjs","globals","window","document","Base","elements","root","create","ns","createElementNS","makeInstance","isHTML","adopter","querySelector","wrapper","createElement","innerHTML","firstChild","removeChild","nodeOrNew","node","ownerDocument","defaultView","Node","adopt","instance","nodeName","Fragment","className","register","asRoot","prototype","getClass","did","eid","assignNewId","children","id","extend","modules","methods","key","wrapWithAttrCheck","fn","args","constructor","apply","this","attr","siblings","parent","position","index","next","prev","forward","p","add","remove","backward","front","back","before","after","insertBefore","insertAfter","numberAndUnit","hex","rgb","reference","transforms","whitespace","isHex","isRgb","isBlank","isNumber","isImage","delimiter","isPathLetter","classes","trim","split","hasClass","indexOf","addClass","join","removeClass","c","toggleClass","css","style","val","ret","arguments","cssText","el","forEach","t","cased","test","show","hide","visible","data","a","v","r","attributes","JSON","parse","e","stringify","remember","k","memory","forget","_memory","sixDigitHex","substring","componentHex","component","integer","round","bounded","max","min","toString","is","object","space","getParameters","b","params","_a","_b","_c","_d","z","h","l","cieSpace","hueToRgb","q","Color","[object Object]","inputs","init","color","mode","u","random","sin","pi","grey","Error","isGrey","delta","values","noWhitespace","exec","parseInt","hexParse","components","xyz","lab","sqrt","atan2","dToR","cos","yL","xL","zL","ct","mx","nm","rU","gU","bU","pow","bd","_clamped","rV","gV","bV","string","toHex","r255","g255","b255","rL","gL","bL","xU","yU","zU","format","Point","base","source","clone","transformO","Matrix","isMatrixLike","f","point","transform","screenCTM","inverse","closeEnough","threshold","abs","flipBoth","flip","flipX","flipY","skewX","skew","isFinite","skewY","scaleX","scale","scaleY","shear","theta","rotate","around","px","positionX","NaN","py","positionY","translate","tx","translateX","ty","translateY","relative","rx","relativeX","ry","relativeY","cx","cy","matrix","aroundO","dx","dy","translateO","lmultiplyO","determinant","ccw","sx","thetaRad","st","lam","sy","other","comp","axis","flipO","scaleO","fromArray","Element","matrixify","parseFloat","call","inverseO","det","na","nb","nc","nd","ne","nf","matrixMultiply","multiplyO","rotateO","shearO","lx","skewO","tan","ly","formatTransforms","current","transformer","ctm","getCTM","isRoot","rect","getScreenCTM","parser","nodes","size","path","parentNode","body","documentElement","addTo","isNulledBox","domContains","contains","Box","pageXOffset","pageYOffset","left","top","w","x2","y2","xMin","Infinity","xMax","yMin","yMax","pts","getBox","getBBoxFn","retry","getBBox","rbox","getRBox","getBoundingClientRect","addOffset","inside","viewbox","level","clientWidth","clientHeight","zoomX","zoomY","zoom","zoomAmount","Number","MAX_SAFE_INTEGER","List","arr","super","fnOrMethodName","concat","reserved","reduce","obj","attrs","each","baseFind","query","querySelectorAll","find","findOne","listenerId","windowEvents","getEvents","n","getEventHolder","events","getEventTarget","clearEvents","on","listener","binding","options","bind","bag","_svgjsListenerId","event","ev","addEventListener","off","namespace","removeEventListener","dispatch","Event","dispatchEvent","CustomEvent","detail","cancelable","EventTarget","type","j","defaultPrevented","noop","timeline","duration","ease","delay","fill-opacity","stroke-opacity","stroke-width","stroke-linejoin","stroke-linecap","fill","stroke","opacity","offset","stop-opacity","stop-color","text-anchor","SVGArray","SVGNumber","unit","value","number","isNaN","match","valueOf","hooks","registerAttrHook","nodeValue","last","curr","removeAttribute","getAttribute","_val","hook","isColor","leading","setAttributeNS","setAttribute","rebuild","Dom","removeNamespace","SVGElement","appendChild","childNodes","put","hasChildNodes","lastChild","deep","writeDataToDom","cloneNode","htmlOrFn","outerHTML","xml","selector","matcher","matches","matchesSelector","msMatchesSelector","mozMatchesSelector","webkitMatchesSelector","oMatchesSelector","removeElement","replaceChild","precision","factor","svgOrFn","outerSVG","text","textContent","xmlOrFn","outerXML","_this","well","fragment","createDocumentFragment","len","firstElementChild","dom","hasAttribute","setData","defs","plus","until","isSelector","parents","keys","sugar","prefix","extension","mat","angle","direction","radius","_element","getTotalLength","pointAt","getPointAtLength","font","untransform","str","kv","reverse","lmultiply","toParent","pCtm","multiply","toRoot","decomposed","decompose","cleanRelative","Container","flatten","ungroup","Defs","Shape","x$3","y$3","cx$1","cy$1","width$2","divide","height$2","circled","__proto__","Ellipse","ellipse","move","from","fx","fy","x1","y1","to","gradiented","Gradient","url","clear","gradient","update","Pattern","pattern","patternUnits","Image","callback","img","src","image","load","PointArray","maxX","maxY","minX","minY","points","pop","MorphArray","x$2","y$2","width$1","height$1","pointed","Line","toLine","line","plot","Marker","orient","marker","ref","makeSetterGetter","easing","-","pos","<>",">","<","bezier","steps","stepPosition","jumps","beforeFlag","step","floor","jumping","Stepper","Ease","Controller","stepper","done","target","dt","recalculate","_duration","overshoot","_overshoot","eps","os","log","zeta","wn","Spring","velocity","acceleration","newPosition","PID","windup","integral","error","_windup","P","I","D","segmentParameters","M","L","H","V","C","S","Q","T","A","Z","pathHandlers","p0","mlhvqtcsaz","jl","makeAbsolut","command","segment","segmentComplete","startNewSegment","token","inNumber","finalizeNumber","pathLetter","lastCommand","small","isSmall","inSegment","pointSeen","hasExponent","finalizeSegment","absolute","segments","isArcFlag","isArc","isExponential","lastToken","pathParser","toAbsolute","arrayToString","PathArray","getClassForType","NonMorphable","morphableTypes","ObjectBag","Morphable","_stepper","_from","_to","_type","_context","_morphObj","morph","complete","_set","align","toConsumable","TransformBag","defaults","sortByKey","splice","toArray","defaultObject","toDelete","objOrArr","entries","Type","sort","shift","num","registerMorphableType","makeMorphable","context","mapper","Path","_array","move$2","size$1","poly","Polygon","polygon","Polyline","polyline","Rect","Queue","_first","_last","item","Animator","nextDraw","frames","timeouts","immediates","timer","performance","Date","run","requestAnimationFrame","_draw","time","now","nextTimeout","lastTimeout","nextFrame","lastFrame","nextImmediate","first","makeSchedule","runnerInfo","start","runner","end","defaultSource","Timeline","timeSource","_timeSource","_startTime","_speed","_persist","_nextFrame","_paused","_runners","_runnerIds","_lastRunnerId","_time","_lastSourceTime","_lastStepTime","_step","_stepFn","_stepImmediate","getEndTimeOfTimeline","pause","lastRunnerInfo","getLastRunnerInfo","lastDuration","lastStartTime","endTimes","getRunnerInfoById","_continue","dtOrForever","updateTime","yes","currentSpeed","speed","positive","when","absoluteStartTime","endTime","getEndTime","unschedule","persist","info","active","immediateStep","cancelFrame","frame","dtSource","dtTime","fire","dtToStart","reset","runnersLeft","finished","_timeline","Runner","_queue","_isDeclarative","_history","enabled","_lastTime","_reseted","transformId","_haveReversed","_reverse","_loopsDone","_swing","_wait","_times","_frameId","times","swing","wait","sanitise","loop","schedule","isTransform","animate","queue","_prepareRunner","loopDuration","loopsDone","relativeTime","whole","partial","swinging","backwards","uncliped","clipped","loops","swingForward","forwards","initFn","runFn","retargetFn","initialiser","retarget","initialised","running","_lastPosition","justStarted","justFinished","declarative","converged","_initialise","_run","needsIt","method","morpher","caller","play","positionOrDt","allfinished","extra","FakeRunner","getRunnerTransform","mergeTransforms","runners","_transformationRunners","netTransform","merge","RunnerArray","ids","deleteCnt","clearTransformsFromQueue","newRunner","lastRunner","condition","mergeWith","edit","by","currentRunner","clearBefore","cancelImmediate","immediate","difference","styleAttr","nameOrAttrs","_tryRetarget","at","newToAttrs","newKeys","differences","addedFromAttrs","oldFromAttrs","oldToAttrs","_rememberMorpher","newLevel","newPoint","affine","isMatrix","currentAngle","startTransform","setup","undefined","_addRunner","_clearTransformRunnersBefore","clearTransform","_currentTransform","rTarget","rCurrent","possibilities","distances","shortest","affineParameters","addTransform","newTransforms","_queueNumber","_queueNumberDelta","newTo","_queueObject","Svg","version","nested","Symbol","symbol","plain","_build","createTextNode","getComputedTextLength","x$1","y$1","move$1","center","ax","ay","amove","build","textable","Text","_rebuild","self","blankLineOffset","fontSize","getComputedStyle","getPropertyValue","newLined","firstLine","nodeType","newLine","Tspan","tspan","Circle","circle","ClipPath","targets","unclip","clip","clipper","ForeignObject","foreignObject","dmove","child","containerGeometry","G","group","link","linker","wrap","Mask","unmask","mask","masker","Stop","stop","cssRule","rule","Style","fontFamily","addText","TextPath","track","pathArray","textPath","importNodes","Use","file","use","SVG","RecipientFlow","_json","entities","_lines","initalize","lines","labels","_renderEntities","entity","background_color","class","_renderLabels","_renderPolylines","_renderOnePolyline","line_color","pointsInBetween","_calculatePointsInBetween","_calculateX","_calculateY","linecap","linejoin","p1","_translatePositionToNumber","p2","code","_update","json","verdocsStatusIndicatorCss","ENTRY_WIDTH","ENTRY_HEIGHT","ENTRY_PADDING","VerdocsStatusIndicator","popper","createPopper","summaryComponent","detailPanel","placement","modifiers","envelope","recipients","recipientsAtLevel","recipient","sequence","levelCount","canvasHeight","canvasWidth","minW","statusIcons","renderedItemsWidth","leftoverSpace","leftOffset","full_name","icon","getStatusIcon","status","getStatusColor","prevRecip","recipientStatusIcons","diagram","containerId","isOpen","setOptions","localName","showDropdown","theme","AcceptedLight","AcceptedDark","CompletedLight","CompletedDark","InProgressLight","InProgressDark","CanceledLight","CanceledDark","DeclinedLight","DeclinedDark","OpenedLight","OpenedDark","SignedLight","SignedDark","SubmittedLight","SubmittedDark","SomeSignedLight","SomeSignedDark","PendingLight","PendingDark","submittedRecipients","statusMessage","getStatusMessage","Host","aria-label","onClick","stopPropagation","preventDefault","toggleDropdown","onBlur","handleHideDropdown"],"mappings":"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","sourcesContent":["/*!\n* @svgdotjs/svg.js - A lightweight library for manipulating and animating SVG.\n* @version 3.1.2\n* https://svgjs.dev/\n*\n* @copyright Wout Fierens <wout@mick-wout.com>\n* @license MIT\n*\n* BUILT: Wed Jan 26 2022 23:19:07 GMT+0100 (Mitteleuropäische Normalzeit)\n*/;\nconst methods$1 = {};\nconst names = [];\nfunction registerMethods(name, m) {\n if (Array.isArray(name)) {\n for (const _name of name) {\n registerMethods(_name, m);\n }\n\n return;\n }\n\n if (typeof name === 'object') {\n for (const _name in name) {\n registerMethods(_name, name[_name]);\n }\n\n return;\n }\n\n addMethodNames(Object.getOwnPropertyNames(m));\n methods$1[name] = Object.assign(methods$1[name] || {}, m);\n}\nfunction getMethodsFor(name) {\n return methods$1[name] || {};\n}\nfunction getMethodNames() {\n return [...new Set(names)];\n}\nfunction addMethodNames(_names) {\n names.push(..._names);\n}\n\n// Map function\nfunction map(array, block) {\n let i;\n const il = array.length;\n const result = [];\n\n for (i = 0; i < il; i++) {\n result.push(block(array[i]));\n }\n\n return result;\n} // Filter function\n\nfunction filter(array, block) {\n let i;\n const il = array.length;\n const result = [];\n\n for (i = 0; i < il; i++) {\n if (block(array[i])) {\n result.push(array[i]);\n }\n }\n\n return result;\n} // Degrees to radians\n\nfunction radians(d) {\n return d % 360 * Math.PI / 180;\n} // Radians to degrees\n\nfunction degrees(r) {\n return r * 180 / Math.PI % 360;\n} // Convert dash-separated-string to camelCase\n\nfunction camelCase(s) {\n return s.toLowerCase().replace(/-(.)/g, function (m, g) {\n return g.toUpperCase();\n });\n} // Convert camel cased string to dash separated\n\nfunction unCamelCase(s) {\n return s.replace(/([A-Z])/g, function (m, g) {\n return '-' + g.toLowerCase();\n });\n} // Capitalize first letter of a string\n\nfunction capitalize(s) {\n return s.charAt(0).toUpperCase() + s.slice(1);\n} // Calculate proportional width and height values when necessary\n\nfunction proportionalSize(element, width, height, box) {\n if (width == null || height == null) {\n box = box || element.bbox();\n\n if (width == null) {\n width = box.width / box.height * height;\n } else if (height == null) {\n height = box.height / box.width * width;\n }\n }\n\n return {\n width: width,\n height: height\n };\n}\n/**\r\n * This function adds support for string origins.\r\n * It searches for an origin in o.origin o.ox and o.originX.\r\n * This way, origin: {x: 'center', y: 50} can be passed as well as ox: 'center', oy: 50\r\n**/\n\nfunction getOrigin(o, element) {\n const origin = o.origin; // First check if origin is in ox or originX\n\n let ox = o.ox != null ? o.ox : o.originX != null ? o.originX : 'center';\n let oy = o.oy != null ? o.oy : o.originY != null ? o.originY : 'center'; // Then check if origin was used and overwrite in that case\n\n if (origin != null) {\n [ox, oy] = Array.isArray(origin) ? origin : typeof origin === 'object' ? [origin.x, origin.y] : [origin, origin];\n } // Make sure to only call bbox when actually needed\n\n\n const condX = typeof ox === 'string';\n const condY = typeof oy === 'string';\n\n if (condX || condY) {\n const {\n height,\n width,\n x,\n y\n } = element.bbox(); // And only overwrite if string was passed for this specific axis\n\n if (condX) {\n ox = ox.includes('left') ? x : ox.includes('right') ? x + width : x + width / 2;\n }\n\n if (condY) {\n oy = oy.includes('top') ? y : oy.includes('bottom') ? y + height : y + height / 2;\n }\n } // Return the origin as it is if it wasn't a string\n\n\n return [ox, oy];\n}\n\nvar utils = {\n __proto__: null,\n map: map,\n filter: filter,\n radians: radians,\n degrees: degrees,\n camelCase: camelCase,\n unCamelCase: unCamelCase,\n capitalize: capitalize,\n proportionalSize: proportionalSize,\n getOrigin: getOrigin\n};\n\n// Default namespaces\nconst svg = 'http://www.w3.org/2000/svg';\nconst html = 'http://www.w3.org/1999/xhtml';\nconst xmlns = 'http://www.w3.org/2000/xmlns/';\nconst xlink = 'http://www.w3.org/1999/xlink';\nconst svgjs = 'http://svgjs.dev/svgjs';\n\nvar namespaces = {\n __proto__: null,\n svg: svg,\n html: html,\n xmlns: xmlns,\n xlink: xlink,\n svgjs: svgjs\n};\n\nconst globals = {\n window: typeof window === 'undefined' ? null : window,\n document: typeof document === 'undefined' ? null : document\n};\nfunction registerWindow(win = null, doc = null) {\n globals.window = win;\n globals.document = doc;\n}\nconst save = {};\nfunction saveWindow() {\n save.window = globals.window;\n save.document = globals.document;\n}\nfunction restoreWindow() {\n globals.window = save.window;\n globals.document = save.document;\n}\nfunction withWindow(win, fn) {\n saveWindow();\n registerWindow(win, win.document);\n fn(win, win.document);\n restoreWindow();\n}\nfunction getWindow() {\n return globals.window;\n}\n\nclass Base {// constructor (node/*, {extensions = []} */) {\n // // this.tags = []\n // //\n // // for (let extension of extensions) {\n // // extension.setup.call(this, node)\n // // this.tags.push(extension.name)\n // // }\n // }\n}\n\nconst elements = {};\nconst root = '___SYMBOL___ROOT___'; // Method for element creation\n\nfunction create(name, ns = svg) {\n // create element\n return globals.document.createElementNS(ns, name);\n}\nfunction makeInstance(element, isHTML = false) {\n if (element instanceof Base) return element;\n\n if (typeof element === 'object') {\n return adopter(element);\n }\n\n if (element == null) {\n return new elements[root]();\n }\n\n if (typeof element === 'string' && element.charAt(0) !== '<') {\n return adopter(globals.document.querySelector(element));\n } // Make sure, that HTML elements are created with the correct namespace\n\n\n const wrapper = isHTML ? globals.document.createElement('div') : create('svg');\n wrapper.innerHTML = element; // We can use firstChild here because we know,\n // that the first char is < and thus an element\n\n element = adopter(wrapper.firstChild); // make sure, that element doesnt have its wrapper attached\n\n wrapper.removeChild(wrapper.firstChild);\n return element;\n}\nfunction nodeOrNew(name, node) {\n return node && node.ownerDocument && node instanceof node.ownerDocument.defaultView.Node ? node : create(name);\n} // Adopt existing svg elements\n\nfunction adopt(node) {\n // check for presence of node\n if (!node) return null; // make sure a node isn't already adopted\n\n if (node.instance instanceof Base) return node.instance;\n\n if (node.nodeName === '#document-fragment') {\n return new elements.Fragment(node);\n } // initialize variables\n\n\n let className = capitalize(node.nodeName || 'Dom'); // Make sure that gradients are adopted correctly\n\n if (className === 'LinearGradient' || className === 'RadialGradient') {\n className = 'Gradient'; // Fallback to Dom if element is not known\n } else if (!elements[className]) {\n className = 'Dom';\n }\n\n return new elements[className](node);\n}\nlet adopter = adopt;\nfunction mockAdopt(mock = adopt) {\n adopter = mock;\n}\nfunction register(element, name = element.name, asRoot = false) {\n elements[name] = element;\n if (asRoot) elements[root] = element;\n addMethodNames(Object.getOwnPropertyNames(element.prototype));\n return element;\n}\nfunction getClass(name) {\n return elements[name];\n} // Element id sequence\n\nlet did = 1000; // Get next named element id\n\nfunction eid(name) {\n return 'Svgjs' + capitalize(name) + did++;\n} // Deep new id assignment\n\nfunction assignNewId(node) {\n // do the same for SVG child nodes as well\n for (let i = node.children.length - 1; i >= 0; i--) {\n assignNewId(node.children[i]);\n }\n\n if (node.id) {\n node.id = eid(node.nodeName);\n return node;\n }\n\n return node;\n} // Method for extending objects\n\nfunction extend(modules, methods) {\n let key, i;\n modules = Array.isArray(modules) ? modules : [modules];\n\n for (i = modules.length - 1; i >= 0; i--) {\n for (key in methods) {\n modules[i].prototype[key] = methods[key];\n }\n }\n}\nfunction wrapWithAttrCheck(fn) {\n return function (...args) {\n const o = args[args.length - 1];\n\n if (o && o.constructor === Object && !(o instanceof Array)) {\n return fn.apply(this, args.slice(0, -1)).attr(o);\n } else {\n return fn.apply(this, args);\n }\n };\n}\n\nfunction siblings() {\n return this.parent().children();\n} // Get the current position siblings\n\nfunction position() {\n return this.parent().index(this);\n} // Get the next element (will return null if there is none)\n\nfunction next() {\n return this.siblings()[this.position() + 1];\n} // Get the next element (will return null if there is none)\n\nfunction prev() {\n return this.siblings()[this.position() - 1];\n} // Send given element one step forward\n\nfunction forward() {\n const i = this.position();\n const p = this.parent(); // move node one step forward\n\n p.add(this.remove(), i + 1);\n return this;\n} // Send given element one step backward\n\nfunction backward() {\n const i = this.position();\n const p = this.parent();\n p.add(this.remove(), i ? i - 1 : 0);\n return this;\n} // Send given element all the way to the front\n\nfunction front() {\n const p = this.parent(); // Move node forward\n\n p.add(this.remove());\n return this;\n} // Send given element all the way to the back\n\nfunction back() {\n const p = this.parent(); // Move node back\n\n p.add(this.remove(), 0);\n return this;\n} // Inserts a given element before the targeted element\n\nfunction before(element) {\n element = makeInstance(element);\n element.remove();\n const i = this.position();\n this.parent().add(element, i);\n return this;\n} // Inserts a given element after the targeted element\n\nfunction after(element) {\n element = makeInstance(element);\n element.remove();\n const i = this.position();\n this.parent().add(element, i + 1);\n return this;\n}\nfunction insertBefore(element) {\n element = makeInstance(element);\n element.before(this);\n return this;\n}\nfunction insertAfter(element) {\n element = makeInstance(element);\n element.after(this);\n return this;\n}\nregisterMethods('Dom', {\n siblings,\n position,\n next,\n prev,\n forward,\n backward,\n front,\n back,\n before,\n after,\n insertBefore,\n insertAfter\n});\n\n// Parse unit value\nconst numberAndUnit = /^([+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?)([a-z%]*)$/i; // Parse hex value\n\nconst hex = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i; // Parse rgb value\n\nconst rgb = /rgb\\((\\d+),(\\d+),(\\d+)\\)/; // Parse reference id\n\nconst reference = /(#[a-z_][a-z0-9\\-_]*)/i; // splits a transformation chain\n\nconst transforms = /\\)\\s*,?\\s*/; // Whitespace\n\nconst whitespace = /\\s/g; // Test hex value\n\nconst isHex = /^#[a-f0-9]{3}$|^#[a-f0-9]{6}$/i; // Test rgb value\n\nconst isRgb = /^rgb\\(/; // Test for blank string\n\nconst isBlank = /^(\\s+)?$/; // Test for numeric string\n\nconst isNumber = /^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i; // Test for image url\n\nconst isImage = /\\.(jpg|jpeg|png|gif|svg)(\\?[^=]+.*)?/i; // split at whitespace and comma\n\nconst delimiter = /[\\s,]+/; // Test for path letter\n\nconst isPathLetter = /[MLHVCSQTAZ]/i;\n\nvar regex = {\n __proto__: null,\n numberAndUnit: numberAndUnit,\n hex: hex,\n rgb: rgb,\n reference: reference,\n transforms: transforms,\n whitespace: whitespace,\n isHex: isHex,\n isRgb: isRgb,\n isBlank: isBlank,\n isNumber: isNumber,\n isImage: isImage,\n delimiter: delimiter,\n isPathLetter: isPathLetter\n};\n\nfunction classes() {\n const attr = this.attr('class');\n return attr == null ? [] : attr.trim().split(delimiter);\n} // Return true if class exists on the node, false otherwise\n\nfunction hasClass(name) {\n return this.classes().indexOf(name) !== -1;\n} // Add class to the node\n\nfunction addClass(name) {\n if (!this.hasClass(name)) {\n const array = this.classes();\n array.push(name);\n this.attr('class', array.join(' '));\n }\n\n return this;\n} // Remove class from the node\n\nfunction removeClass(name) {\n if (this.hasClass(name)) {\n this.attr('class', this.classes().filter(function (c) {\n return c !== name;\n }).join(' '));\n }\n\n return this;\n} // Toggle the presence of a class on the node\n\nfunction toggleClass(name) {\n return this.hasClass(name) ? this.removeClass(name) : this.addClass(name);\n}\nregisterMethods('Dom', {\n classes,\n hasClass,\n addClass,\n removeClass,\n toggleClass\n});\n\nfunction css(style, val) {\n const ret = {};\n\n if (arguments.length === 0) {\n // get full style as object\n this.node.style.cssText.split(/\\s*;\\s*/).filter(function (el) {\n return !!el.length;\n }).forEach(function (el) {\n const t = el.split(/\\s*:\\s*/);\n ret[t[0]] = t[1];\n });\n return ret;\n }\n\n if (arguments.length < 2) {\n // get style properties as array\n if (Array.isArray(style)) {\n for (const name of style) {\n const cased = camelCase(name);\n ret[name] = this.node.style[cased];\n }\n\n return ret;\n } // get style for property\n\n\n if (typeof style === 'string') {\n return this.node.style[camelCase(style)];\n } // set styles in object\n\n\n if (typeof style === 'object') {\n for (const name in style) {\n // set empty string if null/undefined/'' was given\n this.node.style[camelCase(name)] = style[name] == null || isBlank.test(style[name]) ? '' : style[name];\n }\n }\n } // set style for property\n\n\n if (arguments.length === 2) {\n this.node.style[camelCase(style)] = val == null || isBlank.test(val) ? '' : val;\n }\n\n return this;\n} // Show element\n\nfunction show() {\n return this.css('display', '');\n} // Hide element\n\nfunction hide() {\n return this.css('display', 'none');\n} // Is element visible?\n\nfunction visible() {\n return this.css('display') !== 'none';\n}\nregisterMethods('Dom', {\n css,\n show,\n hide,\n visible\n});\n\nfunction data(a, v, r) {\n if (a == null) {\n // get an object of attributes\n return this.data(map(filter(this.node.attributes, el => el.nodeName.indexOf('data-') === 0), el => el.nodeName.slice(5)));\n } else if (a instanceof Array) {\n const data = {};\n\n for (const key of a) {\n data[key] = this.data(key);\n }\n\n return data;\n } else if (typeof a === 'object') {\n for (v in a) {\n this.data(v, a[v]);\n }\n } else if (arguments.length < 2) {\n try {\n return JSON.parse(this.attr('data-' + a));\n } catch (e) {\n return this.attr('data-' + a);\n }\n } else {\n this.attr('data-' + a, v === null ? null : r === true || typeof v === 'string' || typeof v === 'number' ? v : JSON.stringify(v));\n }\n\n return this;\n}\nregisterMethods('Dom', {\n data\n});\n\nfunction remember(k, v) {\n // remember every item in an object individually\n if (typeof arguments[0] === 'object') {\n for (const key in k) {\n this.remember(key, k[key]);\n }\n } else if (arguments.length === 1) {\n // retrieve memory\n return this.memory()[k];\n } else {\n // store memory\n this.memory()[k] = v;\n }\n\n return this;\n} // Erase a given memory\n\nfunction forget() {\n if (arguments.length === 0) {\n this._memory = {};\n } else {\n for (let i = arguments.length - 1; i >= 0; i--) {\n delete this.memory()[arguments[i]];\n }\n }\n\n return this;\n} // This triggers creation of a new hidden class which is not performant\n// However, this function is not rarely used so it will not happen frequently\n// Return local memory object\n\nfunction memory() {\n return this._memory = this._memory || {};\n}\nregisterMethods('Dom', {\n remember,\n forget,\n memory\n});\n\nfunction sixDigitHex(hex) {\n return hex.length === 4 ? ['#', hex.substring(1, 2), hex.substring(1, 2), hex.substring(2, 3), hex.substring(2, 3), hex.substring(3, 4), hex.substring(3, 4)].join('') : hex;\n}\n\nfunction componentHex(component) {\n const integer = Math.round(component);\n const bounded = Math.max(0, Math.min(255, integer));\n const hex = bounded.toString(16);\n return hex.length === 1 ? '0' + hex : hex;\n}\n\nfunction is(object, space) {\n for (let i = space.length; i--;) {\n if (object[space[i]] == null) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction getParameters(a, b) {\n const params = is(a, 'rgb') ? {\n _a: a.r,\n _b: a.g,\n _c: a.b,\n _d: 0,\n space: 'rgb'\n } : is(a, 'xyz') ? {\n _a: a.x,\n _b: a.y,\n _c: a.z,\n _d: 0,\n space: 'xyz'\n } : is(a, 'hsl') ? {\n _a: a.h,\n _b: a.s,\n _c: a.l,\n _d: 0,\n space: 'hsl'\n } : is(a, 'lab') ? {\n _a: a.l,\n _b: a.a,\n _c: a.b,\n _d: 0,\n space: 'lab'\n } : is(a, 'lch') ? {\n _a: a.l,\n _b: a.c,\n _c: a.h,\n _d: 0,\n space: 'lch'\n } : is(a, 'cmyk') ? {\n _a: a.c,\n _b: a.m,\n _c: a.y,\n _d: a.k,\n space: 'cmyk'\n } : {\n _a: 0,\n _b: 0,\n _c: 0,\n space: 'rgb'\n };\n params.space = b || params.space;\n return params;\n}\n\nfunction cieSpace(space) {\n if (space === 'lab' || space === 'xyz' || space === 'lch') {\n return true;\n } else {\n return false;\n }\n}\n\nfunction hueToRgb(p, q, t) {\n if (t < 0) t += 1;\n if (t > 1) t -= 1;\n if (t < 1 / 6) return p + (q - p) * 6 * t;\n if (t < 1 / 2) return q;\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n}\n\nclass Color {\n constructor(...inputs) {\n this.init(...inputs);\n } // Test if given value is a color\n\n\n static isColor(color) {\n return color && (color instanceof Color || this.isRgb(color) || this.test(color));\n } // Test if given value is an rgb object\n\n\n static isRgb(color) {\n return color && typeof color.r === 'number' && typeof color.g === 'number' && typeof color.b === 'number';\n }\n /*\r\n Generating random colors\r\n */\n\n\n static random(mode = 'vibrant', t, u) {\n // Get the math modules\n const {\n random,\n round,\n sin,\n PI: pi\n } = Math; // Run the correct generator\n\n if (mode === 'vibrant') {\n const l = (81 - 57) * random() + 57;\n const c = (83 - 45) * random() + 45;\n const h = 360 * random();\n const color = new Color(l, c, h, 'lch');\n return color;\n } else if (mode === 'sine') {\n t = t == null ? random() : t;\n const r = round(80 * sin(2 * pi * t / 0.5 + 0.01) + 150);\n const g = round(50 * sin(2 * pi * t / 0.5 + 4.6) + 200);\n const b = round(100 * sin(2 * pi * t / 0.5 + 2.3) + 150);\n const color = new Color(r, g, b);\n return color;\n } else if (mode === 'pastel') {\n const l = (94 - 86) * random() + 86;\n const c = (26 - 9) * random() + 9;\n const h = 360 * random();\n const color = new Color(l, c, h, 'lch');\n return color;\n } else if (mode === 'dark') {\n const l = 10 + 10 * random();\n const c = (125 - 75) * random() + 86;\n const h = 360 * random();\n const color = new Color(l, c, h, 'lch');\n return color;\n } else if (mode === 'rgb') {\n const r = 255 * random();\n const g = 255 * random();\n const b = 255 * random();\n const color = new Color(r, g, b);\n return color;\n } else if (mode === 'lab') {\n const l = 100 * random();\n const a = 256 * random() - 128;\n const b = 256 * random() - 128;\n const color = new Color(l, a, b, 'lab');\n return color;\n } else if (mode === 'grey') {\n const grey = 255 * random();\n const color = new Color(grey, grey, grey);\n return color;\n } else {\n throw new Error('Unsupported random color mode');\n }\n } // Test if given value is a color string\n\n\n static test(color) {\n return typeof color === 'string' && (isHex.test(color) || isRgb.test(color));\n }\n\n cmyk() {\n // Get the rgb values for the current color\n const {\n _a,\n _b,\n _c\n } = this.rgb();\n const [r, g, b] = [_a, _b, _c].map(v => v / 255); // Get the cmyk values in an unbounded format\n\n const k = Math.min(1 - r, 1 - g, 1 - b);\n\n if (k === 1) {\n // Catch the black case\n return new Color(0, 0, 0, 1, 'cmyk');\n }\n\n const c = (1 - r - k) / (1 - k);\n const m = (1 - g - k) / (1 - k);\n const y = (1 - b - k) / (1 - k); // Construct the new color\n\n const color = new Color(c, m, y, k, 'cmyk');\n return color;\n }\n\n hsl() {\n // Get the rgb values\n const {\n _a,\n _b,\n _c\n } = this.rgb();\n const [r, g, b] = [_a, _b, _c].map(v => v / 255); // Find the maximum and minimum values to get the lightness\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2; // If the r, g, v values are identical then we are grey\n\n const isGrey = max === min; // Calculate the hue and saturation\n\n const delta = max - min;\n const s = isGrey ? 0 : l > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n const h = isGrey ? 0 : max === r ? ((g - b) / delta + (g < b ? 6 : 0)) / 6 : max === g ? ((b - r) / delta + 2) / 6 : max === b ? ((r - g) / delta + 4) / 6 : 0; // Construct and return the new color\n\n const color = new Color(360 * h, 100 * s, 100 * l, 'hsl');\n return color;\n }\n\n init(a = 0, b = 0, c = 0, d = 0, space = 'rgb') {\n // This catches the case when a falsy value is passed like ''\n a = !a ? 0 : a; // Reset all values in case the init function is rerun with new color space\n\n if (this.space) {\n for (const component in this.space) {\n delete this[this.space[component]];\n }\n }\n\n if (typeof a === 'number') {\n // Allow for the case that we don't need d...\n space = typeof d === 'string' ? d : space;\n d = typeof d === 'string' ? 0 : d; // Assign the values straight to the color\n\n Object.assign(this, {\n _a: a,\n _b: b,\n _c: c,\n _d: d,\n space\n }); // If the user gave us an array, make the color from it\n } else if (a instanceof Array) {\n this.space = b || (typeof a[3] === 'string' ? a[3] : a[4]) || 'rgb';\n Object.assign(this, {\n _a: a[0],\n _b: a[1],\n _c: a[2],\n _d: a[3] || 0\n });\n } else if (a instanceof Object) {\n // Set the object up and assign its values directly\n const values = getParameters(a, b);\n Object.assign(this, values);\n } else if (typeof a === 'string') {\n if (isRgb.test(a)) {\n const noWhitespace = a.replace(whitespace, '');\n const [_a, _b, _c] = rgb.exec(noWhitespace).slice(1, 4).map(v => parseInt(v));\n Object.assign(this, {\n _a,\n _b,\n _c,\n _d: 0,\n space: 'rgb'\n });\n } else if (isHex.test(a)) {\n const hexParse = v => parseInt(v, 16);\n\n const [, _a, _b, _c] = hex.exec(sixDigitHex(a)).map(hexParse);\n Object.assign(this, {\n _a,\n _b,\n _c,\n _d: 0,\n space: 'rgb'\n });\n } else throw Error('Unsupported string format, can\\'t construct Color');\n } // Now add the components as a convenience\n\n\n const {\n _a,\n _b,\n _c,\n _d\n } = this;\n const components = this.space === 'rgb' ? {\n r: _a,\n g: _b,\n b: _c\n } : this.space === 'xyz' ? {\n x: _a,\n y: _b,\n z: _c\n } : this.space === 'hsl' ? {\n h: _a,\n s: _b,\n l: _c\n } : this.space === 'lab' ? {\n l: _a,\n a: _b,\n b: _c\n } : this.space === 'lch' ? {\n l: _a,\n c: _b,\n h: _c\n } : this.space === 'cmyk' ? {\n c: _a,\n m: _b,\n y: _c,\n k: _d\n } : {};\n Object.assign(this, components);\n }\n\n lab() {\n // Get the xyz color\n const {\n x,\n y,\n z\n } = this.xyz(); // Get the lab components\n\n const l = 116 * y - 16;\n const a = 500 * (x - y);\n const b = 200 * (y - z); // Construct and return a new color\n\n const color = new Color(l, a, b, 'lab');\n return color;\n }\n\n lch() {\n // Get the lab color directly\n const {\n l,\n a,\n b\n } = this.lab(); // Get the chromaticity and the hue using polar coordinates\n\n const c = Math.sqrt(a ** 2 + b ** 2);\n let h = 180 * Math.atan2(b, a) / Math.PI;\n\n if (h < 0) {\n h *= -1;\n h = 360 - h;\n } // Make a new color and return it\n\n\n const color = new Color(l, c, h, 'lch');\n return color;\n }\n /*\r\n Conversion Methods\r\n */\n\n\n rgb() {\n if (this.space === 'rgb') {\n return this;\n } else if (cieSpace(this.space)) {\n // Convert to the xyz color space\n let {\n x,\n y,\n z\n } = this;\n\n if (this.space === 'lab' || this.space === 'lch') {\n // Get the values in the lab space\n let {\n l,\n a,\n b\n } = this;\n\n if (this.space === 'lch') {\n const {\n c,\n h\n } = this;\n const dToR = Math.PI / 180;\n a = c * Math.cos(dToR * h);\n b = c * Math.sin(dToR * h);\n } // Undo the nonlinear function\n\n\n const yL = (l + 16) / 116;\n const xL = a / 500 + yL;\n const zL = yL - b / 200; // Get the xyz values\n\n const ct = 16 / 116;\n const mx = 0.008856;\n const nm = 7.787;\n x = 0.95047 * (xL ** 3 > mx ? xL ** 3 : (xL - ct) / nm);\n y = 1.00000 * (yL ** 3 > mx ? yL ** 3 : (yL - ct) / nm);\n z = 1.08883 * (zL ** 3 > mx ? zL ** 3 : (zL - ct) / nm);\n } // Convert xyz to unbounded rgb values\n\n\n const rU = x * 3.2406 + y * -1.5372 + z * -0.4986;\n const gU = x * -0.9689 + y * 1.8758 + z * 0.0415;\n const bU = x * 0.0557 + y * -0.2040 + z * 1.0570; // Convert the values to true rgb values\n\n const pow = Math.pow;\n const bd = 0.0031308;\n const r = rU > bd ? 1.055 * pow(rU, 1 / 2.4) - 0.055 : 12.92 * rU;\n const g = gU > bd ? 1.055 * pow(gU, 1 / 2.4) - 0.055 : 12.92 * gU;\n const b = bU > bd ? 1.055 * pow(bU, 1 / 2.4) - 0.055 : 12.92 * bU; // Make and return the color\n\n const color = new Color(255 * r, 255 * g, 255 * b);\n return color;\n } else if (this.space === 'hsl') {\n // https://bgrins.github.io/TinyColor/docs/tinycolor.html\n // Get the current hsl values\n let {\n h,\n s,\n l\n } = this;\n h /= 360;\n s /= 100;\n l /= 100; // If we are grey, then just make the color directly\n\n if (s === 0) {\n l *= 255;\n const color = new Color(l, l, l);\n return color;\n } // TODO I have no idea what this does :D If you figure it out, tell me!\n\n\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const p = 2 * l - q; // Get the rgb values\n\n const r = 255 * hueToRgb(p, q, h + 1 / 3);\n const g = 255 * hueToRgb(p, q, h);\n const b = 255 * hueToRgb(p, q, h - 1 / 3); // Make a new color\n\n const color = new Color(r, g, b);\n return color;\n } else if (this.space === 'cmyk') {\n // https://gist.github.com/felipesabino/5066336\n // Get the normalised cmyk values\n const {\n c,\n m,\n y,\n k\n } = this; // Get the rgb values\n\n const r = 255 * (1 - Math.min(1, c * (1 - k) + k));\n const g = 255 * (1 - Math.min(1, m * (1 - k) + k));\n const b = 255 * (1 - Math.min(1, y * (1 - k) + k)); // Form the color and return it\n\n const color = new Color(r, g, b);\n return color;\n } else {\n return this;\n }\n }\n\n toArray() {\n const {\n _a,\n _b,\n _c,\n _d,\n space\n } = this;\n return [_a, _b, _c, _d, space];\n }\n\n toHex() {\n const [r, g, b] = this._clamped().map(componentHex);\n\n return `#${r}${g}${b}`;\n }\n\n toRgb() {\n const [rV, gV, bV] = this._clamped();\n\n const string = `rgb(${rV},${gV},${bV})`;\n return string;\n }\n\n toString() {\n return this.toHex();\n }\n\n xyz() {\n // Normalise the red, green and blue values\n const {\n _a: r255,\n _b: g255,\n _c: b255\n } = this.rgb();\n const [r, g, b] = [r255, g255, b255].map(v => v / 255); // Convert to the lab rgb space\n\n const rL = r > 0.04045 ? Math.pow((r + 0.055) / 1.055, 2.4) : r / 12.92;\n const gL = g > 0.04045 ? Math.pow((g + 0.055) / 1.055, 2.4) : g / 12.92;\n const bL = b > 0.04045 ? Math.pow((b + 0.055) / 1.055, 2.4) : b / 12.92; // Convert to the xyz color space without bounding the values\n\n const xU = (rL * 0.4124 + gL * 0.3576 + bL * 0.1805) / 0.95047;\n const yU = (rL * 0.2126 + gL * 0.7152 + bL * 0.0722) / 1.00000;\n const zU = (rL * 0.0193 + gL * 0.1192 + bL * 0.9505) / 1.08883; // Get the proper xyz values by applying the bounding\n\n const x = xU > 0.008856 ? Math.pow(xU, 1 / 3) : 7.787 * xU + 16 / 116;\n const y = yU > 0.008856 ? Math.pow(yU, 1 / 3) : 7.787 * yU + 16 / 116;\n const z = zU > 0.008856 ? Math.pow(zU, 1 / 3) : 7.787 * zU + 16 / 116; // Make and return the color\n\n const color = new Color(x, y, z, 'xyz');\n return color;\n }\n /*\r\n Input and Output methods\r\n */\n\n\n _clamped() {\n const {\n _a,\n _b,\n _c\n } = this.rgb();\n const {\n max,\n min,\n round\n } = Math;\n\n const format = v => max(0, min(round(v), 255));\n\n return [_a, _b, _c].map(format);\n }\n /*\r\n Constructing colors\r\n */\n\n\n}\n\nclass Point {\n // Initialize\n constructor(...args) {\n this.init(...args);\n } // Clone point\n\n\n clone() {\n return new Point(this);\n }\n\n init(x, y) {\n const base = {\n x: 0,\n y: 0\n }; // ensure source as object\n\n const source = Array.isArray(x) ? {\n x: x[0],\n y: x[1]\n } : typeof x === 'object' ? {\n x: x.x,\n y: x.y\n } : {\n x: x,\n y: y\n }; // merge source\n\n this.x = source.x == null ? base.x : source.x;\n this.y = source.y == null ? base.y : source.y;\n return this;\n }\n\n toArray() {\n return [this.x, this.y];\n }\n\n transform(m) {\n return this.clone().transformO(m);\n } // Transform point with matrix\n\n\n transformO(m) {\n if (!Matrix.isMatrixLike(m)) {\n m = new Matrix(m);\n }\n\n const {\n x,\n y\n } = this; // Perform the matrix multiplication\n\n this.x = m.a * x + m.c * y + m.e;\n this.y = m.b * x + m.d * y + m.f;\n return this;\n }\n\n}\nfunction point(x, y) {\n return new Point(x, y).transform(this.screenCTM().inverse());\n}\n\nfunction closeEnough(a, b, threshold) {\n return Math.abs(b - a) < (threshold || 1e-6);\n}\n\nclass Matrix {\n constructor(...args) {\n this.init(...args);\n }\n\n static formatTransforms(o) {\n // Get all of the parameters required to form the matrix\n const flipBoth = o.flip === 'both' || o.flip === true;\n const flipX = o.flip && (flipBoth || o.flip === 'x') ? -1 : 1;\n const flipY = o.flip && (flipBoth || o.flip === 'y') ? -1 : 1;\n const skewX = o.skew && o.skew.length ? o.skew[0] : isFinite(o.skew) ? o.skew : isFinite(o.skewX) ? o.skewX : 0;\n const skewY = o.skew && o.skew.length ? o.skew[1] : isFinite(o.skew) ? o.skew : isFinite(o.skewY) ? o.skewY : 0;\n const scaleX = o.scale && o.scale.length ? o.scale[0] * flipX : isFinite(o.scale) ? o.scale * flipX : isFinite(o.scaleX) ? o.scaleX * flipX : flipX;\n const scaleY = o.scale && o.scale.length ? o.scale[1] * flipY : isFinite(o.scale) ? o.scale * flipY : isFinite(o.scaleY) ? o.scaleY * flipY : flipY;\n const shear = o.shear || 0;\n const theta = o.rotate || o.theta || 0;\n const origin = new Point(o.origin || o.around || o.ox || o.originX, o.oy || o.originY);\n const ox = origin.x;\n const oy = origin.y; // We need Point to be invalid if nothing was passed because we cannot default to 0 here. Thats why NaN\n\n const position = new Point(o.position || o.px || o.positionX || NaN, o.py || o.positionY || NaN);\n const px = position.x;\n const py = position.y;\n const translate = new Point(o.translate || o.tx || o.translateX, o.ty || o.translateY);\n const tx = translate.x;\n const ty = translate.y;\n const relative = new Point(o.relative || o.rx || o.relativeX, o.ry || o.relativeY);\n const rx = relative.x;\n const ry = relative.y; // Populate all of the values\n\n return {\n scaleX,\n scaleY,\n skewX,\n skewY,\n shear,\n theta,\n rx,\n ry,\n tx,\n ty,\n ox,\n oy,\n px,\n py\n };\n }\n\n static fromArray(a) {\n return {\n a: a[0],\n b: a[1],\n c: a[2],\n d: a[3],\n e: a[4],\n f: a[5]\n };\n }\n\n static isMatrixLike(o) {\n return o.a != null || o.b != null || o.c != null || o.d != null || o.e != null || o.f != null;\n } // left matrix, right matrix, target matrix which is overwritten\n\n\n static matrixMultiply(l, r, o) {\n // Work out the product directly\n const a = l.a * r.a + l.c * r.b;\n const b = l.b * r.a + l.d * r.b;\n const c = l.a * r.c + l.c * r.d;\n const d = l.b * r.c + l.d * r.d;\n const e = l.e + l.a * r.e + l.c * r.f;\n const f = l.f + l.b * r.e + l.d * r.f; // make sure to use local variables because l/r and o could be the same\n\n o.a = a;\n o.b = b;\n o.c = c;\n o.d = d;\n o.e = e;\n o.f = f;\n return o;\n }\n\n around(cx, cy, matrix) {\n return this.clone().aroundO(cx, cy, matrix);\n } // Transform around a center point\n\n\n aroundO(cx, cy, matrix) {\n const dx = cx || 0;\n const dy = cy || 0;\n return this.translateO(-dx, -dy).lmultiplyO(matrix).translateO(dx, dy);\n } // Clones this matrix\n\n\n clone() {\n return new Matrix(this);\n } // Decomposes this matrix into its affine parameters\n\n\n decompose(cx = 0, cy = 0) {\n // Get the parameters from the matrix\n const a = this.a;\n const b = this.b;\n const c = this.c;\n const d = this.d;\n const e = this.e;\n const f = this.f; // Figure out if the winding direction is clockwise or counterclockwise\n\n const determinant = a * d - b * c;\n const ccw = determinant > 0 ? 1 : -1; // Since we only shear in x, we can use the x basis to get the x scale\n // and the rotation of the resulting matrix\n\n const sx = ccw * Math.sqrt(a * a + b * b);\n const thetaRad = Math.atan2(ccw * b, ccw * a);\n const theta = 180 / Math.PI * thetaRad;\n const ct = Math.cos(thetaRad);\n const st = Math.sin(thetaRad); // We can then solve the y basis vector simultaneously to get the other\n // two affine parameters directly from these parameters\n\n const lam = (a * c + b * d) / determinant;\n const sy = c * sx / (lam * a - b) || d * sx / (lam * b + a); // Use the translations\n\n const tx = e - cx + cx * ct * sx + cy * (lam * ct * sx - st * sy);\n const ty = f - cy + cx * st * sx + cy * (lam * st * sx + ct * sy); // Construct the decomposition and return it\n\n return {\n // Return the affine parameters\n scaleX: sx,\n scaleY: sy,\n shear: lam,\n rotate: theta,\n translateX: tx,\n translateY: ty,\n originX: cx,\n originY: cy,\n // Return the matrix parameters\n a: this.a,\n b: this.b,\n c: this.c,\n d: this.d,\n e: this.e,\n f: this.f\n };\n } // Check if two matrices are equal\n\n\n equals(other) {\n if (other === this) return true;\n const comp = new Matrix(other);\n return closeEnough(this.a, comp.a) && closeEnough(this.b, comp.b) && closeEnough(this.c, comp.c) && closeEnough(this.d, comp.d) && closeEnough(this.e, comp.e) && closeEnough(this.f, comp.f);\n } // Flip matrix on x or y, at a given offset\n\n\n flip(axis, around) {\n return this.clone().flipO(axis, around);\n }\n\n flipO(axis, around) {\n return axis === 'x' ? this.scaleO(-1, 1, around, 0) : axis === 'y' ? this.scaleO(1, -1, 0, around) : this.scaleO(-1, -1, axis, around || axis); // Define an x, y flip point\n } // Initialize\n\n\n init(source) {\n const base = Matrix.fromArray([1, 0, 0, 1, 0, 0]); // ensure source as object\n\n source = source instanceof Element ? source.matrixify() : typeof source === 'string' ? Matrix.fromArray(source.split(delimiter).map(parseFloat)) : Array.isArray(source) ? Matrix.fromArray(source) : typeof source === 'object' && Matrix.isMatrixLike(source) ? source : typeof source === 'object' ? new Matrix().transform(source) : arguments.length === 6 ? Matrix.fromArray([].slice.call(arguments)) : base; // Merge the source matrix with the base matrix\n\n this.a = source.a != null ? source.a : base.a;\n this.b = source.b != null ? source.b : base.b;\n this.c = source.c != null ? source.c : base.c;\n this.d = source.d != null ? source.d : base.d;\n this.e = source.e != null ? source.e : base.e;\n this.f = source.f != null ? source.f : base.f;\n return this;\n }\n\n inverse() {\n return this.clone().inverseO();\n } // Inverses matrix\n\n\n inverseO() {\n // Get the current parameters out of the matrix\n const a = this.a;\n const b = this.b;\n const c = this.c;\n const d = this.d;\n const e = this.e;\n const f = this.f; // Invert the 2x2 matrix in the top left\n\n const det = a * d - b * c;\n if (!det) throw new Error('Cannot invert ' + this); // Calculate the top 2x2 matrix\n\n const na = d / det;\n const nb = -b / det;\n const nc = -c / det;\n const nd = a / det; // Apply the inverted matrix to the top right\n\n const ne = -(na * e + nc * f);\n const nf = -(nb * e + nd * f); // Construct the inverted matrix\n\n this.a = na;\n this.b = nb;\n this.c = nc;\n this.d = nd;\n this.e = ne;\n this.f = nf;\n return this;\n }\n\n lmultiply(matrix) {\n return this.clone().lmultiplyO(matrix);\n }\n\n lmultiplyO(matrix) {\n const r = this;\n const l = matrix instanceof Matrix ? matrix : new Matrix(matrix);\n return Matrix.matrixMultiply(l, r, this);\n } // Left multiplies by the given matrix\n\n\n multiply(matrix) {\n return this.clone().multiplyO(matrix);\n }\n\n multiplyO(matrix) {\n // Get the matrices\n const l = this;\n const r = matrix instanceof Matrix ? matrix : new Matrix(matrix);\n return Matrix.matrixMultiply(l, r, this);\n } // Rotate matrix\n\n\n rotate(r, cx, cy) {\n return this.clone().rotateO(r, cx, cy);\n }\n\n rotateO(r, cx = 0, cy = 0) {\n // Convert degrees to radians\n r = radians(r);\n const cos = Math.cos(r);\n const sin = Math.sin(r);\n const {\n a,\n b,\n c,\n d,\n e,\n f\n } = this;\n this.a = a * cos - b * sin;\n this.b = b * cos + a * sin;\n this.c = c * cos - d * sin;\n this.d = d * cos + c * sin;\n this.e = e * cos - f * sin + cy * sin - cx * cos + cx;\n this.f = f * cos + e * sin - cx * sin - cy * cos + cy;\n return this;\n } // Scale matrix\n\n\n scale(x, y, cx, cy) {\n return this.clone().scaleO(...arguments);\n }\n\n scaleO(x, y = x, cx = 0, cy = 0) {\n // Support uniform scaling\n if (arguments.length === 3) {\n cy = cx;\n cx = y;\n y = x;\n }\n\n const {\n a,\n b,\n c,\n d,\n e,\n f\n } = this;\n this.a = a * x;\n this.b = b * y;\n this.c = c * x;\n this.d = d * y;\n this.e = e * x - cx * x + cx;\n this.f = f * y - cy * y + cy;\n return this;\n } // Shear matrix\n\n\n shear(a, cx, cy) {\n return this.clone().shearO(a, cx, cy);\n }\n\n shearO(lx, cx = 0, cy = 0) {\n const {\n a,\n b,\n c,\n d,\n e,\n f\n } = this;\n this.a = a + b * lx;\n this.c = c + d * lx;\n this.e = e + f * lx - cy * lx;\n return this;\n } // Skew Matrix\n\n\n skew(x, y, cx, cy) {\n return this.clone().skewO(...arguments);\n }\n\n skewO(x, y = x, cx = 0, cy = 0) {\n // support uniformal skew\n if (arguments.length === 3) {\n cy = cx;\n cx = y;\n y = x;\n } // Convert degrees to radians\n\n\n x = radians(x);\n y = radians(y);\n const lx = Math.tan(x);\n const ly = Math.tan(y);\n const {\n a,\n b,\n c,\n d,\n e,\n f\n } = this;\n this.a = a + b * lx;\n this.b = b + a * ly;\n this.c = c + d * lx;\n this.d = d + c * ly;\n this.e = e + f * lx - cy * lx;\n this.f = f + e * ly - cx * ly;\n return this;\n } // SkewX\n\n\n skewX(x, cx, cy) {\n return this.skew(x, 0, cx, cy);\n } // SkewY\n\n\n skewY(y, cx, cy) {\n return this.skew(0, y, cx, cy);\n }\n\n toArray() {\n return [this.a, this.b, this.c, this.d, this.e, this.f];\n } // Convert matrix to string\n\n\n toString() {\n return 'matrix(' + this.a + ',' + this.b + ',' + this.c + ',' + this.d + ',' + this.e + ',' + this.f + ')';\n } // Transform a matrix into another matrix by manipulating the space\n\n\n transform(o) {\n // Check if o is a matrix and then left multiply it directly\n if (Matrix.isMatrixLike(o)) {\n const matrix = new Matrix(o);\n return matrix.multiplyO(this);\n } // Get the proposed transformations and the current transformations\n\n\n const t = Matrix.formatTransforms(o);\n const current = this;\n const {\n x: ox,\n y: oy\n } = new Point(t.ox, t.oy).transform(current); // Construct the resulting matrix\n\n const transformer = new Matrix().translateO(t.rx, t.ry).lmultiplyO(current).translateO(-ox, -oy).scaleO(t.scaleX, t.scaleY).skewO(t.skewX, t.skewY).shearO(t.shear).rotateO(t.theta).translateO(ox, oy); // If we want the origin at a particular place, we force it there\n\n if (isFinite(t.px) || isFinite(t.py)) {\n const origin = new Point(ox, oy).transform(transformer); // TODO: Replace t.px with isFinite(t.px)\n // Doesnt work because t.px is also 0 if it wasnt passed\n\n const dx = isFinite(t.px) ? t.px - origin.x : 0;\n const dy = isFinite(t.py) ? t.py - origin.y : 0;\n transformer.translateO(dx, dy);\n } // Translate now after positioning\n\n\n transformer.translateO(t.tx, t.ty);\n return transformer;\n } // Translate matrix\n\n\n translate(x, y) {\n return this.clone().translateO(x, y);\n }\n\n translateO(x, y) {\n this.e += x || 0;\n this.f += y || 0;\n return this;\n }\n\n valueOf() {\n return {\n a: this.a,\n b: this.b,\n c: this.c,\n d: this.d,\n e: this.e,\n f: this.f\n };\n }\n\n}\nfunction ctm() {\n return new Matrix(this.node.getCTM());\n}\nfunction screenCTM() {\n /* https://bugzilla.mozilla.org/show_bug.cgi?id=1344537\r\n This is needed because FF does not return the transformation matrix\r\n for the inner coordinate system when getScreenCTM() is called on nested svgs.\r\n However all other Browsers do that */\n if (typeof this.isRoot === 'function' && !this.isRoot()) {\n const rect = this.rect(1, 1);\n const m = rect.node.getScreenCTM();\n rect.remove();\n return new Matrix(m);\n }\n\n return new Matrix(this.node.getScreenCTM());\n}\nregister(Matrix, 'Matrix');\n\nfunction parser() {\n // Reuse cached element if possible\n if (!parser.nodes) {\n const svg = makeInstance().size(2, 0);\n svg.node.style.cssText = ['opacity: 0', 'position: absolute', 'left: -100%', 'top: -100%', 'overflow: hidden'].join(';');\n svg.attr('focusable', 'false');\n svg.attr('aria-hidden', 'true');\n const path = svg.path().node;\n parser.nodes = {\n svg,\n path\n };\n }\n\n if (!parser.nodes.svg.node.parentNode) {\n const b = globals.document.body || globals.document.documentElement;\n parser.nodes.svg.addTo(b);\n }\n\n return parser.nodes;\n}\n\nfunction isNulledBox(box) {\n return !box.width && !box.height && !box.x && !box.y;\n}\nfunction domContains(node) {\n return node === globals.document || (globals.document.documentElement.contains || function (node) {\n // This is IE - it does not support contains() for top-level SVGs\n while (node.parentNode) {\n node = node.parentNode;\n }\n\n return node === globals.document;\n }).call(globals.document.documentElement, node);\n}\nclass Box {\n constructor(...args) {\n this.init(...args);\n }\n\n addOffset() {\n // offset by window scroll position, because getBoundingClientRect changes when window is scrolled\n this.x += globals.window.pageXOffset;\n this.y += globals.window.pageYOffset;\n return new Box(this);\n }\n\n init(source) {\n const base = [0, 0, 0, 0];\n source = typeof source === 'string' ? source.split(delimiter).map(parseFloat) : Array.isArray(source) ? source : typeof source === 'object' ? [source.left != null ? source.left : source.x, source.top != null ? source.top : source.y, source.width, source.height] : arguments.length === 4 ? [].slice.call(arguments) : base;\n this.x = source[0] || 0;\n this.y = source[1] || 0;\n this.width = this.w = source[2] || 0;\n this.height = this.h = source[3] || 0; // Add more bounding box properties\n\n this.x2 = this.x + this.w;\n this.y2 = this.y + this.h;\n this.cx = this.x + this.w / 2;\n this.cy = this.y + this.h / 2;\n return this;\n }\n\n isNulled() {\n return isNulledBox(this);\n } // Merge rect box with another, return a new instance\n\n\n merge(box) {\n const x = Math.min(this.x, box.x);\n const y = Math.min(this.y, box.y);\n const width = Math.max(this.x + this.width, box.x + box.width) - x;\n const height = Math.max(this.y + this.height, box.y + box.height) - y;\n return new Box(x, y, width, height);\n }\n\n toArray() {\n return [this.x, this.y, this.width, this.height];\n }\n\n toString() {\n return this.x + ' ' + this.y + ' ' + this.width + ' ' + this.height;\n }\n\n transform(m) {\n if (!(m instanceof Matrix)) {\n m = new Matrix(m);\n }\n\n let xMin = Infinity;\n let xMax = -Infinity;\n let yMin = Infinity;\n let yMax = -Infinity;\n const pts = [new Point(this.x, this.y), new Point(this.x2, this.y), new Point(this.x, this.y2), new Point(this.x2, this.y2)];\n pts.forEach(function (p) {\n p = p.transform(m);\n xMin = Math.min(xMin, p.x);\n xMax = Math.max(xMax, p.x);\n yMin = Math.min(yMin, p.y);\n yMax = Math.max(yMax, p.y);\n });\n return new Box(xMin, yMin, xMax - xMin, yMax - yMin);\n }\n\n}\n\nfunction getBox(el, getBBoxFn, retry) {\n let box;\n\n try {\n // Try to get the box with the provided function\n box = getBBoxFn(el.node); // If the box is worthless and not even in the dom, retry\n // by throwing an error here...\n\n if (isNulledBox(box) && !domContains(el.node)) {\n throw new Error('Element not in the dom');\n }\n } catch (e) {\n // ... and calling the retry handler here\n box = retry(el);\n }\n\n return box;\n}\n\nfunction bbox() {\n // Function to get bbox is getBBox()\n const getBBox = node => node.getBBox(); // Take all measures so that a stupid browser renders the element\n // so we can get the bbox from it when we try again\n\n\n const retry = el => {\n try {\n const clone = el.clone().addTo(parser().svg).show();\n const box = clone.node.getBBox();\n clone.remove();\n return box;\n } catch (e) {\n // We give up...\n throw new Error(`Getting bbox of element \"${el.node.nodeName}\" is not possible: ${e.toString()}`);\n }\n };\n\n const box = getBox(this, getBBox, retry);\n const bbox = new Box(box);\n return bbox;\n}\nfunction rbox(el) {\n const getRBox = node => node.getBoundingClientRect();\n\n const retry = el => {\n // There is no point in trying tricks here because if we insert the element into the dom ourselves\n // it obviously will be at the wrong position\n throw new Error(`Getting rbox of element \"${el.node.nodeName}\" is not possible`);\n };\n\n const box = getBox(this, getRBox, retry);\n const rbox = new Box(box); // If an element was passed, we want the bbox in the coordinate system of that element\n\n if (el) {\n return rbox.transform(el.screenCTM().inverseO());\n } // Else we want it in absolute screen coordinates\n // Therefore we need to add the scrollOffset\n\n\n return rbox.addOffset();\n} // Checks whether the given point is inside the bounding box\n\nfunction inside(x, y) {\n const box = this.bbox();\n return x > box.x && y > box.y && x < box.x + box.width && y < box.y + box.height;\n}\nregisterMethods({\n viewbox: {\n viewbox(x, y, width, height) {\n // act as getter\n if (x == null) return new Box(this.attr('viewBox')); // act as setter\n\n return this.attr('viewBox', new Box(x, y, width, height));\n },\n\n zoom(level, point) {\n // Its best to rely on the attributes here and here is why:\n // clientXYZ: Doesn't work on non-root svgs because they dont have a CSSBox (silly!)\n // getBoundingClientRect: Doesn't work because Chrome just ignores width and height of nested svgs completely\n // that means, their clientRect is always as big as the content.\n // Furthermore this size is incorrect if the element is further transformed by its parents\n // computedStyle: Only returns meaningful values if css was used with px. We dont go this route here!\n // getBBox: returns the bounding box of its content - that doesnt help!\n let {\n width,\n height\n } = this.attr(['width', 'height']); // Width and height is a string when a number with a unit is present which we can't use\n // So we try clientXYZ\n\n if (!width && !height || typeof width === 'string' || typeof height === 'string') {\n width = this.node.clientWidth;\n height = this.node.clientHeight;\n } // Giving up...\n\n\n if (!width || !height) {\n throw new Error('Impossible to get absolute width and height. Please provide an absolute width and height attribute on the zooming element');\n }\n\n const v = this.viewbox();\n const zoomX = width / v.width;\n const zoomY = height / v.height;\n const zoom = Math.min(zoomX, zoomY);\n\n if (level == null) {\n return zoom;\n }\n\n let zoomAmount = zoom / level; // Set the zoomAmount to the highest value which is safe to process and recover from\n // The * 100 is a bit of wiggle room for the matrix transformation\n\n if (zoomAmount === Infinity) zoomAmount = Number.MAX_SAFE_INTEGER / 100;\n point = point || new Point(width / 2 / zoomX + v.x, height / 2 / zoomY + v.y);\n const box = new Box(v).transform(new Matrix({\n scale: zoomAmount,\n origin: point\n }));\n return this.viewbox(box);\n }\n\n }\n});\nregister(Box, 'Box');\n\nclass List extends Array {\n constructor(arr = [], ...args) {\n super(arr, ...args);\n if (typeof arr === 'number') return this;\n this.length = 0;\n this.push(...arr);\n }\n\n}\nextend([List], {\n each(fnOrMethodName, ...args) {\n if (typeof fnOrMethodName === 'function') {\n return this.map((el, i, arr) => {\n return fnOrMethodName.call(el, el, i, arr);\n });\n } else {\n return this.map(el => {\n return el[fnOrMethodName](...args);\n });\n }\n },\n\n toArray() {\n return Array.prototype.concat.apply([], this);\n }\n\n});\nconst reserved = ['toArray', 'constructor', 'each'];\n\nList.extend = function (methods) {\n methods = methods.reduce((obj, name) => {\n // Don't overwrite own methods\n if (reserved.includes(name)) return obj; // Don't add private methods\n\n if (name[0] === '_') return obj; // Relay every call to each()\n\n obj[name] = function (...attrs) {\n return this.each(name, ...attrs);\n };\n\n return obj;\n }, {});\n extend([List], methods);\n};\n\nfunction baseFind(query, parent) {\n return new List(map((parent || globals.document).querySelectorAll(query), function (node) {\n return adopt(node);\n }));\n} // Scoped find method\n\nfunction find(query) {\n return baseFind(query, this.node);\n}\nfunction findOne(query) {\n return adopt(this.node.querySelector(query));\n}\n\nlet listenerId = 0;\nconst windowEvents = {};\nfunction getEvents(instance) {\n let n = instance.getEventHolder(); // We dont want to save events in global space\n\n if (n === globals.window) n = windowEvents;\n if (!n.events) n.events = {};\n return n.events;\n}\nfunction getEventTarget(instance) {\n return instance.getEventTarget();\n}\nfunction clearEvents(instance) {\n let n = instance.getEventHolder();\n if (n === globals.window) n = windowEvents;\n if (n.events) n.events = {};\n} // Add event binder in the SVG namespace\n\nfunction on(node, events, listener, binding, options) {\n const l = listener.bind(binding || node);\n const instance = makeInstance(node);\n const bag = getEvents(instance);\n const n = getEventTarget(instance); // events can be an array of events or a string of events\n\n events = Array.isArray(events) ? events : events.split(delimiter); // add id to listener\n\n if (!listener._svgjsListenerId) {\n listener._svgjsListenerId = ++listenerId;\n }\n\n events.forEach(function (event) {\n const ev = event.split('.')[0];\n const ns = event.split('.')[1] || '*'; // ensure valid object\n\n bag[ev] = bag[ev] || {};\n bag[ev][ns] = bag[ev][ns] || {}; // reference listener\n\n bag[ev][ns][listener._svgjsListenerId] = l; // add listener\n\n n.addEventListener(ev, l, options || false);\n });\n} // Add event unbinder in the SVG namespace\n\nfunction off(node, events, listener, options) {\n const instance = makeInstance(node);\n const bag = getEvents(instance);\n const n = getEventTarget(instance); // listener can be a function or a number\n\n if (typeof listener === 'function') {\n listener = listener._svgjsListenerId;\n if (!listener) return;\n } // events can be an array of events or a string or undefined\n\n\n events = Array.isArray(events) ? events : (events || '').split(delimiter);\n events.forEach(function (event) {\n const ev = event && event.split('.')[0];\n const ns = event && event.split('.')[1];\n let namespace, l;\n\n if (listener) {\n // remove listener reference\n if (bag[ev] && bag[ev][ns || '*']) {\n // removeListener\n n.removeEventListener(ev, bag[ev][ns || '*'][listener], options || false);\n delete bag[ev][ns || '*'][listener];\n }\n } else if (ev && ns) {\n // remove all listeners for a namespaced event\n if (bag[ev] && bag[ev][ns]) {\n for (l in bag[ev][ns]) {\n off(n, [ev, ns].join('.'), l);\n }\n\n delete bag[ev][ns];\n }\n } else if (ns) {\n // remove all listeners for a specific namespace\n for (event in bag) {\n for (namespace in bag[event]) {\n if (ns === namespace) {\n off(n, [event, ns].join('.'));\n }\n }\n }\n } else if (ev) {\n // remove all listeners for the event\n if (bag[ev]) {\n for (namespace in bag[ev]) {\n off(n, [ev, namespace].join('.'));\n }\n\n delete bag[ev];\n }\n } else {\n // remove all listeners on a given node\n for (event in bag) {\n off(n, event);\n }\n\n clearEvents(instance);\n }\n });\n}\nfunction dispatch(node, event, data, options) {\n const n = getEventTarget(node); // Dispatch event\n\n if (event instanceof globals.window.Event) {\n n.dispatchEvent(event);\n } else {\n event = new globals.window.CustomEvent(event, {\n detail: data,\n cancelable: true,\n ...options\n });\n n.dispatchEvent(event);\n }\n\n return event;\n}\n\nclass EventTarget extends Base {\n addEventListener() {}\n\n dispatch(event, data, options) {\n return dispatch(this, event, data, options);\n }\n\n dispatchEvent(event) {\n const bag = this.getEventHolder().events;\n if (!bag) return true;\n const events = bag[event.type];\n\n for (const i in events) {\n for (const j in events[i]) {\n events[i][j](event);\n }\n }\n\n return !event.defaultPrevented;\n } // Fire given event\n\n\n fire(event, data, options) {\n this.dispatch(event, data, options);\n return this;\n }\n\n getEventHolder() {\n return this;\n }\n\n getEventTarget() {\n return this;\n } // Unbind event from listener\n\n\n off(event, listener, options) {\n off(this, event, listener, options);\n return this;\n } // Bind given event to listener\n\n\n on(event, listener, binding, options) {\n on(this, event, listener, binding, options);\n return this;\n }\n\n removeEventListener() {}\n\n}\nregister(EventTarget, 'EventTarget');\n\nfunction noop() {} // Default animation values\n\nconst timeline = {\n duration: 400,\n ease: '>',\n delay: 0\n}; // Default attribute values\n\nconst attrs = {\n // fill and stroke\n 'fill-opacity': 1,\n 'stroke-opacity': 1,\n 'stroke-width': 0,\n 'stroke-linejoin': 'miter',\n 'stroke-linecap': 'butt',\n fill: '#000000',\n stroke: '#000000',\n opacity: 1,\n // position\n x: 0,\n y: 0,\n cx: 0,\n cy: 0,\n // size\n width: 0,\n height: 0,\n // radius\n r: 0,\n rx: 0,\n ry: 0,\n // gradient\n offset: 0,\n 'stop-opacity': 1,\n 'stop-color': '#000000',\n // text\n 'text-anchor': 'start'\n};\n\nvar defaults = {\n __proto__: null,\n noop: noop,\n timeline: timeline,\n attrs: attrs\n};\n\nclass SVGArray extends Array {\n constructor(...args) {\n super(...args);\n this.init(...args);\n }\n\n clone() {\n return new this.constructor(this);\n }\n\n init(arr) {\n // This catches the case, that native map tries to create an array with new Array(1)\n if (typeof arr === 'number') return this;\n this.length = 0;\n this.push(...this.parse(arr));\n return this;\n } // Parse whitespace separated string\n\n\n parse(array = []) {\n // If already is an array, no need to parse it\n if (array instanceof Array) return array;\n return array.trim().split(delimiter).map(parseFloat);\n }\n\n toArray() {\n return Array.prototype.concat.apply([], this);\n }\n\n toSet() {\n return new Set(this);\n }\n\n toString() {\n return this.join(' ');\n } // Flattens the array if needed\n\n\n valueOf() {\n const ret = [];\n ret.push(...this);\n return ret;\n }\n\n}\n\nclass SVGNumber {\n // Initialize\n constructor(...args) {\n this.init(...args);\n }\n\n convert(unit) {\n return new SVGNumber(this.value, unit);\n } // Divide number\n\n\n divide(number) {\n number = new SVGNumber(number);\n return new SVGNumber(this / number, this.unit || number.unit);\n }\n\n init(value, unit) {\n unit = Array.isArray(value) ? value[1] : unit;\n value = Array.isArray(value) ? value[0] : value; // initialize defaults\n\n this.value = 0;\n this.unit = unit || ''; // parse value\n\n if (typeof value === 'number') {\n // ensure a valid numeric value\n this.value = isNaN(value) ? 0 : !isFinite(value) ? value < 0 ? -3.4e+38 : +3.4e+38 : value;\n } else if (typeof value === 'string') {\n unit = value.match(numberAndUnit);\n\n if (unit) {\n // make value numeric\n this.value = parseFloat(unit[1]); // normalize\n\n if (unit[5] === '%') {\n this.value /= 100;\n } else if (unit[5] === 's') {\n this.value *= 1000;\n } // store unit\n\n\n this.unit = unit[5];\n }\n } else {\n if (value instanceof SVGNumber) {\n this.value = value.valueOf();\n this.unit = value.unit;\n }\n }\n\n return this;\n } // Subtract number\n\n\n minus(number) {\n number = new SVGNumber(number);\n return new SVGNumber(this - number, this.unit || number.unit);\n } // Add number\n\n\n plus(number) {\n number = new SVGNumber(number);\n return new SVGNumber(this + number, this.unit || number.unit);\n } // Multiply number\n\n\n times(number) {\n number = new SVGNumber(number);\n return new SVGNumber(this * number, this.unit || number.unit);\n }\n\n toArray() {\n return [this.value, this.unit];\n }\n\n toJSON() {\n return this.toString();\n }\n\n toString() {\n return (this.unit === '%' ? ~~(this.value * 1e8) / 1e6 : this.unit === 's' ? this.value / 1e3 : this.value) + this.unit;\n }\n\n valueOf() {\n return this.value;\n }\n\n}\n\nconst hooks = [];\nfunction registerAttrHook(fn) {\n hooks.push(fn);\n} // Set svg element attribute\n\nfunction attr(attr, val, ns) {\n // act as full getter\n if (attr == null) {\n // get an object of attributes\n attr = {};\n val = this.node.attributes;\n\n for (const node of val) {\n attr[node.nodeName] = isNumber.test(node.nodeValue) ? parseFloat(node.nodeValue) : node.nodeValue;\n }\n\n return attr;\n } else if (attr instanceof Array) {\n // loop through array and get all values\n return attr.reduce((last, curr) => {\n last[curr] = this.attr(curr);\n return last;\n }, {});\n } else if (typeof attr === 'object' && attr.constructor === Object) {\n // apply every attribute individually if an object is passed\n for (val in attr) this.attr(val, attr[val]);\n } else if (val === null) {\n // remove value\n this.node.removeAttribute(attr);\n } else if (val == null) {\n // act as a getter if the first and only argument is not an object\n val = this.node.getAttribute(attr);\n return val == null ? attrs[attr] : isNumber.test(val) ? parseFloat(val) : val;\n } else {\n // Loop through hooks and execute them to convert value\n val = hooks.reduce((_val, hook) => {\n return hook(attr, _val, this);\n }, val); // ensure correct numeric values (also accepts NaN and Infinity)\n\n if (typeof val === 'number') {\n val = new SVGNumber(val);\n } else if (Color.isColor(val)) {\n // ensure full hex color\n val = new Color(val);\n } else if (val.constructor === Array) {\n // Check for plain arrays and parse array values\n val = new SVGArray(val);\n } // if the passed attribute is leading...\n\n\n if (attr === 'leading') {\n // ... call the leading method instead\n if (this.leading) {\n this.leading(val);\n }\n } else {\n // set given attribute on node\n typeof ns === 'string' ? this.node.setAttributeNS(ns, attr, val.toString()) : this.node.setAttribute(attr, val.toString());\n } // rebuild if required\n\n\n if (this.rebuild && (attr === 'font-size' || attr === 'x')) {\n this.rebuild();\n }\n }\n\n return this;\n}\n\nclass Dom extends EventTarget {\n constructor(node, attrs) {\n super();\n this.node = node;\n this.type = node.nodeName;\n\n if (attrs && node !== attrs) {\n this.attr(attrs);\n }\n } // Add given element at a position\n\n\n add(element, i) {\n element = makeInstance(element); // If non-root svg nodes are added we have to remove their namespaces\n\n if (element.removeNamespace && this.node instanceof globals.window.SVGElement) {\n element.removeNamespace();\n }\n\n if (i == null) {\n this.node.appendChild(element.node);\n } else if (element.node !== this.node.childNodes[i]) {\n this.node.insertBefore(element.node, this.node.childNodes[i]);\n }\n\n return this;\n } // Add element to given container and return self\n\n\n addTo(parent, i) {\n return makeInstance(parent).put(this, i);\n } // Returns all child elements\n\n\n children() {\n return new List(map(this.node.children, function (node) {\n return adopt(node);\n }));\n } // Remove all elements in this container\n\n\n clear() {\n // remove children\n while (this.node.hasChildNodes()) {\n this.node.removeChild(this.node.lastChild);\n }\n\n return this;\n } // Clone element\n\n\n clone(deep = true) {\n // write dom data to the dom so the clone can pickup the data\n this.writeDataToDom(); // clone element and assign new id\n\n return new this.constructor(assignNewId(this.node.cloneNode(deep)));\n } // Iterates over all children and invokes a given block\n\n\n each(block, deep) {\n const children = this.children();\n let i, il;\n\n for (i = 0, il = children.length; i < il; i++) {\n block.apply(children[i], [i, children]);\n\n if (deep) {\n children[i].each(block, deep);\n }\n }\n\n return this;\n }\n\n element(nodeName, attrs) {\n return this.put(new Dom(create(nodeName), attrs));\n } // Get first child\n\n\n first() {\n return adopt(this.node.firstChild);\n } // Get a element at the given index\n\n\n get(i) {\n return adopt(this.node.childNodes[i]);\n }\n\n getEventHolder() {\n return this.node;\n }\n\n getEventTarget() {\n return this.node;\n } // Checks if the given element is a child\n\n\n has(element) {\n return this.index(element) >= 0;\n }\n\n html(htmlOrFn, outerHTML) {\n return this.xml(htmlOrFn, outerHTML, html);\n } // Get / set id\n\n\n id(id) {\n // generate new id if no id set\n if (typeof id === 'undefined' && !this.node.id) {\n this.node.id = eid(this.type);\n } // don't set directly with this.node.id to make `null` work correctly\n\n\n return this.attr('id', id);\n } // Gets index of given element\n\n\n index(element) {\n return [].slice.call(this.node.childNodes).indexOf(element.node);\n } // Get the last child\n\n\n last() {\n return adopt(this.node.lastChild);\n } // matches the element vs a css selector\n\n\n matches(selector) {\n const el = this.node;\n const matcher = el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector || null;\n return matcher && matcher.call(el, selector);\n } // Returns the parent element instance\n\n\n parent(type) {\n let parent = this; // check for parent\n\n if (!parent.node.parentNode) return null; // get parent element\n\n parent = adopt(parent.node.parentNode);\n if (!type) return parent; // loop trough ancestors if type is given\n\n do {\n if (typeof type === 'string' ? parent.matches(type) : parent instanceof type) return parent;\n } while (parent = adopt(parent.node.parentNode));\n\n return parent;\n } // Basically does the same as `add()` but returns the added element instead\n\n\n put(element, i) {\n element = makeInstance(element);\n this.add(element, i);\n return element;\n } // Add element to given container and return container\n\n\n putIn(parent, i) {\n return makeInstance(parent).add(this, i);\n } // Remove element\n\n\n remove() {\n if (this.parent()) {\n this.parent().removeElement(this);\n }\n\n return this;\n } // Remove a given child\n\n\n removeElement(element) {\n this.node.removeChild(element.node);\n return this;\n } // Replace this with element\n\n\n replace(element) {\n element = makeInstance(element);\n\n if (this.node.parentNode) {\n this.node.parentNode.replaceChild(element.node, this.node);\n }\n\n return element;\n }\n\n round(precision = 2, map = null) {\n const factor = 10 ** precision;\n const attrs = this.attr(map);\n\n for (const i in attrs) {\n if (typeof attrs[i] === 'number') {\n attrs[i] = Math.round(attrs[i] * factor) / factor;\n }\n }\n\n this.attr(attrs);\n return this;\n } // Import / Export raw svg\n\n\n svg(svgOrFn, outerSVG) {\n return this.xml(svgOrFn, outerSVG, svg);\n } // Return id on string conversion\n\n\n toString() {\n return this.id();\n }\n\n words(text) {\n // This is faster than removing all children and adding a new one\n this.node.textContent = text;\n return this;\n }\n\n wrap(node) {\n const parent = this.parent();\n\n if (!parent) {\n return this.addTo(node);\n }\n\n const position = parent.index(this);\n return parent.put(node, position).put(this);\n } // write svgjs data to the dom\n\n\n writeDataToDom() {\n // dump variables recursively\n this.each(function () {\n this.writeDataToDom();\n });\n return this;\n } // Import / Export raw svg\n\n\n xml(xmlOrFn, outerXML, ns) {\n if (typeof xmlOrFn === 'boolean') {\n ns = outerXML;\n outerXML = xmlOrFn;\n xmlOrFn = null;\n } // act as getter if no svg string is given\n\n\n if (xmlOrFn == null || typeof xmlOrFn === 'function') {\n // The default for exports is, that the outerNode is included\n outerXML = outerXML == null ? true : outerXML; // write svgjs data to the dom\n\n this.writeDataToDom();\n let current = this; // An export modifier was passed\n\n if (xmlOrFn != null) {\n current = adopt(current.node.cloneNode(true)); // If the user wants outerHTML we need to process this node, too\n\n if (outerXML) {\n const result = xmlOrFn(current);\n current = result || current; // The user does not want this node? Well, then he gets nothing\n\n if (result === false) return '';\n } // Deep loop through all children and apply modifier\n\n\n current.each(function () {\n const result = xmlOrFn(this);\n\n const _this = result || this; // If modifier returns false, discard node\n\n\n if (result === false) {\n this.remove(); // If modifier returns new node, use it\n } else if (result && this !== _this) {\n this.replace(_this);\n }\n }, true);\n } // Return outer or inner content\n\n\n return outerXML ? current.node.outerHTML : current.node.innerHTML;\n } // Act as setter if we got a string\n // The default for import is, that the current node is not replaced\n\n\n outerXML = outerXML == null ? false : outerXML; // Create temporary holder\n\n const well = create('wrapper', ns);\n const fragment = globals.document.createDocumentFragment(); // Dump raw svg\n\n well.innerHTML = xmlOrFn; // Transplant nodes into the fragment\n\n for (let len = well.children.length; len--;) {\n fragment.appendChild(well.firstElementChild);\n }\n\n const parent = this.parent(); // Add the whole fragment at once\n\n return outerXML ? this.replace(fragment) && parent : this.add(fragment);\n }\n\n}\nextend(Dom, {\n attr,\n find,\n findOne\n});\nregister(Dom, 'Dom');\n\nclass Element extends Dom {\n constructor(node, attrs) {\n super(node, attrs); // initialize data object\n\n this.dom = {}; // create circular reference\n\n this.node.instance = this;\n\n if (node.hasAttribute('svgjs:data')) {\n // pull svgjs data from the dom (getAttributeNS doesn't work in html5)\n this.setData(JSON.parse(node.getAttribute('svgjs:data')) || {});\n }\n } // Move element by its center\n\n\n center(x, y) {\n return this.cx(x).cy(y);\n } // Move by center over x-axis\n\n\n cx(x) {\n return x == null ? this.x() + this.width() / 2 : this.x(x - this.width() / 2);\n } // Move by center over y-axis\n\n\n cy(y) {\n return y == null ? this.y() + this.height() / 2 : this.y(y - this.height() / 2);\n } // Get defs\n\n\n defs() {\n const root = this.root();\n return root && root.defs();\n } // Relative move over x and y axes\n\n\n dmove(x, y) {\n return this.dx(x).dy(y);\n } // Relative move over x axis\n\n\n dx(x = 0) {\n return this.x(new SVGNumber(x).plus(this.x()));\n } // Relative move over y axis\n\n\n dy(y = 0) {\n return this.y(new SVGNumber(y).plus(this.y()));\n }\n\n getEventHolder() {\n return this;\n } // Set height of element\n\n\n height(height) {\n return this.attr('height', height);\n } // Move element to given x and y values\n\n\n move(x, y) {\n return this.x(x).y(y);\n } // return array of all ancestors of given type up to the root svg\n\n\n parents(until = this.root()) {\n const isSelector = typeof until === 'string';\n\n if (!isSelector) {\n until = makeInstance(until);\n }\n\n const parents = new List();\n let parent = this;\n\n while ((parent = parent.parent()) && parent.node !== globals.document && parent.nodeName !== '#document-fragment') {\n parents.push(parent);\n\n if (!isSelector && parent.node === until.node) {\n break;\n }\n\n if (isSelector && parent.matches(until)) {\n break;\n }\n\n if (parent.node === this.root().node) {\n // We worked our way to the root and didn't match `until`\n return null;\n }\n }\n\n return parents;\n } // Get referenced element form attribute value\n\n\n reference(attr) {\n attr = this.attr(attr);\n if (!attr) return null;\n const m = (attr + '').match(reference);\n return m ? makeInstance(m[1]) : null;\n } // Get parent document\n\n\n root() {\n const p = this.parent(getClass(root));\n return p && p.root();\n } // set given data to the elements data property\n\n\n setData(o) {\n this.dom = o;\n return this;\n } // Set element size to given width and height\n\n\n size(width, height) {\n const p = proportionalSize(this, width, height);\n return this.width(new SVGNumber(p.width)).height(new SVGNumber(p.height));\n } // Set width of element\n\n\n width(width) {\n return this.attr('width', width);\n } // write svgjs data to the dom\n\n\n writeDataToDom() {\n // remove previously set data\n this.node.removeAttribute('svgjs:data');\n\n if (Object.keys(this.dom).length) {\n this.node.setAttribute('svgjs:data', JSON.stringify(this.dom)); // see #428\n }\n\n return super.writeDataToDom();\n } // Move over x-axis\n\n\n x(x) {\n return this.attr('x', x);\n } // Move over y-axis\n\n\n y(y) {\n return this.attr('y', y);\n }\n\n}\nextend(Element, {\n bbox,\n rbox,\n inside,\n point,\n ctm,\n screenCTM\n});\nregister(Element, 'Element');\n\nconst sugar = {\n stroke: ['color', 'width', 'opacity', 'linecap', 'linejoin', 'miterlimit', 'dasharray', 'dashoffset'],\n fill: ['color', 'opacity', 'rule'],\n prefix: function (t, a) {\n return a === 'color' ? t : t + '-' + a;\n }\n} // Add sugar for fill and stroke\n;\n['fill', 'stroke'].forEach(function (m) {\n const extension = {};\n let i;\n\n extension[m] = function (o) {\n if (typeof o === 'undefined') {\n return this.attr(m);\n }\n\n if (typeof o === 'string' || o instanceof Color || Color.isRgb(o) || o instanceof Element) {\n this.attr(m, o);\n } else {\n // set all attributes from sugar.fill and sugar.stroke list\n for (i = sugar[m].length - 1; i >= 0; i--) {\n if (o[sugar[m][i]] != null) {\n this.attr(sugar.prefix(m, sugar[m][i]), o[sugar[m][i]]);\n }\n }\n }\n\n return this;\n };\n\n registerMethods(['Element', 'Runner'], extension);\n});\nregisterMethods(['Element', 'Runner'], {\n // Let the user set the matrix directly\n matrix: function (mat, b, c, d, e, f) {\n // Act as a getter\n if (mat == null) {\n return new Matrix(this);\n } // Act as a setter, the user can pass a matrix or a set of numbers\n\n\n return this.attr('transform', new Matrix(mat, b, c, d, e, f));\n },\n // Map rotation to transform\n rotate: function (angle, cx, cy) {\n return this.transform({\n rotate: angle,\n ox: cx,\n oy: cy\n }, true);\n },\n // Map skew to transform\n skew: function (x, y, cx, cy) {\n return arguments.length === 1 || arguments.length === 3 ? this.transform({\n skew: x,\n ox: y,\n oy: cx\n }, true) : this.transform({\n skew: [x, y],\n ox: cx,\n oy: cy\n }, true);\n },\n shear: function (lam, cx, cy) {\n return this.transform({\n shear: lam,\n ox: cx,\n oy: cy\n }, true);\n },\n // Map scale to transform\n scale: function (x, y, cx, cy) {\n return arguments.length === 1 || arguments.length === 3 ? this.transform({\n scale: x,\n ox: y,\n oy: cx\n }, true) : this.transform({\n scale: [x, y],\n ox: cx,\n oy: cy\n }, true);\n },\n // Map translate to transform\n translate: function (x, y) {\n return this.transform({\n translate: [x, y]\n }, true);\n },\n // Map relative translations to transform\n relative: function (x, y) {\n return this.transform({\n relative: [x, y]\n }, true);\n },\n // Map flip to transform\n flip: function (direction = 'both', origin = 'center') {\n if ('xybothtrue'.indexOf(direction) === -1) {\n origin = direction;\n direction = 'both';\n }\n\n return this.transform({\n flip: direction,\n origin: origin\n }, true);\n },\n // Opacity\n opacity: function (value) {\n return this.attr('opacity', value);\n }\n});\nregisterMethods('radius', {\n // Add x and y radius\n radius: function (x, y = x) {\n const type = (this._element || this).type;\n return type === 'radialGradient' ? this.attr('r', new SVGNumber(x)) : this.rx(x).ry(y);\n }\n});\nregisterMethods('Path', {\n // Get path length\n length: function () {\n return this.node.getTotalLength();\n },\n // Get point at length\n pointAt: function (length) {\n return new Point(this.node.getPointAtLength(length));\n }\n});\nregisterMethods(['Element', 'Runner'], {\n // Set font\n font: function (a, v) {\n if (typeof a === 'object') {\n for (v in a) this.font(v, a[v]);\n\n return this;\n }\n\n return a === 'leading' ? this.leading(v) : a === 'anchor' ? this.attr('text-anchor', v) : a === 'size' || a === 'family' || a === 'weight' || a === 'stretch' || a === 'variant' || a === 'style' ? this.attr('font-' + a, v) : this.attr(a, v);\n }\n}); // Add events to elements\n\nconst methods = ['click', 'dblclick', 'mousedown', 'mouseup', 'mouseover', 'mouseout', 'mousemove', 'mouseenter', 'mouseleave', 'touchstart', 'touchmove', 'touchleave', 'touchend', 'touchcancel'].reduce(function (last, event) {\n // add event to Element\n const fn = function (f) {\n if (f === null) {\n this.off(event);\n } else {\n this.on(event, f);\n }\n\n return this;\n };\n\n last[event] = fn;\n return last;\n}, {});\nregisterMethods('Element', methods);\n\nfunction untransform() {\n return this.attr('transform', null);\n} // merge the whole transformation chain into one matrix and returns it\n\nfunction matrixify() {\n const matrix = (this.attr('transform') || '' // split transformations\n ).split(transforms).slice(0, -1).map(function (str) {\n // generate key => value pairs\n const kv = str.trim().split('(');\n return [kv[0], kv[1].split(delimiter).map(function (str) {\n return parseFloat(str);\n })];\n }).reverse() // merge every transformation into one matrix\n .reduce(function (matrix, transform) {\n if (transform[0] === 'matrix') {\n return matrix.lmultiply(Matrix.fromArray(transform[1]));\n }\n\n return matrix[transform[0]].apply(matrix, transform[1]);\n }, new Matrix());\n return matrix;\n} // add an element to another parent without changing the visual representation on the screen\n\nfunction toParent(parent, i) {\n if (this === parent) return this;\n const ctm = this.screenCTM();\n const pCtm = parent.screenCTM().inverse();\n this.addTo(parent, i).untransform().transform(pCtm.multiply(ctm));\n return this;\n} // same as above with parent equals root-svg\n\nfunction toRoot(i) {\n return this.toParent(this.root(), i);\n} // Add transformations\n\nfunction transform(o, relative) {\n // Act as a getter if no object was passed\n if (o == null || typeof o === 'string') {\n const decomposed = new Matrix(this).decompose();\n return o == null ? decomposed : decomposed[o];\n }\n\n if (!Matrix.isMatrixLike(o)) {\n // Set the origin according to the defined transform\n o = { ...o,\n origin: getOrigin(o, this)\n };\n } // The user can pass a boolean, an Element or an Matrix or nothing\n\n\n const cleanRelative = relative === true ? this : relative || false;\n const result = new Matrix(cleanRelative).transform(o);\n return this.attr('transform', result);\n}\nregisterMethods('Element', {\n untransform,\n matrixify,\n toParent,\n toRoot,\n transform\n});\n\nclass Container extends Element {\n flatten(parent = this, index) {\n this.each(function () {\n if (this instanceof Container) {\n return this.flatten().ungroup();\n }\n });\n return this;\n }\n\n ungroup(parent = this.parent(), index = parent.index(this)) {\n // when parent != this, we want append all elements to the end\n index = index === -1 ? parent.children().length : index;\n this.each(function (i, children) {\n // reverse each\n return children[children.length - i - 1].toParent(parent, index);\n });\n return this.remove();\n }\n\n}\nregister(Container, 'Container');\n\nclass Defs extends Container {\n constructor(node, attrs = node) {\n super(nodeOrNew('defs', node), attrs);\n }\n\n flatten() {\n return this;\n }\n\n ungroup() {\n return this;\n }\n\n}\nregister(Defs, 'Defs');\n\nclass Shape extends Element {}\nregister(Shape, 'Shape');\n\nfunction rx(rx) {\n return this.attr('rx', rx);\n} // Radius y value\n\nfunction ry(ry) {\n return this.attr('ry', ry);\n} // Move over x-axis\n\nfunction x$3(x) {\n return x == null ? this.cx() - this.rx() : this.cx(x + this.rx());\n} // Move over y-axis\n\nfunction y$3(y) {\n return y == null ? this.cy() - this.ry() : this.cy(y + this.ry());\n} // Move by center over x-axis\n\nfunction cx$1(x) {\n return this.attr('cx', x);\n} // Move by center over y-axis\n\nfunction cy$1(y) {\n return this.attr('cy', y);\n} // Set width of element\n\nfunction width$2(width) {\n return width == null ? this.rx() * 2 : this.rx(new SVGNumber(width).divide(2));\n} // Set height of element\n\nfunction height$2(height) {\n return height == null ? this.ry() * 2 : this.ry(new SVGNumber(height).divide(2));\n}\n\nvar circled = {\n __proto__: null,\n rx: rx,\n ry: ry,\n x: x$3,\n y: y$3,\n cx: cx$1,\n cy: cy$1,\n width: width$2,\n height: height$2\n};\n\nclass Ellipse extends Shape {\n constructor(node, attrs = node) {\n super(nodeOrNew('ellipse', node), attrs);\n }\n\n size(width, height) {\n const p = proportionalSize(this, width, height);\n return this.rx(new SVGNumber(p.width).divide(2)).ry(new SVGNumber(p.height).divide(2));\n }\n\n}\nextend(Ellipse, circled);\nregisterMethods('Container', {\n // Create an ellipse\n ellipse: wrapWithAttrCheck(function (width = 0, height = width) {\n return this.put(new Ellipse()).size(width, height).move(0, 0);\n })\n});\nregister(Ellipse, 'Ellipse');\n\nclass Fragment extends Dom {\n constructor(node = globals.document.createDocumentFragment()) {\n super(node);\n } // Import / Export raw xml\n\n\n xml(xmlOrFn, outerXML, ns) {\n if (typeof xmlOrFn === 'boolean') {\n ns = outerXML;\n outerXML = xmlOrFn;\n xmlOrFn = null;\n } // because this is a fragment we have to put all elements into a wrapper first\n // before we can get the innerXML from it\n\n\n if (xmlOrFn == null || typeof xmlOrFn === 'function') {\n const wrapper = new Dom(create('wrapper', ns));\n wrapper.add(this.node.cloneNode(true));\n return wrapper.xml(false, ns);\n } // Act as setter if we got a string\n\n\n return super.xml(xmlOrFn, false, ns);\n }\n\n}\n\nregister(Fragment, 'Fragment');\n\nfunction from(x, y) {\n return (this._element || this).type === 'radialGradient' ? this.attr({\n fx: new SVGNumber(x),\n fy: new SVGNumber(y)\n }) : this.attr({\n x1: new SVGNumber(x),\n y1: new SVGNumber(y)\n });\n}\nfunction to(x, y) {\n return (this._element || this).type === 'radialGradient' ? this.attr({\n cx: new SVGNumber(x),\n cy: new SVGNumber(y)\n }) : this.attr({\n x2: new SVGNumber(x),\n y2: new SVGNumber(y)\n });\n}\n\nvar gradiented = {\n __proto__: null,\n from: from,\n to: to\n};\n\nclass Gradient extends Container {\n constructor(type, attrs) {\n super(nodeOrNew(type + 'Gradient', typeof type === 'string' ? null : type), attrs);\n } // custom attr to handle transform\n\n\n attr(a, b, c) {\n if (a === 'transform') a = 'gradientTransform';\n return super.attr(a, b, c);\n }\n\n bbox() {\n return new Box();\n }\n\n targets() {\n return baseFind('svg [fill*=\"' + this.id() + '\"]');\n } // Alias string conversion to fill\n\n\n toString() {\n return this.url();\n } // Update gradient\n\n\n update(block) {\n // remove all stops\n this.clear(); // invoke passed block\n\n if (typeof block === 'function') {\n block.call(this, this);\n }\n\n return this;\n } // Return the fill id\n\n\n url() {\n return 'url(\"#' + this.id() + '\")';\n }\n\n}\nextend(Gradient, gradiented);\nregisterMethods({\n Container: {\n // Create gradient element in defs\n gradient(...args) {\n return this.defs().gradient(...args);\n }\n\n },\n // define gradient\n Defs: {\n gradient: wrapWithAttrCheck(function (type, block) {\n return this.put(new Gradient(type)).update(block);\n })\n }\n});\nregister(Gradient, 'Gradient');\n\nclass Pattern extends Container {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('pattern', node), attrs);\n } // custom attr to handle transform\n\n\n attr(a, b, c) {\n if (a === 'transform') a = 'patternTransform';\n return super.attr(a, b, c);\n }\n\n bbox() {\n return new Box();\n }\n\n targets() {\n return baseFind('svg [fill*=\"' + this.id() + '\"]');\n } // Alias string conversion to fill\n\n\n toString() {\n return this.url();\n } // Update pattern by rebuilding\n\n\n update(block) {\n // remove content\n this.clear(); // invoke passed block\n\n if (typeof block === 'function') {\n block.call(this, this);\n }\n\n return this;\n } // Return the fill id\n\n\n url() {\n return 'url(\"#' + this.id() + '\")';\n }\n\n}\nregisterMethods({\n Container: {\n // Create pattern element in defs\n pattern(...args) {\n return this.defs().pattern(...args);\n }\n\n },\n Defs: {\n pattern: wrapWithAttrCheck(function (width, height, block) {\n return this.put(new Pattern()).update(block).attr({\n x: 0,\n y: 0,\n width: width,\n height: height,\n patternUnits: 'userSpaceOnUse'\n });\n })\n }\n});\nregister(Pattern, 'Pattern');\n\nclass Image extends Shape {\n constructor(node, attrs = node) {\n super(nodeOrNew('image', node), attrs);\n } // (re)load image\n\n\n load(url, callback) {\n if (!url) return this;\n const img = new globals.window.Image();\n on(img, 'load', function (e) {\n const p = this.parent(Pattern); // ensure image size\n\n if (this.width() === 0 && this.height() === 0) {\n this.size(img.width, img.height);\n }\n\n if (p instanceof Pattern) {\n // ensure pattern size if not set\n if (p.width() === 0 && p.height() === 0) {\n p.size(this.width(), this.height());\n }\n }\n\n if (typeof callback === 'function') {\n callback.call(this, e);\n }\n }, this);\n on(img, 'load error', function () {\n // dont forget to unbind memory leaking events\n off(img);\n });\n return this.attr('href', img.src = url, xlink);\n }\n\n}\nregisterAttrHook(function (attr, val, _this) {\n // convert image fill and stroke to patterns\n if (attr === 'fill' || attr === 'stroke') {\n if (isImage.test(val)) {\n val = _this.root().defs().image(val);\n }\n }\n\n if (val instanceof Image) {\n val = _this.root().defs().pattern(0, 0, pattern => {\n pattern.add(val);\n });\n }\n\n return val;\n});\nregisterMethods({\n Container: {\n // create image element, load image and set its size\n image: wrapWithAttrCheck(function (source, callback) {\n return this.put(new Image()).size(0, 0).load(source, callback);\n })\n }\n});\nregister(Image, 'Image');\n\nclass PointArray extends SVGArray {\n // Get bounding box of points\n bbox() {\n let maxX = -Infinity;\n let maxY = -Infinity;\n let minX = Infinity;\n let minY = Infinity;\n this.forEach(function (el) {\n maxX = Math.max(el[0], maxX);\n maxY = Math.max(el[1], maxY);\n minX = Math.min(el[0], minX);\n minY = Math.min(el[1], minY);\n });\n return new Box(minX, minY, maxX - minX, maxY - minY);\n } // Move point string\n\n\n move(x, y) {\n const box = this.bbox(); // get relative offset\n\n x -= box.x;\n y -= box.y; // move every point\n\n if (!isNaN(x) && !isNaN(y)) {\n for (let i = this.length - 1; i >= 0; i--) {\n this[i] = [this[i][0] + x, this[i][1] + y];\n }\n }\n\n return this;\n } // Parse point string and flat array\n\n\n parse(array = [0, 0]) {\n const points = []; // if it is an array, we flatten it and therefore clone it to 1 depths\n\n if (array instanceof Array) {\n array = Array.prototype.concat.apply([], array);\n } else {\n // Else, it is considered as a string\n // parse points\n array = array.trim().split(delimiter).map(parseFloat);\n } // validate points - https://svgwg.org/svg2-draft/shapes.html#DataTypePoints\n // Odd number of coordinates is an error. In such cases, drop the last odd coordinate.\n\n\n if (array.length % 2 !== 0) array.pop(); // wrap points in two-tuples\n\n for (let i = 0, len = array.length; i < len; i = i + 2) {\n points.push([array[i], array[i + 1]]);\n }\n\n return points;\n } // Resize poly string\n\n\n size(width, height) {\n let i;\n const box = this.bbox(); // recalculate position of all points according to new size\n\n for (i = this.length - 1; i >= 0; i--) {\n if (box.width) this[i][0] = (this[i][0] - box.x) * width / box.width + box.x;\n if (box.height) this[i][1] = (this[i][1] - box.y) * height / box.height + box.y;\n }\n\n return this;\n } // Convert array to line object\n\n\n toLine() {\n return {\n x1: this[0][0],\n y1: this[0][1],\n x2: this[1][0],\n y2: this[1][1]\n };\n } // Convert array to string\n\n\n toString() {\n const array = []; // convert to a poly point string\n\n for (let i = 0, il = this.length; i < il; i++) {\n array.push(this[i].join(','));\n }\n\n return array.join(' ');\n }\n\n transform(m) {\n return this.clone().transformO(m);\n } // transform points with matrix (similar to Point.transform)\n\n\n transformO(m) {\n if (!Matrix.isMatrixLike(m)) {\n m = new Matrix(m);\n }\n\n for (let i = this.length; i--;) {\n // Perform the matrix multiplication\n const [x, y] = this[i];\n this[i][0] = m.a * x + m.c * y + m.e;\n this[i][1] = m.b * x + m.d * y + m.f;\n }\n\n return this;\n }\n\n}\n\nconst MorphArray = PointArray; // Move by left top corner over x-axis\n\nfunction x$2(x) {\n return x == null ? this.bbox().x : this.move(x, this.bbox().y);\n} // Move by left top corner over y-axis\n\nfunction y$2(y) {\n return y == null ? this.bbox().y : this.move(this.bbox().x, y);\n} // Set width of element\n\nfunction width$1(width) {\n const b = this.bbox();\n return width == null ? b.width : this.size(width, b.height);\n} // Set height of element\n\nfunction height$1(height) {\n const b = this.bbox();\n return height == null ? b.height : this.size(b.width, height);\n}\n\nvar pointed = {\n __proto__: null,\n MorphArray: MorphArray,\n x: x$2,\n y: y$2,\n width: width$1,\n height: height$1\n};\n\nclass Line extends Shape {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('line', node), attrs);\n } // Get array\n\n\n array() {\n return new PointArray([[this.attr('x1'), this.attr('y1')], [this.attr('x2'), this.attr('y2')]]);\n } // Move by left top corner\n\n\n move(x, y) {\n return this.attr(this.array().move(x, y).toLine());\n } // Overwrite native plot() method\n\n\n plot(x1, y1, x2, y2) {\n if (x1 == null) {\n return this.array();\n } else if (typeof y1 !== 'undefined') {\n x1 = {\n x1,\n y1,\n x2,\n y2\n };\n } else {\n x1 = new PointArray(x1).toLine();\n }\n\n return this.attr(x1);\n } // Set element size to given width and height\n\n\n size(width, height) {\n const p = proportionalSize(this, width, height);\n return this.attr(this.array().size(p.width, p.height).toLine());\n }\n\n}\nextend(Line, pointed);\nregisterMethods({\n Container: {\n // Create a line element\n line: wrapWithAttrCheck(function (...args) {\n // make sure plot is called as a setter\n // x1 is not necessarily a number, it can also be an array, a string and a PointArray\n return Line.prototype.plot.apply(this.put(new Line()), args[0] != null ? args : [0, 0, 0, 0]);\n })\n }\n});\nregister(Line, 'Line');\n\nclass Marker extends Container {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('marker', node), attrs);\n } // Set height of element\n\n\n height(height) {\n return this.attr('markerHeight', height);\n }\n\n orient(orient) {\n return this.attr('orient', orient);\n } // Set marker refX and refY\n\n\n ref(x, y) {\n return this.attr('refX', x).attr('refY', y);\n } // Return the fill id\n\n\n toString() {\n return 'url(#' + this.id() + ')';\n } // Update marker\n\n\n update(block) {\n // remove all content\n this.clear(); // invoke passed block\n\n if (typeof block === 'function') {\n block.call(this, this);\n }\n\n return this;\n } // Set width of element\n\n\n width(width) {\n return this.attr('markerWidth', width);\n }\n\n}\nregisterMethods({\n Container: {\n marker(...args) {\n // Create marker element in defs\n return this.defs().marker(...args);\n }\n\n },\n Defs: {\n // Create marker\n marker: wrapWithAttrCheck(function (width, height, block) {\n // Set default viewbox to match the width and height, set ref to cx and cy and set orient to auto\n return this.put(new Marker()).size(width, height).ref(width / 2, height / 2).viewbox(0, 0, width, height).attr('orient', 'auto').update(block);\n })\n },\n marker: {\n // Create and attach markers\n marker(marker, width, height, block) {\n let attr = ['marker']; // Build attribute name\n\n if (marker !== 'all') attr.push(marker);\n attr = attr.join('-'); // Set marker attribute\n\n marker = arguments[1] instanceof Marker ? arguments[1] : this.defs().marker(width, height, block);\n return this.attr(attr, marker);\n }\n\n }\n});\nregister(Marker, 'Marker');\n\n/***\r\nBase Class\r\n==========\r\nThe base stepper class that will be\r\n***/\n\nfunction makeSetterGetter(k, f) {\n return function (v) {\n if (v == null) return this[k];\n this[k] = v;\n if (f) f.call(this);\n return this;\n };\n}\n\nconst easing = {\n '-': function (pos) {\n return pos;\n },\n '<>': function (pos) {\n return -Math.cos(pos * Math.PI) / 2 + 0.5;\n },\n '>': function (pos) {\n return Math.sin(pos * Math.PI / 2);\n },\n '<': function (pos) {\n return -Math.cos(pos * Math.PI / 2) + 1;\n },\n bezier: function (x1, y1, x2, y2) {\n // see https://www.w3.org/TR/css-easing-1/#cubic-bezier-algo\n return function (t) {\n if (t < 0) {\n if (x1 > 0) {\n return y1 / x1 * t;\n } else if (x2 > 0) {\n return y2 / x2 * t;\n } else {\n return 0;\n }\n } else if (t > 1) {\n if (x2 < 1) {\n return (1 - y2) / (1 - x2) * t + (y2 - x2) / (1 - x2);\n } else if (x1 < 1) {\n return (1 - y1) / (1 - x1) * t + (y1 - x1) / (1 - x1);\n } else {\n return 1;\n }\n } else {\n return 3 * t * (1 - t) ** 2 * y1 + 3 * t ** 2 * (1 - t) * y2 + t ** 3;\n }\n };\n },\n // see https://www.w3.org/TR/css-easing-1/#step-timing-function-algo\n steps: function (steps, stepPosition = 'end') {\n // deal with \"jump-\" prefix\n stepPosition = stepPosition.split('-').reverse()[0];\n let jumps = steps;\n\n if (stepPosition === 'none') {\n --jumps;\n } else if (stepPosition === 'both') {\n ++jumps;\n } // The beforeFlag is essentially useless\n\n\n return (t, beforeFlag = false) => {\n // Step is called currentStep in referenced url\n let step = Math.floor(t * steps);\n const jumping = t * step % 1 === 0;\n\n if (stepPosition === 'start' || stepPosition === 'both') {\n ++step;\n }\n\n if (beforeFlag && jumping) {\n --step;\n }\n\n if (t >= 0 && step < 0) {\n step = 0;\n }\n\n if (t <= 1 && step > jumps) {\n step = jumps;\n }\n\n return step / jumps;\n };\n }\n};\nclass Stepper {\n done() {\n return false;\n }\n\n}\n/***\r\nEasing Functions\r\n================\r\n***/\n\nclass Ease extends Stepper {\n constructor(fn = timeline.ease) {\n super();\n this.ease = easing[fn] || fn;\n }\n\n step(from, to, pos) {\n if (typeof from !== 'number') {\n return pos < 1 ? from : to;\n }\n\n return from + (to - from) * this.ease(pos);\n }\n\n}\n/***\r\nController Types\r\n================\r\n***/\n\nclass Controller extends Stepper {\n constructor(fn) {\n super();\n this.stepper = fn;\n }\n\n done(c) {\n return c.done;\n }\n\n step(current, target, dt, c) {\n return this.stepper(current, target, dt, c);\n }\n\n}\n\nfunction recalculate() {\n // Apply the default parameters\n const duration = (this._duration || 500) / 1000;\n const overshoot = this._overshoot || 0; // Calculate the PID natural response\n\n const eps = 1e-10;\n const pi = Math.PI;\n const os = Math.log(overshoot / 100 + eps);\n const zeta = -os / Math.sqrt(pi * pi + os * os);\n const wn = 3.9 / (zeta * duration); // Calculate the Spring values\n\n this.d = 2 * zeta * wn;\n this.k = wn * wn;\n}\n\nclass Spring extends Controller {\n constructor(duration = 500, overshoot = 0) {\n super();\n this.duration(duration).overshoot(overshoot);\n }\n\n step(current, target, dt, c) {\n if (typeof current === 'string') return current;\n c.done = dt === Infinity;\n if (dt === Infinity) return target;\n if (dt === 0) return current;\n if (dt > 100) dt = 16;\n dt /= 1000; // Get the previous velocity\n\n const velocity = c.velocity || 0; // Apply the control to get the new position and store it\n\n const acceleration = -this.d * velocity - this.k * (current - target);\n const newPosition = current + velocity * dt + acceleration * dt * dt / 2; // Store the velocity\n\n c.velocity = velocity + acceleration * dt; // Figure out if we have converged, and if so, pass the value\n\n c.done = Math.abs(target - newPosition) + Math.abs(velocity) < 0.002;\n return c.done ? target : newPosition;\n }\n\n}\nextend(Spring, {\n duration: makeSetterGetter('_duration', recalculate),\n overshoot: makeSetterGetter('_overshoot', recalculate)\n});\nclass PID extends Controller {\n constructor(p = 0.1, i = 0.01, d = 0, windup = 1000) {\n super();\n this.p(p).i(i).d(d).windup(windup);\n }\n\n step(current, target, dt, c) {\n if (typeof current === 'string') return current;\n c.done = dt === Infinity;\n if (dt === Infinity) return target;\n if (dt === 0) return current;\n const p = target - current;\n let i = (c.integral || 0) + p * dt;\n const d = (p - (c.error || 0)) / dt;\n const windup = this._windup; // antiwindup\n\n if (windup !== false) {\n i = Math.max(-windup, Math.min(i, windup));\n }\n\n c.error = p;\n c.integral = i;\n c.done = Math.abs(p) < 0.001;\n return c.done ? target : current + (this.P * p + this.I * i + this.D * d);\n }\n\n}\nextend(PID, {\n windup: makeSetterGetter('_windup'),\n p: makeSetterGetter('P'),\n i: makeSetterGetter('I'),\n d: makeSetterGetter('D')\n});\n\nconst segmentParameters = {\n M: 2,\n L: 2,\n H: 1,\n V: 1,\n C: 6,\n S: 4,\n Q: 4,\n T: 2,\n A: 7,\n Z: 0\n};\nconst pathHandlers = {\n M: function (c, p, p0) {\n p.x = p0.x = c[0];\n p.y = p0.y = c[1];\n return ['M', p.x, p.y];\n },\n L: function (c, p) {\n p.x = c[0];\n p.y = c[1];\n return ['L', c[0], c[1]];\n },\n H: function (c, p) {\n p.x = c[0];\n return ['H', c[0]];\n },\n V: function (c, p) {\n p.y = c[0];\n return ['V', c[0]];\n },\n C: function (c, p) {\n p.x = c[4];\n p.y = c[5];\n return ['C', c[0], c[1], c[2], c[3], c[4], c[5]];\n },\n S: function (c, p) {\n p.x = c[2];\n p.y = c[3];\n return ['S', c[0], c[1], c[2], c[3]];\n },\n Q: function (c, p) {\n p.x = c[2];\n p.y = c[3];\n return ['Q', c[0], c[1], c[2], c[3]];\n },\n T: function (c, p) {\n p.x = c[0];\n p.y = c[1];\n return ['T', c[0], c[1]];\n },\n Z: function (c, p, p0) {\n p.x = p0.x;\n p.y = p0.y;\n return ['Z'];\n },\n A: function (c, p) {\n p.x = c[5];\n p.y = c[6];\n return ['A', c[0], c[1], c[2], c[3], c[4], c[5], c[6]];\n }\n};\nconst mlhvqtcsaz = 'mlhvqtcsaz'.split('');\n\nfor (let i = 0, il = mlhvqtcsaz.length; i < il; ++i) {\n pathHandlers[mlhvqtcsaz[i]] = function (i) {\n return function (c, p, p0) {\n if (i === 'H') c[0] = c[0] + p.x;else if (i === 'V') c[0] = c[0] + p.y;else if (i === 'A') {\n c[5] = c[5] + p.x;\n c[6] = c[6] + p.y;\n } else {\n for (let j = 0, jl = c.length; j < jl; ++j) {\n c[j] = c[j] + (j % 2 ? p.y : p.x);\n }\n }\n return pathHandlers[i](c, p, p0);\n };\n }(mlhvqtcsaz[i].toUpperCase());\n}\n\nfunction makeAbsolut(parser) {\n const command = parser.segment[0];\n return pathHandlers[command](parser.segment.slice(1), parser.p, parser.p0);\n}\n\nfunction segmentComplete(parser) {\n return parser.segment.length && parser.segment.length - 1 === segmentParameters[parser.segment[0].toUpperCase()];\n}\n\nfunction startNewSegment(parser, token) {\n parser.inNumber && finalizeNumber(parser, false);\n const pathLetter = isPathLetter.test(token);\n\n if (pathLetter) {\n parser.segment = [token];\n } else {\n const lastCommand = parser.lastCommand;\n const small = lastCommand.toLowerCase();\n const isSmall = lastCommand === small;\n parser.segment = [small === 'm' ? isSmall ? 'l' : 'L' : lastCommand];\n }\n\n parser.inSegment = true;\n parser.lastCommand = parser.segment[0];\n return pathLetter;\n}\n\nfunction finalizeNumber(parser, inNumber) {\n if (!parser.inNumber) throw new Error('Parser Error');\n parser.number && parser.segment.push(parseFloat(parser.number));\n parser.inNumber = inNumber;\n parser.number = '';\n parser.pointSeen = false;\n parser.hasExponent = false;\n\n if (segmentComplete(parser)) {\n finalizeSegment(parser);\n }\n}\n\nfunction finalizeSegment(parser) {\n parser.inSegment = false;\n\n if (parser.absolute) {\n parser.segment = makeAbsolut(parser);\n }\n\n parser.segments.push(parser.segment);\n}\n\nfunction isArcFlag(parser) {\n if (!parser.segment.length) return false;\n const isArc = parser.segment[0].toUpperCase() === 'A';\n const length = parser.segment.length;\n return isArc && (length === 4 || length === 5);\n}\n\nfunction isExponential(parser) {\n return parser.lastToken.toUpperCase() === 'E';\n}\n\nfunction pathParser(d, toAbsolute = true) {\n let index = 0;\n let token = '';\n const parser = {\n segment: [],\n inNumber: false,\n number: '',\n lastToken: '',\n inSegment: false,\n segments: [],\n pointSeen: false,\n hasExponent: false,\n absolute: toAbsolute,\n p0: new Point(),\n p: new Point()\n };\n\n while (parser.lastToken = token, token = d.charAt(index++)) {\n if (!parser.inSegment) {\n if (startNewSegment(parser, token)) {\n continue;\n }\n }\n\n if (token === '.') {\n if (parser.pointSeen || parser.hasExponent) {\n finalizeNumber(parser, false);\n --index;\n continue;\n }\n\n parser.inNumber = true;\n parser.pointSeen = true;\n parser.number += token;\n continue;\n }\n\n if (!isNaN(parseInt(token))) {\n if (parser.number === '0' || isArcFlag(parser)) {\n parser.inNumber = true;\n parser.number = token;\n finalizeNumber(parser, true);\n continue;\n }\n\n parser.inNumber = true;\n parser.number += token;\n continue;\n }\n\n if (token === ' ' || token === ',') {\n if (parser.inNumber) {\n finalizeNumber(parser, false);\n }\n\n continue;\n }\n\n if (token === '-') {\n if (parser.inNumber && !isExponential(parser)) {\n finalizeNumber(parser, false);\n --index;\n continue;\n }\n\n parser.number += token;\n parser.inNumber = true;\n continue;\n }\n\n if (token.toUpperCase() === 'E') {\n parser.number += token;\n parser.hasExponent = true;\n continue;\n }\n\n if (isPathLetter.test(token)) {\n if (parser.inNumber) {\n finalizeNumber(parser, false);\n } else if (!segmentComplete(parser)) {\n throw new Error('parser Error');\n } else {\n finalizeSegment(parser);\n }\n\n --index;\n }\n }\n\n if (parser.inNumber) {\n finalizeNumber(parser, false);\n }\n\n if (parser.inSegment && segmentComplete(parser)) {\n finalizeSegment(parser);\n }\n\n return parser.segments;\n}\n\nfunction arrayToString(a) {\n let s = '';\n\n for (let i = 0, il = a.length; i < il; i++) {\n s += a[i][0];\n\n if (a[i][1] != null) {\n s += a[i][1];\n\n if (a[i][2] != null) {\n s += ' ';\n s += a[i][2];\n\n if (a[i][3] != null) {\n s += ' ';\n s += a[i][3];\n s += ' ';\n s += a[i][4];\n\n if (a[i][5] != null) {\n s += ' ';\n s += a[i][5];\n s += ' ';\n s += a[i][6];\n\n if (a[i][7] != null) {\n s += ' ';\n s += a[i][7];\n }\n }\n }\n }\n }\n }\n\n return s + ' ';\n}\n\nclass PathArray extends SVGArray {\n // Get bounding box of path\n bbox() {\n parser().path.setAttribute('d', this.toString());\n return new Box(parser.nodes.path.getBBox());\n } // Move path string\n\n\n move(x, y) {\n // get bounding box of current situation\n const box = this.bbox(); // get relative offset\n\n x -= box.x;\n y -= box.y;\n\n if (!isNaN(x) && !isNaN(y)) {\n // move every point\n for (let l, i = this.length - 1; i >= 0; i--) {\n l = this[i][0];\n\n if (l === 'M' || l === 'L' || l === 'T') {\n this[i][1] += x;\n this[i][2] += y;\n } else if (l === 'H') {\n this[i][1] += x;\n } else if (l === 'V') {\n this[i][1] += y;\n } else if (l === 'C' || l === 'S' || l === 'Q') {\n this[i][1] += x;\n this[i][2] += y;\n this[i][3] += x;\n this[i][4] += y;\n\n if (l === 'C') {\n this[i][5] += x;\n this[i][6] += y;\n }\n } else if (l === 'A') {\n this[i][6] += x;\n this[i][7] += y;\n }\n }\n }\n\n return this;\n } // Absolutize and parse path to array\n\n\n parse(d = 'M0 0') {\n if (Array.isArray(d)) {\n d = Array.prototype.concat.apply([], d).toString();\n }\n\n return pathParser(d);\n } // Resize path string\n\n\n size(width, height) {\n // get bounding box of current situation\n const box = this.bbox();\n let i, l; // If the box width or height is 0 then we ignore\n // transformations on the respective axis\n\n box.width = box.width === 0 ? 1 : box.width;\n box.height = box.height === 0 ? 1 : box.height; // recalculate position of all points according to new size\n\n for (i = this.length - 1; i >= 0; i--) {\n l = this[i][0];\n\n if (l === 'M' || l === 'L' || l === 'T') {\n this[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n this[i][2] = (this[i][2] - box.y) * height / box.height + box.y;\n } else if (l === 'H') {\n this[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n } else if (l === 'V') {\n this[i][1] = (this[i][1] - box.y) * height / box.height + box.y;\n } else if (l === 'C' || l === 'S' || l === 'Q') {\n this[i][1] = (this[i][1] - box.x) * width / box.width + box.x;\n this[i][2] = (this[i][2] - box.y) * height / box.height + box.y;\n this[i][3] = (this[i][3] - box.x) * width / box.width + box.x;\n this[i][4] = (this[i][4] - box.y) * height / box.height + box.y;\n\n if (l === 'C') {\n this[i][5] = (this[i][5] - box.x) * width / box.width + box.x;\n this[i][6] = (this[i][6] - box.y) * height / box.height + box.y;\n }\n } else if (l === 'A') {\n // resize radii\n this[i][1] = this[i][1] * width / box.width;\n this[i][2] = this[i][2] * height / box.height; // move position values\n\n this[i][6] = (this[i][6] - box.x) * width / box.width + box.x;\n this[i][7] = (this[i][7] - box.y) * height / box.height + box.y;\n }\n }\n\n return this;\n } // Convert array to string\n\n\n toString() {\n return arrayToString(this);\n }\n\n}\n\nconst getClassForType = value => {\n const type = typeof value;\n\n if (type === 'number') {\n return SVGNumber;\n } else if (type === 'string') {\n if (Color.isColor(value)) {\n return Color;\n } else if (delimiter.test(value)) {\n return isPathLetter.test(value) ? PathArray : SVGArray;\n } else if (numberAndUnit.test(value)) {\n return SVGNumber;\n } else {\n return NonMorphable;\n }\n } else if (morphableTypes.indexOf(value.constructor) > -1) {\n return value.constructor;\n } else if (Array.isArray(value)) {\n return SVGArray;\n } else if (type === 'object') {\n return ObjectBag;\n } else {\n return NonMorphable;\n }\n};\n\nclass Morphable {\n constructor(stepper) {\n this._stepper = stepper || new Ease('-');\n this._from = null;\n this._to = null;\n this._type = null;\n this._context = null;\n this._morphObj = null;\n }\n\n at(pos) {\n return this._morphObj.morph(this._from, this._to, pos, this._stepper, this._context);\n }\n\n done() {\n const complete = this._context.map(this._stepper.done).reduce(function (last, curr) {\n return last && curr;\n }, true);\n\n return complete;\n }\n\n from(val) {\n if (val == null) {\n return this._from;\n }\n\n this._from = this._set(val);\n return this;\n }\n\n stepper(stepper) {\n if (stepper == null) return this._stepper;\n this._stepper = stepper;\n return this;\n }\n\n to(val) {\n if (val == null) {\n return this._to;\n }\n\n this._to = this._set(val);\n return this;\n }\n\n type(type) {\n // getter\n if (type == null) {\n return this._type;\n } // setter\n\n\n this._type = type;\n return this;\n }\n\n _set(value) {\n if (!this._type) {\n this.type(getClassForType(value));\n }\n\n let result = new this._type(value);\n\n if (this._type === Color) {\n result = this._to ? result[this._to[4]]() : this._from ? result[this._from[4]]() : result;\n }\n\n if (this._type === ObjectBag) {\n result = this._to ? result.align(this._to) : this._from ? result.align(this._from) : result;\n }\n\n result = result.toConsumable();\n this._morphObj = this._morphObj || new this._type();\n this._context = this._context || Array.apply(null, Array(result.length)).map(Object).map(function (o) {\n o.done = true;\n return o;\n });\n return result;\n }\n\n}\nclass NonMorphable {\n constructor(...args) {\n this.init(...args);\n }\n\n init(val) {\n val = Array.isArray(val) ? val[0] : val;\n this.value = val;\n return this;\n }\n\n toArray() {\n return [this.value];\n }\n\n valueOf() {\n return this.value;\n }\n\n}\nclass TransformBag {\n constructor(...args) {\n this.init(...args);\n }\n\n init(obj) {\n if (Array.isArray(obj)) {\n obj = {\n scaleX: obj[0],\n scaleY: obj[1],\n shear: obj[2],\n rotate: obj[3],\n translateX: obj[4],\n translateY: obj[5],\n originX: obj[6],\n originY: obj[7]\n };\n }\n\n Object.assign(this, TransformBag.defaults, obj);\n return this;\n }\n\n toArray() {\n const v = this;\n return [v.scaleX, v.scaleY, v.shear, v.rotate, v.translateX, v.translateY, v.originX, v.originY];\n }\n\n}\nTransformBag.defaults = {\n scaleX: 1,\n scaleY: 1,\n shear: 0,\n rotate: 0,\n translateX: 0,\n translateY: 0,\n originX: 0,\n originY: 0\n};\n\nconst sortByKey = (a, b) => {\n return a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0;\n};\n\nclass ObjectBag {\n constructor(...args) {\n this.init(...args);\n }\n\n align(other) {\n const values = this.values;\n\n for (let i = 0, il = values.length; i < il; ++i) {\n // If the type is the same we only need to check if the color is in the correct format\n if (values[i + 1] === other[i + 1]) {\n if (values[i + 1] === Color && other[i + 7] !== values[i + 7]) {\n const space = other[i + 7];\n const color = new Color(this.values.splice(i + 3, 5))[space]().toArray();\n this.values.splice(i + 3, 0, ...color);\n }\n\n i += values[i + 2] + 2;\n continue;\n }\n\n if (!other[i + 1]) {\n return this;\n } // The types differ, so we overwrite the new type with the old one\n // And initialize it with the types default (e.g. black for color or 0 for number)\n\n\n const defaultObject = new other[i + 1]().toArray(); // Than we fix the values array\n\n const toDelete = values[i + 2] + 3;\n values.splice(i, toDelete, other[i], other[i + 1], other[i + 2], ...defaultObject);\n i += values[i + 2] + 2;\n }\n\n return this;\n }\n\n init(objOrArr) {\n this.values = [];\n\n if (Array.isArray(objOrArr)) {\n this.values = objOrArr.slice();\n return;\n }\n\n objOrArr = objOrArr || {};\n const entries = [];\n\n for (const i in objOrArr) {\n const Type = getClassForType(objOrArr[i]);\n const val = new Type(objOrArr[i]).toArray();\n entries.push([i, Type, val.length, ...val]);\n }\n\n entries.sort(sortByKey);\n this.values = entries.reduce((last, curr) => last.concat(curr), []);\n return this;\n }\n\n toArray() {\n return this.values;\n }\n\n valueOf() {\n const obj = {};\n const arr = this.values; // for (var i = 0, len = arr.length; i < len; i += 2) {\n\n while (arr.length) {\n const key = arr.shift();\n const Type = arr.shift();\n const num = arr.shift();\n const values = arr.splice(0, num);\n obj[key] = new Type(values); // .valueOf()\n }\n\n return obj;\n }\n\n}\nconst morphableTypes = [NonMorphable, TransformBag, ObjectBag];\nfunction registerMorphableType(type = []) {\n morphableTypes.push(...[].concat(type));\n}\nfunction makeMorphable() {\n extend(morphableTypes, {\n to(val) {\n return new Morphable().type(this.constructor).from(this.toArray()) // this.valueOf())\n .to(val);\n },\n\n fromArray(arr) {\n this.init(arr);\n return this;\n },\n\n toConsumable() {\n return this.toArray();\n },\n\n morph(from, to, pos, stepper, context) {\n const mapper = function (i, index) {\n return stepper.step(i, to[index], pos, context[index], context);\n };\n\n return this.fromArray(from.map(mapper));\n }\n\n });\n}\n\nclass Path extends Shape {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('path', node), attrs);\n } // Get array\n\n\n array() {\n return this._array || (this._array = new PathArray(this.attr('d')));\n } // Clear array cache\n\n\n clear() {\n delete this._array;\n return this;\n } // Set height of element\n\n\n height(height) {\n return height == null ? this.bbox().height : this.size(this.bbox().width, height);\n } // Move by left top corner\n\n\n move(x, y) {\n return this.attr('d', this.array().move(x, y));\n } // Plot new path\n\n\n plot(d) {\n return d == null ? this.array() : this.clear().attr('d', typeof d === 'string' ? d : this._array = new PathArray(d));\n } // Set element size to given width and height\n\n\n size(width, height) {\n const p = proportionalSize(this, width, height);\n return this.attr('d', this.array().size(p.width, p.height));\n } // Set width of element\n\n\n width(width) {\n return width == null ? this.bbox().width : this.size(width, this.bbox().height);\n } // Move by left top corner over x-axis\n\n\n x(x) {\n return x == null ? this.bbox().x : this.move(x, this.bbox().y);\n } // Move by left top corner over y-axis\n\n\n y(y) {\n return y == null ? this.bbox().y : this.move(this.bbox().x, y);\n }\n\n} // Define morphable array\n\nPath.prototype.MorphArray = PathArray; // Add parent method\n\nregisterMethods({\n Container: {\n // Create a wrapped path element\n path: wrapWithAttrCheck(function (d) {\n // make sure plot is called as a setter\n return this.put(new Path()).plot(d || new PathArray());\n })\n }\n});\nregister(Path, 'Path');\n\nfunction array() {\n return this._array || (this._array = new PointArray(this.attr('points')));\n} // Clear array cache\n\nfunction clear() {\n delete this._array;\n return this;\n} // Move by left top corner\n\nfunction move$2(x, y) {\n return this.attr('points', this.array().move(x, y));\n} // Plot new path\n\nfunction plot(p) {\n return p == null ? this.array() : this.clear().attr('points', typeof p === 'string' ? p : this._array = new PointArray(p));\n} // Set element size to given width and height\n\nfunction size$1(width, height) {\n const p = proportionalSize(this, width, height);\n return this.attr('points', this.array().size(p.width, p.height));\n}\n\nvar poly = {\n __proto__: null,\n array: array,\n clear: clear,\n move: move$2,\n plot: plot,\n size: size$1\n};\n\nclass Polygon extends Shape {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('polygon', node), attrs);\n }\n\n}\nregisterMethods({\n Container: {\n // Create a wrapped polygon element\n polygon: wrapWithAttrCheck(function (p) {\n // make sure plot is called as a setter\n return this.put(new Polygon()).plot(p || new PointArray());\n })\n }\n});\nextend(Polygon, pointed);\nextend(Polygon, poly);\nregister(Polygon, 'Polygon');\n\nclass Polyline extends Shape {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('polyline', node), attrs);\n }\n\n}\nregisterMethods({\n Container: {\n // Create a wrapped polygon element\n polyline: wrapWithAttrCheck(function (p) {\n // make sure plot is called as a setter\n return this.put(new Polyline()).plot(p || new PointArray());\n })\n }\n});\nextend(Polyline, pointed);\nextend(Polyline, poly);\nregister(Polyline, 'Polyline');\n\nclass Rect extends Shape {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('rect', node), attrs);\n }\n\n}\nextend(Rect, {\n rx,\n ry\n});\nregisterMethods({\n Container: {\n // Create a rect element\n rect: wrapWithAttrCheck(function (width, height) {\n return this.put(new Rect()).size(width, height);\n })\n }\n});\nregister(Rect, 'Rect');\n\nclass Queue {\n constructor() {\n this._first = null;\n this._last = null;\n } // Shows us the first item in the list\n\n\n first() {\n return this._first && this._first.value;\n } // Shows us the last item in the list\n\n\n last() {\n return this._last && this._last.value;\n }\n\n push(value) {\n // An item stores an id and the provided value\n const item = typeof value.next !== 'undefined' ? value : {\n value: value,\n next: null,\n prev: null\n }; // Deal with the queue being empty or populated\n\n if (this._last) {\n item.prev = this._last;\n this._last.next = item;\n this._last = item;\n } else {\n this._last = item;\n this._first = item;\n } // Return the current item\n\n\n return item;\n } // Removes the item that was returned from the push\n\n\n remove(item) {\n // Relink the previous item\n if (item.prev) item.prev.next = item.next;\n if (item.next) item.next.prev = item.prev;\n if (item === this._last) this._last = item.prev;\n if (item === this._first) this._first = item.next; // Invalidate item\n\n item.prev = null;\n item.next = null;\n }\n\n shift() {\n // Check if we have a value\n const remove = this._first;\n if (!remove) return null; // If we do, remove it and relink things\n\n this._first = remove.next;\n if (this._first) this._first.prev = null;\n this._last = this._first ? this._last : null;\n return remove.value;\n }\n\n}\n\nconst Animator = {\n nextDraw: null,\n frames: new Queue(),\n timeouts: new Queue(),\n immediates: new Queue(),\n timer: () => globals.window.performance || globals.window.Date,\n transforms: [],\n\n frame(fn) {\n // Store the node\n const node = Animator.frames.push({\n run: fn\n }); // Request an animation frame if we don't have one\n\n if (Animator.nextDraw === null) {\n Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n } // Return the node so we can remove it easily\n\n\n return node;\n },\n\n timeout(fn, delay) {\n delay = delay || 0; // Work out when the event should fire\n\n const time = Animator.timer().now() + delay; // Add the timeout to the end of the queue\n\n const node = Animator.timeouts.push({\n run: fn,\n time: time\n }); // Request another animation frame if we need one\n\n if (Animator.nextDraw === null) {\n Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n }\n\n return node;\n },\n\n immediate(fn) {\n // Add the immediate fn to the end of the queue\n const node = Animator.immediates.push(fn); // Request another animation frame if we need one\n\n if (Animator.nextDraw === null) {\n Animator.nextDraw = globals.window.requestAnimationFrame(Animator._draw);\n }\n\n return node;\n },\n\n cancelFrame(node) {\n node != null && Animator.frames.remove(node);\n },\n\n clearTimeout(node) {\n node != null && Animator.timeouts.remove(node);\n },\n\n cancelImmediate(node) {\n node != null && Animator.immediates.remove(node);\n },\n\n _draw(now) {\n // Run all the timeouts we can run, if they are not ready yet, add them\n // to the end of the queue immediately! (bad timeouts!!! [sarcasm])\n let nextTimeout = null;\n const lastTimeout = Animator.timeouts.last();\n\n while (nextTimeout = Animator.timeouts.shift()) {\n // Run the timeout if its time, or push it to the end\n if (now >= nextTimeout.time) {\n nextTimeout.run();\n } else {\n Animator.timeouts.push(nextTimeout);\n } // If we hit the last item, we should stop shifting out more items\n\n\n if (nextTimeout === lastTimeout) break;\n } // Run all of the animation frames\n\n\n let nextFrame = null;\n const lastFrame = Animator.frames.last();\n\n while (nextFrame !== lastFrame && (nextFrame = Animator.frames.shift())) {\n nextFrame.run(now);\n }\n\n let nextImmediate = null;\n\n while (nextImmediate = Animator.immediates.shift()) {\n nextImmediate();\n } // If we have remaining timeouts or frames, draw until we don't anymore\n\n\n Animator.nextDraw = Animator.timeouts.first() || Animator.frames.first() ? globals.window.requestAnimationFrame(Animator._draw) : null;\n }\n\n};\n\nconst makeSchedule = function (runnerInfo) {\n const start = runnerInfo.start;\n const duration = runnerInfo.runner.duration();\n const end = start + duration;\n return {\n start: start,\n duration: duration,\n end: end,\n runner: runnerInfo.runner\n };\n};\n\nconst defaultSource = function () {\n const w = globals.window;\n return (w.performance || w.Date).now();\n};\n\nclass Timeline extends EventTarget {\n // Construct a new timeline on the given element\n constructor(timeSource = defaultSource) {\n super();\n this._timeSource = timeSource; // Store the timing variables\n\n this._startTime = 0;\n this._speed = 1.0; // Determines how long a runner is hold in memory. Can be a dt or true/false\n\n this._persist = 0; // Keep track of the running animations and their starting parameters\n\n this._nextFrame = null;\n this._paused = true;\n this._runners = [];\n this._runnerIds = [];\n this._lastRunnerId = -1;\n this._time = 0;\n this._lastSourceTime = 0;\n this._lastStepTime = 0; // Make sure that step is always called in class context\n\n this._step = this._stepFn.bind(this, false);\n this._stepImmediate = this._stepFn.bind(this, true);\n }\n\n active() {\n return !!this._nextFrame;\n }\n\n finish() {\n // Go to end and pause\n this.time(this.getEndTimeOfTimeline() + 1);\n return this.pause();\n } // Calculates the end of the timeline\n\n\n getEndTime() {\n const lastRunnerInfo = this.getLastRunnerInfo();\n const lastDuration = lastRunnerInfo ? lastRunnerInfo.runner.duration() : 0;\n const lastStartTime = lastRunnerInfo ? lastRunnerInfo.start : this._time;\n return lastStartTime + lastDuration;\n }\n\n getEndTimeOfTimeline() {\n const endTimes = this._runners.map(i => i.start + i.runner.duration());\n\n return Math.max(0, ...endTimes);\n }\n\n getLastRunnerInfo() {\n return this.getRunnerInfoById(this._lastRunnerId);\n }\n\n getRunnerInfoById(id) {\n return this._runners[this._runnerIds.indexOf(id)] || null;\n }\n\n pause() {\n this._paused = true;\n return this._continue();\n }\n\n persist(dtOrForever) {\n if (dtOrForever == null) return this._persist;\n this._persist = dtOrForever;\n return this;\n }\n\n play() {\n // Now make sure we are not paused and continue the animation\n this._paused = false;\n return this.updateTime()._continue();\n }\n\n reverse(yes) {\n const currentSpeed = this.speed();\n if (yes == null) return this.speed(-currentSpeed);\n const positive = Math.abs(currentSpeed);\n return this.speed(yes ? -positive : positive);\n } // schedules a runner on the timeline\n\n\n schedule(runner, delay, when) {\n if (runner == null) {\n return this._runners.map(makeSchedule);\n } // The start time for the next animation can either be given explicitly,\n // derived from the current timeline time or it can be relative to the\n // last start time to chain animations directly\n\n\n let absoluteStartTime = 0;\n const endTime = this.getEndTime();\n delay = delay || 0; // Work out when to start the animation\n\n if (when == null || when === 'last' || when === 'after') {\n // Take the last time and increment\n absoluteStartTime = endTime;\n } else if (when === 'absolute' || when === 'start') {\n absoluteStartTime = delay;\n delay = 0;\n } else if (when === 'now') {\n absoluteStartTime = this._time;\n } else if (when === 'relative') {\n const runnerInfo = this.getRunnerInfoById(runner.id);\n\n if (runnerInfo) {\n absoluteStartTime = runnerInfo.start + delay;\n delay = 0;\n }\n } else if (when === 'with-last') {\n const lastRunnerInfo = this.getLastRunnerInfo();\n const lastStartTime = lastRunnerInfo ? lastRunnerInfo.start : this._time;\n absoluteStartTime = lastStartTime;\n } else {\n throw new Error('Invalid value for the \"when\" parameter');\n } // Manage runner\n\n\n runner.unschedule();\n runner.timeline(this);\n const persist = runner.persist();\n const runnerInfo = {\n persist: persist === null ? this._persist : persist,\n start: absoluteStartTime + delay,\n runner\n };\n this._lastRunnerId = runner.id;\n\n this._runners.push(runnerInfo);\n\n this._runners.sort((a, b) => a.start - b.start);\n\n this._runnerIds = this._runners.map(info => info.runner.id);\n\n this.updateTime()._continue();\n\n return this;\n }\n\n seek(dt) {\n return this.time(this._time + dt);\n }\n\n source(fn) {\n if (fn == null) return this._timeSource;\n this._timeSource = fn;\n return this;\n }\n\n speed(speed) {\n if (speed == null) return this._speed;\n this._speed = speed;\n return this;\n }\n\n stop() {\n // Go to start and pause\n this.time(0);\n return this.pause();\n }\n\n time(time) {\n if (time == null) return this._time;\n this._time = time;\n return this._continue(true);\n } // Remove the runner from this timeline\n\n\n unschedule(runner) {\n const index = this._runnerIds.indexOf(runner.id);\n\n if (index < 0) return this;\n\n this._runners.splice(index, 1);\n\n this._runnerIds.splice(index, 1);\n\n runner.timeline(null);\n return this;\n } // Makes sure, that after pausing the time doesn't jump\n\n\n updateTime() {\n if (!this.active()) {\n this._lastSourceTime = this._timeSource();\n }\n\n return this;\n } // Checks if we are running and continues the animation\n\n\n _continue(immediateStep = false) {\n Animator.cancelFrame(this._nextFrame);\n this._nextFrame = null;\n if (immediateStep) return this._stepImmediate();\n if (this._paused) return this;\n this._nextFrame = Animator.frame(this._step);\n return this;\n }\n\n _stepFn(immediateStep = false) {\n // Get the time delta from the last time and update the time\n const time = this._timeSource();\n\n let dtSource = time - this._lastSourceTime;\n if (immediateStep) dtSource = 0;\n const dtTime = this._speed * dtSource + (this._time - this._lastStepTime);\n this._lastSourceTime = time; // Only update the time if we use the timeSource.\n // Otherwise use the current time\n\n if (!immediateStep) {\n // Update the time\n this._time += dtTime;\n this._time = this._time < 0 ? 0 : this._time;\n }\n\n this._lastStepTime = this._time;\n this.fire('time', this._time); // This is for the case that the timeline was seeked so that the time\n // is now before the startTime of the runner. Thats why we need to set\n // the runner to position 0\n // FIXME:\n // However, reseting in insertion order leads to bugs. Considering the case,\n // where 2 runners change the same attribute but in different times,\n // reseting both of them will lead to the case where the later defined\n // runner always wins the reset even if the other runner started earlier\n // and therefore should win the attribute battle\n // this can be solved by reseting them backwards\n\n for (let k = this._runners.length; k--;) {\n // Get and run the current runner and ignore it if its inactive\n const runnerInfo = this._runners[k];\n const runner = runnerInfo.runner; // Make sure that we give the actual difference\n // between runner start time and now\n\n const dtToStart = this._time - runnerInfo.start; // Dont run runner if not started yet\n // and try to reset it\n\n if (dtToStart <= 0) {\n runner.reset();\n }\n } // Run all of the runners directly\n\n\n let runnersLeft = false;\n\n for (let i = 0, len = this._runners.length; i < len; i++) {\n // Get and run the current runner and ignore it if its inactive\n const runnerInfo = this._runners[i];\n const runner = runnerInfo.runner;\n let dt = dtTime; // Make sure that we give the actual difference\n // between runner start time and now\n\n const dtToStart = this._time - runnerInfo.start; // Dont run runner if not started yet\n\n if (dtToStart <= 0) {\n runnersLeft = true;\n continue;\n } else if (dtToStart < dt) {\n // Adjust dt to make sure that animation is on point\n dt = dtToStart;\n }\n\n if (!runner.active()) continue; // If this runner is still going, signal that we need another animation\n // frame, otherwise, remove the completed runner\n\n const finished = runner.step(dt).done;\n\n if (!finished) {\n runnersLeft = true; // continue\n } else if (runnerInfo.persist !== true) {\n // runner is finished. And runner might get removed\n const endTime = runner.duration() - runner.time() + this._time;\n\n if (endTime + runnerInfo.persist < this._time) {\n // Delete runner and correct index\n runner.unschedule();\n --i;\n --len;\n }\n }\n } // Basically: we continue when there are runners right from us in time\n // when -->, and when runners are left from us when <--\n\n\n if (runnersLeft && !(this._speed < 0 && this._time === 0) || this._runnerIds.length && this._speed < 0 && this._time > 0) {\n this._continue();\n } else {\n this.pause();\n this.fire('finished');\n }\n\n return this;\n }\n\n}\nregisterMethods({\n Element: {\n timeline: function (timeline) {\n if (timeline == null) {\n this._timeline = this._timeline || new Timeline();\n return this._timeline;\n } else {\n this._timeline = timeline;\n return this;\n }\n }\n }\n});\n\nclass Runner extends EventTarget {\n constructor(options) {\n super(); // Store a unique id on the runner, so that we can identify it later\n\n this.id = Runner.id++; // Ensure a default value\n\n options = options == null ? timeline.duration : options; // Ensure that we get a controller\n\n options = typeof options === 'function' ? new Controller(options) : options; // Declare all of the variables\n\n this._element = null;\n this._timeline = null;\n this.done = false;\n this._queue = []; // Work out the stepper and the duration\n\n this._duration = typeof options === 'number' && options;\n this._isDeclarative = options instanceof Controller;\n this._stepper = this._isDeclarative ? options : new Ease(); // We copy the current values from the timeline because they can change\n\n this._history = {}; // Store the state of the runner\n\n this.enabled = true;\n this._time = 0;\n this._lastTime = 0; // At creation, the runner is in reseted state\n\n this._reseted = true; // Save transforms applied to this runner\n\n this.transforms = new Matrix();\n this.transformId = 1; // Looping variables\n\n this._haveReversed = false;\n this._reverse = false;\n this._loopsDone = 0;\n this._swing = false;\n this._wait = 0;\n this._times = 1;\n this._frameId = null; // Stores how long a runner is stored after beeing done\n\n this._persist = this._isDeclarative ? true : null;\n }\n\n static sanitise(duration, delay, when) {\n // Initialise the default parameters\n let times = 1;\n let swing = false;\n let wait = 0;\n duration = duration || timeline.duration;\n delay = delay || timeline.delay;\n when = when || 'last'; // If we have an object, unpack the values\n\n if (typeof duration === 'object' && !(duration instanceof Stepper)) {\n delay = duration.delay || delay;\n when = duration.when || when;\n swing = duration.swing || swing;\n times = duration.times || times;\n wait = duration.wait || wait;\n duration = duration.duration || timeline.duration;\n }\n\n return {\n duration: duration,\n delay: delay,\n swing: swing,\n times: times,\n wait: wait,\n when: when\n };\n }\n\n active(enabled) {\n if (enabled == null) return this.enabled;\n this.enabled = enabled;\n return this;\n }\n /*\r\n Private Methods\r\n ===============\r\n Methods that shouldn't be used externally\r\n */\n\n\n addTransform(transform, index) {\n this.transforms.lmultiplyO(transform);\n return this;\n }\n\n after(fn) {\n return this.on('finished', fn);\n }\n\n animate(duration, delay, when) {\n const o = Runner.sanitise(duration, delay, when);\n const runner = new Runner(o.duration);\n if (this._timeline) runner.timeline(this._timeline);\n if (this._element) runner.element(this._element);\n return runner.loop(o).schedule(o.delay, o.when);\n }\n\n clearTransform() {\n this.transforms = new Matrix();\n return this;\n } // TODO: Keep track of all transformations so that deletion is faster\n\n\n clearTransformsFromQueue() {\n if (!this.done || !this._timeline || !this._timeline._runnerIds.includes(this.id)) {\n this._queue = this._queue.filter(item => {\n return !item.isTransform;\n });\n }\n }\n\n delay(delay) {\n return this.animate(0, delay);\n }\n\n duration() {\n return this._times * (this._wait + this._duration) - this._wait;\n }\n\n during(fn) {\n return this.queue(null, fn);\n }\n\n ease(fn) {\n this._stepper = new Ease(fn);\n return this;\n }\n /*\r\n Runner Definitions\r\n ==================\r\n These methods help us define the runtime behaviour of the Runner or they\r\n help us make new runners from the current runner\r\n */\n\n\n element(element) {\n if (element == null) return this._element;\n this._element = element;\n\n element._prepareRunner();\n\n return this;\n }\n\n finish() {\n return this.step(Infinity);\n }\n\n loop(times, swing, wait) {\n // Deal with the user passing in an object\n if (typeof times === 'object') {\n swing = times.swing;\n wait = times.wait;\n times = times.times;\n } // Sanitise the values and store them\n\n\n this._times = times || Infinity;\n this._swing = swing || false;\n this._wait = wait || 0; // Allow true to be passed\n\n if (this._times === true) {\n this._times = Infinity;\n }\n\n return this;\n }\n\n loops(p) {\n const loopDuration = this._duration + this._wait;\n\n if (p == null) {\n const loopsDone = Math.floor(this._time / loopDuration);\n const relativeTime = this._time - loopsDone * loopDuration;\n const position = relativeTime / this._duration;\n return Math.min(loopsDone + position, this._times);\n }\n\n const whole = Math.floor(p);\n const partial = p % 1;\n const time = loopDuration * whole + this._duration * partial;\n return this.time(time);\n }\n\n persist(dtOrForever) {\n if (dtOrForever == null) return this._persist;\n this._persist = dtOrForever;\n return this;\n }\n\n position(p) {\n // Get all of the variables we need\n const x = this._time;\n const d = this._duration;\n const w = this._wait;\n const t = this._times;\n const s = this._swing;\n const r = this._reverse;\n let position;\n\n if (p == null) {\n /*\r\n This function converts a time to a position in the range [0, 1]\r\n The full explanation can be found in this desmos demonstration\r\n https://www.desmos.com/calculator/u4fbavgche\r\n The logic is slightly simplified here because we can use booleans\r\n */\n // Figure out the value without thinking about the start or end time\n const f = function (x) {\n const swinging = s * Math.floor(x % (2 * (w + d)) / (w + d));\n const backwards = swinging && !r || !swinging && r;\n const uncliped = Math.pow(-1, backwards) * (x % (w + d)) / d + backwards;\n const clipped = Math.max(Math.min(uncliped, 1), 0);\n return clipped;\n }; // Figure out the value by incorporating the start time\n\n\n const endTime = t * (w + d) - w;\n position = x <= 0 ? Math.round(f(1e-5)) : x < endTime ? f(x) : Math.round(f(endTime - 1e-5));\n return position;\n } // Work out the loops done and add the position to the loops done\n\n\n const loopsDone = Math.floor(this.loops());\n const swingForward = s && loopsDone % 2 === 0;\n const forwards = swingForward && !r || r && swingForward;\n position = loopsDone + (forwards ? p : 1 - p);\n return this.loops(position);\n }\n\n progress(p) {\n if (p == null) {\n return Math.min(1, this._time / this.duration());\n }\n\n return this.time(p * this.duration());\n }\n /*\r\n Basic Functionality\r\n ===================\r\n These methods allow us to attach basic functions to the runner directly\r\n */\n\n\n queue(initFn, runFn, retargetFn, isTransform) {\n this._queue.push({\n initialiser: initFn || noop,\n runner: runFn || noop,\n retarget: retargetFn,\n isTransform: isTransform,\n initialised: false,\n finished: false\n });\n\n const timeline = this.timeline();\n timeline && this.timeline()._continue();\n return this;\n }\n\n reset() {\n if (this._reseted) return this;\n this.time(0);\n this._reseted = true;\n return this;\n }\n\n reverse(reverse) {\n this._reverse = reverse == null ? !this._reverse : reverse;\n return this;\n }\n\n schedule(timeline, delay, when) {\n // The user doesn't need to pass a timeline if we already have one\n if (!(timeline instanceof Timeline)) {\n when = delay;\n delay = timeline;\n timeline = this.timeline();\n } // If there is no timeline, yell at the user...\n\n\n if (!timeline) {\n throw Error('Runner cannot be scheduled without timeline');\n } // Schedule the runner on the timeline provided\n\n\n timeline.schedule(this, delay, when);\n return this;\n }\n\n step(dt) {\n // If we are inactive, this stepper just gets skipped\n if (!this.enabled) return this; // Update the time and get the new position\n\n dt = dt == null ? 16 : dt;\n this._time += dt;\n const position = this.position(); // Figure out if we need to run the stepper in this frame\n\n const running = this._lastPosition !== position && this._time >= 0;\n this._lastPosition = position; // Figure out if we just started\n\n const duration = this.duration();\n const justStarted = this._lastTime <= 0 && this._time > 0;\n const justFinished = this._lastTime < duration && this._time >= duration;\n this._lastTime = this._time;\n\n if (justStarted) {\n this.fire('start', this);\n } // Work out if the runner is finished set the done flag here so animations\n // know, that they are running in the last step (this is good for\n // transformations which can be merged)\n\n\n const declarative = this._isDeclarative;\n this.done = !declarative && !justFinished && this._time >= duration; // Runner is running. So its not in reseted state anymore\n\n this._reseted = false;\n let converged = false; // Call initialise and the run function\n\n if (running || declarative) {\n this._initialise(running); // clear the transforms on this runner so they dont get added again and again\n\n\n this.transforms = new Matrix();\n converged = this._run(declarative ? dt : position);\n this.fire('step', this);\n } // correct the done flag here\n // declaritive animations itself know when they converged\n\n\n this.done = this.done || converged && declarative;\n\n if (justFinished) {\n this.fire('finished', this);\n }\n\n return this;\n }\n /*\r\n Runner animation methods\r\n ========================\r\n Control how the animation plays\r\n */\n\n\n time(time) {\n if (time == null) {\n return this._time;\n }\n\n const dt = time - this._time;\n this.step(dt);\n return this;\n }\n\n timeline(timeline) {\n // check explicitly for undefined so we can set the timeline to null\n if (typeof timeline === 'undefined') return this._timeline;\n this._timeline = timeline;\n return this;\n }\n\n unschedule() {\n const timeline = this.timeline();\n timeline && timeline.unschedule(this);\n return this;\n } // Run each initialise function in the runner if required\n\n\n _initialise(running) {\n // If we aren't running, we shouldn't initialise when not declarative\n if (!running && !this._isDeclarative) return; // Loop through all of the initialisers\n\n for (let i = 0, len = this._queue.length; i < len; ++i) {\n // Get the current initialiser\n const current = this._queue[i]; // Determine whether we need to initialise\n\n const needsIt = this._isDeclarative || !current.initialised && running;\n running = !current.finished; // Call the initialiser if we need to\n\n if (needsIt && running) {\n current.initialiser.call(this);\n current.initialised = true;\n }\n }\n } // Save a morpher to the morpher list so that we can retarget it later\n\n\n _rememberMorpher(method, morpher) {\n this._history[method] = {\n morpher: morpher,\n caller: this._queue[this._queue.length - 1]\n }; // We have to resume the timeline in case a controller\n // is already done without being ever run\n // This can happen when e.g. this is done:\n // anim = el.animate(new SVG.Spring)\n // and later\n // anim.move(...)\n\n if (this._isDeclarative) {\n const timeline = this.timeline();\n timeline && timeline.play();\n }\n } // Try to set the target for a morpher if the morpher exists, otherwise\n // Run each run function for the position or dt given\n\n\n _run(positionOrDt) {\n // Run all of the _queue directly\n let allfinished = true;\n\n for (let i = 0, len = this._queue.length; i < len; ++i) {\n // Get the current function to run\n const current = this._queue[i]; // Run the function if its not finished, we keep track of the finished\n // flag for the sake of declarative _queue\n\n const converged = current.runner.call(this, positionOrDt);\n current.finished = current.finished || converged === true;\n allfinished = allfinished && current.finished;\n } // We report when all of the constructors are finished\n\n\n return allfinished;\n } // do nothing and return false\n\n\n _tryRetarget(method, target, extra) {\n if (this._history[method]) {\n // if the last method wasnt even initialised, throw it away\n if (!this._history[method].caller.initialised) {\n const index = this._queue.indexOf(this._history[method].caller);\n\n this._queue.splice(index, 1);\n\n return false;\n } // for the case of transformations, we use the special retarget function\n // which has access to the outer scope\n\n\n if (this._history[method].caller.retarget) {\n this._history[method].caller.retarget.call(this, target, extra); // for everything else a simple morpher change is sufficient\n\n } else {\n this._history[method].morpher.to(target);\n }\n\n this._history[method].caller.finished = false;\n const timeline = this.timeline();\n timeline && timeline.play();\n return true;\n }\n\n return false;\n }\n\n}\nRunner.id = 0;\nclass FakeRunner {\n constructor(transforms = new Matrix(), id = -1, done = true) {\n this.transforms = transforms;\n this.id = id;\n this.done = done;\n }\n\n clearTransformsFromQueue() {}\n\n}\nextend([Runner, FakeRunner], {\n mergeWith(runner) {\n return new FakeRunner(runner.transforms.lmultiply(this.transforms), runner.id);\n }\n\n}); // FakeRunner.emptyRunner = new FakeRunner()\n\nconst lmultiply = (last, curr) => last.lmultiplyO(curr);\n\nconst getRunnerTransform = runner => runner.transforms;\n\nfunction mergeTransforms() {\n // Find the matrix to apply to the element and apply it\n const runners = this._transformationRunners.runners;\n const netTransform = runners.map(getRunnerTransform).reduce(lmultiply, new Matrix());\n this.transform(netTransform);\n\n this._transformationRunners.merge();\n\n if (this._transformationRunners.length() === 1) {\n this._frameId = null;\n }\n}\n\nclass RunnerArray {\n constructor() {\n this.runners = [];\n this.ids = [];\n }\n\n add(runner) {\n if (this.runners.includes(runner)) return;\n const id = runner.id + 1;\n this.runners.push(runner);\n this.ids.push(id);\n return this;\n }\n\n clearBefore(id) {\n const deleteCnt = this.ids.indexOf(id + 1) || 1;\n this.ids.splice(0, deleteCnt, 0);\n this.runners.splice(0, deleteCnt, new FakeRunner()).forEach(r => r.clearTransformsFromQueue());\n return this;\n }\n\n edit(id, newRunner) {\n const index = this.ids.indexOf(id + 1);\n this.ids.splice(index, 1, id + 1);\n this.runners.splice(index, 1, newRunner);\n return this;\n }\n\n getByID(id) {\n return this.runners[this.ids.indexOf(id + 1)];\n }\n\n length() {\n return this.ids.length;\n }\n\n merge() {\n let lastRunner = null;\n\n for (let i = 0; i < this.runners.length; ++i) {\n const runner = this.runners[i];\n const condition = lastRunner && runner.done && lastRunner.done // don't merge runner when persisted on timeline\n && (!runner._timeline || !runner._timeline._runnerIds.includes(runner.id)) && (!lastRunner._timeline || !lastRunner._timeline._runnerIds.includes(lastRunner.id));\n\n if (condition) {\n // the +1 happens in the function\n this.remove(runner.id);\n const newRunner = runner.mergeWith(lastRunner);\n this.edit(lastRunner.id, newRunner);\n lastRunner = newRunner;\n --i;\n } else {\n lastRunner = runner;\n }\n }\n\n return this;\n }\n\n remove(id) {\n const index = this.ids.indexOf(id + 1);\n this.ids.splice(index, 1);\n this.runners.splice(index, 1);\n return this;\n }\n\n}\nregisterMethods({\n Element: {\n animate(duration, delay, when) {\n const o = Runner.sanitise(duration, delay, when);\n const timeline = this.timeline();\n return new Runner(o.duration).loop(o).element(this).timeline(timeline.play()).schedule(o.delay, o.when);\n },\n\n delay(by, when) {\n return this.animate(0, by, when);\n },\n\n // this function searches for all runners on the element and deletes the ones\n // which run before the current one. This is because absolute transformations\n // overwfrite anything anyway so there is no need to waste time computing\n // other runners\n _clearTransformRunnersBefore(currentRunner) {\n this._transformationRunners.clearBefore(currentRunner.id);\n },\n\n _currentTransform(current) {\n return this._transformationRunners.runners // we need the equal sign here to make sure, that also transformations\n // on the same runner which execute before the current transformation are\n // taken into account\n .filter(runner => runner.id <= current.id).map(getRunnerTransform).reduce(lmultiply, new Matrix());\n },\n\n _addRunner(runner) {\n this._transformationRunners.add(runner); // Make sure that the runner merge is executed at the very end of\n // all Animator functions. Thats why we use immediate here to execute\n // the merge right after all frames are run\n\n\n Animator.cancelImmediate(this._frameId);\n this._frameId = Animator.immediate(mergeTransforms.bind(this));\n },\n\n _prepareRunner() {\n if (this._frameId == null) {\n this._transformationRunners = new RunnerArray().add(new FakeRunner(new Matrix(this)));\n }\n }\n\n }\n}); // Will output the elements from array A that are not in the array B\n\nconst difference = (a, b) => a.filter(x => !b.includes(x));\n\nextend(Runner, {\n attr(a, v) {\n return this.styleAttr('attr', a, v);\n },\n\n // Add animatable styles\n css(s, v) {\n return this.styleAttr('css', s, v);\n },\n\n styleAttr(type, nameOrAttrs, val) {\n if (typeof nameOrAttrs === 'string') {\n return this.styleAttr(type, {\n [nameOrAttrs]: val\n });\n }\n\n let attrs = nameOrAttrs;\n if (this._tryRetarget(type, attrs)) return this;\n let morpher = new Morphable(this._stepper).to(attrs);\n let keys = Object.keys(attrs);\n this.queue(function () {\n morpher = morpher.from(this.element()[type](keys));\n }, function (pos) {\n this.element()[type](morpher.at(pos).valueOf());\n return morpher.done();\n }, function (newToAttrs) {\n // Check if any new keys were added\n const newKeys = Object.keys(newToAttrs);\n const differences = difference(newKeys, keys); // If their are new keys, initialize them and add them to morpher\n\n if (differences.length) {\n // Get the values\n const addedFromAttrs = this.element()[type](differences); // Get the already initialized values\n\n const oldFromAttrs = new ObjectBag(morpher.from()).valueOf(); // Merge old and new\n\n Object.assign(oldFromAttrs, addedFromAttrs);\n morpher.from(oldFromAttrs);\n } // Get the object from the morpher\n\n\n const oldToAttrs = new ObjectBag(morpher.to()).valueOf(); // Merge in new attributes\n\n Object.assign(oldToAttrs, newToAttrs); // Change morpher target\n\n morpher.to(oldToAttrs); // Make sure that we save the work we did so we don't need it to do again\n\n keys = newKeys;\n attrs = newToAttrs;\n });\n\n this._rememberMorpher(type, morpher);\n\n return this;\n },\n\n zoom(level, point) {\n if (this._tryRetarget('zoom', level, point)) return this;\n let morpher = new Morphable(this._stepper).to(new SVGNumber(level));\n this.queue(function () {\n morpher = morpher.from(this.element().zoom());\n }, function (pos) {\n this.element().zoom(morpher.at(pos), point);\n return morpher.done();\n }, function (newLevel, newPoint) {\n point = newPoint;\n morpher.to(newLevel);\n });\n\n this._rememberMorpher('zoom', morpher);\n\n return this;\n },\n\n /**\r\n ** absolute transformations\r\n **/\n //\n // M v -----|-----(D M v = F v)------|-----> T v\n //\n // 1. define the final state (T) and decompose it (once)\n // t = [tx, ty, the, lam, sy, sx]\n // 2. on every frame: pull the current state of all previous transforms\n // (M - m can change)\n // and then write this as m = [tx0, ty0, the0, lam0, sy0, sx0]\n // 3. Find the interpolated matrix F(pos) = m + pos * (t - m)\n // - Note F(0) = M\n // - Note F(1) = T\n // 4. Now you get the delta matrix as a result: D = F * inv(M)\n transform(transforms, relative, affine) {\n // If we have a declarative function, we should retarget it if possible\n relative = transforms.relative || relative;\n\n if (this._isDeclarative && !relative && this._tryRetarget('transform', transforms)) {\n return this;\n } // Parse the parameters\n\n\n const isMatrix = Matrix.isMatrixLike(transforms);\n affine = transforms.affine != null ? transforms.affine : affine != null ? affine : !isMatrix; // Create a morepher and set its type\n\n const morpher = new Morphable(this._stepper).type(affine ? TransformBag : Matrix);\n let origin;\n let element;\n let current;\n let currentAngle;\n let startTransform;\n\n function setup() {\n // make sure element and origin is defined\n element = element || this.element();\n origin = origin || getOrigin(transforms, element);\n startTransform = new Matrix(relative ? undefined : element); // add the runner to the element so it can merge transformations\n\n element._addRunner(this); // Deactivate all transforms that have run so far if we are absolute\n\n\n if (!relative) {\n element._clearTransformRunnersBefore(this);\n }\n }\n\n function run(pos) {\n // clear all other transforms before this in case something is saved\n // on this runner. We are absolute. We dont need these!\n if (!relative) this.clearTransform();\n const {\n x,\n y\n } = new Point(origin).transform(element._currentTransform(this));\n let target = new Matrix({ ...transforms,\n origin: [x, y]\n });\n let start = this._isDeclarative && current ? current : startTransform;\n\n if (affine) {\n target = target.decompose(x, y);\n start = start.decompose(x, y); // Get the current and target angle as it was set\n\n const rTarget = target.rotate;\n const rCurrent = start.rotate; // Figure out the shortest path to rotate directly\n\n const possibilities = [rTarget - 360, rTarget, rTarget + 360];\n const distances = possibilities.map(a => Math.abs(a - rCurrent));\n const shortest = Math.min(...distances);\n const index = distances.indexOf(shortest);\n target.rotate = possibilities[index];\n }\n\n if (relative) {\n // we have to be careful here not to overwrite the rotation\n // with the rotate method of Matrix\n if (!isMatrix) {\n target.rotate = transforms.rotate || 0;\n }\n\n if (this._isDeclarative && currentAngle) {\n start.rotate = currentAngle;\n }\n }\n\n morpher.from(start);\n morpher.to(target);\n const affineParameters = morpher.at(pos);\n currentAngle = affineParameters.rotate;\n current = new Matrix(affineParameters);\n this.addTransform(current);\n\n element._addRunner(this);\n\n return morpher.done();\n }\n\n function retarget(newTransforms) {\n // only get a new origin if it changed since the last call\n if ((newTransforms.origin || 'center').toString() !== (transforms.origin || 'center').toString()) {\n origin = getOrigin(newTransforms, element);\n } // overwrite the old transformations with the new ones\n\n\n transforms = { ...newTransforms,\n origin\n };\n }\n\n this.queue(setup, run, retarget, true);\n this._isDeclarative && this._rememberMorpher('transform', morpher);\n return this;\n },\n\n // Animatable x-axis\n x(x, relative) {\n return this._queueNumber('x', x);\n },\n\n // Animatable y-axis\n y(y) {\n return this._queueNumber('y', y);\n },\n\n dx(x = 0) {\n return this._queueNumberDelta('x', x);\n },\n\n dy(y = 0) {\n return this._queueNumberDelta('y', y);\n },\n\n dmove(x, y) {\n return this.dx(x).dy(y);\n },\n\n _queueNumberDelta(method, to) {\n to = new SVGNumber(to); // Try to change the target if we have this method already registerd\n\n if (this._tryRetarget(method, to)) return this; // Make a morpher and queue the animation\n\n const morpher = new Morphable(this._stepper).to(to);\n let from = null;\n this.queue(function () {\n from = this.element()[method]();\n morpher.from(from);\n morpher.to(from + to);\n }, function (pos) {\n this.element()[method](morpher.at(pos));\n return morpher.done();\n }, function (newTo) {\n morpher.to(from + new SVGNumber(newTo));\n }); // Register the morpher so that if it is changed again, we can retarget it\n\n this._rememberMorpher(method, morpher);\n\n return this;\n },\n\n _queueObject(method, to) {\n // Try to change the target if we have this method already registerd\n if (this._tryRetarget(method, to)) return this; // Make a morpher and queue the animation\n\n const morpher = new Morphable(this._stepper).to(to);\n this.queue(function () {\n morpher.from(this.element()[method]());\n }, function (pos) {\n this.element()[method](morpher.at(pos));\n return morpher.done();\n }); // Register the morpher so that if it is changed again, we can retarget it\n\n this._rememberMorpher(method, morpher);\n\n return this;\n },\n\n _queueNumber(method, value) {\n return this._queueObject(method, new SVGNumber(value));\n },\n\n // Animatable center x-axis\n cx(x) {\n return this._queueNumber('cx', x);\n },\n\n // Animatable center y-axis\n cy(y) {\n return this._queueNumber('cy', y);\n },\n\n // Add animatable move\n move(x, y) {\n return this.x(x).y(y);\n },\n\n // Add animatable center\n center(x, y) {\n return this.cx(x).cy(y);\n },\n\n // Add animatable size\n size(width, height) {\n // animate bbox based size for all other elements\n let box;\n\n if (!width || !height) {\n box = this._element.bbox();\n }\n\n if (!width) {\n width = box.width / box.height * height;\n }\n\n if (!height) {\n height = box.height / box.width * width;\n }\n\n return this.width(width).height(height);\n },\n\n // Add animatable width\n width(width) {\n return this._queueNumber('width', width);\n },\n\n // Add animatable height\n height(height) {\n return this._queueNumber('height', height);\n },\n\n // Add animatable plot\n plot(a, b, c, d) {\n // Lines can be plotted with 4 arguments\n if (arguments.length === 4) {\n return this.plot([a, b, c, d]);\n }\n\n if (this._tryRetarget('plot', a)) return this;\n const morpher = new Morphable(this._stepper).type(this._element.MorphArray).to(a);\n this.queue(function () {\n morpher.from(this._element.array());\n }, function (pos) {\n this._element.plot(morpher.at(pos));\n\n return morpher.done();\n });\n\n this._rememberMorpher('plot', morpher);\n\n return this;\n },\n\n // Add leading method\n leading(value) {\n return this._queueNumber('leading', value);\n },\n\n // Add animatable viewbox\n viewbox(x, y, width, height) {\n return this._queueObject('viewbox', new Box(x, y, width, height));\n },\n\n update(o) {\n if (typeof o !== 'object') {\n return this.update({\n offset: arguments[0],\n color: arguments[1],\n opacity: arguments[2]\n });\n }\n\n if (o.opacity != null) this.attr('stop-opacity', o.opacity);\n if (o.color != null) this.attr('stop-color', o.color);\n if (o.offset != null) this.attr('offset', o.offset);\n return this;\n }\n\n});\nextend(Runner, {\n rx,\n ry,\n from,\n to\n});\nregister(Runner, 'Runner');\n\nclass Svg extends Container {\n constructor(node, attrs = node) {\n super(nodeOrNew('svg', node), attrs);\n this.namespace();\n } // Creates and returns defs element\n\n\n defs() {\n if (!this.isRoot()) return this.root().defs();\n return adopt(this.node.querySelector('defs')) || this.put(new Defs());\n }\n\n isRoot() {\n return !this.node.parentNode || !(this.node.parentNode instanceof globals.window.SVGElement) && this.node.parentNode.nodeName !== '#document-fragment';\n } // Add namespaces\n\n\n namespace() {\n if (!this.isRoot()) return this.root().namespace();\n return this.attr({\n xmlns: svg,\n version: '1.1'\n }).attr('xmlns:xlink', xlink, xmlns).attr('xmlns:svgjs', svgjs, xmlns);\n }\n\n removeNamespace() {\n return this.attr({\n xmlns: null,\n version: null\n }).attr('xmlns:xlink', null, xmlns).attr('xmlns:svgjs', null, xmlns);\n } // Check if this is a root svg\n // If not, call root() from this element\n\n\n root() {\n if (this.isRoot()) return this;\n return super.root();\n }\n\n}\nregisterMethods({\n Container: {\n // Create nested svg document\n nested: wrapWithAttrCheck(function () {\n return this.put(new Svg());\n })\n }\n});\nregister(Svg, 'Svg', true);\n\nclass Symbol extends Container {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('symbol', node), attrs);\n }\n\n}\nregisterMethods({\n Container: {\n symbol: wrapWithAttrCheck(function () {\n return this.put(new Symbol());\n })\n }\n});\nregister(Symbol, 'Symbol');\n\nfunction plain(text) {\n // clear if build mode is disabled\n if (this._build === false) {\n this.clear();\n } // create text node\n\n\n this.node.appendChild(globals.document.createTextNode(text));\n return this;\n} // Get length of text element\n\nfunction length() {\n return this.node.getComputedTextLength();\n} // Move over x-axis\n// Text is moved by its bounding box\n// text-anchor does NOT matter\n\nfunction x$1(x, box = this.bbox()) {\n if (x == null) {\n return box.x;\n }\n\n return this.attr('x', this.attr('x') + x - box.x);\n} // Move over y-axis\n\nfunction y$1(y, box = this.bbox()) {\n if (y == null) {\n return box.y;\n }\n\n return this.attr('y', this.attr('y') + y - box.y);\n}\nfunction move$1(x, y, box = this.bbox()) {\n return this.x(x, box).y(y, box);\n} // Move center over x-axis\n\nfunction cx(x, box = this.bbox()) {\n if (x == null) {\n return box.cx;\n }\n\n return this.attr('x', this.attr('x') + x - box.cx);\n} // Move center over y-axis\n\nfunction cy(y, box = this.bbox()) {\n if (y == null) {\n return box.cy;\n }\n\n return this.attr('y', this.attr('y') + y - box.cy);\n}\nfunction center(x, y, box = this.bbox()) {\n return this.cx(x, box).cy(y, box);\n}\nfunction ax(x) {\n return this.attr('x', x);\n}\nfunction ay(y) {\n return this.attr('y', y);\n}\nfunction amove(x, y) {\n return this.ax(x).ay(y);\n} // Enable / disable build mode\n\nfunction build(build) {\n this._build = !!build;\n return this;\n}\n\nvar textable = {\n __proto__: null,\n plain: plain,\n length: length,\n x: x$1,\n y: y$1,\n move: move$1,\n cx: cx,\n cy: cy,\n center: center,\n ax: ax,\n ay: ay,\n amove: amove,\n build: build\n};\n\nclass Text extends Shape {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('text', node), attrs);\n this.dom.leading = new SVGNumber(1.3); // store leading value for rebuilding\n\n this._rebuild = true; // enable automatic updating of dy values\n\n this._build = false; // disable build mode for adding multiple lines\n } // Set / get leading\n\n\n leading(value) {\n // act as getter\n if (value == null) {\n return this.dom.leading;\n } // act as setter\n\n\n this.dom.leading = new SVGNumber(value);\n return this.rebuild();\n } // Rebuild appearance type\n\n\n rebuild(rebuild) {\n // store new rebuild flag if given\n if (typeof rebuild === 'boolean') {\n this._rebuild = rebuild;\n } // define position of all lines\n\n\n if (this._rebuild) {\n const self = this;\n let blankLineOffset = 0;\n const leading = this.dom.leading;\n this.each(function (i) {\n const fontSize = globals.window.getComputedStyle(this.node).getPropertyValue('font-size');\n const dy = leading * new SVGNumber(fontSize);\n\n if (this.dom.newLined) {\n this.attr('x', self.attr('x'));\n\n if (this.text() === '\\n') {\n blankLineOffset += dy;\n } else {\n this.attr('dy', i ? dy + blankLineOffset : 0);\n blankLineOffset = 0;\n }\n }\n });\n this.fire('rebuild');\n }\n\n return this;\n } // overwrite method from parent to set data properly\n\n\n setData(o) {\n this.dom = o;\n this.dom.leading = new SVGNumber(o.leading || 1.3);\n return this;\n } // Set the text content\n\n\n text(text) {\n // act as getter\n if (text === undefined) {\n const children = this.node.childNodes;\n let firstLine = 0;\n text = '';\n\n for (let i = 0, len = children.length; i < len; ++i) {\n // skip textPaths - they are no lines\n if (children[i].nodeName === 'textPath') {\n if (i === 0) firstLine = 1;\n continue;\n } // add newline if its not the first child and newLined is set to true\n\n\n if (i !== firstLine && children[i].nodeType !== 3 && adopt(children[i]).dom.newLined === true) {\n text += '\\n';\n } // add content of this node\n\n\n text += children[i].textContent;\n }\n\n return text;\n } // remove existing content\n\n\n this.clear().build(true);\n\n if (typeof text === 'function') {\n // call block\n text.call(this, this);\n } else {\n // store text and make sure text is not blank\n text = (text + '').split('\\n'); // build new lines\n\n for (let j = 0, jl = text.length; j < jl; j++) {\n this.newLine(text[j]);\n }\n } // disable build mode and rebuild lines\n\n\n return this.build(false).rebuild();\n }\n\n}\nextend(Text, textable);\nregisterMethods({\n Container: {\n // Create text element\n text: wrapWithAttrCheck(function (text = '') {\n return this.put(new Text()).text(text);\n }),\n // Create plain text element\n plain: wrapWithAttrCheck(function (text = '') {\n return this.put(new Text()).plain(text);\n })\n }\n});\nregister(Text, 'Text');\n\nclass Tspan extends Shape {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('tspan', node), attrs);\n this._build = false; // disable build mode for adding multiple lines\n } // Shortcut dx\n\n\n dx(dx) {\n return this.attr('dx', dx);\n } // Shortcut dy\n\n\n dy(dy) {\n return this.attr('dy', dy);\n } // Create new line\n\n\n newLine() {\n // mark new line\n this.dom.newLined = true; // fetch parent\n\n const text = this.parent(); // early return in case we are not in a text element\n\n if (!(text instanceof Text)) {\n return this;\n }\n\n const i = text.index(this);\n const fontSize = globals.window.getComputedStyle(this.node).getPropertyValue('font-size');\n const dy = text.dom.leading * new SVGNumber(fontSize); // apply new position\n\n return this.dy(i ? dy : 0).attr('x', text.x());\n } // Set text content\n\n\n text(text) {\n if (text == null) return this.node.textContent + (this.dom.newLined ? '\\n' : '');\n\n if (typeof text === 'function') {\n this.clear().build(true);\n text.call(this, this);\n this.build(false);\n } else {\n this.plain(text);\n }\n\n return this;\n }\n\n}\nextend(Tspan, textable);\nregisterMethods({\n Tspan: {\n tspan: wrapWithAttrCheck(function (text = '') {\n const tspan = new Tspan(); // clear if build mode is disabled\n\n if (!this._build) {\n this.clear();\n } // add new tspan\n\n\n return this.put(tspan).text(text);\n })\n },\n Text: {\n newLine: function (text = '') {\n return this.tspan(text).newLine();\n }\n }\n});\nregister(Tspan, 'Tspan');\n\nclass Circle extends Shape {\n constructor(node, attrs = node) {\n super(nodeOrNew('circle', node), attrs);\n }\n\n radius(r) {\n return this.attr('r', r);\n } // Radius x value\n\n\n rx(rx) {\n return this.attr('r', rx);\n } // Alias radius x value\n\n\n ry(ry) {\n return this.rx(ry);\n }\n\n size(size) {\n return this.radius(new SVGNumber(size).divide(2));\n }\n\n}\nextend(Circle, {\n x: x$3,\n y: y$3,\n cx: cx$1,\n cy: cy$1,\n width: width$2,\n height: height$2\n});\nregisterMethods({\n Container: {\n // Create circle element\n circle: wrapWithAttrCheck(function (size = 0) {\n return this.put(new Circle()).size(size).move(0, 0);\n })\n }\n});\nregister(Circle, 'Circle');\n\nclass ClipPath extends Container {\n constructor(node, attrs = node) {\n super(nodeOrNew('clipPath', node), attrs);\n } // Unclip all clipped elements and remove itself\n\n\n remove() {\n // unclip all targets\n this.targets().forEach(function (el) {\n el.unclip();\n }); // remove clipPath from parent\n\n return super.remove();\n }\n\n targets() {\n return baseFind('svg [clip-path*=\"' + this.id() + '\"]');\n }\n\n}\nregisterMethods({\n Container: {\n // Create clipping element\n clip: wrapWithAttrCheck(function () {\n return this.defs().put(new ClipPath());\n })\n },\n Element: {\n // Distribute clipPath to svg element\n clipper() {\n return this.reference('clip-path');\n },\n\n clipWith(element) {\n // use given clip or create a new one\n const clipper = element instanceof ClipPath ? element : this.parent().clip().add(element); // apply mask\n\n return this.attr('clip-path', 'url(\"#' + clipper.id() + '\")');\n },\n\n // Unclip element\n unclip() {\n return this.attr('clip-path', null);\n }\n\n }\n});\nregister(ClipPath, 'ClipPath');\n\nclass ForeignObject extends Element {\n constructor(node, attrs = node) {\n super(nodeOrNew('foreignObject', node), attrs);\n }\n\n}\nregisterMethods({\n Container: {\n foreignObject: wrapWithAttrCheck(function (width, height) {\n return this.put(new ForeignObject()).size(width, height);\n })\n }\n});\nregister(ForeignObject, 'ForeignObject');\n\nfunction dmove(dx, dy) {\n this.children().forEach((child, i) => {\n let bbox; // We have to wrap this for elements that dont have a bbox\n // e.g. title and other descriptive elements\n\n try {\n // Get the childs bbox\n bbox = child.bbox();\n } catch (e) {\n return;\n } // Get childs matrix\n\n\n const m = new Matrix(child); // Translate childs matrix by amount and\n // transform it back into parents space\n\n const matrix = m.translate(dx, dy).transform(m.inverse()); // Calculate new x and y from old box\n\n const p = new Point(bbox.x, bbox.y).transform(matrix); // Move element\n\n child.move(p.x, p.y);\n });\n return this;\n}\nfunction dx(dx) {\n return this.dmove(dx, 0);\n}\nfunction dy(dy) {\n return this.dmove(0, dy);\n}\nfunction height(height, box = this.bbox()) {\n if (height == null) return box.height;\n return this.size(box.width, height, box);\n}\nfunction move(x = 0, y = 0, box = this.bbox()) {\n const dx = x - box.x;\n const dy = y - box.y;\n return this.dmove(dx, dy);\n}\nfunction size(width, height, box = this.bbox()) {\n const p = proportionalSize(this, width, height, box);\n const scaleX = p.width / box.width;\n const scaleY = p.height / box.height;\n this.children().forEach((child, i) => {\n const o = new Point(box).transform(new Matrix(child).inverse());\n child.scale(scaleX, scaleY, o.x, o.y);\n });\n return this;\n}\nfunction width(width, box = this.bbox()) {\n if (width == null) return box.width;\n return this.size(width, box.height, box);\n}\nfunction x(x, box = this.bbox()) {\n if (x == null) return box.x;\n return this.move(x, box.y, box);\n}\nfunction y(y, box = this.bbox()) {\n if (y == null) return box.y;\n return this.move(box.x, y, box);\n}\n\nvar containerGeometry = {\n __proto__: null,\n dmove: dmove,\n dx: dx,\n dy: dy,\n height: height,\n move: move,\n size: size,\n width: width,\n x: x,\n y: y\n};\n\nclass G extends Container {\n constructor(node, attrs = node) {\n super(nodeOrNew('g', node), attrs);\n }\n\n}\nextend(G, containerGeometry);\nregisterMethods({\n Container: {\n // Create a group element\n group: wrapWithAttrCheck(function () {\n return this.put(new G());\n })\n }\n});\nregister(G, 'G');\n\nclass A extends Container {\n constructor(node, attrs = node) {\n super(nodeOrNew('a', node), attrs);\n } // Link target attribute\n\n\n target(target) {\n return this.attr('target', target);\n } // Link url\n\n\n to(url) {\n return this.attr('href', url, xlink);\n }\n\n}\nextend(A, containerGeometry);\nregisterMethods({\n Container: {\n // Create a hyperlink element\n link: wrapWithAttrCheck(function (url) {\n return this.put(new A()).to(url);\n })\n },\n Element: {\n unlink() {\n const link = this.linker();\n if (!link) return this;\n const parent = link.parent();\n\n if (!parent) {\n return this.remove();\n }\n\n const index = parent.index(link);\n parent.add(this, index);\n link.remove();\n return this;\n },\n\n linkTo(url) {\n // reuse old link if possible\n let link = this.linker();\n\n if (!link) {\n link = new A();\n this.wrap(link);\n }\n\n if (typeof url === 'function') {\n url.call(link, link);\n } else {\n link.to(url);\n }\n\n return this;\n },\n\n linker() {\n const link = this.parent();\n\n if (link && link.node.nodeName.toLowerCase() === 'a') {\n return link;\n }\n\n return null;\n }\n\n }\n});\nregister(A, 'A');\n\nclass Mask extends Container {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('mask', node), attrs);\n } // Unmask all masked elements and remove itself\n\n\n remove() {\n // unmask all targets\n this.targets().forEach(function (el) {\n el.unmask();\n }); // remove mask from parent\n\n return super.remove();\n }\n\n targets() {\n return baseFind('svg [mask*=\"' + this.id() + '\"]');\n }\n\n}\nregisterMethods({\n Container: {\n mask: wrapWithAttrCheck(function () {\n return this.defs().put(new Mask());\n })\n },\n Element: {\n // Distribute mask to svg element\n masker() {\n return this.reference('mask');\n },\n\n maskWith(element) {\n // use given mask or create a new one\n const masker = element instanceof Mask ? element : this.parent().mask().add(element); // apply mask\n\n return this.attr('mask', 'url(\"#' + masker.id() + '\")');\n },\n\n // Unmask element\n unmask() {\n return this.attr('mask', null);\n }\n\n }\n});\nregister(Mask, 'Mask');\n\nclass Stop extends Element {\n constructor(node, attrs = node) {\n super(nodeOrNew('stop', node), attrs);\n } // add color stops\n\n\n update(o) {\n if (typeof o === 'number' || o instanceof SVGNumber) {\n o = {\n offset: arguments[0],\n color: arguments[1],\n opacity: arguments[2]\n };\n } // set attributes\n\n\n if (o.opacity != null) this.attr('stop-opacity', o.opacity);\n if (o.color != null) this.attr('stop-color', o.color);\n if (o.offset != null) this.attr('offset', new SVGNumber(o.offset));\n return this;\n }\n\n}\nregisterMethods({\n Gradient: {\n // Add a color stop\n stop: function (offset, color, opacity) {\n return this.put(new Stop()).update(offset, color, opacity);\n }\n }\n});\nregister(Stop, 'Stop');\n\nfunction cssRule(selector, rule) {\n if (!selector) return '';\n if (!rule) return selector;\n let ret = selector + '{';\n\n for (const i in rule) {\n ret += unCamelCase(i) + ':' + rule[i] + ';';\n }\n\n ret += '}';\n return ret;\n}\n\nclass Style extends Element {\n constructor(node, attrs = node) {\n super(nodeOrNew('style', node), attrs);\n }\n\n addText(w = '') {\n this.node.textContent += w;\n return this;\n }\n\n font(name, src, params = {}) {\n return this.rule('@font-face', {\n fontFamily: name,\n src: src,\n ...params\n });\n }\n\n rule(selector, obj) {\n return this.addText(cssRule(selector, obj));\n }\n\n}\nregisterMethods('Dom', {\n style(selector, obj) {\n return this.put(new Style()).rule(selector, obj);\n },\n\n fontface(name, src, params) {\n return this.put(new Style()).font(name, src, params);\n }\n\n});\nregister(Style, 'Style');\n\nclass TextPath extends Text {\n // Initialize node\n constructor(node, attrs = node) {\n super(nodeOrNew('textPath', node), attrs);\n } // return the array of the path track element\n\n\n array() {\n const track = this.track();\n return track ? track.array() : null;\n } // Plot path if any\n\n\n plot(d) {\n const track = this.track();\n let pathArray = null;\n\n if (track) {\n pathArray = track.plot(d);\n }\n\n return d == null ? pathArray : this;\n } // Get the path element\n\n\n track() {\n return this.reference('href');\n }\n\n}\nregisterMethods({\n Container: {\n textPath: wrapWithAttrCheck(function (text, path) {\n // Convert text to instance if needed\n if (!(text instanceof Text)) {\n text = this.text(text);\n }\n\n return text.path(path);\n })\n },\n Text: {\n // Create path for text to run on\n path: wrapWithAttrCheck(function (track, importNodes = true) {\n const textPath = new TextPath(); // if track is a path, reuse it\n\n if (!(track instanceof Path)) {\n // create path element\n track = this.defs().path(track);\n } // link textPath to path and add content\n\n\n textPath.attr('href', '#' + track, xlink); // Transplant all nodes from text to textPath\n\n let node;\n\n if (importNodes) {\n while (node = this.node.firstChild) {\n textPath.node.appendChild(node);\n }\n } // add textPath element as child node and return textPath\n\n\n return this.put(textPath);\n }),\n\n // Get the textPath children\n textPath() {\n return this.findOne('textPath');\n }\n\n },\n Path: {\n // creates a textPath from this path\n text: wrapWithAttrCheck(function (text) {\n // Convert text to instance if needed\n if (!(text instanceof Text)) {\n text = new Text().addTo(this.parent()).text(text);\n } // Create textPath from text and path and return\n\n\n return text.path(this);\n }),\n\n targets() {\n return baseFind('svg textPath').filter(node => {\n return (node.attr('href') || '').includes(this.id());\n }); // Does not work in IE11. Use when IE support is dropped\n // return baseFind('svg textPath[*|href*=\"' + this.id() + '\"]')\n }\n\n }\n});\nTextPath.prototype.MorphArray = PathArray;\nregister(TextPath, 'TextPath');\n\nclass Use extends Shape {\n constructor(node, attrs = node) {\n super(nodeOrNew('use', node), attrs);\n } // Use element as a reference\n\n\n use(element, file) {\n // Set lined element\n return this.attr('href', (file || '') + '#' + element, xlink);\n }\n\n}\nregisterMethods({\n Container: {\n // Create a use element\n use: wrapWithAttrCheck(function (element, file) {\n return this.put(new Use()).use(element, file);\n })\n }\n});\nregister(Use, 'Use');\n\n/* Optional Modules */\nconst SVG = makeInstance;\nextend([Svg, Symbol, Image, Pattern, Marker], getMethodsFor('viewbox'));\nextend([Line, Polyline, Polygon, Path], getMethodsFor('marker'));\nextend(Text, getMethodsFor('Text'));\nextend(Path, getMethodsFor('Path'));\nextend(Defs, getMethodsFor('Defs'));\nextend([Text, Tspan], getMethodsFor('Tspan'));\nextend([Rect, Ellipse, Gradient, Runner], getMethodsFor('radius'));\nextend(EventTarget, getMethodsFor('EventTarget'));\nextend(Dom, getMethodsFor('Dom'));\nextend(Element, getMethodsFor('Element'));\nextend(Shape, getMethodsFor('Shape'));\nextend([Container, Fragment], getMethodsFor('Container'));\nextend(Gradient, getMethodsFor('Gradient'));\nextend(Runner, getMethodsFor('Runner'));\nList.extend(getMethodNames());\nregisterMorphableType([SVGNumber, Color, Box, Matrix, SVGArray, PointArray, PathArray, Point]);\nmakeMorphable();\n\nexport { A, Animator, SVGArray as Array, Box, Circle, ClipPath, Color, Container, Controller, Defs, Dom, Ease, Element, Ellipse, EventTarget, ForeignObject, Fragment, G, Gradient, Image, Line, List, Marker, Mask, Matrix, Morphable, NonMorphable, SVGNumber as Number, ObjectBag, PID, Path, PathArray, Pattern, Point, PointArray, Polygon, Polyline, Queue, Rect, Runner, SVG, Shape, Spring, Stop, Style, Svg, Symbol, Text, TextPath, Timeline, TransformBag, Tspan, Use, adopt, assignNewId, clearEvents, create, defaults, dispatch, easing, eid, extend, baseFind as find, getClass, getEventTarget, getEvents, getWindow, makeInstance, makeMorphable, mockAdopt, namespaces, nodeOrNew, off, on, parser, regex, register, registerMorphableType, registerWindow, restoreWindow, root, saveWindow, utils, windowEvents, withWindow, wrapWithAttrCheck };\n//# sourceMappingURL=svg.esm.js.map\n","import {SVG} from '@svgdotjs/svg.js';\n\n// Source: workflow-svg.js project. Adapted to not be an external requirement to make it easier for the builder to work.\nexport function RecipientFlow() {\n let _json = {entities: []} as Record<string, any>;\n let _draw;\n let _lines = [];\n\n function initalize(id, width, height) {\n _draw = SVG().addTo(id).size(width, height);\n\n _draw.entities = [];\n _draw.lines = _draw.group();\n _draw.labels = _draw.group();\n }\n\n function _renderEntities(_draw, entity) {\n const group = _draw.group().attr({id: entity.id});\n _draw.entities.push(group);\n\n //assginment and default values for entities\n entity.background_color = entity.background_color ? entity.background_color : '#f06';\n entity.color = entity.color ? entity.color : '#ffffff';\n entity.radius = entity.radius ? entity.radius : 0;\n\n //the real entity\n group.entity = group\n .rect(entity.width, entity.height)\n .cx(entity.width / 2)\n .cy(entity.height / 2)\n .attr({fill: '#ffffff', stroke: entity.color, ['stroke-width']: 2})\n .radius(entity.radius);\n\n if (entity.class) {\n group.entity.attr('class', entity.class);\n }\n\n group\n .plain(entity.text)\n .cx(14)\n .cy(entity.height / 2 + 6)\n .attr({fill: entity.color});\n\n group.move(entity.x, entity.y);\n }\n\n function _renderLabels() {\n if (_json.labels && _json.labels.length > 0) {\n _json.labels.forEach(l => {\n _draw.labels.text(l.value).x(l.x).y(l.y);\n });\n }\n }\n\n function _renderPolylines(_draw, _lines) {\n _lines.forEach(line => _renderOnePolyline(_draw, line));\n }\n\n function _renderOnePolyline(_draw, line) {\n let polyline = '';\n\n const line_color = line.color || '#4c56cb';\n const from = _draw.findOne('#' + line.from.element);\n const to = _draw.findOne('#' + line.to.element);\n const pointsInBetween = _calculatePointsInBetween(line, from, to);\n\n //start point\n polyline += _calculateX(from, line.from.point) + ',' + _calculateY(from, line.from.point) + ' ';\n\n // points between them\n pointsInBetween.forEach(p => (polyline += p.x + ',' + p.y + ' '));\n\n if (line.to.point === 'top') {\n polyline += _calculateX(to, line.to.point) + ',' + _calculateY(to, line.to.point) + ' ';\n } else if (line.to.point === 'bottom') {\n polyline += _calculateX(to, line.to.point) + ',' + _calculateY(to, line.to.point) + ' ';\n } else {\n polyline += _calculateX(to, line.to.point) + ',' + _calculateY(to, line.to.point) + ' ';\n }\n\n if (!line.polyline) {\n line.polyline = _draw.lines.polyline(polyline).fill('none').stroke({color: line_color, width: 2, linecap: 'round', linejoin: 'round'}).attr('id', line.id);\n } else {\n line.polyline.plot(polyline);\n }\n }\n\n function _calculatePointsInBetween(line, from, to) {\n const pointsInBetween = [];\n\n const y1 = _calculateY(from, line.from.point);\n const y2 = _calculateY(to, line.to.point);\n const x1 = _calculateX(from, line.from.point);\n const x2 = _calculateX(to, line.to.point);\n\n const p1 = _translatePositionToNumber(line.from.point);\n const p2 = _translatePositionToNumber(line.to.point);\n const code = p1 - p2;\n\n // same position\n if (code === 0) {\n if (line.from.point === 'top') {\n if (y1 <= y2) {\n pointsInBetween.push({x: x1, y: y1 - 20});\n pointsInBetween.push({x: x2, y: y1 - 20});\n } else {\n pointsInBetween.push({x: x1, y: y2 - 20});\n pointsInBetween.push({x: x2, y: y2 - 20});\n }\n } else if (line.from.point === 'bottom') {\n if (y1 <= y2) {\n pointsInBetween.push({x: x1, y: y2 + 20});\n pointsInBetween.push({x: x2, y: y2 + 20});\n } else {\n pointsInBetween.push({x: x1, y: y1 + 20});\n pointsInBetween.push({x: x2, y: y1 + 20});\n }\n } else {\n if (x1 <= x2) {\n pointsInBetween.push({x: x2 + 20, y: y1});\n pointsInBetween.push({x: x2 + 20, y: y2});\n } else {\n pointsInBetween.push({x: x1 + 20, y: y1});\n pointsInBetween.push({x: x1 + 20, y: y2});\n }\n }\n }\n\n // on the opposite site\n if (code === 2 || code === -2) {\n // top or bottom\n if (x1 !== x2) {\n pointsInBetween.push({x: x1, y: y2 + (y1 - y2) / 2});\n pointsInBetween.push({x: x2, y: y2 + (y1 - y2) / 2});\n }\n }\n\n // corner cases\n if (code === 1 || code === -1 || code === 3 || code === -3) {\n if (line.from.point === 'top') {\n if (y1 < y2 + 20) {\n pointsInBetween.push({x: x1, y: y1 - 20});\n pointsInBetween.push({x: x2 + 20, y: y1 - 20});\n pointsInBetween.push({x: x2 + 20, y: y2});\n } else {\n pointsInBetween.push({x: x1, y: y2});\n }\n }\n\n if (line.from.point === 'bottom') {\n if (y1 > y2 - 20) {\n pointsInBetween.push({x: x1, y: y1 + 20});\n pointsInBetween.push({x: x2 + 20, y: y1 + 20});\n pointsInBetween.push({x: x2 + 20, y: y2});\n } else {\n pointsInBetween.push({x: x1, y: y2});\n }\n }\n }\n\n return pointsInBetween;\n }\n\n function _translatePositionToNumber(position) {\n switch (position) {\n case 'top':\n return 0;\n case 'bottom':\n return 2;\n default:\n return 3;\n }\n }\n\n function _calculateX(group, position) {\n const width = group.entity.attr('width');\n const x = group.entity.attr('x');\n\n switch (position) {\n case 'top':\n case 'bottom':\n return x + width / 2;\n default:\n return x - width / 2;\n }\n }\n\n function _calculateY(group, position) {\n const height = group.entity.attr('height');\n const y = group.entity.attr('y');\n\n switch (position) {\n case 'top':\n return y;\n case 'bottom':\n return y + height;\n default:\n return y;\n }\n }\n\n function _update() {\n //clean up\n _draw.entities.forEach(entity => entity.remove());\n _draw.entities = [];\n\n _lines = [];\n\n // default values\n if (!_json.labels) {\n _json.labels = [];\n }\n\n _json.labels = _json.labels.map(l => {\n return {\n id: l.id,\n value: l.value ? l.value : '',\n x: l.x ? l.x : 0,\n y: l.y ? l.y : 0,\n color: l.color ? l.color : 'black',\n };\n });\n\n _json.entities.map(entity => {\n entity.type = entity.type ? entity.type : 'entity';\n\n if (entity.type === 'operation') {\n entity.height = entity.width;\n }\n });\n\n _renderLabels();\n\n _json.entities.forEach(entity => _renderEntities(_draw, entity));\n _lines = _json.lines; // needed to have no circular dependencies\n\n _renderPolylines(_draw, _lines);\n }\n\n function update(json) {\n _json = json;\n _update();\n }\n\n return {\n initalize,\n update,\n };\n}\n","@import '../../../theme.scss';\n\nverdocs-status-indicator {\n display: flex;\n font-size: 18px;\n flex-wrap: nowrap;\n padding: 4px 12px;\n border-radius: 6px;\n color: $label-color;\n align-items: center;\n flex-direction: row;\n font-family: $primary-font;\n\n &.has-document:hover {\n cursor: pointer;\n background: rgba(0, 0, 0, 0.1);\n }\n\n .icon {\n width: 25px;\n height: 25px;\n margin: 0 10px -4px 0;\n }\n\n &.dark {\n color: $verdocs-grey-4;\n }\n\n &.small {\n font-size: 16px;\n\n .icon {\n width: 20px;\n height: 20px;\n margin: 0 8px -4px 0;\n }\n }\n\n .detail-panel {\n display: none;\n\n background: $verdocs-grey-4;\n border: 1px solid $verdocs-bg-5;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n border-radius: 10px;\n font-weight: 500;\n\n h1 {\n font-size: $verdocs-h1-size;\n color: $verdocs-grey-0;\n }\n }\n\n .detail-panel[data-show] {\n display: flex;\n }\n}\n","import {RecipientFlow} from './recipient-flow';\nimport {createPopper, Instance} from '@popperjs/core';\nimport {Component, Prop, Host, h, State} from '@stencil/core';\nimport {IEnvelope, TEnvelopeStatus, TRecipientStatus} from '@verdocs/js-sdk/Envelopes/Types';\nimport AcceptedLight from './accepted-light.svg';\nimport AcceptedDark from './accepted-dark.svg';\nimport CanceledLight from './canceled-light.svg';\nimport CanceledDark from './canceled-dark.svg';\nimport CompletedLight from './complete-light.svg';\nimport CompletedDark from './complete-dark.svg';\nimport DeclinedLight from './declined-light.svg';\nimport DeclinedDark from './declined-dark.svg';\nimport InProgressLight from './in-progress-light.svg';\nimport InProgressDark from './in-progress-dark.svg';\nimport OpenedLight from './opened-light.svg';\nimport OpenedDark from './opened-dark.svg';\nimport PendingLight from './pending-light.svg';\nimport PendingDark from './pending-dark.svg';\nimport SignedLight from './signed-light.svg';\nimport SignedDark from './signed-dark.svg';\nimport SomeSignedLight from './some-signed-light.svg';\nimport SomeSignedDark from './some-signed-dark.svg';\nimport SubmittedLight from './submitted-light.svg';\nimport SubmittedDark from './submitted-dark.svg';\n\nconst ENTRY_WIDTH = 140;\nconst ENTRY_HEIGHT = 40;\nconst ENTRY_PADDING = 40;\n\n/**\n * Displays an icon and message describing a document's completion status. For convenience, the status may be passed in either\n * directly as a status field or the whole document object may be passed in.\n *\n * If the document is provided, the status flag will indicate the document's overall status. This also makes the component clickable\n * to display a popup panel with per-recipient status data.\n *\n * If the status is provided as a string it can be either a `TRecipientStatus` or `TDocumentStatus` value.\n */\n@Component({\n tag: 'verdocs-status-indicator',\n styleUrl: 'verdocs-status-indicator.scss',\n})\nexport class VerdocsStatusIndicator {\n private summaryComponent?: HTMLButtonElement;\n private detailPanel?: HTMLDivElement;\n private popper?: Instance;\n\n /**\n * The size (height) of the indicator. The small variant is suitable for use in densely populated components such as table rows.\n */\n @Prop() size: 'small' | 'normal' = 'normal';\n\n /**\n * The theme to use for diplay.\n */\n @Prop() theme?: 'dark' | 'light' = 'light';\n\n /**\n * The status to display.\n */\n // The accepted override is here because we don't actually have an official status for that yet, but we plan to add it\n @Prop() status?: TEnvelopeStatus | TRecipientStatus | 'accepted';\n\n /**\n * The document to display status for. Ignored if `status` is set directly.\n */\n @Prop() envelope?: IEnvelope;\n\n @State() isOpen: boolean;\n\n @State() recipientStatusIcons = [];\n\n @State() containerId = `verdocs-status-indicator-${Math.random().toString(36).substring(2, 11)}`;\n\n componentDidLoad() {\n this.popper = createPopper(this.summaryComponent, this.detailPanel, {placement: 'bottom-start', modifiers: [{name: 'offset', options: {offset: [0, 10]}}]});\n\n if (this.envelope?.recipients) {\n const recipientsAtLevel = [];\n this.envelope.recipients.forEach(recipient => {\n const level = recipient.sequence - 1;\n recipientsAtLevel[level] ||= [];\n const id = `r-${level}-${recipientsAtLevel[level].length}`;\n recipientsAtLevel[level].push({...recipient, id});\n });\n\n const levelCount = Object.keys(recipientsAtLevel).length;\n\n const canvasHeight = levelCount * ENTRY_HEIGHT + (levelCount + 1) * ENTRY_PADDING;\n let canvasWidth = 0;\n Object.values(recipientsAtLevel).forEach(recipients => {\n let minW = recipients.length * ENTRY_WIDTH + (recipients.length + 1) * ENTRY_PADDING;\n if (minW > canvasWidth) {\n canvasWidth = minW;\n }\n });\n\n const entities = [];\n const lines = [];\n const statusIcons = [];\n\n let y = ENTRY_PADDING;\n Object.entries(recipientsAtLevel).forEach(([level, recipients]) => {\n // To center align here, we figure out how many items are per line and how much leftover space there would be if we just\n // drew them left-to-right. We add half of that as a left offset.\n const renderedItemsWidth = recipients.length * (ENTRY_WIDTH + ENTRY_PADDING);\n const leftoverSpace = canvasWidth - renderedItemsWidth;\n const leftOffset = ENTRY_PADDING / 2 + leftoverSpace / 2;\n\n recipients.forEach((recipient, index) => {\n const [first, last] = (recipient.full_name || 'Unknown').toUpperCase().split(' ');\n const name = `${first} ${last?.substring(0, 1)}`;\n const entity = {\n id: recipient.id,\n text: name,\n icon: this.getStatusIcon(recipient.status),\n x: index * (ENTRY_WIDTH + ENTRY_PADDING) + leftOffset,\n y,\n width: ENTRY_WIDTH,\n height: ENTRY_HEIGHT,\n color: this.getStatusColor(recipient.status),\n radius: 8,\n };\n entities.push(entity);\n\n statusIcons.push({\n icon: this.getStatusIcon(recipient.status),\n x: index * (ENTRY_WIDTH + ENTRY_PADDING) + leftOffset + (ENTRY_WIDTH - 32),\n y: y + ENTRY_HEIGHT / 2 - 13,\n });\n\n recipientsAtLevel[+level - 1]?.forEach(prevRecip => {\n const line = {\n id: `line-${prevRecip.id}-${entity.id}`,\n from: {element: prevRecip.id, point: 'bottom'},\n to: {element: entity.id, point: 'top'},\n color: this.getStatusColor(recipient.status),\n };\n lines.push(line);\n });\n });\n\n y += ENTRY_HEIGHT + ENTRY_PADDING;\n });\n\n this.recipientStatusIcons = statusIcons;\n\n const diagram = RecipientFlow();\n diagram.initalize(`#${this.containerId}`, canvasWidth, canvasHeight);\n diagram.update({entities, lines});\n }\n }\n\n // See https://popper.js.org/docs/v2/tutorial/\n // What we're doing here is clearing event listeners when they aren't needed, to increase performance in lists\n showDropdown() {\n this.isOpen = true;\n this.detailPanel.setAttribute('data-show', '');\n this.detailPanel.removeAttribute('aria-hidden');\n\n this.popper?.setOptions(options => ({\n ...options,\n modifiers: [...options.modifiers, {name: 'eventListeners', enabled: true}],\n }));\n\n this.popper?.update();\n }\n\n handleHideDropdown(e: any) {\n if (e?.target?.localName === 'button' && e?.target?.className === 'arrow') {\n // This event is fired when a menu element is clicked because the button \"loses focus\" then too\n return;\n }\n\n this.hide();\n }\n\n toggleDropdown() {\n if (this.isOpen) {\n this.hide();\n } else {\n this.showDropdown();\n }\n }\n\n hide() {\n this.isOpen = false;\n this.detailPanel.removeAttribute('data-show');\n this.detailPanel.setAttribute('aria-hidden', 'true');\n this.popper?.setOptions(options => ({\n ...options,\n modifiers: [...options.modifiers, {name: 'eventListeners', enabled: false}],\n }));\n }\n\n getStatusColor(status: string) {\n switch (status) {\n case 'invited':\n case 'opened':\n case 'accepted':\n case 'signed':\n return '#654dcb';\n case 'some-signed':\n case 'submitted':\n case 'complete':\n return '#55bc81';\n case 'declined':\n return '#ff0000';\n case 'canceled':\n case 'in progress':\n case 'pending':\n default:\n return '#999999';\n }\n }\n\n getStatusIcon(status: string) {\n switch (status) {\n case 'accepted':\n return this.theme === 'light' ? AcceptedLight : AcceptedDark;\n case 'complete':\n return this.theme === 'light' ? CompletedLight : CompletedDark;\n case 'in progress':\n return this.theme === 'light' ? InProgressLight : InProgressDark;\n case 'canceled':\n return this.theme === 'light' ? CanceledLight : CanceledDark;\n case 'declined':\n return this.theme === 'light' ? DeclinedLight : DeclinedDark;\n case 'invited':\n return this.theme === 'light' ? InProgressLight : InProgressDark;\n case 'opened':\n return this.theme === 'light' ? OpenedLight : OpenedDark;\n case 'signed':\n return this.theme === 'light' ? SignedLight : SignedDark;\n case 'submitted':\n return this.theme === 'light' ? SubmittedLight : SubmittedDark;\n case 'some-signed':\n return this.theme === 'light' ? SomeSignedLight : SomeSignedDark;\n default:\n case 'pending':\n return this.theme === 'light' ? PendingLight : PendingDark;\n }\n }\n\n getStatusMessage(status: string) {\n switch (status) {\n case 'accepted':\n return 'Accepted';\n case 'complete':\n return 'Completed';\n case 'in progress':\n return 'In Progress';\n case 'canceled':\n return 'Cancelled';\n case 'declined':\n return 'Declined';\n case 'invited':\n return 'Invited';\n case 'opened':\n return 'Opened';\n case 'signed':\n return 'Signed';\n case 'submitted':\n return 'Submitted';\n case 'some-signed':\n return 'Partly Signed';\n default:\n case 'pending':\n return 'Pending';\n }\n }\n\n render() {\n // The extra fallback for accepted is to future proof for when we add that.\n let status: string = this.status || this.envelope?.status || 'pending' || 'accepted';\n if (!this.status && this.envelope?.recipients) {\n const submittedRecipients = this.envelope.recipients.filter(r => r.status === 'submitted');\n if (submittedRecipients.length > 0 && submittedRecipients.length !== this.envelope.recipients.length) {\n status = 'some-signed';\n }\n }\n\n const icon = this.getStatusIcon(status);\n const statusMessage = this.getStatusMessage(status);\n\n return (\n <Host\n ref={el => (this.summaryComponent = el as HTMLButtonElement)}\n class={`${this.theme} ${this.size} ${this.envelope ? 'has-document' : ''}`}\n aria-label=\"Click to View Details\"\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n this.envelope && this.toggleDropdown();\n }}\n onBlur={e => this.envelope && this.handleHideDropdown(e)}\n >\n <span class=\"icon\" innerHTML={icon} />\n <span class=\"content\">{statusMessage}</span>\n\n <div class=\"detail-panel\" ref={el => (this.detailPanel = el as HTMLDivElement)}>\n <div id={`${this.containerId}`} />\n {this.recipientStatusIcons.map(icon => (\n <span innerHTML={icon.icon} style={{position: 'absolute', top: `${icon.y}px`, left: `${icon.x}px`}} />\n ))}\n </div>\n </Host>\n );\n }\n}\n"]}
|