@alfalab/core-components-pattern-lock 1.5.1 → 1.6.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/Component.responsive.js +23 -0
- package/components/base-pattern-lock/Component.d.ts +6 -0
- package/{Component.js → components/base-pattern-lock/Component.js} +17 -16
- package/{esm → components/base-pattern-lock}/index.css +8 -36
- package/components/base-pattern-lock/index.d.ts +1 -0
- package/components/base-pattern-lock/index.js +9 -0
- package/consts.js +2 -0
- package/cssm/Component.responsive.js +23 -0
- package/cssm/components/base-pattern-lock/Component.d.ts +6 -0
- package/cssm/{Component.js → components/base-pattern-lock/Component.js} +18 -17
- package/cssm/components/base-pattern-lock/index.d.ts +1 -0
- package/cssm/components/base-pattern-lock/index.js +9 -0
- package/cssm/{index.module.css → components/base-pattern-lock/index.module.css} +2 -30
- package/cssm/consts.js +2 -0
- package/cssm/desktop/Component.desktop.d.ts +6 -0
- package/cssm/desktop/Component.desktop.js +17 -0
- package/cssm/desktop/desktop.module.css +27 -0
- package/cssm/desktop/index.d.ts +2 -0
- package/cssm/desktop/index.js +9 -0
- package/cssm/hooks/use-pattern-lock-cleanup.d.ts +6 -0
- package/cssm/hooks/use-pattern-lock-cleanup.js +18 -0
- package/cssm/index.d.ts +1 -1
- package/cssm/index.js +2 -2
- package/cssm/mobile/Component.mobile.d.ts +6 -0
- package/cssm/mobile/Component.mobile.js +17 -0
- package/cssm/mobile/index.d.ts +2 -0
- package/cssm/mobile/index.js +9 -0
- package/cssm/mobile/mobile.module.css +47 -0
- package/cssm/shared/index.d.ts +1 -0
- package/cssm/shared/index.js +2 -0
- package/cssm/typings.d.ts +29 -4
- package/cssm/utils.js +12 -1
- package/desktop/Component.desktop.d.ts +6 -0
- package/desktop/Component.desktop.js +18 -0
- package/desktop/desktop.css +28 -0
- package/desktop/index.d.ts +2 -0
- package/desktop/index.js +9 -0
- package/desktop/package.json +3 -0
- package/esm/Component.responsive.js +15 -0
- package/esm/components/base-pattern-lock/Component.d.ts +6 -0
- package/esm/{Component.js → components/base-pattern-lock/Component.js} +17 -16
- package/{modern → esm/components/base-pattern-lock}/index.css +8 -36
- package/esm/components/base-pattern-lock/index.d.ts +1 -0
- package/esm/components/base-pattern-lock/index.js +1 -0
- package/esm/consts.js +2 -0
- package/esm/desktop/Component.desktop.d.ts +6 -0
- package/esm/desktop/Component.desktop.js +10 -0
- package/esm/desktop/desktop.css +28 -0
- package/esm/desktop/index.d.ts +2 -0
- package/esm/desktop/index.js +1 -0
- package/esm/hooks/use-pattern-lock-cleanup.d.ts +6 -0
- package/esm/hooks/use-pattern-lock-cleanup.js +14 -0
- package/esm/index.d.ts +1 -1
- package/esm/index.js +1 -1
- package/esm/mobile/Component.mobile.d.ts +6 -0
- package/esm/mobile/Component.mobile.js +10 -0
- package/esm/mobile/index.d.ts +2 -0
- package/esm/mobile/index.js +1 -0
- package/esm/mobile/mobile.css +48 -0
- package/esm/shared/index.d.ts +1 -0
- package/esm/shared/index.js +1 -0
- package/esm/typings.d.ts +29 -4
- package/esm/utils.js +12 -1
- package/hooks/use-pattern-lock-cleanup.d.ts +6 -0
- package/hooks/use-pattern-lock-cleanup.js +18 -0
- package/index.d.ts +1 -1
- package/index.js +2 -2
- package/mobile/Component.mobile.d.ts +6 -0
- package/mobile/Component.mobile.js +18 -0
- package/mobile/index.d.ts +2 -0
- package/mobile/index.js +9 -0
- package/mobile/mobile.css +48 -0
- package/mobile/package.json +3 -0
- package/modern/Component.responsive.js +13 -0
- package/modern/components/base-pattern-lock/Component.d.ts +6 -0
- package/modern/{Component.js → components/base-pattern-lock/Component.js} +14 -13
- package/{index.css → modern/components/base-pattern-lock/index.css} +8 -36
- package/modern/components/base-pattern-lock/index.d.ts +1 -0
- package/modern/components/base-pattern-lock/index.js +1 -0
- package/modern/consts.js +2 -0
- package/modern/desktop/Component.desktop.d.ts +6 -0
- package/modern/desktop/Component.desktop.js +9 -0
- package/modern/desktop/desktop.css +28 -0
- package/modern/desktop/index.d.ts +2 -0
- package/modern/desktop/index.js +1 -0
- package/modern/hooks/use-pattern-lock-cleanup.d.ts +6 -0
- package/modern/hooks/use-pattern-lock-cleanup.js +14 -0
- package/modern/index.d.ts +1 -1
- package/modern/index.js +1 -1
- package/modern/mobile/Component.mobile.d.ts +6 -0
- package/modern/mobile/Component.mobile.js +9 -0
- package/modern/mobile/index.d.ts +2 -0
- package/modern/mobile/index.js +1 -0
- package/modern/mobile/mobile.css +48 -0
- package/modern/shared/index.d.ts +1 -0
- package/modern/shared/index.js +1 -0
- package/modern/typings.d.ts +29 -4
- package/modern/utils.js +12 -1
- package/package.json +3 -3
- package/shared/index.d.ts +1 -0
- package/shared/index.js +2 -0
- package/src/Component.responsive.tsx +20 -0
- package/src/{Component.tsx → components/base-pattern-lock/Component.tsx} +33 -17
- package/src/components/base-pattern-lock/index.module.css +34 -0
- package/src/components/base-pattern-lock/index.ts +1 -0
- package/src/consts.ts +2 -0
- package/src/desktop/Component.desktop.tsx +11 -0
- package/src/desktop/desktop.module.css +15 -0
- package/src/desktop/index.ts +2 -0
- package/src/desktop/package.json +3 -0
- package/src/hooks/use-pattern-lock-cleanup.tsx +16 -0
- package/src/index.ts +1 -1
- package/src/mobile/Component.mobile.tsx +11 -0
- package/src/mobile/index.ts +2 -0
- package/src/{index.module.css → mobile/mobile.module.css} +1 -28
- package/src/mobile/package.json +3 -0
- package/src/shared/index.ts +1 -0
- package/src/typings.ts +28 -3
- package/src/utils.ts +11 -1
- package/src/vars.css +1 -0
- package/typings.d.ts +29 -4
- package/utils.js +12 -1
- /package/{Component.d.ts → Component.responsive.d.ts} +0 -0
- /package/cssm/{Component.d.ts → Component.responsive.d.ts} +0 -0
- /package/esm/{Component.d.ts → Component.responsive.d.ts} +0 -0
- /package/modern/{Component.d.ts → Component.responsive.d.ts} +0 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var React = require('react');
|
|
6
|
+
|
|
7
|
+
var usePatternLockCleanup = function (patternLockRef) {
|
|
8
|
+
var clear = React.useMemo(function () {
|
|
9
|
+
if (patternLockRef.current) {
|
|
10
|
+
patternLockRef.current.setInitialState();
|
|
11
|
+
}
|
|
12
|
+
}, [patternLockRef]);
|
|
13
|
+
return {
|
|
14
|
+
clear: clear,
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
exports.usePatternLockCleanup = usePatternLockCleanup;
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var Component_responsive = require('./Component.responsive.js');
|
|
6
6
|
var consts = require('./consts.js');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
exports.PatternLock =
|
|
10
|
+
exports.PatternLock = Component_responsive.PatternLock;
|
|
11
11
|
exports.THEME_STATE = consts.THEME_STATE;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { TPatternLockInstance } from 'react-canvas-pattern-lock';
|
|
4
|
+
import { CommonPatternLockProps } from "../typings";
|
|
5
|
+
declare const PatternLockMobile: React.ForwardRefExoticComponent<CommonPatternLockProps & React.RefAttributes<TPatternLockInstance>>;
|
|
6
|
+
export { PatternLockMobile };
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var tslib = require('tslib');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var components_basePatternLock_Component = require('../components/base-pattern-lock/Component.js');
|
|
8
|
+
|
|
9
|
+
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
|
|
10
|
+
|
|
11
|
+
var React__default = /*#__PURE__*/_interopDefaultCompat(React);
|
|
12
|
+
|
|
13
|
+
var styles = {"component":"pattern-lock__component_lng5u","forgotBtn":"pattern-lock__forgotBtn_lng5u"};
|
|
14
|
+
require('./mobile.css')
|
|
15
|
+
|
|
16
|
+
var PatternLockMobile = React.forwardRef(function (restProps, ref) { return React__default.default.createElement(components_basePatternLock_Component.BasePatternLock, tslib.__assign({}, restProps, { ref: ref, styles: styles })); });
|
|
17
|
+
|
|
18
|
+
exports.PatternLockMobile = PatternLockMobile;
|
package/mobile/index.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/* hash: 1t7io */
|
|
2
|
+
:root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
3
|
+
} /* deprecated */ :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
4
|
+
} :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
5
|
+
} :root {
|
|
6
|
+
} :root {
|
|
7
|
+
|
|
8
|
+
/* Hard */
|
|
9
|
+
|
|
10
|
+
/* Up */
|
|
11
|
+
|
|
12
|
+
/* Hard up */
|
|
13
|
+
} :root {
|
|
14
|
+
} :root {
|
|
15
|
+
--gap-xs: 8px;
|
|
16
|
+
--gap-s: 12px;
|
|
17
|
+
--gap-l: 20px;
|
|
18
|
+
--gap-xl: 24px;
|
|
19
|
+
--gap-2xl: 32px;
|
|
20
|
+
} :root {
|
|
21
|
+
} :root {
|
|
22
|
+
--size-s-height: 48px;
|
|
23
|
+
--size-m-height: 56px;
|
|
24
|
+
} :root {
|
|
25
|
+
--pattern-lock-max-width: 500px;
|
|
26
|
+
} .pattern-lock__component_lng5u {
|
|
27
|
+
max-width: var(--pattern-lock-max-width);
|
|
28
|
+
margin: var(--gap-xs) 0 var(--gap-xl) 0;
|
|
29
|
+
} .pattern-lock__forgotBtn_lng5u {
|
|
30
|
+
margin: var(--gap-xl) auto 0;
|
|
31
|
+
} @media screen and (min-width: 360px) {
|
|
32
|
+
.pattern-lock__forgotBtn_lng5u {
|
|
33
|
+
margin-top: var(--gap-2xl);
|
|
34
|
+
min-height: var(--size-s-height);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.pattern-lock__component_lng5u {
|
|
38
|
+
margin-bottom: var(--gap-s);
|
|
39
|
+
}
|
|
40
|
+
} @media screen and (min-width: 390px) {
|
|
41
|
+
.pattern-lock__forgotBtn_lng5u {
|
|
42
|
+
min-height: var(--size-m-height);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.pattern-lock__component_lng5u {
|
|
46
|
+
margin-bottom: var(--gap-l);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { useMatchMedia } from '@alfalab/core-components-mq/modern';
|
|
3
|
+
import { PatternLockDesktop } from './desktop/Component.desktop.js';
|
|
4
|
+
import { PatternLockMobile } from './mobile/Component.mobile.js';
|
|
5
|
+
|
|
6
|
+
const PatternLock = forwardRef(({ breakpoint = 1024, ...restProps }, ref) => {
|
|
7
|
+
const query = `(min-width: ${breakpoint}px)`;
|
|
8
|
+
const [isDesktop] = useMatchMedia(query);
|
|
9
|
+
const Component = isDesktop ? PatternLockDesktop : PatternLockMobile;
|
|
10
|
+
return React.createElement(Component, { ref: ref, ...restProps });
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
export { PatternLock };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { TPatternLockInstance } from 'react-canvas-pattern-lock';
|
|
4
|
+
import { CommonPatternLockProps, PrivatePatternLockProps } from "../../typings";
|
|
5
|
+
declare const BasePatternLock: React.ForwardRefExoticComponent<(CommonPatternLockProps & PrivatePatternLockProps) & React.RefAttributes<TPatternLockInstance>>;
|
|
6
|
+
export { BasePatternLock };
|
|
@@ -2,15 +2,14 @@ import React, { forwardRef, useState, useEffect } from 'react';
|
|
|
2
2
|
import { ReactCanvasPatternLock } from 'react-canvas-pattern-lock';
|
|
3
3
|
import cn from 'classnames';
|
|
4
4
|
import { ButtonMobile } from '@alfalab/core-components-button/modern/mobile';
|
|
5
|
-
import { Gap } from '@alfalab/core-components-gap/modern';
|
|
6
5
|
import { getDataTestId } from '@alfalab/core-components-shared/modern';
|
|
7
|
-
import { THEME_STATE, DEFAULT_EXTRA_BOUNDS, OBSERVE_OPTIONS, OBSERVABLE_TOKENS } from '
|
|
8
|
-
import { getSizes, getTheme, getColorByToken, getDefaultObserveTarget } from '
|
|
6
|
+
import { THEME_STATE, DEFAULT_EXTRA_BOUNDS, OBSERVE_OPTIONS, OBSERVABLE_TOKENS } from '../../consts.js';
|
|
7
|
+
import { getSizes, getTheme, getColorByToken, getDefaultObserveTarget } from '../../utils.js';
|
|
9
8
|
|
|
10
|
-
const
|
|
9
|
+
const commonStyles = {"component":"pattern-lock__component_8m1ld","hidden":"pattern-lock__hidden_8m1ld","message":"pattern-lock__message_8m1ld","error":"pattern-lock__error_8m1ld","forgotBtn":"pattern-lock__forgotBtn_8m1ld"};
|
|
11
10
|
require('./index.css')
|
|
12
11
|
|
|
13
|
-
const
|
|
12
|
+
const BasePatternLock = forwardRef(({ observeTokens = false, observerParams = {}, justifyNodes = 'space-between', className, error, dataTestId, forgotCodeBtnText = 'Забыли код?', showForgotCodeBtn = false, onForgotBtnClick, extraBounds = DEFAULT_EXTRA_BOUNDS, message, messageClassName, hover, styles = {}, ...restProps }, ref) => {
|
|
14
13
|
const [params, setParams] = useState();
|
|
15
14
|
useEffect(() => {
|
|
16
15
|
const { elementSizes, width, height } = getSizes();
|
|
@@ -40,14 +39,16 @@ const PatternLock = forwardRef(({ observeTokens = false, observerParams = {}, ju
|
|
|
40
39
|
return () => styleObserver?.disconnect();
|
|
41
40
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
42
41
|
}, [observeTokens]);
|
|
43
|
-
const renderMessage = () => (React.createElement("div", { className:
|
|
44
|
-
const renderError = () => (React.createElement("div", { className: cn(
|
|
45
|
-
return (React.createElement("div", { className: cn(styles.component, className, {
|
|
46
|
-
|
|
42
|
+
const renderMessage = () => (React.createElement("div", { className: cn(commonStyles.message, messageClassName), "data-test-id": getDataTestId(dataTestId, 'message') }, message));
|
|
43
|
+
const renderError = () => (React.createElement("div", { className: cn(commonStyles.message, commonStyles.error, messageClassName), "data-test-id": getDataTestId(dataTestId, 'error') }, error));
|
|
44
|
+
return (React.createElement("div", { className: cn(commonStyles.component, styles.component, className, {
|
|
45
|
+
[commonStyles.hidden]: !params,
|
|
46
|
+
}), "data-test-id": dataTestId },
|
|
47
47
|
error ? renderError() : renderMessage(),
|
|
48
|
-
React.createElement(
|
|
49
|
-
React.createElement(
|
|
50
|
-
|
|
48
|
+
React.createElement(ReactCanvasPatternLock, { ...restProps, ...params, ref: ref, rows: 3, cols: 3, justifyNodes: justifyNodes, extraBounds: extraBounds, hover: hover }),
|
|
49
|
+
showForgotCodeBtn ? (React.createElement(ButtonMobile, { view: 'link', className: cn(commonStyles.forgotBtn, styles.forgotBtn), onClick: onForgotBtnClick, dataTestId: getDataTestId(dataTestId, 'forgot-code-btn') }, forgotCodeBtnText)) : (React.createElement("div", { className: cn(commonStyles.forgotBtn, styles.forgotBtn, {
|
|
50
|
+
[styles.hiddenBtn]: Boolean(styles.hiddenBtn),
|
|
51
|
+
}) }))));
|
|
51
52
|
});
|
|
52
53
|
|
|
53
|
-
export {
|
|
54
|
+
export { BasePatternLock };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/* hash:
|
|
1
|
+
/* hash: us3cg */
|
|
2
2
|
:root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
3
3
|
} /* deprecated */ :root {
|
|
4
4
|
--color-light-text-negative: #ec2e14;
|
|
@@ -14,60 +14,32 @@
|
|
|
14
14
|
/* Hard up */
|
|
15
15
|
} :root {
|
|
16
16
|
} :root {
|
|
17
|
-
--gap-xs: 8px;
|
|
18
|
-
--gap-s: 12px;
|
|
19
17
|
--gap-m: 16px;
|
|
20
|
-
--gap-
|
|
21
|
-
--gap-xl: 24px;
|
|
22
|
-
--gap-2xl: 32px;
|
|
18
|
+
--gap-3xl: 40px;
|
|
23
19
|
} :root {
|
|
24
20
|
} :root {
|
|
25
21
|
--size-xs-height: 40px;
|
|
26
|
-
--size-s-height: 48px;
|
|
27
|
-
--size-m-height: 56px;
|
|
28
22
|
} :root {
|
|
29
|
-
|
|
30
|
-
} .pattern-lock__component_1c1da {
|
|
31
|
-
max-width: var(--pattern-lock-max-width);
|
|
32
|
-
margin: var(--gap-xs) 0 var(--gap-xl) 0
|
|
33
|
-
} .pattern-lock__component_1c1da canvas {
|
|
23
|
+
} .pattern-lock__component_8m1ld canvas {
|
|
34
24
|
display: block;
|
|
35
25
|
margin: 0 auto;
|
|
36
|
-
} .pattern-
|
|
26
|
+
} .pattern-lock__hidden_8m1ld {
|
|
37
27
|
visibility: hidden;
|
|
38
|
-
} .pattern-
|
|
28
|
+
} .pattern-lock__message_8m1ld {
|
|
39
29
|
font-size: 16px;
|
|
40
30
|
line-height: 24px;
|
|
41
31
|
font-weight: 400;
|
|
42
32
|
|
|
43
33
|
text-align: center;
|
|
44
|
-
padding: 0 var(--gap-m);
|
|
34
|
+
padding: 0 var(--gap-m) var(--gap-3xl);
|
|
45
35
|
min-height: 24px;
|
|
46
36
|
overflow: hidden;
|
|
47
37
|
text-overflow: ellipsis;
|
|
48
38
|
white-space: nowrap;
|
|
49
39
|
color: var(--color-light-text-primary);
|
|
50
|
-
} .pattern-
|
|
40
|
+
} .pattern-lock__error_8m1ld {
|
|
51
41
|
color: var(--color-light-text-negative);
|
|
52
|
-
} .pattern-
|
|
42
|
+
} .pattern-lock__forgotBtn_8m1ld {
|
|
53
43
|
display: block;
|
|
54
44
|
min-height: var(--size-xs-height);
|
|
55
|
-
margin: var(--gap-xl) auto 0;
|
|
56
|
-
} @media screen and (min-width: 360px) {
|
|
57
|
-
.pattern-lock__forgotBtn_1c1da {
|
|
58
|
-
margin-top: var(--gap-2xl);
|
|
59
|
-
min-height: var(--size-s-height);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
.pattern-lock__component_1c1da {
|
|
63
|
-
margin-bottom: var(--gap-s);
|
|
64
|
-
}
|
|
65
|
-
} @media screen and (min-width: 390px) {
|
|
66
|
-
.pattern-lock__forgotBtn_1c1da {
|
|
67
|
-
min-height: var(--size-m-height);
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
.pattern-lock__component_1c1da {
|
|
71
|
-
margin-bottom: var(--gap-l);
|
|
72
|
-
}
|
|
73
45
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./Component";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { BasePatternLock } from './Component.js';
|
package/modern/consts.js
CHANGED
|
@@ -15,6 +15,8 @@ const OBSERVABLE_TOKENS = {
|
|
|
15
15
|
SELECTED_RING_BG_INITIAL: '--color-light-specialbg-tertiary-transparent',
|
|
16
16
|
SELECTED_RING_BG_SUCCESS: '--color-light-graphic-positive-alpha-10',
|
|
17
17
|
SELECTED_RING_BG_FAILURE: '--color-light-graphic-negative-alpha-10',
|
|
18
|
+
HOVER_INNER: '--color-light-neutral-500-hover',
|
|
19
|
+
HOVER_OUTER: '--color-light-neutral-translucent-200-hover',
|
|
18
20
|
};
|
|
19
21
|
const THEME_STATE = {
|
|
20
22
|
INITIAL: 'initial',
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { TPatternLockInstance } from 'react-canvas-pattern-lock';
|
|
4
|
+
import { CommonPatternLockProps } from "../typings";
|
|
5
|
+
declare const PatternLockDesktop: React.ForwardRefExoticComponent<CommonPatternLockProps & React.RefAttributes<TPatternLockInstance>>;
|
|
6
|
+
export { PatternLockDesktop };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { BasePatternLock } from '../components/base-pattern-lock/Component.js';
|
|
3
|
+
|
|
4
|
+
const styles = {"component":"pattern-lock__component_e3f2p","forgotBtn":"pattern-lock__forgotBtn_e3f2p","hiddenBtn":"pattern-lock__hiddenBtn_e3f2p"};
|
|
5
|
+
require('./desktop.css')
|
|
6
|
+
|
|
7
|
+
const PatternLockDesktop = forwardRef((restProps, ref) => React.createElement(BasePatternLock, { ...restProps, hover: true, ref: ref, styles: styles }));
|
|
8
|
+
|
|
9
|
+
export { PatternLockDesktop };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/* hash: 1cxhs */
|
|
2
|
+
:root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
3
|
+
} /* deprecated */ :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
4
|
+
} :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
5
|
+
} :root {
|
|
6
|
+
} :root {
|
|
7
|
+
|
|
8
|
+
/* Hard */
|
|
9
|
+
|
|
10
|
+
/* Up */
|
|
11
|
+
|
|
12
|
+
/* Hard up */
|
|
13
|
+
} :root {
|
|
14
|
+
} :root {
|
|
15
|
+
--gap-xs: 8px;
|
|
16
|
+
--gap-xl: 24px;
|
|
17
|
+
} :root {
|
|
18
|
+
} :root {
|
|
19
|
+
} :root {
|
|
20
|
+
--pattern-lock-desktop-max-width: 240px;
|
|
21
|
+
} .pattern-lock__component_e3f2p {
|
|
22
|
+
max-width: var(--pattern-lock-desktop-max-width);
|
|
23
|
+
margin: var(--gap-xs) 0 var(--gap-xl) 0;
|
|
24
|
+
} .pattern-lock__forgotBtn_e3f2p {
|
|
25
|
+
margin: var(--gap-xl) auto 0;
|
|
26
|
+
} .pattern-lock__hiddenBtn_e3f2p {
|
|
27
|
+
display: none;
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PatternLockDesktop } from './Component.desktop.js';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
|
|
3
|
+
const usePatternLockCleanup = (patternLockRef) => {
|
|
4
|
+
const clear = useMemo(() => {
|
|
5
|
+
if (patternLockRef.current) {
|
|
6
|
+
patternLockRef.current.setInitialState();
|
|
7
|
+
}
|
|
8
|
+
}, [patternLockRef]);
|
|
9
|
+
return {
|
|
10
|
+
clear,
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export { usePatternLockCleanup };
|
package/modern/index.d.ts
CHANGED
package/modern/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { PatternLock } from './Component.js';
|
|
1
|
+
export { PatternLock } from './Component.responsive.js';
|
|
2
2
|
export { THEME_STATE } from './consts.js';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="react" />
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { TPatternLockInstance } from 'react-canvas-pattern-lock';
|
|
4
|
+
import { CommonPatternLockProps } from "../typings";
|
|
5
|
+
declare const PatternLockMobile: React.ForwardRefExoticComponent<CommonPatternLockProps & React.RefAttributes<TPatternLockInstance>>;
|
|
6
|
+
export { PatternLockMobile };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import { BasePatternLock } from '../components/base-pattern-lock/Component.js';
|
|
3
|
+
|
|
4
|
+
const styles = {"component":"pattern-lock__component_lng5u","forgotBtn":"pattern-lock__forgotBtn_lng5u"};
|
|
5
|
+
require('./mobile.css')
|
|
6
|
+
|
|
7
|
+
const PatternLockMobile = forwardRef((restProps, ref) => React.createElement(BasePatternLock, { ...restProps, ref: ref, styles: styles }));
|
|
8
|
+
|
|
9
|
+
export { PatternLockMobile };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { PatternLockMobile } from './Component.mobile.js';
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/* hash: 1t7io */
|
|
2
|
+
:root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
3
|
+
} /* deprecated */ :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
4
|
+
} :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
|
|
5
|
+
} :root {
|
|
6
|
+
} :root {
|
|
7
|
+
|
|
8
|
+
/* Hard */
|
|
9
|
+
|
|
10
|
+
/* Up */
|
|
11
|
+
|
|
12
|
+
/* Hard up */
|
|
13
|
+
} :root {
|
|
14
|
+
} :root {
|
|
15
|
+
--gap-xs: 8px;
|
|
16
|
+
--gap-s: 12px;
|
|
17
|
+
--gap-l: 20px;
|
|
18
|
+
--gap-xl: 24px;
|
|
19
|
+
--gap-2xl: 32px;
|
|
20
|
+
} :root {
|
|
21
|
+
} :root {
|
|
22
|
+
--size-s-height: 48px;
|
|
23
|
+
--size-m-height: 56px;
|
|
24
|
+
} :root {
|
|
25
|
+
--pattern-lock-max-width: 500px;
|
|
26
|
+
} .pattern-lock__component_lng5u {
|
|
27
|
+
max-width: var(--pattern-lock-max-width);
|
|
28
|
+
margin: var(--gap-xs) 0 var(--gap-xl) 0;
|
|
29
|
+
} .pattern-lock__forgotBtn_lng5u {
|
|
30
|
+
margin: var(--gap-xl) auto 0;
|
|
31
|
+
} @media screen and (min-width: 360px) {
|
|
32
|
+
.pattern-lock__forgotBtn_lng5u {
|
|
33
|
+
margin-top: var(--gap-2xl);
|
|
34
|
+
min-height: var(--size-s-height);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.pattern-lock__component_lng5u {
|
|
38
|
+
margin-bottom: var(--gap-s);
|
|
39
|
+
}
|
|
40
|
+
} @media screen and (min-width: 390px) {
|
|
41
|
+
.pattern-lock__forgotBtn_lng5u {
|
|
42
|
+
min-height: var(--size-m-height);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.pattern-lock__component_lng5u {
|
|
46
|
+
margin-bottom: var(--gap-l);
|
|
47
|
+
}
|
|
48
|
+
}
|
package/modern/shared/index.d.ts
CHANGED
package/modern/shared/index.js
CHANGED
package/modern/typings.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { MouseEvent, ReactNode } from 'react';
|
|
|
2
2
|
import { ReactPatternLockProps } from 'react-canvas-pattern-lock';
|
|
3
3
|
type ConditionalProps = {
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Показать кнопку "забыли код"
|
|
6
6
|
* @default "Забыли код?"
|
|
7
7
|
*/
|
|
8
8
|
showForgotCodeBtn: true;
|
|
@@ -20,7 +20,7 @@ type ConditionalProps = {
|
|
|
20
20
|
onForgotBtnClick?: never;
|
|
21
21
|
forgotCodeBtnText?: never;
|
|
22
22
|
};
|
|
23
|
-
type
|
|
23
|
+
type CommonPatternLockProps = {
|
|
24
24
|
/**
|
|
25
25
|
* Дополнительный класс.
|
|
26
26
|
*/
|
|
@@ -51,7 +51,30 @@ type PatternLockProps = {
|
|
|
51
51
|
getTarget?: () => Node;
|
|
52
52
|
options?: MutationObserverInit;
|
|
53
53
|
};
|
|
54
|
-
|
|
54
|
+
/**
|
|
55
|
+
* Дополнительный класс для message/errorMessage
|
|
56
|
+
*/
|
|
57
|
+
messageClassName?: string;
|
|
58
|
+
} & Omit<ReactPatternLockProps, 'theme' | 'width' | 'height' | 'rows' | 'cols' | 'hover'> & ConditionalProps;
|
|
59
|
+
type PrivatePatternLockProps = {
|
|
60
|
+
/**
|
|
61
|
+
* Включает ховер-эффект
|
|
62
|
+
*/
|
|
63
|
+
hover?: boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Стили компонента.
|
|
66
|
+
*/
|
|
67
|
+
styles: {
|
|
68
|
+
[key: string]: string;
|
|
69
|
+
};
|
|
70
|
+
};
|
|
71
|
+
type PatternLockProps = CommonPatternLockProps & {
|
|
72
|
+
/**
|
|
73
|
+
* Контрольная точка, с нее начинается desktop версия
|
|
74
|
+
* @default 1024
|
|
75
|
+
*/
|
|
76
|
+
breakpoint?: number;
|
|
77
|
+
};
|
|
55
78
|
type ObservableTokens = {
|
|
56
79
|
ACCENT_INITIAL: string;
|
|
57
80
|
ACCENT_SUCCESS: string;
|
|
@@ -62,5 +85,7 @@ type ObservableTokens = {
|
|
|
62
85
|
SELECTED_RING_BG_FAILURE: string;
|
|
63
86
|
PRIMARY: string;
|
|
64
87
|
BG: string;
|
|
88
|
+
HOVER_INNER: string;
|
|
89
|
+
HOVER_OUTER: string;
|
|
65
90
|
};
|
|
66
|
-
export { PatternLockProps, ObservableTokens };
|
|
91
|
+
export { CommonPatternLockProps, PrivatePatternLockProps, PatternLockProps, ObservableTokens };
|
package/modern/utils.js
CHANGED
|
@@ -18,7 +18,14 @@ const getSizes = (() => {
|
|
|
18
18
|
if (cachedSize) {
|
|
19
19
|
return cachedSize;
|
|
20
20
|
}
|
|
21
|
-
if (window.matchMedia('(min-width:
|
|
21
|
+
if (window.matchMedia('(min-width: 600px)').matches) {
|
|
22
|
+
cachedSize = {
|
|
23
|
+
elementSizes: { ...COMMON_SIZES, nodeRadius: 32 },
|
|
24
|
+
width: 240,
|
|
25
|
+
height: 240,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
else if (window.matchMedia('(min-width: 390px)').matches) {
|
|
22
29
|
cachedSize = {
|
|
23
30
|
elementSizes: { ...COMMON_SIZES, nodeRadius: 43 },
|
|
24
31
|
width: 322,
|
|
@@ -47,6 +54,10 @@ function getTheme(dimens) {
|
|
|
47
54
|
primary: getColorByToken(OBSERVABLE_TOKENS.PRIMARY),
|
|
48
55
|
bg: getColorByToken(OBSERVABLE_TOKENS.BG),
|
|
49
56
|
ringBg: getColorByToken(OBSERVABLE_TOKENS.RING_BG_INITIAL),
|
|
57
|
+
hover: {
|
|
58
|
+
inner: getColorByToken(OBSERVABLE_TOKENS.HOVER_INNER),
|
|
59
|
+
outer: getColorByToken(OBSERVABLE_TOKENS.HOVER_OUTER),
|
|
60
|
+
},
|
|
50
61
|
};
|
|
51
62
|
return {
|
|
52
63
|
[THEME_STATE.INITIAL]: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alfalab/core-components-pattern-lock",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.0",
|
|
4
4
|
"description": "Pattern lock",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"license": "MIT",
|
|
@@ -16,9 +16,9 @@
|
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"@alfalab/core-components-button": "^11.3.0",
|
|
19
|
-
"@alfalab/core-components-gap": "^1.3.0",
|
|
20
19
|
"@alfalab/core-components-shared": "^0.9.1",
|
|
21
|
-
"
|
|
20
|
+
"@alfalab/core-components-mq": "^4.2.0",
|
|
21
|
+
"react-canvas-pattern-lock": "^1.2.0",
|
|
22
22
|
"classnames": "^2.3.1",
|
|
23
23
|
"tslib": "^2.4.0"
|
|
24
24
|
}
|
package/shared/index.d.ts
CHANGED
package/shared/index.js
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var utils = require('../utils.js');
|
|
6
|
+
var hooks_usePatternLockCleanup = require('../hooks/use-pattern-lock-cleanup.js');
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
exports.getPatternLockTestIds = utils.getPatternLockTestIds;
|
|
11
|
+
exports.usePatternLockCleanup = hooks_usePatternLockCleanup.usePatternLockCleanup;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React, { forwardRef } from 'react';
|
|
2
|
+
import type { TPatternLockInstance } from 'react-canvas-pattern-lock';
|
|
3
|
+
|
|
4
|
+
import { useMatchMedia } from '@alfalab/core-components-mq';
|
|
5
|
+
|
|
6
|
+
import { PatternLockDesktop } from './desktop';
|
|
7
|
+
import { PatternLockMobile } from './mobile';
|
|
8
|
+
import { PatternLockProps } from './typings';
|
|
9
|
+
|
|
10
|
+
export const PatternLock = forwardRef<TPatternLockInstance, PatternLockProps>(
|
|
11
|
+
({ breakpoint = 1024, ...restProps }, ref) => {
|
|
12
|
+
const query = `(min-width: ${breakpoint}px)`;
|
|
13
|
+
|
|
14
|
+
const [isDesktop] = useMatchMedia(query);
|
|
15
|
+
|
|
16
|
+
const Component = isDesktop ? PatternLockDesktop : PatternLockMobile;
|
|
17
|
+
|
|
18
|
+
return <Component ref={ref} {...restProps} />;
|
|
19
|
+
},
|
|
20
|
+
);
|