@alfalab/core-components-typography 3.2.2 → 4.1.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.
Files changed (127) hide show
  1. package/colors.css +20 -20
  2. package/colors.module-69def6bf.js +6 -0
  3. package/common.module-59cc11ca.js +6 -0
  4. package/component.js +6 -2
  5. package/cssm/component.js +5 -0
  6. package/cssm/hooks/index.d.ts +1 -0
  7. package/cssm/hooks/index.js +14 -0
  8. package/cssm/hooks/use-skeleton.module.css +19 -0
  9. package/cssm/hooks/useSkeleton.d.ts +12 -0
  10. package/cssm/hooks/useSkeleton.js +59 -0
  11. package/cssm/index.js +5 -0
  12. package/cssm/text/component.d.ts +9 -1
  13. package/cssm/text/component.js +23 -7
  14. package/cssm/text/index.js +5 -0
  15. package/cssm/title/component.d.ts +19 -2
  16. package/cssm/title/component.js +16 -2
  17. package/cssm/title/index.js +5 -0
  18. package/cssm/title-mobile/component.js +5 -0
  19. package/cssm/title-mobile/index.js +5 -0
  20. package/cssm/title-responsive/component.js +5 -0
  21. package/cssm/title-responsive/index.js +5 -0
  22. package/cssm/title-responsive/index.module.css +14 -64
  23. package/cssm/types.d.ts +12 -1
  24. package/esm/colors.css +20 -20
  25. package/esm/colors.module-64858915.js +4 -0
  26. package/esm/common.module-a0a4a875.js +4 -0
  27. package/esm/component.js +6 -2
  28. package/esm/hooks/index.d.ts +1 -0
  29. package/esm/hooks/index.js +5 -0
  30. package/esm/hooks/use-skeleton.css +20 -0
  31. package/esm/hooks/useSkeleton.d.ts +12 -0
  32. package/esm/hooks/useSkeleton.js +52 -0
  33. package/esm/index.js +6 -2
  34. package/esm/text/component.d.ts +9 -1
  35. package/esm/text/component.js +23 -9
  36. package/esm/text/index.css +18 -19
  37. package/esm/text/index.js +5 -1
  38. package/esm/title/common.css +5 -5
  39. package/esm/title/component.d.ts +19 -2
  40. package/esm/title/component.js +15 -3
  41. package/esm/title/index.css +19 -19
  42. package/esm/title/index.js +7 -3
  43. package/esm/title-mobile/component.js +7 -3
  44. package/esm/title-mobile/index.css +11 -11
  45. package/esm/title-mobile/index.js +6 -2
  46. package/esm/title-responsive/component.js +7 -3
  47. package/esm/title-responsive/index.css +44 -94
  48. package/esm/title-responsive/index.js +6 -2
  49. package/esm/types.d.ts +12 -1
  50. package/hooks/index.d.ts +1 -0
  51. package/hooks/index.js +13 -0
  52. package/hooks/use-skeleton.css +20 -0
  53. package/hooks/useSkeleton.d.ts +12 -0
  54. package/hooks/useSkeleton.js +60 -0
  55. package/index.js +6 -2
  56. package/modern/colors.css +20 -20
  57. package/modern/colors.module-58e8caae.js +4 -0
  58. package/modern/common.module-3d6095da.js +4 -0
  59. package/modern/component.js +6 -2
  60. package/modern/hooks/index.d.ts +1 -0
  61. package/modern/hooks/index.js +4 -0
  62. package/modern/hooks/use-skeleton.css +20 -0
  63. package/modern/hooks/useSkeleton.d.ts +12 -0
  64. package/modern/hooks/useSkeleton.js +51 -0
  65. package/modern/index.js +6 -2
  66. package/modern/text/component.d.ts +9 -1
  67. package/modern/text/component.js +24 -8
  68. package/modern/text/index.css +18 -19
  69. package/modern/text/index.js +5 -1
  70. package/modern/title/common.css +5 -5
  71. package/modern/title/component.d.ts +19 -2
  72. package/modern/title/component.js +16 -2
  73. package/modern/title/index.css +19 -19
  74. package/modern/title/index.js +7 -3
  75. package/modern/title-mobile/component.js +7 -3
  76. package/modern/title-mobile/index.css +11 -11
  77. package/modern/title-mobile/index.js +6 -2
  78. package/modern/title-responsive/component.js +7 -3
  79. package/modern/title-responsive/index.css +44 -94
  80. package/modern/title-responsive/index.js +6 -2
  81. package/modern/types.d.ts +12 -1
  82. package/package.json +4 -1
  83. package/src/colors.module.css +79 -0
  84. package/src/colors.ts +23 -0
  85. package/src/component.tsx +19 -0
  86. package/src/hooks/index.ts +1 -0
  87. package/src/hooks/use-skeleton.module.css +5 -0
  88. package/src/hooks/useSkeleton.tsx +78 -0
  89. package/src/index.ts +5 -0
  90. package/src/margins.module.css +11 -0
  91. package/src/presets.ts +17 -0
  92. package/src/text/component.tsx +145 -0
  93. package/src/text/index.module.css +76 -0
  94. package/src/text/index.ts +1 -0
  95. package/src/title/common.module.css +16 -0
  96. package/src/title/component.tsx +133 -0
  97. package/src/title/index.module.css +75 -0
  98. package/src/title/index.tsx +17 -0
  99. package/src/title-mobile/component.tsx +16 -0
  100. package/src/title-mobile/index.module.css +42 -0
  101. package/src/title-mobile/index.tsx +1 -0
  102. package/src/title-responsive/component.tsx +14 -0
  103. package/src/title-responsive/index.module.css +126 -0
  104. package/src/title-responsive/index.tsx +1 -0
  105. package/src/types.ts +15 -0
  106. package/text/component.d.ts +9 -1
  107. package/text/component.js +24 -9
  108. package/text/index.css +18 -19
  109. package/text/index.js +5 -1
  110. package/title/common.css +5 -5
  111. package/title/component.d.ts +19 -2
  112. package/title/component.js +16 -3
  113. package/title/index.css +19 -19
  114. package/title/index.js +7 -3
  115. package/title-mobile/component.js +7 -3
  116. package/title-mobile/index.css +11 -11
  117. package/title-mobile/index.js +6 -2
  118. package/title-responsive/component.js +7 -3
  119. package/title-responsive/index.css +44 -94
  120. package/title-responsive/index.js +6 -2
  121. package/types.d.ts +12 -1
  122. package/colors.module-a848b027.js +0 -6
  123. package/common.module-7493433e.js +0 -6
  124. package/esm/colors.module-996156cd.js +0 -4
  125. package/esm/common.module-bbfef03a.js +0 -4
  126. package/modern/colors.module-f2c54769.js +0 -4
  127. package/modern/common.module-888addc3.js +0 -4
@@ -0,0 +1,20 @@
1
+ /* hash: svslz */
2
+ :root {
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
+ --border-radius-pill: 99px;
15
+ } :root {
16
+ } :root {
17
+ } :root {
18
+ } .typography__skeletonText_ywqd3.typography__skeletonText_ywqd3 {
19
+ border-radius: var(--border-radius-pill);
20
+ }
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ import React from 'react';
3
+ import { TextSkeletonProps } from "../types";
4
+ type SkeletonProps = {
5
+ wrapperClassName?: string;
6
+ dataTestId?: string;
7
+ };
8
+ declare function useSkeleton(showSkeleton?: boolean, skeletonProps?: TextSkeletonProps): {
9
+ renderSkeleton: (props: SkeletonProps) => React.JSX.Element | null;
10
+ textRef: React.RefObject<HTMLElement>;
11
+ };
12
+ export { useSkeleton };
@@ -0,0 +1,51 @@
1
+ import React, { useState, useRef } from 'react';
2
+ import { Skeleton } from '@alfalab/core-components-skeleton/modern';
3
+ import { useLayoutEffect_SAFE_FOR_SSR } from '@alfalab/hooks';
4
+
5
+ const styles = {"skeletonText":"typography__skeletonText_ywqd3"};
6
+ require('./use-skeleton.css')
7
+
8
+ function useSkeleton(showSkeleton, skeletonProps) {
9
+ const [skeletonParams, setSkeletonParams] = useState();
10
+ const textRef = useRef(null);
11
+ useLayoutEffect_SAFE_FOR_SSR(() => {
12
+ if (showSkeleton && textRef.current) {
13
+ const style = getComputedStyle(textRef.current);
14
+ const textHeight = textRef.current.offsetHeight;
15
+ const fontSize = parseInt(style.fontSize, 10);
16
+ const lineHeight = parseInt(style.lineHeight, 10);
17
+ const padding = (lineHeight - fontSize) % 2 === 0
18
+ ? (lineHeight - fontSize) / 2
19
+ : (lineHeight - fontSize - 1) / 2;
20
+ const rows = skeletonProps?.rows
21
+ ? skeletonProps?.rows
22
+ : Math.ceil(textHeight / lineHeight);
23
+ setSkeletonParams({
24
+ height: lineHeight - padding * 2,
25
+ padding: `${padding}px 0`,
26
+ rows,
27
+ });
28
+ }
29
+ else {
30
+ setSkeletonParams(undefined);
31
+ }
32
+ }, [showSkeleton, skeletonProps?.rows]);
33
+ const renderSkeleton = (props) => {
34
+ if (showSkeleton && skeletonParams) {
35
+ return (React.createElement("div", { className: props.wrapperClassName, "data-test-id": props.dataTestId }, [...Array(skeletonParams.rows)].map((_, idx) => {
36
+ const width = Array.isArray(skeletonProps?.width)
37
+ ? skeletonProps?.width[idx]
38
+ : skeletonProps?.width;
39
+ return (
40
+ // eslint-disable-next-line react/no-array-index-key
41
+ React.createElement("div", { key: idx, style: { width, padding: skeletonParams.padding } },
42
+ React.createElement(Skeleton, { visible: true, className: styles.skeletonText },
43
+ React.createElement("div", { style: { height: skeletonParams.height } }))));
44
+ })));
45
+ }
46
+ return null;
47
+ };
48
+ return { renderSkeleton, textRef };
49
+ }
50
+
51
+ export { useSkeleton };
package/modern/index.js CHANGED
@@ -2,10 +2,14 @@ export { Typography } from './component.js';
2
2
  export { typographyPresets } from './presets.js';
3
3
  import './text/component.js';
4
4
  import 'react';
5
+ import 'react-merge-refs';
5
6
  import 'classnames';
6
- import './colors.module-f2c54769.js';
7
+ import './hooks/useSkeleton.js';
8
+ import '@alfalab/core-components-skeleton/modern';
9
+ import '@alfalab/hooks';
10
+ import './colors.module-58e8caae.js';
7
11
  import './title/index.js';
8
12
  import './title/component.js';
9
- import './common.module-888addc3.js';
13
+ import './common.module-3d6095da.js';
10
14
  import './title-mobile/component.js';
11
15
  import './title-responsive/component.js';
@@ -2,7 +2,7 @@
2
2
  import React from 'react';
3
3
  import { HTMLAttributes } from "react";
4
4
  import { Color } from "../colors";
5
- import { TextElementType } from "../types";
5
+ import { TextElementType, TextSkeletonProps } from "../types";
6
6
  type NativeProps = HTMLAttributes<HTMLSpanElement>;
7
7
  type TextBaseProps = {
8
8
  /**
@@ -45,6 +45,14 @@ type TextBaseProps = {
45
45
  * Количество строк (не поддерживает IE)
46
46
  */
47
47
  rowLimit?: 1 | 2 | 3;
48
+ /**
49
+ * Показать скелетон
50
+ */
51
+ showSkeleton?: boolean;
52
+ /**
53
+ * Пропы для скелетона
54
+ */
55
+ skeletonProps?: TextSkeletonProps;
48
56
  };
49
57
  type TextPTagProps = Omit<TextBaseProps, 'tag' | 'defaultMargins'> & {
50
58
  tag?: 'p';
@@ -1,15 +1,31 @@
1
1
  import React, { forwardRef } from 'react';
2
+ import mergeRefs from 'react-merge-refs';
2
3
  import cn from 'classnames';
3
- import { c as colors } from '../colors.module-f2c54769.js';
4
+ import { useSkeleton } from '../hooks/useSkeleton.js';
5
+ import { c as colors } from '../colors.module-58e8caae.js';
6
+ import '@alfalab/core-components-skeleton/modern';
7
+ import '@alfalab/hooks';
4
8
 
5
- const styles = {"paragraph":"typography__paragraph_1w6ie","paragraphWithMargins":"typography__paragraphWithMargins_1w6ie","primary-large":"typography__primary-large_1w6ie","primary-medium":"typography__primary-medium_1w6ie","primary-small":"typography__primary-small_1w6ie","secondary-large":"typography__secondary-large_1w6ie","secondary-medium":"typography__secondary-medium_1w6ie","secondary-small":"typography__secondary-small_1w6ie","component":"typography__component_1w6ie","caps":"typography__caps_1w6ie","bold":"typography__bold_1w6ie","medium":"typography__medium_1w6ie","regular":"typography__regular_1w6ie","monospace":"typography__monospace_1w6ie","rowLimit1":"typography__rowLimit1_1w6ie","rowLimit2":"typography__rowLimit2_1w6ie","rowLimit3":"typography__rowLimit3_1w6ie"};
9
+ const styles = {"paragraph":"typography__paragraph_rpr5l","paragraphWithMargins":"typography__paragraphWithMargins_rpr5l","primary-large":"typography__primary-large_rpr5l","primary-medium":"typography__primary-medium_rpr5l","primary-small":"typography__primary-small_rpr5l","secondary-large":"typography__secondary-large_rpr5l","secondary-medium":"typography__secondary-medium_rpr5l","secondary-small":"typography__secondary-small_rpr5l","component":"typography__component_rpr5l","caps":"typography__caps_rpr5l","bold":"typography__bold_rpr5l","medium":"typography__medium_rpr5l","regular":"typography__regular_rpr5l","monospace":"typography__monospace_rpr5l","rowLimit1":"typography__rowLimit1_rpr5l","rowLimit2":"typography__rowLimit2_rpr5l","rowLimit3":"typography__rowLimit3_rpr5l"};
6
10
  require('./index.css')
7
11
 
8
- const Text = forwardRef(({ view = 'primary-medium', tag: Component = 'span', weight, monospaceNumbers = false, defaultMargins = true, color, className, dataTestId, children, rowLimit, ...restProps }, ref) => (React.createElement(Component, { className: cn({
9
- [styles.paragraph]: Component === 'p' && !defaultMargins,
10
- [styles.paragraphWithMargins]: Component === 'p' && defaultMargins,
11
- [styles.monospace]: monospaceNumbers,
12
- [styles[`rowLimit${rowLimit}`]]: rowLimit,
13
- }, className, color && colors[color], styles[view], weight && styles[weight]), "data-test-id": dataTestId, ref: ref, ...restProps }, children)));
12
+ const Text = forwardRef(({ view = 'primary-medium', tag: Component = 'span', weight, monospaceNumbers = false, defaultMargins = true, color, className, dataTestId, children, rowLimit, showSkeleton, skeletonProps, ...restProps }, ref) => {
13
+ const { renderSkeleton, textRef } = useSkeleton(showSkeleton, skeletonProps);
14
+ const skeleton = renderSkeleton({
15
+ wrapperClassName: cn({
16
+ [styles.paragraphWithMargins]: Component === 'p' && defaultMargins,
17
+ }),
18
+ dataTestId,
19
+ });
20
+ if (skeleton) {
21
+ return skeleton;
22
+ }
23
+ return (React.createElement(Component, { className: cn({
24
+ [styles.paragraph]: Component === 'p' && !defaultMargins,
25
+ [styles.paragraphWithMargins]: Component === 'p' && defaultMargins,
26
+ [styles.monospace]: monospaceNumbers,
27
+ [styles[`rowLimit${rowLimit}`]]: rowLimit,
28
+ }, className, color && colors[color], styles[view], weight && styles[weight]), "data-test-id": dataTestId, ref: mergeRefs([ref, textRef]), ...restProps }, children));
29
+ });
14
30
 
15
31
  export { Text };
@@ -1,4 +1,4 @@
1
- /* hash: 1p2cg */
1
+ /* hash: 1ohw1 */
2
2
  :root {
3
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
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 */
@@ -17,67 +17,66 @@
17
17
  } :root {
18
18
  } :root {
19
19
  --text-paragraph-margin-bottom: 0 0 var(--gap-s);
20
- } .typography__paragraph_1w6ie {
20
+ } .typography__paragraph_rpr5l {
21
21
  margin: 0;
22
22
  padding: 0;
23
- } .typography__paragraphWithMargins_1w6ie {
23
+ } .typography__paragraphWithMargins_rpr5l {
24
24
  padding: 0;
25
25
  margin: var(--text-paragraph-margin-bottom);
26
- } .typography__primary-large_1w6ie {
26
+ } .typography__primary-large_rpr5l {
27
27
  font-size: 18px;
28
28
  line-height: 24px;
29
29
  font-weight: 400;
30
- } .typography__primary-medium_1w6ie {
30
+ } .typography__primary-medium_rpr5l {
31
31
  font-size: 16px;
32
32
  line-height: 24px;
33
33
  font-weight: 400;
34
- } .typography__primary-small_1w6ie {
34
+ } .typography__primary-small_rpr5l {
35
35
  font-size: 14px;
36
36
  line-height: 20px;
37
37
  font-weight: 400;
38
- } .typography__secondary-large_1w6ie {
38
+ } .typography__secondary-large_rpr5l {
39
39
  font-size: 13px;
40
40
  line-height: 16px;
41
41
  font-weight: 400;
42
- } .typography__secondary-medium_1w6ie {
42
+ } .typography__secondary-medium_rpr5l {
43
43
  font-size: 12px;
44
44
  line-height: 16px;
45
45
  font-weight: 400;
46
- } .typography__secondary-small_1w6ie {
46
+ } .typography__secondary-small_rpr5l {
47
47
  font-size: 11px;
48
48
  line-height: 16px;
49
49
  font-weight: 400;
50
- } .typography__component_1w6ie {
50
+ } .typography__component_rpr5l {
51
51
  font-size: 16px;
52
52
  line-height: 20px;
53
53
  font-weight: 400;
54
- } .typography__caps_1w6ie {
54
+ } .typography__caps_rpr5l {
55
55
  font-size: 12px;
56
56
  line-height: 16px;
57
57
  font-weight: 500;
58
58
  letter-spacing: 1.25px;
59
59
  text-transform: uppercase;
60
- } .typography__bold_1w6ie {
60
+ } .typography__bold_rpr5l {
61
61
  font-weight: bold;
62
- } .typography__medium_1w6ie {
62
+ } .typography__medium_rpr5l {
63
63
  font-weight: 500;
64
- } .typography__regular_1w6ie {
64
+ } .typography__regular_rpr5l {
65
65
  font-weight: normal;
66
- } .typography__monospace_1w6ie {
67
- font-feature-settings: "tnum";
66
+ } .typography__monospace_rpr5l {
68
67
  font-variant-numeric: tabular-nums;
69
- } .typography__rowLimit1_1w6ie {
68
+ } .typography__rowLimit1_rpr5l {
70
69
  -webkit-line-clamp: 1;
71
70
  display: -webkit-box;
72
71
  -webkit-box-orient: vertical;
73
72
  overflow: hidden;
74
73
  word-break: break-all;
75
- } .typography__rowLimit2_1w6ie {
74
+ } .typography__rowLimit2_rpr5l {
76
75
  -webkit-line-clamp: 2;
77
76
  display: -webkit-box;
78
77
  -webkit-box-orient: vertical;
79
78
  overflow: hidden;
80
- } .typography__rowLimit3_1w6ie {
79
+ } .typography__rowLimit3_rpr5l {
81
80
  -webkit-line-clamp: 3;
82
81
  display: -webkit-box;
83
82
  -webkit-box-orient: vertical;
@@ -1,4 +1,8 @@
1
1
  export { Text } from './component.js';
2
2
  import 'react';
3
+ import 'react-merge-refs';
3
4
  import 'classnames';
4
- import '../colors.module-f2c54769.js';
5
+ import '../hooks/useSkeleton.js';
6
+ import '@alfalab/core-components-skeleton/modern';
7
+ import '@alfalab/hooks';
8
+ import '../colors.module-58e8caae.js';
@@ -1,14 +1,14 @@
1
- /* hash: u52rm */
2
- .typography__component_1etxr {
1
+ /* hash: ssgub */
2
+ .typography__component_wh2dw {
3
3
  margin: 0;
4
4
  padding: 0
5
5
  }
6
- .typography__component_1etxr.typography__bold_1etxr {
6
+ .typography__component_wh2dw.typography__bold_wh2dw {
7
7
  font-weight: bold;
8
8
  }
9
- .typography__component_1etxr.typography__medium_1etxr {
9
+ .typography__component_wh2dw.typography__medium_wh2dw {
10
10
  font-weight: 500;
11
11
  }
12
- .typography__component_1etxr.typography__regular_1etxr {
12
+ .typography__component_wh2dw.typography__regular_wh2dw {
13
13
  font-weight: normal;
14
14
  }
@@ -2,6 +2,7 @@
2
2
  import React from 'react';
3
3
  import { HTMLAttributes } from "react";
4
4
  import { Color } from "../colors";
5
+ import { TextSkeletonProps } from "../types";
5
6
  type NativeProps = HTMLAttributes<HTMLHeadingElement>;
6
7
  type TitleProps = Omit<NativeProps, 'color'> & {
7
8
  /**
@@ -44,6 +45,14 @@ type TitleProps = Omit<NativeProps, 'color'> & {
44
45
  * Количество строк (не поддерживает IE)
45
46
  */
46
47
  rowLimit?: 1 | 2 | 3;
48
+ /**
49
+ * Показать скелетон
50
+ */
51
+ showSkeleton?: boolean;
52
+ /**
53
+ * Пропы для скелетона
54
+ */
55
+ skeletonProps?: TextSkeletonProps;
47
56
  };
48
57
  type Styles = {
49
58
  styles: {
@@ -59,7 +68,7 @@ declare const Title: React.ForwardRefExoticComponent<Omit<NativeProps, "color">
59
68
  /**
60
69
  * [Вариант начертания](https://core-ds.github.io/core-components/master/?path=/docs/guidelines-typography--page)
61
70
  */
62
- view?: "medium" | "xlarge" | "large" | "small" | "xsmall" | undefined;
71
+ view?: "small" | "medium" | "xlarge" | "large" | "xsmall" | undefined;
63
72
  /**
64
73
  * Цвет текста
65
74
  */
@@ -67,7 +76,7 @@ declare const Title: React.ForwardRefExoticComponent<Omit<NativeProps, "color">
67
76
  /**
68
77
  * Толщина шрифта
69
78
  */
70
- weight?: "regular" | "medium" | "bold" | undefined;
79
+ weight?: "bold" | "regular" | "medium" | undefined;
71
80
  /**
72
81
  * Шрифт текста
73
82
  */
@@ -92,5 +101,13 @@ declare const Title: React.ForwardRefExoticComponent<Omit<NativeProps, "color">
92
101
  * Количество строк (не поддерживает IE)
93
102
  */
94
103
  rowLimit?: 1 | 2 | 3 | undefined;
104
+ /**
105
+ * Показать скелетон
106
+ */
107
+ showSkeleton?: boolean | undefined;
108
+ /**
109
+ * Пропы для скелетона
110
+ */
111
+ skeletonProps?: TextSkeletonProps | undefined;
95
112
  } & Styles & React.RefAttributes<TitleElementType>>;
96
113
  export { TitleProps, Title };
@@ -1,7 +1,21 @@
1
1
  import React, { forwardRef } from 'react';
2
+ import mergeRefs from 'react-merge-refs';
2
3
  import cn from 'classnames';
3
- import { c as colors } from '../colors.module-f2c54769.js';
4
+ import { useSkeleton } from '../hooks/useSkeleton.js';
5
+ import { c as colors } from '../colors.module-58e8caae.js';
6
+ import '@alfalab/core-components-skeleton/modern';
7
+ import '@alfalab/hooks';
4
8
 
5
- const Title = forwardRef(({ tag: Component = 'div', view = 'medium', font = 'styrene', weight = font === 'styrene' ? 'medium' : 'bold', defaultMargins = false, color, className, dataTestId, children, rowLimit, styles, ...restProps }, ref) => (React.createElement(Component, { className: cn(styles.component, className, styles[`${font}-${view}`], defaultMargins && styles[`margins-${view}`], styles[weight], color && colors[color], { [styles[`rowLimit${rowLimit}`]]: rowLimit }), "data-test-id": dataTestId, ref: ref, ...restProps }, children)));
9
+ const Title = forwardRef(({ tag: Component = 'div', view = 'medium', font = 'styrene', weight = font === 'styrene' ? 'medium' : 'bold', defaultMargins = false, color, className, dataTestId, children, rowLimit, styles, skeletonProps, showSkeleton, ...restProps }, ref) => {
10
+ const { renderSkeleton, textRef } = useSkeleton(showSkeleton, skeletonProps);
11
+ const skeleton = renderSkeleton({
12
+ wrapperClassName: cn(defaultMargins && styles[`margins-${view}`]),
13
+ dataTestId,
14
+ });
15
+ if (skeleton) {
16
+ return skeleton;
17
+ }
18
+ return (React.createElement(Component, { className: cn(styles.component, className, styles[`${font}-${view}`], defaultMargins && styles[`margins-${view}`], styles[weight], color && colors[color], { [styles[`rowLimit${rowLimit}`]]: rowLimit }), "data-test-id": dataTestId, ref: mergeRefs([ref, textRef]), ...restProps }, children));
19
+ });
6
20
 
7
21
  export { Title };
@@ -1,4 +1,4 @@
1
- /* hash: 18mbh */
1
+ /* hash: qtc4l */
2
2
  :root {
3
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
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 */
@@ -20,78 +20,78 @@
20
20
  --font-family-styrene: 'Styrene UI', system-ui, -apple-system, 'Segoe UI', Roboto,
21
21
  'Helvetica Neue', Helvetica, sans-serif;
22
22
  } :root {
23
- } .typography__styrene-xlarge_atv5d {
23
+ } .typography__styrene-xlarge_1jblj {
24
24
  font-size: 48px;
25
25
  line-height: 64px;
26
26
  font-weight: 500;
27
27
  font-feature-settings: 'ss01';
28
28
  font-family: var(--font-family-styrene);
29
- } .typography__styrene-large_atv5d {
29
+ } .typography__styrene-large_1jblj {
30
30
  font-size: 40px;
31
31
  line-height: 48px;
32
32
  font-weight: 500;
33
33
  font-feature-settings: 'ss01';
34
34
  font-family: var(--font-family-styrene);
35
- } .typography__styrene-medium_atv5d {
35
+ } .typography__styrene-medium_1jblj {
36
36
  font-size: 32px;
37
37
  line-height: 40px;
38
38
  font-weight: 500;
39
39
  font-feature-settings: 'ss01';
40
40
  font-family: var(--font-family-styrene);
41
- } .typography__styrene-small_atv5d {
41
+ } .typography__styrene-small_1jblj {
42
42
  font-size: 24px;
43
43
  line-height: 32px;
44
44
  font-weight: 500;
45
45
  font-feature-settings: 'ss01';
46
46
  font-family: var(--font-family-styrene);
47
- } .typography__styrene-xsmall_atv5d {
47
+ } .typography__styrene-xsmall_1jblj {
48
48
  font-size: 20px;
49
49
  line-height: 24px;
50
50
  font-weight: 500;
51
51
  font-feature-settings: 'ss01';
52
52
  font-family: var(--font-family-styrene);
53
- } .typography__system-xlarge_atv5d {
53
+ } .typography__system-xlarge_1jblj {
54
54
  font-size: 48px;
55
55
  line-height: 52px;
56
56
  font-weight: 700;
57
- } .typography__system-large_atv5d {
57
+ } .typography__system-large_1jblj {
58
58
  font-size: 40px;
59
59
  line-height: 48px;
60
60
  font-weight: 700;
61
- } .typography__system-medium_atv5d {
61
+ } .typography__system-medium_1jblj {
62
62
  font-size: 30px;
63
63
  line-height: 36px;
64
64
  font-weight: 700;
65
- } .typography__system-small_atv5d {
65
+ } .typography__system-small_1jblj {
66
66
  font-size: 22px;
67
67
  line-height: 26px;
68
68
  font-weight: 700;
69
- } .typography__system-xsmall_atv5d {
69
+ } .typography__system-xsmall_1jblj {
70
70
  font-size: 18px;
71
71
  line-height: 22px;
72
72
  font-weight: 700;
73
- } .typography__margins-xlarge_atv5d {
73
+ } .typography__margins-xlarge_1jblj {
74
74
  margin: 0 0 var(--gap-xl);
75
- } .typography__margins-large_atv5d {
75
+ } .typography__margins-large_1jblj {
76
76
  margin: var(--gap-4xl) 0 var(--gap-xl);
77
- } .typography__margins-medium_atv5d {
77
+ } .typography__margins-medium_1jblj {
78
78
  margin: var(--gap-4xl) 0 var(--gap-xl);
79
- } .typography__margins-small_atv5d {
79
+ } .typography__margins-small_1jblj {
80
80
  margin: var(--gap-3xl) 0 var(--gap-m);
81
- } .typography__margins-xsmall_atv5d {
81
+ } .typography__margins-xsmall_1jblj {
82
82
  margin: var(--gap-3xl) 0 var(--gap-m);
83
- } .typography__rowLimit1_atv5d {
83
+ } .typography__rowLimit1_1jblj {
84
84
  -webkit-line-clamp: 1;
85
85
  display: -webkit-box;
86
86
  -webkit-box-orient: vertical;
87
87
  overflow: hidden;
88
88
  word-break: break-all;
89
- } .typography__rowLimit2_atv5d {
89
+ } .typography__rowLimit2_1jblj {
90
90
  -webkit-line-clamp: 2;
91
91
  display: -webkit-box;
92
92
  -webkit-box-orient: vertical;
93
93
  overflow: hidden;
94
- } .typography__rowLimit3_atv5d {
94
+ } .typography__rowLimit3_1jblj {
95
95
  -webkit-line-clamp: 3;
96
96
  display: -webkit-box;
97
97
  -webkit-box-orient: vertical;
@@ -1,10 +1,14 @@
1
1
  import React from 'react';
2
2
  import { Title as Title$1 } from './component.js';
3
- import { c as commonStyles } from '../common.module-888addc3.js';
3
+ import { c as commonStyles } from '../common.module-3d6095da.js';
4
+ import 'react-merge-refs';
4
5
  import 'classnames';
5
- import '../colors.module-f2c54769.js';
6
+ import '../hooks/useSkeleton.js';
7
+ import '@alfalab/core-components-skeleton/modern';
8
+ import '@alfalab/hooks';
9
+ import '../colors.module-58e8caae.js';
6
10
 
7
- const styles = {"styrene-xlarge":"typography__styrene-xlarge_atv5d","styrene-large":"typography__styrene-large_atv5d","styrene-medium":"typography__styrene-medium_atv5d","styrene-small":"typography__styrene-small_atv5d","styrene-xsmall":"typography__styrene-xsmall_atv5d","system-xlarge":"typography__system-xlarge_atv5d","system-large":"typography__system-large_atv5d","system-medium":"typography__system-medium_atv5d","system-small":"typography__system-small_atv5d","system-xsmall":"typography__system-xsmall_atv5d","margins-xlarge":"typography__margins-xlarge_atv5d","margins-large":"typography__margins-large_atv5d","margins-medium":"typography__margins-medium_atv5d","margins-small":"typography__margins-small_atv5d","margins-xsmall":"typography__margins-xsmall_atv5d","rowLimit1":"typography__rowLimit1_atv5d","rowLimit2":"typography__rowLimit2_atv5d","rowLimit3":"typography__rowLimit3_atv5d"};
11
+ const styles = {"styrene-xlarge":"typography__styrene-xlarge_1jblj","styrene-large":"typography__styrene-large_1jblj","styrene-medium":"typography__styrene-medium_1jblj","styrene-small":"typography__styrene-small_1jblj","styrene-xsmall":"typography__styrene-xsmall_1jblj","system-xlarge":"typography__system-xlarge_1jblj","system-large":"typography__system-large_1jblj","system-medium":"typography__system-medium_1jblj","system-small":"typography__system-small_1jblj","system-xsmall":"typography__system-xsmall_1jblj","margins-xlarge":"typography__margins-xlarge_1jblj","margins-large":"typography__margins-large_1jblj","margins-medium":"typography__margins-medium_1jblj","margins-small":"typography__margins-small_1jblj","margins-xsmall":"typography__margins-xsmall_1jblj","rowLimit1":"typography__rowLimit1_1jblj","rowLimit2":"typography__rowLimit2_1jblj","rowLimit3":"typography__rowLimit3_1jblj"};
8
12
  require('./index.css')
9
13
 
10
14
  const Title = (props) => (
@@ -1,10 +1,14 @@
1
1
  import React from 'react';
2
2
  import { Title } from '../title/component.js';
3
- import { c as commonStyles } from '../common.module-888addc3.js';
3
+ import { c as commonStyles } from '../common.module-3d6095da.js';
4
+ import 'react-merge-refs';
4
5
  import 'classnames';
5
- import '../colors.module-f2c54769.js';
6
+ import '../hooks/useSkeleton.js';
7
+ import '@alfalab/core-components-skeleton/modern';
8
+ import '@alfalab/hooks';
9
+ import '../colors.module-58e8caae.js';
6
10
 
7
- const styles = {"styrene-xlarge":"typography__styrene-xlarge_1e838","styrene-large":"typography__styrene-large_1e838","styrene-medium":"typography__styrene-medium_1e838","styrene-small":"typography__styrene-small_1e838","styrene-xsmall":"typography__styrene-xsmall_1e838","system-xlarge":"typography__system-xlarge_1e838","system-large":"typography__system-large_1e838","system-medium":"typography__system-medium_1e838","system-small":"typography__system-small_1e838","system-xsmall":"typography__system-xsmall_1e838"};
11
+ const styles = {"styrene-xlarge":"typography__styrene-xlarge_kymfk","styrene-large":"typography__styrene-large_kymfk","styrene-medium":"typography__styrene-medium_kymfk","styrene-small":"typography__styrene-small_kymfk","styrene-xsmall":"typography__styrene-xsmall_kymfk","system-xlarge":"typography__system-xlarge_kymfk","system-large":"typography__system-large_kymfk","system-medium":"typography__system-medium_kymfk","system-small":"typography__system-small_kymfk","system-xsmall":"typography__system-xsmall_kymfk"};
8
12
  require('./index.css')
9
13
 
10
14
  const TitleMobile = (props) => (
@@ -1,4 +1,4 @@
1
- /* hash: 1hjg0 */
1
+ /* hash: 1gyzl */
2
2
  :root {
3
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
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 */
@@ -16,53 +16,53 @@
16
16
  --font-family-styrene: 'Styrene UI', system-ui, -apple-system, 'Segoe UI', Roboto,
17
17
  'Helvetica Neue', Helvetica, sans-serif;
18
18
  } :root {
19
- } .typography__styrene-xlarge_1e838 {
19
+ } .typography__styrene-xlarge_kymfk {
20
20
  font-size: 34px;
21
21
  line-height: 40px;
22
22
  font-weight: 500;
23
23
  font-feature-settings: 'ss01';
24
24
  font-family: var(--font-family-styrene);
25
- } .typography__styrene-large_1e838 {
25
+ } .typography__styrene-large_kymfk {
26
26
  font-size: 30px;
27
27
  line-height: 36px;
28
28
  font-weight: 500;
29
29
  font-feature-settings: 'ss01';
30
30
  font-family: var(--font-family-styrene);
31
- } .typography__styrene-medium_1e838 {
31
+ } .typography__styrene-medium_kymfk {
32
32
  font-size: 26px;
33
33
  line-height: 32px;
34
34
  font-weight: 500;
35
35
  font-feature-settings: 'ss01';
36
36
  font-family: var(--font-family-styrene);
37
- } .typography__styrene-small_1e838 {
37
+ } .typography__styrene-small_kymfk {
38
38
  font-size: 20px;
39
39
  line-height: 28px;
40
40
  font-weight: 500;
41
41
  font-feature-settings: 'ss01';
42
42
  font-family: var(--font-family-styrene);
43
- } .typography__styrene-xsmall_1e838 {
43
+ } .typography__styrene-xsmall_kymfk {
44
44
  font-size: 16px;
45
45
  line-height: 20px;
46
46
  font-weight: 500;
47
47
  font-feature-settings: 'ss01';
48
48
  font-family: var(--font-family-styrene);
49
- } .typography__system-xlarge_1e838 {
49
+ } .typography__system-xlarge_kymfk {
50
50
  font-size: 34px;
51
51
  line-height: 40px;
52
52
  font-weight: 600;
53
- } .typography__system-large_1e838 {
53
+ } .typography__system-large_kymfk {
54
54
  font-size: 30px;
55
55
  line-height: 36px;
56
56
  font-weight: 600;
57
- } .typography__system-medium_1e838 {
57
+ } .typography__system-medium_kymfk {
58
58
  font-size: 26px;
59
59
  line-height: 32px;
60
60
  font-weight: 600;
61
- } .typography__system-small_1e838 {
61
+ } .typography__system-small_kymfk {
62
62
  font-size: 20px;
63
63
  line-height: 28px;
64
64
  font-weight: 600;
65
- } .typography__system-xsmall_1e838 {
65
+ } .typography__system-xsmall_kymfk {
66
66
  font-size: 16px;
67
67
  line-height: 20px;
68
68
  font-weight: 600;
@@ -1,6 +1,10 @@
1
1
  export { TitleMobile } from './component.js';
2
2
  import 'react';
3
3
  import '../title/component.js';
4
+ import 'react-merge-refs';
4
5
  import 'classnames';
5
- import '../colors.module-f2c54769.js';
6
- import '../common.module-888addc3.js';
6
+ import '../hooks/useSkeleton.js';
7
+ import '@alfalab/core-components-skeleton/modern';
8
+ import '@alfalab/hooks';
9
+ import '../colors.module-58e8caae.js';
10
+ import '../common.module-3d6095da.js';
@@ -1,10 +1,14 @@
1
1
  import React from 'react';
2
2
  import { Title } from '../title/component.js';
3
- import { c as commonStyles } from '../common.module-888addc3.js';
3
+ import { c as commonStyles } from '../common.module-3d6095da.js';
4
+ import 'react-merge-refs';
4
5
  import 'classnames';
5
- import '../colors.module-f2c54769.js';
6
+ import '../hooks/useSkeleton.js';
7
+ import '@alfalab/core-components-skeleton/modern';
8
+ import '@alfalab/hooks';
9
+ import '../colors.module-58e8caae.js';
6
10
 
7
- const styles = {"styrene-xlarge":"typography__styrene-xlarge_18lb0","styrene-large":"typography__styrene-large_18lb0","styrene-medium":"typography__styrene-medium_18lb0","styrene-small":"typography__styrene-small_18lb0","styrene-xsmall":"typography__styrene-xsmall_18lb0","system-xlarge":"typography__system-xlarge_18lb0","system-large":"typography__system-large_18lb0","system-medium":"typography__system-medium_18lb0","system-small":"typography__system-small_18lb0","system-xsmall":"typography__system-xsmall_18lb0","margins-xlarge":"typography__margins-xlarge_18lb0","margins-large":"typography__margins-large_18lb0","margins-medium":"typography__margins-medium_18lb0","margins-small":"typography__margins-small_18lb0","margins-xsmall":"typography__margins-xsmall_18lb0"};
11
+ const styles = {"styrene-xlarge":"typography__styrene-xlarge_1h9yc","styrene-large":"typography__styrene-large_1h9yc","styrene-medium":"typography__styrene-medium_1h9yc","styrene-small":"typography__styrene-small_1h9yc","styrene-xsmall":"typography__styrene-xsmall_1h9yc","system-xlarge":"typography__system-xlarge_1h9yc","system-large":"typography__system-large_1h9yc","system-medium":"typography__system-medium_1h9yc","system-small":"typography__system-small_1h9yc","system-xsmall":"typography__system-xsmall_1h9yc","margins-xlarge":"typography__margins-xlarge_1h9yc","margins-large":"typography__margins-large_1h9yc","margins-medium":"typography__margins-medium_1h9yc","margins-small":"typography__margins-small_1h9yc","margins-xsmall":"typography__margins-xsmall_1h9yc"};
8
12
  require('./index.css')
9
13
 
10
14
  const TitleResponsive = (props) => (