@app-studio/web 0.9.31 → 0.9.33

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 (61) hide show
  1. package/docs/components/Accordion.mdx +158 -0
  2. package/docs/components/Alert.mdx +123 -0
  3. package/docs/components/AspectRatio.mdx +55 -0
  4. package/docs/components/Avatar.mdx +85 -0
  5. package/docs/components/Background.mdx +522 -0
  6. package/docs/components/Badge.mdx +220 -0
  7. package/docs/components/Button.mdx +272 -0
  8. package/docs/components/Calendar.mdx +274 -0
  9. package/docs/components/Card.mdx +341 -0
  10. package/docs/components/Carousel.mdx +411 -0
  11. package/docs/components/Center.mdx +474 -0
  12. package/docs/components/Chart.mdx +232 -0
  13. package/docs/components/ChatInput.mdx +373 -0
  14. package/docs/components/Checkbox.mdx +66 -0
  15. package/docs/components/ColorInput.mdx +209 -0
  16. package/docs/components/ComboBox.mdx +364 -0
  17. package/docs/components/Command.mdx +252 -0
  18. package/docs/components/ContextMenu.mdx +219 -0
  19. package/docs/components/CountryPicker.mdx +123 -0
  20. package/docs/components/DatePicker.mdx +77 -0
  21. package/docs/components/DragAndDrop.mdx +539 -0
  22. package/docs/components/DropdownMenu.mdx +205 -0
  23. package/docs/components/File.mdx +8 -0
  24. package/docs/components/Flow.mdx +257 -0
  25. package/docs/components/Form.mdx +681 -0
  26. package/docs/components/Formik.mdx +621 -0
  27. package/docs/components/Gradient.mdx +271 -0
  28. package/docs/components/Horizontal.mdx +40 -0
  29. package/docs/components/HoverCard.mdx +140 -0
  30. package/docs/components/Icon.mdx +438 -0
  31. package/docs/components/Label.mdx +438 -0
  32. package/docs/components/Link.mdx +83 -0
  33. package/docs/components/Loader.mdx +527 -0
  34. package/docs/components/Menubar.mdx +124 -0
  35. package/docs/components/Message.mdx +571 -0
  36. package/docs/components/Modal.mdx +533 -0
  37. package/docs/components/NavigationMenu.mdx +165 -0
  38. package/docs/components/Pagination.mdx +150 -0
  39. package/docs/components/Password.mdx +121 -0
  40. package/docs/components/Resizable.mdx +148 -0
  41. package/docs/components/Select.mdx +126 -0
  42. package/docs/components/Separator.mdx +121 -0
  43. package/docs/components/Sidebar.mdx +147 -0
  44. package/docs/components/Slider.mdx +232 -0
  45. package/docs/components/Switch.mdx +62 -0
  46. package/docs/components/Table.mdx +409 -0
  47. package/docs/components/Tabs.mdx +215 -0
  48. package/docs/components/TagInput.mdx +528 -0
  49. package/docs/components/Text.mdx +163 -0
  50. package/docs/components/TextArea.mdx +136 -0
  51. package/docs/components/TextField.mdx +225 -0
  52. package/docs/components/Title.mdx +535 -0
  53. package/docs/components/Toast.mdx +165 -0
  54. package/docs/components/Toggle.mdx +141 -0
  55. package/docs/components/ToggleGroup.mdx +165 -0
  56. package/docs/components/Tooltip.mdx +191 -0
  57. package/docs/components/Tree.mdx +340 -0
  58. package/docs/components/Uploader.mdx +426 -0
  59. package/docs/components/Vertical.mdx +566 -0
  60. package/docs/components.md +285 -0
  61. 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
+ ```