@windrun-huaiin/base-ui 15.1.1 → 20.0.0
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/LICENSE +1 -1
- package/README.md +4 -4
- package/dist/components/global-icon.d.ts +15 -1
- package/dist/components/global-icon.js +4 -35
- package/dist/components/global-icon.mjs +5 -36
- package/dist/components/icon-factory.d.ts +15 -0
- package/dist/components/icon-factory.js +39 -0
- package/dist/components/icon-factory.mjs +35 -0
- package/dist/components/language-switcher.d.ts +1 -1
- package/dist/components/language-switcher.js +3 -3
- package/dist/components/language-switcher.mjs +3 -3
- package/dist/components/limited-lucide-icons.d.ts +1 -1
- package/dist/components/limited-lucide-icons.js +56 -0
- package/dist/components/limited-lucide-icons.mjs +1 -1
- package/dist/components/server.d.ts +1 -0
- package/dist/components/server.js +191 -0
- package/dist/components/server.mjs +2 -0
- package/dist/icons/index.d.ts +189 -0
- package/dist/icons/index.js +418 -0
- package/dist/icons/index.mjs +225 -0
- package/dist/ui/button.js +2 -2
- package/dist/ui/button.mjs +2 -2
- package/dist/ui/copyable-text.js +2 -2
- package/dist/ui/copyable-text.mjs +2 -2
- package/dist/ui/dropdown-menu.js +4 -4
- package/dist/ui/dropdown-menu.mjs +4 -4
- package/dist/ui/language-button.js +1 -1
- package/dist/ui/language-button.mjs +1 -1
- package/package.json +7 -2
- package/src/components/global-icon.tsx +7 -65
- package/src/components/icon-factory.tsx +92 -0
- package/src/components/language-switcher.tsx +4 -4
- package/src/components/limited-lucide-icons.ts +14 -0
- package/src/components/server.ts +1 -0
- package/src/icons/index.ts +381 -0
- package/src/ui/button.tsx +2 -2
- package/src/ui/copyable-text.tsx +3 -3
- package/src/ui/dropdown-menu.tsx +4 -4
- package/src/ui/language-button.tsx +1 -1
package/LICENSE
CHANGED
package/README.md
CHANGED
|
@@ -75,12 +75,12 @@ This package includes 28 built-in icons as React components. All icons are acces
|
|
|
75
75
|
|
|
76
76
|
### 1. Direct Icon Usage
|
|
77
77
|
```tsx
|
|
78
|
-
import {
|
|
78
|
+
import { GitHubIcon, BTCIcon, MmdIcon} from '@windrun-huaiin/base-ui';
|
|
79
79
|
|
|
80
80
|
// Use any built-in icon
|
|
81
|
-
<
|
|
82
|
-
<
|
|
83
|
-
<
|
|
81
|
+
<GitHubIcon className="h-6 w-6" />
|
|
82
|
+
<BTCIcon className="h-4 w-4" />
|
|
83
|
+
<MmdIcon className="h-4 w-4" /> // Auto 16x16 size for Mermaid
|
|
84
84
|
```
|
|
85
85
|
|
|
86
86
|
### 2. Dynamic Icon Loading
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { type StyledLucideIconComponent } from '@base-ui/components/icon-factory';
|
|
1
2
|
import { type LucideProps } from 'lucide-react';
|
|
2
3
|
import React from 'react';
|
|
3
|
-
type StyledLucideIconComponent = (props: LucideProps) => React.ReactElement;
|
|
4
4
|
type IconComponent = StyledLucideIconComponent | React.ComponentType<LucideProps>;
|
|
5
5
|
export declare const globalLucideIcons: {
|
|
6
6
|
GitHub: StyledLucideIconComponent;
|
|
@@ -39,6 +39,7 @@ export declare const globalLucideIcons: {
|
|
|
39
39
|
ArrowLeft: StyledLucideIconComponent;
|
|
40
40
|
ArrowRight: StyledLucideIconComponent;
|
|
41
41
|
ArrowUp: StyledLucideIconComponent;
|
|
42
|
+
Baby: StyledLucideIconComponent;
|
|
42
43
|
Bell: StyledLucideIconComponent;
|
|
43
44
|
Binary: StyledLucideIconComponent;
|
|
44
45
|
Blocks: StyledLucideIconComponent;
|
|
@@ -57,7 +58,9 @@ export declare const globalLucideIcons: {
|
|
|
57
58
|
BotMessageSquare: StyledLucideIconComponent;
|
|
58
59
|
Brain: StyledLucideIconComponent;
|
|
59
60
|
BrainCircuit: StyledLucideIconComponent;
|
|
61
|
+
Briefcase: StyledLucideIconComponent;
|
|
60
62
|
BringToFront: StyledLucideIconComponent;
|
|
63
|
+
BrushCleaning: StyledLucideIconComponent;
|
|
61
64
|
Building2: StyledLucideIconComponent;
|
|
62
65
|
Bug: StyledLucideIconComponent;
|
|
63
66
|
BugOff: StyledLucideIconComponent;
|
|
@@ -78,6 +81,7 @@ export declare const globalLucideIcons: {
|
|
|
78
81
|
ChevronLeft: StyledLucideIconComponent;
|
|
79
82
|
ChevronRight: StyledLucideIconComponent;
|
|
80
83
|
ChevronUp: StyledLucideIconComponent;
|
|
84
|
+
Coffee: StyledLucideIconComponent;
|
|
81
85
|
Coins: StyledLucideIconComponent;
|
|
82
86
|
ComponentIcon: StyledLucideIconComponent;
|
|
83
87
|
Copy: StyledLucideIconComponent;
|
|
@@ -87,6 +91,8 @@ export declare const globalLucideIcons: {
|
|
|
87
91
|
DatabaseZap: StyledLucideIconComponent;
|
|
88
92
|
Dot: StyledLucideIconComponent;
|
|
89
93
|
Download: StyledLucideIconComponent;
|
|
94
|
+
Ellipsis: StyledLucideIconComponent;
|
|
95
|
+
EllipsisVertical: StyledLucideIconComponent;
|
|
90
96
|
Eye: StyledLucideIconComponent;
|
|
91
97
|
EyeOff: StyledLucideIconComponent;
|
|
92
98
|
ExternalLink: StyledLucideIconComponent;
|
|
@@ -111,6 +117,7 @@ export declare const globalLucideIcons: {
|
|
|
111
117
|
HandHeart: StyledLucideIconComponent;
|
|
112
118
|
Handshake: StyledLucideIconComponent;
|
|
113
119
|
Highlighter: StyledLucideIconComponent;
|
|
120
|
+
History: StyledLucideIconComponent;
|
|
114
121
|
HousePlus: StyledLucideIconComponent;
|
|
115
122
|
Infinity: StyledLucideIconComponent;
|
|
116
123
|
Info: StyledLucideIconComponent;
|
|
@@ -132,6 +139,7 @@ export declare const globalLucideIcons: {
|
|
|
132
139
|
Mail: StyledLucideIconComponent;
|
|
133
140
|
MessageCircleMore: StyledLucideIconComponent;
|
|
134
141
|
MessageCircleCode: StyledLucideIconComponent;
|
|
142
|
+
MessageSquareDiff: StyledLucideIconComponent;
|
|
135
143
|
Music4: StyledLucideIconComponent;
|
|
136
144
|
MoreHorizontal: StyledLucideIconComponent;
|
|
137
145
|
MousePointerClick: StyledLucideIconComponent;
|
|
@@ -142,6 +150,9 @@ export declare const globalLucideIcons: {
|
|
|
142
150
|
PawPrint: StyledLucideIconComponent;
|
|
143
151
|
Pencil: StyledLucideIconComponent;
|
|
144
152
|
Pi: StyledLucideIconComponent;
|
|
153
|
+
Pin: StyledLucideIconComponent;
|
|
154
|
+
PinOff: StyledLucideIconComponent;
|
|
155
|
+
Plus: StyledLucideIconComponent;
|
|
145
156
|
QrCode: StyledLucideIconComponent;
|
|
146
157
|
ReceiptText: StyledLucideIconComponent;
|
|
147
158
|
RefreshCcw: StyledLucideIconComponent;
|
|
@@ -153,6 +164,7 @@ export declare const globalLucideIcons: {
|
|
|
153
164
|
Scale: StyledLucideIconComponent;
|
|
154
165
|
ScanSearch: StyledLucideIconComponent;
|
|
155
166
|
Search: StyledLucideIconComponent;
|
|
167
|
+
Send: StyledLucideIconComponent;
|
|
156
168
|
SendHorizontal: StyledLucideIconComponent;
|
|
157
169
|
Settings: StyledLucideIconComponent;
|
|
158
170
|
Settings2: StyledLucideIconComponent;
|
|
@@ -169,9 +181,11 @@ export declare const globalLucideIcons: {
|
|
|
169
181
|
Star: StyledLucideIconComponent;
|
|
170
182
|
Tablets: StyledLucideIconComponent;
|
|
171
183
|
Terminal: StyledLucideIconComponent;
|
|
184
|
+
Trash2: StyledLucideIconComponent;
|
|
172
185
|
Twitter: StyledLucideIconComponent;
|
|
173
186
|
Usb: StyledLucideIconComponent;
|
|
174
187
|
UserRoundCheck: StyledLucideIconComponent;
|
|
188
|
+
Wand2: StyledLucideIconComponent;
|
|
175
189
|
Workflow: StyledLucideIconComponent;
|
|
176
190
|
X: StyledLucideIconComponent;
|
|
177
191
|
Zap: StyledLucideIconComponent;
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
var jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
var index = require('../assets/index.js');
|
|
5
|
+
var iconFactory = require('./icon-factory.js');
|
|
6
|
+
var limitedLucideIcons = require('./limited-lucide-icons.js');
|
|
5
7
|
var themeUtil = require('../lib/theme-util.js');
|
|
6
8
|
var utils = require('@windrun-huaiin/lib/utils');
|
|
7
|
-
var limitedLucideIcons = require('./limited-lucide-icons.js');
|
|
8
9
|
var React = require('react');
|
|
9
10
|
|
|
10
11
|
// Style Lucide icons with global color
|
|
@@ -19,23 +20,7 @@ for (const iconNameKey in limitedLucideIcons) {
|
|
|
19
20
|
OriginalIconComponent !== null &&
|
|
20
21
|
OriginalIconComponent.$$typeof === Symbol.for('react.forward_ref'))) {
|
|
21
22
|
const ComponentToRender = OriginalIconComponent;
|
|
22
|
-
|
|
23
|
-
const originalClassName = props.className || '';
|
|
24
|
-
// Check if user provided a text color class, if so, don't use global color
|
|
25
|
-
const hasTextColor = /\btext-\w+(-\d+)?\b/.test(originalClassName);
|
|
26
|
-
// Check if user provided size/dimension classes
|
|
27
|
-
const hasSizeClass = /\b(size-\d+|w-\d+|h-\d+)\b/.test(originalClassName);
|
|
28
|
-
const newClassName = hasTextColor
|
|
29
|
-
? originalClassName
|
|
30
|
-
: `${themeUtil.themeIconColor} ${originalClassName}`.trim();
|
|
31
|
-
// If user provided size classes in className, don't use default size
|
|
32
|
-
// Otherwise, use inline styles to ensure size precedence over external CSS
|
|
33
|
-
const finalProps = hasSizeClass
|
|
34
|
-
? Object.assign(Object.assign({}, props), { className: newClassName, size: undefined }) : Object.assign(Object.assign({}, props), { className: newClassName, style: Object.assign({ width: props.size || themeUtil.themeSvgIconSize, height: props.size || themeUtil.themeSvgIconSize }, props.style) });
|
|
35
|
-
return jsxRuntime.jsx(ComponentToRender, Object.assign({}, finalProps));
|
|
36
|
-
};
|
|
37
|
-
StyledIcon.displayName = `Styled(${iconName})`;
|
|
38
|
-
tempStyledLimitedIcons[iconName] = StyledIcon;
|
|
23
|
+
tempStyledLimitedIcons[iconName] = iconFactory.createGlobalIcon(ComponentToRender, String(iconName));
|
|
39
24
|
}
|
|
40
25
|
else {
|
|
41
26
|
console.warn(`[global-icon.tsx] Skipped styling for "${iconName}" as it is not a function, undefined, or not a recognized React component type. Value:`, OriginalIconComponent);
|
|
@@ -46,23 +31,7 @@ const styledLimitedIconsPart = tempStyledLimitedIcons;
|
|
|
46
31
|
// Wrap built-in SVG components with the same className handling logic
|
|
47
32
|
const tempWrappedBuiltinIcons = {};
|
|
48
33
|
for (const [iconName, IconComponent] of Object.entries(index.BUILTIN_ICON_COMPONENTS)) {
|
|
49
|
-
|
|
50
|
-
const originalClassName = props.className || '';
|
|
51
|
-
// Check if user provided a text color class, if so, don't use global color
|
|
52
|
-
const hasTextColor = /\btext-\w+(-\d+)?\b/.test(originalClassName);
|
|
53
|
-
// Check if user provided size/dimension classes
|
|
54
|
-
const hasSizeClass = /\b(size-\d+|w-\d+|h-\d+)\b/.test(originalClassName);
|
|
55
|
-
const newClassName = hasTextColor
|
|
56
|
-
? originalClassName
|
|
57
|
-
: `${themeUtil.themeIconColor} ${originalClassName}`.trim();
|
|
58
|
-
// If user provided size classes in className, don't use default size
|
|
59
|
-
// Otherwise, use inline styles to ensure size precedence over external CSS
|
|
60
|
-
const finalProps = hasSizeClass
|
|
61
|
-
? Object.assign(Object.assign({}, props), { className: newClassName, size: undefined }) : Object.assign(Object.assign({}, props), { className: newClassName, style: Object.assign({ width: props.size || themeUtil.themeSvgIconSize, height: props.size || themeUtil.themeSvgIconSize }, props.style) });
|
|
62
|
-
return jsxRuntime.jsx(IconComponent, Object.assign({}, finalProps));
|
|
63
|
-
};
|
|
64
|
-
WrappedIcon.displayName = `Wrapped(${iconName})`;
|
|
65
|
-
tempWrappedBuiltinIcons[iconName] = WrappedIcon;
|
|
34
|
+
tempWrappedBuiltinIcons[iconName] = iconFactory.createGlobalIcon(IconComponent, String(iconName));
|
|
66
35
|
}
|
|
67
36
|
const wrappedBuiltinIconsPart = tempWrappedBuiltinIcons;
|
|
68
37
|
// All icons should be imported from here, and icons will occupy the project package size, so it is best to design and plan in advance
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { BUILTIN_ICON_COMPONENTS } from '../assets/index.mjs';
|
|
3
|
-
import {
|
|
4
|
-
import { cn } from '@windrun-huaiin/lib/utils';
|
|
3
|
+
import { createGlobalIcon } from './icon-factory.mjs';
|
|
5
4
|
import * as limitedLucideIcons from './limited-lucide-icons.mjs';
|
|
5
|
+
import { themeBorderColor, themeRingColor, themeIconColor } from '../lib/theme-util.mjs';
|
|
6
|
+
import { cn } from '@windrun-huaiin/lib/utils';
|
|
6
7
|
import React__default from 'react';
|
|
7
8
|
|
|
8
9
|
// Style Lucide icons with global color
|
|
@@ -17,23 +18,7 @@ for (const iconNameKey in limitedLucideIcons) {
|
|
|
17
18
|
OriginalIconComponent !== null &&
|
|
18
19
|
OriginalIconComponent.$$typeof === Symbol.for('react.forward_ref'))) {
|
|
19
20
|
const ComponentToRender = OriginalIconComponent;
|
|
20
|
-
|
|
21
|
-
const originalClassName = props.className || '';
|
|
22
|
-
// Check if user provided a text color class, if so, don't use global color
|
|
23
|
-
const hasTextColor = /\btext-\w+(-\d+)?\b/.test(originalClassName);
|
|
24
|
-
// Check if user provided size/dimension classes
|
|
25
|
-
const hasSizeClass = /\b(size-\d+|w-\d+|h-\d+)\b/.test(originalClassName);
|
|
26
|
-
const newClassName = hasTextColor
|
|
27
|
-
? originalClassName
|
|
28
|
-
: `${themeIconColor} ${originalClassName}`.trim();
|
|
29
|
-
// If user provided size classes in className, don't use default size
|
|
30
|
-
// Otherwise, use inline styles to ensure size precedence over external CSS
|
|
31
|
-
const finalProps = hasSizeClass
|
|
32
|
-
? Object.assign(Object.assign({}, props), { className: newClassName, size: undefined }) : Object.assign(Object.assign({}, props), { className: newClassName, style: Object.assign({ width: props.size || themeSvgIconSize, height: props.size || themeSvgIconSize }, props.style) });
|
|
33
|
-
return jsx(ComponentToRender, Object.assign({}, finalProps));
|
|
34
|
-
};
|
|
35
|
-
StyledIcon.displayName = `Styled(${iconName})`;
|
|
36
|
-
tempStyledLimitedIcons[iconName] = StyledIcon;
|
|
21
|
+
tempStyledLimitedIcons[iconName] = createGlobalIcon(ComponentToRender, String(iconName));
|
|
37
22
|
}
|
|
38
23
|
else {
|
|
39
24
|
console.warn(`[global-icon.tsx] Skipped styling for "${iconName}" as it is not a function, undefined, or not a recognized React component type. Value:`, OriginalIconComponent);
|
|
@@ -44,23 +29,7 @@ const styledLimitedIconsPart = tempStyledLimitedIcons;
|
|
|
44
29
|
// Wrap built-in SVG components with the same className handling logic
|
|
45
30
|
const tempWrappedBuiltinIcons = {};
|
|
46
31
|
for (const [iconName, IconComponent] of Object.entries(BUILTIN_ICON_COMPONENTS)) {
|
|
47
|
-
|
|
48
|
-
const originalClassName = props.className || '';
|
|
49
|
-
// Check if user provided a text color class, if so, don't use global color
|
|
50
|
-
const hasTextColor = /\btext-\w+(-\d+)?\b/.test(originalClassName);
|
|
51
|
-
// Check if user provided size/dimension classes
|
|
52
|
-
const hasSizeClass = /\b(size-\d+|w-\d+|h-\d+)\b/.test(originalClassName);
|
|
53
|
-
const newClassName = hasTextColor
|
|
54
|
-
? originalClassName
|
|
55
|
-
: `${themeIconColor} ${originalClassName}`.trim();
|
|
56
|
-
// If user provided size classes in className, don't use default size
|
|
57
|
-
// Otherwise, use inline styles to ensure size precedence over external CSS
|
|
58
|
-
const finalProps = hasSizeClass
|
|
59
|
-
? Object.assign(Object.assign({}, props), { className: newClassName, size: undefined }) : Object.assign(Object.assign({}, props), { className: newClassName, style: Object.assign({ width: props.size || themeSvgIconSize, height: props.size || themeSvgIconSize }, props.style) });
|
|
60
|
-
return jsx(IconComponent, Object.assign({}, finalProps));
|
|
61
|
-
};
|
|
62
|
-
WrappedIcon.displayName = `Wrapped(${iconName})`;
|
|
63
|
-
tempWrappedBuiltinIcons[iconName] = WrappedIcon;
|
|
32
|
+
tempWrappedBuiltinIcons[iconName] = createGlobalIcon(IconComponent, String(iconName));
|
|
64
33
|
}
|
|
65
34
|
const wrappedBuiltinIconsPart = tempWrappedBuiltinIcons;
|
|
66
35
|
// All icons should be imported from here, and icons will occupy the project package size, so it is best to design and plan in advance
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type LucideProps } from 'lucide-react';
|
|
2
|
+
import React from 'react';
|
|
3
|
+
export type StyledLucideIconComponent = (props: LucideProps) => React.ReactElement;
|
|
4
|
+
export declare function createGlobalIcon(IconComponent: React.ComponentType<LucideProps>, displayName?: string): StyledLucideIconComponent;
|
|
5
|
+
export declare function createGlobalLucideIcon(IconComponent: React.ComponentType<LucideProps>, displayName?: string): StyledLucideIconComponent;
|
|
6
|
+
type GlobalAccentIconProps = {
|
|
7
|
+
icon: React.ComponentType<LucideProps>;
|
|
8
|
+
className?: string;
|
|
9
|
+
iconClassName?: string;
|
|
10
|
+
foregroundClassName?: string;
|
|
11
|
+
sizeClassName?: string;
|
|
12
|
+
iconSize?: LucideProps['size'];
|
|
13
|
+
};
|
|
14
|
+
export declare function GlobalAccentIcon({ icon: Icon, className, iconClassName, foregroundClassName, sizeClassName, iconSize, }: GlobalAccentIconProps): React.ReactElement;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var themeUtil = require('../lib/theme-util.js');
|
|
5
|
+
var utils = require('@windrun-huaiin/lib/utils');
|
|
6
|
+
|
|
7
|
+
function hasTextColorClass(className) {
|
|
8
|
+
return /\btext-\w+(-\d+)?\b/.test(className);
|
|
9
|
+
}
|
|
10
|
+
function hasSizeClass(className) {
|
|
11
|
+
return /\b(size-\d+|w-\d+|h-\d+)\b/.test(className);
|
|
12
|
+
}
|
|
13
|
+
function buildStyledProps(props) {
|
|
14
|
+
const originalClassName = props.className || '';
|
|
15
|
+
const nextClassName = hasTextColorClass(originalClassName)
|
|
16
|
+
? originalClassName
|
|
17
|
+
: `${themeUtil.themeIconColor} ${originalClassName}`.trim();
|
|
18
|
+
if (hasSizeClass(originalClassName)) {
|
|
19
|
+
return Object.assign(Object.assign({}, props), { className: nextClassName, size: undefined });
|
|
20
|
+
}
|
|
21
|
+
return Object.assign(Object.assign({}, props), { className: nextClassName, style: Object.assign({ width: props.size || themeUtil.themeSvgIconSize, height: props.size || themeUtil.themeSvgIconSize }, props.style) });
|
|
22
|
+
}
|
|
23
|
+
function createGlobalIcon(IconComponent, displayName) {
|
|
24
|
+
const StyledIcon = (props) => {
|
|
25
|
+
return jsxRuntime.jsx(IconComponent, Object.assign({}, buildStyledProps(props)));
|
|
26
|
+
};
|
|
27
|
+
StyledIcon.displayName = displayName ? `Styled(${displayName})` : `Styled(${IconComponent.displayName || IconComponent.name || 'Icon'})`;
|
|
28
|
+
return StyledIcon;
|
|
29
|
+
}
|
|
30
|
+
function createGlobalLucideIcon(IconComponent, displayName) {
|
|
31
|
+
return createGlobalIcon(IconComponent, displayName);
|
|
32
|
+
}
|
|
33
|
+
function GlobalAccentIcon({ icon: Icon, className, iconClassName, foregroundClassName = 'text-neutral-100 dark:text-neutral-900', sizeClassName = 'size-9', iconSize, }) {
|
|
34
|
+
return (jsxRuntime.jsx("span", { className: utils.cn('inline-flex items-center justify-center rounded-full bg-current shadow-sm transition', themeUtil.themeIconColor, sizeClassName, className), children: jsxRuntime.jsx(Icon, { size: iconSize, className: utils.cn('size-4', foregroundClassName, iconClassName) }) }));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
exports.GlobalAccentIcon = GlobalAccentIcon;
|
|
38
|
+
exports.createGlobalIcon = createGlobalIcon;
|
|
39
|
+
exports.createGlobalLucideIcon = createGlobalLucideIcon;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { themeIconColor, themeSvgIconSize } from '../lib/theme-util.mjs';
|
|
3
|
+
import { cn } from '@windrun-huaiin/lib/utils';
|
|
4
|
+
|
|
5
|
+
function hasTextColorClass(className) {
|
|
6
|
+
return /\btext-\w+(-\d+)?\b/.test(className);
|
|
7
|
+
}
|
|
8
|
+
function hasSizeClass(className) {
|
|
9
|
+
return /\b(size-\d+|w-\d+|h-\d+)\b/.test(className);
|
|
10
|
+
}
|
|
11
|
+
function buildStyledProps(props) {
|
|
12
|
+
const originalClassName = props.className || '';
|
|
13
|
+
const nextClassName = hasTextColorClass(originalClassName)
|
|
14
|
+
? originalClassName
|
|
15
|
+
: `${themeIconColor} ${originalClassName}`.trim();
|
|
16
|
+
if (hasSizeClass(originalClassName)) {
|
|
17
|
+
return Object.assign(Object.assign({}, props), { className: nextClassName, size: undefined });
|
|
18
|
+
}
|
|
19
|
+
return Object.assign(Object.assign({}, props), { className: nextClassName, style: Object.assign({ width: props.size || themeSvgIconSize, height: props.size || themeSvgIconSize }, props.style) });
|
|
20
|
+
}
|
|
21
|
+
function createGlobalIcon(IconComponent, displayName) {
|
|
22
|
+
const StyledIcon = (props) => {
|
|
23
|
+
return jsx(IconComponent, Object.assign({}, buildStyledProps(props)));
|
|
24
|
+
};
|
|
25
|
+
StyledIcon.displayName = displayName ? `Styled(${displayName})` : `Styled(${IconComponent.displayName || IconComponent.name || 'Icon'})`;
|
|
26
|
+
return StyledIcon;
|
|
27
|
+
}
|
|
28
|
+
function createGlobalLucideIcon(IconComponent, displayName) {
|
|
29
|
+
return createGlobalIcon(IconComponent, displayName);
|
|
30
|
+
}
|
|
31
|
+
function GlobalAccentIcon({ icon: Icon, className, iconClassName, foregroundClassName = 'text-neutral-100 dark:text-neutral-900', sizeClassName = 'size-9', iconSize, }) {
|
|
32
|
+
return (jsx("span", { className: cn('inline-flex items-center justify-center rounded-full bg-current shadow-sm transition', themeIconColor, sizeClassName, className), children: jsx(Icon, { size: iconSize, className: cn('size-4', foregroundClassName, iconClassName) }) }));
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export { GlobalAccentIcon, createGlobalIcon, createGlobalLucideIcon };
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
var index = require('../icons/index.js');
|
|
5
6
|
var navigation = require('next/navigation');
|
|
6
7
|
var nextIntl = require('next-intl');
|
|
7
|
-
var globalIcon = require('./global-icon.js');
|
|
8
8
|
var dropdownMenu = require('../ui/dropdown-menu.js');
|
|
9
9
|
var languageButton = require('../ui/language-button.js');
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* @license
|
|
13
13
|
* MIT License
|
|
14
|
-
* Copyright (c)
|
|
14
|
+
* Copyright (c) 2026 D8ger
|
|
15
15
|
*
|
|
16
16
|
* This source code is licensed under the MIT license found in the
|
|
17
17
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -24,7 +24,7 @@ function LanguageSwitcher({ locales, localeLabels }) {
|
|
|
24
24
|
const newPathname = pathname.replace(`/${locale}`, `/${newLocale}`);
|
|
25
25
|
router.push(newPathname);
|
|
26
26
|
};
|
|
27
|
-
return (jsxRuntime.jsxs(dropdownMenu.DropdownMenu, { children: [jsxRuntime.jsx(dropdownMenu.DropdownMenuTrigger, { asChild: true, children: jsxRuntime.jsx(languageButton.LanguageButton, { variant: "ghost", size: "icon", className: "bg-linear-to-r from-purple-400 to-pink-600 hover:from-purple-500 hover:to-pink-700 text-white transform hover:scale-110 transition-all duration-300", children: jsxRuntime.jsx(
|
|
27
|
+
return (jsxRuntime.jsxs(dropdownMenu.DropdownMenu, { children: [jsxRuntime.jsx(dropdownMenu.DropdownMenuTrigger, { asChild: true, children: jsxRuntime.jsx(languageButton.LanguageButton, { variant: "ghost", size: "icon", className: "bg-linear-to-r from-purple-400 to-pink-600 hover:from-purple-500 hover:to-pink-700 text-white transform hover:scale-110 transition-all duration-300", children: jsxRuntime.jsx(index.GlobeIcon, { className: "h-5 w-5" }) }) }), jsxRuntime.jsx(dropdownMenu.DropdownMenuContent, { align: "end", sideOffset: 5, className: "bg-white/90 dark:bg-gray-800/90 border-purple-100 dark:border-purple-800 w-[200px] p-2 backdrop-blur-xs translate-x-[50px]", children: jsxRuntime.jsx("div", { className: "grid grid-cols-2 gap-1", children: locales.map((loc) => (jsxRuntime.jsx(dropdownMenu.DropdownMenuItem, { className: `
|
|
28
28
|
px-2 py-2 text-sm cursor-pointer text-center justify-center
|
|
29
29
|
transition-all duration-300 ease-in-out
|
|
30
30
|
hover:scale-105 hover:shadow-md
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { GlobeIcon } from '../icons/index.mjs';
|
|
3
4
|
import { useRouter, usePathname } from 'next/navigation';
|
|
4
5
|
import { useLocale } from 'next-intl';
|
|
5
|
-
import { globalLucideIcons } from './global-icon.mjs';
|
|
6
6
|
import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem } from '../ui/dropdown-menu.mjs';
|
|
7
7
|
import { LanguageButton } from '../ui/language-button.mjs';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* @license
|
|
11
11
|
* MIT License
|
|
12
|
-
* Copyright (c)
|
|
12
|
+
* Copyright (c) 2026 D8ger
|
|
13
13
|
*
|
|
14
14
|
* This source code is licensed under the MIT license found in the
|
|
15
15
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -22,7 +22,7 @@ function LanguageSwitcher({ locales, localeLabels }) {
|
|
|
22
22
|
const newPathname = pathname.replace(`/${locale}`, `/${newLocale}`);
|
|
23
23
|
router.push(newPathname);
|
|
24
24
|
};
|
|
25
|
-
return (jsxs(DropdownMenu, { children: [jsx(DropdownMenuTrigger, { asChild: true, children: jsx(LanguageButton, { variant: "ghost", size: "icon", className: "bg-linear-to-r from-purple-400 to-pink-600 hover:from-purple-500 hover:to-pink-700 text-white transform hover:scale-110 transition-all duration-300", children: jsx(
|
|
25
|
+
return (jsxs(DropdownMenu, { children: [jsx(DropdownMenuTrigger, { asChild: true, children: jsx(LanguageButton, { variant: "ghost", size: "icon", className: "bg-linear-to-r from-purple-400 to-pink-600 hover:from-purple-500 hover:to-pink-700 text-white transform hover:scale-110 transition-all duration-300", children: jsx(GlobeIcon, { className: "h-5 w-5" }) }) }), jsx(DropdownMenuContent, { align: "end", sideOffset: 5, className: "bg-white/90 dark:bg-gray-800/90 border-purple-100 dark:border-purple-800 w-[200px] p-2 backdrop-blur-xs translate-x-[50px]", children: jsx("div", { className: "grid grid-cols-2 gap-1", children: locales.map((loc) => (jsx(DropdownMenuItem, { className: `
|
|
26
26
|
px-2 py-2 text-sm cursor-pointer text-center justify-center
|
|
27
27
|
transition-all duration-300 ease-in-out
|
|
28
28
|
hover:scale-105 hover:shadow-md
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { AlbumIcon, AlignHorizontalJustifyEnd, ArrowLeft, ArrowRight, ArrowUp, Bell, Binary, Blocks, BookX, BookOpen, BookAudio, BookA, BookCheck, BookDown, BookHeadphones, Bookmark, BookmarkCheck, BookmarkMinus, BookmarkPlus, BookmarkX, BotMessageSquare, Brain, BrainCircuit, BringToFront, Building2, Bug, BugOff, BadgeQuestionMark, Car, ChartColumnStacked, Circle, CircleAlert, CircleQuestionMark, CircleSmall, CircleStop, Check, CircleArrowDown, CircleArrowUp, CheckCheck, CheckLine, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Coins, ComponentIcon, Copy, CopyCheck, Cpu, Database, DatabaseZap, Dot, Download, Eye, EyeOff, ExternalLink, Facebook, Shield, File, FileDown, FileInput, FileLock2, FileUp, Fingerprint, Folder, FolderOpen, Gem, Gift, GitMerge, GitPullRequestArrow, Globe, GlobeLock, Grip, GripVertical, HandHeart, Handshake, Highlighter, HousePlus, Infinity, Info, ImageDown, ImageOff, ImageUp, Keyboard, LandPlot, Languages, Layout, LayoutTemplate, LibraryIcon, Lightbulb, Link, ListTodo, Loader2, LogIn, LogOut, Mail, MessageCircleMore, MessageCircleCode, Music4, MoreHorizontal, MousePointerClick, NotepadText, Palette, PanelLeft, PanelsTopLeft, PawPrint, Pencil, Pi, QrCode, ReceiptText, RefreshCcw, Regex, Replace, Rocket, RotateCcw, Rss, Scale, ScanSearch, Search, SendHorizontal, Settings, Settings2, Share, Sigma, ShieldUser, ShoppingCart, Sprout, SquareDashedBottomCode, SquareTerminal, Server, SplinePointer, Sparkles, Star, Tablets, Terminal, Twitter, Usb, UserRoundCheck, Workflow, X, Zap, } from "lucide-react";
|
|
1
|
+
export { AlbumIcon, AlignHorizontalJustifyEnd, ArrowLeft, ArrowRight, ArrowUp, Baby, Bell, Binary, Blocks, BookX, BookOpen, BookAudio, BookA, BookCheck, BookDown, BookHeadphones, Bookmark, BookmarkCheck, BookmarkMinus, BookmarkPlus, BookmarkX, BotMessageSquare, Brain, BrainCircuit, Briefcase, BringToFront, BrushCleaning, Building2, Bug, BugOff, BadgeQuestionMark, Car, ChartColumnStacked, Circle, CircleAlert, CircleQuestionMark, CircleSmall, CircleStop, Check, CircleArrowDown, CircleArrowUp, CheckCheck, CheckLine, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Coffee, Coins, ComponentIcon, Copy, CopyCheck, Cpu, Database, DatabaseZap, Dot, Download, Ellipsis, EllipsisVertical, Eye, EyeOff, ExternalLink, Facebook, Shield, File, FileDown, FileInput, FileLock2, FileUp, Fingerprint, Folder, FolderOpen, Gem, Gift, GitMerge, GitPullRequestArrow, Globe, GlobeLock, Grip, GripVertical, HandHeart, Handshake, Highlighter, History, HousePlus, Infinity, Info, ImageDown, ImageOff, ImageUp, Keyboard, LandPlot, Languages, Layout, LayoutTemplate, LibraryIcon, Lightbulb, Link, ListTodo, Loader2, LogIn, LogOut, Mail, MessageCircleMore, MessageCircleCode, MessageSquareDiff, Music4, MoreHorizontal, MousePointerClick, NotepadText, Palette, PanelLeft, PanelsTopLeft, PawPrint, Pencil, Pi, Pin, PinOff, Plus, QrCode, ReceiptText, RefreshCcw, Regex, Replace, Rocket, RotateCcw, Rss, Scale, ScanSearch, Search, Send, SendHorizontal, Settings, Settings2, Share, Sigma, ShieldUser, ShoppingCart, Sprout, SquareDashedBottomCode, SquareTerminal, Server, SplinePointer, Sparkles, Star, Tablets, Terminal, Trash2, Twitter, Usb, UserRoundCheck, Wand2, Workflow, X, Zap, } from "lucide-react";
|
|
@@ -29,6 +29,10 @@ Object.defineProperty(exports, "ArrowUp", {
|
|
|
29
29
|
enumerable: true,
|
|
30
30
|
get: function () { return lucideReact.ArrowUp; }
|
|
31
31
|
});
|
|
32
|
+
Object.defineProperty(exports, "Baby", {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
get: function () { return lucideReact.Baby; }
|
|
35
|
+
});
|
|
32
36
|
Object.defineProperty(exports, "BadgeQuestionMark", {
|
|
33
37
|
enumerable: true,
|
|
34
38
|
get: function () { return lucideReact.BadgeQuestionMark; }
|
|
@@ -105,10 +109,18 @@ Object.defineProperty(exports, "BrainCircuit", {
|
|
|
105
109
|
enumerable: true,
|
|
106
110
|
get: function () { return lucideReact.BrainCircuit; }
|
|
107
111
|
});
|
|
112
|
+
Object.defineProperty(exports, "Briefcase", {
|
|
113
|
+
enumerable: true,
|
|
114
|
+
get: function () { return lucideReact.Briefcase; }
|
|
115
|
+
});
|
|
108
116
|
Object.defineProperty(exports, "BringToFront", {
|
|
109
117
|
enumerable: true,
|
|
110
118
|
get: function () { return lucideReact.BringToFront; }
|
|
111
119
|
});
|
|
120
|
+
Object.defineProperty(exports, "BrushCleaning", {
|
|
121
|
+
enumerable: true,
|
|
122
|
+
get: function () { return lucideReact.BrushCleaning; }
|
|
123
|
+
});
|
|
112
124
|
Object.defineProperty(exports, "Bug", {
|
|
113
125
|
enumerable: true,
|
|
114
126
|
get: function () { return lucideReact.Bug; }
|
|
@@ -185,6 +197,10 @@ Object.defineProperty(exports, "CircleStop", {
|
|
|
185
197
|
enumerable: true,
|
|
186
198
|
get: function () { return lucideReact.CircleStop; }
|
|
187
199
|
});
|
|
200
|
+
Object.defineProperty(exports, "Coffee", {
|
|
201
|
+
enumerable: true,
|
|
202
|
+
get: function () { return lucideReact.Coffee; }
|
|
203
|
+
});
|
|
188
204
|
Object.defineProperty(exports, "Coins", {
|
|
189
205
|
enumerable: true,
|
|
190
206
|
get: function () { return lucideReact.Coins; }
|
|
@@ -221,6 +237,14 @@ Object.defineProperty(exports, "Download", {
|
|
|
221
237
|
enumerable: true,
|
|
222
238
|
get: function () { return lucideReact.Download; }
|
|
223
239
|
});
|
|
240
|
+
Object.defineProperty(exports, "Ellipsis", {
|
|
241
|
+
enumerable: true,
|
|
242
|
+
get: function () { return lucideReact.Ellipsis; }
|
|
243
|
+
});
|
|
244
|
+
Object.defineProperty(exports, "EllipsisVertical", {
|
|
245
|
+
enumerable: true,
|
|
246
|
+
get: function () { return lucideReact.EllipsisVertical; }
|
|
247
|
+
});
|
|
224
248
|
Object.defineProperty(exports, "ExternalLink", {
|
|
225
249
|
enumerable: true,
|
|
226
250
|
get: function () { return lucideReact.ExternalLink; }
|
|
@@ -313,6 +337,10 @@ Object.defineProperty(exports, "Highlighter", {
|
|
|
313
337
|
enumerable: true,
|
|
314
338
|
get: function () { return lucideReact.Highlighter; }
|
|
315
339
|
});
|
|
340
|
+
Object.defineProperty(exports, "History", {
|
|
341
|
+
enumerable: true,
|
|
342
|
+
get: function () { return lucideReact.History; }
|
|
343
|
+
});
|
|
316
344
|
Object.defineProperty(exports, "HousePlus", {
|
|
317
345
|
enumerable: true,
|
|
318
346
|
get: function () { return lucideReact.HousePlus; }
|
|
@@ -397,6 +425,10 @@ Object.defineProperty(exports, "MessageCircleMore", {
|
|
|
397
425
|
enumerable: true,
|
|
398
426
|
get: function () { return lucideReact.MessageCircleMore; }
|
|
399
427
|
});
|
|
428
|
+
Object.defineProperty(exports, "MessageSquareDiff", {
|
|
429
|
+
enumerable: true,
|
|
430
|
+
get: function () { return lucideReact.MessageSquareDiff; }
|
|
431
|
+
});
|
|
400
432
|
Object.defineProperty(exports, "MoreHorizontal", {
|
|
401
433
|
enumerable: true,
|
|
402
434
|
get: function () { return lucideReact.MoreHorizontal; }
|
|
@@ -437,6 +469,18 @@ Object.defineProperty(exports, "Pi", {
|
|
|
437
469
|
enumerable: true,
|
|
438
470
|
get: function () { return lucideReact.Pi; }
|
|
439
471
|
});
|
|
472
|
+
Object.defineProperty(exports, "Pin", {
|
|
473
|
+
enumerable: true,
|
|
474
|
+
get: function () { return lucideReact.Pin; }
|
|
475
|
+
});
|
|
476
|
+
Object.defineProperty(exports, "PinOff", {
|
|
477
|
+
enumerable: true,
|
|
478
|
+
get: function () { return lucideReact.PinOff; }
|
|
479
|
+
});
|
|
480
|
+
Object.defineProperty(exports, "Plus", {
|
|
481
|
+
enumerable: true,
|
|
482
|
+
get: function () { return lucideReact.Plus; }
|
|
483
|
+
});
|
|
440
484
|
Object.defineProperty(exports, "QrCode", {
|
|
441
485
|
enumerable: true,
|
|
442
486
|
get: function () { return lucideReact.QrCode; }
|
|
@@ -481,6 +525,10 @@ Object.defineProperty(exports, "Search", {
|
|
|
481
525
|
enumerable: true,
|
|
482
526
|
get: function () { return lucideReact.Search; }
|
|
483
527
|
});
|
|
528
|
+
Object.defineProperty(exports, "Send", {
|
|
529
|
+
enumerable: true,
|
|
530
|
+
get: function () { return lucideReact.Send; }
|
|
531
|
+
});
|
|
484
532
|
Object.defineProperty(exports, "SendHorizontal", {
|
|
485
533
|
enumerable: true,
|
|
486
534
|
get: function () { return lucideReact.SendHorizontal; }
|
|
@@ -549,6 +597,10 @@ Object.defineProperty(exports, "Terminal", {
|
|
|
549
597
|
enumerable: true,
|
|
550
598
|
get: function () { return lucideReact.Terminal; }
|
|
551
599
|
});
|
|
600
|
+
Object.defineProperty(exports, "Trash2", {
|
|
601
|
+
enumerable: true,
|
|
602
|
+
get: function () { return lucideReact.Trash2; }
|
|
603
|
+
});
|
|
552
604
|
Object.defineProperty(exports, "Twitter", {
|
|
553
605
|
enumerable: true,
|
|
554
606
|
get: function () { return lucideReact.Twitter; }
|
|
@@ -561,6 +613,10 @@ Object.defineProperty(exports, "UserRoundCheck", {
|
|
|
561
613
|
enumerable: true,
|
|
562
614
|
get: function () { return lucideReact.UserRoundCheck; }
|
|
563
615
|
});
|
|
616
|
+
Object.defineProperty(exports, "Wand2", {
|
|
617
|
+
enumerable: true,
|
|
618
|
+
get: function () { return lucideReact.Wand2; }
|
|
619
|
+
});
|
|
564
620
|
Object.defineProperty(exports, "Workflow", {
|
|
565
621
|
enumerable: true,
|
|
566
622
|
get: function () { return lucideReact.Workflow; }
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { AlbumIcon, AlignHorizontalJustifyEnd, ArrowLeft, ArrowRight, ArrowUp, BadgeQuestionMark, Bell, Binary, Blocks, BookA, BookAudio, BookCheck, BookDown, BookHeadphones, BookOpen, BookX, Bookmark, BookmarkCheck, BookmarkMinus, BookmarkPlus, BookmarkX, BotMessageSquare, Brain, BrainCircuit, BringToFront, Bug, BugOff, Building2, Car, ChartColumnStacked, Check, CheckCheck, CheckLine, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Circle, CircleAlert, CircleArrowDown, CircleArrowUp, CircleQuestionMark, CircleSmall, CircleStop, Coins, ComponentIcon, Copy, CopyCheck, Cpu, Database, DatabaseZap, Dot, Download, ExternalLink, Eye, EyeOff, Facebook, File, FileDown, FileInput, FileLock2, FileUp, Fingerprint, Folder, FolderOpen, Gem, Gift, GitMerge, GitPullRequestArrow, Globe, GlobeLock, Grip, GripVertical, HandHeart, Handshake, Highlighter, HousePlus, ImageDown, ImageOff, ImageUp, Infinity, Info, Keyboard, LandPlot, Languages, Layout, LayoutTemplate, LibraryIcon, Lightbulb, Link, ListTodo, Loader2, LogIn, LogOut, Mail, MessageCircleCode, MessageCircleMore, MoreHorizontal, MousePointerClick, Music4, NotepadText, Palette, PanelLeft, PanelsTopLeft, PawPrint, Pencil, Pi, QrCode, ReceiptText, RefreshCcw, Regex, Replace, Rocket, RotateCcw, Rss, Scale, ScanSearch, Search, SendHorizontal, Server, Settings, Settings2, Share, Shield, ShieldUser, ShoppingCart, Sigma, Sparkles, SplinePointer, Sprout, SquareDashedBottomCode, SquareTerminal, Star, Tablets, Terminal, Twitter, Usb, UserRoundCheck, Workflow, X, Zap } from 'lucide-react';
|
|
1
|
+
export { AlbumIcon, AlignHorizontalJustifyEnd, ArrowLeft, ArrowRight, ArrowUp, Baby, BadgeQuestionMark, Bell, Binary, Blocks, BookA, BookAudio, BookCheck, BookDown, BookHeadphones, BookOpen, BookX, Bookmark, BookmarkCheck, BookmarkMinus, BookmarkPlus, BookmarkX, BotMessageSquare, Brain, BrainCircuit, Briefcase, BringToFront, BrushCleaning, Bug, BugOff, Building2, Car, ChartColumnStacked, Check, CheckCheck, CheckLine, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Circle, CircleAlert, CircleArrowDown, CircleArrowUp, CircleQuestionMark, CircleSmall, CircleStop, Coffee, Coins, ComponentIcon, Copy, CopyCheck, Cpu, Database, DatabaseZap, Dot, Download, Ellipsis, EllipsisVertical, ExternalLink, Eye, EyeOff, Facebook, File, FileDown, FileInput, FileLock2, FileUp, Fingerprint, Folder, FolderOpen, Gem, Gift, GitMerge, GitPullRequestArrow, Globe, GlobeLock, Grip, GripVertical, HandHeart, Handshake, Highlighter, History, HousePlus, ImageDown, ImageOff, ImageUp, Infinity, Info, Keyboard, LandPlot, Languages, Layout, LayoutTemplate, LibraryIcon, Lightbulb, Link, ListTodo, Loader2, LogIn, LogOut, Mail, MessageCircleCode, MessageCircleMore, MessageSquareDiff, MoreHorizontal, MousePointerClick, Music4, NotepadText, Palette, PanelLeft, PanelsTopLeft, PawPrint, Pencil, Pi, Pin, PinOff, Plus, QrCode, ReceiptText, RefreshCcw, Regex, Replace, Rocket, RotateCcw, Rss, Scale, ScanSearch, Search, Send, SendHorizontal, Server, Settings, Settings2, Share, Shield, ShieldUser, ShoppingCart, Sigma, Sparkles, SplinePointer, Sprout, SquareDashedBottomCode, SquareTerminal, Star, Tablets, Terminal, Trash2, Twitter, Usb, UserRoundCheck, Wand2, Workflow, X, Zap } from 'lucide-react';
|
|
2
2
|
|
|
3
3
|
/*
|
|
4
4
|
* This file re-exports selected icons from 'lucide-react'.
|