@windrun-huaiin/base-ui 30.1.0 โ†’ 31.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,198 +1,60 @@
1
1
  # Base UI Components
2
2
 
3
- A comprehensive set of UI components built with React, TypeScript, and Tailwind CSS.
3
+ A shared React UI package built with TypeScript and Tailwind CSS. It provides reusable base components, theme-adaptive utilities, common icons, global icon handling, and analytics script components for Windrun Huaiin applications.
4
4
 
5
- ## ๐Ÿš€ Features
5
+ The package focuses on consistent theme adaptation and responsive compatibility across desktop, tablet, and mobile experiences.
6
6
 
7
- - **Built-in Icon System**: 28 commonly used icons are built-in as React components
8
- - **TypeScript Support**: Full type safety and IntelliSense
9
- - **Tailwind CSS**: Utility-first CSS framework integration
10
- - **Radix UI**: Accessible and unstyled UI primitives
11
- - **Tree Shaking**: Only import what you need
7
+ ## Core Features
12
8
 
13
- ## ๐Ÿ“ฆ Installation
9
+ ### Theme Utilities
14
10
 
15
- ```bash
16
- pnpm add @windrun-huaiin/base-ui
17
- ```
11
+ Theme utility classes and helpers for consistent visual styling across applications.
18
12
 
19
- ## TailwindCSS 4.x Config
13
+ The theme system is designed to let components, icons, accents, and interaction states adapt to the selected palette without duplicating style logic in each application.
20
14
 
21
- - Assume you have a project structure like this:
15
+ Supported theme palettes:
22
16
 
23
- ```txt
24
- Your-project/
25
- โ”œโ”€โ”€ src/
26
- โ”‚ โ””โ”€โ”€ app/
27
- โ”‚ โ””โ”€โ”€ globals.css
28
- โ”œโ”€โ”€ node_modules/
29
- โ”‚ โ”œโ”€โ”€ @windrun-huaiin/
30
- โ”‚ โ”‚ โ”œโ”€โ”€ third-ui/
31
- โ”‚ โ”‚ โ”‚ โ””โ”€โ”€ src/ # This is third-ui src
32
- โ”‚ โ”‚ โ””โ”€โ”€ base-ui/
33
- โ”‚ โ”‚ โ””โ”€โ”€ src/ # This is base-ui src
34
- โ””โ”€โ”€ package.json
35
- ```
17
+ - `purple`: `#AC62FD`
18
+ - `orange`: `#F97316`
19
+ - `indigo`: `#6366F1`
20
+ - `emerald`: `#48C892`
21
+ - `rose`: `#F43F5E`
22
+ - `clue`: `#1D9BF0`
23
+ - `hose`: `#F91980`
24
+ - `pika`: `#FFD400`
36
25
 
37
- - Then, in your `globals.css` file, you have to configure Tailwind CSS 4.x like this:
26
+ Core module:
38
27
 
39
- ```css
40
- @import 'tailwindcss';
28
+ - `theme-util`
41
29
 
42
- @source "../node_modules/@windrun-huaiin/third-ui/src/**/*.{js,ts,jsx,tsx}";
43
- @source "../node_modules/@windrun-huaiin/base-ui/src/**/*.{js,ts,jsx,tsx}";
44
- @source "./src/**/*.{js,ts,jsx,tsx}";
30
+ ### Common Icons
45
31
 
46
- /* Import styles */
47
- @import '@windrun-huaiin/third-ui/styles/base-ui.css';
48
- ```
32
+ A unified icon set based on `lucide-icons` and commonly used SVG assets.
49
33
 
50
- ## ๐ŸŽจ Built-in Icons
34
+ The icons are designed to work with the supported theme palettes, making it easier to keep product UI, navigation, actions, and status indicators visually consistent across different themes and screen sizes.
51
35
 
52
- This package includes 28 built-in icons as React components. All icons are accessible through the `globalLucideIcons` object.
36
+ ### Responsive Multi-Device Compatibility
53
37
 
54
- ### Available Icons
38
+ Base components are intended for responsive layouts across common application surfaces, including desktop, tablet, and mobile screens.
55
39
 
56
- **Development Tools:**
57
- - GitHub, D8, Clerk, Iterm
40
+ The package helps keep spacing, sizing, icons, and interaction patterns predictable across multiple viewport sizes, so shared UI remains consistent when reused by different applications.
58
41
 
59
- **File Types:**
60
- - Markdown, MDX, Html, Json, XML, Yaml, CSV, Txt, Java, SQL, Log
42
+ ### Global Site Icon Handler
61
43
 
62
- **Technologies:**
63
- - MAC, BTC, CSS, Mermaid
44
+ A global handler for site icons, intended to centralize favicon and related icon metadata handling across applications.
64
45
 
65
- **Documentation:**
66
- - LastUpdated, Snippets, Test, Diff
46
+ This keeps browser tab icons, app icons, and shared site icon behavior consistent without repeating setup in every application.
67
47
 
68
- **Business/Legal:**
69
- - DPA, SubP, T3P
48
+ ### Analytics Script Components
70
49
 
71
- **Network:**
72
- - Http, Scheme
50
+ Reusable script components for integrating common analytics providers.
73
51
 
74
- ## Usage
52
+ Supported providers:
75
53
 
76
- ### 1. Direct Icon Usage
77
- ```tsx
78
- import { GitHubIcon, BTCIcon, MmdIcon} from '@windrun-huaiin/base-ui';
54
+ - Google
55
+ - Microsoft
79
56
 
80
- // Use any built-in icon
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
- ```
85
-
86
- ### 2. Dynamic Icon Loading
87
- ```tsx
88
- import { getGlobalIcon } from '@windrun-huaiin/base-ui';
89
-
90
- // Get icon component
91
- const GitHubIcon = getGlobalIcon('GitHub');
92
- <GitHubIcon className="h-6 w-6" />
93
-
94
- // Get icon element (for fumadocs)
95
- const iconElement = getGlobalIcon('GitHub', true);
96
- ```
97
-
98
- ### 3. Utility Components
99
- ```tsx
100
- import { SiteIcon, NotFoundIcon } from '@windrun-huaiin/base-ui';
101
-
102
- // Pre-configured site icon
103
- <SiteIcon />
104
-
105
- // Pre-configured 404 icon
106
- <NotFoundIcon />
107
- ```
108
-
109
- ## Benefits
110
-
111
- - โœ… **Zero Configuration**: No need to copy SVG files to your project
112
- - โœ… **Self-contained**: All icons are bundled as React components
113
- - โœ… **Consistent Styling**: Global icon color configuration
114
- - โœ… **Type Safety**: Full TypeScript support with auto-completion
115
- - โœ… **Performance**: No network requests for icon files
116
- - โœ… **Special Sizing**: Mermaid icon has optimized 16x16 default size
117
-
118
- ## Environment Variables
119
-
120
- ```bash
121
- # Optional: Set global icon color (defaults to text-purple-500)
122
- NEXT_PUBLIC_STYLE_ICON_COLOR=text-blue-600
123
- ```
57
+ These components provide a consistent way to add analytics scripts to applications while keeping script setup centralized in the shared UI package.
124
58
 
125
59
  ## License
126
-
127
- MIT
128
-
129
- ## Included Components
130
-
131
- ### UI Components (ui/)
132
- - Radix UI base components
133
- - Unified styles and themes
134
- - Full TypeScript support
135
-
136
- ### Base Components (components/)
137
- - cta: Call-to-Action component
138
- - features: Feature showcase component
139
- - footer: Footer component
140
- - gallery: Image gallery component
141
- - global-icon: Global icon management
142
- - go-to-top: Go to top button
143
- - LanguageDetector: Language detection component
144
- - LanguageSwitcher: Language switcher component
145
- - seo-content: SEO content component
146
- - tips: Tip component
147
-
148
- ### Script Components (script/)
149
- - GoogleAnalyticsScript: Google Analytics script
150
- - MicrosoftClarityScript: Microsoft Clarity script
151
-
152
- ## Usage Example
153
-
154
- ```tsx
155
- import { Button, LanguageSwitcher } from '@windrun-huaiin/base-ui';
156
-
157
- // Use UI components
158
- <Button variant="default" size="lg">
159
- Click me
160
- </Button>
161
-
162
- // Use language switcher component (need to pass in configuration)
163
- <LanguageSwitcher
164
- locales={['en', 'zh']}
165
- localeLabels={{ en: 'English', zh: 'ไธญๆ–‡' }}
166
- />
167
- ```
168
-
169
- ## Dependencies
170
-
171
- - React 18+
172
- - Next.js 15+
173
- - TypeScript
174
-
175
- ## Development
176
-
177
- ```bash
178
- # Build
179
- pnpm build
180
-
181
- # Development mode
182
- pnpm dev
183
-
184
- # Type check
185
- pnpm type-check
186
- ```
187
-
188
-
189
- ## Showcase
190
-
191
- - [Free Trivia Game](https://freetrivia.info/)
192
- - [Music Poster](https://musicposter.org/en)
193
- - [Image Narration](https://imagenarration.com/en)
194
- - [Describe Yourself](https://describeyourself.org/en)
195
- - [Newspaper Template](https://newspaper-template.org/en)
196
- - [breathing exercise](https://breathingexercise.net/en)
197
- - [ai directory list](https://aidirectorylist.com/en)
198
- - [reve image directory](https://reveimage.directory/en)
60
+ MIT License
@@ -6,65 +6,21 @@
6
6
  * 2. Single config: NEXT_PUBLIC_STYLE_ICON_COLOR (simple theme name only)
7
7
  * 3. Premium/elegant color system (uppercase hex values)
8
8
  */
9
- declare const THEME_COLOR_META_MAP: Readonly<{
10
- readonly purple: {
11
- readonly label: "ๅ…ธ้›…็ดซยทๆธ…";
12
- readonly textColor: "text-purple-500";
13
- readonly bgColor: "bg-purple-500/20";
14
- readonly viaColor: "via-purple-500/20";
15
- readonly ringColor: "ring-purple-500/20";
16
- readonly borderColor: "border-purple-500";
17
- readonly hex: "#AC62FD";
18
- };
19
- readonly orange: {
20
- readonly label: "่ฝปๅฅขๆฉ™ยทๆš–";
21
- readonly textColor: "text-orange-500";
22
- readonly bgColor: "bg-orange-500/20";
23
- readonly viaColor: "via-orange-500/20";
24
- readonly ringColor: "ring-orange-500/20";
25
- readonly borderColor: "border-orange-500";
26
- readonly hex: "#F97316";
27
- };
28
- readonly indigo: {
29
- readonly label: "ๆฒ‰็จณ่“ยทๅ†ท";
30
- readonly textColor: "text-indigo-500";
31
- readonly bgColor: "bg-indigo-500/20";
32
- readonly viaColor: "via-indigo-500/20";
33
- readonly ringColor: "ring-indigo-500/20";
34
- readonly borderColor: "border-indigo-500";
35
- readonly hex: "#6366F1";
36
- };
37
- readonly emerald: {
38
- readonly label: "ๆธฉๆถฆ็ปฟยทๆ„ˆ";
39
- readonly textColor: "text-emerald-500";
40
- readonly bgColor: "bg-emerald-500/20";
41
- readonly viaColor: "via-emerald-500/20";
42
- readonly ringColor: "ring-emerald-500/20";
43
- readonly borderColor: "border-emerald-500";
44
- readonly hex: "#10B981";
45
- };
46
- readonly rose: {
47
- readonly label: "็Žซ็‘ฐ็บขยทๆŸ”";
48
- readonly textColor: "text-rose-500";
49
- readonly bgColor: "bg-rose-500/20";
50
- readonly viaColor: "via-rose-500/20";
51
- readonly ringColor: "ring-rose-500/20";
52
- readonly borderColor: "border-rose-500";
53
- readonly hex: "#F43F5E";
54
- };
55
- }>;
56
- export type SupportedThemeName = keyof typeof THEME_COLOR_META_MAP;
57
- export type SupportedThemeColor = (typeof THEME_COLOR_META_MAP)[SupportedThemeName]["textColor"];
58
- export type SupportedThemeBgColor = (typeof THEME_COLOR_META_MAP)[SupportedThemeName]["bgColor"];
59
- export type SupportedThemeViaColor = (typeof THEME_COLOR_META_MAP)[SupportedThemeName]["viaColor"];
60
- export type SupportedThemeRingColor = (typeof THEME_COLOR_META_MAP)[SupportedThemeName]["ringColor"];
61
- export type SupportedThemeBorderColor = (typeof THEME_COLOR_META_MAP)[SupportedThemeName]["borderColor"];
9
+ export type SupportedThemeName = keyof typeof THEME_COLOR_NAME_TO_CLASS_MAP;
10
+ export type SupportedThemeColor = (typeof THEME_COLOR_NAME_TO_CLASS_MAP)[SupportedThemeName];
11
+ export type SupportedThemeBgColor = (typeof THEME_COLOR_NAME_TO_BG_CLASS_MAP)[SupportedThemeName];
12
+ export type SupportedThemeViaColor = (typeof THEME_COLOR_NAME_TO_VIA_CLASS_MAP)[SupportedThemeName];
13
+ export type SupportedThemeRingColor = (typeof THEME_COLOR_NAME_TO_RING_CLASS_MAP)[SupportedThemeName];
14
+ export type SupportedThemeBorderColor = (typeof THEME_COLOR_NAME_TO_BORDER_CLASS_MAP)[SupportedThemeName];
62
15
  export declare const __SUPPORTED_THEME_COLORS: Readonly<{
63
16
  readonly "text-purple-500": "ๅ…ธ้›…็ดซยทๆธ…";
64
17
  readonly "text-orange-500": "่ฝปๅฅขๆฉ™ยทๆš–";
65
18
  readonly "text-indigo-500": "ๆฒ‰็จณ่“ยทๅ†ท";
66
19
  readonly "text-emerald-500": "ๆธฉๆถฆ็ปฟยทๆ„ˆ";
67
20
  readonly "text-rose-500": "็Žซ็‘ฐ็บขยทๆŸ”";
21
+ readonly "text-clue-500": "ๅคฉ็ฉบ่“ยทX";
22
+ readonly "text-hose-500": "็ก่Žฒ็บขยทX";
23
+ readonly "text-pika-500": "็šฎๅก้ป„ยทX";
68
24
  }>;
69
25
  export declare const THEME_COLOR_HEX_MAP: Readonly<{
70
26
  readonly "text-purple-500": "#AC62FD";
@@ -72,6 +28,9 @@ export declare const THEME_COLOR_HEX_MAP: Readonly<{
72
28
  readonly "text-indigo-500": "#6366F1";
73
29
  readonly "text-emerald-500": "#10B981";
74
30
  readonly "text-rose-500": "#F43F5E";
31
+ readonly "text-clue-500": "#1D9BF0";
32
+ readonly "text-hose-500": "#F91980";
33
+ readonly "text-pika-500": "#FFD400";
75
34
  }>;
76
35
  export declare const THEME_COLOR_NAME_TO_CLASS_MAP: Readonly<{
77
36
  readonly purple: "text-purple-500";
@@ -79,6 +38,9 @@ export declare const THEME_COLOR_NAME_TO_CLASS_MAP: Readonly<{
79
38
  readonly indigo: "text-indigo-500";
80
39
  readonly emerald: "text-emerald-500";
81
40
  readonly rose: "text-rose-500";
41
+ readonly clue: "text-clue-500";
42
+ readonly hose: "text-hose-500";
43
+ readonly pika: "text-pika-500";
82
44
  }>;
83
45
  export declare const THEME_COLOR_NAME_TO_BG_CLASS_MAP: Readonly<{
84
46
  readonly purple: "bg-purple-500/20";
@@ -86,6 +48,9 @@ export declare const THEME_COLOR_NAME_TO_BG_CLASS_MAP: Readonly<{
86
48
  readonly indigo: "bg-indigo-500/20";
87
49
  readonly emerald: "bg-emerald-500/20";
88
50
  readonly rose: "bg-rose-500/20";
51
+ readonly clue: "bg-clue-500/20";
52
+ readonly hose: "bg-hose-500/20";
53
+ readonly pika: "bg-pika-500/20";
89
54
  }>;
90
55
  export declare const THEME_COLOR_NAME_TO_VIA_CLASS_MAP: Readonly<{
91
56
  readonly purple: "via-purple-500/20";
@@ -93,6 +58,9 @@ export declare const THEME_COLOR_NAME_TO_VIA_CLASS_MAP: Readonly<{
93
58
  readonly indigo: "via-indigo-500/20";
94
59
  readonly emerald: "via-emerald-500/20";
95
60
  readonly rose: "via-rose-500/20";
61
+ readonly clue: "via-clue-500/20";
62
+ readonly hose: "via-hose-500/20";
63
+ readonly pika: "via-pika-500/20";
96
64
  }>;
97
65
  export declare const THEME_COLOR_NAME_TO_RING_CLASS_MAP: Readonly<{
98
66
  readonly purple: "ring-purple-500/20";
@@ -100,6 +68,9 @@ export declare const THEME_COLOR_NAME_TO_RING_CLASS_MAP: Readonly<{
100
68
  readonly indigo: "ring-indigo-500/20";
101
69
  readonly emerald: "ring-emerald-500/20";
102
70
  readonly rose: "ring-rose-500/20";
71
+ readonly clue: "ring-clue-500/20";
72
+ readonly hose: "ring-hose-500/20";
73
+ readonly pika: "ring-pika-500/20";
103
74
  }>;
104
75
  export declare const THEME_COLOR_NAME_TO_BORDER_CLASS_MAP: Readonly<{
105
76
  readonly purple: "border-purple-500";
@@ -107,6 +78,9 @@ export declare const THEME_COLOR_NAME_TO_BORDER_CLASS_MAP: Readonly<{
107
78
  readonly indigo: "border-indigo-500";
108
79
  readonly emerald: "border-emerald-500";
109
80
  readonly rose: "border-rose-500";
81
+ readonly clue: "border-clue-500";
82
+ readonly hose: "border-hose-500";
83
+ readonly pika: "border-pika-500";
110
84
  }>;
111
85
  export declare const validateThemeColor: (colorClass: string) => colorClass is SupportedThemeColor;
112
86
  export declare const validateThemeName: (colorName: string) => colorName is SupportedThemeName;
@@ -117,7 +91,7 @@ export declare const themeViaColor: SupportedThemeViaColor;
117
91
  export declare const themeRingColor: SupportedThemeRingColor;
118
92
  export declare const themeBorderColor: SupportedThemeBorderColor;
119
93
  export declare const themeMainBgColor = "bg-neutral-100 dark:bg-neutral-900";
120
- export declare const themeSvgIconColor: "#AC62FD" | "#F97316" | "#6366F1" | "#10B981" | "#F43F5E";
94
+ export declare const themeSvgIconColor: "#AC62FD" | "#F97316" | "#6366F1" | "#10B981" | "#F43F5E" | "#1D9BF0" | "#F91980" | "#FFD400";
121
95
  export declare const themeSvgIconSize: string | number;
122
96
  export declare const THEME_BUTTON_GRADIENT_CLASS_MAP: Readonly<{
123
97
  readonly "text-purple-500": "bg-linear-to-r from-purple-400 to-pink-500 dark:from-purple-500 dark:to-pink-600";
@@ -125,6 +99,9 @@ export declare const THEME_BUTTON_GRADIENT_CLASS_MAP: Readonly<{
125
99
  readonly "text-indigo-500": "bg-linear-to-r from-indigo-400 to-blue-500 dark:from-indigo-500 dark:to-blue-600";
126
100
  readonly "text-emerald-500": "bg-linear-to-r from-emerald-400 to-teal-500 dark:from-emerald-500 dark:to-teal-600";
127
101
  readonly "text-rose-500": "bg-linear-to-r from-rose-400 to-pink-500 dark:from-rose-500 dark:to-pink-600";
102
+ readonly "text-clue-500": "bg-linear-to-r from-sky-400 to-clue-500 dark:from-clue-500 dark:to-cyan-500";
103
+ readonly "text-hose-500": "bg-linear-to-r from-hose-500 to-pink-500 dark:from-hose-500 dark:to-pink-600";
104
+ readonly "text-pika-500": "bg-linear-to-r from-pika-500 to-amber-500 dark:from-pika-500 dark:to-amber-500";
128
105
  }>;
129
106
  export declare const THEME_BUTTON_GRADIENT_HOVER_CLASS_MAP: Readonly<{
130
107
  readonly "text-purple-500": "hover:from-purple-500 hover:to-pink-600 dark:hover:from-purple-600 dark:hover:to-pink-700";
@@ -132,23 +109,31 @@ export declare const THEME_BUTTON_GRADIENT_HOVER_CLASS_MAP: Readonly<{
132
109
  readonly "text-indigo-500": "hover:from-indigo-500 hover:to-blue-600 dark:hover:from-indigo-600 dark:hover:to-blue-700";
133
110
  readonly "text-emerald-500": "hover:from-emerald-500 hover:to-teal-600 dark:hover:from-emerald-600 dark:hover:to-teal-700";
134
111
  readonly "text-rose-500": "hover:from-rose-500 hover:to-pink-600 dark:hover:from-rose-600 dark:hover:to-pink-700";
112
+ readonly "text-clue-500": "hover:from-clue-500 hover:to-cyan-600 dark:hover:from-clue-500 dark:hover:to-cyan-600";
113
+ readonly "text-hose-500": "hover:from-hose-500 hover:to-pink-600 dark:hover:from-hose-500 dark:hover:to-pink-700";
114
+ readonly "text-pika-500": "hover:from-pika-500 hover:to-amber-600 dark:hover:from-pika-500 dark:hover:to-amber-600";
135
115
  }>;
136
- export declare const themeButtonGradientClass: "bg-linear-to-r from-purple-400 to-pink-500 dark:from-purple-500 dark:to-pink-600" | "bg-linear-to-r from-orange-500 to-orange-600 dark:from-orange-500 dark:to-orange-700" | "bg-linear-to-r from-indigo-400 to-blue-500 dark:from-indigo-500 dark:to-blue-600" | "bg-linear-to-r from-emerald-400 to-teal-500 dark:from-emerald-500 dark:to-teal-600" | "bg-linear-to-r from-rose-400 to-pink-500 dark:from-rose-500 dark:to-pink-600";
137
- export declare const themeButtonGradientHoverClass: "hover:from-purple-500 hover:to-pink-600 dark:hover:from-purple-600 dark:hover:to-pink-700" | "hover:from-orange-500 hover:to-amber-600 dark:hover:from-orange-600 dark:hover:to-amber-700" | "hover:from-indigo-500 hover:to-blue-600 dark:hover:from-indigo-600 dark:hover:to-blue-700" | "hover:from-emerald-500 hover:to-teal-600 dark:hover:from-emerald-600 dark:hover:to-teal-700" | "hover:from-rose-500 hover:to-pink-600 dark:hover:from-rose-600 dark:hover:to-pink-700";
116
+ export declare const themeButtonGradientClass: "bg-linear-to-r from-purple-400 to-pink-500 dark:from-purple-500 dark:to-pink-600" | "bg-linear-to-r from-orange-500 to-orange-600 dark:from-orange-500 dark:to-orange-700" | "bg-linear-to-r from-indigo-400 to-blue-500 dark:from-indigo-500 dark:to-blue-600" | "bg-linear-to-r from-emerald-400 to-teal-500 dark:from-emerald-500 dark:to-teal-600" | "bg-linear-to-r from-rose-400 to-pink-500 dark:from-rose-500 dark:to-pink-600" | "bg-linear-to-r from-sky-400 to-clue-500 dark:from-clue-500 dark:to-cyan-500" | "bg-linear-to-r from-hose-500 to-pink-500 dark:from-hose-500 dark:to-pink-600" | "bg-linear-to-r from-pika-500 to-amber-500 dark:from-pika-500 dark:to-amber-500";
117
+ export declare const themeButtonGradientHoverClass: "hover:from-purple-500 hover:to-pink-600 dark:hover:from-purple-600 dark:hover:to-pink-700" | "hover:from-orange-500 hover:to-amber-600 dark:hover:from-orange-600 dark:hover:to-amber-700" | "hover:from-indigo-500 hover:to-blue-600 dark:hover:from-indigo-600 dark:hover:to-blue-700" | "hover:from-emerald-500 hover:to-teal-600 dark:hover:from-emerald-600 dark:hover:to-teal-700" | "hover:from-rose-500 hover:to-pink-600 dark:hover:from-rose-600 dark:hover:to-pink-700" | "hover:from-clue-500 hover:to-cyan-600 dark:hover:from-clue-500 dark:hover:to-cyan-600" | "hover:from-hose-500 hover:to-pink-600 dark:hover:from-hose-500 dark:hover:to-pink-700" | "hover:from-pika-500 hover:to-amber-600 dark:hover:from-pika-500 dark:hover:to-amber-600";
138
118
  export declare const THEME_HERO_EYES_ON_CLASS_MAP: Readonly<{
139
119
  readonly "text-purple-500": "bg-linear-to-r from-purple-400 to-pink-600";
140
120
  readonly "text-orange-500": "bg-linear-to-r from-orange-500 to-red-500";
141
121
  readonly "text-indigo-500": "bg-linear-to-r from-indigo-400 to-blue-600";
142
122
  readonly "text-emerald-500": "bg-linear-to-r from-emerald-400 to-teal-600";
143
123
  readonly "text-rose-500": "bg-linear-to-r from-rose-400 to-pink-600";
124
+ readonly "text-clue-500": "bg-linear-to-r from-sky-400 to-clue-500";
125
+ readonly "text-hose-500": "bg-linear-to-r from-hose-500 to-pink-600";
126
+ readonly "text-pika-500": "bg-linear-to-r from-pika-500 to-amber-600";
144
127
  }>;
145
- export declare const themeHeroEyesOnClass: "bg-linear-to-r from-purple-400 to-pink-600" | "bg-linear-to-r from-orange-500 to-red-500" | "bg-linear-to-r from-indigo-400 to-blue-600" | "bg-linear-to-r from-emerald-400 to-teal-600" | "bg-linear-to-r from-rose-400 to-pink-600";
128
+ export declare const themeHeroEyesOnClass: "bg-linear-to-r from-purple-400 to-pink-600" | "bg-linear-to-r from-orange-500 to-red-500" | "bg-linear-to-r from-indigo-400 to-blue-600" | "bg-linear-to-r from-emerald-400 to-teal-600" | "bg-linear-to-r from-rose-400 to-pink-600" | "bg-linear-to-r from-sky-400 to-clue-500" | "bg-linear-to-r from-hose-500 to-pink-600" | "bg-linear-to-r from-pika-500 to-amber-600";
146
129
  export declare const THEME_RICH_TEXT_MARK_CLASS_MAP: Readonly<{
147
130
  readonly "text-purple-500": "bg-purple-300 dark:bg-purple-600";
148
131
  readonly "text-orange-500": "bg-orange-300 dark:bg-orange-600";
149
132
  readonly "text-indigo-500": "bg-indigo-300 dark:bg-indigo-600";
150
133
  readonly "text-emerald-500": "bg-emerald-300 dark:bg-emerald-600";
151
134
  readonly "text-rose-500": "bg-rose-300 dark:bg-rose-600";
135
+ readonly "text-clue-500": "bg-clue-500/30 dark:bg-clue-500/60";
136
+ readonly "text-hose-500": "bg-hose-500/30 dark:bg-hose-500/60";
137
+ readonly "text-pika-500": "bg-pika-500/40 dark:bg-pika-500/70";
152
138
  }>;
153
- export declare const themeRichTextMarkClass: "bg-purple-300 dark:bg-purple-600" | "bg-orange-300 dark:bg-orange-600" | "bg-indigo-300 dark:bg-indigo-600" | "bg-emerald-300 dark:bg-emerald-600" | "bg-rose-300 dark:bg-rose-600";
154
- export {};
139
+ export declare const themeRichTextMarkClass: "bg-purple-300 dark:bg-purple-600" | "bg-orange-300 dark:bg-orange-600" | "bg-indigo-300 dark:bg-indigo-600" | "bg-emerald-300 dark:bg-emerald-600" | "bg-rose-300 dark:bg-rose-600" | "bg-clue-500/30 dark:bg-clue-500/60" | "bg-hose-500/30 dark:bg-hose-500/60" | "bg-pika-500/40 dark:bg-pika-500/70";
@@ -54,6 +54,33 @@ const THEME_COLOR_META_MAP = Object.freeze({
54
54
  borderColor: "border-rose-500",
55
55
  hex: "#F43F5E",
56
56
  },
57
+ clue: {
58
+ label: "ๅคฉ็ฉบ่“ยทX",
59
+ textColor: "text-clue-500",
60
+ bgColor: "bg-clue-500/20",
61
+ viaColor: "via-clue-500/20",
62
+ ringColor: "ring-clue-500/20",
63
+ borderColor: "border-clue-500",
64
+ hex: "#1D9BF0",
65
+ },
66
+ hose: {
67
+ label: "็ก่Žฒ็บขยทX",
68
+ textColor: "text-hose-500",
69
+ bgColor: "bg-hose-500/20",
70
+ viaColor: "via-hose-500/20",
71
+ ringColor: "ring-hose-500/20",
72
+ borderColor: "border-hose-500",
73
+ hex: "#F91980",
74
+ },
75
+ pika: {
76
+ label: "็šฎๅก้ป„ยทX",
77
+ textColor: "text-pika-500",
78
+ bgColor: "bg-pika-500/20",
79
+ viaColor: "via-pika-500/20",
80
+ ringColor: "ring-pika-500/20",
81
+ borderColor: "border-pika-500",
82
+ hex: "#FFD400",
83
+ },
57
84
  });
58
85
  // Supported theme color classes (static for Tailwind scan)
59
86
  const __SUPPORTED_THEME_COLORS = Object.freeze({
@@ -62,6 +89,9 @@ const __SUPPORTED_THEME_COLORS = Object.freeze({
62
89
  "text-indigo-500": THEME_COLOR_META_MAP.indigo.label,
63
90
  "text-emerald-500": THEME_COLOR_META_MAP.emerald.label,
64
91
  "text-rose-500": THEME_COLOR_META_MAP.rose.label,
92
+ "text-clue-500": THEME_COLOR_META_MAP.clue.label,
93
+ "text-hose-500": THEME_COLOR_META_MAP.hose.label,
94
+ "text-pika-500": THEME_COLOR_META_MAP.pika.label,
65
95
  });
66
96
  // Hex color map (uppercase, match Tailwind classes)
67
97
  const THEME_COLOR_HEX_MAP = Object.freeze({
@@ -70,6 +100,9 @@ const THEME_COLOR_HEX_MAP = Object.freeze({
70
100
  "text-indigo-500": THEME_COLOR_META_MAP.indigo.hex,
71
101
  "text-emerald-500": THEME_COLOR_META_MAP.emerald.hex,
72
102
  "text-rose-500": THEME_COLOR_META_MAP.rose.hex,
103
+ "text-clue-500": THEME_COLOR_META_MAP.clue.hex,
104
+ "text-hose-500": THEME_COLOR_META_MAP.hose.hex,
105
+ "text-pika-500": THEME_COLOR_META_MAP.pika.hex,
73
106
  });
74
107
  // Short theme names for env configuration
75
108
  const THEME_COLOR_NAME_TO_CLASS_MAP = Object.freeze({
@@ -78,6 +111,9 @@ const THEME_COLOR_NAME_TO_CLASS_MAP = Object.freeze({
78
111
  indigo: THEME_COLOR_META_MAP.indigo.textColor,
79
112
  emerald: THEME_COLOR_META_MAP.emerald.textColor,
80
113
  rose: THEME_COLOR_META_MAP.rose.textColor,
114
+ clue: THEME_COLOR_META_MAP.clue.textColor,
115
+ hose: THEME_COLOR_META_MAP.hose.textColor,
116
+ pika: THEME_COLOR_META_MAP.pika.textColor,
81
117
  });
82
118
  const THEME_COLOR_NAME_TO_BG_CLASS_MAP = Object.freeze({
83
119
  purple: THEME_COLOR_META_MAP.purple.bgColor,
@@ -85,6 +121,9 @@ const THEME_COLOR_NAME_TO_BG_CLASS_MAP = Object.freeze({
85
121
  indigo: THEME_COLOR_META_MAP.indigo.bgColor,
86
122
  emerald: THEME_COLOR_META_MAP.emerald.bgColor,
87
123
  rose: THEME_COLOR_META_MAP.rose.bgColor,
124
+ clue: THEME_COLOR_META_MAP.clue.bgColor,
125
+ hose: THEME_COLOR_META_MAP.hose.bgColor,
126
+ pika: THEME_COLOR_META_MAP.pika.bgColor,
88
127
  });
89
128
  const THEME_COLOR_NAME_TO_VIA_CLASS_MAP = Object.freeze({
90
129
  purple: THEME_COLOR_META_MAP.purple.viaColor,
@@ -92,6 +131,9 @@ const THEME_COLOR_NAME_TO_VIA_CLASS_MAP = Object.freeze({
92
131
  indigo: THEME_COLOR_META_MAP.indigo.viaColor,
93
132
  emerald: THEME_COLOR_META_MAP.emerald.viaColor,
94
133
  rose: THEME_COLOR_META_MAP.rose.viaColor,
134
+ clue: THEME_COLOR_META_MAP.clue.viaColor,
135
+ hose: THEME_COLOR_META_MAP.hose.viaColor,
136
+ pika: THEME_COLOR_META_MAP.pika.viaColor,
95
137
  });
96
138
  const THEME_COLOR_NAME_TO_RING_CLASS_MAP = Object.freeze({
97
139
  purple: THEME_COLOR_META_MAP.purple.ringColor,
@@ -99,6 +141,9 @@ const THEME_COLOR_NAME_TO_RING_CLASS_MAP = Object.freeze({
99
141
  indigo: THEME_COLOR_META_MAP.indigo.ringColor,
100
142
  emerald: THEME_COLOR_META_MAP.emerald.ringColor,
101
143
  rose: THEME_COLOR_META_MAP.rose.ringColor,
144
+ clue: THEME_COLOR_META_MAP.clue.ringColor,
145
+ hose: THEME_COLOR_META_MAP.hose.ringColor,
146
+ pika: THEME_COLOR_META_MAP.pika.ringColor,
102
147
  });
103
148
  const THEME_COLOR_NAME_TO_BORDER_CLASS_MAP = Object.freeze({
104
149
  purple: THEME_COLOR_META_MAP.purple.borderColor,
@@ -106,6 +151,9 @@ const THEME_COLOR_NAME_TO_BORDER_CLASS_MAP = Object.freeze({
106
151
  indigo: THEME_COLOR_META_MAP.indigo.borderColor,
107
152
  emerald: THEME_COLOR_META_MAP.emerald.borderColor,
108
153
  rose: THEME_COLOR_META_MAP.rose.borderColor,
154
+ clue: THEME_COLOR_META_MAP.clue.borderColor,
155
+ hose: THEME_COLOR_META_MAP.hose.borderColor,
156
+ pika: THEME_COLOR_META_MAP.pika.borderColor,
109
157
  });
110
158
  // Validate theme color class (type guard)
111
159
  const validateThemeColor = (colorClass) => {
@@ -145,6 +193,9 @@ const THEME_BUTTON_GRADIENT_CLASS_MAP = Object.freeze({
145
193
  "text-indigo-500": "bg-linear-to-r from-indigo-400 to-blue-500 dark:from-indigo-500 dark:to-blue-600",
146
194
  "text-emerald-500": "bg-linear-to-r from-emerald-400 to-teal-500 dark:from-emerald-500 dark:to-teal-600",
147
195
  "text-rose-500": "bg-linear-to-r from-rose-400 to-pink-500 dark:from-rose-500 dark:to-pink-600",
196
+ "text-clue-500": "bg-linear-to-r from-sky-400 to-clue-500 dark:from-clue-500 dark:to-cyan-500",
197
+ "text-hose-500": "bg-linear-to-r from-hose-500 to-pink-500 dark:from-hose-500 dark:to-pink-600",
198
+ "text-pika-500": "bg-linear-to-r from-pika-500 to-amber-500 dark:from-pika-500 dark:to-amber-500",
148
199
  });
149
200
  // Theme button hover gradient classes (static for Tailwind scan)
150
201
  const THEME_BUTTON_GRADIENT_HOVER_CLASS_MAP = Object.freeze({
@@ -153,6 +204,9 @@ const THEME_BUTTON_GRADIENT_HOVER_CLASS_MAP = Object.freeze({
153
204
  "text-indigo-500": "hover:from-indigo-500 hover:to-blue-600 dark:hover:from-indigo-600 dark:hover:to-blue-700",
154
205
  "text-emerald-500": "hover:from-emerald-500 hover:to-teal-600 dark:hover:from-emerald-600 dark:hover:to-teal-700",
155
206
  "text-rose-500": "hover:from-rose-500 hover:to-pink-600 dark:hover:from-rose-600 dark:hover:to-pink-700",
207
+ "text-clue-500": "hover:from-clue-500 hover:to-cyan-600 dark:hover:from-clue-500 dark:hover:to-cyan-600",
208
+ "text-hose-500": "hover:from-hose-500 hover:to-pink-600 dark:hover:from-hose-500 dark:hover:to-pink-700",
209
+ "text-pika-500": "hover:from-pika-500 hover:to-amber-600 dark:hover:from-pika-500 dark:hover:to-amber-600",
156
210
  });
157
211
  // Global button gradient classes (type-safe, follows themeIconColor)
158
212
  const themeButtonGradientClass = THEME_BUTTON_GRADIENT_CLASS_MAP[themeIconColor];
@@ -164,6 +218,9 @@ const THEME_HERO_EYES_ON_CLASS_MAP = Object.freeze({
164
218
  "text-indigo-500": "bg-linear-to-r from-indigo-400 to-blue-600",
165
219
  "text-emerald-500": "bg-linear-to-r from-emerald-400 to-teal-600",
166
220
  "text-rose-500": "bg-linear-to-r from-rose-400 to-pink-600",
221
+ "text-clue-500": "bg-linear-to-r from-sky-400 to-clue-500",
222
+ "text-hose-500": "bg-linear-to-r from-hose-500 to-pink-600",
223
+ "text-pika-500": "bg-linear-to-r from-pika-500 to-amber-600",
167
224
  });
168
225
  const themeHeroEyesOnClass = THEME_HERO_EYES_ON_CLASS_MAP[themeIconColor];
169
226
  // Theme rich-text <mark> highlight background classes (darker emphasis, readable)
@@ -173,6 +230,9 @@ const THEME_RICH_TEXT_MARK_CLASS_MAP = Object.freeze({
173
230
  "text-indigo-500": "bg-indigo-300 dark:bg-indigo-600",
174
231
  "text-emerald-500": "bg-emerald-300 dark:bg-emerald-600",
175
232
  "text-rose-500": "bg-rose-300 dark:bg-rose-600",
233
+ "text-clue-500": "bg-clue-500/30 dark:bg-clue-500/60",
234
+ "text-hose-500": "bg-hose-500/30 dark:bg-hose-500/60",
235
+ "text-pika-500": "bg-pika-500/40 dark:bg-pika-500/70",
176
236
  });
177
237
  const themeRichTextMarkClass = THEME_RICH_TEXT_MARK_CLASS_MAP[themeIconColor];
178
238
 
@@ -52,6 +52,33 @@ const THEME_COLOR_META_MAP = Object.freeze({
52
52
  borderColor: "border-rose-500",
53
53
  hex: "#F43F5E",
54
54
  },
55
+ clue: {
56
+ label: "ๅคฉ็ฉบ่“ยทX",
57
+ textColor: "text-clue-500",
58
+ bgColor: "bg-clue-500/20",
59
+ viaColor: "via-clue-500/20",
60
+ ringColor: "ring-clue-500/20",
61
+ borderColor: "border-clue-500",
62
+ hex: "#1D9BF0",
63
+ },
64
+ hose: {
65
+ label: "็ก่Žฒ็บขยทX",
66
+ textColor: "text-hose-500",
67
+ bgColor: "bg-hose-500/20",
68
+ viaColor: "via-hose-500/20",
69
+ ringColor: "ring-hose-500/20",
70
+ borderColor: "border-hose-500",
71
+ hex: "#F91980",
72
+ },
73
+ pika: {
74
+ label: "็šฎๅก้ป„ยทX",
75
+ textColor: "text-pika-500",
76
+ bgColor: "bg-pika-500/20",
77
+ viaColor: "via-pika-500/20",
78
+ ringColor: "ring-pika-500/20",
79
+ borderColor: "border-pika-500",
80
+ hex: "#FFD400",
81
+ },
55
82
  });
56
83
  // Supported theme color classes (static for Tailwind scan)
57
84
  const __SUPPORTED_THEME_COLORS = Object.freeze({
@@ -60,6 +87,9 @@ const __SUPPORTED_THEME_COLORS = Object.freeze({
60
87
  "text-indigo-500": THEME_COLOR_META_MAP.indigo.label,
61
88
  "text-emerald-500": THEME_COLOR_META_MAP.emerald.label,
62
89
  "text-rose-500": THEME_COLOR_META_MAP.rose.label,
90
+ "text-clue-500": THEME_COLOR_META_MAP.clue.label,
91
+ "text-hose-500": THEME_COLOR_META_MAP.hose.label,
92
+ "text-pika-500": THEME_COLOR_META_MAP.pika.label,
63
93
  });
64
94
  // Hex color map (uppercase, match Tailwind classes)
65
95
  const THEME_COLOR_HEX_MAP = Object.freeze({
@@ -68,6 +98,9 @@ const THEME_COLOR_HEX_MAP = Object.freeze({
68
98
  "text-indigo-500": THEME_COLOR_META_MAP.indigo.hex,
69
99
  "text-emerald-500": THEME_COLOR_META_MAP.emerald.hex,
70
100
  "text-rose-500": THEME_COLOR_META_MAP.rose.hex,
101
+ "text-clue-500": THEME_COLOR_META_MAP.clue.hex,
102
+ "text-hose-500": THEME_COLOR_META_MAP.hose.hex,
103
+ "text-pika-500": THEME_COLOR_META_MAP.pika.hex,
71
104
  });
72
105
  // Short theme names for env configuration
73
106
  const THEME_COLOR_NAME_TO_CLASS_MAP = Object.freeze({
@@ -76,6 +109,9 @@ const THEME_COLOR_NAME_TO_CLASS_MAP = Object.freeze({
76
109
  indigo: THEME_COLOR_META_MAP.indigo.textColor,
77
110
  emerald: THEME_COLOR_META_MAP.emerald.textColor,
78
111
  rose: THEME_COLOR_META_MAP.rose.textColor,
112
+ clue: THEME_COLOR_META_MAP.clue.textColor,
113
+ hose: THEME_COLOR_META_MAP.hose.textColor,
114
+ pika: THEME_COLOR_META_MAP.pika.textColor,
79
115
  });
80
116
  const THEME_COLOR_NAME_TO_BG_CLASS_MAP = Object.freeze({
81
117
  purple: THEME_COLOR_META_MAP.purple.bgColor,
@@ -83,6 +119,9 @@ const THEME_COLOR_NAME_TO_BG_CLASS_MAP = Object.freeze({
83
119
  indigo: THEME_COLOR_META_MAP.indigo.bgColor,
84
120
  emerald: THEME_COLOR_META_MAP.emerald.bgColor,
85
121
  rose: THEME_COLOR_META_MAP.rose.bgColor,
122
+ clue: THEME_COLOR_META_MAP.clue.bgColor,
123
+ hose: THEME_COLOR_META_MAP.hose.bgColor,
124
+ pika: THEME_COLOR_META_MAP.pika.bgColor,
86
125
  });
87
126
  const THEME_COLOR_NAME_TO_VIA_CLASS_MAP = Object.freeze({
88
127
  purple: THEME_COLOR_META_MAP.purple.viaColor,
@@ -90,6 +129,9 @@ const THEME_COLOR_NAME_TO_VIA_CLASS_MAP = Object.freeze({
90
129
  indigo: THEME_COLOR_META_MAP.indigo.viaColor,
91
130
  emerald: THEME_COLOR_META_MAP.emerald.viaColor,
92
131
  rose: THEME_COLOR_META_MAP.rose.viaColor,
132
+ clue: THEME_COLOR_META_MAP.clue.viaColor,
133
+ hose: THEME_COLOR_META_MAP.hose.viaColor,
134
+ pika: THEME_COLOR_META_MAP.pika.viaColor,
93
135
  });
94
136
  const THEME_COLOR_NAME_TO_RING_CLASS_MAP = Object.freeze({
95
137
  purple: THEME_COLOR_META_MAP.purple.ringColor,
@@ -97,6 +139,9 @@ const THEME_COLOR_NAME_TO_RING_CLASS_MAP = Object.freeze({
97
139
  indigo: THEME_COLOR_META_MAP.indigo.ringColor,
98
140
  emerald: THEME_COLOR_META_MAP.emerald.ringColor,
99
141
  rose: THEME_COLOR_META_MAP.rose.ringColor,
142
+ clue: THEME_COLOR_META_MAP.clue.ringColor,
143
+ hose: THEME_COLOR_META_MAP.hose.ringColor,
144
+ pika: THEME_COLOR_META_MAP.pika.ringColor,
100
145
  });
101
146
  const THEME_COLOR_NAME_TO_BORDER_CLASS_MAP = Object.freeze({
102
147
  purple: THEME_COLOR_META_MAP.purple.borderColor,
@@ -104,6 +149,9 @@ const THEME_COLOR_NAME_TO_BORDER_CLASS_MAP = Object.freeze({
104
149
  indigo: THEME_COLOR_META_MAP.indigo.borderColor,
105
150
  emerald: THEME_COLOR_META_MAP.emerald.borderColor,
106
151
  rose: THEME_COLOR_META_MAP.rose.borderColor,
152
+ clue: THEME_COLOR_META_MAP.clue.borderColor,
153
+ hose: THEME_COLOR_META_MAP.hose.borderColor,
154
+ pika: THEME_COLOR_META_MAP.pika.borderColor,
107
155
  });
108
156
  // Validate theme color class (type guard)
109
157
  const validateThemeColor = (colorClass) => {
@@ -143,6 +191,9 @@ const THEME_BUTTON_GRADIENT_CLASS_MAP = Object.freeze({
143
191
  "text-indigo-500": "bg-linear-to-r from-indigo-400 to-blue-500 dark:from-indigo-500 dark:to-blue-600",
144
192
  "text-emerald-500": "bg-linear-to-r from-emerald-400 to-teal-500 dark:from-emerald-500 dark:to-teal-600",
145
193
  "text-rose-500": "bg-linear-to-r from-rose-400 to-pink-500 dark:from-rose-500 dark:to-pink-600",
194
+ "text-clue-500": "bg-linear-to-r from-sky-400 to-clue-500 dark:from-clue-500 dark:to-cyan-500",
195
+ "text-hose-500": "bg-linear-to-r from-hose-500 to-pink-500 dark:from-hose-500 dark:to-pink-600",
196
+ "text-pika-500": "bg-linear-to-r from-pika-500 to-amber-500 dark:from-pika-500 dark:to-amber-500",
146
197
  });
147
198
  // Theme button hover gradient classes (static for Tailwind scan)
148
199
  const THEME_BUTTON_GRADIENT_HOVER_CLASS_MAP = Object.freeze({
@@ -151,6 +202,9 @@ const THEME_BUTTON_GRADIENT_HOVER_CLASS_MAP = Object.freeze({
151
202
  "text-indigo-500": "hover:from-indigo-500 hover:to-blue-600 dark:hover:from-indigo-600 dark:hover:to-blue-700",
152
203
  "text-emerald-500": "hover:from-emerald-500 hover:to-teal-600 dark:hover:from-emerald-600 dark:hover:to-teal-700",
153
204
  "text-rose-500": "hover:from-rose-500 hover:to-pink-600 dark:hover:from-rose-600 dark:hover:to-pink-700",
205
+ "text-clue-500": "hover:from-clue-500 hover:to-cyan-600 dark:hover:from-clue-500 dark:hover:to-cyan-600",
206
+ "text-hose-500": "hover:from-hose-500 hover:to-pink-600 dark:hover:from-hose-500 dark:hover:to-pink-700",
207
+ "text-pika-500": "hover:from-pika-500 hover:to-amber-600 dark:hover:from-pika-500 dark:hover:to-amber-600",
154
208
  });
155
209
  // Global button gradient classes (type-safe, follows themeIconColor)
156
210
  const themeButtonGradientClass = THEME_BUTTON_GRADIENT_CLASS_MAP[themeIconColor];
@@ -162,6 +216,9 @@ const THEME_HERO_EYES_ON_CLASS_MAP = Object.freeze({
162
216
  "text-indigo-500": "bg-linear-to-r from-indigo-400 to-blue-600",
163
217
  "text-emerald-500": "bg-linear-to-r from-emerald-400 to-teal-600",
164
218
  "text-rose-500": "bg-linear-to-r from-rose-400 to-pink-600",
219
+ "text-clue-500": "bg-linear-to-r from-sky-400 to-clue-500",
220
+ "text-hose-500": "bg-linear-to-r from-hose-500 to-pink-600",
221
+ "text-pika-500": "bg-linear-to-r from-pika-500 to-amber-600",
165
222
  });
166
223
  const themeHeroEyesOnClass = THEME_HERO_EYES_ON_CLASS_MAP[themeIconColor];
167
224
  // Theme rich-text <mark> highlight background classes (darker emphasis, readable)
@@ -171,6 +228,9 @@ const THEME_RICH_TEXT_MARK_CLASS_MAP = Object.freeze({
171
228
  "text-indigo-500": "bg-indigo-300 dark:bg-indigo-600",
172
229
  "text-emerald-500": "bg-emerald-300 dark:bg-emerald-600",
173
230
  "text-rose-500": "bg-rose-300 dark:bg-rose-600",
231
+ "text-clue-500": "bg-clue-500/30 dark:bg-clue-500/60",
232
+ "text-hose-500": "bg-hose-500/30 dark:bg-hose-500/60",
233
+ "text-pika-500": "bg-pika-500/40 dark:bg-pika-500/70",
174
234
  });
175
235
  const themeRichTextMarkClass = THEME_RICH_TEXT_MARK_CLASS_MAP[themeIconColor];
176
236
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@windrun-huaiin/base-ui",
3
- "version": "30.1.0",
3
+ "version": "31.0.1",
4
4
  "description": "Base UI components for windrun-huaiin projects",
5
5
  "type": "module",
6
6
  "exports": {
@@ -59,7 +59,7 @@
59
59
  "class-variance-authority": "^0.7.1",
60
60
  "lucide-react": "^0.577.0",
61
61
  "tslib": "^2.8.1",
62
- "@windrun-huaiin/lib": "^30.0.0"
62
+ "@windrun-huaiin/lib": "^31.0.3"
63
63
  },
64
64
  "peerDependencies": {
65
65
  "clsx": "^2.1.1",
@@ -90,6 +90,12 @@
90
90
  "publishConfig": {
91
91
  "access": "public"
92
92
  },
93
+ "homepage": "https://d8ger.com",
94
+ "repository": {
95
+ "type": "git",
96
+ "url": "git+https://github.com/caofanCPU/next-ai-build.git",
97
+ "directory": "packages/base-ui"
98
+ },
93
99
  "scripts": {
94
100
  "build": "rollup -c rollup.config.mjs",
95
101
  "build:prod": "rollup -c rollup.config.mjs",
@@ -53,14 +53,41 @@ const THEME_COLOR_META_MAP = Object.freeze({
53
53
  borderColor: "border-rose-500",
54
54
  hex: "#F43F5E",
55
55
  },
56
+ clue: {
57
+ label: "ๅคฉ็ฉบ่“ยทX",
58
+ textColor: "text-clue-500",
59
+ bgColor: "bg-clue-500/20",
60
+ viaColor: "via-clue-500/20",
61
+ ringColor: "ring-clue-500/20",
62
+ borderColor: "border-clue-500",
63
+ hex: "#1D9BF0",
64
+ },
65
+ hose: {
66
+ label: "็ก่Žฒ็บขยทX",
67
+ textColor: "text-hose-500",
68
+ bgColor: "bg-hose-500/20",
69
+ viaColor: "via-hose-500/20",
70
+ ringColor: "ring-hose-500/20",
71
+ borderColor: "border-hose-500",
72
+ hex: "#F91980",
73
+ },
74
+ pika: {
75
+ label: "็šฎๅก้ป„ยทX",
76
+ textColor: "text-pika-500",
77
+ bgColor: "bg-pika-500/20",
78
+ viaColor: "via-pika-500/20",
79
+ ringColor: "ring-pika-500/20",
80
+ borderColor: "border-pika-500",
81
+ hex: "#FFD400",
82
+ },
56
83
  } as const);
57
84
 
58
- export type SupportedThemeName = keyof typeof THEME_COLOR_META_MAP;
59
- export type SupportedThemeColor = (typeof THEME_COLOR_META_MAP)[SupportedThemeName]["textColor"];
60
- export type SupportedThemeBgColor = (typeof THEME_COLOR_META_MAP)[SupportedThemeName]["bgColor"];
61
- export type SupportedThemeViaColor = (typeof THEME_COLOR_META_MAP)[SupportedThemeName]["viaColor"];
62
- export type SupportedThemeRingColor = (typeof THEME_COLOR_META_MAP)[SupportedThemeName]["ringColor"];
63
- export type SupportedThemeBorderColor = (typeof THEME_COLOR_META_MAP)[SupportedThemeName]["borderColor"];
85
+ export type SupportedThemeName = keyof typeof THEME_COLOR_NAME_TO_CLASS_MAP;
86
+ export type SupportedThemeColor = (typeof THEME_COLOR_NAME_TO_CLASS_MAP)[SupportedThemeName];
87
+ export type SupportedThemeBgColor = (typeof THEME_COLOR_NAME_TO_BG_CLASS_MAP)[SupportedThemeName];
88
+ export type SupportedThemeViaColor = (typeof THEME_COLOR_NAME_TO_VIA_CLASS_MAP)[SupportedThemeName];
89
+ export type SupportedThemeRingColor = (typeof THEME_COLOR_NAME_TO_RING_CLASS_MAP)[SupportedThemeName];
90
+ export type SupportedThemeBorderColor = (typeof THEME_COLOR_NAME_TO_BORDER_CLASS_MAP)[SupportedThemeName];
64
91
 
65
92
  // Supported theme color classes (static for Tailwind scan)
66
93
  export const __SUPPORTED_THEME_COLORS = Object.freeze({
@@ -69,6 +96,9 @@ export const __SUPPORTED_THEME_COLORS = Object.freeze({
69
96
  "text-indigo-500": THEME_COLOR_META_MAP.indigo.label,
70
97
  "text-emerald-500": THEME_COLOR_META_MAP.emerald.label,
71
98
  "text-rose-500": THEME_COLOR_META_MAP.rose.label,
99
+ "text-clue-500": THEME_COLOR_META_MAP.clue.label,
100
+ "text-hose-500": THEME_COLOR_META_MAP.hose.label,
101
+ "text-pika-500": THEME_COLOR_META_MAP.pika.label,
72
102
  } as const);
73
103
 
74
104
  // Hex color map (uppercase, match Tailwind classes)
@@ -78,6 +108,9 @@ export const THEME_COLOR_HEX_MAP = Object.freeze({
78
108
  "text-indigo-500": THEME_COLOR_META_MAP.indigo.hex,
79
109
  "text-emerald-500": THEME_COLOR_META_MAP.emerald.hex,
80
110
  "text-rose-500": THEME_COLOR_META_MAP.rose.hex,
111
+ "text-clue-500": THEME_COLOR_META_MAP.clue.hex,
112
+ "text-hose-500": THEME_COLOR_META_MAP.hose.hex,
113
+ "text-pika-500": THEME_COLOR_META_MAP.pika.hex,
81
114
  } as const);
82
115
 
83
116
  // Short theme names for env configuration
@@ -87,6 +120,9 @@ export const THEME_COLOR_NAME_TO_CLASS_MAP = Object.freeze({
87
120
  indigo: THEME_COLOR_META_MAP.indigo.textColor,
88
121
  emerald: THEME_COLOR_META_MAP.emerald.textColor,
89
122
  rose: THEME_COLOR_META_MAP.rose.textColor,
123
+ clue: THEME_COLOR_META_MAP.clue.textColor,
124
+ hose: THEME_COLOR_META_MAP.hose.textColor,
125
+ pika: THEME_COLOR_META_MAP.pika.textColor,
90
126
  } as const);
91
127
 
92
128
  export const THEME_COLOR_NAME_TO_BG_CLASS_MAP = Object.freeze({
@@ -95,6 +131,9 @@ export const THEME_COLOR_NAME_TO_BG_CLASS_MAP = Object.freeze({
95
131
  indigo: THEME_COLOR_META_MAP.indigo.bgColor,
96
132
  emerald: THEME_COLOR_META_MAP.emerald.bgColor,
97
133
  rose: THEME_COLOR_META_MAP.rose.bgColor,
134
+ clue: THEME_COLOR_META_MAP.clue.bgColor,
135
+ hose: THEME_COLOR_META_MAP.hose.bgColor,
136
+ pika: THEME_COLOR_META_MAP.pika.bgColor,
98
137
  } as const);
99
138
 
100
139
  export const THEME_COLOR_NAME_TO_VIA_CLASS_MAP = Object.freeze({
@@ -103,6 +142,9 @@ export const THEME_COLOR_NAME_TO_VIA_CLASS_MAP = Object.freeze({
103
142
  indigo: THEME_COLOR_META_MAP.indigo.viaColor,
104
143
  emerald: THEME_COLOR_META_MAP.emerald.viaColor,
105
144
  rose: THEME_COLOR_META_MAP.rose.viaColor,
145
+ clue: THEME_COLOR_META_MAP.clue.viaColor,
146
+ hose: THEME_COLOR_META_MAP.hose.viaColor,
147
+ pika: THEME_COLOR_META_MAP.pika.viaColor,
106
148
  } as const);
107
149
 
108
150
  export const THEME_COLOR_NAME_TO_RING_CLASS_MAP = Object.freeze({
@@ -111,6 +153,9 @@ export const THEME_COLOR_NAME_TO_RING_CLASS_MAP = Object.freeze({
111
153
  indigo: THEME_COLOR_META_MAP.indigo.ringColor,
112
154
  emerald: THEME_COLOR_META_MAP.emerald.ringColor,
113
155
  rose: THEME_COLOR_META_MAP.rose.ringColor,
156
+ clue: THEME_COLOR_META_MAP.clue.ringColor,
157
+ hose: THEME_COLOR_META_MAP.hose.ringColor,
158
+ pika: THEME_COLOR_META_MAP.pika.ringColor,
114
159
  } as const);
115
160
 
116
161
  export const THEME_COLOR_NAME_TO_BORDER_CLASS_MAP = Object.freeze({
@@ -119,6 +164,9 @@ export const THEME_COLOR_NAME_TO_BORDER_CLASS_MAP = Object.freeze({
119
164
  indigo: THEME_COLOR_META_MAP.indigo.borderColor,
120
165
  emerald: THEME_COLOR_META_MAP.emerald.borderColor,
121
166
  rose: THEME_COLOR_META_MAP.rose.borderColor,
167
+ clue: THEME_COLOR_META_MAP.clue.borderColor,
168
+ hose: THEME_COLOR_META_MAP.hose.borderColor,
169
+ pika: THEME_COLOR_META_MAP.pika.borderColor,
122
170
  } as const);
123
171
 
124
172
  // Validate theme color class (type guard)
@@ -169,6 +217,9 @@ export const THEME_BUTTON_GRADIENT_CLASS_MAP = Object.freeze({
169
217
  "text-indigo-500": "bg-linear-to-r from-indigo-400 to-blue-500 dark:from-indigo-500 dark:to-blue-600",
170
218
  "text-emerald-500": "bg-linear-to-r from-emerald-400 to-teal-500 dark:from-emerald-500 dark:to-teal-600",
171
219
  "text-rose-500": "bg-linear-to-r from-rose-400 to-pink-500 dark:from-rose-500 dark:to-pink-600",
220
+ "text-clue-500": "bg-linear-to-r from-sky-400 to-clue-500 dark:from-clue-500 dark:to-cyan-500",
221
+ "text-hose-500": "bg-linear-to-r from-hose-500 to-pink-500 dark:from-hose-500 dark:to-pink-600",
222
+ "text-pika-500": "bg-linear-to-r from-pika-500 to-amber-500 dark:from-pika-500 dark:to-amber-500",
172
223
  } as const);
173
224
 
174
225
  // Theme button hover gradient classes (static for Tailwind scan)
@@ -178,6 +229,9 @@ export const THEME_BUTTON_GRADIENT_HOVER_CLASS_MAP = Object.freeze({
178
229
  "text-indigo-500": "hover:from-indigo-500 hover:to-blue-600 dark:hover:from-indigo-600 dark:hover:to-blue-700",
179
230
  "text-emerald-500": "hover:from-emerald-500 hover:to-teal-600 dark:hover:from-emerald-600 dark:hover:to-teal-700",
180
231
  "text-rose-500": "hover:from-rose-500 hover:to-pink-600 dark:hover:from-rose-600 dark:hover:to-pink-700",
232
+ "text-clue-500": "hover:from-clue-500 hover:to-cyan-600 dark:hover:from-clue-500 dark:hover:to-cyan-600",
233
+ "text-hose-500": "hover:from-hose-500 hover:to-pink-600 dark:hover:from-hose-500 dark:hover:to-pink-700",
234
+ "text-pika-500": "hover:from-pika-500 hover:to-amber-600 dark:hover:from-pika-500 dark:hover:to-amber-600",
181
235
  } as const);
182
236
 
183
237
  // Global button gradient classes (type-safe, follows themeIconColor)
@@ -191,6 +245,9 @@ export const THEME_HERO_EYES_ON_CLASS_MAP = Object.freeze({
191
245
  "text-indigo-500": "bg-linear-to-r from-indigo-400 to-blue-600",
192
246
  "text-emerald-500": "bg-linear-to-r from-emerald-400 to-teal-600",
193
247
  "text-rose-500": "bg-linear-to-r from-rose-400 to-pink-600",
248
+ "text-clue-500": "bg-linear-to-r from-sky-400 to-clue-500",
249
+ "text-hose-500": "bg-linear-to-r from-hose-500 to-pink-600",
250
+ "text-pika-500": "bg-linear-to-r from-pika-500 to-amber-600",
194
251
  } as const);
195
252
 
196
253
  export const themeHeroEyesOnClass = THEME_HERO_EYES_ON_CLASS_MAP[themeIconColor];
@@ -202,6 +259,9 @@ export const THEME_RICH_TEXT_MARK_CLASS_MAP = Object.freeze({
202
259
  "text-indigo-500": "bg-indigo-300 dark:bg-indigo-600",
203
260
  "text-emerald-500": "bg-emerald-300 dark:bg-emerald-600",
204
261
  "text-rose-500": "bg-rose-300 dark:bg-rose-600",
262
+ "text-clue-500": "bg-clue-500/30 dark:bg-clue-500/60",
263
+ "text-hose-500": "bg-hose-500/30 dark:bg-hose-500/60",
264
+ "text-pika-500": "bg-pika-500/40 dark:bg-pika-500/70",
205
265
  } as const);
206
266
 
207
267
  export const themeRichTextMarkClass = THEME_RICH_TEXT_MARK_CLASS_MAP[themeIconColor];
@@ -1,2 +1,7 @@
1
1
 
2
-
2
+
3
+ @theme {
4
+ --color-clue-500: #1D9BF0;
5
+ --color-hose-500: #F91980;
6
+ --color-pika-500: #FFD400;
7
+ }