@incodetech/web 2.1.1 → 2.2.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ae-signature/ae-signature.es.js +7 -4
- package/dist/antifraud/antifraud.es.js +6 -6
- package/dist/authentication/authentication.es.js +7 -7
- package/dist/{autoFocusTitle-CuRu2lPg.js → autoFocusTitle-gLba2mgp.js} +6 -3
- package/dist/{back-horizontal-hint-xTnSQbzn.js → back-horizontal-hint-BBGuJ75y.js} +1 -1
- package/dist/{back-vertical-hint-BWWlHfX2.js → back-vertical-hint-B9usJ5lY.js} +1 -1
- package/dist/base.css +425 -3290
- package/dist/{bottomSheet-CnWbbUAM.js → bottomSheet-Cp8DLulN.js} +7 -8
- package/dist/certificate-issuance/certificate-issuance.es.js +34 -87
- package/dist/certificate-issuance/styles.css +0 -41
- package/dist/{checkbox-1wUHSoaK.js → checkbox-C38Elx0O.js} +5 -5
- package/dist/connectionError-DAeXp8sE.js +45 -0
- package/dist/consent/consent.es.js +10 -12
- package/dist/consent/styles.css +5 -4
- package/dist/{countrySelector-SvUOyPo0.js → countrySelector-2t-ZTgGo.js} +3 -3
- package/dist/cross-document-data-match/cross-document-data-match.es.js +13 -10
- package/dist/curp-validation/curp-validation.es.js +28 -29
- package/dist/curp-validation/styles.css +47 -0
- package/dist/{customFields-BDsXR7A-.js → customFields-B8HQZ7Mh.js} +13 -14
- package/dist/{customWatchlist-CYoRNCim.js → customWatchlist-_tUmZ855.js} +9 -9
- package/dist/dashboardTheme-CVliZSR-.js +223 -0
- package/dist/{dateInputComposed-DuaofcBl.js → dateInputComposed-eRcbt_SL.js} +5 -5
- package/dist/dateInputComposed-ks0-opuq.js +1 -0
- package/dist/document-capture/document-capture.es.js +1 -1
- package/dist/document-capture/styles.css +85 -70
- package/dist/{documentCapture-DhbO-A-V.js → documentCapture-BvEGCYj-.js} +218 -136
- package/dist/documentCapture-DdHdRPzR.js +2 -0
- package/dist/{dropdownComposed-CoU0enG6.js → dropdownComposed-OHDHzt1Q.js} +18 -11
- package/dist/dropdownComposed-kjG4UblM.js +1 -0
- package/dist/dynamic-forms/styles.css +58 -6
- package/dist/{dynamicForms-BifGbC9F.js → dynamicForms-P-4E42IA.js} +53 -45
- package/dist/ekyb/ekyb.es.js +1 -1
- package/dist/ekyb/styles.css +1 -28
- package/dist/ekybModule-CiaxFHXo.js +2 -0
- package/dist/{ekybModule-DGnTw5UV.js → ekybModule-DmjkzVWE.js} +51 -27
- package/dist/ekyc/ekyc.es.js +1 -1
- package/dist/ekyc/styles.css +2 -2
- package/dist/ekycModule-BVt10kgv.js +2 -0
- package/dist/{ekycModule-Dxpdd0ns.js → ekycModule-Da1Fm7ai.js} +45 -19
- package/dist/electronic-signature/electronic-signature.es.js +1 -1
- package/dist/{ae-signature → electronic-signature}/styles.css +2 -2
- package/dist/{electronic-signature-Ueoffasr.js → electronic-signature-yamI6zHM.js} +31 -23
- package/dist/email/email.es.js +10 -11
- package/dist/{emailInput-DsLkDtER.js → emailInput-B0P2Q-pk.js} +4 -4
- package/dist/{expiredId-BZXLrLk-.js → expiredId-BXXE3srN.js} +6 -6
- package/dist/{extensibility-7sRIN0JC.js → extensibility-iJYzpW6H.js} +440 -374
- package/dist/extensibility.es.js +24 -28
- package/dist/face-match/face-match.es.js +1 -1
- package/dist/face-match/styles.css +9 -609
- package/dist/faceMatch-D4XFihTc.js +2 -0
- package/dist/{faceMatch-DyTBoMDm.js → faceMatch-VtEZvsen.js} +71 -79
- package/dist/field-comparison/field-comparison.es.js +1 -1
- package/dist/fieldComparison-B_r9Bal7.js +2 -0
- package/dist/{fieldComparison-L_knHqgw.js → fieldComparison-NLdDSOEh.js} +11 -12
- package/dist/finalSuccessScreen-DryADx1n.js +500 -0
- package/dist/fiscal-qr/fiscal-qr.es.js +12 -12
- package/dist/flip-animation-CvN8FLNc.js +6996 -0
- package/dist/flow/flow.es.js +81 -45
- package/dist/flow/styles.css +908 -5423
- package/dist/{front-horizontal-hint-B84GgTO1.js → front-horizontal-hint-D3CrWViZ.js} +1 -1
- package/dist/{front-vertical-hint-Bs_avngq.js → front-vertical-hint-BoLZvyx5.js} +1 -1
- package/dist/geolocation/geolocation.es.js +36 -13
- package/dist/geolocation/styles.css +1 -1
- package/dist/government-validation/government-validation.es.js +11 -12
- package/dist/{homeScreen-B6T0JVh8.js → homeScreen-Pv3v_0ji.js} +7 -9
- package/dist/{icons-CJJbIpBq.js → icons--ezYG2Fb.js} +92 -7
- package/dist/id/id.es.js +222 -52
- package/dist/id/styles.css +290 -10
- package/dist/id-back-of-card-DO593HH8.js +83 -0
- package/dist/id-back-of-card-vertical-DArEQ0hE.js +88 -0
- package/dist/id-front-of-card-Bcit7Pnq.js +308 -0
- package/dist/id-front-of-card-vertical-Bcr-KXcl.js +278 -0
- package/dist/id-laser-h-BaUHzX-d.js +480 -0
- package/dist/{id-laser-v-BiUXkM4x.js → id-laser-v-Dv9yEYJE.js} +7 -17
- package/dist/id-selfie-flow/id-selfie-flow.es.js +239 -0
- package/dist/id-selfie-flow/styles.css +749 -0
- package/dist/id-verification/id-verification.es.js +13 -9
- package/dist/{idOcr-WFBvqy3b.js → idOcr-gsIXHq6R.js} +14 -15
- package/dist/identity-reuse/identity-reuse.es.js +6 -8
- package/dist/identity-reuse/styles.css +1 -1
- package/dist/{incode-logo-57XFniXU.js → incode-logo-rGFjZHqi.js} +64 -1
- package/dist/incodeComponent-K9ZWg302.js +713 -0
- package/dist/incodeModule-CcLzar_X.js +25 -0
- package/dist/index.es.js +16 -5
- package/dist/{inputComposed-C1R2LAa3.js → inputComposed-BeROn635.js} +9 -9
- package/dist/inputComposed-CADVQW-o.js +1 -0
- package/dist/{mandatoryConsent-D0GTKu-H.js → mandatoryConsent-BtqB-FxY.js} +9 -11
- package/dist/{capture-CkGvdDNH.js → manualCaptureButton-quGa2ufS.js} +68 -198
- package/dist/manualCaptureButton-t_oIol88.js +300 -0
- package/dist/{modal-OxkFuuiR.js → modal-BjjJFpZu.js} +4 -4
- package/dist/{modal.hooks-ZrzmHAUa.js → modal.hooks-BvXzNWvY.js} +1 -1
- package/dist/{numberedStep-CEb-lFJm.js → numberedStep-DUs77Gy3.js} +1 -1
- package/dist/{optionAccessibleLabel-gfF-58Mv.js → optionAccessibleLabel-DgfHD_mx.js} +6 -6
- package/dist/{otpInput-CnDc6pQm.js → otpInput-D5dLXrmC.js} +72 -36
- package/dist/{passport-horizontal-hint-Bj0ZJY0g.js → passport-horizontal-hint-DgnU-8bl.js} +1 -1
- package/dist/{passport-vertical-hint-Dfk77xUJ.js → passport-vertical-hint-Dd2Wknw7.js} +1 -1
- package/dist/{pdf-BqtJTlor.js → pdf-BUoY_2gv.js} +1 -1
- package/dist/pdfViewer-CZb6obcZ.js +2 -0
- package/dist/{pdfViewer-B97DmT9m.js → pdfViewer-vud1VZv6.js} +5 -7
- package/dist/phone/phone.es.js +13 -12
- package/dist/{phoneInputComposed-DMiXfF-1.js → phoneInputComposed-CeVWTS_O.js} +7 -6
- package/dist/{processing-BeUMfdJJ.js → processing-BsvHyDWa.js} +2 -2
- package/dist/qe-signature/qe-signature.es.js +7 -4
- package/dist/{radioGroupComposed-DuQxslB2.js → radioGroupComposed-DzNGUbZQ.js} +16 -15
- package/dist/redirect-to-mobile/redirect-to-mobile.es.js +132 -45
- package/dist/redirect-to-mobile/styles.css +20 -10
- package/dist/{registerIncodeElement-DaNjbAwZ.js → registerIncodeElement-BduCekz5.js} +1 -1
- package/dist/{richText-CB1fmegc.js → richText-CTHBpZOw.js} +3 -1607
- package/dist/selfie/selfie.es.js +10 -10
- package/dist/selfie/styles.css +16 -949
- package/dist/signature/signature.es.js +27 -19
- package/dist/{ae-signature/styles2.css → signature/styles.css} +4 -4
- package/dist/{snackbar-DS7Mv62v.js → snackbar-C9Mqrh0e.js} +2 -2
- package/dist/spacer-CDlQd12V.js +2344 -0
- package/dist/{spinner-BMeIEK1d.js → spinner-CLZ2fz4u.js} +45 -4
- package/dist/statusPage--GVFSUJp.js +36 -0
- package/dist/{successIcon-B5mGvdx1.js → successIcon-Bj8Y9CuI.js} +1 -1
- package/dist/{tabs-C__chW-u.js → tabs-DweBZTV2.js} +4 -3
- package/dist/themes/dark.css +35 -0
- package/dist/themes/light.css +35 -0
- package/dist/{tutorial-CCfPuVKX.js → tutorial-BZZC93Ur.js} +222 -180
- package/dist/types/ae-signature.d.ts +91 -5
- package/dist/types/antifraud.d.ts +86 -3
- package/dist/types/authentication.d.ts +86 -3
- package/dist/types/certificate-issuance.d.ts +86 -3
- package/dist/types/consent.d.ts +86 -3
- package/dist/types/cross-document-data-match.d.ts +88 -4
- package/dist/types/curp-validation.d.ts +86 -3
- package/dist/types/document-capture.d.ts +88 -4
- package/dist/types/ekyb.d.ts +88 -4
- package/dist/types/ekyc.d.ts +88 -4
- package/dist/types/electronic-signature.d.ts +87 -4
- package/dist/types/email.d.ts +82 -22
- package/dist/types/extensibility.d.ts +157 -5
- package/dist/types/face-match.d.ts +84 -22
- package/dist/types/field-comparison.d.ts +86 -3
- package/dist/types/fiscal-qr.d.ts +89 -5
- package/dist/types/flow.d.ts +92 -2
- package/dist/types/geolocation.d.ts +86 -3
- package/dist/types/government-validation.d.ts +86 -3
- package/dist/types/id-selfie-flow.d.ts +161 -0
- package/dist/types/id-verification.d.ts +87 -4
- package/dist/types/id.d.ts +88 -5
- package/dist/types/identity-reuse.d.ts +82 -2
- package/dist/types/index.d.ts +106 -1
- package/dist/types/phone.d.ts +83 -24
- package/dist/types/qe-signature.d.ts +91 -5
- package/dist/types/redirect-to-mobile.d.ts +4 -1
- package/dist/types/selfie.d.ts +86 -3
- package/dist/types/signature.d.ts +91 -5
- package/dist/types/video-selfie.d.ts +83 -6
- package/dist/types/watchlist.d.ts +91 -5
- package/dist/types/workflow.d.ts +85 -2
- package/dist/{i18n-CU4xq8qC.js → uiConfig-B5ASPUL4.js} +26 -3
- package/dist/{useModuleLoader-Bi26kJbg.js → useModuleLoader-D_YpuVsS.js} +37 -248
- package/dist/{vendor-preact-DThS2ZQ_.js → vendor-preact-mvwZ8mJj.js} +1 -1
- package/dist/{verificationResult-BWWkmeiA.js → verificationResult-B8HwR07t.js} +26 -15
- package/dist/video-selfie/styles.css +349 -1202
- package/dist/video-selfie/video-selfie.es.js +120 -381
- package/dist/watchlist/watchlist.es.js +16 -13
- package/dist/{watchlistForBusiness-D2Uo_TwF.js → watchlistForBusiness-D8Is99bZ.js} +12 -13
- package/dist/workflow/styles.css +501 -3977
- package/dist/workflow/workflow.es.js +25 -18
- package/package.json +22 -20
- package/dist/button-Dz6AsbmF.js +0 -40
- package/dist/cameraView-DIEzM5ru.js +0 -47
- package/dist/cpf-ocr/cpf-ocr.es.js +0 -2
- package/dist/cpf-ocr/styles.css +0 -45
- package/dist/cpfOcr-B79245-3.js +0 -2
- package/dist/cpfOcr-BhxT-lRN.js +0 -92
- package/dist/dateInputComposed-DRzZi6uy.js +0 -1
- package/dist/documentCapture-DXYYyxZl.js +0 -2
- package/dist/dropdownComposed-BAoxIIsE.js +0 -1
- package/dist/ekybModule-C6Nttked.js +0 -2
- package/dist/ekycModule-CDIEjI6V.js +0 -2
- package/dist/errorIcon-BA4T6iy-.js +0 -26
- package/dist/faceMatch-B_HvxLm_.js +0 -2
- package/dist/fieldComparison-DfNEuEE5.js +0 -2
- package/dist/flip-animation-CZYSUtMm.js +0 -6983
- package/dist/hooks-CNu7o-v8.js +0 -186
- package/dist/id-laser-h-CzPegPMn.js +0 -467
- package/dist/incodeComponent-CfzJGETt.js +0 -64
- package/dist/incodeModule-B-4_3JrK.js +0 -13
- package/dist/inputComposed-BaY5q9WM.js +0 -1
- package/dist/loadingIcon-B0ysgiNq.js +0 -148
- package/dist/page-DidH_RkX.js +0 -171
- package/dist/spinner-BCDCoi9C.js +0 -1
- package/dist/statusPage-Bk8nJwXV.js +0 -28
- package/dist/transitionSpinner-CuNCqHNi.js +0 -30
- package/dist/types/cpf-ocr.d.ts +0 -12
- package/dist/typography-BZIpjo97.js +0 -45
- package/dist/uiConfig-D2_wawvr.js +0 -25
- /package/dist/{aligndevicelottie-DFscByAI.js → aligndevicelottie-CfoZ5Uus.js} +0 -0
- /package/dist/{back-tutorial-cI_4VHmE.js → back-tutorial-BHyRHyET.js} +0 -0
- /package/dist/{backdevicelottie-COyhTrxM.js → backdevicelottie-yKkczgFy.js} +0 -0
- /package/dist/{blurdevicelottie-BLVeJHEG.js → blurdevicelottie-8BbophdM.js} +0 -0
- /package/dist/{browser-ponyfill-Df13Th-G.js → browser-ponyfill-CBjGwwPW.js} +0 -0
- /package/dist/{defineProperty-Qjefk7Uf.js → defineProperty-BbpBna-2.js} +0 -0
- /package/dist/{frontdevicelottie-B4tE2PYQ.js → frontdevicelottie-CFcahVLk.js} +0 -0
- /package/dist/{glaredevicelottie-D1pR73sx.js → glaredevicelottie-Cnvah0kz.js} +0 -0
- /package/dist/{id-tutorial-DwO90SAm.js → id-tutorial-BOOsXlAJ.js} +0 -0
- /package/dist/{lottie_light-C6B2ec41.js → lottie_light-Bv56F2Ae.js} +0 -0
- /package/dist/{passport-tutorial-D9JNsMsM.js → passport-tutorial-CeSup6m9.js} +0 -0
- /package/dist/{requiredLabelHint-D0RhuMed.js → requiredLabelHint-Dx0WS2cR.js} +0 -0
- /package/dist/{selfieTutorial-pB-N-fj5.js → selfieTutorial-CYa8bq6B.js} +0 -0
|
@@ -0,0 +1,2344 @@
|
|
|
1
|
+
import { r as __toESM } from "./rolldown-runtime--E5BIlTp.js";
|
|
2
|
+
import { i as useTranslation, n as useUiConfig } from "./uiConfig-B5ASPUL4.js";
|
|
3
|
+
import { _ as y, b as Q, d as T, f as _, g as x, h as q, l as A, p as d, v as u } from "./vendor-preact-mvwZ8mJj.js";
|
|
4
|
+
//#region src/styles/cn.tsx
|
|
5
|
+
var cn = (...classes) => {
|
|
6
|
+
const result = [];
|
|
7
|
+
for (const cls of classes) {
|
|
8
|
+
if (!cls) continue;
|
|
9
|
+
if (typeof cls === "string") result.push(cls);
|
|
10
|
+
else if (typeof cls === "object") {
|
|
11
|
+
for (const [key, value] of Object.entries(cls)) if (value) result.push(key);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return result.join(" ");
|
|
15
|
+
};
|
|
16
|
+
//#endregion
|
|
17
|
+
//#region ../../node_modules/.pnpm/dompurify@3.3.3/node_modules/dompurify/dist/purify.es.mjs
|
|
18
|
+
/*! @license DOMPurify 3.3.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.3/LICENSE */
|
|
19
|
+
var { entries, setPrototypeOf, isFrozen, getPrototypeOf, getOwnPropertyDescriptor } = Object;
|
|
20
|
+
var { freeze, seal, create } = Object;
|
|
21
|
+
var { apply, construct } = typeof Reflect !== "undefined" && Reflect;
|
|
22
|
+
if (!freeze) freeze = function freeze(x) {
|
|
23
|
+
return x;
|
|
24
|
+
};
|
|
25
|
+
if (!seal) seal = function seal(x) {
|
|
26
|
+
return x;
|
|
27
|
+
};
|
|
28
|
+
if (!apply) apply = function apply(func, thisArg) {
|
|
29
|
+
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) args[_key - 2] = arguments[_key];
|
|
30
|
+
return func.apply(thisArg, args);
|
|
31
|
+
};
|
|
32
|
+
if (!construct) construct = function construct(Func) {
|
|
33
|
+
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) args[_key2 - 1] = arguments[_key2];
|
|
34
|
+
return new Func(...args);
|
|
35
|
+
};
|
|
36
|
+
var arrayForEach = unapply(Array.prototype.forEach);
|
|
37
|
+
var arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);
|
|
38
|
+
var arrayPop = unapply(Array.prototype.pop);
|
|
39
|
+
var arrayPush = unapply(Array.prototype.push);
|
|
40
|
+
var arraySplice = unapply(Array.prototype.splice);
|
|
41
|
+
var stringToLowerCase = unapply(String.prototype.toLowerCase);
|
|
42
|
+
var stringToString = unapply(String.prototype.toString);
|
|
43
|
+
var stringMatch = unapply(String.prototype.match);
|
|
44
|
+
var stringReplace = unapply(String.prototype.replace);
|
|
45
|
+
var stringIndexOf = unapply(String.prototype.indexOf);
|
|
46
|
+
var stringTrim = unapply(String.prototype.trim);
|
|
47
|
+
var objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);
|
|
48
|
+
var regExpTest = unapply(RegExp.prototype.test);
|
|
49
|
+
var typeErrorCreate = unconstruct(TypeError);
|
|
50
|
+
/**
|
|
51
|
+
* Creates a new function that calls the given function with a specified thisArg and arguments.
|
|
52
|
+
*
|
|
53
|
+
* @param func - The function to be wrapped and called.
|
|
54
|
+
* @returns A new function that calls the given function with a specified thisArg and arguments.
|
|
55
|
+
*/
|
|
56
|
+
function unapply(func) {
|
|
57
|
+
return function(thisArg) {
|
|
58
|
+
if (thisArg instanceof RegExp) thisArg.lastIndex = 0;
|
|
59
|
+
for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) args[_key3 - 1] = arguments[_key3];
|
|
60
|
+
return apply(func, thisArg, args);
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Creates a new function that constructs an instance of the given constructor function with the provided arguments.
|
|
65
|
+
*
|
|
66
|
+
* @param func - The constructor function to be wrapped and called.
|
|
67
|
+
* @returns A new function that constructs an instance of the given constructor function with the provided arguments.
|
|
68
|
+
*/
|
|
69
|
+
function unconstruct(Func) {
|
|
70
|
+
return function() {
|
|
71
|
+
for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) args[_key4] = arguments[_key4];
|
|
72
|
+
return construct(Func, args);
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Add properties to a lookup table
|
|
77
|
+
*
|
|
78
|
+
* @param set - The set to which elements will be added.
|
|
79
|
+
* @param array - The array containing elements to be added to the set.
|
|
80
|
+
* @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.
|
|
81
|
+
* @returns The modified set with added elements.
|
|
82
|
+
*/
|
|
83
|
+
function addToSet(set, array) {
|
|
84
|
+
let transformCaseFunc = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : stringToLowerCase;
|
|
85
|
+
if (setPrototypeOf) setPrototypeOf(set, null);
|
|
86
|
+
let l = array.length;
|
|
87
|
+
while (l--) {
|
|
88
|
+
let element = array[l];
|
|
89
|
+
if (typeof element === "string") {
|
|
90
|
+
const lcElement = transformCaseFunc(element);
|
|
91
|
+
if (lcElement !== element) {
|
|
92
|
+
if (!isFrozen(array)) array[l] = lcElement;
|
|
93
|
+
element = lcElement;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
set[element] = true;
|
|
97
|
+
}
|
|
98
|
+
return set;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Clean up an array to harden against CSPP
|
|
102
|
+
*
|
|
103
|
+
* @param array - The array to be cleaned.
|
|
104
|
+
* @returns The cleaned version of the array
|
|
105
|
+
*/
|
|
106
|
+
function cleanArray(array) {
|
|
107
|
+
for (let index = 0; index < array.length; index++) if (!objectHasOwnProperty(array, index)) array[index] = null;
|
|
108
|
+
return array;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Shallow clone an object
|
|
112
|
+
*
|
|
113
|
+
* @param object - The object to be cloned.
|
|
114
|
+
* @returns A new object that copies the original.
|
|
115
|
+
*/
|
|
116
|
+
function clone(object) {
|
|
117
|
+
const newObject = create(null);
|
|
118
|
+
for (const [property, value] of entries(object)) if (objectHasOwnProperty(object, property)) if (Array.isArray(value)) newObject[property] = cleanArray(value);
|
|
119
|
+
else if (value && typeof value === "object" && value.constructor === Object) newObject[property] = clone(value);
|
|
120
|
+
else newObject[property] = value;
|
|
121
|
+
return newObject;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* This method automatically checks if the prop is function or getter and behaves accordingly.
|
|
125
|
+
*
|
|
126
|
+
* @param object - The object to look up the getter function in its prototype chain.
|
|
127
|
+
* @param prop - The property name for which to find the getter function.
|
|
128
|
+
* @returns The getter function found in the prototype chain or a fallback function.
|
|
129
|
+
*/
|
|
130
|
+
function lookupGetter(object, prop) {
|
|
131
|
+
while (object !== null) {
|
|
132
|
+
const desc = getOwnPropertyDescriptor(object, prop);
|
|
133
|
+
if (desc) {
|
|
134
|
+
if (desc.get) return unapply(desc.get);
|
|
135
|
+
if (typeof desc.value === "function") return unapply(desc.value);
|
|
136
|
+
}
|
|
137
|
+
object = getPrototypeOf(object);
|
|
138
|
+
}
|
|
139
|
+
function fallbackValue() {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
return fallbackValue;
|
|
143
|
+
}
|
|
144
|
+
var html$1 = freeze([
|
|
145
|
+
"a",
|
|
146
|
+
"abbr",
|
|
147
|
+
"acronym",
|
|
148
|
+
"address",
|
|
149
|
+
"area",
|
|
150
|
+
"article",
|
|
151
|
+
"aside",
|
|
152
|
+
"audio",
|
|
153
|
+
"b",
|
|
154
|
+
"bdi",
|
|
155
|
+
"bdo",
|
|
156
|
+
"big",
|
|
157
|
+
"blink",
|
|
158
|
+
"blockquote",
|
|
159
|
+
"body",
|
|
160
|
+
"br",
|
|
161
|
+
"button",
|
|
162
|
+
"canvas",
|
|
163
|
+
"caption",
|
|
164
|
+
"center",
|
|
165
|
+
"cite",
|
|
166
|
+
"code",
|
|
167
|
+
"col",
|
|
168
|
+
"colgroup",
|
|
169
|
+
"content",
|
|
170
|
+
"data",
|
|
171
|
+
"datalist",
|
|
172
|
+
"dd",
|
|
173
|
+
"decorator",
|
|
174
|
+
"del",
|
|
175
|
+
"details",
|
|
176
|
+
"dfn",
|
|
177
|
+
"dialog",
|
|
178
|
+
"dir",
|
|
179
|
+
"div",
|
|
180
|
+
"dl",
|
|
181
|
+
"dt",
|
|
182
|
+
"element",
|
|
183
|
+
"em",
|
|
184
|
+
"fieldset",
|
|
185
|
+
"figcaption",
|
|
186
|
+
"figure",
|
|
187
|
+
"font",
|
|
188
|
+
"footer",
|
|
189
|
+
"form",
|
|
190
|
+
"h1",
|
|
191
|
+
"h2",
|
|
192
|
+
"h3",
|
|
193
|
+
"h4",
|
|
194
|
+
"h5",
|
|
195
|
+
"h6",
|
|
196
|
+
"head",
|
|
197
|
+
"header",
|
|
198
|
+
"hgroup",
|
|
199
|
+
"hr",
|
|
200
|
+
"html",
|
|
201
|
+
"i",
|
|
202
|
+
"img",
|
|
203
|
+
"input",
|
|
204
|
+
"ins",
|
|
205
|
+
"kbd",
|
|
206
|
+
"label",
|
|
207
|
+
"legend",
|
|
208
|
+
"li",
|
|
209
|
+
"main",
|
|
210
|
+
"map",
|
|
211
|
+
"mark",
|
|
212
|
+
"marquee",
|
|
213
|
+
"menu",
|
|
214
|
+
"menuitem",
|
|
215
|
+
"meter",
|
|
216
|
+
"nav",
|
|
217
|
+
"nobr",
|
|
218
|
+
"ol",
|
|
219
|
+
"optgroup",
|
|
220
|
+
"option",
|
|
221
|
+
"output",
|
|
222
|
+
"p",
|
|
223
|
+
"picture",
|
|
224
|
+
"pre",
|
|
225
|
+
"progress",
|
|
226
|
+
"q",
|
|
227
|
+
"rp",
|
|
228
|
+
"rt",
|
|
229
|
+
"ruby",
|
|
230
|
+
"s",
|
|
231
|
+
"samp",
|
|
232
|
+
"search",
|
|
233
|
+
"section",
|
|
234
|
+
"select",
|
|
235
|
+
"shadow",
|
|
236
|
+
"slot",
|
|
237
|
+
"small",
|
|
238
|
+
"source",
|
|
239
|
+
"spacer",
|
|
240
|
+
"span",
|
|
241
|
+
"strike",
|
|
242
|
+
"strong",
|
|
243
|
+
"style",
|
|
244
|
+
"sub",
|
|
245
|
+
"summary",
|
|
246
|
+
"sup",
|
|
247
|
+
"table",
|
|
248
|
+
"tbody",
|
|
249
|
+
"td",
|
|
250
|
+
"template",
|
|
251
|
+
"textarea",
|
|
252
|
+
"tfoot",
|
|
253
|
+
"th",
|
|
254
|
+
"thead",
|
|
255
|
+
"time",
|
|
256
|
+
"tr",
|
|
257
|
+
"track",
|
|
258
|
+
"tt",
|
|
259
|
+
"u",
|
|
260
|
+
"ul",
|
|
261
|
+
"var",
|
|
262
|
+
"video",
|
|
263
|
+
"wbr"
|
|
264
|
+
]);
|
|
265
|
+
var svg$1 = freeze([
|
|
266
|
+
"svg",
|
|
267
|
+
"a",
|
|
268
|
+
"altglyph",
|
|
269
|
+
"altglyphdef",
|
|
270
|
+
"altglyphitem",
|
|
271
|
+
"animatecolor",
|
|
272
|
+
"animatemotion",
|
|
273
|
+
"animatetransform",
|
|
274
|
+
"circle",
|
|
275
|
+
"clippath",
|
|
276
|
+
"defs",
|
|
277
|
+
"desc",
|
|
278
|
+
"ellipse",
|
|
279
|
+
"enterkeyhint",
|
|
280
|
+
"exportparts",
|
|
281
|
+
"filter",
|
|
282
|
+
"font",
|
|
283
|
+
"g",
|
|
284
|
+
"glyph",
|
|
285
|
+
"glyphref",
|
|
286
|
+
"hkern",
|
|
287
|
+
"image",
|
|
288
|
+
"inputmode",
|
|
289
|
+
"line",
|
|
290
|
+
"lineargradient",
|
|
291
|
+
"marker",
|
|
292
|
+
"mask",
|
|
293
|
+
"metadata",
|
|
294
|
+
"mpath",
|
|
295
|
+
"part",
|
|
296
|
+
"path",
|
|
297
|
+
"pattern",
|
|
298
|
+
"polygon",
|
|
299
|
+
"polyline",
|
|
300
|
+
"radialgradient",
|
|
301
|
+
"rect",
|
|
302
|
+
"stop",
|
|
303
|
+
"style",
|
|
304
|
+
"switch",
|
|
305
|
+
"symbol",
|
|
306
|
+
"text",
|
|
307
|
+
"textpath",
|
|
308
|
+
"title",
|
|
309
|
+
"tref",
|
|
310
|
+
"tspan",
|
|
311
|
+
"view",
|
|
312
|
+
"vkern"
|
|
313
|
+
]);
|
|
314
|
+
var svgFilters = freeze([
|
|
315
|
+
"feBlend",
|
|
316
|
+
"feColorMatrix",
|
|
317
|
+
"feComponentTransfer",
|
|
318
|
+
"feComposite",
|
|
319
|
+
"feConvolveMatrix",
|
|
320
|
+
"feDiffuseLighting",
|
|
321
|
+
"feDisplacementMap",
|
|
322
|
+
"feDistantLight",
|
|
323
|
+
"feDropShadow",
|
|
324
|
+
"feFlood",
|
|
325
|
+
"feFuncA",
|
|
326
|
+
"feFuncB",
|
|
327
|
+
"feFuncG",
|
|
328
|
+
"feFuncR",
|
|
329
|
+
"feGaussianBlur",
|
|
330
|
+
"feImage",
|
|
331
|
+
"feMerge",
|
|
332
|
+
"feMergeNode",
|
|
333
|
+
"feMorphology",
|
|
334
|
+
"feOffset",
|
|
335
|
+
"fePointLight",
|
|
336
|
+
"feSpecularLighting",
|
|
337
|
+
"feSpotLight",
|
|
338
|
+
"feTile",
|
|
339
|
+
"feTurbulence"
|
|
340
|
+
]);
|
|
341
|
+
var svgDisallowed = freeze([
|
|
342
|
+
"animate",
|
|
343
|
+
"color-profile",
|
|
344
|
+
"cursor",
|
|
345
|
+
"discard",
|
|
346
|
+
"font-face",
|
|
347
|
+
"font-face-format",
|
|
348
|
+
"font-face-name",
|
|
349
|
+
"font-face-src",
|
|
350
|
+
"font-face-uri",
|
|
351
|
+
"foreignobject",
|
|
352
|
+
"hatch",
|
|
353
|
+
"hatchpath",
|
|
354
|
+
"mesh",
|
|
355
|
+
"meshgradient",
|
|
356
|
+
"meshpatch",
|
|
357
|
+
"meshrow",
|
|
358
|
+
"missing-glyph",
|
|
359
|
+
"script",
|
|
360
|
+
"set",
|
|
361
|
+
"solidcolor",
|
|
362
|
+
"unknown",
|
|
363
|
+
"use"
|
|
364
|
+
]);
|
|
365
|
+
var mathMl$1 = freeze([
|
|
366
|
+
"math",
|
|
367
|
+
"menclose",
|
|
368
|
+
"merror",
|
|
369
|
+
"mfenced",
|
|
370
|
+
"mfrac",
|
|
371
|
+
"mglyph",
|
|
372
|
+
"mi",
|
|
373
|
+
"mlabeledtr",
|
|
374
|
+
"mmultiscripts",
|
|
375
|
+
"mn",
|
|
376
|
+
"mo",
|
|
377
|
+
"mover",
|
|
378
|
+
"mpadded",
|
|
379
|
+
"mphantom",
|
|
380
|
+
"mroot",
|
|
381
|
+
"mrow",
|
|
382
|
+
"ms",
|
|
383
|
+
"mspace",
|
|
384
|
+
"msqrt",
|
|
385
|
+
"mstyle",
|
|
386
|
+
"msub",
|
|
387
|
+
"msup",
|
|
388
|
+
"msubsup",
|
|
389
|
+
"mtable",
|
|
390
|
+
"mtd",
|
|
391
|
+
"mtext",
|
|
392
|
+
"mtr",
|
|
393
|
+
"munder",
|
|
394
|
+
"munderover",
|
|
395
|
+
"mprescripts"
|
|
396
|
+
]);
|
|
397
|
+
var mathMlDisallowed = freeze([
|
|
398
|
+
"maction",
|
|
399
|
+
"maligngroup",
|
|
400
|
+
"malignmark",
|
|
401
|
+
"mlongdiv",
|
|
402
|
+
"mscarries",
|
|
403
|
+
"mscarry",
|
|
404
|
+
"msgroup",
|
|
405
|
+
"mstack",
|
|
406
|
+
"msline",
|
|
407
|
+
"msrow",
|
|
408
|
+
"semantics",
|
|
409
|
+
"annotation",
|
|
410
|
+
"annotation-xml",
|
|
411
|
+
"mprescripts",
|
|
412
|
+
"none"
|
|
413
|
+
]);
|
|
414
|
+
var text = freeze(["#text"]);
|
|
415
|
+
var html = freeze([
|
|
416
|
+
"accept",
|
|
417
|
+
"action",
|
|
418
|
+
"align",
|
|
419
|
+
"alt",
|
|
420
|
+
"autocapitalize",
|
|
421
|
+
"autocomplete",
|
|
422
|
+
"autopictureinpicture",
|
|
423
|
+
"autoplay",
|
|
424
|
+
"background",
|
|
425
|
+
"bgcolor",
|
|
426
|
+
"border",
|
|
427
|
+
"capture",
|
|
428
|
+
"cellpadding",
|
|
429
|
+
"cellspacing",
|
|
430
|
+
"checked",
|
|
431
|
+
"cite",
|
|
432
|
+
"class",
|
|
433
|
+
"clear",
|
|
434
|
+
"color",
|
|
435
|
+
"cols",
|
|
436
|
+
"colspan",
|
|
437
|
+
"controls",
|
|
438
|
+
"controlslist",
|
|
439
|
+
"coords",
|
|
440
|
+
"crossorigin",
|
|
441
|
+
"datetime",
|
|
442
|
+
"decoding",
|
|
443
|
+
"default",
|
|
444
|
+
"dir",
|
|
445
|
+
"disabled",
|
|
446
|
+
"disablepictureinpicture",
|
|
447
|
+
"disableremoteplayback",
|
|
448
|
+
"download",
|
|
449
|
+
"draggable",
|
|
450
|
+
"enctype",
|
|
451
|
+
"enterkeyhint",
|
|
452
|
+
"exportparts",
|
|
453
|
+
"face",
|
|
454
|
+
"for",
|
|
455
|
+
"headers",
|
|
456
|
+
"height",
|
|
457
|
+
"hidden",
|
|
458
|
+
"high",
|
|
459
|
+
"href",
|
|
460
|
+
"hreflang",
|
|
461
|
+
"id",
|
|
462
|
+
"inert",
|
|
463
|
+
"inputmode",
|
|
464
|
+
"integrity",
|
|
465
|
+
"ismap",
|
|
466
|
+
"kind",
|
|
467
|
+
"label",
|
|
468
|
+
"lang",
|
|
469
|
+
"list",
|
|
470
|
+
"loading",
|
|
471
|
+
"loop",
|
|
472
|
+
"low",
|
|
473
|
+
"max",
|
|
474
|
+
"maxlength",
|
|
475
|
+
"media",
|
|
476
|
+
"method",
|
|
477
|
+
"min",
|
|
478
|
+
"minlength",
|
|
479
|
+
"multiple",
|
|
480
|
+
"muted",
|
|
481
|
+
"name",
|
|
482
|
+
"nonce",
|
|
483
|
+
"noshade",
|
|
484
|
+
"novalidate",
|
|
485
|
+
"nowrap",
|
|
486
|
+
"open",
|
|
487
|
+
"optimum",
|
|
488
|
+
"part",
|
|
489
|
+
"pattern",
|
|
490
|
+
"placeholder",
|
|
491
|
+
"playsinline",
|
|
492
|
+
"popover",
|
|
493
|
+
"popovertarget",
|
|
494
|
+
"popovertargetaction",
|
|
495
|
+
"poster",
|
|
496
|
+
"preload",
|
|
497
|
+
"pubdate",
|
|
498
|
+
"radiogroup",
|
|
499
|
+
"readonly",
|
|
500
|
+
"rel",
|
|
501
|
+
"required",
|
|
502
|
+
"rev",
|
|
503
|
+
"reversed",
|
|
504
|
+
"role",
|
|
505
|
+
"rows",
|
|
506
|
+
"rowspan",
|
|
507
|
+
"spellcheck",
|
|
508
|
+
"scope",
|
|
509
|
+
"selected",
|
|
510
|
+
"shape",
|
|
511
|
+
"size",
|
|
512
|
+
"sizes",
|
|
513
|
+
"slot",
|
|
514
|
+
"span",
|
|
515
|
+
"srclang",
|
|
516
|
+
"start",
|
|
517
|
+
"src",
|
|
518
|
+
"srcset",
|
|
519
|
+
"step",
|
|
520
|
+
"style",
|
|
521
|
+
"summary",
|
|
522
|
+
"tabindex",
|
|
523
|
+
"title",
|
|
524
|
+
"translate",
|
|
525
|
+
"type",
|
|
526
|
+
"usemap",
|
|
527
|
+
"valign",
|
|
528
|
+
"value",
|
|
529
|
+
"width",
|
|
530
|
+
"wrap",
|
|
531
|
+
"xmlns",
|
|
532
|
+
"slot"
|
|
533
|
+
]);
|
|
534
|
+
var svg = freeze([
|
|
535
|
+
"accent-height",
|
|
536
|
+
"accumulate",
|
|
537
|
+
"additive",
|
|
538
|
+
"alignment-baseline",
|
|
539
|
+
"amplitude",
|
|
540
|
+
"ascent",
|
|
541
|
+
"attributename",
|
|
542
|
+
"attributetype",
|
|
543
|
+
"azimuth",
|
|
544
|
+
"basefrequency",
|
|
545
|
+
"baseline-shift",
|
|
546
|
+
"begin",
|
|
547
|
+
"bias",
|
|
548
|
+
"by",
|
|
549
|
+
"class",
|
|
550
|
+
"clip",
|
|
551
|
+
"clippathunits",
|
|
552
|
+
"clip-path",
|
|
553
|
+
"clip-rule",
|
|
554
|
+
"color",
|
|
555
|
+
"color-interpolation",
|
|
556
|
+
"color-interpolation-filters",
|
|
557
|
+
"color-profile",
|
|
558
|
+
"color-rendering",
|
|
559
|
+
"cx",
|
|
560
|
+
"cy",
|
|
561
|
+
"d",
|
|
562
|
+
"dx",
|
|
563
|
+
"dy",
|
|
564
|
+
"diffuseconstant",
|
|
565
|
+
"direction",
|
|
566
|
+
"display",
|
|
567
|
+
"divisor",
|
|
568
|
+
"dur",
|
|
569
|
+
"edgemode",
|
|
570
|
+
"elevation",
|
|
571
|
+
"end",
|
|
572
|
+
"exponent",
|
|
573
|
+
"fill",
|
|
574
|
+
"fill-opacity",
|
|
575
|
+
"fill-rule",
|
|
576
|
+
"filter",
|
|
577
|
+
"filterunits",
|
|
578
|
+
"flood-color",
|
|
579
|
+
"flood-opacity",
|
|
580
|
+
"font-family",
|
|
581
|
+
"font-size",
|
|
582
|
+
"font-size-adjust",
|
|
583
|
+
"font-stretch",
|
|
584
|
+
"font-style",
|
|
585
|
+
"font-variant",
|
|
586
|
+
"font-weight",
|
|
587
|
+
"fx",
|
|
588
|
+
"fy",
|
|
589
|
+
"g1",
|
|
590
|
+
"g2",
|
|
591
|
+
"glyph-name",
|
|
592
|
+
"glyphref",
|
|
593
|
+
"gradientunits",
|
|
594
|
+
"gradienttransform",
|
|
595
|
+
"height",
|
|
596
|
+
"href",
|
|
597
|
+
"id",
|
|
598
|
+
"image-rendering",
|
|
599
|
+
"in",
|
|
600
|
+
"in2",
|
|
601
|
+
"intercept",
|
|
602
|
+
"k",
|
|
603
|
+
"k1",
|
|
604
|
+
"k2",
|
|
605
|
+
"k3",
|
|
606
|
+
"k4",
|
|
607
|
+
"kerning",
|
|
608
|
+
"keypoints",
|
|
609
|
+
"keysplines",
|
|
610
|
+
"keytimes",
|
|
611
|
+
"lang",
|
|
612
|
+
"lengthadjust",
|
|
613
|
+
"letter-spacing",
|
|
614
|
+
"kernelmatrix",
|
|
615
|
+
"kernelunitlength",
|
|
616
|
+
"lighting-color",
|
|
617
|
+
"local",
|
|
618
|
+
"marker-end",
|
|
619
|
+
"marker-mid",
|
|
620
|
+
"marker-start",
|
|
621
|
+
"markerheight",
|
|
622
|
+
"markerunits",
|
|
623
|
+
"markerwidth",
|
|
624
|
+
"maskcontentunits",
|
|
625
|
+
"maskunits",
|
|
626
|
+
"max",
|
|
627
|
+
"mask",
|
|
628
|
+
"mask-type",
|
|
629
|
+
"media",
|
|
630
|
+
"method",
|
|
631
|
+
"mode",
|
|
632
|
+
"min",
|
|
633
|
+
"name",
|
|
634
|
+
"numoctaves",
|
|
635
|
+
"offset",
|
|
636
|
+
"operator",
|
|
637
|
+
"opacity",
|
|
638
|
+
"order",
|
|
639
|
+
"orient",
|
|
640
|
+
"orientation",
|
|
641
|
+
"origin",
|
|
642
|
+
"overflow",
|
|
643
|
+
"paint-order",
|
|
644
|
+
"path",
|
|
645
|
+
"pathlength",
|
|
646
|
+
"patterncontentunits",
|
|
647
|
+
"patterntransform",
|
|
648
|
+
"patternunits",
|
|
649
|
+
"points",
|
|
650
|
+
"preservealpha",
|
|
651
|
+
"preserveaspectratio",
|
|
652
|
+
"primitiveunits",
|
|
653
|
+
"r",
|
|
654
|
+
"rx",
|
|
655
|
+
"ry",
|
|
656
|
+
"radius",
|
|
657
|
+
"refx",
|
|
658
|
+
"refy",
|
|
659
|
+
"repeatcount",
|
|
660
|
+
"repeatdur",
|
|
661
|
+
"restart",
|
|
662
|
+
"result",
|
|
663
|
+
"rotate",
|
|
664
|
+
"scale",
|
|
665
|
+
"seed",
|
|
666
|
+
"shape-rendering",
|
|
667
|
+
"slope",
|
|
668
|
+
"specularconstant",
|
|
669
|
+
"specularexponent",
|
|
670
|
+
"spreadmethod",
|
|
671
|
+
"startoffset",
|
|
672
|
+
"stddeviation",
|
|
673
|
+
"stitchtiles",
|
|
674
|
+
"stop-color",
|
|
675
|
+
"stop-opacity",
|
|
676
|
+
"stroke-dasharray",
|
|
677
|
+
"stroke-dashoffset",
|
|
678
|
+
"stroke-linecap",
|
|
679
|
+
"stroke-linejoin",
|
|
680
|
+
"stroke-miterlimit",
|
|
681
|
+
"stroke-opacity",
|
|
682
|
+
"stroke",
|
|
683
|
+
"stroke-width",
|
|
684
|
+
"style",
|
|
685
|
+
"surfacescale",
|
|
686
|
+
"systemlanguage",
|
|
687
|
+
"tabindex",
|
|
688
|
+
"tablevalues",
|
|
689
|
+
"targetx",
|
|
690
|
+
"targety",
|
|
691
|
+
"transform",
|
|
692
|
+
"transform-origin",
|
|
693
|
+
"text-anchor",
|
|
694
|
+
"text-decoration",
|
|
695
|
+
"text-rendering",
|
|
696
|
+
"textlength",
|
|
697
|
+
"type",
|
|
698
|
+
"u1",
|
|
699
|
+
"u2",
|
|
700
|
+
"unicode",
|
|
701
|
+
"values",
|
|
702
|
+
"viewbox",
|
|
703
|
+
"visibility",
|
|
704
|
+
"version",
|
|
705
|
+
"vert-adv-y",
|
|
706
|
+
"vert-origin-x",
|
|
707
|
+
"vert-origin-y",
|
|
708
|
+
"width",
|
|
709
|
+
"word-spacing",
|
|
710
|
+
"wrap",
|
|
711
|
+
"writing-mode",
|
|
712
|
+
"xchannelselector",
|
|
713
|
+
"ychannelselector",
|
|
714
|
+
"x",
|
|
715
|
+
"x1",
|
|
716
|
+
"x2",
|
|
717
|
+
"xmlns",
|
|
718
|
+
"y",
|
|
719
|
+
"y1",
|
|
720
|
+
"y2",
|
|
721
|
+
"z",
|
|
722
|
+
"zoomandpan"
|
|
723
|
+
]);
|
|
724
|
+
var mathMl = freeze([
|
|
725
|
+
"accent",
|
|
726
|
+
"accentunder",
|
|
727
|
+
"align",
|
|
728
|
+
"bevelled",
|
|
729
|
+
"close",
|
|
730
|
+
"columnsalign",
|
|
731
|
+
"columnlines",
|
|
732
|
+
"columnspan",
|
|
733
|
+
"denomalign",
|
|
734
|
+
"depth",
|
|
735
|
+
"dir",
|
|
736
|
+
"display",
|
|
737
|
+
"displaystyle",
|
|
738
|
+
"encoding",
|
|
739
|
+
"fence",
|
|
740
|
+
"frame",
|
|
741
|
+
"height",
|
|
742
|
+
"href",
|
|
743
|
+
"id",
|
|
744
|
+
"largeop",
|
|
745
|
+
"length",
|
|
746
|
+
"linethickness",
|
|
747
|
+
"lspace",
|
|
748
|
+
"lquote",
|
|
749
|
+
"mathbackground",
|
|
750
|
+
"mathcolor",
|
|
751
|
+
"mathsize",
|
|
752
|
+
"mathvariant",
|
|
753
|
+
"maxsize",
|
|
754
|
+
"minsize",
|
|
755
|
+
"movablelimits",
|
|
756
|
+
"notation",
|
|
757
|
+
"numalign",
|
|
758
|
+
"open",
|
|
759
|
+
"rowalign",
|
|
760
|
+
"rowlines",
|
|
761
|
+
"rowspacing",
|
|
762
|
+
"rowspan",
|
|
763
|
+
"rspace",
|
|
764
|
+
"rquote",
|
|
765
|
+
"scriptlevel",
|
|
766
|
+
"scriptminsize",
|
|
767
|
+
"scriptsizemultiplier",
|
|
768
|
+
"selection",
|
|
769
|
+
"separator",
|
|
770
|
+
"separators",
|
|
771
|
+
"stretchy",
|
|
772
|
+
"subscriptshift",
|
|
773
|
+
"supscriptshift",
|
|
774
|
+
"symmetric",
|
|
775
|
+
"voffset",
|
|
776
|
+
"width",
|
|
777
|
+
"xmlns"
|
|
778
|
+
]);
|
|
779
|
+
var xml = freeze([
|
|
780
|
+
"xlink:href",
|
|
781
|
+
"xml:id",
|
|
782
|
+
"xlink:title",
|
|
783
|
+
"xml:space",
|
|
784
|
+
"xmlns:xlink"
|
|
785
|
+
]);
|
|
786
|
+
var MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm);
|
|
787
|
+
var ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm);
|
|
788
|
+
var TMPLIT_EXPR = seal(/\$\{[\w\W]*/gm);
|
|
789
|
+
var DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]+$/);
|
|
790
|
+
var ARIA_ATTR = seal(/^aria-[\-\w]+$/);
|
|
791
|
+
var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i);
|
|
792
|
+
var IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i);
|
|
793
|
+
var ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g);
|
|
794
|
+
var DOCTYPE_NAME = seal(/^html$/i);
|
|
795
|
+
var CUSTOM_ELEMENT = seal(/^[a-z][.\w]*(-[.\w]+)+$/i);
|
|
796
|
+
var EXPRESSIONS = /* @__PURE__ */ Object.freeze({
|
|
797
|
+
__proto__: null,
|
|
798
|
+
ARIA_ATTR,
|
|
799
|
+
ATTR_WHITESPACE,
|
|
800
|
+
CUSTOM_ELEMENT,
|
|
801
|
+
DATA_ATTR,
|
|
802
|
+
DOCTYPE_NAME,
|
|
803
|
+
ERB_EXPR,
|
|
804
|
+
IS_ALLOWED_URI,
|
|
805
|
+
IS_SCRIPT_OR_DATA,
|
|
806
|
+
MUSTACHE_EXPR,
|
|
807
|
+
TMPLIT_EXPR
|
|
808
|
+
});
|
|
809
|
+
var NODE_TYPE = {
|
|
810
|
+
element: 1,
|
|
811
|
+
attribute: 2,
|
|
812
|
+
text: 3,
|
|
813
|
+
cdataSection: 4,
|
|
814
|
+
entityReference: 5,
|
|
815
|
+
entityNode: 6,
|
|
816
|
+
progressingInstruction: 7,
|
|
817
|
+
comment: 8,
|
|
818
|
+
document: 9,
|
|
819
|
+
documentType: 10,
|
|
820
|
+
documentFragment: 11,
|
|
821
|
+
notation: 12
|
|
822
|
+
};
|
|
823
|
+
var getGlobal = function getGlobal() {
|
|
824
|
+
return typeof window === "undefined" ? null : window;
|
|
825
|
+
};
|
|
826
|
+
/**
|
|
827
|
+
* Creates a no-op policy for internal use only.
|
|
828
|
+
* Don't export this function outside this module!
|
|
829
|
+
* @param trustedTypes The policy factory.
|
|
830
|
+
* @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).
|
|
831
|
+
* @return The policy created (or null, if Trusted Types
|
|
832
|
+
* are not supported or creating the policy failed).
|
|
833
|
+
*/
|
|
834
|
+
var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {
|
|
835
|
+
if (typeof trustedTypes !== "object" || typeof trustedTypes.createPolicy !== "function") return null;
|
|
836
|
+
let suffix = null;
|
|
837
|
+
const ATTR_NAME = "data-tt-policy-suffix";
|
|
838
|
+
if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) suffix = purifyHostElement.getAttribute(ATTR_NAME);
|
|
839
|
+
const policyName = "dompurify" + (suffix ? "#" + suffix : "");
|
|
840
|
+
try {
|
|
841
|
+
return trustedTypes.createPolicy(policyName, {
|
|
842
|
+
createHTML(html) {
|
|
843
|
+
return html;
|
|
844
|
+
},
|
|
845
|
+
createScriptURL(scriptUrl) {
|
|
846
|
+
return scriptUrl;
|
|
847
|
+
}
|
|
848
|
+
});
|
|
849
|
+
} catch (_) {
|
|
850
|
+
console.warn("TrustedTypes policy " + policyName + " could not be created.");
|
|
851
|
+
return null;
|
|
852
|
+
}
|
|
853
|
+
};
|
|
854
|
+
var _createHooksMap = function _createHooksMap() {
|
|
855
|
+
return {
|
|
856
|
+
afterSanitizeAttributes: [],
|
|
857
|
+
afterSanitizeElements: [],
|
|
858
|
+
afterSanitizeShadowDOM: [],
|
|
859
|
+
beforeSanitizeAttributes: [],
|
|
860
|
+
beforeSanitizeElements: [],
|
|
861
|
+
beforeSanitizeShadowDOM: [],
|
|
862
|
+
uponSanitizeAttribute: [],
|
|
863
|
+
uponSanitizeElement: [],
|
|
864
|
+
uponSanitizeShadowNode: []
|
|
865
|
+
};
|
|
866
|
+
};
|
|
867
|
+
function createDOMPurify() {
|
|
868
|
+
let window = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : getGlobal();
|
|
869
|
+
const DOMPurify = (root) => createDOMPurify(root);
|
|
870
|
+
DOMPurify.version = "3.3.3";
|
|
871
|
+
DOMPurify.removed = [];
|
|
872
|
+
if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {
|
|
873
|
+
DOMPurify.isSupported = false;
|
|
874
|
+
return DOMPurify;
|
|
875
|
+
}
|
|
876
|
+
let { document } = window;
|
|
877
|
+
const originalDocument = document;
|
|
878
|
+
const currentScript = originalDocument.currentScript;
|
|
879
|
+
const { DocumentFragment, HTMLTemplateElement, Node, Element, NodeFilter, NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap, HTMLFormElement, DOMParser, trustedTypes } = window;
|
|
880
|
+
const ElementPrototype = Element.prototype;
|
|
881
|
+
const cloneNode = lookupGetter(ElementPrototype, "cloneNode");
|
|
882
|
+
const remove = lookupGetter(ElementPrototype, "remove");
|
|
883
|
+
const getNextSibling = lookupGetter(ElementPrototype, "nextSibling");
|
|
884
|
+
const getChildNodes = lookupGetter(ElementPrototype, "childNodes");
|
|
885
|
+
const getParentNode = lookupGetter(ElementPrototype, "parentNode");
|
|
886
|
+
if (typeof HTMLTemplateElement === "function") {
|
|
887
|
+
const template = document.createElement("template");
|
|
888
|
+
if (template.content && template.content.ownerDocument) document = template.content.ownerDocument;
|
|
889
|
+
}
|
|
890
|
+
let trustedTypesPolicy;
|
|
891
|
+
let emptyHTML = "";
|
|
892
|
+
const { implementation, createNodeIterator, createDocumentFragment, getElementsByTagName } = document;
|
|
893
|
+
const { importNode } = originalDocument;
|
|
894
|
+
let hooks = _createHooksMap();
|
|
895
|
+
/**
|
|
896
|
+
* Expose whether this browser supports running the full DOMPurify.
|
|
897
|
+
*/
|
|
898
|
+
DOMPurify.isSupported = typeof entries === "function" && typeof getParentNode === "function" && implementation && implementation.createHTMLDocument !== void 0;
|
|
899
|
+
const { MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR, DATA_ATTR, ARIA_ATTR, IS_SCRIPT_OR_DATA, ATTR_WHITESPACE, CUSTOM_ELEMENT } = EXPRESSIONS;
|
|
900
|
+
let { IS_ALLOWED_URI: IS_ALLOWED_URI$1 } = EXPRESSIONS;
|
|
901
|
+
/**
|
|
902
|
+
* We consider the elements and attributes below to be safe. Ideally
|
|
903
|
+
* don't add any new ones but feel free to remove unwanted ones.
|
|
904
|
+
*/
|
|
905
|
+
let ALLOWED_TAGS = null;
|
|
906
|
+
const DEFAULT_ALLOWED_TAGS = addToSet({}, [
|
|
907
|
+
...html$1,
|
|
908
|
+
...svg$1,
|
|
909
|
+
...svgFilters,
|
|
910
|
+
...mathMl$1,
|
|
911
|
+
...text
|
|
912
|
+
]);
|
|
913
|
+
let ALLOWED_ATTR = null;
|
|
914
|
+
const DEFAULT_ALLOWED_ATTR = addToSet({}, [
|
|
915
|
+
...html,
|
|
916
|
+
...svg,
|
|
917
|
+
...mathMl,
|
|
918
|
+
...xml
|
|
919
|
+
]);
|
|
920
|
+
let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {
|
|
921
|
+
tagNameCheck: {
|
|
922
|
+
writable: true,
|
|
923
|
+
configurable: false,
|
|
924
|
+
enumerable: true,
|
|
925
|
+
value: null
|
|
926
|
+
},
|
|
927
|
+
attributeNameCheck: {
|
|
928
|
+
writable: true,
|
|
929
|
+
configurable: false,
|
|
930
|
+
enumerable: true,
|
|
931
|
+
value: null
|
|
932
|
+
},
|
|
933
|
+
allowCustomizedBuiltInElements: {
|
|
934
|
+
writable: true,
|
|
935
|
+
configurable: false,
|
|
936
|
+
enumerable: true,
|
|
937
|
+
value: false
|
|
938
|
+
}
|
|
939
|
+
}));
|
|
940
|
+
let FORBID_TAGS = null;
|
|
941
|
+
let FORBID_ATTR = null;
|
|
942
|
+
const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {
|
|
943
|
+
tagCheck: {
|
|
944
|
+
writable: true,
|
|
945
|
+
configurable: false,
|
|
946
|
+
enumerable: true,
|
|
947
|
+
value: null
|
|
948
|
+
},
|
|
949
|
+
attributeCheck: {
|
|
950
|
+
writable: true,
|
|
951
|
+
configurable: false,
|
|
952
|
+
enumerable: true,
|
|
953
|
+
value: null
|
|
954
|
+
}
|
|
955
|
+
}));
|
|
956
|
+
let ALLOW_ARIA_ATTR = true;
|
|
957
|
+
let ALLOW_DATA_ATTR = true;
|
|
958
|
+
let ALLOW_UNKNOWN_PROTOCOLS = false;
|
|
959
|
+
let ALLOW_SELF_CLOSE_IN_ATTR = true;
|
|
960
|
+
let SAFE_FOR_TEMPLATES = false;
|
|
961
|
+
let SAFE_FOR_XML = true;
|
|
962
|
+
let WHOLE_DOCUMENT = false;
|
|
963
|
+
let SET_CONFIG = false;
|
|
964
|
+
let FORCE_BODY = false;
|
|
965
|
+
let RETURN_DOM = false;
|
|
966
|
+
let RETURN_DOM_FRAGMENT = false;
|
|
967
|
+
let RETURN_TRUSTED_TYPE = false;
|
|
968
|
+
let SANITIZE_DOM = true;
|
|
969
|
+
let SANITIZE_NAMED_PROPS = false;
|
|
970
|
+
const SANITIZE_NAMED_PROPS_PREFIX = "user-content-";
|
|
971
|
+
let KEEP_CONTENT = true;
|
|
972
|
+
let IN_PLACE = false;
|
|
973
|
+
let USE_PROFILES = {};
|
|
974
|
+
let FORBID_CONTENTS = null;
|
|
975
|
+
const DEFAULT_FORBID_CONTENTS = addToSet({}, [
|
|
976
|
+
"annotation-xml",
|
|
977
|
+
"audio",
|
|
978
|
+
"colgroup",
|
|
979
|
+
"desc",
|
|
980
|
+
"foreignobject",
|
|
981
|
+
"head",
|
|
982
|
+
"iframe",
|
|
983
|
+
"math",
|
|
984
|
+
"mi",
|
|
985
|
+
"mn",
|
|
986
|
+
"mo",
|
|
987
|
+
"ms",
|
|
988
|
+
"mtext",
|
|
989
|
+
"noembed",
|
|
990
|
+
"noframes",
|
|
991
|
+
"noscript",
|
|
992
|
+
"plaintext",
|
|
993
|
+
"script",
|
|
994
|
+
"style",
|
|
995
|
+
"svg",
|
|
996
|
+
"template",
|
|
997
|
+
"thead",
|
|
998
|
+
"title",
|
|
999
|
+
"video",
|
|
1000
|
+
"xmp"
|
|
1001
|
+
]);
|
|
1002
|
+
let DATA_URI_TAGS = null;
|
|
1003
|
+
const DEFAULT_DATA_URI_TAGS = addToSet({}, [
|
|
1004
|
+
"audio",
|
|
1005
|
+
"video",
|
|
1006
|
+
"img",
|
|
1007
|
+
"source",
|
|
1008
|
+
"image",
|
|
1009
|
+
"track"
|
|
1010
|
+
]);
|
|
1011
|
+
let URI_SAFE_ATTRIBUTES = null;
|
|
1012
|
+
const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, [
|
|
1013
|
+
"alt",
|
|
1014
|
+
"class",
|
|
1015
|
+
"for",
|
|
1016
|
+
"id",
|
|
1017
|
+
"label",
|
|
1018
|
+
"name",
|
|
1019
|
+
"pattern",
|
|
1020
|
+
"placeholder",
|
|
1021
|
+
"role",
|
|
1022
|
+
"summary",
|
|
1023
|
+
"title",
|
|
1024
|
+
"value",
|
|
1025
|
+
"style",
|
|
1026
|
+
"xmlns"
|
|
1027
|
+
]);
|
|
1028
|
+
const MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML";
|
|
1029
|
+
const SVG_NAMESPACE = "http://www.w3.org/2000/svg";
|
|
1030
|
+
const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
|
|
1031
|
+
let NAMESPACE = HTML_NAMESPACE;
|
|
1032
|
+
let IS_EMPTY_INPUT = false;
|
|
1033
|
+
let ALLOWED_NAMESPACES = null;
|
|
1034
|
+
const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [
|
|
1035
|
+
MATHML_NAMESPACE,
|
|
1036
|
+
SVG_NAMESPACE,
|
|
1037
|
+
HTML_NAMESPACE
|
|
1038
|
+
], stringToString);
|
|
1039
|
+
let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, [
|
|
1040
|
+
"mi",
|
|
1041
|
+
"mo",
|
|
1042
|
+
"mn",
|
|
1043
|
+
"ms",
|
|
1044
|
+
"mtext"
|
|
1045
|
+
]);
|
|
1046
|
+
let HTML_INTEGRATION_POINTS = addToSet({}, ["annotation-xml"]);
|
|
1047
|
+
const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, [
|
|
1048
|
+
"title",
|
|
1049
|
+
"style",
|
|
1050
|
+
"font",
|
|
1051
|
+
"a",
|
|
1052
|
+
"script"
|
|
1053
|
+
]);
|
|
1054
|
+
let PARSER_MEDIA_TYPE = null;
|
|
1055
|
+
const SUPPORTED_PARSER_MEDIA_TYPES = ["application/xhtml+xml", "text/html"];
|
|
1056
|
+
const DEFAULT_PARSER_MEDIA_TYPE = "text/html";
|
|
1057
|
+
let transformCaseFunc = null;
|
|
1058
|
+
let CONFIG = null;
|
|
1059
|
+
const formElement = document.createElement("form");
|
|
1060
|
+
const isRegexOrFunction = function isRegexOrFunction(testValue) {
|
|
1061
|
+
return testValue instanceof RegExp || testValue instanceof Function;
|
|
1062
|
+
};
|
|
1063
|
+
/**
|
|
1064
|
+
* _parseConfig
|
|
1065
|
+
*
|
|
1066
|
+
* @param cfg optional config literal
|
|
1067
|
+
*/
|
|
1068
|
+
const _parseConfig = function _parseConfig() {
|
|
1069
|
+
let cfg = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
1070
|
+
if (CONFIG && CONFIG === cfg) return;
|
|
1071
|
+
if (!cfg || typeof cfg !== "object") cfg = {};
|
|
1072
|
+
cfg = clone(cfg);
|
|
1073
|
+
PARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;
|
|
1074
|
+
transformCaseFunc = PARSER_MEDIA_TYPE === "application/xhtml+xml" ? stringToString : stringToLowerCase;
|
|
1075
|
+
ALLOWED_TAGS = objectHasOwnProperty(cfg, "ALLOWED_TAGS") ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;
|
|
1076
|
+
ALLOWED_ATTR = objectHasOwnProperty(cfg, "ALLOWED_ATTR") ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;
|
|
1077
|
+
ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, "ALLOWED_NAMESPACES") ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;
|
|
1078
|
+
URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, "ADD_URI_SAFE_ATTR") ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;
|
|
1079
|
+
DATA_URI_TAGS = objectHasOwnProperty(cfg, "ADD_DATA_URI_TAGS") ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;
|
|
1080
|
+
FORBID_CONTENTS = objectHasOwnProperty(cfg, "FORBID_CONTENTS") ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;
|
|
1081
|
+
FORBID_TAGS = objectHasOwnProperty(cfg, "FORBID_TAGS") ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});
|
|
1082
|
+
FORBID_ATTR = objectHasOwnProperty(cfg, "FORBID_ATTR") ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});
|
|
1083
|
+
USE_PROFILES = objectHasOwnProperty(cfg, "USE_PROFILES") ? cfg.USE_PROFILES : false;
|
|
1084
|
+
ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false;
|
|
1085
|
+
ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false;
|
|
1086
|
+
ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false;
|
|
1087
|
+
ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false;
|
|
1088
|
+
SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false;
|
|
1089
|
+
SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false;
|
|
1090
|
+
WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false;
|
|
1091
|
+
RETURN_DOM = cfg.RETURN_DOM || false;
|
|
1092
|
+
RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false;
|
|
1093
|
+
RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false;
|
|
1094
|
+
FORCE_BODY = cfg.FORCE_BODY || false;
|
|
1095
|
+
SANITIZE_DOM = cfg.SANITIZE_DOM !== false;
|
|
1096
|
+
SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false;
|
|
1097
|
+
KEEP_CONTENT = cfg.KEEP_CONTENT !== false;
|
|
1098
|
+
IN_PLACE = cfg.IN_PLACE || false;
|
|
1099
|
+
IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;
|
|
1100
|
+
NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;
|
|
1101
|
+
MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;
|
|
1102
|
+
HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;
|
|
1103
|
+
CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};
|
|
1104
|
+
if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;
|
|
1105
|
+
if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;
|
|
1106
|
+
if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === "boolean") CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;
|
|
1107
|
+
if (SAFE_FOR_TEMPLATES) ALLOW_DATA_ATTR = false;
|
|
1108
|
+
if (RETURN_DOM_FRAGMENT) RETURN_DOM = true;
|
|
1109
|
+
if (USE_PROFILES) {
|
|
1110
|
+
ALLOWED_TAGS = addToSet({}, text);
|
|
1111
|
+
ALLOWED_ATTR = create(null);
|
|
1112
|
+
if (USE_PROFILES.html === true) {
|
|
1113
|
+
addToSet(ALLOWED_TAGS, html$1);
|
|
1114
|
+
addToSet(ALLOWED_ATTR, html);
|
|
1115
|
+
}
|
|
1116
|
+
if (USE_PROFILES.svg === true) {
|
|
1117
|
+
addToSet(ALLOWED_TAGS, svg$1);
|
|
1118
|
+
addToSet(ALLOWED_ATTR, svg);
|
|
1119
|
+
addToSet(ALLOWED_ATTR, xml);
|
|
1120
|
+
}
|
|
1121
|
+
if (USE_PROFILES.svgFilters === true) {
|
|
1122
|
+
addToSet(ALLOWED_TAGS, svgFilters);
|
|
1123
|
+
addToSet(ALLOWED_ATTR, svg);
|
|
1124
|
+
addToSet(ALLOWED_ATTR, xml);
|
|
1125
|
+
}
|
|
1126
|
+
if (USE_PROFILES.mathMl === true) {
|
|
1127
|
+
addToSet(ALLOWED_TAGS, mathMl$1);
|
|
1128
|
+
addToSet(ALLOWED_ATTR, mathMl);
|
|
1129
|
+
addToSet(ALLOWED_ATTR, xml);
|
|
1130
|
+
}
|
|
1131
|
+
}
|
|
1132
|
+
if (!objectHasOwnProperty(cfg, "ADD_TAGS")) EXTRA_ELEMENT_HANDLING.tagCheck = null;
|
|
1133
|
+
if (!objectHasOwnProperty(cfg, "ADD_ATTR")) EXTRA_ELEMENT_HANDLING.attributeCheck = null;
|
|
1134
|
+
if (cfg.ADD_TAGS) if (typeof cfg.ADD_TAGS === "function") EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;
|
|
1135
|
+
else {
|
|
1136
|
+
if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) ALLOWED_TAGS = clone(ALLOWED_TAGS);
|
|
1137
|
+
addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);
|
|
1138
|
+
}
|
|
1139
|
+
if (cfg.ADD_ATTR) if (typeof cfg.ADD_ATTR === "function") EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;
|
|
1140
|
+
else {
|
|
1141
|
+
if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) ALLOWED_ATTR = clone(ALLOWED_ATTR);
|
|
1142
|
+
addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);
|
|
1143
|
+
}
|
|
1144
|
+
if (cfg.ADD_URI_SAFE_ATTR) addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);
|
|
1145
|
+
if (cfg.FORBID_CONTENTS) {
|
|
1146
|
+
if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) FORBID_CONTENTS = clone(FORBID_CONTENTS);
|
|
1147
|
+
addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);
|
|
1148
|
+
}
|
|
1149
|
+
if (cfg.ADD_FORBID_CONTENTS) {
|
|
1150
|
+
if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) FORBID_CONTENTS = clone(FORBID_CONTENTS);
|
|
1151
|
+
addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);
|
|
1152
|
+
}
|
|
1153
|
+
if (KEEP_CONTENT) ALLOWED_TAGS["#text"] = true;
|
|
1154
|
+
if (WHOLE_DOCUMENT) addToSet(ALLOWED_TAGS, [
|
|
1155
|
+
"html",
|
|
1156
|
+
"head",
|
|
1157
|
+
"body"
|
|
1158
|
+
]);
|
|
1159
|
+
if (ALLOWED_TAGS.table) {
|
|
1160
|
+
addToSet(ALLOWED_TAGS, ["tbody"]);
|
|
1161
|
+
delete FORBID_TAGS.tbody;
|
|
1162
|
+
}
|
|
1163
|
+
if (cfg.TRUSTED_TYPES_POLICY) {
|
|
1164
|
+
if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== "function") throw typeErrorCreate("TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.");
|
|
1165
|
+
if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== "function") throw typeErrorCreate("TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.");
|
|
1166
|
+
trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;
|
|
1167
|
+
emptyHTML = trustedTypesPolicy.createHTML("");
|
|
1168
|
+
} else {
|
|
1169
|
+
if (trustedTypesPolicy === void 0) trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);
|
|
1170
|
+
if (trustedTypesPolicy !== null && typeof emptyHTML === "string") emptyHTML = trustedTypesPolicy.createHTML("");
|
|
1171
|
+
}
|
|
1172
|
+
if (freeze) freeze(cfg);
|
|
1173
|
+
CONFIG = cfg;
|
|
1174
|
+
};
|
|
1175
|
+
const ALL_SVG_TAGS = addToSet({}, [
|
|
1176
|
+
...svg$1,
|
|
1177
|
+
...svgFilters,
|
|
1178
|
+
...svgDisallowed
|
|
1179
|
+
]);
|
|
1180
|
+
const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);
|
|
1181
|
+
/**
|
|
1182
|
+
* @param element a DOM element whose namespace is being checked
|
|
1183
|
+
* @returns Return false if the element has a
|
|
1184
|
+
* namespace that a spec-compliant parser would never
|
|
1185
|
+
* return. Return true otherwise.
|
|
1186
|
+
*/
|
|
1187
|
+
const _checkValidNamespace = function _checkValidNamespace(element) {
|
|
1188
|
+
let parent = getParentNode(element);
|
|
1189
|
+
if (!parent || !parent.tagName) parent = {
|
|
1190
|
+
namespaceURI: NAMESPACE,
|
|
1191
|
+
tagName: "template"
|
|
1192
|
+
};
|
|
1193
|
+
const tagName = stringToLowerCase(element.tagName);
|
|
1194
|
+
const parentTagName = stringToLowerCase(parent.tagName);
|
|
1195
|
+
if (!ALLOWED_NAMESPACES[element.namespaceURI]) return false;
|
|
1196
|
+
if (element.namespaceURI === SVG_NAMESPACE) {
|
|
1197
|
+
if (parent.namespaceURI === HTML_NAMESPACE) return tagName === "svg";
|
|
1198
|
+
if (parent.namespaceURI === MATHML_NAMESPACE) return tagName === "svg" && (parentTagName === "annotation-xml" || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);
|
|
1199
|
+
return Boolean(ALL_SVG_TAGS[tagName]);
|
|
1200
|
+
}
|
|
1201
|
+
if (element.namespaceURI === MATHML_NAMESPACE) {
|
|
1202
|
+
if (parent.namespaceURI === HTML_NAMESPACE) return tagName === "math";
|
|
1203
|
+
if (parent.namespaceURI === SVG_NAMESPACE) return tagName === "math" && HTML_INTEGRATION_POINTS[parentTagName];
|
|
1204
|
+
return Boolean(ALL_MATHML_TAGS[tagName]);
|
|
1205
|
+
}
|
|
1206
|
+
if (element.namespaceURI === HTML_NAMESPACE) {
|
|
1207
|
+
if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) return false;
|
|
1208
|
+
if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) return false;
|
|
1209
|
+
return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);
|
|
1210
|
+
}
|
|
1211
|
+
if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && ALLOWED_NAMESPACES[element.namespaceURI]) return true;
|
|
1212
|
+
return false;
|
|
1213
|
+
};
|
|
1214
|
+
/**
|
|
1215
|
+
* _forceRemove
|
|
1216
|
+
*
|
|
1217
|
+
* @param node a DOM node
|
|
1218
|
+
*/
|
|
1219
|
+
const _forceRemove = function _forceRemove(node) {
|
|
1220
|
+
arrayPush(DOMPurify.removed, { element: node });
|
|
1221
|
+
try {
|
|
1222
|
+
getParentNode(node).removeChild(node);
|
|
1223
|
+
} catch (_) {
|
|
1224
|
+
remove(node);
|
|
1225
|
+
}
|
|
1226
|
+
};
|
|
1227
|
+
/**
|
|
1228
|
+
* _removeAttribute
|
|
1229
|
+
*
|
|
1230
|
+
* @param name an Attribute name
|
|
1231
|
+
* @param element a DOM node
|
|
1232
|
+
*/
|
|
1233
|
+
const _removeAttribute = function _removeAttribute(name, element) {
|
|
1234
|
+
try {
|
|
1235
|
+
arrayPush(DOMPurify.removed, {
|
|
1236
|
+
attribute: element.getAttributeNode(name),
|
|
1237
|
+
from: element
|
|
1238
|
+
});
|
|
1239
|
+
} catch (_) {
|
|
1240
|
+
arrayPush(DOMPurify.removed, {
|
|
1241
|
+
attribute: null,
|
|
1242
|
+
from: element
|
|
1243
|
+
});
|
|
1244
|
+
}
|
|
1245
|
+
element.removeAttribute(name);
|
|
1246
|
+
if (name === "is") if (RETURN_DOM || RETURN_DOM_FRAGMENT) try {
|
|
1247
|
+
_forceRemove(element);
|
|
1248
|
+
} catch (_) {}
|
|
1249
|
+
else try {
|
|
1250
|
+
element.setAttribute(name, "");
|
|
1251
|
+
} catch (_) {}
|
|
1252
|
+
};
|
|
1253
|
+
/**
|
|
1254
|
+
* _initDocument
|
|
1255
|
+
*
|
|
1256
|
+
* @param dirty - a string of dirty markup
|
|
1257
|
+
* @return a DOM, filled with the dirty markup
|
|
1258
|
+
*/
|
|
1259
|
+
const _initDocument = function _initDocument(dirty) {
|
|
1260
|
+
let doc = null;
|
|
1261
|
+
let leadingWhitespace = null;
|
|
1262
|
+
if (FORCE_BODY) dirty = "<remove></remove>" + dirty;
|
|
1263
|
+
else {
|
|
1264
|
+
const matches = stringMatch(dirty, /^[\r\n\t ]+/);
|
|
1265
|
+
leadingWhitespace = matches && matches[0];
|
|
1266
|
+
}
|
|
1267
|
+
if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && NAMESPACE === HTML_NAMESPACE) dirty = "<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>" + dirty + "</body></html>";
|
|
1268
|
+
const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;
|
|
1269
|
+
if (NAMESPACE === HTML_NAMESPACE) try {
|
|
1270
|
+
doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);
|
|
1271
|
+
} catch (_) {}
|
|
1272
|
+
if (!doc || !doc.documentElement) {
|
|
1273
|
+
doc = implementation.createDocument(NAMESPACE, "template", null);
|
|
1274
|
+
try {
|
|
1275
|
+
doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;
|
|
1276
|
+
} catch (_) {}
|
|
1277
|
+
}
|
|
1278
|
+
const body = doc.body || doc.documentElement;
|
|
1279
|
+
if (dirty && leadingWhitespace) body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);
|
|
1280
|
+
if (NAMESPACE === HTML_NAMESPACE) return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? "html" : "body")[0];
|
|
1281
|
+
return WHOLE_DOCUMENT ? doc.documentElement : body;
|
|
1282
|
+
};
|
|
1283
|
+
/**
|
|
1284
|
+
* Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.
|
|
1285
|
+
*
|
|
1286
|
+
* @param root The root element or node to start traversing on.
|
|
1287
|
+
* @return The created NodeIterator
|
|
1288
|
+
*/
|
|
1289
|
+
const _createNodeIterator = function _createNodeIterator(root) {
|
|
1290
|
+
return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);
|
|
1291
|
+
};
|
|
1292
|
+
/**
|
|
1293
|
+
* _isClobbered
|
|
1294
|
+
*
|
|
1295
|
+
* @param element element to check for clobbering attacks
|
|
1296
|
+
* @return true if clobbered, false if safe
|
|
1297
|
+
*/
|
|
1298
|
+
const _isClobbered = function _isClobbered(element) {
|
|
1299
|
+
return element instanceof HTMLFormElement && (typeof element.nodeName !== "string" || typeof element.textContent !== "string" || typeof element.removeChild !== "function" || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== "function" || typeof element.setAttribute !== "function" || typeof element.namespaceURI !== "string" || typeof element.insertBefore !== "function" || typeof element.hasChildNodes !== "function");
|
|
1300
|
+
};
|
|
1301
|
+
/**
|
|
1302
|
+
* Checks whether the given object is a DOM node.
|
|
1303
|
+
*
|
|
1304
|
+
* @param value object to check whether it's a DOM node
|
|
1305
|
+
* @return true is object is a DOM node
|
|
1306
|
+
*/
|
|
1307
|
+
const _isNode = function _isNode(value) {
|
|
1308
|
+
return typeof Node === "function" && value instanceof Node;
|
|
1309
|
+
};
|
|
1310
|
+
function _executeHooks(hooks, currentNode, data) {
|
|
1311
|
+
arrayForEach(hooks, (hook) => {
|
|
1312
|
+
hook.call(DOMPurify, currentNode, data, CONFIG);
|
|
1313
|
+
});
|
|
1314
|
+
}
|
|
1315
|
+
/**
|
|
1316
|
+
* _sanitizeElements
|
|
1317
|
+
*
|
|
1318
|
+
* @protect nodeName
|
|
1319
|
+
* @protect textContent
|
|
1320
|
+
* @protect removeChild
|
|
1321
|
+
* @param currentNode to check for permission to exist
|
|
1322
|
+
* @return true if node was killed, false if left alive
|
|
1323
|
+
*/
|
|
1324
|
+
const _sanitizeElements = function _sanitizeElements(currentNode) {
|
|
1325
|
+
let content = null;
|
|
1326
|
+
_executeHooks(hooks.beforeSanitizeElements, currentNode, null);
|
|
1327
|
+
if (_isClobbered(currentNode)) {
|
|
1328
|
+
_forceRemove(currentNode);
|
|
1329
|
+
return true;
|
|
1330
|
+
}
|
|
1331
|
+
const tagName = transformCaseFunc(currentNode.nodeName);
|
|
1332
|
+
_executeHooks(hooks.uponSanitizeElement, currentNode, {
|
|
1333
|
+
tagName,
|
|
1334
|
+
allowedTags: ALLOWED_TAGS
|
|
1335
|
+
});
|
|
1336
|
+
if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\w!]/g, currentNode.textContent)) {
|
|
1337
|
+
_forceRemove(currentNode);
|
|
1338
|
+
return true;
|
|
1339
|
+
}
|
|
1340
|
+
if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {
|
|
1341
|
+
_forceRemove(currentNode);
|
|
1342
|
+
return true;
|
|
1343
|
+
}
|
|
1344
|
+
if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\w]/g, currentNode.data)) {
|
|
1345
|
+
_forceRemove(currentNode);
|
|
1346
|
+
return true;
|
|
1347
|
+
}
|
|
1348
|
+
if (!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])) {
|
|
1349
|
+
if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {
|
|
1350
|
+
if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) return false;
|
|
1351
|
+
if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) return false;
|
|
1352
|
+
}
|
|
1353
|
+
if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {
|
|
1354
|
+
const parentNode = getParentNode(currentNode) || currentNode.parentNode;
|
|
1355
|
+
const childNodes = getChildNodes(currentNode) || currentNode.childNodes;
|
|
1356
|
+
if (childNodes && parentNode) {
|
|
1357
|
+
const childCount = childNodes.length;
|
|
1358
|
+
for (let i = childCount - 1; i >= 0; --i) {
|
|
1359
|
+
const childClone = cloneNode(childNodes[i], true);
|
|
1360
|
+
childClone.__removalCount = (currentNode.__removalCount || 0) + 1;
|
|
1361
|
+
parentNode.insertBefore(childClone, getNextSibling(currentNode));
|
|
1362
|
+
}
|
|
1363
|
+
}
|
|
1364
|
+
}
|
|
1365
|
+
_forceRemove(currentNode);
|
|
1366
|
+
return true;
|
|
1367
|
+
}
|
|
1368
|
+
if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {
|
|
1369
|
+
_forceRemove(currentNode);
|
|
1370
|
+
return true;
|
|
1371
|
+
}
|
|
1372
|
+
if ((tagName === "noscript" || tagName === "noembed" || tagName === "noframes") && regExpTest(/<\/no(script|embed|frames)/i, currentNode.innerHTML)) {
|
|
1373
|
+
_forceRemove(currentNode);
|
|
1374
|
+
return true;
|
|
1375
|
+
}
|
|
1376
|
+
if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {
|
|
1377
|
+
content = currentNode.textContent;
|
|
1378
|
+
arrayForEach([
|
|
1379
|
+
MUSTACHE_EXPR,
|
|
1380
|
+
ERB_EXPR,
|
|
1381
|
+
TMPLIT_EXPR
|
|
1382
|
+
], (expr) => {
|
|
1383
|
+
content = stringReplace(content, expr, " ");
|
|
1384
|
+
});
|
|
1385
|
+
if (currentNode.textContent !== content) {
|
|
1386
|
+
arrayPush(DOMPurify.removed, { element: currentNode.cloneNode() });
|
|
1387
|
+
currentNode.textContent = content;
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
_executeHooks(hooks.afterSanitizeElements, currentNode, null);
|
|
1391
|
+
return false;
|
|
1392
|
+
};
|
|
1393
|
+
/**
|
|
1394
|
+
* _isValidAttribute
|
|
1395
|
+
*
|
|
1396
|
+
* @param lcTag Lowercase tag name of containing element.
|
|
1397
|
+
* @param lcName Lowercase attribute name.
|
|
1398
|
+
* @param value Attribute value.
|
|
1399
|
+
* @return Returns true if `value` is valid, otherwise false.
|
|
1400
|
+
*/
|
|
1401
|
+
const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {
|
|
1402
|
+
if (FORBID_ATTR[lcName]) return false;
|
|
1403
|
+
if (SANITIZE_DOM && (lcName === "id" || lcName === "name") && (value in document || value in formElement)) return false;
|
|
1404
|
+
if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName));
|
|
1405
|
+
else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName));
|
|
1406
|
+
else if (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag));
|
|
1407
|
+
else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) if (_isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)) || lcName === "is" && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value)));
|
|
1408
|
+
else return false;
|
|
1409
|
+
else if (URI_SAFE_ATTRIBUTES[lcName]);
|
|
1410
|
+
else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, "")));
|
|
1411
|
+
else if ((lcName === "src" || lcName === "xlink:href" || lcName === "href") && lcTag !== "script" && stringIndexOf(value, "data:") === 0 && DATA_URI_TAGS[lcTag]);
|
|
1412
|
+
else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, "")));
|
|
1413
|
+
else if (value) return false;
|
|
1414
|
+
return true;
|
|
1415
|
+
};
|
|
1416
|
+
/**
|
|
1417
|
+
* _isBasicCustomElement
|
|
1418
|
+
* checks if at least one dash is included in tagName, and it's not the first char
|
|
1419
|
+
* for more sophisticated checking see https://github.com/sindresorhus/validate-element-name
|
|
1420
|
+
*
|
|
1421
|
+
* @param tagName name of the tag of the node to sanitize
|
|
1422
|
+
* @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.
|
|
1423
|
+
*/
|
|
1424
|
+
const _isBasicCustomElement = function _isBasicCustomElement(tagName) {
|
|
1425
|
+
return tagName !== "annotation-xml" && stringMatch(tagName, CUSTOM_ELEMENT);
|
|
1426
|
+
};
|
|
1427
|
+
/**
|
|
1428
|
+
* _sanitizeAttributes
|
|
1429
|
+
*
|
|
1430
|
+
* @protect attributes
|
|
1431
|
+
* @protect nodeName
|
|
1432
|
+
* @protect removeAttribute
|
|
1433
|
+
* @protect setAttribute
|
|
1434
|
+
*
|
|
1435
|
+
* @param currentNode to sanitize
|
|
1436
|
+
*/
|
|
1437
|
+
const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {
|
|
1438
|
+
_executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);
|
|
1439
|
+
const { attributes } = currentNode;
|
|
1440
|
+
if (!attributes || _isClobbered(currentNode)) return;
|
|
1441
|
+
const hookEvent = {
|
|
1442
|
+
attrName: "",
|
|
1443
|
+
attrValue: "",
|
|
1444
|
+
keepAttr: true,
|
|
1445
|
+
allowedAttributes: ALLOWED_ATTR,
|
|
1446
|
+
forceKeepAttr: void 0
|
|
1447
|
+
};
|
|
1448
|
+
let l = attributes.length;
|
|
1449
|
+
while (l--) {
|
|
1450
|
+
const { name, namespaceURI, value: attrValue } = attributes[l];
|
|
1451
|
+
const lcName = transformCaseFunc(name);
|
|
1452
|
+
const initValue = attrValue;
|
|
1453
|
+
let value = name === "value" ? initValue : stringTrim(initValue);
|
|
1454
|
+
hookEvent.attrName = lcName;
|
|
1455
|
+
hookEvent.attrValue = value;
|
|
1456
|
+
hookEvent.keepAttr = true;
|
|
1457
|
+
hookEvent.forceKeepAttr = void 0;
|
|
1458
|
+
_executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);
|
|
1459
|
+
value = hookEvent.attrValue;
|
|
1460
|
+
if (SANITIZE_NAMED_PROPS && (lcName === "id" || lcName === "name")) {
|
|
1461
|
+
_removeAttribute(name, currentNode);
|
|
1462
|
+
value = SANITIZE_NAMED_PROPS_PREFIX + value;
|
|
1463
|
+
}
|
|
1464
|
+
if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i, value)) {
|
|
1465
|
+
_removeAttribute(name, currentNode);
|
|
1466
|
+
continue;
|
|
1467
|
+
}
|
|
1468
|
+
if (lcName === "attributename" && stringMatch(value, "href")) {
|
|
1469
|
+
_removeAttribute(name, currentNode);
|
|
1470
|
+
continue;
|
|
1471
|
+
}
|
|
1472
|
+
if (hookEvent.forceKeepAttr) continue;
|
|
1473
|
+
if (!hookEvent.keepAttr) {
|
|
1474
|
+
_removeAttribute(name, currentNode);
|
|
1475
|
+
continue;
|
|
1476
|
+
}
|
|
1477
|
+
if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\/>/i, value)) {
|
|
1478
|
+
_removeAttribute(name, currentNode);
|
|
1479
|
+
continue;
|
|
1480
|
+
}
|
|
1481
|
+
if (SAFE_FOR_TEMPLATES) arrayForEach([
|
|
1482
|
+
MUSTACHE_EXPR,
|
|
1483
|
+
ERB_EXPR,
|
|
1484
|
+
TMPLIT_EXPR
|
|
1485
|
+
], (expr) => {
|
|
1486
|
+
value = stringReplace(value, expr, " ");
|
|
1487
|
+
});
|
|
1488
|
+
const lcTag = transformCaseFunc(currentNode.nodeName);
|
|
1489
|
+
if (!_isValidAttribute(lcTag, lcName, value)) {
|
|
1490
|
+
_removeAttribute(name, currentNode);
|
|
1491
|
+
continue;
|
|
1492
|
+
}
|
|
1493
|
+
if (trustedTypesPolicy && typeof trustedTypes === "object" && typeof trustedTypes.getAttributeType === "function") if (namespaceURI);
|
|
1494
|
+
else switch (trustedTypes.getAttributeType(lcTag, lcName)) {
|
|
1495
|
+
case "TrustedHTML":
|
|
1496
|
+
value = trustedTypesPolicy.createHTML(value);
|
|
1497
|
+
break;
|
|
1498
|
+
case "TrustedScriptURL":
|
|
1499
|
+
value = trustedTypesPolicy.createScriptURL(value);
|
|
1500
|
+
break;
|
|
1501
|
+
}
|
|
1502
|
+
if (value !== initValue) try {
|
|
1503
|
+
if (namespaceURI) currentNode.setAttributeNS(namespaceURI, name, value);
|
|
1504
|
+
else currentNode.setAttribute(name, value);
|
|
1505
|
+
if (_isClobbered(currentNode)) _forceRemove(currentNode);
|
|
1506
|
+
else arrayPop(DOMPurify.removed);
|
|
1507
|
+
} catch (_) {
|
|
1508
|
+
_removeAttribute(name, currentNode);
|
|
1509
|
+
}
|
|
1510
|
+
}
|
|
1511
|
+
_executeHooks(hooks.afterSanitizeAttributes, currentNode, null);
|
|
1512
|
+
};
|
|
1513
|
+
/**
|
|
1514
|
+
* _sanitizeShadowDOM
|
|
1515
|
+
*
|
|
1516
|
+
* @param fragment to iterate over recursively
|
|
1517
|
+
*/
|
|
1518
|
+
const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {
|
|
1519
|
+
let shadowNode = null;
|
|
1520
|
+
const shadowIterator = _createNodeIterator(fragment);
|
|
1521
|
+
_executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);
|
|
1522
|
+
while (shadowNode = shadowIterator.nextNode()) {
|
|
1523
|
+
_executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);
|
|
1524
|
+
_sanitizeElements(shadowNode);
|
|
1525
|
+
_sanitizeAttributes(shadowNode);
|
|
1526
|
+
if (shadowNode.content instanceof DocumentFragment) _sanitizeShadowDOM(shadowNode.content);
|
|
1527
|
+
}
|
|
1528
|
+
_executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);
|
|
1529
|
+
};
|
|
1530
|
+
DOMPurify.sanitize = function(dirty) {
|
|
1531
|
+
let cfg = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
|
|
1532
|
+
let body = null;
|
|
1533
|
+
let importedNode = null;
|
|
1534
|
+
let currentNode = null;
|
|
1535
|
+
let returnNode = null;
|
|
1536
|
+
IS_EMPTY_INPUT = !dirty;
|
|
1537
|
+
if (IS_EMPTY_INPUT) dirty = "<!-->";
|
|
1538
|
+
if (typeof dirty !== "string" && !_isNode(dirty)) if (typeof dirty.toString === "function") {
|
|
1539
|
+
dirty = dirty.toString();
|
|
1540
|
+
if (typeof dirty !== "string") throw typeErrorCreate("dirty is not a string, aborting");
|
|
1541
|
+
} else throw typeErrorCreate("toString is not a function");
|
|
1542
|
+
if (!DOMPurify.isSupported) return dirty;
|
|
1543
|
+
if (!SET_CONFIG) _parseConfig(cfg);
|
|
1544
|
+
DOMPurify.removed = [];
|
|
1545
|
+
if (typeof dirty === "string") IN_PLACE = false;
|
|
1546
|
+
if (IN_PLACE) {
|
|
1547
|
+
if (dirty.nodeName) {
|
|
1548
|
+
const tagName = transformCaseFunc(dirty.nodeName);
|
|
1549
|
+
if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) throw typeErrorCreate("root node is forbidden and cannot be sanitized in-place");
|
|
1550
|
+
}
|
|
1551
|
+
} else if (dirty instanceof Node) {
|
|
1552
|
+
body = _initDocument("<!---->");
|
|
1553
|
+
importedNode = body.ownerDocument.importNode(dirty, true);
|
|
1554
|
+
if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === "BODY") body = importedNode;
|
|
1555
|
+
else if (importedNode.nodeName === "HTML") body = importedNode;
|
|
1556
|
+
else body.appendChild(importedNode);
|
|
1557
|
+
} else {
|
|
1558
|
+
if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && dirty.indexOf("<") === -1) return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;
|
|
1559
|
+
body = _initDocument(dirty);
|
|
1560
|
+
if (!body) return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : "";
|
|
1561
|
+
}
|
|
1562
|
+
if (body && FORCE_BODY) _forceRemove(body.firstChild);
|
|
1563
|
+
const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);
|
|
1564
|
+
while (currentNode = nodeIterator.nextNode()) {
|
|
1565
|
+
_sanitizeElements(currentNode);
|
|
1566
|
+
_sanitizeAttributes(currentNode);
|
|
1567
|
+
if (currentNode.content instanceof DocumentFragment) _sanitizeShadowDOM(currentNode.content);
|
|
1568
|
+
}
|
|
1569
|
+
if (IN_PLACE) return dirty;
|
|
1570
|
+
if (RETURN_DOM) {
|
|
1571
|
+
if (RETURN_DOM_FRAGMENT) {
|
|
1572
|
+
returnNode = createDocumentFragment.call(body.ownerDocument);
|
|
1573
|
+
while (body.firstChild) returnNode.appendChild(body.firstChild);
|
|
1574
|
+
} else returnNode = body;
|
|
1575
|
+
if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) returnNode = importNode.call(originalDocument, returnNode, true);
|
|
1576
|
+
return returnNode;
|
|
1577
|
+
}
|
|
1578
|
+
let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
|
|
1579
|
+
if (WHOLE_DOCUMENT && ALLOWED_TAGS["!doctype"] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) serializedHTML = "<!DOCTYPE " + body.ownerDocument.doctype.name + ">\n" + serializedHTML;
|
|
1580
|
+
if (SAFE_FOR_TEMPLATES) arrayForEach([
|
|
1581
|
+
MUSTACHE_EXPR,
|
|
1582
|
+
ERB_EXPR,
|
|
1583
|
+
TMPLIT_EXPR
|
|
1584
|
+
], (expr) => {
|
|
1585
|
+
serializedHTML = stringReplace(serializedHTML, expr, " ");
|
|
1586
|
+
});
|
|
1587
|
+
return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;
|
|
1588
|
+
};
|
|
1589
|
+
DOMPurify.setConfig = function() {
|
|
1590
|
+
_parseConfig(arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {});
|
|
1591
|
+
SET_CONFIG = true;
|
|
1592
|
+
};
|
|
1593
|
+
DOMPurify.clearConfig = function() {
|
|
1594
|
+
CONFIG = null;
|
|
1595
|
+
SET_CONFIG = false;
|
|
1596
|
+
};
|
|
1597
|
+
DOMPurify.isValidAttribute = function(tag, attr, value) {
|
|
1598
|
+
if (!CONFIG) _parseConfig({});
|
|
1599
|
+
return _isValidAttribute(transformCaseFunc(tag), transformCaseFunc(attr), value);
|
|
1600
|
+
};
|
|
1601
|
+
DOMPurify.addHook = function(entryPoint, hookFunction) {
|
|
1602
|
+
if (typeof hookFunction !== "function") return;
|
|
1603
|
+
arrayPush(hooks[entryPoint], hookFunction);
|
|
1604
|
+
};
|
|
1605
|
+
DOMPurify.removeHook = function(entryPoint, hookFunction) {
|
|
1606
|
+
if (hookFunction !== void 0) {
|
|
1607
|
+
const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);
|
|
1608
|
+
return index === -1 ? void 0 : arraySplice(hooks[entryPoint], index, 1)[0];
|
|
1609
|
+
}
|
|
1610
|
+
return arrayPop(hooks[entryPoint]);
|
|
1611
|
+
};
|
|
1612
|
+
DOMPurify.removeHooks = function(entryPoint) {
|
|
1613
|
+
hooks[entryPoint] = [];
|
|
1614
|
+
};
|
|
1615
|
+
DOMPurify.removeAllHooks = function() {
|
|
1616
|
+
hooks = _createHooksMap();
|
|
1617
|
+
};
|
|
1618
|
+
return DOMPurify;
|
|
1619
|
+
}
|
|
1620
|
+
var purify$1 = createDOMPurify();
|
|
1621
|
+
//#endregion
|
|
1622
|
+
//#region src/shared/assets/sanitizeSvg.ts
|
|
1623
|
+
var SVG_SANITIZE_CONFIG = {
|
|
1624
|
+
USE_PROFILES: {
|
|
1625
|
+
svg: true,
|
|
1626
|
+
svgFilters: true
|
|
1627
|
+
},
|
|
1628
|
+
FORBID_TAGS: ["foreignObject"],
|
|
1629
|
+
ADD_TAGS: ["use"]
|
|
1630
|
+
};
|
|
1631
|
+
var purify = purify$1(window);
|
|
1632
|
+
var strippedHref = false;
|
|
1633
|
+
purify.addHook("uponSanitizeAttribute", (_node, data) => {
|
|
1634
|
+
if ((data.attrName === "href" || data.attrName === "xlink:href") && !String(data.attrValue).startsWith("#")) {
|
|
1635
|
+
data.keepAttr = false;
|
|
1636
|
+
strippedHref = true;
|
|
1637
|
+
}
|
|
1638
|
+
});
|
|
1639
|
+
/**
|
|
1640
|
+
* Sanitizes untrusted SVG markup for safe inline injection. Strips scripts,
|
|
1641
|
+
* event handlers, `<foreignObject>`, and external `href` / `xlink:href` (while
|
|
1642
|
+
* keeping in-document `#fragment` references SVGs rely on for gradients and
|
|
1643
|
+
* filters). An all-stripped payload yields `markup: ''`; the caller treats
|
|
1644
|
+
* both that and `strippedHref` as a failed override and falls back to the
|
|
1645
|
+
* built-in default.
|
|
1646
|
+
*/
|
|
1647
|
+
function sanitizeSvg(raw) {
|
|
1648
|
+
strippedHref = false;
|
|
1649
|
+
return {
|
|
1650
|
+
markup: purify.sanitize(raw, SVG_SANITIZE_CONFIG),
|
|
1651
|
+
strippedHref
|
|
1652
|
+
};
|
|
1653
|
+
}
|
|
1654
|
+
//#endregion
|
|
1655
|
+
//#region src/shared/assets/instanceOverrides.ts
|
|
1656
|
+
var InstanceOverridesContext = Q({});
|
|
1657
|
+
var InstanceOverridesProvider = InstanceOverridesContext.Provider;
|
|
1658
|
+
function useInstanceOverrides() {
|
|
1659
|
+
return x(InstanceOverridesContext);
|
|
1660
|
+
}
|
|
1661
|
+
//#endregion
|
|
1662
|
+
//#region src/shared/assets/assetRegistry.ts
|
|
1663
|
+
var defaultExport = (module) => module.default;
|
|
1664
|
+
var decorative = { ariaHidden: true };
|
|
1665
|
+
var assetRegistry = {
|
|
1666
|
+
"faceMatch.success": { a11y: decorative },
|
|
1667
|
+
"faceMatch.fail": { a11y: decorative },
|
|
1668
|
+
"documentCapture.tutorial": { a11y: decorative },
|
|
1669
|
+
"id.uploadScreen": { a11y: decorative },
|
|
1670
|
+
"id.ageVerification.dob": { a11y: decorative },
|
|
1671
|
+
"id.ageVerification.scan": { a11y: decorative },
|
|
1672
|
+
"id.ageVerification.privacy": { a11y: decorative },
|
|
1673
|
+
"videoSelfie.success": { a11y: decorative },
|
|
1674
|
+
"videoSelfie.fail": { a11y: decorative },
|
|
1675
|
+
"videoSelfie.tutorial.permission": { a11y: decorative },
|
|
1676
|
+
"videoSelfie.tutorial.selfie": { a11y: decorative },
|
|
1677
|
+
"videoSelfie.tutorial.frontId": { a11y: decorative },
|
|
1678
|
+
"videoSelfie.tutorial.backId": { a11y: decorative },
|
|
1679
|
+
"videoSelfie.tutorial.poa": { a11y: decorative },
|
|
1680
|
+
"videoSelfie.tutorial.questions": { a11y: decorative },
|
|
1681
|
+
"videoSelfie.tutorial.speech": { a11y: decorative },
|
|
1682
|
+
"loader.spinner": { a11y: decorative }
|
|
1683
|
+
};
|
|
1684
|
+
var animationRegistry = {
|
|
1685
|
+
"id.tutorial.front": {
|
|
1686
|
+
default: () => import("./id-tutorial-BOOsXlAJ.js").then(defaultExport),
|
|
1687
|
+
a11y: decorative
|
|
1688
|
+
},
|
|
1689
|
+
"id.tutorial.back": {
|
|
1690
|
+
default: () => import("./back-tutorial-BHyRHyET.js").then(defaultExport),
|
|
1691
|
+
a11y: decorative
|
|
1692
|
+
},
|
|
1693
|
+
"id.tutorial.passport": {
|
|
1694
|
+
default: () => import("./passport-tutorial-CeSup6m9.js").then(defaultExport),
|
|
1695
|
+
a11y: decorative
|
|
1696
|
+
},
|
|
1697
|
+
"id.flip": {
|
|
1698
|
+
default: () => import("./flip-animation-CvN8FLNc.js").then(defaultExport),
|
|
1699
|
+
a11y: decorative
|
|
1700
|
+
},
|
|
1701
|
+
"id.processing": {
|
|
1702
|
+
default: {
|
|
1703
|
+
horizontal: () => import("./id-laser-h-BaUHzX-d.js").then(defaultExport),
|
|
1704
|
+
vertical: () => import("./id-laser-v-Dv9yEYJE.js").then(defaultExport)
|
|
1705
|
+
},
|
|
1706
|
+
a11y: decorative
|
|
1707
|
+
},
|
|
1708
|
+
"selfie.tutorial": {
|
|
1709
|
+
default: () => import("./selfieTutorial-CYa8bq6B.js").then(defaultExport),
|
|
1710
|
+
a11y: decorative
|
|
1711
|
+
},
|
|
1712
|
+
"loader.spinner": {
|
|
1713
|
+
default: null,
|
|
1714
|
+
a11y: decorative
|
|
1715
|
+
}
|
|
1716
|
+
};
|
|
1717
|
+
//#endregion
|
|
1718
|
+
//#region src/shared/assets/resolveAsset.ts
|
|
1719
|
+
/**
|
|
1720
|
+
* Whether a resolved value represents an active override, as opposed to no
|
|
1721
|
+
* override at all (`type === 'default'`).
|
|
1722
|
+
*/
|
|
1723
|
+
function isActiveOverride(resolved) {
|
|
1724
|
+
return resolved !== null && resolved.type !== "default";
|
|
1725
|
+
}
|
|
1726
|
+
function warnUnknownKey(key) {
|
|
1727
|
+
`${key}`;
|
|
1728
|
+
}
|
|
1729
|
+
function isValidUrl(url) {
|
|
1730
|
+
const SCHEME_PREFIX = /^[a-zA-Z][a-zA-Z0-9+.-]*:/;
|
|
1731
|
+
if (url === "" || /\s/.test(url)) return false;
|
|
1732
|
+
if (!SCHEME_PREFIX.test(url)) return true;
|
|
1733
|
+
try {
|
|
1734
|
+
new URL(url);
|
|
1735
|
+
return true;
|
|
1736
|
+
} catch {
|
|
1737
|
+
return false;
|
|
1738
|
+
}
|
|
1739
|
+
}
|
|
1740
|
+
function normalizeAssetOverride(override) {
|
|
1741
|
+
if (override === void 0) return null;
|
|
1742
|
+
if (typeof override === "string") {
|
|
1743
|
+
const value = override.trim();
|
|
1744
|
+
if (value === "") return null;
|
|
1745
|
+
if (value.startsWith("<")) return {
|
|
1746
|
+
type: "override-raw",
|
|
1747
|
+
raw: value
|
|
1748
|
+
};
|
|
1749
|
+
if (!isValidUrl(value)) return null;
|
|
1750
|
+
return {
|
|
1751
|
+
type: "override-url",
|
|
1752
|
+
url: value
|
|
1753
|
+
};
|
|
1754
|
+
}
|
|
1755
|
+
if ("svg" in override) return {
|
|
1756
|
+
type: "override-component",
|
|
1757
|
+
component: override.svg
|
|
1758
|
+
};
|
|
1759
|
+
if ("raw" in override) {
|
|
1760
|
+
const raw = override.raw.trim();
|
|
1761
|
+
return raw === "" ? null : {
|
|
1762
|
+
type: "override-raw",
|
|
1763
|
+
raw
|
|
1764
|
+
};
|
|
1765
|
+
}
|
|
1766
|
+
if ("url" in override) {
|
|
1767
|
+
const url = override.url.trim();
|
|
1768
|
+
if (url === "") return null;
|
|
1769
|
+
if (!isValidUrl(url)) return null;
|
|
1770
|
+
return {
|
|
1771
|
+
type: "override-url",
|
|
1772
|
+
url
|
|
1773
|
+
};
|
|
1774
|
+
}
|
|
1775
|
+
return null;
|
|
1776
|
+
}
|
|
1777
|
+
function normalizeAnimationOverride(override) {
|
|
1778
|
+
if (override === void 0) return null;
|
|
1779
|
+
if ("url" in override) {
|
|
1780
|
+
const url = override.url.trim();
|
|
1781
|
+
if (url === "") return null;
|
|
1782
|
+
if (!isValidUrl(url)) return null;
|
|
1783
|
+
return {
|
|
1784
|
+
type: "override-url",
|
|
1785
|
+
url
|
|
1786
|
+
};
|
|
1787
|
+
}
|
|
1788
|
+
if ("animationData" in override) return {
|
|
1789
|
+
type: "override-data",
|
|
1790
|
+
animationData: override.animationData
|
|
1791
|
+
};
|
|
1792
|
+
return {
|
|
1793
|
+
type: "override-data",
|
|
1794
|
+
animationData: override
|
|
1795
|
+
};
|
|
1796
|
+
}
|
|
1797
|
+
function resolveAsset(key, scopes = {}) {
|
|
1798
|
+
scopes.instance;
|
|
1799
|
+
scopes.global;
|
|
1800
|
+
const entry = assetRegistry[key];
|
|
1801
|
+
if (entry === void 0) {
|
|
1802
|
+
warnUnknownKey(key);
|
|
1803
|
+
return null;
|
|
1804
|
+
}
|
|
1805
|
+
const override = normalizeAssetOverride(scopes.instance?.[key]) ?? normalizeAssetOverride(scopes.global?.[key]);
|
|
1806
|
+
if (override !== null) return {
|
|
1807
|
+
...override,
|
|
1808
|
+
a11y: entry.a11y
|
|
1809
|
+
};
|
|
1810
|
+
return {
|
|
1811
|
+
type: "default",
|
|
1812
|
+
a11y: entry.a11y
|
|
1813
|
+
};
|
|
1814
|
+
}
|
|
1815
|
+
function resolveAnimation(key, scopes = {}) {
|
|
1816
|
+
scopes.instance;
|
|
1817
|
+
scopes.global;
|
|
1818
|
+
const entry = animationRegistry[key];
|
|
1819
|
+
if (entry === void 0) {
|
|
1820
|
+
warnUnknownKey(key);
|
|
1821
|
+
return null;
|
|
1822
|
+
}
|
|
1823
|
+
const override = normalizeAnimationOverride(scopes.instance?.[key]) ?? normalizeAnimationOverride(scopes.global?.[key]);
|
|
1824
|
+
if (override !== null) return {
|
|
1825
|
+
...override,
|
|
1826
|
+
a11y: entry.a11y
|
|
1827
|
+
};
|
|
1828
|
+
return {
|
|
1829
|
+
type: "default",
|
|
1830
|
+
default: entry.default,
|
|
1831
|
+
a11y: entry.a11y
|
|
1832
|
+
};
|
|
1833
|
+
}
|
|
1834
|
+
//#endregion
|
|
1835
|
+
//#region src/shared/assets/useAsset.ts
|
|
1836
|
+
function useAsset(key) {
|
|
1837
|
+
const instance = useInstanceOverrides();
|
|
1838
|
+
const uiConfig = useUiConfig();
|
|
1839
|
+
return T(() => {
|
|
1840
|
+
return resolveAsset(key, {
|
|
1841
|
+
instance: instance.assets,
|
|
1842
|
+
global: uiConfig.assets
|
|
1843
|
+
});
|
|
1844
|
+
}, [
|
|
1845
|
+
key,
|
|
1846
|
+
instance.assets,
|
|
1847
|
+
uiConfig.assets
|
|
1848
|
+
]);
|
|
1849
|
+
}
|
|
1850
|
+
function useAnimation(key) {
|
|
1851
|
+
const instance = useInstanceOverrides();
|
|
1852
|
+
const uiConfig = useUiConfig();
|
|
1853
|
+
return T(() => {
|
|
1854
|
+
return resolveAnimation(key, {
|
|
1855
|
+
instance: instance.animations,
|
|
1856
|
+
global: uiConfig.animations
|
|
1857
|
+
});
|
|
1858
|
+
}, [
|
|
1859
|
+
key,
|
|
1860
|
+
instance.animations,
|
|
1861
|
+
uiConfig.animations
|
|
1862
|
+
]);
|
|
1863
|
+
}
|
|
1864
|
+
//#endregion
|
|
1865
|
+
//#region src/shared/assets/asset.tsx
|
|
1866
|
+
function altText(a11y, t) {
|
|
1867
|
+
return "altKey" in a11y ? t(a11y.altKey) : "";
|
|
1868
|
+
}
|
|
1869
|
+
function svgA11y(a11y, t) {
|
|
1870
|
+
return "altKey" in a11y ? {
|
|
1871
|
+
role: "img",
|
|
1872
|
+
"aria-label": t(a11y.altKey)
|
|
1873
|
+
} : { "aria-hidden": "true" };
|
|
1874
|
+
}
|
|
1875
|
+
/**
|
|
1876
|
+
* Normalizes the call-site `default` into a renderable shape. Trusted (it is a
|
|
1877
|
+
* bundled SDK asset), so raw markup is not sanitized — unlike a customer raw
|
|
1878
|
+
* override.
|
|
1879
|
+
*/
|
|
1880
|
+
function defaultToRenderable(value) {
|
|
1881
|
+
if (value === void 0) return null;
|
|
1882
|
+
if (typeof value === "function") return {
|
|
1883
|
+
kind: "component",
|
|
1884
|
+
value
|
|
1885
|
+
};
|
|
1886
|
+
return value.trim().startsWith("<") ? {
|
|
1887
|
+
kind: "raw",
|
|
1888
|
+
value
|
|
1889
|
+
} : {
|
|
1890
|
+
kind: "url",
|
|
1891
|
+
value
|
|
1892
|
+
};
|
|
1893
|
+
}
|
|
1894
|
+
function useAssetContent(key, defaultAsset, onFallback) {
|
|
1895
|
+
const resolved = useAsset(key);
|
|
1896
|
+
const [failedUrl, setFailedUrl] = d(null);
|
|
1897
|
+
const rawOverride = resolved?.type === "override-raw" ? resolved.raw : null;
|
|
1898
|
+
const sanitizedRaw = T(() => rawOverride === null ? null : sanitizeSvg(rawOverride), [rawOverride]);
|
|
1899
|
+
const urlFailed = resolved?.type === "override-url" && resolved.url === failedUrl;
|
|
1900
|
+
const rawStripped = rawOverride !== null && (sanitizedRaw?.strippedHref === true || (sanitizedRaw?.markup ?? "").trim() === "");
|
|
1901
|
+
y(() => {
|
|
1902
|
+
if (urlFailed || rawStripped) onFallback?.();
|
|
1903
|
+
}, [
|
|
1904
|
+
urlFailed,
|
|
1905
|
+
rawStripped,
|
|
1906
|
+
onFallback
|
|
1907
|
+
]);
|
|
1908
|
+
if (resolved === null) return null;
|
|
1909
|
+
const useDefault = resolved.type === "default" || urlFailed || rawStripped;
|
|
1910
|
+
const { a11y } = resolved;
|
|
1911
|
+
if (!useDefault) switch (resolved.type) {
|
|
1912
|
+
case "override-component": return {
|
|
1913
|
+
content: {
|
|
1914
|
+
kind: "component",
|
|
1915
|
+
value: resolved.component
|
|
1916
|
+
},
|
|
1917
|
+
a11y
|
|
1918
|
+
};
|
|
1919
|
+
case "override-url": return {
|
|
1920
|
+
content: {
|
|
1921
|
+
kind: "url",
|
|
1922
|
+
value: resolved.url,
|
|
1923
|
+
onError: () => setFailedUrl(resolved.url)
|
|
1924
|
+
},
|
|
1925
|
+
a11y
|
|
1926
|
+
};
|
|
1927
|
+
case "override-raw": return {
|
|
1928
|
+
content: {
|
|
1929
|
+
kind: "raw",
|
|
1930
|
+
value: sanitizedRaw?.markup ?? ""
|
|
1931
|
+
},
|
|
1932
|
+
a11y
|
|
1933
|
+
};
|
|
1934
|
+
}
|
|
1935
|
+
const content = defaultToRenderable(defaultAsset);
|
|
1936
|
+
return content ? {
|
|
1937
|
+
content,
|
|
1938
|
+
a11y
|
|
1939
|
+
} : null;
|
|
1940
|
+
}
|
|
1941
|
+
function renderAsset(content, a11y, t, className) {
|
|
1942
|
+
switch (content.kind) {
|
|
1943
|
+
case "component": {
|
|
1944
|
+
const Svg = content.value;
|
|
1945
|
+
return /* @__PURE__ */ u(Svg, {
|
|
1946
|
+
class: className,
|
|
1947
|
+
...svgA11y(a11y, t)
|
|
1948
|
+
});
|
|
1949
|
+
}
|
|
1950
|
+
case "url": return /* @__PURE__ */ u("img", {
|
|
1951
|
+
src: content.value,
|
|
1952
|
+
alt: altText(a11y, t),
|
|
1953
|
+
"aria-hidden": "altKey" in a11y ? void 0 : "true",
|
|
1954
|
+
class: className,
|
|
1955
|
+
onError: content.onError
|
|
1956
|
+
});
|
|
1957
|
+
case "raw": return /* @__PURE__ */ u("span", {
|
|
1958
|
+
class: cn("IncodeAssetRaw", className),
|
|
1959
|
+
...svgA11y(a11y, t),
|
|
1960
|
+
dangerouslySetInnerHTML: { __html: content.value }
|
|
1961
|
+
});
|
|
1962
|
+
default: return content;
|
|
1963
|
+
}
|
|
1964
|
+
}
|
|
1965
|
+
/**
|
|
1966
|
+
* Renders a branded illustration by catalog key, honoring the resolved
|
|
1967
|
+
* precedence (per-instance → global → built-in default). The built-in default
|
|
1968
|
+
* is supplied by the call site via `default` (imported on-site).
|
|
1969
|
+
*/
|
|
1970
|
+
function Asset({ name, class: className, default: defaultAsset, onFallback }) {
|
|
1971
|
+
const { t } = useTranslation();
|
|
1972
|
+
const result = useAssetContent(name, defaultAsset, onFallback);
|
|
1973
|
+
if (result === null) return null;
|
|
1974
|
+
return renderAsset(result.content, result.a11y, t, className);
|
|
1975
|
+
}
|
|
1976
|
+
//#endregion
|
|
1977
|
+
//#region src/shared/lottie/lottie.tsx
|
|
1978
|
+
var lottiePromise = null;
|
|
1979
|
+
async function loadLottie() {
|
|
1980
|
+
if (lottiePromise) return lottiePromise;
|
|
1981
|
+
lottiePromise = import("./lottie_light-Bv56F2Ae.js").then((m) => /* @__PURE__ */ __toESM(m.default, 1)).then((mod) => mod.default);
|
|
1982
|
+
return lottiePromise;
|
|
1983
|
+
}
|
|
1984
|
+
var AUTO_STOP_AFTER_MS = 5e3;
|
|
1985
|
+
function Lottie({ animationData, loop = true, autoplay = true, reverse = false, style, className, onComplete, autoStop = false, stopFramePosition }) {
|
|
1986
|
+
const containerRef = A(null);
|
|
1987
|
+
const effectiveAutoplay = reverse ? false : autoplay;
|
|
1988
|
+
const animationOptionsRef = A({
|
|
1989
|
+
container: containerRef.current,
|
|
1990
|
+
renderer: "svg",
|
|
1991
|
+
loop,
|
|
1992
|
+
autoplay: effectiveAutoplay,
|
|
1993
|
+
animationData
|
|
1994
|
+
});
|
|
1995
|
+
y(() => {
|
|
1996
|
+
animationOptionsRef.current = {
|
|
1997
|
+
container: containerRef.current,
|
|
1998
|
+
renderer: "svg",
|
|
1999
|
+
loop,
|
|
2000
|
+
autoplay: effectiveAutoplay,
|
|
2001
|
+
animationData
|
|
2002
|
+
};
|
|
2003
|
+
}, [
|
|
2004
|
+
animationData,
|
|
2005
|
+
loop,
|
|
2006
|
+
effectiveAutoplay
|
|
2007
|
+
]);
|
|
2008
|
+
y(() => {
|
|
2009
|
+
if (!containerRef.current) return;
|
|
2010
|
+
let anim;
|
|
2011
|
+
let stopTimer;
|
|
2012
|
+
let isMounted = true;
|
|
2013
|
+
loadLottie().then((lottie) => {
|
|
2014
|
+
if (!isMounted) return;
|
|
2015
|
+
anim = lottie.loadAnimation(animationOptionsRef.current);
|
|
2016
|
+
if (reverse) {
|
|
2017
|
+
anim.setDirection(-1);
|
|
2018
|
+
anim.goToAndPlay(anim.totalFrames - 1, true);
|
|
2019
|
+
}
|
|
2020
|
+
if (onComplete) anim.addEventListener("complete", onComplete);
|
|
2021
|
+
if (autoStop) stopTimer = window.setTimeout(() => {
|
|
2022
|
+
const current = anim;
|
|
2023
|
+
if (!current) return;
|
|
2024
|
+
if (!stopFramePosition) {
|
|
2025
|
+
current.pause();
|
|
2026
|
+
return;
|
|
2027
|
+
}
|
|
2028
|
+
const totalFrames = current.totalFrames;
|
|
2029
|
+
if (!totalFrames || totalFrames <= 0) {
|
|
2030
|
+
current.stop();
|
|
2031
|
+
return;
|
|
2032
|
+
}
|
|
2033
|
+
const targetFrame = stopFramePosition === "last" ? Math.max(totalFrames - 1, 0) : stopFramePosition === "first" ? 0 : Math.floor((totalFrames - 1) / 2);
|
|
2034
|
+
current.goToAndStop(targetFrame, true);
|
|
2035
|
+
}, AUTO_STOP_AFTER_MS);
|
|
2036
|
+
});
|
|
2037
|
+
return () => {
|
|
2038
|
+
isMounted = false;
|
|
2039
|
+
if (stopTimer !== void 0) window.clearTimeout(stopTimer);
|
|
2040
|
+
if (anim) {
|
|
2041
|
+
if (onComplete) anim.removeEventListener("complete", onComplete);
|
|
2042
|
+
anim.destroy();
|
|
2043
|
+
}
|
|
2044
|
+
};
|
|
2045
|
+
}, [
|
|
2046
|
+
onComplete,
|
|
2047
|
+
reverse,
|
|
2048
|
+
autoStop,
|
|
2049
|
+
stopFramePosition
|
|
2050
|
+
]);
|
|
2051
|
+
return /* @__PURE__ */ u("div", {
|
|
2052
|
+
ref: containerRef,
|
|
2053
|
+
style,
|
|
2054
|
+
className,
|
|
2055
|
+
"aria-hidden": "true"
|
|
2056
|
+
});
|
|
2057
|
+
}
|
|
2058
|
+
//#endregion
|
|
2059
|
+
//#region src/shared/assets/animatedAsset.tsx
|
|
2060
|
+
var overrideUrlCache = /* @__PURE__ */ new Map();
|
|
2061
|
+
function fetchAnimation(url) {
|
|
2062
|
+
const cached = overrideUrlCache.get(url);
|
|
2063
|
+
if (cached) return cached;
|
|
2064
|
+
const pending = fetch(url).then((response) => {
|
|
2065
|
+
if (!response.ok) throw new Error(`Request for "${url}" failed with status ${response.status}.`);
|
|
2066
|
+
return response.json();
|
|
2067
|
+
});
|
|
2068
|
+
overrideUrlCache.set(url, pending);
|
|
2069
|
+
pending.catch(() => overrideUrlCache.delete(url));
|
|
2070
|
+
return pending;
|
|
2071
|
+
}
|
|
2072
|
+
function loadAnimationDefault(def, orientation) {
|
|
2073
|
+
if (def === null) return Promise.resolve(null);
|
|
2074
|
+
if (typeof def === "function") return def();
|
|
2075
|
+
return def[orientation]();
|
|
2076
|
+
}
|
|
2077
|
+
var defaultCache = /* @__PURE__ */ new Map();
|
|
2078
|
+
function defaultCacheKey(name, orientation) {
|
|
2079
|
+
return `${name}|${orientation}`;
|
|
2080
|
+
}
|
|
2081
|
+
function loadDefaultCached(name, orientation) {
|
|
2082
|
+
const cacheKey = defaultCacheKey(name, orientation);
|
|
2083
|
+
if (defaultCache.has(cacheKey)) return Promise.resolve(defaultCache.get(cacheKey) ?? null);
|
|
2084
|
+
return loadAnimationDefault(animationRegistry[name]?.default ?? null, orientation).then((value) => {
|
|
2085
|
+
defaultCache.set(cacheKey, value);
|
|
2086
|
+
return value;
|
|
2087
|
+
});
|
|
2088
|
+
}
|
|
2089
|
+
/**
|
|
2090
|
+
* Warms the built-in animation cache for the given catalog keys so a later
|
|
2091
|
+
* render is synchronous (no flash). Best-effort; call it before the screen
|
|
2092
|
+
* mounts.
|
|
2093
|
+
*/
|
|
2094
|
+
function preloadAnimations(keys, orientation = "vertical") {
|
|
2095
|
+
for (const key of keys) loadDefaultCached(key, orientation).catch(() => {});
|
|
2096
|
+
}
|
|
2097
|
+
/**
|
|
2098
|
+
* Resolves the winning animation to parsed `animationData` plus whether it came
|
|
2099
|
+
* from a customer override. Reads the default cache synchronously on first
|
|
2100
|
+
* render, so a preloaded animation shows with no flash. A failed override URL
|
|
2101
|
+
* silently falls back to the built-in default.
|
|
2102
|
+
*
|
|
2103
|
+
* Shared by `AnimatedAsset` and by tutorial surfaces that render Lottie
|
|
2104
|
+
* themselves (e.g. `BaseTutorial`, which recolors only built-in defaults).
|
|
2105
|
+
*
|
|
2106
|
+
* `onFallback`, if given, fires only when a *configured* override actually
|
|
2107
|
+
* fails to load (never when there was simply no override to begin with) —
|
|
2108
|
+
* for a caller whose true fallback lives outside this system entirely, so it
|
|
2109
|
+
* can react to a real failure instead of committing to render this component before
|
|
2110
|
+
* knowing whether the override will actually work.
|
|
2111
|
+
*/
|
|
2112
|
+
function useAnimationData(name, orientation = "vertical", onFallback) {
|
|
2113
|
+
const resolved = useAnimation(name);
|
|
2114
|
+
const type = resolved?.type;
|
|
2115
|
+
const isOverride = isActiveOverride(resolved);
|
|
2116
|
+
const overrideUrl = resolved?.type === "override-url" ? resolved.url : void 0;
|
|
2117
|
+
const overrideData = resolved?.type === "override-data" ? resolved.animationData : void 0;
|
|
2118
|
+
const [data, setData] = d(() => {
|
|
2119
|
+
if (type === "override-data") return overrideData ?? null;
|
|
2120
|
+
if (type === "default") return defaultCache.get(defaultCacheKey(name, orientation)) ?? null;
|
|
2121
|
+
return null;
|
|
2122
|
+
});
|
|
2123
|
+
const [overrideFailed, setOverrideFailed] = d(false);
|
|
2124
|
+
y(() => {
|
|
2125
|
+
let active = true;
|
|
2126
|
+
setOverrideFailed(false);
|
|
2127
|
+
if (type === void 0) setData(null);
|
|
2128
|
+
else if (type === "override-data") setData(overrideData ?? null);
|
|
2129
|
+
else if (type === "override-url" && overrideUrl !== void 0) fetchAnimation(overrideUrl).then((value) => {
|
|
2130
|
+
if (active) setData(value);
|
|
2131
|
+
}, (error) => {
|
|
2132
|
+
`${name}`;
|
|
2133
|
+
if (active) {
|
|
2134
|
+
setOverrideFailed(true);
|
|
2135
|
+
loadDefaultCached(name, orientation).then((value) => {
|
|
2136
|
+
if (active) setData(value);
|
|
2137
|
+
}, () => {});
|
|
2138
|
+
}
|
|
2139
|
+
});
|
|
2140
|
+
else loadDefaultCached(name, orientation).then((value) => {
|
|
2141
|
+
if (active) setData(value);
|
|
2142
|
+
}, (error) => {
|
|
2143
|
+
if (active) {
|
|
2144
|
+
setData(null);
|
|
2145
|
+
`${name}`;
|
|
2146
|
+
}
|
|
2147
|
+
});
|
|
2148
|
+
return () => {
|
|
2149
|
+
active = false;
|
|
2150
|
+
};
|
|
2151
|
+
}, [
|
|
2152
|
+
name,
|
|
2153
|
+
orientation,
|
|
2154
|
+
type,
|
|
2155
|
+
overrideUrl,
|
|
2156
|
+
overrideData
|
|
2157
|
+
]);
|
|
2158
|
+
y(() => {
|
|
2159
|
+
if (overrideFailed) onFallback?.();
|
|
2160
|
+
}, [overrideFailed, onFallback]);
|
|
2161
|
+
return {
|
|
2162
|
+
data,
|
|
2163
|
+
isOverride
|
|
2164
|
+
};
|
|
2165
|
+
}
|
|
2166
|
+
/**
|
|
2167
|
+
* Renders a Lottie animation by catalog key, honoring the resolved precedence
|
|
2168
|
+
* (per-instance → global → built-in default). Renders nothing while pending or
|
|
2169
|
+
* when there is no Lottie to show; the container is `aria-hidden` (all catalog
|
|
2170
|
+
* animations are decorative).
|
|
2171
|
+
*/
|
|
2172
|
+
function AnimatedAsset({ name, autoStop, stopFramePosition, orientation = "vertical", loop, reverse, onComplete, class: className, onFallback }) {
|
|
2173
|
+
const { data } = useAnimationData(name, orientation, onFallback);
|
|
2174
|
+
if (data === null) return null;
|
|
2175
|
+
return /* @__PURE__ */ u(Lottie, {
|
|
2176
|
+
animationData: data,
|
|
2177
|
+
autoStop,
|
|
2178
|
+
stopFramePosition,
|
|
2179
|
+
loop,
|
|
2180
|
+
reverse,
|
|
2181
|
+
onComplete,
|
|
2182
|
+
className
|
|
2183
|
+
});
|
|
2184
|
+
}
|
|
2185
|
+
//#endregion
|
|
2186
|
+
//#region src/shared/loader/loadingIcon.tsx
|
|
2187
|
+
/**
|
|
2188
|
+
* Duration of the CSS spin animation on `.IncodeLoadingIcon`.
|
|
2189
|
+
* Must stay in sync with the `animation-duration` declared in the stylesheet.
|
|
2190
|
+
*/
|
|
2191
|
+
var SPIN_DURATION_MS = 1e3;
|
|
2192
|
+
var SpinnerPrimary = ({ size, className }) => {
|
|
2193
|
+
return /* @__PURE__ */ u("svg", {
|
|
2194
|
+
width: size,
|
|
2195
|
+
height: size,
|
|
2196
|
+
viewBox: "0 0 31 31",
|
|
2197
|
+
fill: "none",
|
|
2198
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
2199
|
+
class: cn("IncodeLoadingIconPrimaryIcon", className),
|
|
2200
|
+
"aria-hidden": "true",
|
|
2201
|
+
children: /* @__PURE__ */ u("path", { d: "M28.1614 15.2837C29.453 15.2837 30.5186 14.2304 30.3181 12.9545C30.1344 11.7862 29.8129 10.6411 29.3582 9.54344C28.6044 7.72356 27.4995 6.06997 26.1066 4.67709C24.7137 3.28421 23.0601 2.17932 21.2403 1.4255C20.1426 0.970841 18.9974 0.649265 17.8292 0.46563C16.5533 0.265073 15.5 1.33073 15.5 2.62232C15.5 3.91391 16.5601 4.93461 17.8187 5.22473C18.3748 5.35291 18.9206 5.52729 19.4503 5.74672C20.7028 6.26548 21.8407 7.02585 22.7993 7.98441C23.7578 8.94296 24.5182 10.0809 25.037 11.3333C25.2564 11.8631 25.4308 12.4089 25.559 12.965C25.8491 14.2236 26.8698 15.2837 28.1614 15.2837Z" })
|
|
2202
|
+
});
|
|
2203
|
+
};
|
|
2204
|
+
var SpinnerSecondary = ({ size, className }) => {
|
|
2205
|
+
return /* @__PURE__ */ u("svg", {
|
|
2206
|
+
width: size,
|
|
2207
|
+
height: size,
|
|
2208
|
+
viewBox: "0 0 31 31",
|
|
2209
|
+
fill: "none",
|
|
2210
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
2211
|
+
class: cn("IncodeLoadingIconSecondaryIcon", className),
|
|
2212
|
+
"aria-hidden": "true",
|
|
2213
|
+
children: [/* @__PURE__ */ u("title", { children: "Spinner Outer part" }), /* @__PURE__ */ u("path", { d: "M30.5 15.2837C30.5 23.568 23.7843 30.2837 15.5 30.2837C7.21573 30.2837 0.5 23.568 0.5 15.2837C0.5 6.99942 7.21573 0.283691 15.5 0.283691C23.7843 0.283691 30.5 6.99942 30.5 15.2837ZM5.17725 15.2837C5.17725 20.9848 9.7989 25.6064 15.5 25.6064C21.2011 25.6064 25.8227 20.9848 25.8227 15.2837C25.8227 9.5826 21.2011 4.96095 15.5 4.96095C9.7989 4.96095 5.17725 9.5826 5.17725 15.2837Z" })]
|
|
2214
|
+
});
|
|
2215
|
+
};
|
|
2216
|
+
var LoadingIcon = ({ size = 30, secondaryClass, primaryClass }) => {
|
|
2217
|
+
const ref = A(null);
|
|
2218
|
+
const overrideRef = A(null);
|
|
2219
|
+
const animation = useAnimation("loader.spinner");
|
|
2220
|
+
const svg = useAsset("loader.spinner");
|
|
2221
|
+
const hasAnimationOverride = isActiveOverride(animation);
|
|
2222
|
+
const hasSvgOverride = isActiveOverride(svg);
|
|
2223
|
+
const [overrideFailed, setOverrideFailed] = d(false);
|
|
2224
|
+
const handleFallback = q(() => setOverrideFailed(true), []);
|
|
2225
|
+
const hasOverride = (hasAnimationOverride || hasSvgOverride) && !overrideFailed;
|
|
2226
|
+
/**
|
|
2227
|
+
* Cross-module loaders (e.g. ID processing → selfie initialising) unmount
|
|
2228
|
+
* and remount this component as the user moves between flow steps. By
|
|
2229
|
+
* default each remount restarts the CSS spin animation from frame 0, which
|
|
2230
|
+
* reads as a visible "stutter" or reset of the spinner during otherwise
|
|
2231
|
+
* seamless transitions.
|
|
2232
|
+
*
|
|
2233
|
+
* To keep the rotation continuous across remounts we anchor the animation
|
|
2234
|
+
* to a wall-clock offset: `performance.now() % SPIN_DURATION_MS` tells us
|
|
2235
|
+
* how far into the current spin cycle we are, and applying it as a
|
|
2236
|
+
* negative `animation-delay` makes the new instance pick up exactly where
|
|
2237
|
+
* the previous one left off. (Built-in default only.)
|
|
2238
|
+
*/
|
|
2239
|
+
_(() => {
|
|
2240
|
+
if (hasOverride || !ref.current) return;
|
|
2241
|
+
const offsetMs = performance.now() % SPIN_DURATION_MS;
|
|
2242
|
+
ref.current.style.animationDelay = `-${offsetMs}ms`;
|
|
2243
|
+
}, [hasOverride]);
|
|
2244
|
+
_(() => {
|
|
2245
|
+
if (!overrideRef.current) return;
|
|
2246
|
+
overrideRef.current.style.width = `${size}px`;
|
|
2247
|
+
overrideRef.current.style.height = `${size}px`;
|
|
2248
|
+
}, [size, hasOverride]);
|
|
2249
|
+
if (hasOverride) return /* @__PURE__ */ u("div", {
|
|
2250
|
+
ref: overrideRef,
|
|
2251
|
+
class: "IncodeLoadingIconOverride",
|
|
2252
|
+
children: hasAnimationOverride ? /* @__PURE__ */ u(AnimatedAsset, {
|
|
2253
|
+
name: "loader.spinner",
|
|
2254
|
+
loop: true,
|
|
2255
|
+
onFallback: handleFallback
|
|
2256
|
+
}) : /* @__PURE__ */ u(Asset, {
|
|
2257
|
+
name: "loader.spinner",
|
|
2258
|
+
onFallback: handleFallback
|
|
2259
|
+
})
|
|
2260
|
+
});
|
|
2261
|
+
return /* @__PURE__ */ u("div", {
|
|
2262
|
+
ref,
|
|
2263
|
+
class: "IncodeLoadingIcon",
|
|
2264
|
+
children: [/* @__PURE__ */ u(SpinnerSecondary, {
|
|
2265
|
+
size,
|
|
2266
|
+
className: secondaryClass
|
|
2267
|
+
}), /* @__PURE__ */ u("div", {
|
|
2268
|
+
class: "IncodeLoadingIconPrimary",
|
|
2269
|
+
children: /* @__PURE__ */ u(SpinnerPrimary, {
|
|
2270
|
+
size,
|
|
2271
|
+
className: primaryClass
|
|
2272
|
+
})
|
|
2273
|
+
})]
|
|
2274
|
+
});
|
|
2275
|
+
};
|
|
2276
|
+
//#endregion
|
|
2277
|
+
//#region src/shared/spacer/spacer.tsx
|
|
2278
|
+
var scaleTokens = new Set([
|
|
2279
|
+
0,
|
|
2280
|
+
2,
|
|
2281
|
+
4,
|
|
2282
|
+
8,
|
|
2283
|
+
12,
|
|
2284
|
+
16,
|
|
2285
|
+
20,
|
|
2286
|
+
24,
|
|
2287
|
+
32,
|
|
2288
|
+
40,
|
|
2289
|
+
48,
|
|
2290
|
+
64,
|
|
2291
|
+
80,
|
|
2292
|
+
96,
|
|
2293
|
+
104,
|
|
2294
|
+
120,
|
|
2295
|
+
200
|
|
2296
|
+
]);
|
|
2297
|
+
var scaleToClassName = (size, direction) => {
|
|
2298
|
+
if (direction === "horizontal") return {
|
|
2299
|
+
0: "IncodeSpacerHorizontal0",
|
|
2300
|
+
2: "IncodeSpacerHorizontal2",
|
|
2301
|
+
4: "IncodeSpacerHorizontal4",
|
|
2302
|
+
8: "IncodeSpacerHorizontal8",
|
|
2303
|
+
12: "IncodeSpacerHorizontal12",
|
|
2304
|
+
16: "IncodeSpacerHorizontal16",
|
|
2305
|
+
20: "IncodeSpacerHorizontal20",
|
|
2306
|
+
24: "IncodeSpacerHorizontal24",
|
|
2307
|
+
32: "IncodeSpacerHorizontal32",
|
|
2308
|
+
40: "IncodeSpacerHorizontal40",
|
|
2309
|
+
48: "IncodeSpacerHorizontal48",
|
|
2310
|
+
64: "IncodeSpacerHorizontal64",
|
|
2311
|
+
80: "IncodeSpacerHorizontal80",
|
|
2312
|
+
96: "IncodeSpacerHorizontal96",
|
|
2313
|
+
104: "IncodeSpacerHorizontal104",
|
|
2314
|
+
120: "IncodeSpacerHorizontal120",
|
|
2315
|
+
200: "IncodeSpacerHorizontal200"
|
|
2316
|
+
}[size];
|
|
2317
|
+
return {
|
|
2318
|
+
0: "IncodeSpacerVertical0",
|
|
2319
|
+
2: "IncodeSpacerVertical2",
|
|
2320
|
+
4: "IncodeSpacerVertical4",
|
|
2321
|
+
8: "IncodeSpacerVertical8",
|
|
2322
|
+
12: "IncodeSpacerVertical12",
|
|
2323
|
+
16: "IncodeSpacerVertical16",
|
|
2324
|
+
20: "IncodeSpacerVertical20",
|
|
2325
|
+
24: "IncodeSpacerVertical24",
|
|
2326
|
+
32: "IncodeSpacerVertical32",
|
|
2327
|
+
40: "IncodeSpacerVertical40",
|
|
2328
|
+
48: "IncodeSpacerVertical48",
|
|
2329
|
+
64: "IncodeSpacerVertical64",
|
|
2330
|
+
80: "IncodeSpacerVertical80",
|
|
2331
|
+
96: "IncodeSpacerVertical96",
|
|
2332
|
+
104: "IncodeSpacerVertical104",
|
|
2333
|
+
120: "IncodeSpacerVertical120",
|
|
2334
|
+
200: "IncodeSpacerVertical200"
|
|
2335
|
+
}[size];
|
|
2336
|
+
};
|
|
2337
|
+
var Spacer = ({ size, className, direction = "vertical" }) => {
|
|
2338
|
+
if (size === void 0) return /* @__PURE__ */ u("div", { class: `IncodeSpacerFlex ${className || ""}` });
|
|
2339
|
+
if (!(direction === "horizontal" ? "w" : direction === "vertical" ? "h" : void 0)) return /* @__PURE__ */ u("div", { class: `${className || ""}` });
|
|
2340
|
+
if (typeof size === "number" && scaleTokens.has(size)) return /* @__PURE__ */ u("div", { class: `${scaleToClassName(size, direction)} ${className || ""}` });
|
|
2341
|
+
return /* @__PURE__ */ u("div", { class: `${className || ""}` });
|
|
2342
|
+
};
|
|
2343
|
+
//#endregion
|
|
2344
|
+
export { useAnimationData as a, InstanceOverridesProvider as c, preloadAnimations as i, purify$1 as l, LoadingIcon as n, Lottie as o, AnimatedAsset as r, Asset as s, Spacer as t, cn as u };
|