@delightui/components 0.1.105 → 0.1.107

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 (102) hide show
  1. package/README.md +104 -1
  2. package/dist/cjs/components/molecules/Modal/DemoModal.d.ts +8 -0
  3. package/dist/cjs/components/molecules/Modal/ModalContext/ModalContext.d.ts +41 -0
  4. package/dist/cjs/components/molecules/Modal/ModalContext/ModalContext.types.d.ts +87 -0
  5. package/dist/cjs/components/molecules/Modal/ModalContext/index.d.ts +3 -0
  6. package/dist/cjs/components/molecules/Modal/ModalContext/useModal.d.ts +34 -0
  7. package/dist/cjs/components/molecules/Modal/index.d.ts +2 -0
  8. package/dist/cjs/components/molecules/index.d.ts +2 -0
  9. package/dist/cjs/library.css +19 -6
  10. package/dist/cjs/library.js +3 -3
  11. package/dist/cjs/library.js.map +1 -1
  12. package/dist/esm/components/molecules/Modal/DemoModal.d.ts +8 -0
  13. package/dist/esm/components/molecules/Modal/ModalContext/ModalContext.d.ts +41 -0
  14. package/dist/esm/components/molecules/Modal/ModalContext/ModalContext.types.d.ts +87 -0
  15. package/dist/esm/components/molecules/Modal/ModalContext/index.d.ts +3 -0
  16. package/dist/esm/components/molecules/Modal/ModalContext/useModal.d.ts +34 -0
  17. package/dist/esm/components/molecules/Modal/index.d.ts +2 -0
  18. package/dist/esm/components/molecules/index.d.ts +2 -0
  19. package/dist/esm/library.css +19 -6
  20. package/dist/esm/library.js +3 -3
  21. package/dist/esm/library.js.map +1 -1
  22. package/dist/index.d.ts +108 -2
  23. package/docs/README.md +264 -0
  24. package/docs/components/atoms/ActionImage.md +119 -0
  25. package/docs/components/atoms/Button.md +197 -0
  26. package/docs/components/atoms/Checkbox.md +299 -0
  27. package/docs/components/atoms/CheckboxItem.md +314 -0
  28. package/docs/components/atoms/Chip.md +380 -0
  29. package/docs/components/atoms/CustomToggle.md +270 -0
  30. package/docs/components/atoms/Icon.md +365 -0
  31. package/docs/components/atoms/IconButton.md +407 -0
  32. package/docs/components/atoms/Image.md +448 -0
  33. package/docs/components/atoms/Input.md +430 -0
  34. package/docs/components/atoms/ListItem.md +502 -0
  35. package/docs/components/atoms/Password.md +472 -0
  36. package/docs/components/atoms/RadioButton.md +614 -0
  37. package/docs/components/atoms/RadioButtonItem.md +588 -0
  38. package/docs/components/atoms/ResponsiveComponent.md +612 -0
  39. package/docs/components/atoms/SelectListItem.md +609 -0
  40. package/docs/components/atoms/Slider.md +605 -0
  41. package/docs/components/atoms/Spinner.md +605 -0
  42. package/docs/components/atoms/Text.md +463 -0
  43. package/docs/components/atoms/TextArea.md +670 -0
  44. package/docs/components/atoms/ToastNotification.md +668 -0
  45. package/docs/components/atoms/Toggle.md +737 -0
  46. package/docs/components/atoms/ToggleButton.md +751 -0
  47. package/docs/components/atoms/Tooltip.md +391 -0
  48. package/docs/components/molecules/Accordion.md +440 -0
  49. package/docs/components/molecules/AccordionGroup.md +547 -0
  50. package/docs/components/molecules/ActionCard.md +546 -0
  51. package/docs/components/molecules/Breadcrumb.md +403 -0
  52. package/docs/components/molecules/Breadcrumbs.md +485 -0
  53. package/docs/components/molecules/ButtonGroup.md +383 -0
  54. package/docs/components/molecules/Card.md +298 -0
  55. package/docs/components/molecules/ChipInput.md +646 -0
  56. package/docs/components/molecules/ContextMenu.md +768 -0
  57. package/docs/components/molecules/CustomTimeSelector.md +116 -0
  58. package/docs/components/molecules/DatePicker.md +516 -0
  59. package/docs/components/molecules/DateTimeSelector.md +166 -0
  60. package/docs/components/molecules/FormField.md +312 -0
  61. package/docs/components/molecules/Grid.md +577 -0
  62. package/docs/components/molecules/GridItem.md +834 -0
  63. package/docs/components/molecules/GridList.md +244 -0
  64. package/docs/components/molecules/List.md +485 -0
  65. package/docs/components/molecules/Modal.md +470 -0
  66. package/docs/components/molecules/ModalFooter.md +702 -0
  67. package/docs/components/molecules/ModalHeader.md +756 -0
  68. package/docs/components/molecules/ModalProvider.md +205 -0
  69. package/docs/components/molecules/Nav.md +530 -0
  70. package/docs/components/molecules/NavItem.md +572 -0
  71. package/docs/components/molecules/NavLink.md +499 -0
  72. package/docs/components/molecules/Option.md +521 -0
  73. package/docs/components/molecules/Pagination.md +592 -0
  74. package/docs/components/molecules/PaginationNumberField.md +722 -0
  75. package/docs/components/molecules/Popover.md +516 -0
  76. package/docs/components/molecules/ProgressBar.md +624 -0
  77. package/docs/components/molecules/RadioGroup.md +831 -0
  78. package/docs/components/molecules/RepeaterList.md +185 -0
  79. package/docs/components/molecules/Select.md +402 -0
  80. package/docs/components/molecules/SortableTrigger.md +82 -0
  81. package/docs/components/molecules/useModal.md +379 -0
  82. package/docs/components/organisms/Dropzone.md +346 -0
  83. package/docs/components/organisms/DropzoneClear.md +135 -0
  84. package/docs/components/organisms/DropzoneContent.md +216 -0
  85. package/docs/components/organisms/DropzoneFilename.md +191 -0
  86. package/docs/components/organisms/DropzoneSupportedFormats.md +184 -0
  87. package/docs/components/organisms/DropzoneTrigger.md +209 -0
  88. package/docs/components/organisms/Form.md +533 -0
  89. package/docs/components/organisms/SlideOutPanel.md +662 -0
  90. package/docs/components/organisms/TabContent.md +902 -0
  91. package/docs/components/organisms/TabItem.md +1091 -0
  92. package/docs/components/organisms/Table.md +611 -0
  93. package/docs/components/organisms/TableBody.md +679 -0
  94. package/docs/components/organisms/TableCell.md +482 -0
  95. package/docs/components/organisms/TableHeader.md +513 -0
  96. package/docs/components/organisms/TableHeaderCell.md +661 -0
  97. package/docs/components/organisms/TableRow.md +715 -0
  98. package/docs/components/organisms/Tabs.md +1330 -0
  99. package/docs/components/utils/ConditionalView.md +568 -0
  100. package/docs/components/utils/RenderStateView.md +726 -0
  101. package/docs/components/utils/WrapTextNodes.md +614 -0
  102. package/package.json +3 -2
@@ -0,0 +1,403 @@
1
+ # Breadcrumb
2
+
3
+ ## Description
4
+
5
+ An individual breadcrumb item component that represents a single step in a navigation path. Works as a building block for breadcrumb trails, providing clickable navigation links with support for different states including active, disabled, and various visual styles.
6
+
7
+ ## Aliases
8
+
9
+ - Breadcrumb
10
+ - BreadcrumbItem
11
+ - PathItem
12
+ - NavigationItem
13
+ - RouteItem
14
+
15
+ ## Props Breakdown
16
+
17
+ **Extends:** `Omit<NavLinkProps, 'type'>`
18
+
19
+ | Prop | Type | Default | Required | Description |
20
+ |------|------|---------|----------|-------------|
21
+ | `selected` | `boolean` | `false` | No | Flag that defines the breadcrumb state as selected/active |
22
+ | `navLinkType` | `ButtonTypeEnum` | - | No | Defines the button type used for the breadcrumb link |
23
+ | `to` | `string \| -1` | - | No | Destination URL or path for navigation |
24
+ | `children` | `ReactNode` | - | Yes | Content of the breadcrumb item |
25
+ | `className` | `string` | - | No | Additional CSS class names |
26
+ | `disabled` | `boolean` | `false` | No | Whether the breadcrumb link is disabled |
27
+
28
+ ## Examples
29
+
30
+ ### Basic Usage
31
+ ```tsx
32
+ import { Breadcrumb, Text } from '@delightui/components';
33
+
34
+ function BasicExample() {
35
+ return (
36
+ <Breadcrumb to="/dashboard">
37
+ <Text type="BodyMedium">Dashboard</Text>
38
+ </Breadcrumb>
39
+ );
40
+ }
41
+ ```
42
+
43
+ ### Selected State
44
+ ```tsx
45
+ function SelectedExample() {
46
+ return (
47
+ <div className="breadcrumb-trail">
48
+ <Breadcrumb to="/home">
49
+ <Text type="BodyMedium">Home</Text>
50
+ </Breadcrumb>
51
+ <span className="breadcrumb-separator">/</span>
52
+ <Breadcrumb to="/products">
53
+ <Text type="BodyMedium">Products</Text>
54
+ </Breadcrumb>
55
+ <span className="breadcrumb-separator">/</span>
56
+ <Breadcrumb selected>
57
+ <Text type="BodyMedium">Product Details</Text>
58
+ </Breadcrumb>
59
+ </div>
60
+ );
61
+ }
62
+ ```
63
+
64
+ ### Different Button Types
65
+ ```tsx
66
+ function ButtonTypesExample() {
67
+ return (
68
+ <div className="breadcrumb-types">
69
+ <Breadcrumb to="/home" navLinkType="Filled">
70
+ <Text type="BodyMedium">Filled</Text>
71
+ </Breadcrumb>
72
+ <span className="breadcrumb-separator">/</span>
73
+
74
+ <Breadcrumb to="/products" navLinkType="Outlined">
75
+ <Text type="BodyMedium">Outlined</Text>
76
+ </Breadcrumb>
77
+ <span className="breadcrumb-separator">/</span>
78
+
79
+ <Breadcrumb to="/details" navLinkType="Ghost">
80
+ <Text type="BodyMedium">Ghost</Text>
81
+ </Breadcrumb>
82
+ <span className="breadcrumb-separator">/</span>
83
+
84
+ <Breadcrumb selected navLinkType="Text">
85
+ <Text type="BodyMedium">Text</Text>
86
+ </Breadcrumb>
87
+ </div>
88
+ );
89
+ }
90
+ ```
91
+
92
+ ### With Icons
93
+ ```tsx
94
+ function WithIconsExample() {
95
+ return (
96
+ <div className="breadcrumb-with-icons">
97
+ <Breadcrumb to="/home">
98
+ <Icon icon="Home" size="Small" />
99
+ <Text type="BodyMedium">Home</Text>
100
+ </Breadcrumb>
101
+ <span className="breadcrumb-separator">/</span>
102
+
103
+ <Breadcrumb to="/users">
104
+ <Icon icon="Users" size="Small" />
105
+ <Text type="BodyMedium">Users</Text>
106
+ </Breadcrumb>
107
+ <span className="breadcrumb-separator">/</span>
108
+
109
+ <Breadcrumb to="/profile">
110
+ <Icon icon="Person" size="Small" />
111
+ <Text type="BodyMedium">Profile</Text>
112
+ </Breadcrumb>
113
+ <span className="breadcrumb-separator">/</span>
114
+
115
+ <Breadcrumb selected>
116
+ <Icon icon="Settings" size="Small" />
117
+ <Text type="BodyMedium">Settings</Text>
118
+ </Breadcrumb>
119
+ </div>
120
+ );
121
+ }
122
+ ```
123
+
124
+ ### Disabled State
125
+ ```tsx
126
+ function DisabledExample() {
127
+ return (
128
+ <div className="breadcrumb-disabled">
129
+ <Breadcrumb to="/home">
130
+ <Text type="BodyMedium">Home</Text>
131
+ </Breadcrumb>
132
+ <span className="breadcrumb-separator">/</span>
133
+
134
+ <Breadcrumb to="/category" disabled>
135
+ <Text type="BodyMedium">Restricted Category</Text>
136
+ </Breadcrumb>
137
+ <span className="breadcrumb-separator">/</span>
138
+
139
+ <Breadcrumb selected>
140
+ <Text type="BodyMedium">Current Page</Text>
141
+ </Breadcrumb>
142
+ </div>
143
+ );
144
+ }
145
+ ```
146
+
147
+ ### E-commerce Navigation
148
+ ```tsx
149
+ function EcommerceExample() {
150
+ const breadcrumbPath = [
151
+ { label: 'Home', path: '/', icon: 'Home' },
152
+ { label: 'Electronics', path: '/electronics', icon: 'Devices' },
153
+ { label: 'Smartphones', path: '/electronics/smartphones', icon: 'Phone' },
154
+ { label: 'iPhone 15 Pro', path: '/electronics/smartphones/iphone-15-pro', selected: true }
155
+ ];
156
+
157
+ return (
158
+ <div className="ecommerce-breadcrumbs">
159
+ {breadcrumbPath.map((item, index) => (
160
+ <div key={index} className="breadcrumb-item">
161
+ {index > 0 && <span className="breadcrumb-separator">›</span>}
162
+ <Breadcrumb
163
+ to={item.path}
164
+ selected={item.selected}
165
+ className="ecommerce-breadcrumb"
166
+ >
167
+ {item.icon && <Icon icon={item.icon} size="Small" />}
168
+ <Text type="BodyMedium">{item.label}</Text>
169
+ </Breadcrumb>
170
+ </div>
171
+ ))}
172
+ </div>
173
+ );
174
+ }
175
+ ```
176
+
177
+ ### Admin Dashboard Navigation
178
+ ```tsx
179
+ function AdminDashboardExample() {
180
+ const currentPath = '/admin/users/manage/permissions';
181
+ const pathSegments = [
182
+ { label: 'Dashboard', path: '/admin', icon: 'Dashboard' },
183
+ { label: 'Users', path: '/admin/users', icon: 'Users' },
184
+ { label: 'Manage', path: '/admin/users/manage', icon: 'Settings' },
185
+ { label: 'Permissions', path: '/admin/users/manage/permissions', selected: true, icon: 'Security' }
186
+ ];
187
+
188
+ return (
189
+ <div className="admin-breadcrumbs">
190
+ {pathSegments.map((segment, index) => (
191
+ <div key={index} className="admin-breadcrumb-item">
192
+ {index > 0 && <span className="admin-separator">→</span>}
193
+ <Breadcrumb
194
+ to={segment.path}
195
+ selected={segment.selected}
196
+ navLinkType={segment.selected ? "Filled" : "Ghost"}
197
+ className="admin-breadcrumb"
198
+ >
199
+ <Icon icon={segment.icon} size="Small" />
200
+ <Text type="BodyMedium">{segment.label}</Text>
201
+ {segment.selected && <Chip size="Small" style="A">Current</Chip>}
202
+ </Breadcrumb>
203
+ </div>
204
+ ))}
205
+ </div>
206
+ );
207
+ }
208
+ ```
209
+
210
+ ### File System Navigation
211
+ ```tsx
212
+ function FileSystemExample() {
213
+ const filePath = '/documents/projects/website/assets/images/logo.png';
214
+ const pathParts = filePath.split('/').filter(Boolean);
215
+
216
+ return (
217
+ <div className="file-system-breadcrumbs">
218
+ <Breadcrumb to="/">
219
+ <Icon icon="Folder" size="Small" />
220
+ <Text type="BodyMedium">Root</Text>
221
+ </Breadcrumb>
222
+
223
+ {pathParts.map((part, index) => {
224
+ const isLast = index === pathParts.length - 1;
225
+ const fullPath = '/' + pathParts.slice(0, index + 1).join('/');
226
+ const isFile = isLast && part.includes('.');
227
+
228
+ return (
229
+ <div key={index} className="file-breadcrumb-item">
230
+ <span className="file-separator">/</span>
231
+ <Breadcrumb
232
+ to={fullPath}
233
+ selected={isLast}
234
+ className="file-breadcrumb"
235
+ >
236
+ <Icon
237
+ icon={isFile ? "InsertDriveFile" : "Folder"}
238
+ size="Small"
239
+ />
240
+ <Text type="BodyMedium">{part}</Text>
241
+ {isFile && <Chip size="Small" style="B">PNG</Chip>}
242
+ </Breadcrumb>
243
+ </div>
244
+ );
245
+ })}
246
+ </div>
247
+ );
248
+ }
249
+ ```
250
+
251
+ ### Multi-level Categories
252
+ ```tsx
253
+ function MultiLevelExample() {
254
+ const categories = [
255
+ { id: 1, name: 'Technology', path: '/tech', level: 0 },
256
+ { id: 2, name: 'Web Development', path: '/tech/web-dev', level: 1 },
257
+ { id: 3, name: 'Frontend', path: '/tech/web-dev/frontend', level: 2 },
258
+ { id: 4, name: 'React', path: '/tech/web-dev/frontend/react', level: 3, selected: true }
259
+ ];
260
+
261
+ return (
262
+ <div className="multi-level-breadcrumbs">
263
+ {categories.map((category, index) => (
264
+ <div key={category.id} className="category-breadcrumb-item">
265
+ {index > 0 && <span className="category-separator">•</span>}
266
+ <Breadcrumb
267
+ to={category.path}
268
+ selected={category.selected}
269
+ navLinkType={category.level === 0 ? "Filled" : "Ghost"}
270
+ className={`category-breadcrumb level-${category.level}`}
271
+ >
272
+ <Text
273
+ type={category.level === 0 ? "Heading6" : "BodyMedium"}
274
+ className={`category-text level-${category.level}`}
275
+ >
276
+ {category.name}
277
+ </Text>
278
+ {category.selected && (
279
+ <Icon icon="CheckCircle" size="Small" />
280
+ )}
281
+ </Breadcrumb>
282
+ </div>
283
+ ))}
284
+ </div>
285
+ );
286
+ }
287
+ ```
288
+
289
+ ### Interactive Breadcrumb with Dropdown
290
+ ```tsx
291
+ function InteractiveExample() {
292
+ const [showOptions, setShowOptions] = useState(false);
293
+ const siblingPages = [
294
+ { name: 'Overview', path: '/project/overview' },
295
+ { name: 'Timeline', path: '/project/timeline' },
296
+ { name: 'Team', path: '/project/team' },
297
+ { name: 'Files', path: '/project/files' }
298
+ ];
299
+
300
+ return (
301
+ <div className="interactive-breadcrumbs">
302
+ <Breadcrumb to="/home">
303
+ <Icon icon="Home" size="Small" />
304
+ <Text type="BodyMedium">Home</Text>
305
+ </Breadcrumb>
306
+ <span className="breadcrumb-separator">/</span>
307
+
308
+ <Breadcrumb to="/projects">
309
+ <Text type="BodyMedium">Projects</Text>
310
+ </Breadcrumb>
311
+ <span className="breadcrumb-separator">/</span>
312
+
313
+ <div className="breadcrumb-dropdown">
314
+ <Breadcrumb
315
+ selected
316
+ onClick={() => setShowOptions(!showOptions)}
317
+ className="dropdown-breadcrumb"
318
+ >
319
+ <Text type="BodyMedium">Website Redesign</Text>
320
+ <Icon icon="ExpandMore" size="Small" />
321
+ </Breadcrumb>
322
+
323
+ {showOptions && (
324
+ <div className="breadcrumb-options">
325
+ {siblingPages.map((page, index) => (
326
+ <Breadcrumb
327
+ key={index}
328
+ to={page.path}
329
+ className="dropdown-option"
330
+ >
331
+ <Text type="BodySmall">{page.name}</Text>
332
+ </Breadcrumb>
333
+ ))}
334
+ </div>
335
+ )}
336
+ </div>
337
+ </div>
338
+ );
339
+ }
340
+ ```
341
+
342
+ ### Responsive Breadcrumbs
343
+ ```tsx
344
+ function ResponsiveExample() {
345
+ const [showAll, setShowAll] = useState(false);
346
+ const breadcrumbItems = [
347
+ { label: 'Home', path: '/' },
348
+ { label: 'Products', path: '/products' },
349
+ { label: 'Electronics', path: '/products/electronics' },
350
+ { label: 'Computers', path: '/products/electronics/computers' },
351
+ { label: 'Laptops', path: '/products/electronics/computers/laptops' },
352
+ { label: 'Gaming Laptops', path: '/products/electronics/computers/laptops/gaming', selected: true }
353
+ ];
354
+
355
+ const visibleItems = showAll ? breadcrumbItems : [
356
+ breadcrumbItems[0],
357
+ ...breadcrumbItems.slice(-2)
358
+ ];
359
+
360
+ return (
361
+ <div className="responsive-breadcrumbs">
362
+ {!showAll && breadcrumbItems.length > 3 && (
363
+ <>
364
+ <Breadcrumb to={breadcrumbItems[0].path}>
365
+ <Text type="BodyMedium">{breadcrumbItems[0].label}</Text>
366
+ </Breadcrumb>
367
+ <span className="breadcrumb-separator">/</span>
368
+ <Breadcrumb
369
+ onClick={() => setShowAll(true)}
370
+ className="breadcrumb-ellipsis"
371
+ >
372
+ <Text type="BodyMedium">...</Text>
373
+ </Breadcrumb>
374
+ <span className="breadcrumb-separator">/</span>
375
+ </>
376
+ )}
377
+
378
+ {(showAll ? breadcrumbItems : breadcrumbItems.slice(-2)).map((item, index, array) => (
379
+ <div key={index} className="responsive-breadcrumb-item">
380
+ {index > 0 && <span className="breadcrumb-separator">/</span>}
381
+ <Breadcrumb
382
+ to={item.path}
383
+ selected={item.selected}
384
+ >
385
+ <Text type="BodyMedium">{item.label}</Text>
386
+ </Breadcrumb>
387
+ </div>
388
+ ))}
389
+
390
+ {showAll && (
391
+ <Button
392
+ size="Small"
393
+ type="Ghost"
394
+ onClick={() => setShowAll(false)}
395
+ className="collapse-breadcrumbs"
396
+ >
397
+ <Icon icon="ExpandLess" size="Small" />
398
+ </Button>
399
+ )}
400
+ </div>
401
+ );
402
+ }
403
+ ```