@salutejs/plasma-new-hope 0.66.0-dev.0 → 0.66.1-canary.1128.8446493855.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. package/package.json +2 -2
  2. package/styled-components/cjs/components/Avatar/Avatar.template-doc.mdx +97 -0
  3. package/styled-components/cjs/components/AvatarGroup/AvatarGroup.template-doc.mdx +29 -0
  4. package/styled-components/cjs/components/Badge/Badge.template-doc.mdx +131 -0
  5. package/styled-components/cjs/components/Button/Button.template-doc.mdx +162 -0
  6. package/styled-components/cjs/components/ButtonGroup/ButtonGroup.template-doc.mdx +123 -0
  7. package/styled-components/cjs/components/Calendar/Calendar.template-doc.mdx +208 -0
  8. package/styled-components/cjs/components/Checkbox/Checkbox.template-doc.mdx +44 -0
  9. package/styled-components/cjs/components/Chip/Chip.template-doc.mdx +90 -0
  10. package/styled-components/cjs/components/Combobox/Combobox.template-doc.mdx +237 -0
  11. package/styled-components/cjs/components/Counter/Counter.template-doc.mdx +76 -0
  12. package/styled-components/cjs/components/Drawer/Drawer.template-doc.mdx +170 -0
  13. package/styled-components/cjs/components/Dropdown/Dropdown.template-doc.mdx +80 -0
  14. package/styled-components/cjs/components/Grid/Grid.template-doc.mdx +142 -0
  15. package/styled-components/cjs/components/Image/Image.template-doc.mdx +26 -0
  16. package/styled-components/cjs/components/Indicator/Indicator.template-doc.mdx +76 -0
  17. package/styled-components/cjs/components/Link/Link.template-doc.mdx +23 -0
  18. package/styled-components/cjs/components/Modal/Modal.template-doc.mdx +56 -0
  19. package/styled-components/cjs/components/Notification/Notification.template-doc.mdx +59 -0
  20. package/styled-components/cjs/components/Overlay/Overlay.template-doc.mdx +10 -0
  21. package/styled-components/cjs/components/Popover/Popover.template-doc.mdx +72 -0
  22. package/styled-components/cjs/components/Popup/Popup.template-doc.mdx +209 -0
  23. package/styled-components/cjs/components/Radiobox/Radiobox.template-doc.mdx +38 -0
  24. package/styled-components/cjs/components/Segment/Segment.template-doc.mdx +61 -0
  25. package/styled-components/cjs/components/Select/Select.template-doc.mdx +115 -0
  26. package/styled-components/cjs/components/Skeleton/Skeleton.template-doc.mdx +103 -0
  27. package/styled-components/cjs/components/Spinner/Spinner.template-doc.mdx +21 -0
  28. package/styled-components/cjs/components/Switch/Switch.template-doc.mdx +24 -0
  29. package/styled-components/cjs/components/Tabs/Tabs.template-doc.mdx +94 -0
  30. package/styled-components/cjs/components/TextArea/TextArea.template-doc.mdx +88 -0
  31. package/styled-components/cjs/components/TextField/TextField.template-doc.mdx +112 -0
  32. package/styled-components/cjs/components/Toast/Toast.template-doc.mdx +153 -0
  33. package/styled-components/cjs/components/Tooltip/Tooltip.template-doc.mdx +30 -0
  34. package/styled-components/cjs/components/Typography/Typography.template-doc.mdx +127 -0
  35. package/styled-components/es/components/Avatar/Avatar.template-doc.mdx +97 -0
  36. package/styled-components/es/components/AvatarGroup/AvatarGroup.template-doc.mdx +29 -0
  37. package/styled-components/es/components/Badge/Badge.template-doc.mdx +131 -0
  38. package/styled-components/es/components/Button/Button.template-doc.mdx +162 -0
  39. package/styled-components/es/components/ButtonGroup/ButtonGroup.template-doc.mdx +123 -0
  40. package/styled-components/es/components/Calendar/Calendar.template-doc.mdx +208 -0
  41. package/styled-components/es/components/Checkbox/Checkbox.template-doc.mdx +44 -0
  42. package/styled-components/es/components/Chip/Chip.template-doc.mdx +90 -0
  43. package/styled-components/es/components/Combobox/Combobox.template-doc.mdx +237 -0
  44. package/styled-components/es/components/Counter/Counter.template-doc.mdx +76 -0
  45. package/styled-components/es/components/Drawer/Drawer.template-doc.mdx +170 -0
  46. package/styled-components/es/components/Dropdown/Dropdown.template-doc.mdx +80 -0
  47. package/styled-components/es/components/Grid/Grid.template-doc.mdx +142 -0
  48. package/styled-components/es/components/Image/Image.template-doc.mdx +26 -0
  49. package/styled-components/es/components/Indicator/Indicator.template-doc.mdx +76 -0
  50. package/styled-components/es/components/Link/Link.template-doc.mdx +23 -0
  51. package/styled-components/es/components/Modal/Modal.template-doc.mdx +56 -0
  52. package/styled-components/es/components/Notification/Notification.template-doc.mdx +59 -0
  53. package/styled-components/es/components/Overlay/Overlay.template-doc.mdx +10 -0
  54. package/styled-components/es/components/Popover/Popover.template-doc.mdx +72 -0
  55. package/styled-components/es/components/Popup/Popup.template-doc.mdx +209 -0
  56. package/styled-components/es/components/Radiobox/Radiobox.template-doc.mdx +38 -0
  57. package/styled-components/es/components/Segment/Segment.template-doc.mdx +61 -0
  58. package/styled-components/es/components/Select/Select.template-doc.mdx +115 -0
  59. package/styled-components/es/components/Skeleton/Skeleton.template-doc.mdx +103 -0
  60. package/styled-components/es/components/Spinner/Spinner.template-doc.mdx +21 -0
  61. package/styled-components/es/components/Switch/Switch.template-doc.mdx +24 -0
  62. package/styled-components/es/components/Tabs/Tabs.template-doc.mdx +94 -0
  63. package/styled-components/es/components/TextArea/TextArea.template-doc.mdx +88 -0
  64. package/styled-components/es/components/TextField/TextField.template-doc.mdx +112 -0
  65. package/styled-components/es/components/Toast/Toast.template-doc.mdx +153 -0
  66. package/styled-components/es/components/Tooltip/Tooltip.template-doc.mdx +30 -0
  67. package/styled-components/es/components/Typography/Typography.template-doc.mdx +127 -0
@@ -0,0 +1,142 @@
1
+ ---
2
+ id: grid
3
+ title: Grid
4
+ ---
5
+
6
+ import { PropsTable, Description } from '@site/src/components';
7
+
8
+ # Grid
9
+ Набор компонентов для создания сетки.
10
+
11
+ ## Breakpoints
12
+ Каждый breakpoints разрешения содержит собственное максимальное количество колонок:
13
+
14
+ | Обозначение | Ширина от, px | Ширина до, px | Кол-во колонок |
15
+ |-------------|---------------|---------------|----------------|
16
+ | largeM | 1200 | - | 30 |
17
+ | largeS | 960 | 1199 | 24 |
18
+ | mediumM | 786 | 959 | 18 |
19
+ | mediumS | 560 | 785 | 12 |
20
+ | smallS | 0 | 559 | 6 |
21
+
22
+ ## Grid
23
+ <Description name="Grid" />
24
+ <PropsTable name="Grid" />
25
+
26
+ ## Row
27
+ Блок с отрицательными отступами для размещения колонок (`Col`) по горизонтали.
28
+ Блок нельзя вкладывать сам в себя, но можно чередовать далее по дереву с использованием `Col`.
29
+ Стилизованный компонент, обладающий всеми свойствами `div`.
30
+
31
+ ## Col
32
+ <Description name="Col" />
33
+ <PropsTable name="Col" />
34
+
35
+ ## Примеры
36
+
37
+ ### Базовое применение
38
+ Размеры колонок указываются свойством `size`, отступ — свойством `offset`.
39
+
40
+ ```tsx live
41
+ import React from 'react';
42
+ import { Grid, Row, Col } from '@salutejs/{{ package }}';
43
+
44
+ export function App() {
45
+ const Filler = ({children}) => {
46
+ return (
47
+ <div
48
+ style=\{{
49
+ display: 'flex',
50
+ alignItems: 'center',
51
+ justifyContent: 'center',
52
+ width: '100%',
53
+ padding: '0.5rem 1rem',
54
+ backgroundColor: '#f0f0f0',
55
+ }}
56
+ >
57
+ {children}
58
+ </div>
59
+ )
60
+ };
61
+
62
+ return (
63
+ <Grid>
64
+ <Row>
65
+ <Col size={3}>
66
+ <Filler>3</Filler>
67
+ </Col>
68
+ <Col size={2}>
69
+ <Filler>2</Filler>
70
+ </Col>
71
+ <Col size={3}>
72
+ <Filler>3</Filler>
73
+ </Col>
74
+ <Col size={4}>
75
+ <Filler>4</Filler>
76
+ </Col>
77
+ <Col size={6}>
78
+ <Filler>6</Filler>
79
+ </Col>
80
+ </Row>
81
+ <Row>
82
+ <Col size={4} offset={1}>
83
+ <Filler>4 offset 1</Filler>
84
+ </Col>
85
+ <Col size={6} offset={2}>
86
+ <Filler>6 offset 2</Filler>
87
+ </Col>
88
+ </Row>
89
+ </Grid>
90
+ );
91
+ }
92
+ ```
93
+
94
+ ### Адаптивные размеры и отступы колонок
95
+ Свойства `size` и `offset` могут быть адаптивными.
96
+ Для этого добавьте соответствующие свойства с нужными [breakpoints](#Breakpoints).
97
+ При этом, `size` и `offset` могут выступать как fallback-значения для остальных разрешений.
98
+
99
+ ```tsx live
100
+ import React from 'react';
101
+ import { Grid, Row, Col } from '@salutejs/{{ package }}';
102
+
103
+ export function App() {
104
+ const Filler = ({children}) => {
105
+ return (
106
+ <div
107
+ style=\{{
108
+ display: 'flex',
109
+ alignItems: 'center',
110
+ justifyContent: 'center',
111
+ width: '100%',
112
+ padding: '0.5rem 1rem',
113
+ backgroundColor: '#f0f0f0',
114
+ }}
115
+ >
116
+ {children}
117
+ </div>
118
+ )
119
+ };
120
+
121
+ return (
122
+ <Grid>
123
+ <Row>
124
+ <Col smallM=\{{ size: 1 }} mediumS=\{{ size: 2 }} mediumM=\{{ size: 3 }} largeM=\{{ size: 4 }}>
125
+ <Filler>1</Filler>
126
+ </Col>
127
+ <Col size={2} largeM=\{{ size: 4 }}>
128
+ <Filler>2</Filler>
129
+ </Col>
130
+ </Row>
131
+ <Row>
132
+ <Col size={4} smallM=\{{ offset: 1 }} mediumS=\{{ offset: 2 }} mediumM=\{{ offset: 3 }} largeM=\{{ offset: 4 }}>
133
+ <Filler>4 offset 1</Filler>
134
+ </Col>
135
+ <Col size={6} offset={2} largeM=\{{ offset: 4 }}>
136
+ <Filler>6 offset 2</Filler>
137
+ </Col>
138
+ </Row>
139
+ </Grid>
140
+ );
141
+ }
142
+ ```
@@ -0,0 +1,26 @@
1
+ ---
2
+ id: image
3
+ title: Image
4
+ ---
5
+
6
+ import { PropsTable, Description } from '@site/src/components';
7
+
8
+ # Image
9
+ <Description name="Image" />
10
+ <PropsTable name="Image" />
11
+
12
+ ```tsx live
13
+ import React from 'react';
14
+ import { Image } from '@salutejs/{{ package }}';
15
+
16
+ export function App() {
17
+ return (
18
+ <Image
19
+ src="/web/images/320_320_9.jpg"
20
+ width="320px"
21
+ height="320px"
22
+ alt="Картинка для примера фоном"
23
+ />
24
+ );
25
+ }
26
+ ```
@@ -0,0 +1,76 @@
1
+ ---
2
+ id: indicator
3
+ title: Indicator
4
+ ---
5
+
6
+ import { PropsTable, Description } from '@site/src/components';
7
+
8
+ # Indicator
9
+ Индикаторы могут отображаться в нескольких размерах и цветах.
10
+
11
+ ## Indicator
12
+ <Description name="Indicator" />
13
+ <PropsTable name="Indicator" exclude={['css']} />
14
+
15
+ ## Примеры
16
+
17
+ ### Базовое использование
18
+
19
+ ```tsx live
20
+ import React from 'react';
21
+ import { Indicator } from '@salutejs/{{ package }}';
22
+
23
+ export function App() {
24
+ return (
25
+ <div>
26
+ <div style=\{{ display: 'flex' }}>
27
+ <Indicator size="s" view="default" />
28
+ <Indicator size="m" view="default" />
29
+ <Indicator size="l" view="default" />
30
+ </div>
31
+
32
+ <div style=\{{ display: 'flex' }}>
33
+ <Indicator size="s" view="accent" />
34
+ <Indicator size="m" view="accent" />
35
+ <Indicator size="l" view="accent" />
36
+ </div>
37
+
38
+ <div style=\{{ display: 'flex' }}>
39
+ <Indicator size="s" view="inactive" />
40
+ <Indicator size="m" view="inactive" />
41
+ <Indicator size="l" view="inactive" />
42
+ </div>
43
+
44
+ <div style=\{{ display: 'flex' }}>
45
+ <Indicator size="s" view="positive" />
46
+ <Indicator size="m" view="positive" />
47
+ <Indicator size="l" view="positive" />
48
+ </div>
49
+
50
+ <div style=\{{ display: 'flex' }}>
51
+ <Indicator size="s" view="warning" />
52
+ <Indicator size="m" view="warning" />
53
+ <Indicator size="l" view="warning" />
54
+ </div>
55
+
56
+ <div style=\{{ display: 'flex' }}>
57
+ <Indicator size="s" view="negative" />
58
+ <Indicator size="m" view="negative" />
59
+ <Indicator size="l" view="negative" />
60
+ </div>
61
+
62
+ <div style=\{{ display: 'flex' }}>
63
+ <Indicator size="s" view="black" />
64
+ <Indicator size="m" view="black" />
65
+ <Indicator size="l" view="black" />
66
+ </div>
67
+
68
+ <div style=\{{ display: 'flex' }}>
69
+ <Indicator size="s" view="white" />
70
+ <Indicator size="m" view="white" />
71
+ <Indicator size="l" view="white" />
72
+ </div>
73
+ </div>
74
+ );
75
+ }
76
+ ```
@@ -0,0 +1,23 @@
1
+ ---
2
+ id: link
3
+ title: Link
4
+ ---
5
+
6
+ import { PropsTable, Description } from '@site/src/components';
7
+
8
+ # Link
9
+ <Description name="Link" />
10
+ <PropsTable name="Link" exclude={['css', 'focused']} />
11
+
12
+ ```tsx live
13
+ import React from 'react';
14
+ import { P1, Link } from '@salutejs/{{ package }}';
15
+
16
+ export function App() {
17
+ return (
18
+ <P1>
19
+ Скачайте <Link href="/" target="_blank">приложение</Link>.
20
+ </P1>
21
+ );
22
+ }
23
+ ```
@@ -0,0 +1,56 @@
1
+ ---
2
+ id: modal
3
+ title: Modal
4
+ ---
5
+
6
+ import { PropsTable, Description } from '@site/src/components';
7
+
8
+ # Modal
9
+ <Description name="Modal" />
10
+ <PropsTable name="Modal" />
11
+
12
+ ## Использование
13
+
14
+ ### Провайдер контекста
15
+ Поместите `ModalsProvider` в [корень приложения](../../#корень-приложения) или там, где будете применять модальные окна:
16
+
17
+ ```tsx title="index.ts"
18
+ import ReactDOM from 'react-dom';
19
+ import { ModalsProvider } from '@salutejs/{{ package }}';
20
+
21
+ import { App } from './App';
22
+
23
+ ReactDOM.render(
24
+ <ModalsProvider>
25
+ <App />
26
+ </ModalsProvider>,
27
+ document.getElementById('root')
28
+ );
29
+ ```
30
+
31
+ ### Вызов модального окна
32
+ После подключения `ModalsProvider` поместите компонент `Modal` туда, где необходимо применить модальное окно:
33
+
34
+ ```tsx live
35
+ import React from 'react';
36
+ import { Modal, Headline3, P1, Button } from '@salutejs/{{ package }}';
37
+
38
+ export function App() {
39
+ const [isOpen, setIsOpen] = React.useState(false);
40
+
41
+ const close = React.useCallback(() => {
42
+ setIsOpen(false);
43
+ }, []);
44
+
45
+ return (
46
+ <div>
47
+ <Button text="Открыть модальное окно" onClick={() => setIsOpen(!isOpen)} />
48
+ <Modal isOpen={isOpen} onClose={close}>
49
+ <Headline3 mb={10}>Модальное окно</Headline3>
50
+ <P1>Содержимое модального окна.</P1>
51
+ <Button text="Закрыть" onClick={close} />
52
+ </Modal>
53
+ </div>
54
+ );
55
+ }
56
+ ```
@@ -0,0 +1,59 @@
1
+ ---
2
+ id: notification
3
+ title: Notification
4
+ ---
5
+
6
+ import { PropsTable, Description } from '@site/src/components';
7
+
8
+ # Notification
9
+ <Description name="Notification" />
10
+ <PropsTable name="Notification" />
11
+
12
+ ## Использование
13
+ Компонент `Notification` может использоваться для создания собственных систем оповещения.
14
+ Вид компонента контролируется свойствами (props).
15
+ Текстовая часть оповещения состоит из `title` и `children`.
16
+ Слева или сверху от нее, также можно пробросить иконку через свойство `icon`.
17
+ Также есть часть `actions`, в которой предполагается отображение кнопок для взаимодействия.
18
+
19
+ ### Провайдер контекста
20
+ Поместите `NotificationsProvider` в [корень приложения](../../#корень-приложения) или там, где будете применять модальные окна:
21
+
22
+ ```tsx title="index.ts"
23
+ import ReactDOM from 'react-dom';
24
+ import { NotificationsProvider } from '@salutejs/{{ package }}';
25
+
26
+ import { App } from './App';
27
+
28
+ ReactDOM.render(
29
+ <NotificationsProvider>
30
+ <App />
31
+ </NotificationsProvider>,
32
+ document.getElementById('root')
33
+ );
34
+ ```
35
+
36
+ ### Вызов уведомления
37
+ После подключения `NotificationsProvider` станет возможен вызов функции `addNotification`,
38
+ который приведет к отображению оповещения.
39
+ Функция принимает значения свойств компонента `Notification`:
40
+
41
+ ```tsx live
42
+ import React from 'react';
43
+ import { Button, addNotification, NotificationsProvider } from '@salutejs/{{ package }}';
44
+
45
+ export function App() {
46
+ const handleClick = React.useCallback(() => {
47
+ addNotification({
48
+ title: 'Входящий вызов',
49
+ children: 'Принять?',
50
+ }, 1000);
51
+ }, []);
52
+
53
+ return (
54
+ <NotificationsProvider>
55
+ <Button text="Показать оповещение" onClick={handleClick} />
56
+ </NotificationsProvider>
57
+ );
58
+ }
59
+ ```
@@ -0,0 +1,10 @@
1
+ ---
2
+ id: overlay
3
+ title: Overlay
4
+ ---
5
+
6
+ import { PropsTable, Description } from '@site/src/components';
7
+
8
+ # Overlay
9
+ <Description name="Overlay" />
10
+ <PropsTable name="Overlay" exclude={['css']} />
@@ -0,0 +1,72 @@
1
+ ---
2
+ id: popover
3
+ title: Popover
4
+ ---
5
+
6
+ import { PropsTable, Description } from '@site/src/components';
7
+
8
+ # Popover
9
+ <Description name="Popover" />
10
+ <PropsTable name="Popover" />
11
+
12
+ ```tsx live
13
+ import React from 'react';
14
+ import styled from "styled-components";
15
+ import { surfaceSolid03 } from "@salutejs/plasma-tokens/brands/{{ theme }}";
16
+ import { Popover, Button } from '@salutejs/{{ package }}';
17
+
18
+ export function App() {
19
+ const [isOpen, setIsOpen] = React.useState(false);
20
+
21
+ const StyledArrow = styled.div`
22
+ visibility: hidden;
23
+
24
+ &,
25
+ &::before {
26
+ position: absolute;
27
+ width: 0.5rem;
28
+ height: 0.5rem;
29
+ background: ${surfaceSolid03};
30
+ }
31
+
32
+ &::before {
33
+ visibility: visible;
34
+ content: '';
35
+ transform: rotate(45deg);
36
+ }
37
+ `;
38
+
39
+ const StyledContent = styled.div`
40
+ background: ${surfaceSolid03};
41
+ padding: 1rem;
42
+
43
+ display: flex;
44
+ flex-direction: column;
45
+ align-items: center;
46
+ `;
47
+
48
+ return (
49
+ <section style=\{{width: '20rem', height: '15rem'}}>
50
+ <Popover
51
+ isOpen={isOpen}
52
+ onToggle={(is) => setIsOpen(is)}
53
+ role="presentation"
54
+ id="popover"
55
+ target={<Button>Target</Button>}
56
+ offset={[0, 6]}
57
+ arrow={<StyledArrow/>}
58
+ placement='bottom'
59
+ trigger='click'
60
+ closeOnOverlayClick
61
+ closeOnEsc
62
+ isFocusTrapped
63
+ >
64
+ <StyledContent>
65
+ <>Content</>
66
+ <Button onClick={() => setIsOpen(false)}>close</Button>
67
+ </StyledContent>
68
+ </Popover>
69
+ </section>
70
+ );
71
+ }
72
+ ```
@@ -0,0 +1,209 @@
1
+ ---
2
+ id: popupBase
3
+ title: PopupBase
4
+ ---
5
+
6
+ import { PropsTable, Description } from '@site/src/components';
7
+
8
+ # PopupBase
9
+ <Description name="PopupBase" />
10
+ <PropsTable name="PopupBase" />
11
+
12
+ ### Провайдер контекста
13
+
14
+ Поместите `PopupBaseProvider` в [корень приложения](../../#корень-приложения) или там, где будете применять PopupBase:
15
+
16
+ ```tsx title="index.ts"
17
+ import ReactDOM from 'react-dom';
18
+ import { PopupBaseProvider } from '@salutejs/{{ package }}';
19
+
20
+ import { App } from './App';
21
+
22
+ ReactDOM.render(
23
+ <PopupBaseProvider>
24
+ <App />
25
+ </PopupBaseProvider>,
26
+ document.getElementById('root')
27
+ );
28
+ ```
29
+
30
+ ### Использование
31
+
32
+ PopupBase можно использовать как и на всем окне, так и в отдельном фрейме - свойство `frame`.
33
+ Также это свойство поддерживает передачу id элемента, в котором будет использоваться компонент.
34
+ Само позиционирование можно указать с помощью свойства `placement`(center - по умолчанию; left, right, top, bottom и их комбинации),
35
+ а также определить отступы от точки с помощью `offset`.
36
+
37
+ ```tsx live
38
+ import React, { useRef } from 'react';
39
+ import { surfaceSolid03, surfaceSolid02 } from '@salutejs/plasma-tokens/brands/{{ theme }}';
40
+ import { SSRProvider, Button, PopupBase, PopupBaseProvider } from '@salutejs/{{ package }}';
41
+
42
+ export function App() {
43
+ const [isOpenA, setIsOpenA] = React.useState(false);
44
+ const [isOpenB, setIsOpenB] = React.useState(false);
45
+
46
+ const ref = useRef();
47
+
48
+ return (
49
+ <SSRProvider>
50
+ <PopupBaseProvider>
51
+ <div style=\{{height: "500px"}}>
52
+ <div style=\{{ display: 'flex', flexDirection: 'column' }}>
53
+ <Button
54
+ style=\{{
55
+ marginTop: "1rem",
56
+ width: "15rem"
57
+ }}
58
+ text="Открыть в document"
59
+ onClick={() => setIsOpenB(true)}
60
+ />
61
+ <Button
62
+ style=\{{
63
+ marginTop: "1rem",
64
+ width: "15rem"
65
+ }}
66
+ text="Открыть во Frame"
67
+ onClick={() => setIsOpenA(true)}
68
+ />
69
+ </div>
70
+ <PopupBase
71
+ id="popupA"
72
+ frame={ref}
73
+ isOpen={isOpenA}
74
+ placement="center"
75
+ offset={[0, 0]}
76
+ >
77
+ <div style=\{{ background: surfaceSolid02, padding: "1rem" }}>
78
+ <Button onClick={() => setIsOpenA(false)}>Close</Button>
79
+ <>Content</>
80
+ </div>
81
+ </PopupBase>
82
+ <div
83
+ ref={ref}
84
+ style=\{{
85
+ marginTop: "1rem",
86
+ width: "400px",
87
+ height: "500px",
88
+ background: surfaceSolid03,
89
+ position: "absolute",
90
+
91
+ display: "flex",
92
+ alignItems: "flex-start",
93
+ justifyContent: "center",
94
+ padding: "1rem",
95
+
96
+ bottom: 0,
97
+ right: 0
98
+ }}
99
+ >
100
+ <>Frame</>
101
+ </div>
102
+ <PopupBase
103
+ id="popupB"
104
+ frame="document"
105
+ isOpen={isOpenB}
106
+ placement="center"
107
+ offset={[0, 0]}
108
+ >
109
+ <Content>
110
+ <Button onClick={() => setIsOpenB(false)}>Close</Button>
111
+ <>Content</>
112
+ </Content>
113
+ </PopupBase>
114
+ </div>
115
+ </PopupBaseProvider>
116
+ </SSRProvider>
117
+ );
118
+ }
119
+ ```
120
+
121
+ ## Подключение анимации
122
+
123
+ Для подключения анимации нужно добавить параметр `withAnimation`.
124
+ Само управление происходит с помощью классов через переменные `endAnimation`, `endTransition` из объекта `popupBaseClasses` для `PopupBase`.
125
+ Для добавления анимации необходимо использовать класс `.popup-base-root` через переменную `popupBaseClasses.root` из пакета.
126
+
127
+ Пример:
128
+
129
+ ```tsx
130
+ const StyledPopupTransition = styled(PopupBase)`
131
+ && > .${popupBaseClasses.root} {
132
+ opacity: 1;
133
+ transition: opacity 0.5s 0.1s;
134
+ }
135
+
136
+ &&.${popupBaseClasses.endTransition} > .${popupBaseClasses.root} {
137
+ opacity: 0;
138
+ transition: opacity 0.5s 0.1s;
139
+ }
140
+ `;
141
+ ```
142
+
143
+ или
144
+
145
+ ```tsx
146
+ const StyledPopupAnimation = styled(PopupBase)`
147
+ && > .${popupBaseClasses.root} {
148
+ animation: fadeIn 1s forwards;
149
+ }
150
+
151
+ &&.${popupBaseClasses.endAnimation} > .${popupBaseClasses.root} {
152
+ animation: fadeOut 1s forwards;
153
+ }
154
+
155
+ @keyframes fadeIn {
156
+ from {
157
+ opacity: 0;
158
+ }
159
+
160
+ to {
161
+ opacity: 1;
162
+ }
163
+ }
164
+
165
+ @keyframes fadeOut {
166
+ from {
167
+ opacity: 1;
168
+ }
169
+
170
+ to {
171
+ opacity: 0;
172
+ }
173
+ }
174
+ `;
175
+ ```
176
+
177
+ И в самом компоненте:
178
+
179
+ ```tsx
180
+ const [isOpen, setIsOpen] = React.useState(false);
181
+
182
+ return (
183
+ <>
184
+ <div>
185
+ <Button
186
+ style=\{{
187
+ marginTop: "1rem",
188
+ width: "15rem"
189
+ }}
190
+ text="Открыть"
191
+ onClick={() => setIsOpen(true)}
192
+ />
193
+ </div>
194
+ <StyledPopupAnimation
195
+ id="popup-id"
196
+ withAnimation
197
+ frame="document"
198
+ isOpen={isOpen}
199
+ placement="center"
200
+ offset={[0, 0]}
201
+ >
202
+ <div>
203
+ <Button onClick={() => setIsOpen(false)}>Close</Button>
204
+ </div>
205
+ </StyledPopupAnimation>
206
+ </>
207
+ );
208
+ }
209
+ ```