datakeen-session-react 1.1.140-rc.85 → 1.1.140-rc.87
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/components/session/UserInputForm/AddressFields.js +1 -1
- package/dist/cjs/components/session/UserInputForm/AddressFields.js.map +1 -1
- package/dist/cjs/components/signature-electronic/SignatureElectronic.js +7 -4
- package/dist/cjs/components/signature-electronic/SignatureElectronic.js.map +1 -1
- package/dist/cjs/components/signature-electronic/SignedDocumentPreview.js +60 -37
- package/dist/cjs/components/signature-electronic/SignedDocumentPreview.js.map +1 -1
- package/dist/cjs/index.css.js +1 -1
- package/dist/esm/components/session/UserInputForm/AddressFields.js +1 -1
- package/dist/esm/components/session/UserInputForm/AddressFields.js.map +1 -1
- package/dist/esm/components/signature-electronic/SignatureElectronic.js +7 -4
- package/dist/esm/components/signature-electronic/SignatureElectronic.js.map +1 -1
- package/dist/esm/components/signature-electronic/SignedDocumentPreview.js +61 -38
- package/dist/esm/components/signature-electronic/SignedDocumentPreview.js.map +1 -1
- package/dist/esm/index.css.js +1 -1
- package/package.json +1 -1
|
@@ -59,7 +59,7 @@ var AddressFields = function (_a) {
|
|
|
59
59
|
? "border-red-500 bg-red-50"
|
|
60
60
|
: "border-gray-300 hover-border-gray-400"), autoComplete: "postal-code" }), errors.postalCode && (jsxRuntime.jsxs("p", { className: "flex items-center gap-1 text-sm text-red-600", children: [jsxRuntime.jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.postal_code_required")] }))] }), jsxRuntime.jsxs("div", { className: "space-y-2", children: [jsxRuntime.jsx(Label__namespace.Root, { htmlFor: "city", className: "block text-sm md:text-base font-semibold text-gray-900", children: t("user_input_form.fields.city") }), jsxRuntime.jsx("input", { id: "city", type: "text", value: form.city || "", onChange: function (event) { return onFieldChange("city", event.target.value); }, placeholder: t("user_input_form.placeholders.city"), className: clsx("w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent", errors.city
|
|
61
61
|
? "border-red-500 bg-red-50"
|
|
62
|
-
: "border-gray-300 hover-border-gray-400"), autoComplete: "address-level2" }), errors.city && (jsxRuntime.jsxs("p", { className: "flex items-center gap-1 text-sm text-red-600", children: [jsxRuntime.jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.city_required")] }))] })] }), jsxRuntime.jsxs("div", { className: "space-y-2", children: [jsxRuntime.jsx(Label__namespace.Root, { htmlFor: "country", className: "block text-sm md:text-base font-semibold text-gray-900", children: t("user_input_form.fields.country") }), jsxRuntime.jsx(SelectComponent.Select, { options: countryOptions, value: form.countryCode || "", onValueChange: function (value) { return onFieldChange("countryCode", value); }, placeholder: t("user_input_form.select.country"), error: Boolean(errors.country) }), errors.country && (jsxRuntime.jsxs("p", { className: "flex items-center gap-1 text-sm text-red-600", children: [jsxRuntime.jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.country_required")] }))] })] }));
|
|
62
|
+
: "border-gray-300 hover-border-gray-400"), autoComplete: "address-level2" }), errors.city && (jsxRuntime.jsxs("p", { className: "flex items-center gap-1 text-sm text-red-600", children: [jsxRuntime.jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.city_required")] }))] })] }), jsxRuntime.jsxs("div", { className: "space-y-2", children: [jsxRuntime.jsx(Label__namespace.Root, { htmlFor: "country", className: "block text-sm md:text-base font-semibold text-gray-900", children: t("user_input_form.fields.country") }), jsxRuntime.jsx(SelectComponent.Select, { options: countryOptions, value: form.countryCode || "", onValueChange: function (value) { return onFieldChange("countryCode", value); }, placeholder: t("user_input_form.select.country"), error: Boolean(errors.country), allowCustomValue: true }), errors.country && (jsxRuntime.jsxs("p", { className: "flex items-center gap-1 text-sm text-red-600", children: [jsxRuntime.jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.country_required")] }))] })] }));
|
|
63
63
|
};
|
|
64
64
|
|
|
65
65
|
exports.default = AddressFields;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddressFields.js","sources":["../../../../../../src/components/session/UserInputForm/AddressFields.tsx"],"sourcesContent":["import * as Label from \"@radix-ui/react-label\";\nimport clsx from \"clsx\";\nimport { Select } from \"../../ui/SelectComponent\";\nimport type {\n AddressSuggestion,\n RequestedFields,\n UserInputFormErrors,\n UserInputFormState,\n} from \"../../../types/userInputForm\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport { useCountryOptions } from \"../../../hooks/useCountryOptions\";\n\ninterface AddressFieldsProps {\n form: UserInputFormState;\n errors: UserInputFormErrors;\n requestedFields: RequestedFields;\n addressSuggestions: AddressSuggestion[];\n showSuggestions: boolean;\n onFieldChange: (key: keyof UserInputFormState, value: string) => void;\n onAddressChange: (value: string) => void;\n onAddressFocus: () => void;\n onAddressBlur: () => void;\n onApplySuggestion: (suggestion: AddressSuggestion) => void;\n}\n\nconst AddressFields = ({\n form,\n errors,\n requestedFields,\n addressSuggestions,\n showSuggestions,\n onFieldChange,\n onAddressChange,\n onAddressFocus,\n onAddressBlur,\n onApplySuggestion,\n}: AddressFieldsProps) => {\n const { t } = useI18n();\n const countryOptions = useCountryOptions(\"user_input_form.select.country\");\n\n if (!requestedFields.has(\"adresse\")) {\n return null;\n }\n\n return (\n <>\n <div className=\"relative space-y-2\">\n <Label.Root\n htmlFor=\"addressLine1\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.address_line1\")}\n </Label.Root>\n <input\n id=\"addressLine1\"\n type=\"text\"\n value={form.addressLine1 || \"\"}\n onChange={(event) => onAddressChange(event.target.value)}\n onFocus={onAddressFocus}\n onBlur={onAddressBlur}\n placeholder={t(\"user_input_form.placeholders.address_line1\")}\n className={clsx(\n \"w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent\",\n errors.addressLine1\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover:border-gray-400\"\n )}\n autoComplete=\"street-address\"\n />\n {showSuggestions && addressSuggestions.length > 0 && (\n <div className=\"absolute z-20 mt-1 max-h-48 w-full overflow-auto rounded-lg border border-gray-200 bg-white shadow-lg\">\n {addressSuggestions.map((suggestion) => (\n <button\n key={suggestion.id}\n type=\"button\"\n className=\"w-full px-3 py-2 text-left text-sm hover:bg-gray-100\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onApplySuggestion(suggestion)}\n >\n <div className=\"flex flex-col\">\n <span className=\"text-sm text-gray-900\">\n {suggestion.label}\n </span>\n {(suggestion.city ||\n suggestion.postalCode ||\n suggestion.country ||\n suggestion.countryCode) && (\n <span className=\"text-xs text-gray-500\">\n {[\n [suggestion.postalCode, suggestion.city]\n .filter(Boolean)\n .join(\" \"),\n suggestion.country ||\n suggestion.countryCode?.toUpperCase(),\n ]\n .filter(Boolean)\n .join(\", \")}\n </span>\n )}\n </div>\n </button>\n ))}\n </div>\n )}\n {errors.addressLine1 && (\n <p className=\"flex items-center gap-1 text-sm text-red-600\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.address_line1_required\")}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"addressLine2\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.address_line2\")}\n </Label.Root>\n <input\n id=\"addressLine2\"\n type=\"text\"\n value={form.addressLine2 || \"\"}\n onChange={(event) =>\n onFieldChange(\"addressLine2\", event.target.value)\n }\n placeholder={t(\"user_input_form.placeholders.address_line2\")}\n className=\"w-full rounded-lg border border-gray-300 px-3 py-3 text-base transition-colors hover:border-gray-400 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-[#11E5C5]\"\n autoComplete=\"address-line2\"\n />\n </div>\n\n <div className=\"grid grid-cols-[140px_minmax(0,1fr)] gap-3 md:grid-cols-[160px_minmax(0,1fr)]\">\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"postalCode\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.postal_code\")}\n </Label.Root>\n <input\n id=\"postalCode\"\n type=\"text\"\n value={form.postalCode || \"\"}\n onChange={(event) =>\n onFieldChange(\"postalCode\", event.target.value)\n }\n placeholder={t(\"user_input_form.placeholders.postal_code\")}\n className={clsx(\n \"w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent\",\n errors.postalCode\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover-border-gray-400\"\n )}\n autoComplete=\"postal-code\"\n />\n {errors.postalCode && (\n <p className=\"flex items-center gap-1 text-sm text-red-600\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.postal_code_required\")}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"city\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.city\")}\n </Label.Root>\n <input\n id=\"city\"\n type=\"text\"\n value={form.city || \"\"}\n onChange={(event) => onFieldChange(\"city\", event.target.value)}\n placeholder={t(\"user_input_form.placeholders.city\")}\n className={clsx(\n \"w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent\",\n errors.city\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover-border-gray-400\"\n )}\n autoComplete=\"address-level2\"\n />\n {errors.city && (\n <p className=\"flex items-center gap-1 text-sm text-red-600\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.city_required\")}\n </p>\n )}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"country\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.country\")}\n </Label.Root>\n <Select\n options={countryOptions}\n value={form.countryCode || \"\"}\n onValueChange={(value) => onFieldChange(\"countryCode\", value)}\n placeholder={t(\"user_input_form.select.country\")}\n error={Boolean(errors.country)}\n />\n {errors.country && (\n <p className=\"flex items-center gap-1 text-sm text-red-600\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.country_required\")}\n </p>\n )}\n </div>\n </>\n );\n};\n\nexport default AddressFields;\n"],"names":["useI18n","useCountryOptions","_jsxs","_Fragment","_jsx","Label","Select"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AddressFields.js","sources":["../../../../../../src/components/session/UserInputForm/AddressFields.tsx"],"sourcesContent":["import * as Label from \"@radix-ui/react-label\";\nimport clsx from \"clsx\";\nimport { Select } from \"../../ui/SelectComponent\";\nimport type {\n AddressSuggestion,\n RequestedFields,\n UserInputFormErrors,\n UserInputFormState,\n} from \"../../../types/userInputForm\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport { useCountryOptions } from \"../../../hooks/useCountryOptions\";\n\ninterface AddressFieldsProps {\n form: UserInputFormState;\n errors: UserInputFormErrors;\n requestedFields: RequestedFields;\n addressSuggestions: AddressSuggestion[];\n showSuggestions: boolean;\n onFieldChange: (key: keyof UserInputFormState, value: string) => void;\n onAddressChange: (value: string) => void;\n onAddressFocus: () => void;\n onAddressBlur: () => void;\n onApplySuggestion: (suggestion: AddressSuggestion) => void;\n}\n\nconst AddressFields = ({\n form,\n errors,\n requestedFields,\n addressSuggestions,\n showSuggestions,\n onFieldChange,\n onAddressChange,\n onAddressFocus,\n onAddressBlur,\n onApplySuggestion,\n}: AddressFieldsProps) => {\n const { t } = useI18n();\n const countryOptions = useCountryOptions(\"user_input_form.select.country\");\n\n if (!requestedFields.has(\"adresse\")) {\n return null;\n }\n\n return (\n <>\n <div className=\"relative space-y-2\">\n <Label.Root\n htmlFor=\"addressLine1\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.address_line1\")}\n </Label.Root>\n <input\n id=\"addressLine1\"\n type=\"text\"\n value={form.addressLine1 || \"\"}\n onChange={(event) => onAddressChange(event.target.value)}\n onFocus={onAddressFocus}\n onBlur={onAddressBlur}\n placeholder={t(\"user_input_form.placeholders.address_line1\")}\n className={clsx(\n \"w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent\",\n errors.addressLine1\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover:border-gray-400\"\n )}\n autoComplete=\"street-address\"\n />\n {showSuggestions && addressSuggestions.length > 0 && (\n <div className=\"absolute z-20 mt-1 max-h-48 w-full overflow-auto rounded-lg border border-gray-200 bg-white shadow-lg\">\n {addressSuggestions.map((suggestion) => (\n <button\n key={suggestion.id}\n type=\"button\"\n className=\"w-full px-3 py-2 text-left text-sm hover:bg-gray-100\"\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onApplySuggestion(suggestion)}\n >\n <div className=\"flex flex-col\">\n <span className=\"text-sm text-gray-900\">\n {suggestion.label}\n </span>\n {(suggestion.city ||\n suggestion.postalCode ||\n suggestion.country ||\n suggestion.countryCode) && (\n <span className=\"text-xs text-gray-500\">\n {[\n [suggestion.postalCode, suggestion.city]\n .filter(Boolean)\n .join(\" \"),\n suggestion.country ||\n suggestion.countryCode?.toUpperCase(),\n ]\n .filter(Boolean)\n .join(\", \")}\n </span>\n )}\n </div>\n </button>\n ))}\n </div>\n )}\n {errors.addressLine1 && (\n <p className=\"flex items-center gap-1 text-sm text-red-600\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.address_line1_required\")}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"addressLine2\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.address_line2\")}\n </Label.Root>\n <input\n id=\"addressLine2\"\n type=\"text\"\n value={form.addressLine2 || \"\"}\n onChange={(event) =>\n onFieldChange(\"addressLine2\", event.target.value)\n }\n placeholder={t(\"user_input_form.placeholders.address_line2\")}\n className=\"w-full rounded-lg border border-gray-300 px-3 py-3 text-base transition-colors hover:border-gray-400 focus:border-transparent focus:outline-none focus:ring-2 focus:ring-[#11E5C5]\"\n autoComplete=\"address-line2\"\n />\n </div>\n\n <div className=\"grid grid-cols-[140px_minmax(0,1fr)] gap-3 md:grid-cols-[160px_minmax(0,1fr)]\">\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"postalCode\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.postal_code\")}\n </Label.Root>\n <input\n id=\"postalCode\"\n type=\"text\"\n value={form.postalCode || \"\"}\n onChange={(event) =>\n onFieldChange(\"postalCode\", event.target.value)\n }\n placeholder={t(\"user_input_form.placeholders.postal_code\")}\n className={clsx(\n \"w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent\",\n errors.postalCode\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover-border-gray-400\"\n )}\n autoComplete=\"postal-code\"\n />\n {errors.postalCode && (\n <p className=\"flex items-center gap-1 text-sm text-red-600\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.postal_code_required\")}\n </p>\n )}\n </div>\n\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"city\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.city\")}\n </Label.Root>\n <input\n id=\"city\"\n type=\"text\"\n value={form.city || \"\"}\n onChange={(event) => onFieldChange(\"city\", event.target.value)}\n placeholder={t(\"user_input_form.placeholders.city\")}\n className={clsx(\n \"w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent\",\n errors.city\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover-border-gray-400\"\n )}\n autoComplete=\"address-level2\"\n />\n {errors.city && (\n <p className=\"flex items-center gap-1 text-sm text-red-600\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.city_required\")}\n </p>\n )}\n </div>\n </div>\n\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"country\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\"user_input_form.fields.country\")}\n </Label.Root>\n <Select\n options={countryOptions}\n value={form.countryCode || \"\"}\n onValueChange={(value) => onFieldChange(\"countryCode\", value)}\n placeholder={t(\"user_input_form.select.country\")}\n error={Boolean(errors.country)}\n allowCustomValue\n />\n {errors.country && (\n <p className=\"flex items-center gap-1 text-sm text-red-600\">\n <span className=\"text-red-500\">⚠</span>\n {t(\"user_input_form.errors.country_required\")}\n </p>\n )}\n </div>\n </>\n );\n};\n\nexport default AddressFields;\n"],"names":["useI18n","useCountryOptions","_jsxs","_Fragment","_jsx","Label","Select"],"mappings":"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"}
|
|
@@ -29,15 +29,17 @@ var FIELD_KEY_TO_USER_INPUT = {
|
|
|
29
29
|
tva: function (ui) { return ui.tva; },
|
|
30
30
|
};
|
|
31
31
|
var SignatureElectronic = function (_a) {
|
|
32
|
+
var _b;
|
|
32
33
|
var sessionId = _a.sessionId, stepObject = _a.stepObject, node = _a.node, session = _a.session, title = _a.title, description = _a.description, external_id = _a.external_id, fieldMappings = _a.fieldMappings, userInput = _a.userInput, contactInfo = _a.contactInfo;
|
|
33
34
|
var t = reactI18next.useTranslation("translation", { i18n: index.default }).t;
|
|
34
35
|
var signatureViewStorageKey = React.useMemo(function () { return "dk-signature-open:".concat(sessionId, ":").concat(external_id !== null && external_id !== void 0 ? external_id : "no-template"); }, [sessionId, external_id]);
|
|
35
|
-
var
|
|
36
|
+
var _c = React.useState(function () {
|
|
36
37
|
if (typeof window === "undefined")
|
|
37
38
|
return false;
|
|
38
39
|
return window.sessionStorage.getItem(signatureViewStorageKey) === "1";
|
|
39
|
-
}), showSignature =
|
|
40
|
-
var
|
|
40
|
+
}), showSignature = _c[0], setShowSignature = _c[1];
|
|
41
|
+
var _d = React.useState(false), showSignedDocumentPreview = _d[0], setShowSignedDocumentPreview = _d[1];
|
|
42
|
+
var _e = React.useState(null), signedAt = _e[0], setSignedAt = _e[1];
|
|
41
43
|
React.useEffect(function () {
|
|
42
44
|
if (typeof window === "undefined")
|
|
43
45
|
return;
|
|
@@ -110,6 +112,7 @@ var SignatureElectronic = function (_a) {
|
|
|
110
112
|
case 4:
|
|
111
113
|
// Toujours montrer le document réellement signé avant de continuer
|
|
112
114
|
// (rassure l'utilisateur — pas de bascule directe vers l'étape suivante).
|
|
115
|
+
setSignedAt(new Date().toISOString());
|
|
113
116
|
setShowSignedDocumentPreview(true);
|
|
114
117
|
return [2 /*return*/];
|
|
115
118
|
}
|
|
@@ -131,7 +134,7 @@ var SignatureElectronic = function (_a) {
|
|
|
131
134
|
}
|
|
132
135
|
};
|
|
133
136
|
if (showSignedDocumentPreview) {
|
|
134
|
-
return (jsxRuntime.jsx(SignedDocumentPreview.default, { sessionId: sessionId, nodeId: node.id, onContinue: handleContinueFromPreview }));
|
|
137
|
+
return (jsxRuntime.jsx(SignedDocumentPreview.default, { sessionId: sessionId, nodeId: node.id, nodeTitle: node.pageTitle || node.title, completedAt: signedAt, logo: (_b = session === null || session === void 0 ? void 0 : session.template) === null || _b === void 0 ? void 0 : _b.logo, onContinue: handleContinueFromPreview }));
|
|
135
138
|
}
|
|
136
139
|
if (showSignature && external_id) {
|
|
137
140
|
return (jsxRuntime.jsx(DocusealSignature.default, { sessionId: sessionId, templateId: external_id, templateName: title, onComplete: handleComplete, onBack: handleBack, prefillValues: prefillValues, readonlyFieldNames: readonlyFieldNames }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignatureElectronic.js","sources":["../../../../../src/components/signature-electronic/SignatureElectronic.tsx"],"sourcesContent":["import React, { useState, useMemo, useEffect } from \"react\";\nimport type { stepObject, SessionTemplateNode, SessionData } from \"../../types/session\";\nimport type { UserInput } from \"../../types/userInput\";\nimport type { ContactInfo } from \"../../types/contactInfo\";\nimport { useTranslation } from \"react-i18next\";\nimport sdkI18n from \"../../i18n\";\nimport SignatureElectronicIntroduction from \"./SignatureElectronicIntroduction\";\nimport DocusealSignature from \"./DocusealSignature\";\nimport SignedDocumentPreview from \"./SignedDocumentPreview\";\nimport { updateSessionStatus } from \"../../services/sessionService\";\n\n/**\n * Maps an InformationFieldKey (journey field) to the corresponding UserInput key.\n * This bridges the admin-defined field names to the actual data collected in the SDK.\n */\nconst FIELD_KEY_TO_USER_INPUT: Record<string, (ui: UserInput, ci?: ContactInfo) => string | undefined> = {\n nom: (ui) => ui.lastName,\n denomination_sociale: (ui) => ui.companyName,\n prenom: (ui) => ui.firstName,\n date_naissance: (ui) => ui.birthDate,\n email: (ui, ci) => ui.email || ci?.email,\n sms: (ui, ci) => ui.sms || ui.phoneNumber || ci?.phoneNumber,\n adresse: (ui) => [ui.addressLine1, ui.addressLine2, ui.postalCode, ui.city, ui.countryCode].filter(Boolean).join(', '),\n nationalite: (ui) => ui.nationality,\n siret: (ui) => ui.siret,\n tva: (ui) => ui.tva,\n};\n\ninterface SignatureElectronicProps {\n sessionId: string;\n stepObject: stepObject;\n node: SessionTemplateNode;\n session: SessionData;\n title?: string;\n description?: string;\n external_id?: string;\n fieldMappings?: SessionTemplateNode['fieldMappings'];\n userInput?: UserInput;\n contactInfo?: ContactInfo;\n}\n\nconst SignatureElectronic: React.FC<SignatureElectronicProps> = ({\n sessionId,\n stepObject,\n node,\n session,\n title,\n description,\n external_id,\n fieldMappings,\n userInput,\n contactInfo,\n}) => {\n const { t } = useTranslation(\"translation\", { i18n: sdkI18n });\n const signatureViewStorageKey = useMemo(() => `dk-signature-open:${sessionId}:${external_id ?? \"no-template\"}`, [sessionId, external_id]);\n const [showSignature, setShowSignature] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n return window.sessionStorage.getItem(signatureViewStorageKey) === \"1\";\n });\n const [showSignedDocumentPreview, setShowSignedDocumentPreview] = useState<boolean>(false);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n if (showSignature) {\n window.sessionStorage.setItem(signatureViewStorageKey, \"1\");\n } else {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n }, [showSignature, signatureViewStorageKey]);\n\n /**\n * Build the pre-fill values object from userInput + fieldMappings.\n * Maps each configured field to its value from userInput.\n * Used by DocusealForm's `values` prop for client-side pre-filling.\n */\n const prefillValues = useMemo<Record<string, string> | undefined>(() => {\n if (!fieldMappings || !userInput) return undefined;\n\n const values: Record<string, string> = {};\n\n fieldMappings.forEach(mapping => {\n const resolver = FIELD_KEY_TO_USER_INPUT[mapping.sourceFieldId];\n let value: string | undefined;\n\n if (resolver) {\n value = resolver(userInput, contactInfo);\n } else if (userInput.customFormData) {\n const raw = userInput.customFormData[mapping.sourceFieldId];\n value = raw != null ? String(raw) : undefined;\n }\n\n if (value !== undefined && value !== '') {\n values[mapping.sourceFieldId] = value;\n }\n });\n\n return Object.keys(values).length > 0 ? values : undefined;\n }, [fieldMappings, userInput, contactInfo]);\n\n /**\n * Build the list of field names that should be read-only in the signing form.\n * Only includes fields that are both mapped AND marked as readonly by the admin.\n */\n const readonlyFieldNames = useMemo<string[] | undefined>(() => {\n if (!fieldMappings) return undefined;\n\n const names = fieldMappings\n .filter(m => m.readonly)\n .map(m => m.sourceFieldId);\n\n return names.length > 0 ? names : undefined;\n }, [fieldMappings]);\n\n const handleContinue = () => {\n setShowSignature(true);\n };\n\n const handleComplete = async () => {\n if (typeof window !== \"undefined\") {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n try {\n await updateSessionStatus(sessionId, \"conform\");\n } catch (err) {\n console.error(\"[SignatureElectronic] Failed to update session status:\", err);\n // Non-bloquant : l'utilisateur avance quoi qu'il arrive\n }\n // Toujours montrer le document réellement signé avant de continuer\n // (rassure l'utilisateur — pas de bascule directe vers l'étape suivante).\n setShowSignedDocumentPreview(true);\n };\n\n const handleContinueFromPreview = () => {\n // Progress to the next step via graph edges (pas d'arithmétique — évite de sauter dans la mauvaise branche)\n stepObject.goToNextStep(node.id, session.template);\n };\n\n const handleBack = () => {\n if (showSignature) {\n setShowSignature(false);\n } else {\n if (typeof window !== \"undefined\") {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n stepObject.goBack();\n }\n };\n\n if (showSignedDocumentPreview) {\n return (\n <SignedDocumentPreview\n sessionId={sessionId}\n nodeId={node.id}\n onContinue={handleContinueFromPreview}\n />\n );\n }\n\n if (showSignature && external_id) {\n return (\n <DocusealSignature\n sessionId={sessionId}\n templateId={external_id}\n templateName={title}\n onComplete={handleComplete}\n onBack={handleBack}\n prefillValues={prefillValues}\n readonlyFieldNames={readonlyFieldNames}\n />\n );\n }\n\n if (showSignature && !external_id) {\n // No template configured — show error instead of silently falling back to intro\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">\n {t(\"signature.error_title\", \"Erreur\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\"signature.no_template\", \"Le modèle de signature n'est pas configuré.\")}\n </p>\n <button\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={handleBack}\n >\n {t(\"buttons.back\", \"Retour\")}\n </button>\n </div>\n );\n }\n\n return (\n <SignatureElectronicIntroduction\n onContinue={handleContinue}\n onBack={handleBack}\n title={title}\n description={description}\n />\n );\n};\n\nexport default SignatureElectronic;\n"],"names":["useTranslation","sdkI18n","useMemo","useState","useEffect","__awaiter","updateSessionStatus","_jsx","SignedDocumentPreview","DocusealSignature","_jsxs","SignatureElectronicIntroduction"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SignatureElectronic.js","sources":["../../../../../src/components/signature-electronic/SignatureElectronic.tsx"],"sourcesContent":["import React, { useState, useMemo, useEffect } from \"react\";\nimport type { stepObject, SessionTemplateNode, SessionData } from \"../../types/session\";\nimport type { UserInput } from \"../../types/userInput\";\nimport type { ContactInfo } from \"../../types/contactInfo\";\nimport { useTranslation } from \"react-i18next\";\nimport sdkI18n from \"../../i18n\";\nimport SignatureElectronicIntroduction from \"./SignatureElectronicIntroduction\";\nimport DocusealSignature from \"./DocusealSignature\";\nimport SignedDocumentPreview from \"./SignedDocumentPreview\";\nimport { updateSessionStatus } from \"../../services/sessionService\";\n\n/**\n * Maps an InformationFieldKey (journey field) to the corresponding UserInput key.\n * This bridges the admin-defined field names to the actual data collected in the SDK.\n */\nconst FIELD_KEY_TO_USER_INPUT: Record<string, (ui: UserInput, ci?: ContactInfo) => string | undefined> = {\n nom: (ui) => ui.lastName,\n denomination_sociale: (ui) => ui.companyName,\n prenom: (ui) => ui.firstName,\n date_naissance: (ui) => ui.birthDate,\n email: (ui, ci) => ui.email || ci?.email,\n sms: (ui, ci) => ui.sms || ui.phoneNumber || ci?.phoneNumber,\n adresse: (ui) => [ui.addressLine1, ui.addressLine2, ui.postalCode, ui.city, ui.countryCode].filter(Boolean).join(', '),\n nationalite: (ui) => ui.nationality,\n siret: (ui) => ui.siret,\n tva: (ui) => ui.tva,\n};\n\ninterface SignatureElectronicProps {\n sessionId: string;\n stepObject: stepObject;\n node: SessionTemplateNode;\n session: SessionData;\n title?: string;\n description?: string;\n external_id?: string;\n fieldMappings?: SessionTemplateNode['fieldMappings'];\n userInput?: UserInput;\n contactInfo?: ContactInfo;\n}\n\nconst SignatureElectronic: React.FC<SignatureElectronicProps> = ({\n sessionId,\n stepObject,\n node,\n session,\n title,\n description,\n external_id,\n fieldMappings,\n userInput,\n contactInfo,\n}) => {\n const { t } = useTranslation(\"translation\", { i18n: sdkI18n });\n const signatureViewStorageKey = useMemo(() => `dk-signature-open:${sessionId}:${external_id ?? \"no-template\"}`, [sessionId, external_id]);\n const [showSignature, setShowSignature] = useState<boolean>(() => {\n if (typeof window === \"undefined\") return false;\n return window.sessionStorage.getItem(signatureViewStorageKey) === \"1\";\n });\n const [showSignedDocumentPreview, setShowSignedDocumentPreview] = useState<boolean>(false);\n const [signedAt, setSignedAt] = useState<string | null>(null);\n\n useEffect(() => {\n if (typeof window === \"undefined\") return;\n\n if (showSignature) {\n window.sessionStorage.setItem(signatureViewStorageKey, \"1\");\n } else {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n }, [showSignature, signatureViewStorageKey]);\n\n /**\n * Build the pre-fill values object from userInput + fieldMappings.\n * Maps each configured field to its value from userInput.\n * Used by DocusealForm's `values` prop for client-side pre-filling.\n */\n const prefillValues = useMemo<Record<string, string> | undefined>(() => {\n if (!fieldMappings || !userInput) return undefined;\n\n const values: Record<string, string> = {};\n\n fieldMappings.forEach(mapping => {\n const resolver = FIELD_KEY_TO_USER_INPUT[mapping.sourceFieldId];\n let value: string | undefined;\n\n if (resolver) {\n value = resolver(userInput, contactInfo);\n } else if (userInput.customFormData) {\n const raw = userInput.customFormData[mapping.sourceFieldId];\n value = raw != null ? String(raw) : undefined;\n }\n\n if (value !== undefined && value !== '') {\n values[mapping.sourceFieldId] = value;\n }\n });\n\n return Object.keys(values).length > 0 ? values : undefined;\n }, [fieldMappings, userInput, contactInfo]);\n\n /**\n * Build the list of field names that should be read-only in the signing form.\n * Only includes fields that are both mapped AND marked as readonly by the admin.\n */\n const readonlyFieldNames = useMemo<string[] | undefined>(() => {\n if (!fieldMappings) return undefined;\n\n const names = fieldMappings\n .filter(m => m.readonly)\n .map(m => m.sourceFieldId);\n\n return names.length > 0 ? names : undefined;\n }, [fieldMappings]);\n\n const handleContinue = () => {\n setShowSignature(true);\n };\n\n const handleComplete = async () => {\n if (typeof window !== \"undefined\") {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n try {\n await updateSessionStatus(sessionId, \"conform\");\n } catch (err) {\n console.error(\"[SignatureElectronic] Failed to update session status:\", err);\n // Non-bloquant : l'utilisateur avance quoi qu'il arrive\n }\n // Toujours montrer le document réellement signé avant de continuer\n // (rassure l'utilisateur — pas de bascule directe vers l'étape suivante).\n setSignedAt(new Date().toISOString());\n setShowSignedDocumentPreview(true);\n };\n\n const handleContinueFromPreview = () => {\n // Progress to the next step via graph edges (pas d'arithmétique — évite de sauter dans la mauvaise branche)\n stepObject.goToNextStep(node.id, session.template);\n };\n\n const handleBack = () => {\n if (showSignature) {\n setShowSignature(false);\n } else {\n if (typeof window !== \"undefined\") {\n window.sessionStorage.removeItem(signatureViewStorageKey);\n }\n stepObject.goBack();\n }\n };\n\n if (showSignedDocumentPreview) {\n return (\n <SignedDocumentPreview\n sessionId={sessionId}\n nodeId={node.id}\n nodeTitle={node.pageTitle || node.title}\n completedAt={signedAt}\n logo={session?.template?.logo}\n onContinue={handleContinueFromPreview}\n />\n );\n }\n\n if (showSignature && external_id) {\n return (\n <DocusealSignature\n sessionId={sessionId}\n templateId={external_id}\n templateName={title}\n onComplete={handleComplete}\n onBack={handleBack}\n prefillValues={prefillValues}\n readonlyFieldNames={readonlyFieldNames}\n />\n );\n }\n\n if (showSignature && !external_id) {\n // No template configured — show error instead of silently falling back to intro\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">\n {t(\"signature.error_title\", \"Erreur\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\"signature.no_template\", \"Le modèle de signature n'est pas configuré.\")}\n </p>\n <button\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={handleBack}\n >\n {t(\"buttons.back\", \"Retour\")}\n </button>\n </div>\n );\n }\n\n return (\n <SignatureElectronicIntroduction\n onContinue={handleContinue}\n onBack={handleBack}\n title={title}\n description={description}\n />\n );\n};\n\nexport default SignatureElectronic;\n"],"names":["useTranslation","sdkI18n","useMemo","useState","useEffect","__awaiter","updateSessionStatus","_jsx","SignedDocumentPreview","DocusealSignature","_jsxs","SignatureElectronicIntroduction"],"mappings":"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"}
|
|
@@ -5,38 +5,45 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var tslib_es6 = require('../../node_modules/tslib/tslib.es6.js');
|
|
6
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
7
7
|
var React = require('react');
|
|
8
|
+
var lucideReact = require('lucide-react');
|
|
8
9
|
var reactI18next = require('react-i18next');
|
|
9
10
|
var index = require('../../i18n/index.js');
|
|
10
11
|
var api = require('../../services/api.js');
|
|
11
12
|
var LoadingState = require('../states/LoadingState.js');
|
|
12
|
-
var PDFPreview = require('../ui/PDFPreview.js');
|
|
13
13
|
var MobilePageLayout = require('../ui/MobilePageLayout.js');
|
|
14
14
|
var PageActions = require('../ui/PageActions.js');
|
|
15
15
|
var Button = require('../ui/Button.js');
|
|
16
16
|
|
|
17
17
|
var STATUS_POLL_INTERVAL_MS = 2000;
|
|
18
|
-
|
|
18
|
+
// DocuSeal flags a submission "completed" before generating the flattened
|
|
19
|
+
// signed PDF — 15 attempts (30s) leaves enough margin for that async step.
|
|
20
|
+
var MAX_STATUS_POLL_ATTEMPTS = 15;
|
|
19
21
|
var SignedDocumentPreview = function (_a) {
|
|
20
|
-
var sessionId = _a.sessionId, nodeId = _a.nodeId, onContinue = _a.onContinue;
|
|
21
|
-
var
|
|
22
|
-
var
|
|
23
|
-
var
|
|
22
|
+
var sessionId = _a.sessionId, nodeId = _a.nodeId, nodeTitle = _a.nodeTitle, completedAt = _a.completedAt, logo = _a.logo, onContinue = _a.onContinue;
|
|
23
|
+
var _b = reactI18next.useTranslation("translation", { i18n: index.default }), t = _b.t, i18n = _b.i18n;
|
|
24
|
+
var _c = React.useState("polling"), status = _c[0], setStatus = _c[1];
|
|
25
|
+
var _d = React.useState(null), viewUrl = _d[0], setViewUrl = _d[1];
|
|
24
26
|
var cancelledRef = React.useRef(false);
|
|
25
27
|
React.useEffect(function () {
|
|
26
28
|
cancelledRef.current = false;
|
|
27
29
|
var attempts = 0;
|
|
28
30
|
var timer;
|
|
29
|
-
var
|
|
30
|
-
var
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
var fetchAccessLink = function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () {
|
|
32
|
+
var response, token, baseURL, path;
|
|
33
|
+
var _a, _b;
|
|
34
|
+
return tslib_es6.__generator(this, function (_c) {
|
|
35
|
+
switch (_c.label) {
|
|
36
|
+
case 0: return [4 /*yield*/, api.apiService.get("/session/sdk/".concat(sessionId, "/signed-document/").concat(nodeId, "/access-link"))];
|
|
34
37
|
case 1:
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
+
response = _c.sent();
|
|
39
|
+
token = (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.token;
|
|
40
|
+
if (!token) {
|
|
41
|
+
throw new Error("Missing signed document access token");
|
|
42
|
+
}
|
|
43
|
+
baseURL = (api.apiService.getRawClient().defaults.baseURL || "").replace(/\/+$/, "");
|
|
44
|
+
path = "/session/sdk/".concat(sessionId, "/signed-document/").concat(nodeId, "/view?token=").concat(token);
|
|
38
45
|
if (!cancelledRef.current) {
|
|
39
|
-
|
|
46
|
+
setViewUrl(baseURL ? "".concat(baseURL).concat(path) : path);
|
|
40
47
|
setStatus("ready");
|
|
41
48
|
}
|
|
42
49
|
return [2 /*return*/];
|
|
@@ -44,28 +51,49 @@ var SignedDocumentPreview = function (_a) {
|
|
|
44
51
|
});
|
|
45
52
|
}); };
|
|
46
53
|
var poll = function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () {
|
|
47
|
-
var statusResponse, ready, error, err_1;
|
|
54
|
+
var statusResponse, ready, error, err_1, err_2;
|
|
48
55
|
var _a, _b, _c, _d;
|
|
49
56
|
return tslib_es6.__generator(this, function (_e) {
|
|
50
57
|
switch (_e.label) {
|
|
51
58
|
case 0:
|
|
52
|
-
_e.trys.push([0,
|
|
59
|
+
_e.trys.push([0, 6, , 7]);
|
|
53
60
|
return [4 /*yield*/, api.apiService.get("/session/sdk/".concat(sessionId, "/signed-document/").concat(nodeId, "/status"))];
|
|
54
61
|
case 1:
|
|
55
62
|
statusResponse = _e.sent();
|
|
56
63
|
ready = !!((_b = (_a = statusResponse.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.ready);
|
|
57
64
|
error = (_d = (_c = statusResponse.data) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.error;
|
|
58
|
-
if (
|
|
59
|
-
|
|
65
|
+
if (error === "declined" || error === "expired") {
|
|
66
|
+
if (!cancelledRef.current)
|
|
67
|
+
setStatus(error);
|
|
68
|
+
return [2 /*return*/];
|
|
69
|
+
}
|
|
70
|
+
if (!ready) return [3 /*break*/, 5];
|
|
71
|
+
_e.label = 2;
|
|
60
72
|
case 2:
|
|
73
|
+
_e.trys.push([2, 4, , 5]);
|
|
74
|
+
return [4 /*yield*/, fetchAccessLink()];
|
|
75
|
+
case 3:
|
|
61
76
|
_e.sent();
|
|
62
77
|
return [2 /*return*/];
|
|
63
|
-
case
|
|
64
|
-
|
|
78
|
+
case 4:
|
|
79
|
+
err_1 = _e.sent();
|
|
80
|
+
// DocuSeal can report the submission "completed" before the
|
|
81
|
+
// signed document is actually linked — treat like "not ready
|
|
82
|
+
// yet" instead of failing permanently on the first miss.
|
|
83
|
+
console.error("[SignedDocumentPreview] Failed to fetch access link:", err_1);
|
|
84
|
+
return [3 /*break*/, 5];
|
|
85
|
+
case 5:
|
|
86
|
+
attempts += 1;
|
|
87
|
+
if (attempts >= MAX_STATUS_POLL_ATTEMPTS) {
|
|
65
88
|
if (!cancelledRef.current)
|
|
66
|
-
setStatus(error);
|
|
89
|
+
setStatus("error");
|
|
67
90
|
return [2 /*return*/];
|
|
68
91
|
}
|
|
92
|
+
timer = setTimeout(poll, STATUS_POLL_INTERVAL_MS);
|
|
93
|
+
return [3 /*break*/, 7];
|
|
94
|
+
case 6:
|
|
95
|
+
err_2 = _e.sent();
|
|
96
|
+
console.error("[SignedDocumentPreview] Failed to poll signed document status:", err_2);
|
|
69
97
|
attempts += 1;
|
|
70
98
|
if (attempts >= MAX_STATUS_POLL_ATTEMPTS) {
|
|
71
99
|
if (!cancelledRef.current)
|
|
@@ -73,14 +101,8 @@ var SignedDocumentPreview = function (_a) {
|
|
|
73
101
|
return [2 /*return*/];
|
|
74
102
|
}
|
|
75
103
|
timer = setTimeout(poll, STATUS_POLL_INTERVAL_MS);
|
|
76
|
-
return [3 /*break*/,
|
|
77
|
-
case
|
|
78
|
-
err_1 = _e.sent();
|
|
79
|
-
console.error("[SignedDocumentPreview] Failed to load signed document:", err_1);
|
|
80
|
-
if (!cancelledRef.current)
|
|
81
|
-
setStatus("error");
|
|
82
|
-
return [3 /*break*/, 5];
|
|
83
|
-
case 5: return [2 /*return*/];
|
|
104
|
+
return [3 /*break*/, 7];
|
|
105
|
+
case 7: return [2 /*return*/];
|
|
84
106
|
}
|
|
85
107
|
});
|
|
86
108
|
}); };
|
|
@@ -91,16 +113,17 @@ var SignedDocumentPreview = function (_a) {
|
|
|
91
113
|
clearTimeout(timer);
|
|
92
114
|
};
|
|
93
115
|
}, [sessionId, nodeId]);
|
|
94
|
-
React.useEffect(function () {
|
|
95
|
-
return function () {
|
|
96
|
-
if (pdfSrc)
|
|
97
|
-
URL.revokeObjectURL(pdfSrc);
|
|
98
|
-
};
|
|
99
|
-
}, [pdfSrc]);
|
|
100
116
|
if (status === "polling") {
|
|
101
117
|
return (jsxRuntime.jsx(LoadingState.default, { message: t("signed_document.loading", "Préparation du document signé..."), subtitle: "" }));
|
|
102
118
|
}
|
|
103
|
-
|
|
119
|
+
var formattedDate = completedAt
|
|
120
|
+
? new Intl.DateTimeFormat(i18n.language || "fr", {
|
|
121
|
+
day: "numeric",
|
|
122
|
+
month: "long",
|
|
123
|
+
year: "numeric",
|
|
124
|
+
}).format(new Date(completedAt))
|
|
125
|
+
: null;
|
|
126
|
+
return (jsxRuntime.jsx(MobilePageLayout.default, { footer: jsxRuntime.jsx(PageActions.default, { primary: jsxRuntime.jsx(Button.default, { onClick: onContinue, type: "button", children: t("buttons.continue", "Continuer") }) }), children: jsxRuntime.jsxs("div", { className: "flex flex-col items-center h-full px-4 py-8 md:px-8 text-center gap-6", children: [logo && jsxRuntime.jsx("img", { src: logo, alt: "", className: "h-12 max-w-[200px] object-contain" }), status === "ready" && viewUrl && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: "w-full max-w-md bg-gray-50 rounded-lg p-4 flex items-start gap-3 text-left", children: [jsxRuntime.jsx(lucideReact.PenTool, { className: "w-5 h-5 shrink-0 mt-0.5 text-gray-500" }), jsxRuntime.jsxs("div", { children: [jsxRuntime.jsx("p", { className: "font-semibold text-gray-900 break-all", children: nodeTitle }), formattedDate && (jsxRuntime.jsxs("p", { className: "text-xs text-gray-500 mt-1", children: [t("signed_document.submitted_on", "Soumis le"), " ", formattedDate] }))] })] }), jsxRuntime.jsx("p", { className: "text-sm text-gray-600", children: t("signed_document.ready_text", "Merci d'avoir signé le document, vous pouvez le consulter en cliquant ci-dessous :") }), jsxRuntime.jsx("a", { href: viewUrl, target: "_blank", rel: "noopener noreferrer", className: "text-primary underline font-medium", children: t("signed_document.view_link", "Consulter le document ↗") })] })), status === "error" && (jsxRuntime.jsx("p", { className: "text-sm text-gray-600 py-8", children: t("signed_document.error", "Le document n'a pas pu être chargé, mais votre signature est bien enregistrée. Vous pouvez continuer.") })), status === "declined" && (jsxRuntime.jsx("p", { className: "text-sm text-gray-600 py-8", children: t("signed_document.declined", "Vous avez refusé de signer ce document.") })), status === "expired" && (jsxRuntime.jsx("p", { className: "text-sm text-gray-600 py-8", children: t("signed_document.expired", "Le lien de signature a expiré.") }))] }) }));
|
|
104
127
|
};
|
|
105
128
|
|
|
106
129
|
exports.default = SignedDocumentPreview;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignedDocumentPreview.js","sources":["../../../../../src/components/signature-electronic/SignedDocumentPreview.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport sdkI18n from \"../../i18n\";\nimport { apiService } from \"../../services/api\";\nimport LoadingState from \"../states/LoadingState\";\nimport PDFPreview from \"../ui/PDFPreview\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport PageActions from \"../ui/PageActions\";\nimport Button from \"../ui/Button\";\n\ninterface SignedDocumentPreviewProps {\n sessionId: string;\n nodeId: string;\n onContinue: () => void;\n}\n\nconst STATUS_POLL_INTERVAL_MS = 2000;\nconst MAX_STATUS_POLL_ATTEMPTS = 5;\n\nconst SignedDocumentPreview: React.FC<SignedDocumentPreviewProps> = ({\n sessionId,\n nodeId,\n onContinue,\n}) => {\n const { t } = useTranslation(\"translation\", { i18n: sdkI18n });\n const [status, setStatus] = useState<\"polling\" | \"ready\" | \"error\" | \"declined\" | \"expired\">(\n \"polling\",\n );\n const [pdfSrc, setPdfSrc] = useState<string | null>(null);\n const cancelledRef = useRef(false);\n\n useEffect(() => {\n cancelledRef.current = false;\n let attempts = 0;\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const fetchSignedDocument = async () => {\n const pdfResponse = await apiService.get(\n `/session/sdk/${sessionId}/signed-document/${nodeId}.pdf`,\n { responseType: \"arraybuffer\" },\n );\n const blob = new Blob([pdfResponse.data], { type: \"application/pdf\" });\n const url = URL.createObjectURL(blob);\n if (!cancelledRef.current) {\n setPdfSrc(url);\n setStatus(\"ready\");\n }\n };\n\n const poll = async () => {\n try {\n const statusResponse = await apiService.get(\n `/session/sdk/${sessionId}/signed-document/${nodeId}/status`,\n );\n const ready = !!statusResponse.data?.data?.ready;\n const error = statusResponse.data?.data?.error as\n | \"declined\"\n | \"expired\"\n | undefined;\n\n if (ready) {\n await fetchSignedDocument();\n return;\n }\n\n if (error === \"declined\" || error === \"expired\") {\n if (!cancelledRef.current) setStatus(error);\n return;\n }\n\n attempts += 1;\n if (attempts >= MAX_STATUS_POLL_ATTEMPTS) {\n if (!cancelledRef.current) setStatus(\"error\");\n return;\n }\n timer = setTimeout(poll, STATUS_POLL_INTERVAL_MS);\n } catch (err) {\n console.error(\"[SignedDocumentPreview] Failed to load signed document:\", err);\n if (!cancelledRef.current) setStatus(\"error\");\n }\n };\n\n poll();\n\n return () => {\n cancelledRef.current = true;\n if (timer) clearTimeout(timer);\n };\n }, [sessionId, nodeId]);\n\n useEffect(() => {\n return () => {\n if (pdfSrc) URL.revokeObjectURL(pdfSrc);\n };\n }, [pdfSrc]);\n\n if (status === \"polling\") {\n return (\n <LoadingState\n message={t(\"signed_document.loading\", \"Préparation du document signé...\")}\n subtitle=\"\"\n />\n );\n }\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={onContinue} type=\"button\">\n {t(\"buttons.continue\", \"Continuer\")}\n </Button>\n }\n />\n }\n >\n <div className=\"flex flex-col h-full px-4 py-4 md:px-8\">\n {status === \"ready\" && pdfSrc && (\n <PDFPreview src={pdfSrc} className=\"flex-1\" />\n )}\n {status === \"error\" && (\n <p className=\"text-sm text-gray-600 text-center py-8\">\n {t(\n \"signed_document.error\",\n \"Le document n'a pas pu être chargé, mais votre signature est bien enregistrée. Vous pouvez continuer.\",\n )}\n </p>\n )}\n {status === \"declined\" && (\n <p className=\"text-sm text-gray-600 text-center py-8\">\n {t(\n \"signed_document.declined\",\n \"Vous avez refusé de signer ce document.\",\n )}\n </p>\n )}\n {status === \"expired\" && (\n <p className=\"text-sm text-gray-600 text-center py-8\">\n {t(\n \"signed_document.expired\",\n \"Le lien de signature a expiré.\",\n )}\n </p>\n )}\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default SignedDocumentPreview;\n"],"names":["useTranslation","sdkI18n","useState","useRef","useEffect","__awaiter","apiService","_jsx","LoadingState","MobilePageLayout","PageActions","Button","_jsxs","PDFPreview"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SignedDocumentPreview.js","sources":["../../../../../src/components/signature-electronic/SignedDocumentPreview.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport { PenTool } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport sdkI18n from \"../../i18n\";\nimport { apiService } from \"../../services/api\";\nimport LoadingState from \"../states/LoadingState\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport PageActions from \"../ui/PageActions\";\nimport Button from \"../ui/Button\";\n\ninterface SignedDocumentPreviewProps {\n sessionId: string;\n nodeId: string;\n nodeTitle: string;\n completedAt: string | null;\n logo?: string;\n onContinue: () => void;\n}\n\nconst STATUS_POLL_INTERVAL_MS = 2000;\n// DocuSeal flags a submission \"completed\" before generating the flattened\n// signed PDF — 15 attempts (30s) leaves enough margin for that async step.\nconst MAX_STATUS_POLL_ATTEMPTS = 15;\n\nconst SignedDocumentPreview: React.FC<SignedDocumentPreviewProps> = ({\n sessionId,\n nodeId,\n nodeTitle,\n completedAt,\n logo,\n onContinue,\n}) => {\n const { t, i18n } = useTranslation(\"translation\", { i18n: sdkI18n });\n const [status, setStatus] = useState<\"polling\" | \"ready\" | \"error\" | \"declined\" | \"expired\">(\n \"polling\",\n );\n const [viewUrl, setViewUrl] = useState<string | null>(null);\n const cancelledRef = useRef(false);\n\n useEffect(() => {\n cancelledRef.current = false;\n let attempts = 0;\n let timer: ReturnType<typeof setTimeout> | undefined;\n\n const fetchAccessLink = async () => {\n const response = await apiService.get(\n `/session/sdk/${sessionId}/signed-document/${nodeId}/access-link`,\n );\n const token = response.data?.data?.token;\n if (!token) {\n throw new Error(\"Missing signed document access token\");\n }\n\n const baseURL = (apiService.getRawClient().defaults.baseURL || \"\").replace(\n /\\/+$/,\n \"\",\n );\n const path = `/session/sdk/${sessionId}/signed-document/${nodeId}/view?token=${token}`;\n\n if (!cancelledRef.current) {\n setViewUrl(baseURL ? `${baseURL}${path}` : path);\n setStatus(\"ready\");\n }\n };\n\n const poll = async () => {\n try {\n const statusResponse = await apiService.get(\n `/session/sdk/${sessionId}/signed-document/${nodeId}/status`,\n );\n const ready = !!statusResponse.data?.data?.ready;\n const error = statusResponse.data?.data?.error as\n | \"declined\"\n | \"expired\"\n | undefined;\n\n if (error === \"declined\" || error === \"expired\") {\n if (!cancelledRef.current) setStatus(error);\n return;\n }\n\n if (ready) {\n try {\n await fetchAccessLink();\n return;\n } catch (err) {\n // DocuSeal can report the submission \"completed\" before the\n // signed document is actually linked — treat like \"not ready\n // yet\" instead of failing permanently on the first miss.\n console.error(\n \"[SignedDocumentPreview] Failed to fetch access link:\",\n err,\n );\n }\n }\n\n attempts += 1;\n if (attempts >= MAX_STATUS_POLL_ATTEMPTS) {\n if (!cancelledRef.current) setStatus(\"error\");\n return;\n }\n timer = setTimeout(poll, STATUS_POLL_INTERVAL_MS);\n } catch (err) {\n console.error(\"[SignedDocumentPreview] Failed to poll signed document status:\", err);\n attempts += 1;\n if (attempts >= MAX_STATUS_POLL_ATTEMPTS) {\n if (!cancelledRef.current) setStatus(\"error\");\n return;\n }\n timer = setTimeout(poll, STATUS_POLL_INTERVAL_MS);\n }\n };\n\n poll();\n\n return () => {\n cancelledRef.current = true;\n if (timer) clearTimeout(timer);\n };\n }, [sessionId, nodeId]);\n\n if (status === \"polling\") {\n return (\n <LoadingState\n message={t(\"signed_document.loading\", \"Préparation du document signé...\")}\n subtitle=\"\"\n />\n );\n }\n\n const formattedDate = completedAt\n ? new Intl.DateTimeFormat(i18n.language || \"fr\", {\n day: \"numeric\",\n month: \"long\",\n year: \"numeric\",\n }).format(new Date(completedAt))\n : null;\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={onContinue} type=\"button\">\n {t(\"buttons.continue\", \"Continuer\")}\n </Button>\n }\n />\n }\n >\n <div className=\"flex flex-col items-center h-full px-4 py-8 md:px-8 text-center gap-6\">\n {logo && <img src={logo} alt=\"\" className=\"h-12 max-w-[200px] object-contain\" />}\n\n {status === \"ready\" && viewUrl && (\n <>\n <div className=\"w-full max-w-md bg-gray-50 rounded-lg p-4 flex items-start gap-3 text-left\">\n <PenTool className=\"w-5 h-5 shrink-0 mt-0.5 text-gray-500\" />\n <div>\n <p className=\"font-semibold text-gray-900 break-all\">{nodeTitle}</p>\n {formattedDate && (\n <p className=\"text-xs text-gray-500 mt-1\">\n {t(\"signed_document.submitted_on\", \"Soumis le\")} {formattedDate}\n </p>\n )}\n </div>\n </div>\n\n <p className=\"text-sm text-gray-600\">\n {t(\n \"signed_document.ready_text\",\n \"Merci d'avoir signé le document, vous pouvez le consulter en cliquant ci-dessous :\",\n )}\n </p>\n\n <a\n href={viewUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-primary underline font-medium\"\n >\n {t(\"signed_document.view_link\", \"Consulter le document ↗\")}\n </a>\n </>\n )}\n\n {status === \"error\" && (\n <p className=\"text-sm text-gray-600 py-8\">\n {t(\n \"signed_document.error\",\n \"Le document n'a pas pu être chargé, mais votre signature est bien enregistrée. Vous pouvez continuer.\",\n )}\n </p>\n )}\n {status === \"declined\" && (\n <p className=\"text-sm text-gray-600 py-8\">\n {t(\"signed_document.declined\", \"Vous avez refusé de signer ce document.\")}\n </p>\n )}\n {status === \"expired\" && (\n <p className=\"text-sm text-gray-600 py-8\">\n {t(\"signed_document.expired\", \"Le lien de signature a expiré.\")}\n </p>\n )}\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default SignedDocumentPreview;\n"],"names":["useTranslation","sdkI18n","useState","useRef","useEffect","__awaiter","apiService","_jsx","LoadingState","MobilePageLayout","PageActions","Button","_jsxs","_Fragment","PenTool"],"mappings":";;;;;;;;;;;;;;;;AAmBA,IAAM,uBAAuB,GAAG,IAAI;AACpC;AACA;AACA,IAAM,wBAAwB,GAAG,EAAE;AAEnC,IAAM,qBAAqB,GAAyC,UAAC,EAOpE,EAAA;AANG,IAAA,IAAA,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,WAAW,iBAAA,EACX,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,UAAU,GAAA,EAAA,CAAA,UAAA;AAEJ,IAAA,IAAA,KAAcA,2BAAc,CAAC,aAAa,EAAE,EAAE,IAAI,EAAEC,aAAO,EAAE,CAAC,EAA5D,CAAC,OAAA,EAAE,IAAI,UAAqD;IAC9D,IAAA,EAAA,GAAsBC,cAAQ,CAChC,SAAS,CACZ,EAFM,MAAM,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,SAAS,GAAA,EAAA,CAAA,CAAA,CAEvB;IACK,IAAA,EAAA,GAAwBA,cAAQ,CAAgB,IAAI,CAAC,EAApD,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,UAAU,GAAA,EAAA,CAAA,CAAA,CAAiC;AAC3D,IAAA,IAAM,YAAY,GAAGC,YAAM,CAAC,KAAK,CAAC;AAElC,IAAAC,eAAS,CAAC,YAAA;AACN,QAAA,YAAY,CAAC,OAAO,GAAG,KAAK;QAC5B,IAAI,QAAQ,GAAG,CAAC;AAChB,QAAA,IAAI,KAAgD;AAEpD,QAAA,IAAM,eAAe,GAAG,YAAA,EAAA,OAAAC,mBAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;;;;4BACH,OAAA,CAAA,CAAA,YAAMC,cAAU,CAAC,GAAG,CACjC,eAAA,CAAA,MAAA,CAAgB,SAAS,EAAA,mBAAA,CAAA,CAAA,MAAA,CAAoB,MAAM,EAAA,cAAA,CAAc,CACpE,CAAA;;AAFK,wBAAA,QAAQ,GAAG,EAAA,CAAA,IAAA,EAEhB;wBACK,KAAK,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK;wBACxC,IAAI,CAAC,KAAK,EAAE;AACR,4BAAA,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC;wBAC3D;wBAEM,OAAO,GAAG,CAACA,cAAU,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,EAAE,OAAO,CACtE,MAAM,EACN,EAAE,CACL;wBACK,IAAI,GAAG,uBAAgB,SAAS,EAAA,mBAAA,CAAA,CAAA,MAAA,CAAoB,MAAM,EAAA,cAAA,CAAA,CAAA,MAAA,CAAe,KAAK,CAAE;AAEtF,wBAAA,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;AACvB,4BAAA,UAAU,CAAC,OAAO,GAAG,EAAA,CAAA,MAAA,CAAG,OAAO,CAAA,CAAA,MAAA,CAAG,IAAI,CAAE,GAAG,IAAI,CAAC;4BAChD,SAAS,CAAC,OAAO,CAAC;wBACtB;;;;aACH;AAED,QAAA,IAAM,IAAI,GAAG,YAAA,EAAA,OAAAD,mBAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;;;;;;wBAEkB,OAAA,CAAA,CAAA,YAAMC,cAAU,CAAC,GAAG,CACvC,eAAA,CAAA,MAAA,CAAgB,SAAS,EAAA,mBAAA,CAAA,CAAA,MAAA,CAAoB,MAAM,EAAA,SAAA,CAAS,CAC/D,CAAA;;AAFK,wBAAA,cAAc,GAAG,EAAA,CAAA,IAAA,EAEtB;AACK,wBAAA,KAAK,GAAG,CAAC,EAAC,MAAA,CAAA,EAAA,GAAA,cAAc,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,CAAA;wBAC1C,KAAK,GAAG,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,cAAc,CAAC,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAG1B;wBAEf,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,SAAS,EAAE;4BAC7C,IAAI,CAAC,YAAY,CAAC,OAAO;gCAAE,SAAS,CAAC,KAAK,CAAC;4BAC3C,OAAA,CAAA,CAAA,YAAA;wBACJ;AAEI,wBAAA,IAAA,CAAA,KAAK,EAAL,OAAA,CAAA,CAAA,YAAA,CAAA,CAAA;;;;wBAEI,OAAA,CAAA,CAAA,YAAM,eAAe,EAAE,CAAA;;AAAvB,wBAAA,EAAA,CAAA,IAAA,EAAuB;wBACvB,OAAA,CAAA,CAAA,YAAA;;;;;;AAKA,wBAAA,OAAO,CAAC,KAAK,CACT,sDAAsD,EACtD,KAAG,CACN;;;wBAIT,QAAQ,IAAI,CAAC;AACb,wBAAA,IAAI,QAAQ,IAAI,wBAAwB,EAAE;4BACtC,IAAI,CAAC,YAAY,CAAC,OAAO;gCAAE,SAAS,CAAC,OAAO,CAAC;4BAC7C,OAAA,CAAA,CAAA,YAAA;wBACJ;AACA,wBAAA,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,uBAAuB,CAAC;;;;AAEjD,wBAAA,OAAO,CAAC,KAAK,CAAC,gEAAgE,EAAE,KAAG,CAAC;wBACpF,QAAQ,IAAI,CAAC;AACb,wBAAA,IAAI,QAAQ,IAAI,wBAAwB,EAAE;4BACtC,IAAI,CAAC,YAAY,CAAC,OAAO;gCAAE,SAAS,CAAC,OAAO,CAAC;4BAC7C,OAAA,CAAA,CAAA,YAAA;wBACJ;AACA,wBAAA,KAAK,GAAG,UAAU,CAAC,IAAI,EAAE,uBAAuB,CAAC;;;;;aAExD;AAED,QAAA,IAAI,EAAE;QAEN,OAAO,YAAA;AACH,YAAA,YAAY,CAAC,OAAO,GAAG,IAAI;AAC3B,YAAA,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC;AAClC,QAAA,CAAC;AACL,IAAA,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAEvB,IAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACtB,QAAA,QACIC,cAAA,CAACC,oBAAY,IACT,OAAO,EAAE,CAAC,CAAC,yBAAyB,EAAE,kCAAkC,CAAC,EACzE,QAAQ,EAAC,EAAE,EAAA,CACb;IAEV;IAEA,IAAM,aAAa,GAAG;UAChB,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,EAAE;AAC3C,YAAA,GAAG,EAAE,SAAS;AACd,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,IAAI,EAAE,SAAS;SAClB,CAAC,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC;UAC/B,IAAI;IAEV,QACID,eAACE,wBAAgB,EAAA,EACb,MAAM,EACFF,cAAA,CAACG,mBAAW,EAAA,EACR,OAAO,EACHH,cAAA,CAACI,cAAM,IAAC,OAAO,EAAE,UAAU,EAAE,IAAI,EAAC,QAAQ,EAAA,QAAA,EACrC,CAAC,CAAC,kBAAkB,EAAE,WAAW,CAAC,EAAA,CAC9B,GAEf,EAAA,QAAA,EAGNC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uEAAuE,EAAA,QAAA,EAAA,CACjF,IAAI,IAAIL,cAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,IAAI,EAAE,GAAG,EAAC,EAAE,EAAC,SAAS,EAAC,mCAAmC,EAAA,CAAG,EAE/E,MAAM,KAAK,OAAO,IAAI,OAAO,KAC1BK,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA,CACID,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4EAA4E,EAAA,QAAA,EAAA,CACvFL,eAACO,mBAAO,EAAA,EAAC,SAAS,EAAC,uCAAuC,EAAA,CAAG,EAC7DF,eAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACIL,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,uCAAuC,YAAE,SAAS,EAAA,CAAK,EACnE,aAAa,KACVK,eAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAAA,CACpC,CAAC,CAAC,8BAA8B,EAAE,WAAW,CAAC,EAAA,GAAA,EAAG,aAAa,CAAA,EAAA,CAC/D,CACP,CAAA,EAAA,CACC,IACJ,EAENL,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,uBAAuB,YAC/B,CAAC,CACE,4BAA4B,EAC5B,oFAAoF,CACvF,EAAA,CACD,EAEJA,sBACI,IAAI,EAAE,OAAO,EACb,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,SAAS,EAAC,oCAAoC,YAE7C,CAAC,CAAC,2BAA2B,EAAE,yBAAyB,CAAC,GAC1D,CAAA,EAAA,CACL,CACN,EAEA,MAAM,KAAK,OAAO,KACfA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,4BAA4B,YACpC,CAAC,CACE,uBAAuB,EACvB,uGAAuG,CAC1G,EAAA,CACD,CACP,EACA,MAAM,KAAK,UAAU,KAClBA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,4BAA4B,YACpC,CAAC,CAAC,0BAA0B,EAAE,yCAAyC,CAAC,GACzE,CACP,EACA,MAAM,KAAK,SAAS,KACjBA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,4BAA4B,EAAA,QAAA,EACpC,CAAC,CAAC,yBAAyB,EAAE,gCAAgC,CAAC,GAC/D,CACP,CAAA,EAAA,CACC,EAAA,CACS;AAE3B;;;;"}
|