@windrun-huaiin/base-ui 15.1.0 → 16.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 +22 -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 +84 -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 +8 -3
  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 +21 -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;
@@ -49,17 +50,23 @@ export declare const globalLucideIcons: {
49
50
  BookCheck: StyledLucideIconComponent;
50
51
  BookDown: StyledLucideIconComponent;
51
52
  BookHeadphones: StyledLucideIconComponent;
53
+ Bookmark: StyledLucideIconComponent;
52
54
  BookmarkCheck: StyledLucideIconComponent;
55
+ BookmarkMinus: StyledLucideIconComponent;
53
56
  BookmarkPlus: StyledLucideIconComponent;
57
+ BookmarkX: StyledLucideIconComponent;
54
58
  BotMessageSquare: StyledLucideIconComponent;
55
59
  Brain: StyledLucideIconComponent;
56
60
  BrainCircuit: StyledLucideIconComponent;
61
+ Briefcase: StyledLucideIconComponent;
57
62
  BringToFront: StyledLucideIconComponent;
63
+ BrushCleaning: StyledLucideIconComponent;
58
64
  Building2: StyledLucideIconComponent;
59
65
  Bug: StyledLucideIconComponent;
60
66
  BugOff: StyledLucideIconComponent;
61
67
  BadgeQuestionMark: StyledLucideIconComponent;
62
68
  Car: StyledLucideIconComponent;
69
+ ChartColumnStacked: StyledLucideIconComponent;
63
70
  Circle: StyledLucideIconComponent;
64
71
  CircleAlert: StyledLucideIconComponent;
65
72
  CircleQuestionMark: StyledLucideIconComponent;
@@ -74,6 +81,7 @@ export declare const globalLucideIcons: {
74
81
  ChevronLeft: StyledLucideIconComponent;
75
82
  ChevronRight: StyledLucideIconComponent;
76
83
  ChevronUp: StyledLucideIconComponent;
84
+ Coffee: StyledLucideIconComponent;
77
85
  Coins: StyledLucideIconComponent;
78
86
  ComponentIcon: StyledLucideIconComponent;
79
87
  Copy: StyledLucideIconComponent;
@@ -83,6 +91,8 @@ export declare const globalLucideIcons: {
83
91
  DatabaseZap: StyledLucideIconComponent;
84
92
  Dot: StyledLucideIconComponent;
85
93
  Download: StyledLucideIconComponent;
94
+ Ellipsis: StyledLucideIconComponent;
95
+ EllipsisVertical: StyledLucideIconComponent;
86
96
  Eye: StyledLucideIconComponent;
87
97
  EyeOff: StyledLucideIconComponent;
88
98
  ExternalLink: StyledLucideIconComponent;
@@ -107,6 +117,7 @@ export declare const globalLucideIcons: {
107
117
  HandHeart: StyledLucideIconComponent;
108
118
  Handshake: StyledLucideIconComponent;
109
119
  Highlighter: StyledLucideIconComponent;
120
+ History: StyledLucideIconComponent;
110
121
  HousePlus: StyledLucideIconComponent;
111
122
  Infinity: StyledLucideIconComponent;
112
123
  Info: StyledLucideIconComponent;
@@ -128,6 +139,7 @@ export declare const globalLucideIcons: {
128
139
  Mail: StyledLucideIconComponent;
129
140
  MessageCircleMore: StyledLucideIconComponent;
130
141
  MessageCircleCode: StyledLucideIconComponent;
142
+ MessageSquareDiff: StyledLucideIconComponent;
131
143
  Music4: StyledLucideIconComponent;
132
144
  MoreHorizontal: StyledLucideIconComponent;
133
145
  MousePointerClick: StyledLucideIconComponent;
@@ -138,15 +150,21 @@ export declare const globalLucideIcons: {
138
150
  PawPrint: StyledLucideIconComponent;
139
151
  Pencil: StyledLucideIconComponent;
140
152
  Pi: StyledLucideIconComponent;
153
+ Pin: StyledLucideIconComponent;
154
+ PinOff: StyledLucideIconComponent;
155
+ Plus: StyledLucideIconComponent;
141
156
  QrCode: StyledLucideIconComponent;
142
157
  ReceiptText: StyledLucideIconComponent;
143
158
  RefreshCcw: StyledLucideIconComponent;
144
159
  Regex: StyledLucideIconComponent;
145
160
  Replace: StyledLucideIconComponent;
146
161
  Rocket: StyledLucideIconComponent;
162
+ RotateCcw: StyledLucideIconComponent;
147
163
  Rss: StyledLucideIconComponent;
148
164
  Scale: StyledLucideIconComponent;
165
+ ScanSearch: StyledLucideIconComponent;
149
166
  Search: StyledLucideIconComponent;
167
+ Send: StyledLucideIconComponent;
150
168
  SendHorizontal: StyledLucideIconComponent;
151
169
  Settings: StyledLucideIconComponent;
152
170
  Settings2: StyledLucideIconComponent;
@@ -163,8 +181,11 @@ export declare const globalLucideIcons: {
163
181
  Star: StyledLucideIconComponent;
164
182
  Tablets: StyledLucideIconComponent;
165
183
  Terminal: StyledLucideIconComponent;
184
+ Trash2: StyledLucideIconComponent;
166
185
  Twitter: StyledLucideIconComponent;
186
+ Usb: StyledLucideIconComponent;
167
187
  UserRoundCheck: StyledLucideIconComponent;
188
+ Wand2: StyledLucideIconComponent;
168
189
  Workflow: StyledLucideIconComponent;
169
190
  X: StyledLucideIconComponent;
170
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, BookmarkCheck, BookmarkPlus, BotMessageSquare, Brain, BrainCircuit, BringToFront, Building2, Bug, BugOff, BadgeQuestionMark, Car, 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, Rss, Scale, Search, SendHorizontal, Settings, Settings2, Share, Sigma, ShieldUser, ShoppingCart, Sprout, SquareDashedBottomCode, SquareTerminal, Server, SplinePointer, Sparkles, Star, Tablets, Terminal, Twitter, 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; }
@@ -73,14 +77,26 @@ Object.defineProperty(exports, "BookX", {
73
77
  enumerable: true,
74
78
  get: function () { return lucideReact.BookX; }
75
79
  });
80
+ Object.defineProperty(exports, "Bookmark", {
81
+ enumerable: true,
82
+ get: function () { return lucideReact.Bookmark; }
83
+ });
76
84
  Object.defineProperty(exports, "BookmarkCheck", {
77
85
  enumerable: true,
78
86
  get: function () { return lucideReact.BookmarkCheck; }
79
87
  });
88
+ Object.defineProperty(exports, "BookmarkMinus", {
89
+ enumerable: true,
90
+ get: function () { return lucideReact.BookmarkMinus; }
91
+ });
80
92
  Object.defineProperty(exports, "BookmarkPlus", {
81
93
  enumerable: true,
82
94
  get: function () { return lucideReact.BookmarkPlus; }
83
95
  });
96
+ Object.defineProperty(exports, "BookmarkX", {
97
+ enumerable: true,
98
+ get: function () { return lucideReact.BookmarkX; }
99
+ });
84
100
  Object.defineProperty(exports, "BotMessageSquare", {
85
101
  enumerable: true,
86
102
  get: function () { return lucideReact.BotMessageSquare; }
@@ -93,10 +109,18 @@ Object.defineProperty(exports, "BrainCircuit", {
93
109
  enumerable: true,
94
110
  get: function () { return lucideReact.BrainCircuit; }
95
111
  });
112
+ Object.defineProperty(exports, "Briefcase", {
113
+ enumerable: true,
114
+ get: function () { return lucideReact.Briefcase; }
115
+ });
96
116
  Object.defineProperty(exports, "BringToFront", {
97
117
  enumerable: true,
98
118
  get: function () { return lucideReact.BringToFront; }
99
119
  });
120
+ Object.defineProperty(exports, "BrushCleaning", {
121
+ enumerable: true,
122
+ get: function () { return lucideReact.BrushCleaning; }
123
+ });
100
124
  Object.defineProperty(exports, "Bug", {
101
125
  enumerable: true,
102
126
  get: function () { return lucideReact.Bug; }
@@ -113,6 +137,10 @@ Object.defineProperty(exports, "Car", {
113
137
  enumerable: true,
114
138
  get: function () { return lucideReact.Car; }
115
139
  });
140
+ Object.defineProperty(exports, "ChartColumnStacked", {
141
+ enumerable: true,
142
+ get: function () { return lucideReact.ChartColumnStacked; }
143
+ });
116
144
  Object.defineProperty(exports, "Check", {
117
145
  enumerable: true,
118
146
  get: function () { return lucideReact.Check; }
@@ -169,6 +197,10 @@ Object.defineProperty(exports, "CircleStop", {
169
197
  enumerable: true,
170
198
  get: function () { return lucideReact.CircleStop; }
171
199
  });
200
+ Object.defineProperty(exports, "Coffee", {
201
+ enumerable: true,
202
+ get: function () { return lucideReact.Coffee; }
203
+ });
172
204
  Object.defineProperty(exports, "Coins", {
173
205
  enumerable: true,
174
206
  get: function () { return lucideReact.Coins; }
@@ -205,6 +237,14 @@ Object.defineProperty(exports, "Download", {
205
237
  enumerable: true,
206
238
  get: function () { return lucideReact.Download; }
207
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
+ });
208
248
  Object.defineProperty(exports, "ExternalLink", {
209
249
  enumerable: true,
210
250
  get: function () { return lucideReact.ExternalLink; }
@@ -297,6 +337,10 @@ Object.defineProperty(exports, "Highlighter", {
297
337
  enumerable: true,
298
338
  get: function () { return lucideReact.Highlighter; }
299
339
  });
340
+ Object.defineProperty(exports, "History", {
341
+ enumerable: true,
342
+ get: function () { return lucideReact.History; }
343
+ });
300
344
  Object.defineProperty(exports, "HousePlus", {
301
345
  enumerable: true,
302
346
  get: function () { return lucideReact.HousePlus; }
@@ -381,6 +425,10 @@ Object.defineProperty(exports, "MessageCircleMore", {
381
425
  enumerable: true,
382
426
  get: function () { return lucideReact.MessageCircleMore; }
383
427
  });
428
+ Object.defineProperty(exports, "MessageSquareDiff", {
429
+ enumerable: true,
430
+ get: function () { return lucideReact.MessageSquareDiff; }
431
+ });
384
432
  Object.defineProperty(exports, "MoreHorizontal", {
385
433
  enumerable: true,
386
434
  get: function () { return lucideReact.MoreHorizontal; }
@@ -421,6 +469,18 @@ Object.defineProperty(exports, "Pi", {
421
469
  enumerable: true,
422
470
  get: function () { return lucideReact.Pi; }
423
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
+ });
424
484
  Object.defineProperty(exports, "QrCode", {
425
485
  enumerable: true,
426
486
  get: function () { return lucideReact.QrCode; }
@@ -445,6 +505,10 @@ Object.defineProperty(exports, "Rocket", {
445
505
  enumerable: true,
446
506
  get: function () { return lucideReact.Rocket; }
447
507
  });
508
+ Object.defineProperty(exports, "RotateCcw", {
509
+ enumerable: true,
510
+ get: function () { return lucideReact.RotateCcw; }
511
+ });
448
512
  Object.defineProperty(exports, "Rss", {
449
513
  enumerable: true,
450
514
  get: function () { return lucideReact.Rss; }
@@ -453,10 +517,18 @@ Object.defineProperty(exports, "Scale", {
453
517
  enumerable: true,
454
518
  get: function () { return lucideReact.Scale; }
455
519
  });
520
+ Object.defineProperty(exports, "ScanSearch", {
521
+ enumerable: true,
522
+ get: function () { return lucideReact.ScanSearch; }
523
+ });
456
524
  Object.defineProperty(exports, "Search", {
457
525
  enumerable: true,
458
526
  get: function () { return lucideReact.Search; }
459
527
  });
528
+ Object.defineProperty(exports, "Send", {
529
+ enumerable: true,
530
+ get: function () { return lucideReact.Send; }
531
+ });
460
532
  Object.defineProperty(exports, "SendHorizontal", {
461
533
  enumerable: true,
462
534
  get: function () { return lucideReact.SendHorizontal; }
@@ -525,14 +597,26 @@ Object.defineProperty(exports, "Terminal", {
525
597
  enumerable: true,
526
598
  get: function () { return lucideReact.Terminal; }
527
599
  });
600
+ Object.defineProperty(exports, "Trash2", {
601
+ enumerable: true,
602
+ get: function () { return lucideReact.Trash2; }
603
+ });
528
604
  Object.defineProperty(exports, "Twitter", {
529
605
  enumerable: true,
530
606
  get: function () { return lucideReact.Twitter; }
531
607
  });
608
+ Object.defineProperty(exports, "Usb", {
609
+ enumerable: true,
610
+ get: function () { return lucideReact.Usb; }
611
+ });
532
612
  Object.defineProperty(exports, "UserRoundCheck", {
533
613
  enumerable: true,
534
614
  get: function () { return lucideReact.UserRoundCheck; }
535
615
  });
616
+ Object.defineProperty(exports, "Wand2", {
617
+ enumerable: true,
618
+ get: function () { return lucideReact.Wand2; }
619
+ });
536
620
  Object.defineProperty(exports, "Workflow", {
537
621
  enumerable: true,
538
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, BookmarkCheck, BookmarkPlus, BotMessageSquare, Brain, BrainCircuit, BringToFront, Bug, BugOff, Building2, Car, 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, Rss, Scale, Search, SendHorizontal, Server, Settings, Settings2, Share, Shield, ShieldUser, ShoppingCart, Sigma, Sparkles, SplinePointer, Sprout, SquareDashedBottomCode, SquareTerminal, Star, Tablets, Terminal, Twitter, 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';