@app-studio/web 0.9.30 → 0.9.32
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/dist/components/Text/Text/Text.view.d.ts +1 -0
- package/dist/web.cjs.development.js +3 -3
- package/dist/web.cjs.development.js.map +1 -1
- package/dist/web.cjs.production.min.js +1 -1
- package/dist/web.cjs.production.min.js.map +1 -1
- package/dist/web.esm.js +3 -3
- package/dist/web.esm.js.map +1 -1
- package/dist/web.umd.development.js +3 -3
- package/dist/web.umd.development.js.map +1 -1
- package/dist/web.umd.production.min.js +1 -1
- package/dist/web.umd.production.min.js.map +1 -1
- package/docs/components/Accordion.mdx +158 -0
- package/docs/components/Alert.mdx +123 -0
- package/docs/components/AspectRatio.mdx +55 -0
- package/docs/components/Avatar.mdx +85 -0
- package/docs/components/Background.mdx +522 -0
- package/docs/components/Badge.mdx +220 -0
- package/docs/components/Button.mdx +272 -0
- package/docs/components/Calendar.mdx +274 -0
- package/docs/components/Card.mdx +341 -0
- package/docs/components/Carousel.mdx +411 -0
- package/docs/components/Center.mdx +474 -0
- package/docs/components/Chart.mdx +232 -0
- package/docs/components/ChatInput.mdx +373 -0
- package/docs/components/Checkbox.mdx +66 -0
- package/docs/components/ColorInput.mdx +209 -0
- package/docs/components/ComboBox.mdx +364 -0
- package/docs/components/Command.mdx +252 -0
- package/docs/components/ContextMenu.mdx +219 -0
- package/docs/components/CountryPicker.mdx +123 -0
- package/docs/components/DatePicker.mdx +77 -0
- package/docs/components/DragAndDrop.mdx +539 -0
- package/docs/components/DropdownMenu.mdx +205 -0
- package/docs/components/File.mdx +8 -0
- package/docs/components/Flow.mdx +257 -0
- package/docs/components/Form.mdx +681 -0
- package/docs/components/Formik.mdx +621 -0
- package/docs/components/Gradient.mdx +271 -0
- package/docs/components/Horizontal.mdx +40 -0
- package/docs/components/HoverCard.mdx +140 -0
- package/docs/components/Icon.mdx +438 -0
- package/docs/components/Label.mdx +438 -0
- package/docs/components/Link.mdx +83 -0
- package/docs/components/Loader.mdx +527 -0
- package/docs/components/Menubar.mdx +124 -0
- package/docs/components/Message.mdx +571 -0
- package/docs/components/Modal.mdx +533 -0
- package/docs/components/NavigationMenu.mdx +165 -0
- package/docs/components/Pagination.mdx +150 -0
- package/docs/components/Password.mdx +121 -0
- package/docs/components/Resizable.mdx +148 -0
- package/docs/components/Select.mdx +126 -0
- package/docs/components/Separator.mdx +121 -0
- package/docs/components/Sidebar.mdx +147 -0
- package/docs/components/Slider.mdx +232 -0
- package/docs/components/Switch.mdx +62 -0
- package/docs/components/Table.mdx +409 -0
- package/docs/components/Tabs.mdx +215 -0
- package/docs/components/TagInput.mdx +528 -0
- package/docs/components/Text.mdx +163 -0
- package/docs/components/TextArea.mdx +136 -0
- package/docs/components/TextField.mdx +225 -0
- package/docs/components/Title.mdx +535 -0
- package/docs/components/Toast.mdx +165 -0
- package/docs/components/Toggle.mdx +141 -0
- package/docs/components/ToggleGroup.mdx +165 -0
- package/docs/components/Tooltip.mdx +191 -0
- package/docs/components/Tree.mdx +340 -0
- package/docs/components/Uploader.mdx +426 -0
- package/docs/components/Vertical.mdx +566 -0
- package/package.json +1 -1
|
@@ -0,0 +1,533 @@
|
|
|
1
|
+
### **Import**
|
|
2
|
+
|
|
3
|
+
```tsx
|
|
4
|
+
import { Modal } from 'app-studio';
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
### **Default**
|
|
8
|
+
|
|
9
|
+
It uses the isOpen and onClose properties to display the modal.
|
|
10
|
+
|
|
11
|
+
```tsx
|
|
12
|
+
import { Button } from '../Button/Button';
|
|
13
|
+
import { useState } from 'react';
|
|
14
|
+
|
|
15
|
+
const [show, setShow] = useState(false);
|
|
16
|
+
|
|
17
|
+
<>
|
|
18
|
+
<Button onClick={() => setShow(true)} isAuto>
|
|
19
|
+
Open Modal
|
|
20
|
+
</Button>
|
|
21
|
+
<Modal.Overlay isOpen={show} onClose={() => setShow(false)}>
|
|
22
|
+
<Modal.Container>
|
|
23
|
+
<Modal.Header>Title</Modal.Header>
|
|
24
|
+
<Modal.Body>
|
|
25
|
+
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam.
|
|
26
|
+
Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna, vel scelerisque
|
|
27
|
+
nisl consectetur et.
|
|
28
|
+
</Modal.Body>
|
|
29
|
+
<Modal.Footer>
|
|
30
|
+
<Button onClick={() => setShow(false)}>Cancel</Button>
|
|
31
|
+
</Modal.Footer>
|
|
32
|
+
</Modal.Container>
|
|
33
|
+
</Modal.Overlay>
|
|
34
|
+
</>;
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## **Modal Overlay**
|
|
38
|
+
|
|
39
|
+
It represents the overlay or backdrop that appears behind the modal content when the modal is displayed.
|
|
40
|
+
|
|
41
|
+
### **Props**
|
|
42
|
+
|
|
43
|
+
| Prop | Type | Description | Default |
|
|
44
|
+
| ---------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------- |
|
|
45
|
+
| isOpen | boolean | Whether the modal overlay is open. | false |
|
|
46
|
+
| onClose | function | Callback function to close the modal. | |
|
|
47
|
+
| position | Position | Positions the modal overlay ('top', 'left', 'right', 'bottom', 'center'). | 'center' |
|
|
48
|
+
| blur | number | Adds a blur effect on the modal overlay. | |
|
|
49
|
+
| isClosePrevented | boolean | Prevents the user from closing the modal when clicking outside of it. | false |
|
|
50
|
+
| styles | CSSProperties | Optional custom styles for the ModalOverlay. | |
|
|
51
|
+
| className | string | Optional className for the ModalOverlay container. | |
|
|
52
|
+
|
|
53
|
+
### **Props**
|
|
54
|
+
|
|
55
|
+
| Prop | Type | Description | Default |
|
|
56
|
+
| ---------------- | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | ------- |
|
|
57
|
+
| isOpen | boolean | Whether the modal overlay is open. | false |
|
|
58
|
+
| onClose | function | Callback function to close the modal. | |
|
|
59
|
+
| position | Position | Positions the modal overlay ('top', 'left', 'right', 'bottom', 'center'). | 'center' |
|
|
60
|
+
| blur | number | Adds a blur effect on the modal overlay. | |
|
|
61
|
+
| isClosePrevented | boolean | Prevents the user from closing the modal when clicking outside of it. | false |
|
|
62
|
+
| styles | CSSProperties | Optional custom styles for the ModalOverlay. | |
|
|
63
|
+
| className | string | Optional className for the ModalOverlay container. | |
|
|
64
|
+
|
|
65
|
+
### **FullScreen**
|
|
66
|
+
|
|
67
|
+
“**is*fullScreen***” property changes the width and height of the modal so that it fits the entire screen.
|
|
68
|
+
|
|
69
|
+
```tsx
|
|
70
|
+
import { Button } from '../Button/Button';
|
|
71
|
+
import { useState } from 'react';
|
|
72
|
+
|
|
73
|
+
const [show, setShow] = useState(false);
|
|
74
|
+
|
|
75
|
+
<>
|
|
76
|
+
<Button onClick={() => setShow(true)} isAuto>
|
|
77
|
+
Full Screen
|
|
78
|
+
</Button>
|
|
79
|
+
<Modal.Overlay isOpen={show} onClose={() => setShow(false)}>
|
|
80
|
+
<Modal.Container isFullScreen>
|
|
81
|
+
<Modal.Header>Title</Modal.Header>
|
|
82
|
+
<Modal.Body>
|
|
83
|
+
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam.
|
|
84
|
+
Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna, vel scelerisque
|
|
85
|
+
nisl consectetur et.
|
|
86
|
+
</Modal.Body>
|
|
87
|
+
<Modal.Footer>
|
|
88
|
+
<Button onClick={() => setShow(false)}>Cancel</Button>
|
|
89
|
+
</Modal.Footer>
|
|
90
|
+
</Modal.Container>
|
|
91
|
+
</Modal.Overlay>
|
|
92
|
+
</>;
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### **Position**
|
|
96
|
+
|
|
97
|
+
“**_position_**” places the modal in the specified direction. It has a default positioning of “center”.
|
|
98
|
+
|
|
99
|
+
```tsx
|
|
100
|
+
import { useState } from 'react';
|
|
101
|
+
import { Button } from '../Button/Button';
|
|
102
|
+
import { Horizontal } from '../Layout/Horizontal/Horizontal';
|
|
103
|
+
|
|
104
|
+
const [showTop, setShowTop] = useState(false);
|
|
105
|
+
const [showBottom, setShowBottom] = useState(false);
|
|
106
|
+
const [showRight, setShowRight] = useState(false);
|
|
107
|
+
const [showLeft, setShowLeft] = useState(false);
|
|
108
|
+
const [showCenter, setShowCenter] = useState(false);
|
|
109
|
+
|
|
110
|
+
<>
|
|
111
|
+
<Horizontal gap={10} flexWrap="nowrap">
|
|
112
|
+
<Button onClick={() => setShowTop(true)}>Top</Button>
|
|
113
|
+
<Button onClick={() => setShowBottom(true)}>Bottom</Button>
|
|
114
|
+
<Button onClick={() => setShowRight(true)}>Right</Button>
|
|
115
|
+
<Button onClick={() => setShowLeft(true)}>Left</Button>
|
|
116
|
+
<Button onClick={() => setShowCenter(true)}>Center</Button>
|
|
117
|
+
</Horizontal>
|
|
118
|
+
|
|
119
|
+
{showBottom && (
|
|
120
|
+
<Modal.Overlay isOpen={showBottom} onClose={() => setShowBottom(false)} position="bottom">
|
|
121
|
+
<Modal.Container>
|
|
122
|
+
<Modal.Header>Title</Modal.Header>
|
|
123
|
+
<Modal.Body>
|
|
124
|
+
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam.
|
|
125
|
+
Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna, vel scelerisque
|
|
126
|
+
nisl consectetur et.
|
|
127
|
+
</Modal.Body>
|
|
128
|
+
<Modal.Footer>
|
|
129
|
+
<Button onClick={() => setShowBottom(false)}>Cancel</Button>
|
|
130
|
+
</Modal.Footer>
|
|
131
|
+
</Modal.Container>
|
|
132
|
+
</Modal.Overlay>
|
|
133
|
+
)}
|
|
134
|
+
{showTop && (
|
|
135
|
+
<Modal.Overlay isOpen={showTop} onClose={() => setShowTop(false)} position="top">
|
|
136
|
+
<Modal.Container>
|
|
137
|
+
<Modal.Header>Title</Modal.Header>
|
|
138
|
+
<Modal.Body>
|
|
139
|
+
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam.
|
|
140
|
+
Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna, vel scelerisque
|
|
141
|
+
nisl consectetur et.
|
|
142
|
+
</Modal.Body>
|
|
143
|
+
<Modal.Footer>
|
|
144
|
+
<Button onClick={() => setShowTop(false)}>Cancel</Button>
|
|
145
|
+
</Modal.Footer>
|
|
146
|
+
</Modal.Container>
|
|
147
|
+
</Modal.Overlay>
|
|
148
|
+
)}
|
|
149
|
+
{showLeft && (
|
|
150
|
+
<Modal.Overlay isOpen={showLeft} onClose={() => setShowLeft(false)} position="left">
|
|
151
|
+
<Modal.Container>
|
|
152
|
+
<Modal.Header>Title</Modal.Header>
|
|
153
|
+
<Modal.Body>
|
|
154
|
+
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam.
|
|
155
|
+
Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna, vel scelerisque
|
|
156
|
+
nisl consectetur et.
|
|
157
|
+
</Modal.Body>
|
|
158
|
+
<Modal.Footer>
|
|
159
|
+
<Button onClick={() => setShowLeft(false)}>Cancel</Button>
|
|
160
|
+
</Modal.Footer>
|
|
161
|
+
</Modal.Container>
|
|
162
|
+
</Modal.Overlay>
|
|
163
|
+
)}
|
|
164
|
+
{showRight && (
|
|
165
|
+
<Modal.Overlay isOpen={showRight} onClose={() => setShowRight(false)} position="right">
|
|
166
|
+
<Modal.Container>
|
|
167
|
+
<Modal.Header>Title</Modal.Header>
|
|
168
|
+
<Modal.Body>
|
|
169
|
+
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam.
|
|
170
|
+
Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna, vel scelerisque
|
|
171
|
+
nisl consectetur et.
|
|
172
|
+
</Modal.Body>
|
|
173
|
+
<Modal.Footer>
|
|
174
|
+
<Button onClick={() => setShowRight(false)}>Cancel</Button>
|
|
175
|
+
</Modal.Footer>
|
|
176
|
+
</Modal.Container>
|
|
177
|
+
</Modal.Overlay>
|
|
178
|
+
)}
|
|
179
|
+
{showCenter && (
|
|
180
|
+
<Modal.Overlay isOpen={showCenter} onClose={() => setShowCenter(false)} position="center">
|
|
181
|
+
<Modal.Container>
|
|
182
|
+
<Modal.Header>Title</Modal.Header>
|
|
183
|
+
<Modal.Body>
|
|
184
|
+
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam.
|
|
185
|
+
Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna, vel scelerisque
|
|
186
|
+
nisl consectetur et.
|
|
187
|
+
</Modal.Body>
|
|
188
|
+
<Modal.Footer>
|
|
189
|
+
<Button onClick={() => setShowCenter(false)}>Cancel</Button>
|
|
190
|
+
</Modal.Footer>
|
|
191
|
+
</Modal.Container>
|
|
192
|
+
</Modal.Overlay>
|
|
193
|
+
)}
|
|
194
|
+
</>;
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### **Blur**
|
|
198
|
+
|
|
199
|
+
“**_blur_**” adds a blur effect on the modal overlay.
|
|
200
|
+
|
|
201
|
+
```tsx
|
|
202
|
+
import { useState } from 'react';
|
|
203
|
+
import { Button } from '../Button/Button';
|
|
204
|
+
|
|
205
|
+
const [show, setShow] = useState(false);
|
|
206
|
+
|
|
207
|
+
<>
|
|
208
|
+
<Button onClick={() => setShow(true)}>Blur Overlay</Button>
|
|
209
|
+
<Modal.Overlay isOpen={show} onClose={() => setShow(false)} blur={10}>
|
|
210
|
+
<Modal.Container>
|
|
211
|
+
<Modal.Header>Title</Modal.Header>
|
|
212
|
+
<Modal.Body>
|
|
213
|
+
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam.
|
|
214
|
+
Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna, vel scelerisque
|
|
215
|
+
nisl consectetur et.
|
|
216
|
+
</Modal.Body>
|
|
217
|
+
<Modal.Footer>
|
|
218
|
+
<Button onClick={() => setShow(false)}>Cancel</Button>
|
|
219
|
+
</Modal.Footer>
|
|
220
|
+
</Modal.Container>
|
|
221
|
+
</Modal.Overlay>
|
|
222
|
+
</>;
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### **Prevent Close**
|
|
226
|
+
|
|
227
|
+
“**_isClosePrevented_**” prevents the user from closing the modal when clicking outside of it.
|
|
228
|
+
|
|
229
|
+
```tsx
|
|
230
|
+
import { useState } from 'react';
|
|
231
|
+
import { Button } from '../Button/Button';
|
|
232
|
+
|
|
233
|
+
const [show, setShow] = useState(false);
|
|
234
|
+
|
|
235
|
+
<>
|
|
236
|
+
<Button onClick={() => setShow(true)} isAuto>
|
|
237
|
+
Prevent Close on Overlay
|
|
238
|
+
</Button>
|
|
239
|
+
<Modal.Overlay isOpen={show} onClose={() => setShow(false)} isClosePrevented>
|
|
240
|
+
<Modal.Container>
|
|
241
|
+
<Modal.Header>Title</Modal.Header>
|
|
242
|
+
<Modal.Body>
|
|
243
|
+
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam.
|
|
244
|
+
Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna, vel scelerisque
|
|
245
|
+
nisl consectetur et.
|
|
246
|
+
</Modal.Body>
|
|
247
|
+
<Modal.Footer>
|
|
248
|
+
<Button onClick={() => setShow(false)}>Cancel</Button>
|
|
249
|
+
</Modal.Footer>
|
|
250
|
+
</Modal.Container>
|
|
251
|
+
</Modal.Overlay>
|
|
252
|
+
</>;
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## **Modal Container**
|
|
256
|
+
|
|
257
|
+
It represents the main container or wrapper that holds all the content and components of a modal.
|
|
258
|
+
|
|
259
|
+
### **Shapes**
|
|
260
|
+
|
|
261
|
+
“**_shape_**” gives a sharp or rounded edges to the modal container.
|
|
262
|
+
|
|
263
|
+
```tsx
|
|
264
|
+
import { useState } from 'react';
|
|
265
|
+
import { Button } from '../Button/Button';
|
|
266
|
+
import { Text } from '../Text/Text';
|
|
267
|
+
import { Horizontal } from '../Layout/Horizontal/Horizontal';
|
|
268
|
+
|
|
269
|
+
const [showSharp, setShowSharp] = useState(false);
|
|
270
|
+
const [showRounded, setShowRounded] = useState(false);
|
|
271
|
+
|
|
272
|
+
<>
|
|
273
|
+
<Horizontal gap={10}>
|
|
274
|
+
<Button onClick={() => setShowSharp(true)}>Sharp</Button>
|
|
275
|
+
<Button onClick={() => setShowRounded(true)}>Rounded</Button>
|
|
276
|
+
</Horizontal>
|
|
277
|
+
|
|
278
|
+
{showSharp && (
|
|
279
|
+
<Modal.Overlay isOpen={showSharp} onClose={() => setShowSharp(false)}>
|
|
280
|
+
<Modal.Container variant="sharp">
|
|
281
|
+
<Modal.Body>
|
|
282
|
+
<Text maxLines={2}>
|
|
283
|
+
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget
|
|
284
|
+
quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna, vel
|
|
285
|
+
scelerisque nisl consectetur et.
|
|
286
|
+
</Text>
|
|
287
|
+
</Modal.Body>
|
|
288
|
+
</Modal.Container>
|
|
289
|
+
</Modal.Overlay>
|
|
290
|
+
)}
|
|
291
|
+
{showRounded && (
|
|
292
|
+
<Modal.Overlay isOpen={showRounded} onClose={() => setShowRounded(false)}>
|
|
293
|
+
<Modal.Container variant="rounded">
|
|
294
|
+
<Modal.Body>
|
|
295
|
+
<Text maxLines={2}>
|
|
296
|
+
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget
|
|
297
|
+
quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna, vel
|
|
298
|
+
scelerisque nisl consectetur et.
|
|
299
|
+
</Text>
|
|
300
|
+
</Modal.Body>
|
|
301
|
+
</Modal.Container>
|
|
302
|
+
</Modal.Overlay>
|
|
303
|
+
)}
|
|
304
|
+
</>;
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### **Shadow**
|
|
308
|
+
|
|
309
|
+
“**_shadow_**” adds a shadow effect on the modal container.
|
|
310
|
+
|
|
311
|
+
```tsx
|
|
312
|
+
import { useState } from 'react';
|
|
313
|
+
import { Button } from '../Button/Button';
|
|
314
|
+
import { Text } from '../Text/Text';
|
|
315
|
+
|
|
316
|
+
const [show, setShow] = useState(false);
|
|
317
|
+
|
|
318
|
+
<>
|
|
319
|
+
<Button onClick={() => setShow(true)}>Shadow</Button>
|
|
320
|
+
|
|
321
|
+
{show && (
|
|
322
|
+
<Modal.Overlay isOpen={show} onClose={() => setShow(false)}>
|
|
323
|
+
<Modal.Container shadow={{ boxShadow: '0px 2px 8px rgba(0, 0, 0, 0.6)' }}>
|
|
324
|
+
<Modal.Body>
|
|
325
|
+
<Text maxLines={2}>
|
|
326
|
+
Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget
|
|
327
|
+
quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna, vel
|
|
328
|
+
scelerisque nisl consectetur et.
|
|
329
|
+
</Text>
|
|
330
|
+
</Modal.Body>
|
|
331
|
+
</Modal.Container>
|
|
332
|
+
</Modal.Overlay>
|
|
333
|
+
)}
|
|
334
|
+
</>;
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
## **Modal Header**
|
|
338
|
+
|
|
339
|
+
It represents the header section of a modal, which typically contains a title or heading and optionally other elements such as a close button or additional controls.
|
|
340
|
+
|
|
341
|
+
### **Close Button Alignment**
|
|
342
|
+
|
|
343
|
+
“**_buttonPosition_**” places the closing button found in the header modal in the specified direction. It has a default position of “**right**”.
|
|
344
|
+
|
|
345
|
+
```tsx
|
|
346
|
+
import { useState } from 'react';
|
|
347
|
+
import { Button } from '../Button/Button';
|
|
348
|
+
import { Horizontal } from '../Layout/Horizontal/Horizontal';
|
|
349
|
+
|
|
350
|
+
const [showRight, setShowRight] = useState(false);
|
|
351
|
+
const [showWithout, setShowWithout] = useState(false);
|
|
352
|
+
const [showLeft, setShowLeft] = useState(false);
|
|
353
|
+
|
|
354
|
+
<>
|
|
355
|
+
<Horizontal gap={10}>
|
|
356
|
+
<Button onClick={() => setShowRight(true)} isAuto>
|
|
357
|
+
Close button on the right
|
|
358
|
+
</Button>
|
|
359
|
+
<Button onClick={() => setShowWithout(true)} isAuto>
|
|
360
|
+
Without Close Button
|
|
361
|
+
</Button>
|
|
362
|
+
<Button onClick={() => setShowLeft(true)} isAuto>
|
|
363
|
+
Without Close left
|
|
364
|
+
</Button>
|
|
365
|
+
</Horizontal>
|
|
366
|
+
{showRight && (
|
|
367
|
+
<Modal.Overlay isOpen={showRight} onClose={() => setShowRight(false)}>
|
|
368
|
+
<Modal.Container>
|
|
369
|
+
<Modal.Header> Close Button</Modal.Header>
|
|
370
|
+
<Modal.Body>Cras mattis consectetur purus sit amet fermentum.</Modal.Body>
|
|
371
|
+
<Modal.Footer>
|
|
372
|
+
<Button onClick={() => setShowRight(false)}>Cancel</Button>
|
|
373
|
+
</Modal.Footer>
|
|
374
|
+
</Modal.Container>
|
|
375
|
+
</Modal.Overlay>
|
|
376
|
+
)}
|
|
377
|
+
{showWithout && (
|
|
378
|
+
<Modal.Overlay isOpen={showWithout} onClose={() => setShowWithout(false)}>
|
|
379
|
+
<Modal.Container>
|
|
380
|
+
<Modal.Header buttonPosition="none"> Close Button</Modal.Header>
|
|
381
|
+
<Modal.Body>Cras mattis consectetur purus sit amet fermentum.</Modal.Body>
|
|
382
|
+
<Modal.Footer>
|
|
383
|
+
<Button onClick={() => setShowWithout(false)}>Cancel</Button>
|
|
384
|
+
</Modal.Footer>
|
|
385
|
+
</Modal.Container>
|
|
386
|
+
</Modal.Overlay>
|
|
387
|
+
)}
|
|
388
|
+
{showLeft && (
|
|
389
|
+
<Modal.Overlay isOpen={showLeft} onClose={() => setShowLeft(false)}>
|
|
390
|
+
<Modal.Container>
|
|
391
|
+
<Modal.Header buttonPosition="left">Close Button</Modal.Header>
|
|
392
|
+
<Modal.Body>Cras mattis consectetur purus sit amet fermentum.</Modal.Body>
|
|
393
|
+
<Modal.Footer>
|
|
394
|
+
<Button onClick={() => setShowLeft(false)}>Cancel</Button>
|
|
395
|
+
</Modal.Footer>
|
|
396
|
+
</Modal.Container>
|
|
397
|
+
</Modal.Overlay>
|
|
398
|
+
)}
|
|
399
|
+
</>;
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
## **Modal Body**
|
|
403
|
+
|
|
404
|
+
It represents the main content area of a modal, where the primary information or user interaction elements are displayed.
|
|
405
|
+
|
|
406
|
+
### **LargeContent**
|
|
407
|
+
|
|
408
|
+
A vertical scroll is displayed, if the content height exceed the body height.
|
|
409
|
+
|
|
410
|
+
```tsx
|
|
411
|
+
import { useState } from 'react';
|
|
412
|
+
import { Button } from '../Button/Button';
|
|
413
|
+
import { Text } from '../Text/Text';
|
|
414
|
+
|
|
415
|
+
const [show, setShow] = useState(false);
|
|
416
|
+
|
|
417
|
+
<>
|
|
418
|
+
<Button onClick={() => setShow(true)}>Scroll</Button>
|
|
419
|
+
{show && (
|
|
420
|
+
<Modal.Overlay isOpen={show} onClose={() => setShow(false)}>
|
|
421
|
+
<Modal.Container>
|
|
422
|
+
<Modal.Header buttonPosition="none">
|
|
423
|
+
<Text size="lg" weight="semibold">
|
|
424
|
+
Title
|
|
425
|
+
</Text>
|
|
426
|
+
</Modal.Header>
|
|
427
|
+
<Modal.Body height="200px">
|
|
428
|
+
Cras mattis consectetur purus sit amet fermentum.Cras mattis consectetur purus sit amet fermentum.Cras mattis
|
|
429
|
+
consectetur purus sit amet fermentum.Cras mattis consectetur purus sit amet fermentum.Cras mattis consectetur
|
|
430
|
+
purus sit amet fermentum.Cras mattis consectetur purus sit amet fermentum.Cras mattis consectetur purus sit
|
|
431
|
+
amet fermentum.Cras mattis consectetur purus sit amet fermentum.Cras mattis consectetur purus sit amet Cras
|
|
432
|
+
mattis consectetur purus sit amet fermentum.Cras mattis consectetur purus sit amet fermentum.Cras mattis
|
|
433
|
+
consectetur purus sit amet fermentum.Cras mattis consectetur purus sit amet fermentum.Cras mattis consectetur
|
|
434
|
+
purus sit amet fermentum.Cras mattis consectetur purus sit amet fermentum.Cras mattis consectetur purus sit
|
|
435
|
+
amet fermentum.Cras mattis consectetur purus sit amet fermentum.Cras mattis consectetur purus sit amet
|
|
436
|
+
fermentum.Cras mattis consectetur purus sit amet fermentum.
|
|
437
|
+
</Modal.Body>
|
|
438
|
+
<Modal.Footer>
|
|
439
|
+
<Button onClick={() => setShow(false)}>Cancel</Button>
|
|
440
|
+
</Modal.Footer>
|
|
441
|
+
</Modal.Container>
|
|
442
|
+
</Modal.Overlay>
|
|
443
|
+
)}
|
|
444
|
+
</>;
|
|
445
|
+
```
|
|
446
|
+
|
|
447
|
+
## **Modal Footer**
|
|
448
|
+
|
|
449
|
+
It represents the footer section of a modal, which typically contains buttons or controls for actions related to the modal's content.
|
|
450
|
+
|
|
451
|
+
```tsx
|
|
452
|
+
import { useState } from 'react';
|
|
453
|
+
import { Button } from '../Button/Button';
|
|
454
|
+
import { Text } from '../Text/Text';
|
|
455
|
+
|
|
456
|
+
const [show, setShow] = useState(false);
|
|
457
|
+
|
|
458
|
+
<>
|
|
459
|
+
<Button onClick={() => setShow(true)}>Footer</Button>
|
|
460
|
+
{show && (
|
|
461
|
+
<Modal.Overlay isOpen={show} onClose={() => setShow(false)}>
|
|
462
|
+
<Modal.Container>
|
|
463
|
+
<Modal.Header buttonPosition="none">
|
|
464
|
+
<Text size="lg" weight="semibold">
|
|
465
|
+
Title
|
|
466
|
+
</Text>
|
|
467
|
+
</Modal.Header>
|
|
468
|
+
<Modal.Body height="200px">
|
|
469
|
+
Cras mattis consectetur purus sit amet fermentum.Cras mattis consectetur purus sit amet fermentum.Cras mattis
|
|
470
|
+
consectetur purus sit amet fermentum.Cras mattis consectetur purus sit amet fermentum.Cras mattis consectetur
|
|
471
|
+
purus sit amet fermentum.
|
|
472
|
+
</Modal.Body>
|
|
473
|
+
<Modal.Footer>
|
|
474
|
+
<Button onClick={() => setShow(false)}>Cancel</Button>
|
|
475
|
+
</Modal.Footer>
|
|
476
|
+
</Modal.Container>
|
|
477
|
+
</Modal.Overlay>
|
|
478
|
+
)}
|
|
479
|
+
</>;
|
|
480
|
+
```
|
|
481
|
+
|
|
482
|
+
## **Types**
|
|
483
|
+
|
|
484
|
+
```tsx
|
|
485
|
+
type Position = 'top' | 'left' | 'right' | 'bottom' | 'center';
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
```tsx
|
|
489
|
+
type Shape = 'sharp' | 'rounded';
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
```tsx
|
|
493
|
+
type CloseButtonPosition = 'left' | 'right' | 'none';
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
```tsx
|
|
497
|
+
type Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
## **Default Styles**
|
|
501
|
+
|
|
502
|
+
#### **OverlayAlignments**
|
|
503
|
+
|
|
504
|
+
```tsx
|
|
505
|
+
const OverlayAlignments: Record<Position, CSSProperties> = {
|
|
506
|
+
center: { justifyContent: 'center', alignItems: 'center' },
|
|
507
|
+
top: { justifyContent: 'center' },
|
|
508
|
+
right: { justifyContent: 'flex-end', alignItems: 'center' },
|
|
509
|
+
bottom: { justifyContent: 'center', alignItems: 'flex-end' },
|
|
510
|
+
left: { alignItems: 'center' },
|
|
511
|
+
};
|
|
512
|
+
```
|
|
513
|
+
|
|
514
|
+
#### **ContainerShapes**
|
|
515
|
+
|
|
516
|
+
```tsx
|
|
517
|
+
const ContainerShapes: Record<Shape, CSSProperties> = {
|
|
518
|
+
sharp: { borderRadius: 0 },
|
|
519
|
+
rounded: { borderRadius: 4 },
|
|
520
|
+
};
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
#### **HeaderIconSizes**
|
|
524
|
+
|
|
525
|
+
```tsx
|
|
526
|
+
const HeaderIconSizes: Record<Size, number> = {
|
|
527
|
+
xs: 12,
|
|
528
|
+
sm: 16,
|
|
529
|
+
md: 20,
|
|
530
|
+
lg: 24,
|
|
531
|
+
xl: 28,
|
|
532
|
+
};
|
|
533
|
+
```
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# NavigationMenu
|
|
2
|
+
|
|
3
|
+
A flexible navigation menu component that supports nested items, icons, and different orientations.
|
|
4
|
+
|
|
5
|
+
### **Import**
|
|
6
|
+
```tsx
|
|
7
|
+
import { NavigationMenu } from '@app-studio/web';
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
### **Default**
|
|
11
|
+
```tsx
|
|
12
|
+
import React from 'react';
|
|
13
|
+
import { NavigationMenu } from '../NavigationMenu';
|
|
14
|
+
import { HomeIcon, SettingsIcon, UserIcon } from '../../Icon/Icon';
|
|
15
|
+
|
|
16
|
+
export const DefaultNavigationMenu = () => {
|
|
17
|
+
const items = [
|
|
18
|
+
{
|
|
19
|
+
id: 'home',
|
|
20
|
+
label: 'Home',
|
|
21
|
+
icon: <HomeIcon widthHeight={20} />,
|
|
22
|
+
href: '/home'
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
id: 'settings',
|
|
26
|
+
label: 'Settings',
|
|
27
|
+
icon: <SettingsIcon widthHeight={20} />,
|
|
28
|
+
items: [
|
|
29
|
+
{
|
|
30
|
+
id: 'profile',
|
|
31
|
+
label: 'Profile',
|
|
32
|
+
icon: <UserIcon widthHeight={20} />,
|
|
33
|
+
href: '/profile'
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
return (
|
|
40
|
+
<NavigationMenu
|
|
41
|
+
items={items}
|
|
42
|
+
defaultActiveItemId="home"
|
|
43
|
+
defaultExpandedItemIds={['settings']}
|
|
44
|
+
/>
|
|
45
|
+
);
|
|
46
|
+
};
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### **Horizontal**
|
|
50
|
+
Create a horizontal navigation menu.
|
|
51
|
+
|
|
52
|
+
```tsx
|
|
53
|
+
import React from 'react';
|
|
54
|
+
import { NavigationMenu } from '../NavigationMenu';
|
|
55
|
+
import { HomeIcon, SettingsIcon } from '../../Icon/Icon';
|
|
56
|
+
|
|
57
|
+
export const HorizontalNavigationMenu = () => {
|
|
58
|
+
const items = [
|
|
59
|
+
{
|
|
60
|
+
id: 'home',
|
|
61
|
+
label: 'Home',
|
|
62
|
+
icon: <HomeIcon widthHeight={20} />,
|
|
63
|
+
href: '/home'
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
id: 'settings',
|
|
67
|
+
label: 'Settings',
|
|
68
|
+
icon: <SettingsIcon widthHeight={20} />,
|
|
69
|
+
href: '/settings'
|
|
70
|
+
}
|
|
71
|
+
];
|
|
72
|
+
|
|
73
|
+
return (
|
|
74
|
+
<NavigationMenu
|
|
75
|
+
items={items}
|
|
76
|
+
orientation="horizontal"
|
|
77
|
+
defaultActiveItemId="home"
|
|
78
|
+
/>
|
|
79
|
+
);
|
|
80
|
+
};
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### **Variants**
|
|
84
|
+
Different visual styles for the navigation menu.
|
|
85
|
+
|
|
86
|
+
```tsx
|
|
87
|
+
import React from 'react';
|
|
88
|
+
import { NavigationMenu } from '../NavigationMenu';
|
|
89
|
+
import { HomeIcon } from '../../Icon/Icon';
|
|
90
|
+
|
|
91
|
+
export const NavigationMenuVariants = () => {
|
|
92
|
+
const items = [
|
|
93
|
+
{
|
|
94
|
+
id: 'home',
|
|
95
|
+
label: 'Home',
|
|
96
|
+
icon: <HomeIcon widthHeight={20} />,
|
|
97
|
+
href: '/home'
|
|
98
|
+
}
|
|
99
|
+
];
|
|
100
|
+
|
|
101
|
+
return (
|
|
102
|
+
<>
|
|
103
|
+
<NavigationMenu
|
|
104
|
+
items={items}
|
|
105
|
+
variant="default"
|
|
106
|
+
defaultActiveItemId="home"
|
|
107
|
+
/>
|
|
108
|
+
|
|
109
|
+
<NavigationMenu
|
|
110
|
+
items={items}
|
|
111
|
+
variant="filled"
|
|
112
|
+
defaultActiveItemId="home"
|
|
113
|
+
/>
|
|
114
|
+
|
|
115
|
+
<NavigationMenu
|
|
116
|
+
items={items}
|
|
117
|
+
variant="outline"
|
|
118
|
+
defaultActiveItemId="home"
|
|
119
|
+
/>
|
|
120
|
+
</>
|
|
121
|
+
);
|
|
122
|
+
};
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### **Sizes**
|
|
126
|
+
Different sizes for the navigation menu items.
|
|
127
|
+
|
|
128
|
+
```tsx
|
|
129
|
+
import React from 'react';
|
|
130
|
+
import { NavigationMenu } from '../NavigationMenu';
|
|
131
|
+
import { HomeIcon } from '../../Icon/Icon';
|
|
132
|
+
|
|
133
|
+
export const NavigationMenuSizes = () => {
|
|
134
|
+
const items = [
|
|
135
|
+
{
|
|
136
|
+
id: 'home',
|
|
137
|
+
label: 'Home',
|
|
138
|
+
icon: <HomeIcon widthHeight={20} />,
|
|
139
|
+
href: '/home'
|
|
140
|
+
}
|
|
141
|
+
];
|
|
142
|
+
|
|
143
|
+
return (
|
|
144
|
+
<>
|
|
145
|
+
<NavigationMenu
|
|
146
|
+
items={items}
|
|
147
|
+
size="sm"
|
|
148
|
+
defaultActiveItemId="home"
|
|
149
|
+
/>
|
|
150
|
+
|
|
151
|
+
<NavigationMenu
|
|
152
|
+
items={items}
|
|
153
|
+
size="md"
|
|
154
|
+
defaultActiveItemId="home"
|
|
155
|
+
/>
|
|
156
|
+
|
|
157
|
+
<NavigationMenu
|
|
158
|
+
items={items}
|
|
159
|
+
size="lg"
|
|
160
|
+
defaultActiveItemId="home"
|
|
161
|
+
/>
|
|
162
|
+
</>
|
|
163
|
+
);
|
|
164
|
+
};
|
|
165
|
+
```
|