@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.
Files changed (39) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +4 -4
  3. package/dist/components/global-icon.d.ts +15 -1
  4. package/dist/components/global-icon.js +4 -35
  5. package/dist/components/global-icon.mjs +5 -36
  6. package/dist/components/icon-factory.d.ts +15 -0
  7. package/dist/components/icon-factory.js +39 -0
  8. package/dist/components/icon-factory.mjs +35 -0
  9. package/dist/components/language-switcher.d.ts +1 -1
  10. package/dist/components/language-switcher.js +3 -3
  11. package/dist/components/language-switcher.mjs +3 -3
  12. package/dist/components/limited-lucide-icons.d.ts +1 -1
  13. package/dist/components/limited-lucide-icons.js +56 -0
  14. package/dist/components/limited-lucide-icons.mjs +1 -1
  15. package/dist/components/server.d.ts +1 -0
  16. package/dist/components/server.js +191 -0
  17. package/dist/components/server.mjs +2 -0
  18. package/dist/icons/index.d.ts +189 -0
  19. package/dist/icons/index.js +418 -0
  20. package/dist/icons/index.mjs +225 -0
  21. package/dist/ui/button.js +2 -2
  22. package/dist/ui/button.mjs +2 -2
  23. package/dist/ui/copyable-text.js +2 -2
  24. package/dist/ui/copyable-text.mjs +2 -2
  25. package/dist/ui/dropdown-menu.js +4 -4
  26. package/dist/ui/dropdown-menu.mjs +4 -4
  27. package/dist/ui/language-button.js +1 -1
  28. package/dist/ui/language-button.mjs +1 -1
  29. package/package.json +7 -2
  30. package/src/components/global-icon.tsx +7 -65
  31. package/src/components/icon-factory.tsx +92 -0
  32. package/src/components/language-switcher.tsx +4 -4
  33. package/src/components/limited-lucide-icons.ts +14 -0
  34. package/src/components/server.ts +1 -0
  35. package/src/icons/index.ts +381 -0
  36. package/src/ui/button.tsx +2 -2
  37. package/src/ui/copyable-text.tsx +3 -3
  38. package/src/ui/dropdown-menu.tsx +4 -4
  39. package/src/ui/language-button.tsx +1 -1
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 D8ger
3
+ Copyright (c) 2026 D8ger
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
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 { globalLucideIcons } from '@windrun-huaiin/base-ui';
78
+ import { GitHubIcon, BTCIcon, MmdIcon} from '@windrun-huaiin/base-ui';
79
79
 
80
80
  // Use any built-in icon
81
- <globalLucideIcons.GitHub className="h-6 w-6" />
82
- <globalLucideIcons.BTC className="h-4 w-4" />
83
- <globalLucideIcons.Mmd className="h-4 w-4" /> // Auto 16x16 size for Mermaid
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
- const StyledIcon = (props) => {
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
- const WrappedIcon = (props) => {
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 { themeBorderColor, themeRingColor, themeIconColor, themeSvgIconSize } from '../lib/theme-util.mjs';
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
- const StyledIcon = (props) => {
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
- const WrappedIcon = (props) => {
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 };
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license
3
3
  * MIT License
4
- * Copyright (c) 2025 D8ger
4
+ * Copyright (c) 2026 D8ger
5
5
  *
6
6
  * This source code is licensed under the MIT license found in the
7
7
  * LICENSE file in the root directory of this source tree.
@@ -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) 2025 D8ger
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(globalIcon.globalLucideIcons.Globe, { 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: `
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) 2025 D8ger
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(globalLucideIcons.Globe, { 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: `
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'.
@@ -1,4 +1,5 @@
1
1
  export * from './global-icon';
2
+ export * from '../icons';
2
3
  export { createSiteIcon } from './site-icon';
3
4
  export * from './script/google-analytics-script';
4
5
  export * from './script/microsoft-clarity-script';