@altinn/altinn-components 0.0.1

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 (126) hide show
  1. package/.github/workflows/ci-cd-main.yml +44 -0
  2. package/.github/workflows/ci-cd-pull-request.yml +39 -0
  3. package/.node-version +1 -0
  4. package/.storybook/main.ts +22 -0
  5. package/.storybook/preview.ts +15 -0
  6. package/CHANGELOG.md +13 -0
  7. package/README.md +2 -0
  8. package/biome.jsonc +65 -0
  9. package/lib/components/Avatar/Avatar.tsx +91 -0
  10. package/lib/components/Avatar/AvatarGroup.stories.ts +67 -0
  11. package/lib/components/Avatar/AvatarGroup.tsx +42 -0
  12. package/lib/components/Avatar/avatar.module.css +59 -0
  13. package/lib/components/Avatar/avatar.stories.tsx +44 -0
  14. package/lib/components/Avatar/avatarGroup.module.css +78 -0
  15. package/lib/components/Avatar/color.ts +71 -0
  16. package/lib/components/Avatar/index.ts +2 -0
  17. package/lib/components/Badge/Badge.tsx +19 -0
  18. package/lib/components/Badge/badge.module.css +36 -0
  19. package/lib/components/Badge/index.tsx +1 -0
  20. package/lib/components/Button/Button.stories.ts +44 -0
  21. package/lib/components/Button/Button.tsx +39 -0
  22. package/lib/components/Button/ButtonBase.tsx +53 -0
  23. package/lib/components/Button/ComboButton.stories.ts +45 -0
  24. package/lib/components/Button/ComboButton.tsx +44 -0
  25. package/lib/components/Button/button.module.css +82 -0
  26. package/lib/components/Button/buttonBase.module.css +77 -0
  27. package/lib/components/Button/comboButton.module.css +83 -0
  28. package/lib/components/Button/index.ts +3 -0
  29. package/lib/components/Header/DigdirLogomark.tsx +23 -0
  30. package/lib/components/Header/GlobalMenu.stories.tsx +202 -0
  31. package/lib/components/Header/GlobalMenu.tsx +131 -0
  32. package/lib/components/Header/Header.stories.ts +85 -0
  33. package/lib/components/Header/Header.tsx +64 -0
  34. package/lib/components/Header/HeaderBase.tsx +10 -0
  35. package/lib/components/Header/HeaderButton.stories.ts +54 -0
  36. package/lib/components/Header/HeaderButton.tsx +55 -0
  37. package/lib/components/Header/HeaderLogo.stories.ts +17 -0
  38. package/lib/components/Header/HeaderLogo.tsx +22 -0
  39. package/lib/components/Header/HeaderSearch.stories.ts +20 -0
  40. package/lib/components/Header/HeaderSearch.tsx +44 -0
  41. package/lib/components/Header/globalMenu.module.css +28 -0
  42. package/lib/components/Header/header.module.css +39 -0
  43. package/lib/components/Header/headerButton.module.css +35 -0
  44. package/lib/components/Header/headerLogo.module.css +24 -0
  45. package/lib/components/Header/headerSearch.module.css +30 -0
  46. package/lib/components/Header/index.tsx +5 -0
  47. package/lib/components/Icon/CheckboxIcon.stories.ts +25 -0
  48. package/lib/components/Icon/CheckboxIcon.tsx +29 -0
  49. package/lib/components/Icon/Icon.stories.ts +24 -0
  50. package/lib/components/Icon/Icon.tsx +23 -0
  51. package/lib/components/Icon/RadioIcon.stories.ts +25 -0
  52. package/lib/components/Icon/RadioIcon.tsx +29 -0
  53. package/lib/components/Icon/SvgIcon.tsx +18 -0
  54. package/lib/components/Icon/__AkselIcon.tsx +37 -0
  55. package/lib/components/Icon/checkboxIcon.module.css +21 -0
  56. package/lib/components/Icon/icon.module.css +4 -0
  57. package/lib/components/Icon/iconsMap.tsx +2078 -0
  58. package/lib/components/Icon/index.ts +5 -0
  59. package/lib/components/Icon/radioIcon.module.css +21 -0
  60. package/lib/components/Layout/Layout.stories.ts +127 -0
  61. package/lib/components/Layout/Layout.tsx +40 -0
  62. package/lib/components/Layout/LayoutBase.stories.ts +17 -0
  63. package/lib/components/Layout/LayoutBase.tsx +30 -0
  64. package/lib/components/Layout/LayoutBody.stories.ts +17 -0
  65. package/lib/components/Layout/LayoutBody.tsx +16 -0
  66. package/lib/components/Layout/LayoutContent.stories.ts +17 -0
  67. package/lib/components/Layout/LayoutContent.tsx +15 -0
  68. package/lib/components/Layout/LayoutSidebar.stories.ts +17 -0
  69. package/lib/components/Layout/LayoutSidebar.tsx +16 -0
  70. package/lib/components/Layout/index.tsx +4 -0
  71. package/lib/components/Layout/layout.module.css +63 -0
  72. package/lib/components/Menu/Menu.stories.ts +495 -0
  73. package/lib/components/Menu/Menu.tsx +123 -0
  74. package/lib/components/Menu/MenuBase.tsx +17 -0
  75. package/lib/components/Menu/MenuGroup.tsx +18 -0
  76. package/lib/components/Menu/MenuHeader.tsx +13 -0
  77. package/lib/components/Menu/MenuItem.stories.ts +127 -0
  78. package/lib/components/Menu/MenuItem.tsx +58 -0
  79. package/lib/components/Menu/MenuItemBase.tsx +62 -0
  80. package/lib/components/Menu/MenuItemLabel.tsx +30 -0
  81. package/lib/components/Menu/MenuItemMedia.tsx +42 -0
  82. package/lib/components/Menu/MenuOption.stories.ts +50 -0
  83. package/lib/components/Menu/MenuOption.tsx +45 -0
  84. package/lib/components/Menu/MenuSearch.stories.ts +18 -0
  85. package/lib/components/Menu/MenuSearch.tsx +25 -0
  86. package/lib/components/Menu/index.ts +10 -0
  87. package/lib/components/Menu/menu.module.css +26 -0
  88. package/lib/components/Menu/menuHeader.module.css +12 -0
  89. package/lib/components/Menu/menuItem.module.css +136 -0
  90. package/lib/components/Menu/menuOption.module.css +29 -0
  91. package/lib/components/Menu/menuSearch.module.css +29 -0
  92. package/lib/components/Menu/useClickOutside.ts +21 -0
  93. package/lib/components/Menu/useEscapeKey.ts +16 -0
  94. package/lib/components/Toolbar/Toolbar.stories.tsx +188 -0
  95. package/lib/components/Toolbar/Toolbar.tsx +138 -0
  96. package/lib/components/Toolbar/ToolbarAdd.stories.ts +25 -0
  97. package/lib/components/Toolbar/ToolbarAdd.tsx +25 -0
  98. package/lib/components/Toolbar/ToolbarBase.tsx +27 -0
  99. package/lib/components/Toolbar/ToolbarButton.stories.ts +32 -0
  100. package/lib/components/Toolbar/ToolbarButton.tsx +65 -0
  101. package/lib/components/Toolbar/ToolbarFilter.stories.ts +66 -0
  102. package/lib/components/Toolbar/ToolbarFilter.tsx +70 -0
  103. package/lib/components/Toolbar/ToolbarMenu.stories.ts +37 -0
  104. package/lib/components/Toolbar/ToolbarMenu.tsx +28 -0
  105. package/lib/components/Toolbar/ToolbarOptions.stories.ts +108 -0
  106. package/lib/components/Toolbar/ToolbarOptions.tsx +61 -0
  107. package/lib/components/Toolbar/ToolbarSearch.stories.ts +19 -0
  108. package/lib/components/Toolbar/ToolbarSearch.tsx +24 -0
  109. package/lib/components/Toolbar/index.js +3 -0
  110. package/lib/components/Toolbar/toolbar.module.css +43 -0
  111. package/lib/components/Toolbar/toolbarButton.module.css +3 -0
  112. package/lib/components/Toolbar/toolbarSearch.module.css +28 -0
  113. package/lib/components/index.ts +1 -0
  114. package/lib/css/colors.css +113 -0
  115. package/lib/css/global.css +12 -0
  116. package/lib/css/theme-company.css +15 -0
  117. package/lib/css/theme-global.css +15 -0
  118. package/lib/css/theme-neutral.css +15 -0
  119. package/lib/css/theme-person.css +15 -0
  120. package/lib/css/theme.css +24 -0
  121. package/lib/index.ts +1 -0
  122. package/package.json +52 -0
  123. package/tsconfig.json +23 -0
  124. package/tsconfig.node.json +11 -0
  125. package/typings.d.ts +1 -0
  126. package/vite.config.ts +20 -0
@@ -0,0 +1,36 @@
1
+ .badge {
2
+ display: inline-flex;
3
+ box-sizing: border-box;
4
+ padding: 4px 8px;
5
+ justify-content: center;
6
+ min-height: 24px;
7
+ min-width: 24px;
8
+ width: auto;
9
+ height: 24px;
10
+ align-items: center;
11
+ flex-shrink: 0;
12
+ background: var(--black-5, rgba(0, 0, 0, 0.05));
13
+ color: var(--black-100, #000);
14
+ font-size: 0.75rem;
15
+ font-weight: 600;
16
+ line-height: 1rem;
17
+ border-radius: 12px;
18
+ }
19
+
20
+ .strong {
21
+ font-weight: 700;
22
+ background: var(--Action-Important, #e02e49);
23
+ color: #ffffff;
24
+ }
25
+
26
+ .small {
27
+ display: flex;
28
+ width: 12px;
29
+ height: 12px;
30
+ min-height: 12px;
31
+ min-width: 12px;
32
+ padding: 4px;
33
+ justify-content: center;
34
+ align-items: center;
35
+ flex-shrink: 0;
36
+ }
@@ -0,0 +1 @@
1
+ export * from './Badge';
@@ -0,0 +1,44 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+
3
+ import { Button } from './Button';
4
+
5
+ const meta = {
6
+ title: 'Atoms/Button/Button',
7
+ component: Button,
8
+ tags: ['autodocs'],
9
+ parameters: {},
10
+ args: {
11
+ children: 'Button',
12
+ },
13
+ } satisfies Meta<typeof Button>;
14
+
15
+ export default meta;
16
+ type Story = StoryObj<typeof meta>;
17
+
18
+ export const Default: Story = {
19
+ args: {},
20
+ };
21
+
22
+ export const Solid: Story = {
23
+ args: {
24
+ variant: 'solid',
25
+ },
26
+ };
27
+
28
+ export const Outline: Story = {
29
+ args: {
30
+ variant: 'outline',
31
+ },
32
+ };
33
+
34
+ export const Text: Story = {
35
+ args: {
36
+ variant: 'text',
37
+ },
38
+ };
39
+
40
+ export const Disabled: Story = {
41
+ args: {
42
+ disabled: true,
43
+ },
44
+ };
@@ -0,0 +1,39 @@
1
+ import cx from 'classnames';
2
+ import { Icon, type IconName } from '../Icon';
3
+ import { ButtonBase, type ButtonBaseProps } from './ButtonBase';
4
+
5
+ import styles from './button.module.css';
6
+
7
+ export interface ButtonProps extends Partial<ButtonBaseProps> {
8
+ icon?: IconName;
9
+ reverse?: boolean;
10
+ }
11
+
12
+ export const Button = ({
13
+ size = 'md',
14
+ reverse = false,
15
+ selected = false,
16
+ icon,
17
+ href,
18
+ children,
19
+ ...rest
20
+ }: ButtonProps) => {
21
+ return (
22
+ <ButtonBase
23
+ size={size}
24
+ selected={selected}
25
+ href={href}
26
+ className={cx(styles.button, { [styles.reverse]: reverse })}
27
+ {...rest}
28
+ >
29
+ <span className={styles.label} data-size={size}>
30
+ {children}
31
+ </span>
32
+ {icon && (
33
+ <span className={styles.icon} data-size={size}>
34
+ <Icon name={icon} />
35
+ </span>
36
+ )}
37
+ </ButtonBase>
38
+ );
39
+ };
@@ -0,0 +1,53 @@
1
+ import cx from 'classnames';
2
+ import type { ElementType, ReactNode } from 'react';
3
+
4
+ import styles from './buttonBase.module.css';
5
+
6
+ export type ButtonVariant = 'solid' | 'outline' | 'dotted' | 'text';
7
+ export type ButtonSize = 'sm' | 'md' | 'lg';
8
+ export type ButtonColor = 'primary' | 'link';
9
+
10
+ export interface ButtonBaseProps extends React.HTMLAttributes<HTMLButtonElement> {
11
+ /**
12
+ * Change the default rendered element for the one passed as a child, merging their props and behavior.
13
+ * @default false
14
+ */
15
+ as?: ElementType;
16
+ size?: ButtonSize;
17
+ variant?: ButtonVariant;
18
+ color?: ButtonColor;
19
+ selected?: boolean;
20
+ disabled?: boolean;
21
+ href?: string;
22
+ className?: string;
23
+ children?: ReactNode;
24
+ }
25
+
26
+ export const ButtonBase = ({
27
+ as,
28
+ color,
29
+ className,
30
+ children,
31
+ disabled = false,
32
+ size,
33
+ selected,
34
+ variant,
35
+ ...rest
36
+ }: ButtonBaseProps) => {
37
+ const Component = as || 'button';
38
+ return (
39
+ <Component
40
+ tabIndex={0}
41
+ data-size={size}
42
+ data-variant={variant}
43
+ data-color={color}
44
+ aria-selected={selected}
45
+ aria-disabled={disabled}
46
+ disabled={disabled}
47
+ className={cx(styles.button, className)}
48
+ {...rest}
49
+ >
50
+ {children}
51
+ </Component>
52
+ );
53
+ };
@@ -0,0 +1,45 @@
1
+ import type { Meta, StoryObj } from '@storybook/react';
2
+ import { ComboButton } from './ComboButton';
3
+
4
+ const meta = {
5
+ title: 'Atoms/Button/ComboButton',
6
+ component: ComboButton,
7
+ tags: ['autodocs'],
8
+ parameters: {},
9
+ args: {
10
+ children: 'ComboButton',
11
+ icon: 'chevron-down',
12
+ size: 'sm',
13
+ },
14
+ } satisfies Meta<typeof ComboButton>;
15
+
16
+ export default meta;
17
+ type Story = StoryObj<typeof meta>;
18
+
19
+ export const Default: Story = {
20
+ args: {},
21
+ };
22
+
23
+ export const Solid: Story = {
24
+ args: {
25
+ variant: 'solid',
26
+ },
27
+ };
28
+
29
+ export const Outline: Story = {
30
+ args: {
31
+ variant: 'outline',
32
+ },
33
+ };
34
+
35
+ export const Text: Story = {
36
+ args: {
37
+ variant: 'text',
38
+ },
39
+ };
40
+
41
+ export const Disabled: Story = {
42
+ args: {
43
+ disabled: true,
44
+ },
45
+ };
@@ -0,0 +1,44 @@
1
+ import cx from 'classnames';
2
+ import type { MouseEventHandler } from 'react';
3
+ import { Icon, type IconName } from '../Icon';
4
+ import { ButtonBase, type ButtonBaseProps } from './ButtonBase';
5
+
6
+ import styles from './comboButton.module.css';
7
+
8
+ export interface ComboButtonProps extends Omit<ButtonBaseProps, 'onClick'> {
9
+ icon: IconName;
10
+ onIconClick?: MouseEventHandler<HTMLButtonElement>;
11
+ onLabelClick?: MouseEventHandler<HTMLButtonElement>;
12
+ disabled?: boolean;
13
+ }
14
+
15
+ export const ComboButton = ({
16
+ size = 'md',
17
+ variant = 'solid',
18
+ color,
19
+ selected = false,
20
+ icon,
21
+ children,
22
+ className,
23
+ onLabelClick,
24
+ onIconClick,
25
+ }: ComboButtonProps) => {
26
+ return (
27
+ <ButtonBase
28
+ as="div"
29
+ size={size}
30
+ variant={variant}
31
+ color={color}
32
+ selected={selected}
33
+ className={cx(styles.button, className)}
34
+ >
35
+ <ButtonBase size={size} onClick={onIconClick} className={styles.icon}>
36
+ <Icon name={icon} />
37
+ </ButtonBase>
38
+ <span data-size={size} className={styles.divider} />
39
+ <ButtonBase size={size} onClick={onLabelClick} className={styles.label}>
40
+ {children}
41
+ </ButtonBase>
42
+ </ButtonBase>
43
+ );
44
+ };
@@ -0,0 +1,82 @@
1
+ .button {
2
+ display: inline-flex;
3
+ align-items: center;
4
+ border: 1px solid;
5
+ border-color: var(--link-base-default);
6
+ }
7
+
8
+ .button:focus {
9
+ border-color: var(--link-base-active);
10
+ }
11
+
12
+ .button:hover {
13
+ border-color: var(--link-base-hover);
14
+ }
15
+
16
+ .button:active {
17
+ border-color: var(--link-base-active);
18
+ }
19
+
20
+ .reverse {
21
+ flex-direction: row-reverse;
22
+ }
23
+
24
+ .button[aria-selected="true"] {
25
+ background-color: var(--theme-background-subtle);
26
+ color: var(--theme-text-default);
27
+ }
28
+
29
+ .label {
30
+ line-height: 1rem;
31
+ font-weight: 600;
32
+ }
33
+
34
+ .icon {
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ }
39
+
40
+ /* sm 36 */
41
+
42
+ .button[data-size="sm"] {
43
+ border-radius: 2px;
44
+ padding: 0 6px;
45
+ }
46
+
47
+ .label[data-size="sm"] {
48
+ font-size: 0.875rem;
49
+ padding: 9px 4px;
50
+ }
51
+
52
+ .icon[data-size="sm"] {
53
+ font-size: 1.25rem;
54
+ }
55
+
56
+ /* md 44 */
57
+
58
+ .button[data-size="md"] {
59
+ border-radius: 2px;
60
+ padding: 9px 6px;
61
+ }
62
+
63
+ .label[data-size="md"] {
64
+ font-size: 1rem;
65
+ padding: 4px 4px;
66
+ }
67
+
68
+ .icon[data-size="md"] {
69
+ font-size: 1.5rem;
70
+ }
71
+
72
+ /* lg 56 */
73
+
74
+ .button[data-size="lg"] {
75
+ border-radius: 2px;
76
+ padding: 9px 6px;
77
+ }
78
+
79
+ .label[data-size="lg"] {
80
+ font-size: 1.125rem;
81
+ padding: 10px;
82
+ }
@@ -0,0 +1,77 @@
1
+ .button {
2
+ border: none;
3
+ margin: 0;
4
+ padding: 0;
5
+ width: auto;
6
+ overflow: visible;
7
+
8
+ background: transparent;
9
+
10
+ /* inherit font & color from ancestor */
11
+ color: inherit;
12
+ font: inherit;
13
+ text-align: inherit;
14
+
15
+ /* Normalize `line-height`. Cannot be changed from `normal` in Firefox 4+. */
16
+ line-height: normal;
17
+
18
+ /* Corrects font smoothing for webkit */
19
+ -webkit-font-smoothing: inherit;
20
+ -moz-osx-font-smoothing: inherit;
21
+
22
+ /* Corrects inability to style clickable `input` types in iOS */
23
+ -webkit-appearance: none;
24
+
25
+ /* user select none */
26
+ user-select: none;
27
+ cursor: pointer;
28
+ }
29
+
30
+ .button:disabled {
31
+ opacity: 0.5;
32
+ pointer-events: none;
33
+ }
34
+
35
+ /* solid */
36
+
37
+ .button[data-variant="solid"] {
38
+ border-color: var(--theme-base-hover);
39
+ background-color: var(--theme-base-hover);
40
+ color: white;
41
+ }
42
+
43
+ /* outline */
44
+
45
+ .button[data-variant="outline"] {
46
+ border-color: var(--theme-base-hover);
47
+ border-style: solid;
48
+ }
49
+
50
+ /* dotted */
51
+
52
+ .button[data-variant="dotted"] {
53
+ border-color: var(--theme-base-hover);
54
+ border-style: dotted;
55
+ }
56
+
57
+ /* text */
58
+
59
+ .button[data-variant="text"] {
60
+ border-color: transparent;
61
+ }
62
+
63
+ /* solid + link
64
+
65
+ .button[data-color="link"][data-variant="solid"] {
66
+ background-color: var(--link-base-default);
67
+ color: white;
68
+ }
69
+
70
+ .button[data-color="link"][data-variant="solid"]:hover {
71
+ background-color: var(--link-base-hover);
72
+ }
73
+
74
+ .button[data-color="link"][data-variant="active"]:hover {
75
+ background-color: var(--link-base-active);
76
+ }
77
+ */
@@ -0,0 +1,83 @@
1
+ .button {
2
+ display: inline-flex;
3
+ flex-direction: row-reverse;
4
+ align-items: center;
5
+ border: 1px solid;
6
+ border-radius: 2px;
7
+ }
8
+
9
+ .button[aria-selected="true"] {
10
+ background-color: var(--theme-background-subtle);
11
+ color: var(--theme-text-default);
12
+ }
13
+
14
+ .label {
15
+ line-height: 1rem;
16
+ font-weight: 600;
17
+ }
18
+
19
+ .divider {
20
+ border-left: 1px solid currentColor;
21
+ width: 1px;
22
+ height: 1em;
23
+ }
24
+
25
+ .icon {
26
+ display: flex;
27
+ align-items: center;
28
+ justify-content: center;
29
+ }
30
+
31
+ /* variant */
32
+
33
+ .button[data-variant="solid"] {
34
+ border-color: var(--theme-base-hover);
35
+ background-color: var(--theme-base-hover);
36
+ color: white;
37
+ }
38
+
39
+ /* sm 36px */
40
+
41
+ .label[data-size="sm"] {
42
+ font-size: 0.875rem;
43
+ padding: 9px 10px;
44
+ }
45
+
46
+ .divider[data-size="sm"] {
47
+ height: 20px;
48
+ }
49
+
50
+ .icon[data-size="sm"] {
51
+ font-size: 1.25rem;
52
+ padding: 7px 5px;
53
+ }
54
+
55
+ /* md 44px */
56
+
57
+ .button[data-size="md"] {
58
+ font-size: 1rem;
59
+ }
60
+
61
+ .label[data-size="md"] {
62
+ padding: 10px;
63
+ }
64
+
65
+ .icon[data-size="md"] {
66
+ font-size: 1.25rem;
67
+ padding: 12px 8px;
68
+ }
69
+
70
+ /* lg 56 */
71
+
72
+ .button[data-size="lg"] {
73
+ font-size: 1.125rem;
74
+ }
75
+
76
+ .label[data-size="lg"] {
77
+ padding: 1rem;
78
+ }
79
+
80
+ .icon[data-size="lg"] {
81
+ font-size: 1.5rem;
82
+ padding: 16px 10px;
83
+ }
@@ -0,0 +1,3 @@
1
+ export * from './ButtonBase';
2
+ export * from './Button';
3
+ export * from './ComboButton';
@@ -0,0 +1,23 @@
1
+ export interface SymbolProps {
2
+ className?: string;
3
+ title?: string;
4
+ }
5
+
6
+ export const DigdirLogomark = ({ className, title = 'Digdir logomark' }: SymbolProps) => {
7
+ return (
8
+ <svg
9
+ width="1em"
10
+ height="1em"
11
+ viewBox="0 0 24 24"
12
+ fill="none"
13
+ xmlns="http://www.w3.org/2000/svg"
14
+ className={className}
15
+ >
16
+ <title>{title}</title>
17
+ <path
18
+ d="M12.3167 0H0.486059C0.357148 0 0.233518 0.0511029 0.142363 0.142066C0.0512097 0.23303 0 0.356402 0 0.485044V23.515C0 23.6436 0.0512097 23.767 0.142363 23.8579C0.233518 23.9489 0.357148 24 0.486059 24H12.3167C15.4455 23.9112 18.4163 22.6085 20.5979 20.3686C22.7795 18.1288 24 15.1284 24 12.0049C24 8.88133 22.7795 5.88089 20.5979 3.64106C18.4163 1.40122 15.4455 0.0985018 12.3167 0.00970113V0ZM13.4735 20.3815C11.6835 20.689 9.84199 20.4199 8.21543 19.6132C6.58891 18.8066 5.26188 17.5042 4.42651 15.8948C3.59114 14.2853 3.29078 12.4523 3.56892 10.6611C3.84707 8.86999 4.68929 7.2137 5.97362 5.93205C7.25795 4.6504 8.91774 3.80994 10.7126 3.53237C12.5075 3.25481 14.3444 3.55454 15.9572 4.38817C17.57 5.2218 18.875 6.54605 19.6834 8.16918C20.4918 9.79233 20.7614 11.6301 20.4534 13.4163C20.1535 15.1547 19.3216 16.7576 18.0717 18.0049C16.8218 19.2521 15.2155 20.0824 13.4735 20.3815Z"
19
+ fill="currentColor"
20
+ />
21
+ </svg>
22
+ );
23
+ };