@onepercentio/one-ui 1.3.5 → 1.4.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/WebpackConfigs/email-templates.js +99 -0
- package/dist/components/AdaptiveButton/AdaptiveButton.js +26 -24
- package/dist/components/AdaptiveButton/index.js +25 -22
- package/dist/components/AdaptiveContainer/AdaptiveContainer.js +140 -139
- package/dist/components/AdaptiveContainer/index.js +25 -22
- package/dist/components/AdaptiveDialog/AdaptiveDialog.js +76 -42
- package/dist/components/AdaptiveDialog/AdaptiveDialog.module.scss +17 -3
- package/dist/components/AdaptiveDialog/index.js +25 -22
- package/dist/components/AdaptiveSidebar/AdaptiveSidebar.js +70 -54
- package/dist/components/AdaptiveSidebar/AdaptiveSidebar.sample.js +10 -9
- package/dist/components/AdaptiveSidebar/index.js +25 -22
- package/dist/components/AnchoredTooltip/AnchoredTooltip.js +155 -154
- package/dist/components/AnchoredTooltip/AnchoredTooltip.module.scss +13 -10
- package/dist/components/AnchoredTooltip/index.js +25 -22
- package/dist/components/AnimatedEntrance/AnimatedEntrance.js +154 -121
- package/dist/components/AnimatedEntrance/index.js +25 -22
- package/dist/components/AsyncTriggerContainer/AsyncTriggerContainer.js +80 -40
- package/dist/components/AsyncTriggerContainer/index.js +25 -22
- package/dist/components/AsyncWrapper/AsyncWrapper.js +34 -16
- package/dist/components/AsyncWrapper/index.js +25 -22
- package/dist/components/Avatar/Avatar.js +33 -18
- package/dist/components/Avatar/index.js +25 -22
- package/dist/components/BucketFill/BucketFill.js +49 -36
- package/dist/components/BucketFill/index.js +25 -22
- package/dist/components/Button/Button.js +30 -22
- package/dist/components/Button/index.js +25 -22
- package/dist/components/Card/Card.js +17 -10
- package/dist/components/Card/index.js +25 -22
- package/dist/components/Chart/Chart.js +25 -22
- package/dist/components/Chart/Chart.logic.js +10 -9
- package/dist/components/Chart/Chart.types.js +5 -2
- package/dist/components/Chart/Chart.view.js +174 -98
- package/dist/components/Chart/index.js +25 -22
- package/dist/components/CheckBox/CheckBox.js +48 -30
- package/dist/components/CheckBox/CheckBox.module.scss +5 -0
- package/dist/components/CheckBox/index.js +25 -22
- package/dist/components/CodeInput/CodeInput.js +75 -93
- package/dist/components/CodeInput/index.js +25 -22
- package/dist/components/Collapsable/Collapsable.js +164 -134
- package/dist/components/Collapsable/index.js +25 -22
- package/dist/components/Countdown/Countdown.js +69 -86
- package/dist/components/Countdown/index.js +25 -22
- package/dist/components/CurrencyInput/CurrencyInput.hook.js +25 -25
- package/dist/components/CurrencyInput/CurrencyInput.js +48 -29
- package/dist/components/CurrencyInput/index.js +25 -22
- package/dist/components/Divider/Divider.js +16 -10
- package/dist/components/Divider/index.js +25 -22
- package/dist/components/EmailInput/EmailInput.js +37 -23
- package/dist/components/EmailInput/index.js +25 -22
- package/dist/components/FadeIn/FadeIn.js +57 -51
- package/dist/components/FadeIn/index.js +25 -22
- package/dist/components/FileInput/FileInput.js +45 -38
- package/dist/components/FileInput/View/BigFactory/BigFactory.js +48 -16
- package/dist/components/FileInput/View/BigFactory/index.js +25 -22
- package/dist/components/FileInput/View/Compact/Compact.js +114 -46
- package/dist/components/FileInput/View/Compact/index.js +25 -22
- package/dist/components/FileInput/View/View.types.js +5 -2
- package/dist/components/FileInput/index.js +25 -22
- package/dist/components/FlowController/FlowController.js +56 -25
- package/dist/components/FlowController/index.js +25 -22
- package/dist/components/Form/Form.hook.js +217 -202
- package/dist/components/Form/Form.js +103 -65
- package/dist/components/Form/Form.types.js +39 -53
- package/dist/components/Form/FormField/Extensions/DateField/DateField.js +68 -53
- package/dist/components/Form/FormField/Extensions/DateField/index.js +25 -22
- package/dist/components/Form/FormField/Extensions/PhoneField/PhoneField.js +81 -78
- package/dist/components/Form/FormField/Extensions/PhoneField/index.js +25 -22
- package/dist/components/Form/FormField/FormField.js +307 -148
- package/dist/components/Form/FormField/FormField.types.js +10 -7
- package/dist/components/Form/FormField/index.js +25 -22
- package/dist/components/Form/index.js +25 -22
- package/dist/components/Freeze/Freeze.js +13 -9
- package/dist/components/Freeze/index.js +25 -22
- package/dist/components/HSForms/HSForms.js +48 -69
- package/dist/components/HSForms/index.js +25 -22
- package/dist/components/HeaderCloseBtn/HeaderCloseBtn.js +19 -10
- package/dist/components/HeaderCloseBtn/index.js +25 -22
- package/dist/components/InfinityScroll/InfinityScroll.js +114 -94
- package/dist/components/InfinityScroll/index.js +25 -22
- package/dist/components/Input/Input.js +99 -57
- package/dist/components/Input/index.js +25 -22
- package/dist/components/InstantCounter/InstantCounter.js +49 -31
- package/dist/components/InstantCounter/index.js +25 -22
- package/dist/components/LavaLamp/LavaLamp.data.js +83 -86
- package/dist/components/LavaLamp/LavaLamp.js +119 -32
- package/dist/components/LavaLamp/index.js +25 -22
- package/dist/components/LavaLamp/v2/LavaLamp.js +149 -156
- package/dist/components/LinkToId/LinkToId.js +39 -27
- package/dist/components/LinkToId/index.js +25 -22
- package/dist/components/Loader/Loader.js +21 -22
- package/dist/components/Loader/index.js +25 -22
- package/dist/components/LoaderDotsIndicator/LoaderDotsIndicator.js +27 -15
- package/dist/components/LoaderDotsIndicator/index.js +25 -22
- package/dist/components/LoopableVideo/LoopableVideo.js +33 -25
- package/dist/components/LoopableVideo/index.js +25 -22
- package/dist/components/MainGrid/MainGrid.js +46 -23
- package/dist/components/MainGrid/index.js +25 -22
- package/dist/components/MutableHamburgerButton/MutableHamburgerButton.js +27 -23
- package/dist/components/MutableHamburgerButton/index.js +25 -22
- package/dist/components/Notification/Notification.js +18 -11
- package/dist/components/Notification/index.js +25 -22
- package/dist/components/NumberInput/NumberInput.js +43 -42
- package/dist/components/NumberInput/index.js +25 -22
- package/dist/components/OrderableList/OrderableList.js +416 -404
- package/dist/components/OrderableList/index.js +25 -22
- package/dist/components/PaginationIndicator/PaginationIndicator.js +243 -198
- package/dist/components/PaginationIndicator/index.js +25 -22
- package/dist/components/Parallax/Parallax.js +156 -130
- package/dist/components/Parallax/index.js +25 -22
- package/dist/components/Parallax/math/helpers.js +120 -216
- package/dist/components/PasswordInput/PasswordInput.js +88 -71
- package/dist/components/PasswordInput/index.js +25 -22
- package/dist/components/PingPongText/PingPongText.js +63 -67
- package/dist/components/PingPongText/index.js +25 -22
- package/dist/components/PixelatedScan/PixelatedScan.js +126 -74
- package/dist/components/PixelatedScan/index.js +25 -22
- package/dist/components/Portal/Portal.js +46 -43
- package/dist/components/Portal/index.js +25 -22
- package/dist/components/ProgressBar/ProgressBar.js +105 -47
- package/dist/components/ProgressBar/index.js +25 -22
- package/dist/components/ProgressTexts/ProgressTexts.js +43 -29
- package/dist/components/ProgressTexts/index.js +25 -22
- package/dist/components/Radio/Radio.js +51 -28
- package/dist/components/Radio/index.js +25 -22
- package/dist/components/Radio/variants/Checkmark/Checkmark.js +18 -12
- package/dist/components/Radio/variants/Checkmark/index.js +25 -22
- package/dist/components/Radio/variants/Generic/Generic.js +20 -12
- package/dist/components/Radio/variants/Generic/index.js +25 -22
- package/dist/components/ScrollendIndicator/ScrollendIndicator.js +118 -0
- package/dist/components/ScrollendIndicator/ScrollendIndicator.module.scss +76 -0
- package/dist/components/SectionContainer/SectionContainer.js +38 -16
- package/dist/components/SectionContainer/index.js +25 -22
- package/dist/components/Select/Select.js +128 -95
- package/dist/components/Select/index.js +25 -22
- package/dist/components/Skeleton/Skeleton.js +22 -14
- package/dist/components/Skeleton/index.js +25 -22
- package/dist/components/Slider/Slider.js +63 -59
- package/dist/components/Slider/index.js +25 -22
- package/dist/components/Spacing/Spacing.js +25 -17
- package/dist/components/Spacing/index.js +25 -22
- package/dist/components/StaticScroller/StaticScroller.js +65 -61
- package/dist/components/StaticScroller/index.js +25 -22
- package/dist/components/Switch/Switch.js +40 -26
- package/dist/components/Switch/index.js +25 -22
- package/dist/components/Table/Table.js +107 -56
- package/dist/components/Table/index.js +25 -22
- package/dist/components/Tabs/Tabs.js +59 -54
- package/dist/components/Tabs/index.js +25 -22
- package/dist/components/Text/Text.js +35 -30
- package/dist/components/Text/index.js +25 -22
- package/dist/components/Transition/MasksFactory/DiagonalReveal.js +46 -12
- package/dist/components/Transition/MasksFactory/DiagonalSquareToBalls.js +71 -49
- package/dist/components/Transition/MasksFactory/PhysicsSquares.js +89 -79
- package/dist/components/Transition/MasksFactory/SquareToBalls.js +60 -41
- package/dist/components/Transition/MasksFactory/utils.js +25 -27
- package/dist/components/Transition/Transition.js +298 -319
- package/dist/components/Transition/index.js +25 -22
- package/dist/components/UncontrolledTransition/UncontrolledTransition.js +101 -93
- package/dist/components/UncontrolledTransition/UncontrolledTransition.sample.js +27 -19
- package/dist/components/UncontrolledTransition/index.js +25 -22
- package/dist/components/WalletConnectionWrapper/WalletConnectionWrapper.js +101 -94
- package/dist/components/WalletConnectionWrapper/index.js +25 -22
- package/dist/components/utilitary/ScrollAndFocusLock/ScrollAndFocusLock.js +53 -43
- package/dist/components/utilitary/ScrollAndFocusLock/index.js +25 -22
- package/dist/context/AsyncProcess.js +68 -41
- package/dist/context/ContextAsyncControl.js +72 -51
- package/dist/context/CustomBrowserRouter.js +44 -30
- package/dist/context/OneUIProvider.js +102 -108
- package/dist/hooks/logs/useDependencyChangeDetection.js +17 -16
- package/dist/hooks/logs/useIsMounting.js +10 -7
- package/dist/hooks/persistence/useLocalStorage.js +41 -40
- package/dist/hooks/shims/ObjectWatchShim.js +47 -46
- package/dist/hooks/ui/useAdaptiveImage.js +29 -34
- package/dist/hooks/ui/useAlternating.js +18 -18
- package/dist/hooks/ui/useBreakpoint.js +19 -18
- package/dist/hooks/ui/useCustomScrollbar.js +26 -21
- package/dist/hooks/ui/useEffectIf.js +11 -9
- package/dist/hooks/ui/useMouseHover.js +22 -19
- package/dist/hooks/ui/usePaginationControls.js +129 -136
- package/dist/hooks/ui/useSnapToViewport.js +20 -19
- package/dist/hooks/ui/useTilt.js +145 -129
- package/dist/hooks/ui/useZoomable.js +123 -116
- package/dist/hooks/useAsyncControl.js +67 -52
- package/dist/hooks/useContainedRepositioning.js +75 -71
- package/dist/hooks/useCustomHistory.js +21 -12
- package/dist/hooks/useElementFit.js +43 -48
- package/dist/hooks/useFirestoreWatch.js +41 -41
- package/dist/hooks/useFreeze.js +10 -8
- package/dist/hooks/useHero.js +249 -271
- package/dist/hooks/useIntersection.js +32 -27
- package/dist/hooks/useMergeRefs.js +27 -24
- package/dist/hooks/useObserve.js +17 -14
- package/dist/hooks/usePagination.js +147 -164
- package/dist/hooks/usePooledOperation.js +41 -57
- package/dist/hooks/usePooling.js +46 -49
- package/dist/hooks/useRebound.js +23 -19
- package/dist/hooks/useShortIntl.js +72 -50
- package/dist/hooks/utility/useAsyncMemo.js +36 -42
- package/dist/hooks/utility/useDepChange.js +14 -12
- package/dist/hooks/utility/useEvents.js +26 -21
- package/dist/hooks/utility/useImmediate.js +8 -5
- package/dist/hooks/utility/useManualInit.js +19 -17
- package/dist/hooks/utility/useModule.js +12 -9
- package/dist/hooks/utility/useQuery.js +13 -7
- package/dist/hooks/utility/useUniqueEffect.js +17 -17
- package/dist/index.js +2159 -349
- package/dist/index.preprocess.js +35 -72
- package/dist/models/DebugLogger.js +8 -5
- package/dist/models/GenericContract.js +42 -13
- package/dist/models/ImageScales.js +13 -10
- package/dist/models/Orbs.js +53 -47
- package/dist/storybookUtils/index.js +40 -39
- package/dist/type-utils.js +5 -2
- package/dist/types.js +5 -2
- package/dist/utils/blockchain.js +35 -54
- package/dist/utils/e2e.js +21 -11
- package/dist/utils/flatten.js +15 -12
- package/dist/utils/formatters.js +48 -43
- package/dist/utils/html.utils.js +12 -6
- package/dist/utils/ownEvent.js +9 -7
- package/dist/utils/test.js +13 -11
- package/dist-ts/components/ScrollendIndicator/ScrollendIndicator.d.ts +10 -0
- package/dist-ts/components/ScrollendIndicator/ScrollendIndicator.js +68 -0
- package/dist-ts/components/ScrollendIndicator/ScrollendIndicator.js.map +1 -0
- package/dist-ts/components/ScrollendIndicator/ScrollendIndicator.module.scss +76 -0
- package/dist-ts/index.d.ts +1 -0
- package/dist-ts/index.js +1 -0
- package/dist-ts/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,230 +1,134 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
|
|
7
|
+
exports.flattenMatrix = flattenMatrix;
|
|
8
|
+
exports.generateMatrixFromOperations = generateMatrixFromOperations;
|
|
9
|
+
exports.invertMatrix = invertMatrix;
|
|
10
|
+
exports.multiplyMatrixes = multiplyMatrixes;
|
|
4
11
|
function IDENTITY_MATRIX() {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
12
|
+
return [[1, 0, 0, 0],
|
|
13
|
+
// cos, -sin, ?
|
|
14
|
+
[0, 1, 0, 0],
|
|
15
|
+
// sin, cos, ?
|
|
16
|
+
[0, 0, 1, 0],
|
|
17
|
+
// TranslationX, TranslationY, ?
|
|
18
|
+
[0, 0, 0, 1]];
|
|
11
19
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
20
|
+
function generateMatrixFromOperations() {
|
|
21
|
+
let resultingMatrix = undefined;
|
|
22
|
+
for (var _len = arguments.length, operations = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
23
|
+
operations[_key] = arguments[_key];
|
|
24
|
+
}
|
|
25
|
+
for (let operation of operations) {
|
|
26
|
+
const matrix = operation.type === "matrix" ? operation.matrix : IDENTITY_MATRIX();
|
|
27
|
+
switch (operation.type) {
|
|
28
|
+
case "perspective":
|
|
29
|
+
const f = Math.tan(Math.PI * 0.5 - 0.5 * operation.fieldOfViewInRadians);
|
|
30
|
+
const rangeInv = 1.0 / (operation.near - operation.far);
|
|
31
|
+
matrix[0][0] = f / operation.aspect;
|
|
32
|
+
matrix[1][1] = f;
|
|
33
|
+
matrix[2][2] = (operation.near + operation.far) * rangeInv;
|
|
34
|
+
matrix[2][3] = -1;
|
|
35
|
+
matrix[3][2] = operation.near * operation.far * rangeInv * 2;
|
|
36
|
+
matrix[3][3] = 0;
|
|
37
|
+
break;
|
|
38
|
+
case "translate":
|
|
39
|
+
matrix[3][0] = operation.x;
|
|
40
|
+
matrix[3][1] = operation.y;
|
|
41
|
+
matrix[3][2] = operation.z;
|
|
42
|
+
break;
|
|
43
|
+
case "rotateX":
|
|
44
|
+
case "rotateY":
|
|
45
|
+
case "rotateZ":
|
|
46
|
+
const angleToRadians = operation.angle * Math.PI / 180;
|
|
47
|
+
const sinAngle = Math.sin(angleToRadians);
|
|
48
|
+
const cosAngle = Math.cos(angleToRadians);
|
|
17
49
|
switch (operation.type) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const angleToRadians = (operation.angle * Math.PI) / 180;
|
|
37
|
-
const sinAngle = Math.sin(angleToRadians);
|
|
38
|
-
const cosAngle = Math.cos(angleToRadians);
|
|
39
|
-
switch (operation.type) {
|
|
40
|
-
case "rotateZ":
|
|
41
|
-
matrix[0][0] = cosAngle;
|
|
42
|
-
matrix[1][1] = cosAngle;
|
|
43
|
-
matrix[1][0] = -sinAngle;
|
|
44
|
-
matrix[0][1] = sinAngle;
|
|
45
|
-
break;
|
|
46
|
-
case "rotateY":
|
|
47
|
-
matrix[0][0] = cosAngle;
|
|
48
|
-
matrix[2][2] = cosAngle;
|
|
49
|
-
matrix[0][2] = -sinAngle;
|
|
50
|
-
matrix[2][0] = sinAngle;
|
|
51
|
-
break;
|
|
52
|
-
case "rotateX":
|
|
53
|
-
matrix[1][1] = cosAngle;
|
|
54
|
-
matrix[2][2] = cosAngle;
|
|
55
|
-
matrix[2][1] = -sinAngle;
|
|
56
|
-
matrix[1][2] = sinAngle;
|
|
57
|
-
break;
|
|
58
|
-
}
|
|
59
|
-
break;
|
|
60
|
-
case "scale":
|
|
61
|
-
matrix[0][0] = operation.factorX;
|
|
62
|
-
matrix[1][1] = operation.factorY;
|
|
63
|
-
matrix[2][2] = operation.factorZ;
|
|
64
|
-
break;
|
|
65
|
-
}
|
|
66
|
-
if (resultingMatrix) {
|
|
67
|
-
resultingMatrix = multiplyMatrixes(resultingMatrix, matrix);
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
resultingMatrix = matrix;
|
|
50
|
+
case "rotateZ":
|
|
51
|
+
matrix[0][0] = cosAngle;
|
|
52
|
+
matrix[1][1] = cosAngle;
|
|
53
|
+
matrix[1][0] = -sinAngle;
|
|
54
|
+
matrix[0][1] = sinAngle;
|
|
55
|
+
break;
|
|
56
|
+
case "rotateY":
|
|
57
|
+
matrix[0][0] = cosAngle;
|
|
58
|
+
matrix[2][2] = cosAngle;
|
|
59
|
+
matrix[0][2] = -sinAngle;
|
|
60
|
+
matrix[2][0] = sinAngle;
|
|
61
|
+
break;
|
|
62
|
+
case "rotateX":
|
|
63
|
+
matrix[1][1] = cosAngle;
|
|
64
|
+
matrix[2][2] = cosAngle;
|
|
65
|
+
matrix[2][1] = -sinAngle;
|
|
66
|
+
matrix[1][2] = sinAngle;
|
|
67
|
+
break;
|
|
71
68
|
}
|
|
69
|
+
break;
|
|
70
|
+
case "scale":
|
|
71
|
+
matrix[0][0] = operation.factorX;
|
|
72
|
+
matrix[1][1] = operation.factorY;
|
|
73
|
+
matrix[2][2] = operation.factorZ;
|
|
74
|
+
break;
|
|
72
75
|
}
|
|
73
|
-
|
|
76
|
+
if (resultingMatrix) {
|
|
77
|
+
resultingMatrix = multiplyMatrixes(resultingMatrix, matrix);
|
|
78
|
+
} else {
|
|
79
|
+
resultingMatrix = matrix;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return resultingMatrix || IDENTITY_MATRIX();
|
|
74
83
|
}
|
|
75
|
-
exports.generateMatrixFromOperations = generateMatrixFromOperations;
|
|
76
84
|
function multiplyMatrixes(matrix1, matrix2) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if (!resultingMatrix[i0])
|
|
90
|
-
resultingMatrix[i0] = [];
|
|
91
|
-
resultingMatrix[i0][i] = dimensionResult;
|
|
92
|
-
}
|
|
85
|
+
const resultingMatrix = [];
|
|
86
|
+
if (process.env.NODE_ENV === "development" && matrix2.length !== matrix1[0].length) {
|
|
87
|
+
throw new Error("For the multiplication of matrixes to work you need to provide the matrix1 containing the amount of columns as the same amount of rows from matrix 2.\nYou provided ".concat(matrix1[0].length, " columns and ").concat(matrix2.length, " rows"));
|
|
88
|
+
}
|
|
89
|
+
for (let i0 in matrix1) {
|
|
90
|
+
for (let i in matrix2[0]) {
|
|
91
|
+
let dimensionResult = 0;
|
|
92
|
+
for (let i2 in matrix1[0]) {
|
|
93
|
+
dimensionResult += matrix1[i0][i2] * matrix2[i2][i];
|
|
94
|
+
}
|
|
95
|
+
if (!resultingMatrix[i0]) resultingMatrix[i0] = [];
|
|
96
|
+
resultingMatrix[i0][i] = dimensionResult;
|
|
93
97
|
}
|
|
94
|
-
|
|
98
|
+
}
|
|
99
|
+
return resultingMatrix;
|
|
95
100
|
}
|
|
96
|
-
exports.multiplyMatrixes = multiplyMatrixes;
|
|
97
101
|
function invertMatrix(matrix) {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
m[8] * m[6] * m[13] -
|
|
127
|
-
m[12] * m[5] * m[10] +
|
|
128
|
-
m[12] * m[6] * m[9];
|
|
129
|
-
inv[1] =
|
|
130
|
-
-m[1] * m[10] * m[15] +
|
|
131
|
-
m[1] * m[11] * m[14] +
|
|
132
|
-
m[9] * m[2] * m[15] -
|
|
133
|
-
m[9] * m[3] * m[14] -
|
|
134
|
-
m[13] * m[2] * m[11] +
|
|
135
|
-
m[13] * m[3] * m[10];
|
|
136
|
-
inv[5] =
|
|
137
|
-
m[0] * m[10] * m[15] -
|
|
138
|
-
m[0] * m[11] * m[14] -
|
|
139
|
-
m[8] * m[2] * m[15] +
|
|
140
|
-
m[8] * m[3] * m[14] +
|
|
141
|
-
m[12] * m[2] * m[11] -
|
|
142
|
-
m[12] * m[3] * m[10];
|
|
143
|
-
inv[9] =
|
|
144
|
-
-m[0] * m[9] * m[15] +
|
|
145
|
-
m[0] * m[11] * m[13] +
|
|
146
|
-
m[8] * m[1] * m[15] -
|
|
147
|
-
m[8] * m[3] * m[13] -
|
|
148
|
-
m[12] * m[1] * m[11] +
|
|
149
|
-
m[12] * m[3] * m[9];
|
|
150
|
-
inv[13] =
|
|
151
|
-
m[0] * m[9] * m[14] -
|
|
152
|
-
m[0] * m[10] * m[13] -
|
|
153
|
-
m[8] * m[1] * m[14] +
|
|
154
|
-
m[8] * m[2] * m[13] +
|
|
155
|
-
m[12] * m[1] * m[10] -
|
|
156
|
-
m[12] * m[2] * m[9];
|
|
157
|
-
inv[2] =
|
|
158
|
-
m[1] * m[6] * m[15] -
|
|
159
|
-
m[1] * m[7] * m[14] -
|
|
160
|
-
m[5] * m[2] * m[15] +
|
|
161
|
-
m[5] * m[3] * m[14] +
|
|
162
|
-
m[13] * m[2] * m[7] -
|
|
163
|
-
m[13] * m[3] * m[6];
|
|
164
|
-
inv[6] =
|
|
165
|
-
-m[0] * m[6] * m[15] +
|
|
166
|
-
m[0] * m[7] * m[14] +
|
|
167
|
-
m[4] * m[2] * m[15] -
|
|
168
|
-
m[4] * m[3] * m[14] -
|
|
169
|
-
m[12] * m[2] * m[7] +
|
|
170
|
-
m[12] * m[3] * m[6];
|
|
171
|
-
inv[10] =
|
|
172
|
-
m[0] * m[5] * m[15] -
|
|
173
|
-
m[0] * m[7] * m[13] -
|
|
174
|
-
m[4] * m[1] * m[15] +
|
|
175
|
-
m[4] * m[3] * m[13] +
|
|
176
|
-
m[12] * m[1] * m[7] -
|
|
177
|
-
m[12] * m[3] * m[5];
|
|
178
|
-
inv[14] =
|
|
179
|
-
-m[0] * m[5] * m[14] +
|
|
180
|
-
m[0] * m[6] * m[13] +
|
|
181
|
-
m[4] * m[1] * m[14] -
|
|
182
|
-
m[4] * m[2] * m[13] -
|
|
183
|
-
m[12] * m[1] * m[6] +
|
|
184
|
-
m[12] * m[2] * m[5];
|
|
185
|
-
inv[3] =
|
|
186
|
-
-m[1] * m[6] * m[11] +
|
|
187
|
-
m[1] * m[7] * m[10] +
|
|
188
|
-
m[5] * m[2] * m[11] -
|
|
189
|
-
m[5] * m[3] * m[10] -
|
|
190
|
-
m[9] * m[2] * m[7] +
|
|
191
|
-
m[9] * m[3] * m[6];
|
|
192
|
-
inv[7] =
|
|
193
|
-
m[0] * m[6] * m[11] -
|
|
194
|
-
m[0] * m[7] * m[10] -
|
|
195
|
-
m[4] * m[2] * m[11] +
|
|
196
|
-
m[4] * m[3] * m[10] +
|
|
197
|
-
m[8] * m[2] * m[7] -
|
|
198
|
-
m[8] * m[3] * m[6];
|
|
199
|
-
inv[11] =
|
|
200
|
-
-m[0] * m[5] * m[11] +
|
|
201
|
-
m[0] * m[7] * m[9] +
|
|
202
|
-
m[4] * m[1] * m[11] -
|
|
203
|
-
m[4] * m[3] * m[9] -
|
|
204
|
-
m[8] * m[1] * m[7] +
|
|
205
|
-
m[8] * m[3] * m[5];
|
|
206
|
-
inv[15] =
|
|
207
|
-
m[0] * m[5] * m[10] -
|
|
208
|
-
m[0] * m[6] * m[9] -
|
|
209
|
-
m[4] * m[1] * m[10] +
|
|
210
|
-
m[4] * m[2] * m[9] +
|
|
211
|
-
m[8] * m[1] * m[6] -
|
|
212
|
-
m[8] * m[2] * m[5];
|
|
213
|
-
det = m[0] * inv[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12];
|
|
214
|
-
if (det === 0)
|
|
215
|
-
throw new Error("Determinator is equal to 0. This matrix cannot be inverted");
|
|
216
|
-
det = 1.0 / det;
|
|
217
|
-
return inv.reduce((r, val, i) => {
|
|
218
|
-
const row = Math.floor(i / 4);
|
|
219
|
-
if (!r[row])
|
|
220
|
-
r[row] = [];
|
|
221
|
-
r[row][i % 4] = val * det;
|
|
222
|
-
return r;
|
|
223
|
-
}, []);
|
|
102
|
+
const m = flattenMatrix(matrix);
|
|
103
|
+
let det = 0;
|
|
104
|
+
const inv = [];
|
|
105
|
+
inv[0] = m[5] * m[10] * m[15] - m[5] * m[11] * m[14] - m[9] * m[6] * m[15] + m[9] * m[7] * m[14] + m[13] * m[6] * m[11] - m[13] * m[7] * m[10];
|
|
106
|
+
inv[4] = -m[4] * m[10] * m[15] + m[4] * m[11] * m[14] + m[8] * m[6] * m[15] - m[8] * m[7] * m[14] - m[12] * m[6] * m[11] + m[12] * m[7] * m[10];
|
|
107
|
+
inv[8] = m[4] * m[9] * m[15] - m[4] * m[11] * m[13] - m[8] * m[5] * m[15] + m[8] * m[7] * m[13] + m[12] * m[5] * m[11] - m[12] * m[7] * m[9];
|
|
108
|
+
inv[12] = -m[4] * m[9] * m[14] + m[4] * m[10] * m[13] + m[8] * m[5] * m[14] - m[8] * m[6] * m[13] - m[12] * m[5] * m[10] + m[12] * m[6] * m[9];
|
|
109
|
+
inv[1] = -m[1] * m[10] * m[15] + m[1] * m[11] * m[14] + m[9] * m[2] * m[15] - m[9] * m[3] * m[14] - m[13] * m[2] * m[11] + m[13] * m[3] * m[10];
|
|
110
|
+
inv[5] = m[0] * m[10] * m[15] - m[0] * m[11] * m[14] - m[8] * m[2] * m[15] + m[8] * m[3] * m[14] + m[12] * m[2] * m[11] - m[12] * m[3] * m[10];
|
|
111
|
+
inv[9] = -m[0] * m[9] * m[15] + m[0] * m[11] * m[13] + m[8] * m[1] * m[15] - m[8] * m[3] * m[13] - m[12] * m[1] * m[11] + m[12] * m[3] * m[9];
|
|
112
|
+
inv[13] = m[0] * m[9] * m[14] - m[0] * m[10] * m[13] - m[8] * m[1] * m[14] + m[8] * m[2] * m[13] + m[12] * m[1] * m[10] - m[12] * m[2] * m[9];
|
|
113
|
+
inv[2] = m[1] * m[6] * m[15] - m[1] * m[7] * m[14] - m[5] * m[2] * m[15] + m[5] * m[3] * m[14] + m[13] * m[2] * m[7] - m[13] * m[3] * m[6];
|
|
114
|
+
inv[6] = -m[0] * m[6] * m[15] + m[0] * m[7] * m[14] + m[4] * m[2] * m[15] - m[4] * m[3] * m[14] - m[12] * m[2] * m[7] + m[12] * m[3] * m[6];
|
|
115
|
+
inv[10] = m[0] * m[5] * m[15] - m[0] * m[7] * m[13] - m[4] * m[1] * m[15] + m[4] * m[3] * m[13] + m[12] * m[1] * m[7] - m[12] * m[3] * m[5];
|
|
116
|
+
inv[14] = -m[0] * m[5] * m[14] + m[0] * m[6] * m[13] + m[4] * m[1] * m[14] - m[4] * m[2] * m[13] - m[12] * m[1] * m[6] + m[12] * m[2] * m[5];
|
|
117
|
+
inv[3] = -m[1] * m[6] * m[11] + m[1] * m[7] * m[10] + m[5] * m[2] * m[11] - m[5] * m[3] * m[10] - m[9] * m[2] * m[7] + m[9] * m[3] * m[6];
|
|
118
|
+
inv[7] = m[0] * m[6] * m[11] - m[0] * m[7] * m[10] - m[4] * m[2] * m[11] + m[4] * m[3] * m[10] + m[8] * m[2] * m[7] - m[8] * m[3] * m[6];
|
|
119
|
+
inv[11] = -m[0] * m[5] * m[11] + m[0] * m[7] * m[9] + m[4] * m[1] * m[11] - m[4] * m[3] * m[9] - m[8] * m[1] * m[7] + m[8] * m[3] * m[5];
|
|
120
|
+
inv[15] = m[0] * m[5] * m[10] - m[0] * m[6] * m[9] - m[4] * m[1] * m[10] + m[4] * m[2] * m[9] + m[8] * m[1] * m[6] - m[8] * m[2] * m[5];
|
|
121
|
+
det = m[0] * inv[0] + m[1] * inv[4] + m[2] * inv[8] + m[3] * inv[12];
|
|
122
|
+
if (det === 0) throw new Error("Determinator is equal to 0. This matrix cannot be inverted");
|
|
123
|
+
det = 1.0 / det;
|
|
124
|
+
return inv.reduce((r, val, i) => {
|
|
125
|
+
const row = Math.floor(i / 4);
|
|
126
|
+
if (!r[row]) r[row] = [];
|
|
127
|
+
r[row][i % 4] = val * det;
|
|
128
|
+
return r;
|
|
129
|
+
}, []);
|
|
224
130
|
}
|
|
225
|
-
exports.invertMatrix = invertMatrix;
|
|
226
131
|
function flattenMatrix(matrix) {
|
|
227
|
-
|
|
132
|
+
return matrix.reduce((f, dimension) => [...f, ...dimension], []);
|
|
228
133
|
}
|
|
229
|
-
exports.flattenMatrix = flattenMatrix;
|
|
230
|
-
//# sourceMappingURL=helpers.js.map
|
|
134
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJREVOVElUWV9NQVRSSVgiLCJnZW5lcmF0ZU1hdHJpeEZyb21PcGVyYXRpb25zIiwicmVzdWx0aW5nTWF0cml4IiwidW5kZWZpbmVkIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsIm9wZXJhdGlvbnMiLCJBcnJheSIsIl9rZXkiLCJvcGVyYXRpb24iLCJtYXRyaXgiLCJ0eXBlIiwiZiIsIk1hdGgiLCJ0YW4iLCJQSSIsImZpZWxkT2ZWaWV3SW5SYWRpYW5zIiwicmFuZ2VJbnYiLCJuZWFyIiwiZmFyIiwiYXNwZWN0IiwieCIsInkiLCJ6IiwiYW5nbGVUb1JhZGlhbnMiLCJhbmdsZSIsInNpbkFuZ2xlIiwic2luIiwiY29zQW5nbGUiLCJjb3MiLCJmYWN0b3JYIiwiZmFjdG9yWSIsImZhY3RvcloiLCJtdWx0aXBseU1hdHJpeGVzIiwibWF0cml4MSIsIm1hdHJpeDIiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJFcnJvciIsImNvbmNhdCIsImkwIiwiaSIsImRpbWVuc2lvblJlc3VsdCIsImkyIiwiaW52ZXJ0TWF0cml4IiwibSIsImZsYXR0ZW5NYXRyaXgiLCJkZXQiLCJpbnYiLCJyZWR1Y2UiLCJyIiwidmFsIiwicm93IiwiZmxvb3IiLCJkaW1lbnNpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9QYXJhbGxheC9tYXRoL2hlbHBlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgTWF0cml4M0QgPSBbXG4gIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdLFxuICBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgW251bWJlciwgbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sXG4gIFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdXG5dO1xuZXhwb3J0IHR5cGUgT3BlcmF0aW9uRGF0YSA9XG4gIHwge1xuICAgICAgdHlwZTogXCJyb3RhdGVYXCIgfCBcInJvdGF0ZVlcIiB8IFwicm90YXRlWlwiO1xuICAgICAgYW5nbGU6IG51bWJlcjtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJ0cmFuc2xhdGVcIjtcbiAgICAgIHg6IG51bWJlcjtcbiAgICAgIHk6IG51bWJlcjtcbiAgICAgIHo6IG51bWJlcjtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJzY2FsZVwiO1xuICAgICAgZmFjdG9yWDogbnVtYmVyO1xuICAgICAgZmFjdG9yWTogbnVtYmVyO1xuICAgICAgZmFjdG9yWjogbnVtYmVyO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcInBlcnNwZWN0aXZlXCI7XG4gICAgICBmaWVsZE9mVmlld0luUmFkaWFuczogbnVtYmVyO1xuICAgICAgYXNwZWN0OiBudW1iZXI7XG4gICAgICBuZWFyOiBudW1iZXI7XG4gICAgICBmYXI6IG51bWJlcjtcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJtYXRyaXhcIjtcbiAgICAgIG1hdHJpeDogTWF0cml4M0Q7XG4gICAgfTtcbmV4cG9ydCBmdW5jdGlvbiBJREVOVElUWV9NQVRSSVgoKSB7XG4gIHJldHVybiBbXG4gICAgWzEsIDAsIDAsIDBdLCAvLyBjb3MsIC1zaW4sID9cbiAgICBbMCwgMSwgMCwgMF0sIC8vIHNpbiwgY29zLCA/XG4gICAgWzAsIDAsIDEsIDBdLCAvLyBUcmFuc2xhdGlvblgsIFRyYW5zbGF0aW9uWSwgP1xuICAgIFswLCAwLCAwLCAxXSxcbiAgXSBhcyBNYXRyaXgzRDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZU1hdHJpeEZyb21PcGVyYXRpb25zKFxuICAuLi5vcGVyYXRpb25zOiBPcGVyYXRpb25EYXRhW11cbik6IE1hdHJpeDNEIHtcbiAgbGV0IHJlc3VsdGluZ01hdHJpeDogTWF0cml4M0QgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGZvciAobGV0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgY29uc3QgbWF0cml4ID1cbiAgICAgIG9wZXJhdGlvbi50eXBlID09PSBcIm1hdHJpeFwiID8gb3BlcmF0aW9uLm1hdHJpeCA6IElERU5USVRZX01BVFJJWCgpO1xuICAgIHN3aXRjaCAob3BlcmF0aW9uLnR5cGUpIHtcbiAgICAgIGNhc2UgXCJwZXJzcGVjdGl2ZVwiOlxuICAgICAgICBjb25zdCBmID0gTWF0aC50YW4oXG4gICAgICAgICAgTWF0aC5QSSAqIDAuNSAtIDAuNSAqIG9wZXJhdGlvbi5maWVsZE9mVmlld0luUmFkaWFuc1xuICAgICAgICApO1xuICAgICAgICBjb25zdCByYW5nZUludiA9IDEuMCAvIChvcGVyYXRpb24ubmVhciAtIG9wZXJhdGlvbi5mYXIpO1xuXG4gICAgICAgIG1hdHJpeFswXVswXSA9IGYgLyBvcGVyYXRpb24uYXNwZWN0O1xuICAgICAgICBtYXRyaXhbMV1bMV0gPSBmO1xuICAgICAgICBtYXRyaXhbMl1bMl0gPSAob3BlcmF0aW9uLm5lYXIgKyBvcGVyYXRpb24uZmFyKSAqIHJhbmdlSW52O1xuICAgICAgICBtYXRyaXhbMl1bM10gPSAtMTtcbiAgICAgICAgbWF0cml4WzNdWzJdID0gb3BlcmF0aW9uLm5lYXIgKiBvcGVyYXRpb24uZmFyICogcmFuZ2VJbnYgKiAyO1xuICAgICAgICBtYXRyaXhbM11bM10gPSAwO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJ0cmFuc2xhdGVcIjpcbiAgICAgICAgbWF0cml4WzNdWzBdID0gb3BlcmF0aW9uLng7XG4gICAgICAgIG1hdHJpeFszXVsxXSA9IG9wZXJhdGlvbi55O1xuICAgICAgICBtYXRyaXhbM11bMl0gPSBvcGVyYXRpb24uejtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwicm90YXRlWFwiOlxuICAgICAgY2FzZSBcInJvdGF0ZVlcIjpcbiAgICAgIGNhc2UgXCJyb3RhdGVaXCI6XG4gICAgICAgIGNvbnN0IGFuZ2xlVG9SYWRpYW5zID0gKG9wZXJhdGlvbi5hbmdsZSAqIE1hdGguUEkpIC8gMTgwO1xuICAgICAgICBjb25zdCBzaW5BbmdsZSA9IE1hdGguc2luKGFuZ2xlVG9SYWRpYW5zKTtcbiAgICAgICAgY29uc3QgY29zQW5nbGUgPSBNYXRoLmNvcyhhbmdsZVRvUmFkaWFucyk7XG4gICAgICAgIHN3aXRjaCAob3BlcmF0aW9uLnR5cGUpIHtcbiAgICAgICAgICBjYXNlIFwicm90YXRlWlwiOlxuICAgICAgICAgICAgbWF0cml4WzBdWzBdID0gY29zQW5nbGU7XG4gICAgICAgICAgICBtYXRyaXhbMV1bMV0gPSBjb3NBbmdsZTtcbiAgICAgICAgICAgIG1hdHJpeFsxXVswXSA9IC1zaW5BbmdsZTtcbiAgICAgICAgICAgIG1hdHJpeFswXVsxXSA9IHNpbkFuZ2xlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSBcInJvdGF0ZVlcIjpcbiAgICAgICAgICAgIG1hdHJpeFswXVswXSA9IGNvc0FuZ2xlO1xuICAgICAgICAgICAgbWF0cml4WzJdWzJdID0gY29zQW5nbGU7XG4gICAgICAgICAgICBtYXRyaXhbMF1bMl0gPSAtc2luQW5nbGU7XG4gICAgICAgICAgICBtYXRyaXhbMl1bMF0gPSBzaW5BbmdsZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgXCJyb3RhdGVYXCI6XG4gICAgICAgICAgICBtYXRyaXhbMV1bMV0gPSBjb3NBbmdsZTtcbiAgICAgICAgICAgIG1hdHJpeFsyXVsyXSA9IGNvc0FuZ2xlO1xuICAgICAgICAgICAgbWF0cml4WzJdWzFdID0gLXNpbkFuZ2xlO1xuICAgICAgICAgICAgbWF0cml4WzFdWzJdID0gc2luQW5nbGU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgXCJzY2FsZVwiOlxuICAgICAgICBtYXRyaXhbMF1bMF0gPSBvcGVyYXRpb24uZmFjdG9yWDtcbiAgICAgICAgbWF0cml4WzFdWzFdID0gb3BlcmF0aW9uLmZhY3Rvclk7XG4gICAgICAgIG1hdHJpeFsyXVsyXSA9IG9wZXJhdGlvbi5mYWN0b3JaO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHJlc3VsdGluZ01hdHJpeCkge1xuICAgICAgcmVzdWx0aW5nTWF0cml4ID0gbXVsdGlwbHlNYXRyaXhlcyhyZXN1bHRpbmdNYXRyaXgsIG1hdHJpeCkgYXMgTWF0cml4M0Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdGluZ01hdHJpeCA9IG1hdHJpeDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0aW5nTWF0cml4IHx8IElERU5USVRZX01BVFJJWCgpO1xufVxuXG50eXBlIE51bWJlck1hdHJpeCA9IHJlYWRvbmx5IChyZWFkb25seSBudW1iZXJbXSlbXTtcbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBseU1hdHJpeGVzPFggZXh0ZW5kcyBOdW1iZXJNYXRyaXg+KFxuICBtYXRyaXgxOiBYLFxuICBtYXRyaXgyOiBOdW1iZXJNYXRyaXggJiB7IGxlbmd0aDogWFtudW1iZXJdW1wibGVuZ3RoXCJdIH1cbikge1xuICBjb25zdCByZXN1bHRpbmdNYXRyaXg6IG51bWJlcltdW10gPSBbXTtcbiAgaWYgKFxuICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgJiZcbiAgICBtYXRyaXgyLmxlbmd0aCAhPT0gbWF0cml4MVswXS5sZW5ndGhcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGb3IgdGhlIG11bHRpcGxpY2F0aW9uIG9mIG1hdHJpeGVzIHRvIHdvcmsgeW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgbWF0cml4MSBjb250YWluaW5nIHRoZSBhbW91bnQgb2YgY29sdW1ucyBhcyB0aGUgc2FtZSBhbW91bnQgb2Ygcm93cyBmcm9tIG1hdHJpeCAyLlxuWW91IHByb3ZpZGVkICR7bWF0cml4MVswXS5sZW5ndGh9IGNvbHVtbnMgYW5kICR7bWF0cml4Mi5sZW5ndGh9IHJvd3NgKTtcbiAgfVxuICBmb3IgKGxldCBpMCBpbiBtYXRyaXgxKSB7XG4gICAgZm9yIChsZXQgaSBpbiBtYXRyaXgyWzBdKSB7XG4gICAgICBsZXQgZGltZW5zaW9uUmVzdWx0ID0gMDtcbiAgICAgIGZvciAobGV0IGkyIGluIG1hdHJpeDFbMF0pIHtcbiAgICAgICAgZGltZW5zaW9uUmVzdWx0ICs9IG1hdHJpeDFbaTBdW2kyXSAqIG1hdHJpeDJbaTJdW2ldO1xuICAgICAgfVxuICAgICAgaWYgKCFyZXN1bHRpbmdNYXRyaXhbaTBdKSByZXN1bHRpbmdNYXRyaXhbaTBdID0gW107XG4gICAgICByZXN1bHRpbmdNYXRyaXhbaTBdW2ldID0gZGltZW5zaW9uUmVzdWx0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0aW5nTWF0cml4O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW52ZXJ0TWF0cml4KG1hdHJpeDogTWF0cml4M0QpIHtcbiAgY29uc3QgbSA9IGZsYXR0ZW5NYXRyaXgobWF0cml4KTtcbiAgbGV0IGRldDogbnVtYmVyID0gMDtcbiAgY29uc3QgaW52ID0gW107XG5cbiAgaW52WzBdID1cbiAgICBtWzVdICogbVsxMF0gKiBtWzE1XSAtXG4gICAgbVs1XSAqIG1bMTFdICogbVsxNF0gLVxuICAgIG1bOV0gKiBtWzZdICogbVsxNV0gK1xuICAgIG1bOV0gKiBtWzddICogbVsxNF0gK1xuICAgIG1bMTNdICogbVs2XSAqIG1bMTFdIC1cbiAgICBtWzEzXSAqIG1bN10gKiBtWzEwXTtcblxuICBpbnZbNF0gPVxuICAgIC1tWzRdICogbVsxMF0gKiBtWzE1XSArXG4gICAgbVs0XSAqIG1bMTFdICogbVsxNF0gK1xuICAgIG1bOF0gKiBtWzZdICogbVsxNV0gLVxuICAgIG1bOF0gKiBtWzddICogbVsxNF0gLVxuICAgIG1bMTJdICogbVs2XSAqIG1bMTFdICtcbiAgICBtWzEyXSAqIG1bN10gKiBtWzEwXTtcblxuICBpbnZbOF0gPVxuICAgIG1bNF0gKiBtWzldICogbVsxNV0gLVxuICAgIG1bNF0gKiBtWzExXSAqIG1bMTNdIC1cbiAgICBtWzhdICogbVs1XSAqIG1bMTVdICtcbiAgICBtWzhdICogbVs3XSAqIG1bMTNdICtcbiAgICBtWzEyXSAqIG1bNV0gKiBtWzExXSAtXG4gICAgbVsxMl0gKiBtWzddICogbVs5XTtcblxuICBpbnZbMTJdID1cbiAgICAtbVs0XSAqIG1bOV0gKiBtWzE0XSArXG4gICAgbVs0XSAqIG1bMTBdICogbVsxM10gK1xuICAgIG1bOF0gKiBtWzVdICogbVsxNF0gLVxuICAgIG1bOF0gKiBtWzZdICogbVsxM10gLVxuICAgIG1bMTJdICogbVs1XSAqIG1bMTBdICtcbiAgICBtWzEyXSAqIG1bNl0gKiBtWzldO1xuXG4gIGludlsxXSA9XG4gICAgLW1bMV0gKiBtWzEwXSAqIG1bMTVdICtcbiAgICBtWzFdICogbVsxMV0gKiBtWzE0XSArXG4gICAgbVs5XSAqIG1bMl0gKiBtWzE1XSAtXG4gICAgbVs5XSAqIG1bM10gKiBtWzE0XSAtXG4gICAgbVsxM10gKiBtWzJdICogbVsxMV0gK1xuICAgIG1bMTNdICogbVszXSAqIG1bMTBdO1xuXG4gIGludls1XSA9XG4gICAgbVswXSAqIG1bMTBdICogbVsxNV0gLVxuICAgIG1bMF0gKiBtWzExXSAqIG1bMTRdIC1cbiAgICBtWzhdICogbVsyXSAqIG1bMTVdICtcbiAgICBtWzhdICogbVszXSAqIG1bMTRdICtcbiAgICBtWzEyXSAqIG1bMl0gKiBtWzExXSAtXG4gICAgbVsxMl0gKiBtWzNdICogbVsxMF07XG5cbiAgaW52WzldID1cbiAgICAtbVswXSAqIG1bOV0gKiBtWzE1XSArXG4gICAgbVswXSAqIG1bMTFdICogbVsxM10gK1xuICAgIG1bOF0gKiBtWzFdICogbVsxNV0gLVxuICAgIG1bOF0gKiBtWzNdICogbVsxM10gLVxuICAgIG1bMTJdICogbVsxXSAqIG1bMTFdICtcbiAgICBtWzEyXSAqIG1bM10gKiBtWzldO1xuXG4gIGludlsxM10gPVxuICAgIG1bMF0gKiBtWzldICogbVsxNF0gLVxuICAgIG1bMF0gKiBtWzEwXSAqIG1bMTNdIC1cbiAgICBtWzhdICogbVsxXSAqIG1bMTRdICtcbiAgICBtWzhdICogbVsyXSAqIG1bMTNdICtcbiAgICBtWzEyXSAqIG1bMV0gKiBtWzEwXSAtXG4gICAgbVsxMl0gKiBtWzJdICogbVs5XTtcblxuICBpbnZbMl0gPVxuICAgIG1bMV0gKiBtWzZdICogbVsxNV0gLVxuICAgIG1bMV0gKiBtWzddICogbVsxNF0gLVxuICAgIG1bNV0gKiBtWzJdICogbVsxNV0gK1xuICAgIG1bNV0gKiBtWzNdICogbVsxNF0gK1xuICAgIG1bMTNdICogbVsyXSAqIG1bN10gLVxuICAgIG1bMTNdICogbVszXSAqIG1bNl07XG5cbiAgaW52WzZdID1cbiAgICAtbVswXSAqIG1bNl0gKiBtWzE1XSArXG4gICAgbVswXSAqIG1bN10gKiBtWzE0XSArXG4gICAgbVs0XSAqIG1bMl0gKiBtWzE1XSAtXG4gICAgbVs0XSAqIG1bM10gKiBtWzE0XSAtXG4gICAgbVsxMl0gKiBtWzJdICogbVs3XSArXG4gICAgbVsxMl0gKiBtWzNdICogbVs2XTtcblxuICBpbnZbMTBdID1cbiAgICBtWzBdICogbVs1XSAqIG1bMTVdIC1cbiAgICBtWzBdICogbVs3XSAqIG1bMTNdIC1cbiAgICBtWzRdICogbVsxXSAqIG1bMTVdICtcbiAgICBtWzRdICogbVszXSAqIG1bMTNdICtcbiAgICBtWzEyXSAqIG1bMV0gKiBtWzddIC1cbiAgICBtWzEyXSAqIG1bM10gKiBtWzVdO1xuXG4gIGludlsxNF0gPVxuICAgIC1tWzBdICogbVs1XSAqIG1bMTRdICtcbiAgICBtWzBdICogbVs2XSAqIG1bMTNdICtcbiAgICBtWzRdICogbVsxXSAqIG1bMTRdIC1cbiAgICBtWzRdICogbVsyXSAqIG1bMTNdIC1cbiAgICBtWzEyXSAqIG1bMV0gKiBtWzZdICtcbiAgICBtWzEyXSAqIG1bMl0gKiBtWzVdO1xuXG4gIGludlszXSA9XG4gICAgLW1bMV0gKiBtWzZdICogbVsxMV0gK1xuICAgIG1bMV0gKiBtWzddICogbVsxMF0gK1xuICAgIG1bNV0gKiBtWzJdICogbVsxMV0gLVxuICAgIG1bNV0gKiBtWzNdICogbVsxMF0gLVxuICAgIG1bOV0gKiBtWzJdICogbVs3XSArXG4gICAgbVs5XSAqIG1bM10gKiBtWzZdO1xuXG4gIGludls3XSA9XG4gICAgbVswXSAqIG1bNl0gKiBtWzExXSAtXG4gICAgbVswXSAqIG1bN10gKiBtWzEwXSAtXG4gICAgbVs0XSAqIG1bMl0gKiBtWzExXSArXG4gICAgbVs0XSAqIG1bM10gKiBtWzEwXSArXG4gICAgbVs4XSAqIG1bMl0gKiBtWzddIC1cbiAgICBtWzhdICogbVszXSAqIG1bNl07XG5cbiAgaW52WzExXSA9XG4gICAgLW1bMF0gKiBtWzVdICogbVsxMV0gK1xuICAgIG1bMF0gKiBtWzddICogbVs5XSArXG4gICAgbVs0XSAqIG1bMV0gKiBtWzExXSAtXG4gICAgbVs0XSAqIG1bM10gKiBtWzldIC1cbiAgICBtWzhdICogbVsxXSAqIG1bN10gK1xuICAgIG1bOF0gKiBtWzNdICogbVs1XTtcblxuICBpbnZbMTVdID1cbiAgICBtWzBdICogbVs1XSAqIG1bMTBdIC1cbiAgICBtWzBdICogbVs2XSAqIG1bOV0gLVxuICAgIG1bNF0gKiBtWzFdICogbVsxMF0gK1xuICAgIG1bNF0gKiBtWzJdICogbVs5XSArXG4gICAgbVs4XSAqIG1bMV0gKiBtWzZdIC1cbiAgICBtWzhdICogbVsyXSAqIG1bNV07XG5cbiAgZGV0ID0gbVswXSAqIGludlswXSArIG1bMV0gKiBpbnZbNF0gKyBtWzJdICogaW52WzhdICsgbVszXSAqIGludlsxMl07XG5cbiAgaWYgKGRldCA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIkRldGVybWluYXRvciBpcyBlcXVhbCB0byAwLiBUaGlzIG1hdHJpeCBjYW5ub3QgYmUgaW52ZXJ0ZWRcIlxuICAgICk7XG5cbiAgZGV0ID0gMS4wIC8gZGV0O1xuXG4gIHJldHVybiBpbnYucmVkdWNlKChyLCB2YWwsIGkpID0+IHtcbiAgICBjb25zdCByb3cgPSBNYXRoLmZsb29yKGkgLyA0KTtcbiAgICBpZiAoIXJbcm93XSkgcltyb3ddID0gW107XG4gICAgcltyb3ddW2kgJSA0XSA9IHZhbCAqIGRldDtcbiAgICByZXR1cm4gcjtcbiAgfSwgW10gYXMgbnVtYmVyW11bXSkgYXMgTWF0cml4M0Q7XG59XG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbk1hdHJpeChtYXRyaXg6IG51bWJlcltdW10pIHtcbiAgcmV0dXJuIG1hdHJpeC5yZWR1Y2UoKGYsIGRpbWVuc2lvbikgPT4gWy4uLmYsIC4uLmRpbWVuc2lvbl0sIFtdIGFzIG51bWJlcltdKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQWtDTyxTQUFTQSxlQUFlQSxDQUFBLEVBQUc7RUFDaEMsT0FBTyxDQUNMLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0VBQUU7RUFDZCxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUFFO0VBQ2QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7RUFBRTtFQUNkLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ2I7QUFDSDtBQUNPLFNBQVNDLDRCQUE0QkEsQ0FBQSxFQUVoQztFQUNWLElBQUlDLGVBQXFDLEdBQUdDLFNBQVM7RUFBQyxTQUFBQyxJQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxFQUZuREMsVUFBVSxPQUFBQyxLQUFBLENBQUFKLElBQUEsR0FBQUssSUFBQSxNQUFBQSxJQUFBLEdBQUFMLElBQUEsRUFBQUssSUFBQTtJQUFWRixVQUFVLENBQUFFLElBQUEsSUFBQUosU0FBQSxDQUFBSSxJQUFBO0VBQUE7RUFHYixLQUFLLElBQUlDLFNBQVMsSUFBSUgsVUFBVSxFQUFFO0lBQ2hDLE1BQU1JLE1BQU0sR0FDVkQsU0FBUyxDQUFDRSxJQUFJLEtBQUssUUFBUSxHQUFHRixTQUFTLENBQUNDLE1BQU0sR0FBR1gsZUFBZSxDQUFDLENBQUM7SUFDcEUsUUFBUVUsU0FBUyxDQUFDRSxJQUFJO01BQ3BCLEtBQUssYUFBYTtRQUNoQixNQUFNQyxDQUFD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LEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUM7RUFFdEJHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FDSixDQUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNyQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBRXRCRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQ0pILENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNwQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNwQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFFckJHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FDTCxDQUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNwQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRXJCRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQ0osQ0FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDckJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ3BCQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ3BCQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQztFQUV0QkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUNKSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNwQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDO0VBRXRCRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQ0osQ0FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ3BCQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ3BCQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUVyQkcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUNMSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRXJCRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQ0pILENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFFckJHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FDSixDQUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNwQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRXJCRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQ0xILENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFFckJHLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FDTCxDQUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNwQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRXJCRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQ0osQ0FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQ2xCQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUVwQkcsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUNKSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDbkJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FDbEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRXBCRyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQ0wsQ0FBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FDcEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQ2xCQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FDbEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQ2xCQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQztFQUVwQkcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUNMSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUNuQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FDbEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQ25CQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUNsQkEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FDbEJBLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHQSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRXBCRSxHQUFHLEdBQUdGLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0csR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHSCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUdHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBR0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUdILENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0csR0FBRyxDQUFDLEVBQUUsQ0FBQztFQUVwRSxJQUFJRCxHQUFHLEtBQUssQ0FBQyxFQUNYLE1BQU0sSUFBSVQsS0FBSyxDQUNiLDREQUNGLENBQUM7RUFFSFMsR0FBRyxHQUFHLEdBQUcsR0FBR0EsR0FBRztFQUVmLE9BQU9DLEdBQUcsQ0FBQ0MsTUFBTSxDQUFDLENBQUNDLENBQUMsRUFBRUMsR0FBRyxFQUFFVixDQUFDLEtBQUs7SUFDL0IsTUFBTVcsR0FBRyxHQUFHeEMsSUFBSSxDQUFDeUMsS0FBSyxDQUFDWixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLElBQUksQ0FBQ1MsQ0FBQyxDQUFDRSxHQUFHLENBQUMsRUFBRUYsQ0FBQyxDQUFDRSxHQUFHLENBQUMsR0FBRyxFQUFFO0lBQ3hCRixDQUFDLENBQUNFLEdBQUcsQ0FBQyxDQUFDWCxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUdVLEdBQUcsR0FBR0osR0FBRztJQUN6QixPQUFPRyxDQUFDO0VBQ1YsQ0FBQyxFQUFFLEVBQWdCLENBQUM7QUFDdEI7QUFDTyxTQUFTSixhQUFhQSxDQUFDckMsTUFBa0IsRUFBRTtFQUNoRCxPQUFPQSxNQUFNLENBQUN3QyxNQUFNLENBQUMsQ0FBQ3RDLENBQUMsRUFBRTJDLFNBQVMsS0FBSyxDQUFDLEdBQUczQyxDQUFDLEVBQUUsR0FBRzJDLFNBQVMsQ0FBQyxFQUFFLEVBQWMsQ0FBQztBQUM5RSJ9
|
|
@@ -1,80 +1,97 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
];
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
...BASE_VALIDATION,
|
|
33
|
-
];
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _OneUIProvider = require("../../context/OneUIProvider");
|
|
9
|
+
var _Input = _interopRequireDefault(require("../Input"));
|
|
10
|
+
var _Text = _interopRequireDefault(require("../Text"));
|
|
11
|
+
var _PasswordInputModule = _interopRequireDefault(require("./PasswordInput.module.scss"));
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
14
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
15
|
+
const BASE_VALIDATION = [{
|
|
16
|
+
code: "size",
|
|
17
|
+
validate: pass => pass.length >= 8
|
|
18
|
+
}];
|
|
19
|
+
const RULES = [{
|
|
20
|
+
code: "duplication",
|
|
21
|
+
validate: pass => {
|
|
22
|
+
for (let i = 0; i < pass.length; i++) {
|
|
23
|
+
const charCode = pass.charCodeAt(i);
|
|
24
|
+
const [firstNext, secondNext] = [pass.charCodeAt(i + 1) || 0, pass.charCodeAt(i + 2) || 0];
|
|
25
|
+
if (firstNext - charCode === 1 && secondNext - firstNext === 1) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
}, ...BASE_VALIDATION];
|
|
34
32
|
function _PasswordInput(props, ref) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
33
|
+
const [isPasswordVisibile, setIPV] = (0, _react.useState)(false);
|
|
34
|
+
const {
|
|
35
|
+
passwordHidden,
|
|
36
|
+
passwordVisible
|
|
37
|
+
} = (0, _OneUIProvider.useOneUIConfig)("component.passwordInput.iconSrc");
|
|
38
|
+
function _validatePassword(password) {
|
|
39
|
+
switch (props.mode) {
|
|
40
|
+
case "creation":
|
|
41
|
+
return RULES.reduce((isValid, R) => isValid && R.validate(password), true);
|
|
42
|
+
case "comparision":
|
|
43
|
+
return password === props.otherPassword;
|
|
44
|
+
case "input":
|
|
45
|
+
return BASE_VALIDATION.reduce((isValid, R) => isValid && R.validate(password), true);
|
|
46
46
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
47
|
+
}
|
|
48
|
+
(0, _react.useImperativeHandle)(ref, () => ({
|
|
49
|
+
validatePassword: pass => _validatePassword(pass)
|
|
50
|
+
}));
|
|
51
|
+
function _onChange(e) {
|
|
52
|
+
const password = e.target.value;
|
|
53
|
+
switch (props.mode) {
|
|
54
|
+
case "comparision":
|
|
55
|
+
case "creation":
|
|
56
|
+
props.onChange(password, _validatePassword(password));
|
|
57
|
+
break;
|
|
58
|
+
case "input":
|
|
59
|
+
props.onChange(password);
|
|
60
|
+
break;
|
|
61
61
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
62
|
+
}
|
|
63
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
64
|
+
className: "".concat(_PasswordInputModule.default.inputContainer, " ").concat(_PasswordInputModule.default[props.mode], " ").concat(_PasswordInputModule.default.icon)
|
|
65
|
+
}, /*#__PURE__*/_react.default.createElement(_Input.default, {
|
|
66
|
+
value: props.value,
|
|
67
|
+
onChange: _onChange,
|
|
68
|
+
type: !isPasswordVisibile ? "password" : "",
|
|
69
|
+
icon: {
|
|
70
|
+
src: isPasswordVisibile ? passwordHidden : passwordVisible,
|
|
71
|
+
onMouseLeave: () => setIPV(false),
|
|
72
|
+
onMouseDown: () => setIPV(true),
|
|
73
|
+
onMouseUp: () => setIPV(false),
|
|
74
|
+
onTouchMove: () => setIPV(false),
|
|
75
|
+
onTouchStart: () => setIPV(true),
|
|
76
|
+
onTouchEnd: () => setIPV(false)
|
|
77
|
+
},
|
|
78
|
+
error: props.mode === "comparision" && !_validatePassword(props.value) ? props.messages.passwordsAreDifferent : props.error,
|
|
79
|
+
disabled: props.disabled,
|
|
80
|
+
placeholder: props.placeholder
|
|
81
|
+
}), props.mode === "creation" && /*#__PURE__*/_react.default.createElement("div", {
|
|
82
|
+
className: _PasswordInputModule.default.rules
|
|
83
|
+
}, /*#__PURE__*/_react.default.createElement(_Text.default, {
|
|
84
|
+
type: "caption"
|
|
85
|
+
}, props.messages.rulesTitle), RULES.map(R => /*#__PURE__*/_react.default.createElement(_Text.default, {
|
|
86
|
+
key: R.code,
|
|
87
|
+
type: R.validate(props.value) ? "caption" : "error"
|
|
88
|
+
}, "- ", props.messages.invalidRules[R.code]))));
|
|
73
89
|
}
|
|
90
|
+
|
|
74
91
|
/**
|
|
75
92
|
* A password input component that shows and hides the password text
|
|
76
93
|
* and provides validation for password strength or matching.
|
|
77
94
|
*/
|
|
78
|
-
const PasswordInput = (0,
|
|
79
|
-
exports.default = PasswordInput;
|
|
80
|
-
//# sourceMappingURL=PasswordInput.js.map
|
|
95
|
+
const PasswordInput = /*#__PURE__*/(0, _react.forwardRef)(_PasswordInput);
|
|
96
|
+
var _default = exports.default = PasswordInput;
|
|
97
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfT25lVUlQcm92aWRlciIsIl9JbnB1dCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfVGV4dCIsIl9QYXNzd29yZElucHV0TW9kdWxlIiwib2JqIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIkJBU0VfVkFMSURBVElPTiIsImNvZGUiLCJ2YWxpZGF0ZSIsInBhc3MiLCJsZW5ndGgiLCJSVUxFUyIsImkiLCJjaGFyQ29kZSIsImNoYXJDb2RlQXQiLCJmaXJzdE5leHQiLCJzZWNvbmROZXh0IiwiX1Bhc3N3b3JkSW5wdXQiLCJwcm9wcyIsInJlZiIsImlzUGFzc3dvcmRWaXNpYmlsZSIsInNldElQViIsInVzZVN0YXRlIiwicGFzc3dvcmRIaWRkZW4iLCJwYXNzd29yZFZpc2libGUiLCJ1c2VPbmVVSUNvbmZpZyIsIl92YWxpZGF0ZVBhc3N3b3JkIiwicGFzc3dvcmQiLCJtb2RlIiwicmVkdWNlIiwiaXNWYWxpZCIsIlIiLCJvdGhlclBhc3N3b3JkIiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsInZhbGlkYXRlUGFzc3dvcmQiLCJfb25DaGFuZ2UiLCJlIiwidGFyZ2V0IiwidmFsdWUiLCJvbkNoYW5nZSIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJjb25jYXQiLCJTdHlsZXMiLCJpbnB1dENvbnRhaW5lciIsImljb24iLCJ0eXBlIiwic3JjIiwib25Nb3VzZUxlYXZlIiwib25Nb3VzZURvd24iLCJvbk1vdXNlVXAiLCJvblRvdWNoTW92ZSIsIm9uVG91Y2hTdGFydCIsIm9uVG91Y2hFbmQiLCJlcnJvciIsIm1lc3NhZ2VzIiwicGFzc3dvcmRzQXJlRGlmZmVyZW50IiwiZGlzYWJsZWQiLCJwbGFjZWhvbGRlciIsInJ1bGVzIiwicnVsZXNUaXRsZSIsIm1hcCIsImludmFsaWRSdWxlcyIsIlBhc3N3b3JkSW5wdXQiLCJmb3J3YXJkUmVmIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvUGFzc3dvcmRJbnB1dC9QYXNzd29yZElucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtcbiAgQ2hhbmdlRXZlbnQsXG4gIEZvcndhcmRlZFJlZixcbiAgZm9yd2FyZFJlZixcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlU3RhdGUsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlT25lVUlDb25maWcgfSBmcm9tIFwiLi4vLi4vY29udGV4dC9PbmVVSVByb3ZpZGVyXCI7XG5pbXBvcnQgSW5wdXQgZnJvbSBcIi4uL0lucHV0XCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwiLi4vVGV4dFwiO1xuaW1wb3J0IFN0eWxlcyBmcm9tIFwiLi9QYXNzd29yZElucHV0Lm1vZHVsZS5zY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEFWQUlMQUJMRV9QQVNTV09SRF9WQUxJREFUSU9OX1JVTEVTID0gXCJzaXplXCIgfCBcImR1cGxpY2F0aW9uXCI7XG5cbmNvbnN0IEJBU0VfVkFMSURBVElPTiA9IFtcbiAgeyBjb2RlOiBcInNpemVcIiwgdmFsaWRhdGU6IChwYXNzOiBzdHJpbmcpID0+IHBhc3MubGVuZ3RoID49IDggfSxcbl0gYXMgY29uc3Q7XG5jb25zdCBSVUxFUyA9IFtcbiAge1xuICAgIGNvZGU6IFwiZHVwbGljYXRpb25cIixcbiAgICB2YWxpZGF0ZTogKHBhc3M6IHN0cmluZykgPT4ge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNoYXJDb2RlID0gcGFzcy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBjb25zdCBbZmlyc3ROZXh0LCBzZWNvbmROZXh0XSA9IFtcbiAgICAgICAgICBwYXNzLmNoYXJDb2RlQXQoaSArIDEpIHx8IDAsXG4gICAgICAgICAgcGFzcy5jaGFyQ29kZUF0KGkgKyAyKSB8fCAwLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChmaXJzdE5leHQgLSBjaGFyQ29kZSA9PT0gMSAmJiBzZWNvbmROZXh0IC0gZmlyc3ROZXh0ID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICB9LFxuICAuLi5CQVNFX1ZBTElEQVRJT04sXG5dIGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBfUGFzc3dvcmRJbnB1dChcbiAgcHJvcHM6ICh7XG4gICAgdmFsdWU6IHN0cmluZztcbiAgICBlcnJvcj86IHN0cmluZztcbiAgfSAmIChcbiAgICB8IHtcbiAgICAgICAgbW9kZTogXCJpbnB1dFwiO1xuICAgICAgICBvbkNoYW5nZTogKHBhc3N3b3JkOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIG1vZGU6IFwiY3JlYXRpb25cIjtcbiAgICAgICAgb25DaGFuZ2U6IChwYXNzd29yZDogc3RyaW5nLCBpc1ZhbGlkOiBib29sZWFuKSA9PiB2b2lkO1xuICAgICAgICBtZXNzYWdlczoge1xuICAgICAgICAgIGludmFsaWRSdWxlczogeyBbciBpbiBBVkFJTEFCTEVfUEFTU1dPUkRfVkFMSURBVElPTl9SVUxFU106IHN0cmluZyB9O1xuICAgICAgICAgIHJ1bGVzVGl0bGU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgbW9kZTogXCJjb21wYXJpc2lvblwiO1xuICAgICAgICBvdGhlclBhc3N3b3JkOiBzdHJpbmc7XG4gICAgICAgIG9uQ2hhbmdlOiAocGFzc3dvcmQ6IHN0cmluZywgaXNFcXVhbDogYm9vbGVhbikgPT4gdm9pZDtcbiAgICAgICAgbWVzc2FnZXM6IHtcbiAgICAgICAgICBwYXNzd29yZHNBcmVEaWZmZXJlbnQ6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgKSkgJlxuICAgIE9taXQ8UmVhY3QuQ29tcG9uZW50UHJvcHM8dHlwZW9mIElucHV0PiwgXCJ2YWx1ZVwiIHwgXCJvbkNoYW5nZVwiIHwgXCJyZWZcIj4sXG4gIHJlZjogRm9yd2FyZGVkUmVmPHsgdmFsaWRhdGVQYXNzd29yZDogKHBhc3M6IHN0cmluZykgPT4gYm9vbGVhbiB9PlxuKSB7XG4gIGNvbnN0IFtpc1Bhc3N3b3JkVmlzaWJpbGUsIHNldElQVl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHsgcGFzc3dvcmRIaWRkZW4sIHBhc3N3b3JkVmlzaWJsZSB9ID0gdXNlT25lVUlDb25maWcoXG4gICAgXCJjb21wb25lbnQucGFzc3dvcmRJbnB1dC5pY29uU3JjXCJcbiAgKTtcbiAgZnVuY3Rpb24gX3ZhbGlkYXRlUGFzc3dvcmQocGFzc3dvcmQ6IHN0cmluZykge1xuICAgIHN3aXRjaCAocHJvcHMubW9kZSkge1xuICAgICAgY2FzZSBcImNyZWF0aW9uXCI6XG4gICAgICAgIHJldHVybiBSVUxFUy5yZWR1Y2UoXG4gICAgICAgICAgKGlzVmFsaWQsIFIpID0+IGlzVmFsaWQgJiYgUi52YWxpZGF0ZShwYXNzd29yZCksXG4gICAgICAgICAgdHJ1ZSBhcyBib29sZWFuXG4gICAgICAgICk7XG4gICAgICBjYXNlIFwiY29tcGFyaXNpb25cIjpcbiAgICAgICAgcmV0dXJuIHBhc3N3b3JkID09PSBwcm9wcy5vdGhlclBhc3N3b3JkO1xuICAgICAgY2FzZSBcImlucHV0XCI6XG4gICAgICAgIHJldHVybiBCQVNFX1ZBTElEQVRJT04ucmVkdWNlKFxuICAgICAgICAgIChpc1ZhbGlkLCBSKSA9PiBpc1ZhbGlkICYmIFIudmFsaWRhdGUocGFzc3dvcmQpLFxuICAgICAgICAgIHRydWUgYXMgYm9vbGVhblxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgIHZhbGlkYXRlUGFzc3dvcmQ6IChwYXNzKSA9PiBfdmFsaWRhdGVQYXNzd29yZChwYXNzKSxcbiAgfSkpO1xuXG4gIGZ1bmN0aW9uIF9vbkNoYW5nZShlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50Pikge1xuICAgIGNvbnN0IHBhc3N3b3JkID0gZS50YXJnZXQudmFsdWU7XG4gICAgc3dpdGNoIChwcm9wcy5tb2RlKSB7XG4gICAgICBjYXNlIFwiY29tcGFyaXNpb25cIjpcbiAgICAgIGNhc2UgXCJjcmVhdGlvblwiOlxuICAgICAgICBwcm9wcy5vbkNoYW5nZShwYXNzd29yZCwgX3ZhbGlkYXRlUGFzc3dvcmQocGFzc3dvcmQpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFwiaW5wdXRcIjpcbiAgICAgICAgcHJvcHMub25DaGFuZ2UocGFzc3dvcmQpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17YCR7U3R5bGVzLmlucHV0Q29udGFpbmVyfSAke1N0eWxlc1twcm9wcy5tb2RlXX0gJHtcbiAgICAgICAgU3R5bGVzLmljb25cbiAgICAgIH1gfVxuICAgID5cbiAgICAgIDxJbnB1dFxuICAgICAgICB2YWx1ZT17cHJvcHMudmFsdWV9XG4gICAgICAgIG9uQ2hhbmdlPXtfb25DaGFuZ2V9XG4gICAgICAgIHR5cGU9eyFpc1Bhc3N3b3JkVmlzaWJpbGUgPyBcInBhc3N3b3JkXCIgOiBcIlwifVxuICAgICAgICBpY29uPXt7XG4gICAgICAgICAgc3JjOiBpc1Bhc3N3b3JkVmlzaWJpbGUgPyBwYXNzd29yZEhpZGRlbiA6IHBhc3N3b3JkVmlzaWJsZSxcbiAgICAgICAgICBvbk1vdXNlTGVhdmU6ICgpID0+IHNldElQVihmYWxzZSksXG4gICAgICAgICAgb25Nb3VzZURvd246ICgpID0+IHNldElQVih0cnVlKSxcbiAgICAgICAgICBvbk1vdXNlVXA6ICgpID0+IHNldElQVihmYWxzZSksXG4gICAgICAgICAgb25Ub3VjaE1vdmU6ICgpID0+IHNldElQVihmYWxzZSksXG4gICAgICAgICAgb25Ub3VjaFN0YXJ0OiAoKSA9PiBzZXRJUFYodHJ1ZSksXG4gICAgICAgICAgb25Ub3VjaEVuZDogKCkgPT4gc2V0SVBWKGZhbHNlKSxcbiAgICAgICAgfX1cbiAgICAgICAgZXJyb3I9e1xuICAgICAgICAgIHByb3BzLm1vZGUgPT09IFwiY29tcGFyaXNpb25cIiAmJiAhX3ZhbGlkYXRlUGFzc3dvcmQocHJvcHMudmFsdWUpXG4gICAgICAgICAgICA/IHByb3BzLm1lc3NhZ2VzLnBhc3N3b3Jkc0FyZURpZmZlcmVudFxuICAgICAgICAgICAgOiBwcm9wcy5lcnJvclxuICAgICAgICB9XG4gICAgICAgIGRpc2FibGVkPXtwcm9wcy5kaXNhYmxlZH1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3Byb3BzLnBsYWNlaG9sZGVyfVxuICAgICAgLz5cbiAgICAgIHtwcm9wcy5tb2RlID09PSBcImNyZWF0aW9uXCIgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17U3R5bGVzLnJ1bGVzfSBkYXRhLXRlc3RpZD1cInBhc3N3b3JkLXJ1bGVzXCI+XG4gICAgICAgICAgPFRleHQgdHlwZT1cImNhcHRpb25cIj57cHJvcHMubWVzc2FnZXMucnVsZXNUaXRsZX08L1RleHQ+XG4gICAgICAgICAge1JVTEVTLm1hcCgoUikgPT4gKFxuICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAga2V5PXtSLmNvZGV9XG4gICAgICAgICAgICAgIHR5cGU9e1IudmFsaWRhdGUocHJvcHMudmFsdWUpID8gXCJjYXB0aW9uXCIgOiBcImVycm9yXCJ9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIC0ge3Byb3BzLm1lc3NhZ2VzLmludmFsaWRSdWxlc1tSLmNvZGVdfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbi8qKlxuICogQSBwYXNzd29yZCBpbnB1dCBjb21wb25lbnQgdGhhdCBzaG93cyBhbmQgaGlkZXMgdGhlIHBhc3N3b3JkIHRleHRcbiAqIGFuZCBwcm92aWRlcyB2YWxpZGF0aW9uIGZvciBwYXNzd29yZCBzdHJlbmd0aCBvciBtYXRjaGluZy5cbiAqL1xuY29uc3QgUGFzc3dvcmRJbnB1dCA9IGZvcndhcmRSZWYoX1Bhc3N3b3JkSW5wdXQpO1xuZXhwb3J0IGRlZmF1bHQgUGFzc3dvcmRJbnB1dDsiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQU9BLElBQUFDLGNBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLEtBQUEsR0FBQUQsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFLLG9CQUFBLEdBQUFGLHNCQUFBLENBQUFILE9BQUE7QUFBaUQsU0FBQUcsdUJBQUFHLEdBQUEsV0FBQUEsR0FBQSxJQUFBQSxHQUFBLENBQUFDLFVBQUEsR0FBQUQsR0FBQSxLQUFBRSxPQUFBLEVBQUFGLEdBQUE7QUFBQSxTQUFBRyx5QkFBQUMsV0FBQSxlQUFBQyxPQUFBLGtDQUFBQyxpQkFBQSxPQUFBRCxPQUFBLFFBQUFFLGdCQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMsV0FBQSxXQUFBQSxXQUFBLEdBQUFHLGdCQUFBLEdBQUFELGlCQUFBLEtBQUFGLFdBQUE7QUFBQSxTQUFBWCx3QkFBQU8sR0FBQSxFQUFBSSxXQUFBLFNBQUFBLFdBQUEsSUFBQUosR0FBQSxJQUFBQSxHQUFB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
|