@hh.ru/magritte-ui-card 8.3.24 → 8.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/Card.d.ts +5 -1
- package/Card.js +18 -50
- package/Card.js.map +1 -1
- package/CardSegment-B8AT6F5t.js +20 -0
- package/CardSegment-B8AT6F5t.js.map +1 -0
- package/CardSegment.d.ts +9 -0
- package/CardSegment.js +11 -0
- package/CardSegment.js.map +1 -0
- package/index.css +409 -954
- package/index.d.ts +1 -0
- package/index.js +4 -1
- package/index.js.map +1 -1
- package/package.json +3 -2
- package/types.d.ts +5 -2
- package/useCardActivation.d.ts +17 -0
- package/useCardActivation.js +53 -0
- package/useCardActivation.js.map +1 -0
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -3,9 +3,12 @@ export { Card } from './Card.js';
|
|
|
3
3
|
import 'react/jsx-runtime';
|
|
4
4
|
import 'react';
|
|
5
5
|
import 'classnames';
|
|
6
|
+
import '@hh.ru/magritte-common-use-disabled';
|
|
7
|
+
import './CardSegment-B8AT6F5t.js';
|
|
8
|
+
import './useCardActivation.js';
|
|
6
9
|
import '@hh.ru/magritte-common-keyboard';
|
|
7
10
|
import '@hh.ru/magritte-common-mouse';
|
|
8
|
-
import '@hh.ru/magritte-
|
|
11
|
+
import '@hh.ru/magritte-ui-layout';
|
|
9
12
|
import './Skeleton.js';
|
|
10
13
|
import '@hh.ru/magritte-ui-skeleton';
|
|
11
14
|
import '@hh.ru/magritte-ui-icon';
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hh.ru/magritte-ui-card",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.4.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"types": "index.d.ts",
|
|
6
6
|
"sideEffects": [
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
"@hh.ru/magritte-types": "5.0.6",
|
|
32
32
|
"@hh.ru/magritte-ui-breakpoint": "6.0.8",
|
|
33
33
|
"@hh.ru/magritte-ui-icon": "14.2.1",
|
|
34
|
+
"@hh.ru/magritte-ui-layout": "2.0.0",
|
|
34
35
|
"@hh.ru/magritte-ui-mock-component": "1.1.7",
|
|
35
36
|
"@hh.ru/magritte-ui-skeleton": "3.0.20",
|
|
36
37
|
"@hh.ru/magritte-ui-typography": "5.2.0"
|
|
@@ -38,5 +39,5 @@
|
|
|
38
39
|
"publishConfig": {
|
|
39
40
|
"access": "public"
|
|
40
41
|
},
|
|
41
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "3300c3c2d412c0a92b17e48f3b05619643f5be72"
|
|
42
43
|
}
|
package/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { MouseEventHandler, PropsWithChildren } from 'react';
|
|
1
2
|
import { TokenColorBackground, TokenBaseStaticBorderRadius, TokenBaseStaticSpace, TokenColorStroke, TokenShadow } from '@hh.ru/magritte-design-tokens/types';
|
|
2
3
|
export type CardPadding = TokenBaseStaticSpace;
|
|
3
4
|
export type CardBorderRadius = TokenBaseStaticBorderRadius | 'halfHeight';
|
|
@@ -56,6 +57,8 @@ export interface CommonCardProps {
|
|
|
56
57
|
**/
|
|
57
58
|
pressEnabled?: boolean;
|
|
58
59
|
/** Обработчик клика по карточке */
|
|
59
|
-
onClick?:
|
|
60
|
+
onClick?: MouseEventHandler<HTMLElement>;
|
|
61
|
+
/** Направление раскладки сегментов внутри карточки */
|
|
62
|
+
direction?: 'row' | 'column';
|
|
60
63
|
}
|
|
61
|
-
export type CardProps =
|
|
64
|
+
export type CardProps = PropsWithChildren<CommonCardProps>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type MouseEventHandler, type KeyboardEventHandler } from 'react';
|
|
2
|
+
interface UseCardActivationParams {
|
|
3
|
+
onClick?: MouseEventHandler<HTMLElement>;
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
hasExplicitRole?: boolean;
|
|
6
|
+
}
|
|
7
|
+
interface CardActivationProps {
|
|
8
|
+
onClick: MouseEventHandler<HTMLElement>;
|
|
9
|
+
onKeyDown: KeyboardEventHandler<HTMLElement>;
|
|
10
|
+
onFocus: () => void;
|
|
11
|
+
onBlur: () => void;
|
|
12
|
+
role?: string;
|
|
13
|
+
tabIndex?: number;
|
|
14
|
+
'aria-disabled': boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare const useCardActivation: ({ onClick, disabled, hasExplicitRole, }: UseCardActivationParams) => Partial<CardActivationProps>;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import './index.css';
|
|
2
|
+
import { useRef, useCallback } from 'react';
|
|
3
|
+
import { keyboardMatches, keyboardKeys } from '@hh.ru/magritte-common-keyboard';
|
|
4
|
+
import { isEventFromInteractiveComponent } from '@hh.ru/magritte-common-mouse';
|
|
5
|
+
import { useDisabled } from '@hh.ru/magritte-common-use-disabled';
|
|
6
|
+
|
|
7
|
+
const useCardActivation = ({ onClick, disabled = false, hasExplicitRole = false, }) => {
|
|
8
|
+
const forceDisabled = useDisabled();
|
|
9
|
+
const hasFocusRef = useRef(false);
|
|
10
|
+
const isEffectivelyDisabled = forceDisabled || disabled;
|
|
11
|
+
const clickHandler = useCallback((event) => {
|
|
12
|
+
if (isEffectivelyDisabled || !onClick || isEventFromInteractiveComponent(event)) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
onClick(event);
|
|
16
|
+
}, [onClick, isEffectivelyDisabled]);
|
|
17
|
+
const keyDownHandler = useCallback((event) => {
|
|
18
|
+
if (isEffectivelyDisabled ||
|
|
19
|
+
!onClick ||
|
|
20
|
+
!hasFocusRef.current ||
|
|
21
|
+
!keyboardMatches(event.nativeEvent, [keyboardKeys.Enter, keyboardKeys.Space]) ||
|
|
22
|
+
isEventFromInteractiveComponent(event)) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
// card может использоваться с SPALink который проверяет defaultPrevented
|
|
26
|
+
// поэтому preventDefault делаем только на Space
|
|
27
|
+
if (keyboardMatches(event.nativeEvent, [keyboardKeys.Space])) {
|
|
28
|
+
event.preventDefault();
|
|
29
|
+
}
|
|
30
|
+
event.currentTarget.click();
|
|
31
|
+
}, [onClick, isEffectivelyDisabled]);
|
|
32
|
+
const focusCallback = useCallback(() => {
|
|
33
|
+
hasFocusRef.current = true;
|
|
34
|
+
}, []);
|
|
35
|
+
const blurCallback = useCallback(() => {
|
|
36
|
+
hasFocusRef.current = false;
|
|
37
|
+
}, []);
|
|
38
|
+
if (!onClick) {
|
|
39
|
+
return {};
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
onClick: clickHandler,
|
|
43
|
+
onKeyDown: keyDownHandler,
|
|
44
|
+
onFocus: focusCallback,
|
|
45
|
+
onBlur: blurCallback,
|
|
46
|
+
'aria-disabled': isEffectivelyDisabled,
|
|
47
|
+
...(!isEffectivelyDisabled && { tabIndex: 0 }),
|
|
48
|
+
...(!hasExplicitRole && { role: 'button' }),
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export { useCardActivation };
|
|
53
|
+
//# sourceMappingURL=useCardActivation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCardActivation.js","sources":["src/useCardActivation.ts"],"sourcesContent":["import { useCallback, useRef, type MouseEventHandler, type KeyboardEventHandler } from 'react';\n\nimport { keyboardMatches, keyboardKeys } from '@hh.ru/magritte-common-keyboard';\nimport { isEventFromInteractiveComponent } from '@hh.ru/magritte-common-mouse';\nimport { useDisabled } from '@hh.ru/magritte-common-use-disabled';\n\ninterface UseCardActivationParams {\n onClick?: MouseEventHandler<HTMLElement>;\n disabled?: boolean;\n hasExplicitRole?: boolean;\n}\n\ninterface CardActivationProps {\n onClick: MouseEventHandler<HTMLElement>;\n onKeyDown: KeyboardEventHandler<HTMLElement>;\n onFocus: () => void;\n onBlur: () => void;\n role?: string;\n tabIndex?: number;\n 'aria-disabled': boolean;\n}\n\nexport const useCardActivation = ({\n onClick,\n disabled = false,\n hasExplicitRole = false,\n}: UseCardActivationParams): Partial<CardActivationProps> => {\n const forceDisabled = useDisabled();\n const hasFocusRef = useRef(false);\n\n const isEffectivelyDisabled = forceDisabled || disabled;\n\n const clickHandler: MouseEventHandler<HTMLElement> = useCallback(\n (event) => {\n if (isEffectivelyDisabled || !onClick || isEventFromInteractiveComponent(event)) {\n return;\n }\n\n onClick(event);\n },\n [onClick, isEffectivelyDisabled]\n );\n\n const keyDownHandler: KeyboardEventHandler<HTMLElement> = useCallback(\n (event) => {\n if (\n isEffectivelyDisabled ||\n !onClick ||\n !hasFocusRef.current ||\n !keyboardMatches(event.nativeEvent, [keyboardKeys.Enter, keyboardKeys.Space]) ||\n isEventFromInteractiveComponent(event)\n ) {\n return;\n }\n\n // card может использоваться с SPALink который проверяет defaultPrevented\n // поэтому preventDefault делаем только на Space\n if (keyboardMatches(event.nativeEvent, [keyboardKeys.Space])) {\n event.preventDefault();\n }\n\n event.currentTarget.click();\n },\n [onClick, isEffectivelyDisabled]\n );\n\n const focusCallback = useCallback(() => {\n hasFocusRef.current = true;\n }, []);\n\n const blurCallback = useCallback(() => {\n hasFocusRef.current = false;\n }, []);\n\n if (!onClick) {\n return {};\n }\n\n return {\n onClick: clickHandler,\n onKeyDown: keyDownHandler,\n onFocus: focusCallback,\n onBlur: blurCallback,\n 'aria-disabled': isEffectivelyDisabled,\n ...(!isEffectivelyDisabled && { tabIndex: 0 }),\n ...(!hasExplicitRole && { role: 'button' }),\n };\n};\n"],"names":[],"mappings":";;;;;AAsBa,MAAA,iBAAiB,GAAG,CAAC,EAC9B,OAAO,EACP,QAAQ,GAAG,KAAK,EAChB,eAAe,GAAG,KAAK,GACD,KAAkC;AACxD,IAAA,MAAM,aAAa,GAAG,WAAW,EAAE,CAAC;AACpC,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAElC,IAAA,MAAM,qBAAqB,GAAG,aAAa,IAAI,QAAQ,CAAC;AAExD,IAAA,MAAM,YAAY,GAAmC,WAAW,CAC5D,CAAC,KAAK,KAAI;QACN,IAAI,qBAAqB,IAAI,CAAC,OAAO,IAAI,+BAA+B,CAAC,KAAK,CAAC,EAAE;YAC7E,OAAO;SACV;QAED,OAAO,CAAC,KAAK,CAAC,CAAC;AACnB,KAAC,EACD,CAAC,OAAO,EAAE,qBAAqB,CAAC,CACnC,CAAC;AAEF,IAAA,MAAM,cAAc,GAAsC,WAAW,CACjE,CAAC,KAAK,KAAI;AACN,QAAA,IACI,qBAAqB;AACrB,YAAA,CAAC,OAAO;YACR,CAAC,WAAW,CAAC,OAAO;AACpB,YAAA,CAAC,eAAe,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;AAC7E,YAAA,+BAA+B,CAAC,KAAK,CAAC,EACxC;YACE,OAAO;SACV;;;AAID,QAAA,IAAI,eAAe,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE;YAC1D,KAAK,CAAC,cAAc,EAAE,CAAC;SAC1B;AAED,QAAA,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAChC,KAAC,EACD,CAAC,OAAO,EAAE,qBAAqB,CAAC,CACnC,CAAC;AAEF,IAAA,MAAM,aAAa,GAAG,WAAW,CAAC,MAAK;AACnC,QAAA,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;KAC9B,EAAE,EAAE,CAAC,CAAC;AAEP,IAAA,MAAM,YAAY,GAAG,WAAW,CAAC,MAAK;AAClC,QAAA,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC;KAC/B,EAAE,EAAE,CAAC,CAAC;IAEP,IAAI,CAAC,OAAO,EAAE;AACV,QAAA,OAAO,EAAE,CAAC;KACb;IAED,OAAO;AACH,QAAA,OAAO,EAAE,YAAY;AACrB,QAAA,SAAS,EAAE,cAAc;AACzB,QAAA,OAAO,EAAE,aAAa;AACtB,QAAA,MAAM,EAAE,YAAY;AACpB,QAAA,eAAe,EAAE,qBAAqB;QACtC,IAAI,CAAC,qBAAqB,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE;QAC7C,IAAI,CAAC,eAAe,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;KAC7C,CAAC;AACN;;;;"}
|