@mdigital_ui/ui 0.1.0 → 0.1.2
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/README.md +50 -6
- package/dist/breadcrumbs/index.js +7 -0
- package/dist/breadcrumbs/index.js.map +1 -0
- package/dist/button-group/index.js +4 -0
- package/dist/button-group/index.js.map +1 -0
- package/dist/chunk-56IXGP5C.js +56 -0
- package/dist/chunk-56IXGP5C.js.map +1 -0
- package/dist/chunk-7PKVBUGL.js +38 -0
- package/dist/chunk-7PKVBUGL.js.map +1 -0
- package/dist/chunk-HUVXKOJC.js +198 -0
- package/dist/chunk-HUVXKOJC.js.map +1 -0
- package/dist/chunk-I5ANSIDK.js +561 -0
- package/dist/chunk-I5ANSIDK.js.map +1 -0
- package/dist/chunk-RMGIO27V.js +111 -0
- package/dist/chunk-RMGIO27V.js.map +1 -0
- package/dist/clipboard/index.js +4 -0
- package/dist/clipboard/index.js.map +1 -0
- package/dist/grid/index.js +4 -0
- package/dist/grid/index.js.map +1 -0
- package/dist/index.js +29 -948
- package/dist/index.js.map +1 -1
- package/dist/upload/index.js +4 -0
- package/dist/upload/index.js.map +1 -0
- package/package.json +86 -4
package/README.md
CHANGED
|
@@ -21,12 +21,42 @@ npm install @mdigital/ui
|
|
|
21
21
|
|
|
22
22
|
### Peer Dependencies
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
Required dependencies:
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
27
|
npm install react react-dom tailwindcss
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
+
Optional dependencies (install only what you need based on components you use):
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# For advanced components (Modal, Tooltip, Dropdown, Popover)
|
|
34
|
+
npm install @radix-ui/react-dialog @radix-ui/react-popover @radix-ui/react-tooltip
|
|
35
|
+
|
|
36
|
+
# For icons
|
|
37
|
+
npm install lucide-react
|
|
38
|
+
|
|
39
|
+
# For DatePicker
|
|
40
|
+
npm install react-datepicker dayjs
|
|
41
|
+
|
|
42
|
+
# For Table
|
|
43
|
+
npm install @tanstack/react-table @tanstack/react-virtual
|
|
44
|
+
|
|
45
|
+
# For Carousel
|
|
46
|
+
npm install swiper
|
|
47
|
+
|
|
48
|
+
# For Command
|
|
49
|
+
npm install cmdk
|
|
50
|
+
|
|
51
|
+
# For Charts
|
|
52
|
+
npm install recharts
|
|
53
|
+
|
|
54
|
+
# For Drawer
|
|
55
|
+
npm install vaul
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
See [TREE_SHAKING_GUIDE.md](./TREE_SHAKING_GUIDE.md) for detailed information on optimizing your bundle.
|
|
59
|
+
|
|
30
60
|
## Quick Start
|
|
31
61
|
|
|
32
62
|
### 1. Configure Tailwind
|
|
@@ -74,25 +104,39 @@ function App() {
|
|
|
74
104
|
|
|
75
105
|
## Import Patterns
|
|
76
106
|
|
|
77
|
-
###
|
|
107
|
+
### Subpath Imports (Recommended for Tree-Shaking)
|
|
108
|
+
|
|
109
|
+
For optimal bundle size and to avoid installing unnecessary dependencies:
|
|
78
110
|
|
|
79
111
|
```tsx
|
|
80
|
-
import
|
|
112
|
+
import Button from '@mdigital/ui/button'
|
|
113
|
+
import Input from '@mdigital/ui/input'
|
|
114
|
+
import Select from '@mdigital/ui/select'
|
|
81
115
|
```
|
|
82
116
|
|
|
83
|
-
|
|
117
|
+
**Benefits:**
|
|
118
|
+
- Only bundles the components you use
|
|
119
|
+
- Avoids peer dependency warnings for unused components
|
|
120
|
+
- Fastest build times
|
|
121
|
+
|
|
122
|
+
### Named Imports (Requires All Peer Dependencies)
|
|
123
|
+
|
|
124
|
+
If you've installed all optional peer dependencies, you can use named imports:
|
|
84
125
|
|
|
85
126
|
```tsx
|
|
86
|
-
import Button from '@mdigital/ui
|
|
87
|
-
import Input from '@mdigital/ui/input'
|
|
127
|
+
import { Button, Input, Select, Table, DatePicker } from '@mdigital/ui'
|
|
88
128
|
```
|
|
89
129
|
|
|
130
|
+
**Note:** This requires installing all optional peer dependencies, even for components you don't use. Your bundler may fail if dependencies for unused components aren't installed.
|
|
131
|
+
|
|
90
132
|
### Type Imports
|
|
91
133
|
|
|
92
134
|
```tsx
|
|
93
135
|
import type { ButtonProps, InputProps } from '@mdigital/ui'
|
|
94
136
|
```
|
|
95
137
|
|
|
138
|
+
**See [TREE_SHAKING_GUIDE.md](./TREE_SHAKING_GUIDE.md) for detailed import strategies.**
|
|
139
|
+
|
|
96
140
|
## Theming
|
|
97
141
|
|
|
98
142
|
### CSS Variable Overrides
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, breadcrumbs_default as default } from '../chunk-HUVXKOJC.js';
|
|
2
|
+
import '../chunk-KNQ7UQ2W.js';
|
|
3
|
+
import '../chunk-3PFA3YG6.js';
|
|
4
|
+
import '../chunk-5UEWVFF6.js';
|
|
5
|
+
import '../chunk-YNNAOXU5.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { cn } from './chunk-YNNAOXU5.js';
|
|
2
|
+
import { cva } from 'class-variance-authority';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var buttonGroupVariants = cva("inline-flex", {
|
|
7
|
+
variants: {
|
|
8
|
+
vertical: {
|
|
9
|
+
true: "flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:last-child)]:border-b-0 [&>*:not(:last-child)]:rounded-b-none",
|
|
10
|
+
false: "flex-row [&>*:not(:first-child)]:rounded-l-none [&>*:not(:last-child)]:border-r-0 [&>*:not(:last-child)]:rounded-r-none"
|
|
11
|
+
},
|
|
12
|
+
spacing: {
|
|
13
|
+
true: "gap-2",
|
|
14
|
+
false: "gap-0"
|
|
15
|
+
},
|
|
16
|
+
fullWidth: {
|
|
17
|
+
true: "w-full [&>*]:flex-1",
|
|
18
|
+
false: ""
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
defaultVariants: {
|
|
22
|
+
vertical: false,
|
|
23
|
+
fullWidth: false
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
var ButtonGroup = React.memo(
|
|
27
|
+
({
|
|
28
|
+
vertical = false,
|
|
29
|
+
spacing = false,
|
|
30
|
+
fullWidth = false,
|
|
31
|
+
className,
|
|
32
|
+
children,
|
|
33
|
+
ref,
|
|
34
|
+
...props
|
|
35
|
+
}) => {
|
|
36
|
+
return /* @__PURE__ */ jsx(
|
|
37
|
+
"div",
|
|
38
|
+
{
|
|
39
|
+
ref,
|
|
40
|
+
role: "group",
|
|
41
|
+
className: cn(
|
|
42
|
+
buttonGroupVariants({ vertical, spacing, fullWidth }),
|
|
43
|
+
className
|
|
44
|
+
),
|
|
45
|
+
...props,
|
|
46
|
+
children
|
|
47
|
+
}
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
);
|
|
51
|
+
ButtonGroup.displayName = "ButtonGroup";
|
|
52
|
+
var button_group_default = ButtonGroup;
|
|
53
|
+
|
|
54
|
+
export { button_group_default };
|
|
55
|
+
//# sourceMappingURL=chunk-56IXGP5C.js.map
|
|
56
|
+
//# sourceMappingURL=chunk-56IXGP5C.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/button-group/index.tsx"],"names":[],"mappings":";;;;;AAMA,IAAM,mBAAA,GAAsB,IAAI,aAAA,EAAe;AAAA,EAC7C,QAAA,EAAU;AAAA,IACR,QAAA,EAAU;AAAA,MACR,IAAA,EAAM,yHAAA;AAAA,MACN,KAAA,EACE;AAAA,KACJ;AAAA,IACA,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACT;AAAA,IACA,SAAA,EAAW;AAAA,MACT,IAAA,EAAM,qBAAA;AAAA,MACN,KAAA,EAAO;AAAA;AACT,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,QAAA,EAAU,KAAA;AAAA,IACV,SAAA,EAAW;AAAA;AAEf,CAAC,CAAA;AAED,IAAM,cAAc,KAAA,CAAM,IAAA;AAAA,EACxB,CAAC;AAAA,IACC,QAAA,GAAW,KAAA;AAAA,IACX,OAAA,GAAU,KAAA;AAAA,IACV,SAAA,GAAY,KAAA;AAAA,IACZ,SAAA;AAAA,IACA,QAAA;AAAA,IACA,GAAA;AAAA,IACA,GAAG;AAAA,GACL,KAAM;AACJ,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,OAAA;AAAA,QACL,SAAA,EAAW,EAAA;AAAA,UACT,mBAAA,CAAoB,EAAE,QAAA,EAAU,OAAA,EAAS,WAAW,CAAA;AAAA,UACpD;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH;AAAA;AAAA,KACH;AAAA,EAEJ;AACF,CAAA;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;AAG1B,IAAO,oBAAA,GAAQ","file":"chunk-56IXGP5C.js","sourcesContent":["import { cva } from 'class-variance-authority'\nimport React from 'react'\n\nimport { cn } from '../utils'\nimport type { ButtonGroupProps } from './types'\n\nconst buttonGroupVariants = cva('inline-flex', {\n variants: {\n vertical: {\n true: 'flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:last-child)]:border-b-0 [&>*:not(:last-child)]:rounded-b-none',\n false:\n 'flex-row [&>*:not(:first-child)]:rounded-l-none [&>*:not(:last-child)]:border-r-0 [&>*:not(:last-child)]:rounded-r-none',\n },\n spacing: {\n true: 'gap-2',\n false: 'gap-0',\n },\n fullWidth: {\n true: 'w-full [&>*]:flex-1',\n false: '',\n },\n },\n defaultVariants: {\n vertical: false,\n fullWidth: false,\n },\n})\n\nconst ButtonGroup = React.memo<ButtonGroupProps>(\n ({\n vertical = false,\n spacing = false,\n fullWidth = false,\n className,\n children,\n ref,\n ...props\n }) => {\n return (\n <div\n ref={ref}\n role=\"group\"\n className={cn(\n buttonGroupVariants({ vertical, spacing, fullWidth }),\n className,\n )}\n {...props}\n >\n {children}\n </div>\n )\n },\n)\n\nButtonGroup.displayName = 'ButtonGroup'\n\nexport type * from './types'\nexport default ButtonGroup\n"]}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { cn } from './chunk-YNNAOXU5.js';
|
|
2
|
+
import { cva } from 'class-variance-authority';
|
|
3
|
+
import React from 'react';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var gridVariants = cva("w-full grid", {
|
|
7
|
+
variants: {
|
|
8
|
+
gap: {
|
|
9
|
+
xs: "gap-2",
|
|
10
|
+
sm: "gap-4",
|
|
11
|
+
md: "gap-6",
|
|
12
|
+
lg: "gap-8"
|
|
13
|
+
},
|
|
14
|
+
columns: {
|
|
15
|
+
1: "grid-cols-1",
|
|
16
|
+
2: "grid-cols-1 md:grid-cols-2",
|
|
17
|
+
3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3",
|
|
18
|
+
4: "grid-cols-1 md:grid-cols-2 lg:grid-cols-4",
|
|
19
|
+
5: "grid-cols-1 md:grid-cols-3 lg:grid-cols-5",
|
|
20
|
+
6: "grid-cols-1 md:grid-cols-3 lg:grid-cols-6"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
defaultVariants: {
|
|
24
|
+
gap: "md",
|
|
25
|
+
columns: 3
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
var Grid = React.memo(
|
|
29
|
+
({ children, columns = 3, gap = "md", className }) => {
|
|
30
|
+
return /* @__PURE__ */ jsx("div", { className: cn(gridVariants({ gap, columns }), className), children });
|
|
31
|
+
}
|
|
32
|
+
);
|
|
33
|
+
Grid.displayName = "Grid";
|
|
34
|
+
var grid_default = Grid;
|
|
35
|
+
|
|
36
|
+
export { grid_default };
|
|
37
|
+
//# sourceMappingURL=chunk-7PKVBUGL.js.map
|
|
38
|
+
//# sourceMappingURL=chunk-7PKVBUGL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/grid/index.tsx"],"names":[],"mappings":";;;;;AAMA,IAAM,YAAA,GAAe,IAAI,aAAA,EAAe;AAAA,EACtC,QAAA,EAAU;AAAA,IACR,GAAA,EAAK;AAAA,MACH,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI,OAAA;AAAA,MACJ,EAAA,EAAI;AAAA,KACN;AAAA,IACA,OAAA,EAAS;AAAA,MACP,CAAA,EAAG,aAAA;AAAA,MACH,CAAA,EAAG,4BAAA;AAAA,MACH,CAAA,EAAG,2CAAA;AAAA,MACH,CAAA,EAAG,2CAAA;AAAA,MACH,CAAA,EAAG,2CAAA;AAAA,MACH,CAAA,EAAG;AAAA;AACL,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,GAAA,EAAK,IAAA;AAAA,IACL,OAAA,EAAS;AAAA;AAEb,CAAC,CAAA;AAED,IAAM,OAAO,KAAA,CAAM,IAAA;AAAA,EACjB,CAAC,EAAE,QAAA,EAAU,OAAA,GAAU,GAAG,GAAA,GAAM,IAAA,EAAM,WAAU,KAAM;AACpD,IAAA,uBACE,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,YAAA,CAAa,EAAE,GAAA,EAAK,OAAA,EAAS,CAAA,EAAG,SAAS,CAAA,EACzD,QAAA,EACH,CAAA;AAAA,EAEJ;AACF,CAAA;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA;AAGnB,IAAO,YAAA,GAAQ","file":"chunk-7PKVBUGL.js","sourcesContent":["import { cva } from 'class-variance-authority'\nimport React from 'react'\n\nimport { cn } from '../utils'\nimport type { GridProps } from './types'\n\nconst gridVariants = cva('w-full grid', {\n variants: {\n gap: {\n xs: 'gap-2',\n sm: 'gap-4',\n md: 'gap-6',\n lg: 'gap-8',\n },\n columns: {\n 1: 'grid-cols-1',\n 2: 'grid-cols-1 md:grid-cols-2',\n 3: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-3',\n 4: 'grid-cols-1 md:grid-cols-2 lg:grid-cols-4',\n 5: 'grid-cols-1 md:grid-cols-3 lg:grid-cols-5',\n 6: 'grid-cols-1 md:grid-cols-3 lg:grid-cols-6',\n },\n },\n defaultVariants: {\n gap: 'md',\n columns: 3,\n },\n})\n\nconst Grid = React.memo<GridProps>(\n ({ children, columns = 3, gap = 'md', className }) => {\n return (\n <div className={cn(gridVariants({ gap, columns }), className)}>\n {children}\n </div>\n )\n },\n)\n\nGrid.displayName = 'Grid'\n\nexport type * from './types'\nexport default Grid\n"]}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { dropdown_default } from './chunk-KNQ7UQ2W.js';
|
|
2
|
+
import { textColorVariants } from './chunk-5UEWVFF6.js';
|
|
3
|
+
import { cn, iconSizes } from './chunk-YNNAOXU5.js';
|
|
4
|
+
import { cva } from 'class-variance-authority';
|
|
5
|
+
import { ChevronRight, MoreHorizontal, MoreVertical } from 'lucide-react';
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
8
|
+
|
|
9
|
+
var BreadcrumbContext = React.createContext({});
|
|
10
|
+
var breadcrumbVariants = cva("", {
|
|
11
|
+
variants: {
|
|
12
|
+
size: {
|
|
13
|
+
xs: "text-xs",
|
|
14
|
+
sm: "text-sm",
|
|
15
|
+
md: "text-base",
|
|
16
|
+
lg: "text-lg"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
defaultVariants: {
|
|
20
|
+
size: "md"
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
var Breadcrumb = React.memo(
|
|
24
|
+
({
|
|
25
|
+
children,
|
|
26
|
+
items,
|
|
27
|
+
color = "default",
|
|
28
|
+
size = "md",
|
|
29
|
+
separator,
|
|
30
|
+
className
|
|
31
|
+
}) => {
|
|
32
|
+
const content = items?.length ? /* @__PURE__ */ jsx(BreadcrumbList, { children: items.map((item, index) => {
|
|
33
|
+
const isLast = index === items.length - 1;
|
|
34
|
+
return /* @__PURE__ */ jsxs(React.Fragment, { children: [
|
|
35
|
+
/* @__PURE__ */ jsx(BreadcrumbItem, { children: item.ellipsis ? /* @__PURE__ */ jsx(
|
|
36
|
+
BreadcrumbEllipsis,
|
|
37
|
+
{
|
|
38
|
+
orientation: item.ellipsisOrientation || "horizontal",
|
|
39
|
+
items: item.ellipsisItems || [],
|
|
40
|
+
size
|
|
41
|
+
}
|
|
42
|
+
) : isLast ? /* @__PURE__ */ jsx(
|
|
43
|
+
BreadcrumbPage,
|
|
44
|
+
{
|
|
45
|
+
leftIcon: item.leftIcon,
|
|
46
|
+
rightIcon: item.rightIcon,
|
|
47
|
+
children: item.label
|
|
48
|
+
}
|
|
49
|
+
) : /* @__PURE__ */ jsx(
|
|
50
|
+
BreadcrumbLink,
|
|
51
|
+
{
|
|
52
|
+
href: item.href || "",
|
|
53
|
+
onClick: item.onClick,
|
|
54
|
+
leftIcon: item.leftIcon,
|
|
55
|
+
rightIcon: item.rightIcon,
|
|
56
|
+
children: item.label
|
|
57
|
+
}
|
|
58
|
+
) }),
|
|
59
|
+
!isLast && /* @__PURE__ */ jsx(BreadcrumbSeparator, { size, children: separator })
|
|
60
|
+
] }, index);
|
|
61
|
+
}) }) : children;
|
|
62
|
+
return /* @__PURE__ */ jsx(BreadcrumbContext.Provider, { value: { color, size }, children: /* @__PURE__ */ jsx(
|
|
63
|
+
"nav",
|
|
64
|
+
{
|
|
65
|
+
"aria-label": "breadcrumb",
|
|
66
|
+
className: cn(
|
|
67
|
+
breadcrumbVariants({ size }),
|
|
68
|
+
textColorVariants({ color }),
|
|
69
|
+
className
|
|
70
|
+
),
|
|
71
|
+
children: content
|
|
72
|
+
}
|
|
73
|
+
) });
|
|
74
|
+
}
|
|
75
|
+
);
|
|
76
|
+
Breadcrumb.displayName = "Breadcrumb";
|
|
77
|
+
var BreadcrumbList = React.memo(
|
|
78
|
+
({ children, className }) => {
|
|
79
|
+
return /* @__PURE__ */ jsx("ol", { className: cn("flex items-center gap-1.5", className), children });
|
|
80
|
+
}
|
|
81
|
+
);
|
|
82
|
+
BreadcrumbList.displayName = "BreadcrumbList";
|
|
83
|
+
var BreadcrumbItem = React.memo(
|
|
84
|
+
({ children, className }) => {
|
|
85
|
+
return /* @__PURE__ */ jsx("li", { className: cn("inline-flex items-center gap-1.5", className), children });
|
|
86
|
+
}
|
|
87
|
+
);
|
|
88
|
+
BreadcrumbItem.displayName = "BreadcrumbItem";
|
|
89
|
+
var BreadcrumbLink = React.memo(
|
|
90
|
+
({ children, href, onClick, leftIcon, rightIcon, className }) => {
|
|
91
|
+
const handleClick = (e) => {
|
|
92
|
+
if (onClick) {
|
|
93
|
+
e.preventDefault();
|
|
94
|
+
onClick();
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
const content = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
98
|
+
leftIcon && /* @__PURE__ */ jsx("span", { className: "inline-flex items-center", children: leftIcon }),
|
|
99
|
+
children,
|
|
100
|
+
rightIcon && /* @__PURE__ */ jsx("span", { className: "inline-flex items-center", children: rightIcon })
|
|
101
|
+
] });
|
|
102
|
+
if (href) {
|
|
103
|
+
return /* @__PURE__ */ jsx(
|
|
104
|
+
"a",
|
|
105
|
+
{
|
|
106
|
+
href,
|
|
107
|
+
onClick: handleClick,
|
|
108
|
+
className: cn(
|
|
109
|
+
"inline-flex items-center gap-1.5 transition-colors hover:underline cursor-pointer",
|
|
110
|
+
className
|
|
111
|
+
),
|
|
112
|
+
children: content
|
|
113
|
+
}
|
|
114
|
+
);
|
|
115
|
+
}
|
|
116
|
+
if (onClick) {
|
|
117
|
+
return /* @__PURE__ */ jsx(
|
|
118
|
+
"button",
|
|
119
|
+
{
|
|
120
|
+
onClick: handleClick,
|
|
121
|
+
className: cn(
|
|
122
|
+
"inline-flex items-center gap-1.5 transition-colors hover:underline cursor-pointer",
|
|
123
|
+
className
|
|
124
|
+
),
|
|
125
|
+
children: content
|
|
126
|
+
}
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
return /* @__PURE__ */ jsx("span", { className: cn("inline-flex items-center gap-1.5", className), children: content });
|
|
130
|
+
}
|
|
131
|
+
);
|
|
132
|
+
BreadcrumbLink.displayName = "BreadcrumbLink";
|
|
133
|
+
var BreadcrumbPage = React.memo(
|
|
134
|
+
({ children, leftIcon, rightIcon, className }) => {
|
|
135
|
+
return /* @__PURE__ */ jsxs(
|
|
136
|
+
"span",
|
|
137
|
+
{
|
|
138
|
+
"aria-current": "page",
|
|
139
|
+
className: cn(
|
|
140
|
+
"inline-flex items-center gap-1.5 font-medium",
|
|
141
|
+
className
|
|
142
|
+
),
|
|
143
|
+
children: [
|
|
144
|
+
leftIcon && /* @__PURE__ */ jsx("span", { className: "inline-flex items-center", children: leftIcon }),
|
|
145
|
+
children,
|
|
146
|
+
rightIcon && /* @__PURE__ */ jsx("span", { className: "inline-flex items-center", children: rightIcon })
|
|
147
|
+
]
|
|
148
|
+
}
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
);
|
|
152
|
+
BreadcrumbPage.displayName = "BreadcrumbPage";
|
|
153
|
+
var BreadcrumbSeparator = React.memo(
|
|
154
|
+
({ children, className, size = "md" }) => {
|
|
155
|
+
return /* @__PURE__ */ jsx("span", { className: cn("text-text-muted", className), children: children ?? /* @__PURE__ */ jsx(ChevronRight, { className: iconSizes[size] }) });
|
|
156
|
+
}
|
|
157
|
+
);
|
|
158
|
+
BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
|
|
159
|
+
var BreadcrumbEllipsis = React.memo(
|
|
160
|
+
({ orientation = "horizontal", items, children, className, size = "md" }) => {
|
|
161
|
+
const Icon = orientation === "horizontal" ? MoreHorizontal : MoreVertical;
|
|
162
|
+
const ellipsisButton = /* @__PURE__ */ jsxs(
|
|
163
|
+
"span",
|
|
164
|
+
{
|
|
165
|
+
role: "presentation",
|
|
166
|
+
"aria-hidden": "true",
|
|
167
|
+
className: cn(
|
|
168
|
+
"flex items-center justify-center",
|
|
169
|
+
items || children ? "cursor-pointer" : "",
|
|
170
|
+
className
|
|
171
|
+
),
|
|
172
|
+
children: [
|
|
173
|
+
/* @__PURE__ */ jsx(Icon, { className: iconSizes[size] }),
|
|
174
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "More" })
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
);
|
|
178
|
+
if (items || children) {
|
|
179
|
+
const dropdownItems = (items || []).map((item) => ({
|
|
180
|
+
label: item.label || "",
|
|
181
|
+
value: item.label || "",
|
|
182
|
+
onClick: item.onClick || (() => {
|
|
183
|
+
if (item.href) {
|
|
184
|
+
window.location.href = item.href;
|
|
185
|
+
}
|
|
186
|
+
})
|
|
187
|
+
}));
|
|
188
|
+
return /* @__PURE__ */ jsx(dropdown_default, { items: dropdownItems, children: ellipsisButton });
|
|
189
|
+
}
|
|
190
|
+
return ellipsisButton;
|
|
191
|
+
}
|
|
192
|
+
);
|
|
193
|
+
BreadcrumbEllipsis.displayName = "BreadcrumbEllipsis";
|
|
194
|
+
var breadcrumbs_default = Breadcrumb;
|
|
195
|
+
|
|
196
|
+
export { BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, breadcrumbs_default };
|
|
197
|
+
//# sourceMappingURL=chunk-HUVXKOJC.js.map
|
|
198
|
+
//# sourceMappingURL=chunk-HUVXKOJC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/breadcrumbs/index.tsx"],"names":[],"mappings":"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","file":"chunk-HUVXKOJC.js","sourcesContent":["import { cva } from 'class-variance-authority'\nimport { ChevronRight, MoreHorizontal, MoreVertical } from 'lucide-react'\nimport React from 'react'\n\nimport Dropdown from '../dropdown'\nimport { cn, iconSizes } from '../utils'\nimport { textColorVariants } from '../variants'\nimport type {\n BreadcrumbEllipsisProps,\n BreadcrumbItemProps,\n BreadcrumbLinkProps,\n BreadcrumbListProps,\n BreadcrumbPageProps,\n BreadcrumbProps,\n BreadcrumbsColor,\n BreadcrumbSeparatorProps,\n BreadcrumbsSize,\n} from './types'\n\nexport type { BreadcrumbItemData } from './types'\n\ninterface BreadcrumbContextValue {\n color?: BreadcrumbsColor\n size?: BreadcrumbsSize\n}\n\nconst BreadcrumbContext = React.createContext<BreadcrumbContextValue>({})\n\nconst breadcrumbVariants = cva('', {\n variants: {\n size: {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n})\n\nconst Breadcrumb = React.memo<BreadcrumbProps>(\n ({\n children,\n items,\n color = 'default',\n size = 'md',\n separator,\n className,\n }) => {\n const content = items?.length ? (\n <BreadcrumbList>\n {items.map((item, index) => {\n const isLast = index === items.length - 1\n return (\n <React.Fragment key={index}>\n <BreadcrumbItem>\n {item.ellipsis ? (\n <BreadcrumbEllipsis\n orientation={item.ellipsisOrientation || 'horizontal'}\n items={item.ellipsisItems || []}\n size={size}\n />\n ) : isLast ? (\n <BreadcrumbPage\n leftIcon={item.leftIcon}\n rightIcon={item.rightIcon}\n >\n {item.label}\n </BreadcrumbPage>\n ) : (\n <BreadcrumbLink\n href={item.href || ''}\n onClick={item.onClick}\n leftIcon={item.leftIcon}\n rightIcon={item.rightIcon}\n >\n {item.label}\n </BreadcrumbLink>\n )}\n </BreadcrumbItem>\n {!isLast && (\n <BreadcrumbSeparator size={size}>\n {separator}\n </BreadcrumbSeparator>\n )}\n </React.Fragment>\n )\n })}\n </BreadcrumbList>\n ) : (\n children\n )\n\n return (\n <BreadcrumbContext.Provider value={{ color, size }}>\n <nav\n aria-label=\"breadcrumb\"\n className={cn(\n breadcrumbVariants({ size }),\n textColorVariants({ color }),\n className,\n )}\n >\n {content}\n </nav>\n </BreadcrumbContext.Provider>\n )\n },\n)\n\nBreadcrumb.displayName = 'Breadcrumb'\n\nexport const BreadcrumbList = React.memo<BreadcrumbListProps>(\n ({ children, className }) => {\n return (\n <ol className={cn('flex items-center gap-1.5', className)}>{children}</ol>\n )\n },\n)\n\nBreadcrumbList.displayName = 'BreadcrumbList'\n\nexport const BreadcrumbItem = React.memo<BreadcrumbItemProps>(\n ({ children, className }) => {\n return (\n <li className={cn('inline-flex items-center gap-1.5', className)}>\n {children}\n </li>\n )\n },\n)\n\nBreadcrumbItem.displayName = 'BreadcrumbItem'\n\nexport const BreadcrumbLink = React.memo<BreadcrumbLinkProps>(\n ({ children, href, onClick, leftIcon, rightIcon, className }) => {\n const handleClick = (e: React.MouseEvent) => {\n if (onClick) {\n e.preventDefault()\n onClick()\n }\n }\n\n const content = (\n <>\n {leftIcon && (\n <span className=\"inline-flex items-center\">{leftIcon}</span>\n )}\n {children}\n {rightIcon && (\n <span className=\"inline-flex items-center\">{rightIcon}</span>\n )}\n </>\n )\n\n if (href) {\n return (\n <a\n href={href}\n onClick={handleClick}\n className={cn(\n 'inline-flex items-center gap-1.5 transition-colors hover:underline cursor-pointer',\n className,\n )}\n >\n {content}\n </a>\n )\n }\n\n if (onClick) {\n return (\n <button\n onClick={handleClick}\n className={cn(\n 'inline-flex items-center gap-1.5 transition-colors hover:underline cursor-pointer',\n className,\n )}\n >\n {content}\n </button>\n )\n }\n\n return (\n <span className={cn('inline-flex items-center gap-1.5', className)}>\n {content}\n </span>\n )\n },\n)\n\nBreadcrumbLink.displayName = 'BreadcrumbLink'\n\nexport const BreadcrumbPage = React.memo<BreadcrumbPageProps>(\n ({ children, leftIcon, rightIcon, className }) => {\n return (\n <span\n aria-current=\"page\"\n className={cn(\n 'inline-flex items-center gap-1.5 font-medium',\n className,\n )}\n >\n {leftIcon && (\n <span className=\"inline-flex items-center\">{leftIcon}</span>\n )}\n {children}\n {rightIcon && (\n <span className=\"inline-flex items-center\">{rightIcon}</span>\n )}\n </span>\n )\n },\n)\n\nBreadcrumbPage.displayName = 'BreadcrumbPage'\n\nexport const BreadcrumbSeparator = React.memo<BreadcrumbSeparatorProps>(\n ({ children, className, size = 'md' }) => {\n return (\n <span className={cn('text-text-muted', className)}>\n {children ?? <ChevronRight className={iconSizes[size]} />}\n </span>\n )\n },\n)\n\nBreadcrumbSeparator.displayName = 'BreadcrumbSeparator'\n\nexport const BreadcrumbEllipsis = React.memo<BreadcrumbEllipsisProps>(\n ({ orientation = 'horizontal', items, children, className, size = 'md' }) => {\n const Icon = orientation === 'horizontal' ? MoreHorizontal : MoreVertical\n\n const ellipsisButton = (\n <span\n role=\"presentation\"\n aria-hidden=\"true\"\n className={cn(\n 'flex items-center justify-center',\n items || children ? 'cursor-pointer' : '',\n className,\n )}\n >\n <Icon className={iconSizes[size]} />\n <span className=\"sr-only\">More</span>\n </span>\n )\n\n // If items or children are provided, wrap in Dropdown\n if (items || children) {\n const dropdownItems = (items || []).map((item) => ({\n label: item.label || '',\n value: item.label || '',\n onClick:\n item.onClick ||\n (() => {\n if (item.href) {\n window.location.href = item.href\n }\n }),\n }))\n\n return <Dropdown items={dropdownItems}>{ellipsisButton}</Dropdown>\n }\n\n return ellipsisButton\n },\n)\n\nBreadcrumbEllipsis.displayName = 'BreadcrumbEllipsis'\n\nexport type * from './types'\nexport default Breadcrumb\n"]}
|