@windrun-huaiin/lib 3.1.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.
@@ -0,0 +1,154 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+
21
+ // src/common-app-config.ts
22
+ var ALL_LOCALE_LABELS = {
23
+ en: "English",
24
+ zh: "\u7B80\u4F53\u4E2D\u6587",
25
+ ja: "\u65E5\u672C\u8A9E",
26
+ ko: "\uD55C\uAD6D\uC5B4",
27
+ fr: "Fran\xE7ais",
28
+ de: "Deutsch",
29
+ es: "Espa\xF1ol",
30
+ it: "Italiano",
31
+ pt: "Portugu\xEAs",
32
+ tr: "T\xFCrk\xE7e",
33
+ pl: "Polski",
34
+ ru: "\u0420\u0443\u0441\u0441\u043A\u0438\u0439",
35
+ ar: "\u0627\u0644\u0639\u0631\u0628\u064A\u0629",
36
+ hi: "\u0939\u093F\u0928\u094D\u0926\u0940",
37
+ th: "\u0E44\u0E17\u0E22",
38
+ vi: "Ti\u1EBFng Vi\u1EC7t"
39
+ };
40
+ function getLocaleLabels(locales) {
41
+ return Object.fromEntries(
42
+ locales.map((locale) => [
43
+ locale,
44
+ ALL_LOCALE_LABELS[locale] || locale
45
+ ])
46
+ );
47
+ }
48
+ function createCommonAppConfig(options) {
49
+ var _a, _b, _c, _d, _e;
50
+ const locales = (_c = (_b = options == null ? void 0 : options.locales) != null ? _b : (_a = process.env.NEXT_PUBLIC_I18N_LOCALES) == null ? void 0 : _a.split(",").map((s) => s.trim())) != null ? _c : ["en", "zh"];
51
+ const defaultLocale = (_e = (_d = options == null ? void 0 : options.defaultLocale) != null ? _d : process.env.NEXT_PUBLIC_I18N_DEFAULT_LOCALE) != null ? _e : "en";
52
+ const storagePrefix = process.env.NEXT_PUBLIC_I18N_STORAGE_PREFIX || "WINDRUN-HUAIIN";
53
+ const config = {
54
+ // Basic configuration
55
+ baseUrl: process.env.NEXT_PUBLIC_BASE_URL || "",
56
+ githubBaseUrl: process.env.NEXT_PUBLIC_GITHUB_BASE_URL || "",
57
+ github: process.env.NEXT_PUBLIC_GITHUB || "",
58
+ githubInfoToken: process.env.NEXT_PUBLIC_FUMA_GITHUB_TOKEN || "",
59
+ // Internationalization configuration
60
+ i18n: {
61
+ locales,
62
+ defaultLocale,
63
+ localeLabels: getLocaleLabels(locales),
64
+ detector: {
65
+ storageKey: process.env.NEXT_PUBLIC_I18N_STORAGE_KEY || "language-preference-status",
66
+ autoCloseTimeout: parseInt(process.env.NEXT_PUBLIC_I18N_AUTO_CLOSE_TIMEOUT || "10000"),
67
+ expirationDays: parseInt(process.env.NEXT_PUBLIC_I18N_EXPIRATION_DAYS || "30"),
68
+ storagePrefix
69
+ },
70
+ messageRoot: process.env.NEXT_PUBLIC_I18N_MESSAGE_ROOT || "messages"
71
+ },
72
+ // Style configuration
73
+ style: {
74
+ icon: {
75
+ uniformColor: process.env.NEXT_PUBLIC_STYLE_ICON_COLOR || "text-purple-500"
76
+ },
77
+ showBanner: process.env.NEXT_PUBLIC_STYLE_SHOW_BANNER === "true",
78
+ clerkAuthInModal: process.env.NEXT_PUBLIC_STYLE_CLERK_AUTH_IN_MODAL === "true",
79
+ clerkPageBanner: process.env.NEXT_PUBLIC_STYLE_CLERK_PAGE_BANNER === "true",
80
+ watermark: {
81
+ enabled: process.env.NEXT_PUBLIC_STYLE_WATERMARK_ENABLED === "true",
82
+ text: process.env.NEXT_PUBLIC_STYLE_WATERMARK_TEXT || "\u5DFD\u5DDD\xB7\u6000\u56E0"
83
+ },
84
+ cdnBaseUrl: process.env.NEXT_PUBLIC_STYLE_CDN_BASE_URL || "https://raw.githubusercontent.com/caofanCPU/wind-run-1/main/public",
85
+ placeHolder: {
86
+ image: process.env.NEXT_PUBLIC_STYLE_PLACEHOLDER_IMAGE || "/default.webp"
87
+ }
88
+ },
89
+ // Clerk configuration
90
+ clerk: {
91
+ signInUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_IN_URL || "/sign-in",
92
+ fallbackSignInUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL || "/",
93
+ signUpUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_UP_URL || "/sign-up",
94
+ fallbackSignUpUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL || "/",
95
+ waitlistUrl: process.env.NEXT_PUBLIC_CLERK_WAITLIST_URL || "/waitlist",
96
+ debug: process.env.CLERK_DEBUG === "true"
97
+ },
98
+ // MDX source file directory configuration
99
+ mdxSourceDir: {
100
+ docs: process.env.NEXT_PUBLIC_MDX_DOCS_DIR || "src/mdx/docs",
101
+ blog: process.env.NEXT_PUBLIC_MDX_BLOG_DIR || "src/mdx/blog",
102
+ legal: process.env.NEXT_PUBLIC_MDX_LEGAL_DIR || "src/mdx/legal"
103
+ }
104
+ };
105
+ const shortcuts = {
106
+ iconColor: config.style.icon.uniformColor,
107
+ watermark: config.style.watermark,
108
+ showBanner: config.style.showBanner,
109
+ clerkPageBanner: config.style.clerkPageBanner,
110
+ clerkAuthInModal: config.style.clerkAuthInModal,
111
+ placeHolderImage: config.style.placeHolder.image,
112
+ clerk: config.clerk
113
+ };
114
+ return __spreadProps(__spreadValues({}, config), {
115
+ shortcuts
116
+ });
117
+ }
118
+ function createI18nHelpers(i18nConfig) {
119
+ function isSupportedLocale(locale) {
120
+ return i18nConfig.locales.includes(locale);
121
+ }
122
+ function getValidLocale(locale) {
123
+ return isSupportedLocale(locale) ? locale : i18nConfig.defaultLocale;
124
+ }
125
+ const generatedLocales = i18nConfig.locales.map((loc) => ({
126
+ name: i18nConfig.localeLabels[loc] || loc,
127
+ locale: loc
128
+ }));
129
+ return {
130
+ isSupportedLocale,
131
+ getValidLocale,
132
+ generatedLocales
133
+ };
134
+ }
135
+ var LOCALE_PRESETS = {
136
+ // Only support English
137
+ EN_ONLY: { locales: ["en"], defaultLocale: "en" },
138
+ // English and Chinese
139
+ EN_ZH: { locales: ["en", "zh"], defaultLocale: "en" },
140
+ // Main Asian languages
141
+ ASIA: { locales: ["en", "zh", "ja", "ko"], defaultLocale: "en" },
142
+ // Main European languages
143
+ EUROPE: { locales: ["en", "fr", "de", "es", "it"], defaultLocale: "en" },
144
+ // Globalization
145
+ GLOBAL: { locales: ["en", "zh", "ja", "ko", "fr", "de", "es", "it", "pt", "ru"], defaultLocale: "en" },
146
+ // No internationalization (only default language)
147
+ NONE: { locales: [], defaultLocale: "en" }
148
+ };
149
+ export {
150
+ LOCALE_PRESETS,
151
+ createCommonAppConfig,
152
+ createI18nHelpers
153
+ };
154
+ //# sourceMappingURL=common-app-config.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/common-app-config.ts"],"sourcesContent":["// Supported languages and their labels\nconst ALL_LOCALE_LABELS = {\n en: \"English\",\n zh: \"简体中文\",\n ja: \"日本語\", \n ko: \"한국어\",\n fr: \"Français\",\n de: \"Deutsch\",\n es: \"Español\",\n it: \"Italiano\",\n pt: \"Português\",\n tr: \"Türkçe\",\n pl: \"Polski\",\n ru: \"Русский\",\n ar: \"العربية\",\n hi: \"हिन्दी\",\n th: \"ไทย\",\n vi: \"Tiếng Việt\",\n} as const;\n\nexport type SupportedLocale = keyof typeof ALL_LOCALE_LABELS;\n\n// Helper function to get language configuration from environment variables\nfunction getLocaleLabels(locales: string[]) {\n return Object.fromEntries(\n locales.map(locale => [\n locale, \n ALL_LOCALE_LABELS[locale as SupportedLocale] || locale\n ])\n );\n}\n\n// Common application configuration creation function\nexport function createCommonAppConfig(options?: {\n // Optional: manually specify supported languages, otherwise read from environment variables\n locales?: string[];\n defaultLocale?: string;\n}) {\n // Priority: manual configuration > environment variables > default values\n const locales = options?.locales ?? \n process.env.NEXT_PUBLIC_I18N_LOCALES?.split(',').map(s => s.trim()) ?? \n ['en', 'zh'];\n \n const defaultLocale = options?.defaultLocale ?? \n process.env.NEXT_PUBLIC_I18N_DEFAULT_LOCALE ?? \n 'en';\n \n const storagePrefix = process.env.NEXT_PUBLIC_I18N_STORAGE_PREFIX || 'WINDRUN-HUAIIN';\n\n const config = {\n // Basic configuration\n baseUrl: process.env.NEXT_PUBLIC_BASE_URL || '',\n githubBaseUrl: process.env.NEXT_PUBLIC_GITHUB_BASE_URL || '',\n github: process.env.NEXT_PUBLIC_GITHUB || '',\n githubInfoToken: process.env.NEXT_PUBLIC_FUMA_GITHUB_TOKEN || '',\n\n // Internationalization configuration\n i18n: {\n locales: locales as readonly string[],\n defaultLocale,\n localeLabels: getLocaleLabels(locales),\n detector: {\n storageKey: process.env.NEXT_PUBLIC_I18N_STORAGE_KEY || 'language-preference-status',\n autoCloseTimeout: parseInt(process.env.NEXT_PUBLIC_I18N_AUTO_CLOSE_TIMEOUT || '10000'),\n expirationDays: parseInt(process.env.NEXT_PUBLIC_I18N_EXPIRATION_DAYS || '30'),\n storagePrefix\n },\n messageRoot: process.env.NEXT_PUBLIC_I18N_MESSAGE_ROOT || 'messages',\n },\n\n // Style configuration\n style: {\n icon: {\n uniformColor: process.env.NEXT_PUBLIC_STYLE_ICON_COLOR || \"text-purple-500\"\n },\n showBanner: process.env.NEXT_PUBLIC_STYLE_SHOW_BANNER === 'true',\n clerkAuthInModal: process.env.NEXT_PUBLIC_STYLE_CLERK_AUTH_IN_MODAL === 'true',\n clerkPageBanner: process.env.NEXT_PUBLIC_STYLE_CLERK_PAGE_BANNER === 'true',\n watermark: {\n enabled: process.env.NEXT_PUBLIC_STYLE_WATERMARK_ENABLED === 'true',\n text: process.env.NEXT_PUBLIC_STYLE_WATERMARK_TEXT || \"巽川·怀因\"\n },\n cdnBaseUrl: process.env.NEXT_PUBLIC_STYLE_CDN_BASE_URL || \"https://raw.githubusercontent.com/caofanCPU/wind-run-1/main/public\",\n placeHolder: {\n image: process.env.NEXT_PUBLIC_STYLE_PLACEHOLDER_IMAGE || \"/default.webp\"\n }\n },\n\n // Clerk configuration\n clerk: {\n signInUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_IN_URL || \"/sign-in\",\n fallbackSignInUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL || \"/\",\n signUpUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_UP_URL || \"/sign-up\", \n fallbackSignUpUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL || \"/\",\n waitlistUrl: process.env.NEXT_PUBLIC_CLERK_WAITLIST_URL || \"/waitlist\",\n debug: process.env.CLERK_DEBUG === 'true',\n },\n\n // MDX source file directory configuration\n mdxSourceDir: {\n docs: process.env.NEXT_PUBLIC_MDX_DOCS_DIR || \"src/mdx/docs\",\n blog: process.env.NEXT_PUBLIC_MDX_BLOG_DIR || \"src/mdx/blog\", \n legal: process.env.NEXT_PUBLIC_MDX_LEGAL_DIR || \"src/mdx/legal\"\n },\n };\n\n // Convenient constants - avoid deep nested access\n const shortcuts = {\n iconColor: config.style.icon.uniformColor,\n watermark: config.style.watermark,\n showBanner: config.style.showBanner,\n clerkPageBanner: config.style.clerkPageBanner,\n clerkAuthInModal: config.style.clerkAuthInModal,\n placeHolderImage: config.style.placeHolder.image,\n clerk: config.clerk,\n };\n\n return {\n ...config,\n shortcuts\n };\n}\n\n// Create internationalization helper functions\nexport function createI18nHelpers(i18nConfig: ReturnType<typeof createCommonAppConfig>['i18n']) {\n function isSupportedLocale(locale: string): locale is typeof i18nConfig.locales[number] {\n return (i18nConfig.locales as readonly string[]).includes(locale);\n }\n\n function getValidLocale(locale: string): typeof i18nConfig.locales[number] {\n return isSupportedLocale(locale) ? locale : i18nConfig.defaultLocale;\n }\n\n const generatedLocales = i18nConfig.locales.map((loc) => ({\n name: i18nConfig.localeLabels[loc as keyof typeof i18nConfig.localeLabels] || loc,\n locale: loc,\n }));\n\n return {\n isSupportedLocale,\n getValidLocale,\n generatedLocales\n };\n}\n\n// Convenient configuration presets\nexport const LOCALE_PRESETS = {\n // Only support English\n EN_ONLY: { locales: ['en'] as string[], defaultLocale: 'en' as string },\n \n // English and Chinese\n EN_ZH: { locales: ['en', 'zh'] as string[], defaultLocale: 'en' as string },\n \n // Main Asian languages\n ASIA: { locales: ['en', 'zh', 'ja', 'ko'] as string[], defaultLocale: 'en' as string },\n \n // Main European languages\n EUROPE: { locales: ['en', 'fr', 'de', 'es', 'it'] as string[], defaultLocale: 'en' as string },\n \n // Globalization\n GLOBAL: { locales: ['en', 'zh', 'ja', 'ko', 'fr', 'de', 'es', 'it', 'pt', 'ru'] as string[], defaultLocale: 'en' as string },\n \n // No internationalization (only default language)\n NONE: { locales: [] as string[], defaultLocale: 'en' as string }\n}; "],"mappings":"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","names":[]}
@@ -0,0 +1,5 @@
1
+ export { cn, formatTimestamp } from './utils.mjs';
2
+ export { AlbumIcon, AlignHorizontalJustifyEnd, ArrowLeft, ArrowRight, ArrowUp, Binary, Blocks, BookX, BringToFront, Bug, Building2, Car, Check, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Circle, CircleAlert, CircleSmall, ComponentIcon, Cpu, DatabaseZap, Dot, Download, ExternalLink, Eye, Facebook, FileLock2, Fingerprint, Gift, GitPullRequestArrow, Globe, GlobeLock, GripVertical, HandHeart, Handshake, Highlighter, HousePlus, ImageDown, ImageOff, ImageUp, Info, Keyboard, LandPlot, Layout, LayoutTemplate, LibraryIcon, Link, Loader2, LogIn, LogOut, MoreHorizontal, MousePointerClick, Palette, PanelLeft, PanelsTopLeft, Pencil, Pi, ReceiptText, Regex, Replace, Rss, Scale, Search, Server, Share, ShieldUser, Sparkles, SplinePointer, SquareDashedBottomCode, SquareTerminal, Star, Tablets, Terminal, Twitter, X, Zap } from 'lucide-react';
3
+ export { getLLMText } from './llm-utils.mjs';
4
+ export { LOCALE_PRESETS, SupportedLocale, createCommonAppConfig, createI18nHelpers } from './common-app-config.mjs';
5
+ import 'clsx';
@@ -0,0 +1,5 @@
1
+ export { cn, formatTimestamp } from './utils.js';
2
+ export { AlbumIcon, AlignHorizontalJustifyEnd, ArrowLeft, ArrowRight, ArrowUp, Binary, Blocks, BookX, BringToFront, Bug, Building2, Car, Check, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Circle, CircleAlert, CircleSmall, ComponentIcon, Cpu, DatabaseZap, Dot, Download, ExternalLink, Eye, Facebook, FileLock2, Fingerprint, Gift, GitPullRequestArrow, Globe, GlobeLock, GripVertical, HandHeart, Handshake, Highlighter, HousePlus, ImageDown, ImageOff, ImageUp, Info, Keyboard, LandPlot, Layout, LayoutTemplate, LibraryIcon, Link, Loader2, LogIn, LogOut, MoreHorizontal, MousePointerClick, Palette, PanelLeft, PanelsTopLeft, Pencil, Pi, ReceiptText, Regex, Replace, Rss, Scale, Search, Server, Share, ShieldUser, Sparkles, SplinePointer, SquareDashedBottomCode, SquareTerminal, Star, Tablets, Terminal, Twitter, X, Zap } from 'lucide-react';
3
+ export { getLLMText } from './llm-utils.js';
4
+ export { LOCALE_PRESETS, SupportedLocale, createCommonAppConfig, createI18nHelpers } from './common-app-config.js';
5
+ import 'clsx';
package/dist/index.js ADDED
@@ -0,0 +1,445 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __defProps = Object.defineProperties;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
7
+ var __getOwnPropNames = Object.getOwnPropertyNames;
8
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
+ var __getProtoOf = Object.getPrototypeOf;
10
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
11
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
12
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
13
+ var __spreadValues = (a, b) => {
14
+ for (var prop in b || (b = {}))
15
+ if (__hasOwnProp.call(b, prop))
16
+ __defNormalProp(a, prop, b[prop]);
17
+ if (__getOwnPropSymbols)
18
+ for (var prop of __getOwnPropSymbols(b)) {
19
+ if (__propIsEnum.call(b, prop))
20
+ __defNormalProp(a, prop, b[prop]);
21
+ }
22
+ return a;
23
+ };
24
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
25
+ var __export = (target, all) => {
26
+ for (var name in all)
27
+ __defProp(target, name, { get: all[name], enumerable: true });
28
+ };
29
+ var __copyProps = (to, from, except, desc) => {
30
+ if (from && typeof from === "object" || typeof from === "function") {
31
+ for (let key of __getOwnPropNames(from))
32
+ if (!__hasOwnProp.call(to, key) && key !== except)
33
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
34
+ }
35
+ return to;
36
+ };
37
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
38
+ // If the importer is in node compatibility mode or this is not an ESM
39
+ // file that has been converted to a CommonJS file using a Babel-
40
+ // compatible transform (i.e. "__esModule" has not been set), then set
41
+ // "default" to the CommonJS "module.exports" for node compatibility.
42
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
43
+ mod
44
+ ));
45
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
46
+ var __async = (__this, __arguments, generator) => {
47
+ return new Promise((resolve, reject) => {
48
+ var fulfilled = (value) => {
49
+ try {
50
+ step(generator.next(value));
51
+ } catch (e) {
52
+ reject(e);
53
+ }
54
+ };
55
+ var rejected = (value) => {
56
+ try {
57
+ step(generator.throw(value));
58
+ } catch (e) {
59
+ reject(e);
60
+ }
61
+ };
62
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
63
+ step((generator = generator.apply(__this, __arguments)).next());
64
+ });
65
+ };
66
+
67
+ // src/index.ts
68
+ var src_exports = {};
69
+ __export(src_exports, {
70
+ AlbumIcon: () => import_lucide_react.AlbumIcon,
71
+ AlignHorizontalJustifyEnd: () => import_lucide_react.AlignHorizontalJustifyEnd,
72
+ ArrowLeft: () => import_lucide_react.ArrowLeft,
73
+ ArrowRight: () => import_lucide_react.ArrowRight,
74
+ ArrowUp: () => import_lucide_react.ArrowUp,
75
+ Binary: () => import_lucide_react.Binary,
76
+ Blocks: () => import_lucide_react.Blocks,
77
+ BookX: () => import_lucide_react.BookX,
78
+ BringToFront: () => import_lucide_react.BringToFront,
79
+ Bug: () => import_lucide_react.Bug,
80
+ Building2: () => import_lucide_react.Building2,
81
+ Car: () => import_lucide_react.Car,
82
+ Check: () => import_lucide_react.Check,
83
+ ChevronDown: () => import_lucide_react.ChevronDown,
84
+ ChevronLeft: () => import_lucide_react.ChevronLeft,
85
+ ChevronRight: () => import_lucide_react.ChevronRight,
86
+ ChevronUp: () => import_lucide_react.ChevronUp,
87
+ Circle: () => import_lucide_react.Circle,
88
+ CircleAlert: () => import_lucide_react.CircleAlert,
89
+ CircleSmall: () => import_lucide_react.CircleSmall,
90
+ ComponentIcon: () => import_lucide_react.ComponentIcon,
91
+ Cpu: () => import_lucide_react.Cpu,
92
+ DatabaseZap: () => import_lucide_react.DatabaseZap,
93
+ Dot: () => import_lucide_react.Dot,
94
+ Download: () => import_lucide_react.Download,
95
+ ExternalLink: () => import_lucide_react.ExternalLink,
96
+ Eye: () => import_lucide_react.Eye,
97
+ Facebook: () => import_lucide_react.Facebook,
98
+ FileLock2: () => import_lucide_react.FileLock2,
99
+ Fingerprint: () => import_lucide_react.Fingerprint,
100
+ Gift: () => import_lucide_react.Gift,
101
+ GitPullRequestArrow: () => import_lucide_react.GitPullRequestArrow,
102
+ Globe: () => import_lucide_react.Globe,
103
+ GlobeLock: () => import_lucide_react.GlobeLock,
104
+ GripVertical: () => import_lucide_react.GripVertical,
105
+ HandHeart: () => import_lucide_react.HandHeart,
106
+ Handshake: () => import_lucide_react.Handshake,
107
+ Highlighter: () => import_lucide_react.Highlighter,
108
+ HousePlus: () => import_lucide_react.HousePlus,
109
+ ImageDown: () => import_lucide_react.ImageDown,
110
+ ImageOff: () => import_lucide_react.ImageOff,
111
+ ImageUp: () => import_lucide_react.ImageUp,
112
+ Info: () => import_lucide_react.Info,
113
+ Keyboard: () => import_lucide_react.Keyboard,
114
+ LOCALE_PRESETS: () => LOCALE_PRESETS,
115
+ LandPlot: () => import_lucide_react.LandPlot,
116
+ Layout: () => import_lucide_react.Layout,
117
+ LayoutTemplate: () => import_lucide_react.LayoutTemplate,
118
+ LibraryIcon: () => import_lucide_react.LibraryIcon,
119
+ Link: () => import_lucide_react.Link,
120
+ Loader2: () => import_lucide_react.Loader2,
121
+ LogIn: () => import_lucide_react.LogIn,
122
+ LogOut: () => import_lucide_react.LogOut,
123
+ MoreHorizontal: () => import_lucide_react.MoreHorizontal,
124
+ MousePointerClick: () => import_lucide_react.MousePointerClick,
125
+ Palette: () => import_lucide_react.Palette,
126
+ PanelLeft: () => import_lucide_react.PanelLeft,
127
+ PanelsTopLeft: () => import_lucide_react.PanelsTopLeft,
128
+ Pencil: () => import_lucide_react.Pencil,
129
+ Pi: () => import_lucide_react.Pi,
130
+ ReceiptText: () => import_lucide_react.ReceiptText,
131
+ Regex: () => import_lucide_react.Regex,
132
+ Replace: () => import_lucide_react.Replace,
133
+ Rss: () => import_lucide_react.Rss,
134
+ Scale: () => import_lucide_react.Scale,
135
+ Search: () => import_lucide_react.Search,
136
+ Server: () => import_lucide_react.Server,
137
+ Share: () => import_lucide_react.Share,
138
+ ShieldUser: () => import_lucide_react.ShieldUser,
139
+ Sparkles: () => import_lucide_react.Sparkles,
140
+ SplinePointer: () => import_lucide_react.SplinePointer,
141
+ SquareDashedBottomCode: () => import_lucide_react.SquareDashedBottomCode,
142
+ SquareTerminal: () => import_lucide_react.SquareTerminal,
143
+ Star: () => import_lucide_react.Star,
144
+ Tablets: () => import_lucide_react.Tablets,
145
+ Terminal: () => import_lucide_react.Terminal,
146
+ Twitter: () => import_lucide_react.Twitter,
147
+ X: () => import_lucide_react.X,
148
+ Zap: () => import_lucide_react.Zap,
149
+ cn: () => cn,
150
+ createCommonAppConfig: () => createCommonAppConfig,
151
+ createI18nHelpers: () => createI18nHelpers,
152
+ formatTimestamp: () => formatTimestamp,
153
+ getLLMText: () => getLLMText
154
+ });
155
+ module.exports = __toCommonJS(src_exports);
156
+
157
+ // src/utils.ts
158
+ var import_clsx = require("clsx");
159
+ var import_tailwind_merge = require("tailwind-merge");
160
+ var import_date_fns = require("date-fns");
161
+ function cn(...inputs) {
162
+ return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
163
+ }
164
+ function formatTimestamp(timestamp, formatter) {
165
+ const fail = "";
166
+ if (!timestamp) {
167
+ return fail;
168
+ }
169
+ const timestampMs = parseInt(timestamp, 10);
170
+ if (isNaN(timestampMs)) {
171
+ return fail;
172
+ }
173
+ const date = new Date(timestampMs);
174
+ if (!(0, import_date_fns.isValid)(date)) {
175
+ return fail;
176
+ }
177
+ try {
178
+ return (0, import_date_fns.format)(date, formatter);
179
+ } catch (error) {
180
+ console.error("Error formatting date:", error);
181
+ return fail;
182
+ }
183
+ }
184
+
185
+ // src/limited-lucide-icons.ts
186
+ var import_lucide_react = require("lucide-react");
187
+
188
+ // src/llm-utils.ts
189
+ var import_remark = require("remark");
190
+ var import_remark_gfm = __toESM(require("remark-gfm"));
191
+ var import_remark_mdx = __toESM(require("remark-mdx"));
192
+ var import_remark_frontmatter = __toESM(require("remark-frontmatter"));
193
+ var import_unist_util_visit = require("unist-util-visit");
194
+ function remarkRemoveFrontmatter() {
195
+ return (tree) => {
196
+ (0, import_unist_util_visit.visit)(tree, "yaml", (_node, index, parent) => {
197
+ if (parent && typeof index === "number") {
198
+ parent.children.splice(index, 1);
199
+ }
200
+ });
201
+ };
202
+ }
203
+ var processor = (0, import_remark.remark)().use(import_remark_frontmatter.default, ["yaml"]).use(remarkRemoveFrontmatter).use(import_remark_mdx.default).use(import_remark_gfm.default);
204
+ function getLLMText(mdxContent, title, description) {
205
+ return __async(this, null, function* () {
206
+ if (typeof mdxContent !== "string") {
207
+ console.error("getLLMText: mdxContent received was not a string. Type:", typeof mdxContent);
208
+ return `# Error
209
+
210
+ Invalid content received by text processor.`;
211
+ }
212
+ try {
213
+ const processed = yield processor.process(mdxContent);
214
+ const contentWithoutFrontmatter = processed.value;
215
+ const markdownParts = [
216
+ title ? `# ${title}` : null,
217
+ description,
218
+ contentWithoutFrontmatter.trim()
219
+ ];
220
+ return markdownParts.filter((part) => part != null).join("\n\n");
221
+ } catch (processingError) {
222
+ console.error("Error during remark processing in getLLMText:", processingError);
223
+ return `# Error
224
+
225
+ Error processing MDX content.`;
226
+ }
227
+ });
228
+ }
229
+
230
+ // src/common-app-config.ts
231
+ var ALL_LOCALE_LABELS = {
232
+ en: "English",
233
+ zh: "\u7B80\u4F53\u4E2D\u6587",
234
+ ja: "\u65E5\u672C\u8A9E",
235
+ ko: "\uD55C\uAD6D\uC5B4",
236
+ fr: "Fran\xE7ais",
237
+ de: "Deutsch",
238
+ es: "Espa\xF1ol",
239
+ it: "Italiano",
240
+ pt: "Portugu\xEAs",
241
+ tr: "T\xFCrk\xE7e",
242
+ pl: "Polski",
243
+ ru: "\u0420\u0443\u0441\u0441\u043A\u0438\u0439",
244
+ ar: "\u0627\u0644\u0639\u0631\u0628\u064A\u0629",
245
+ hi: "\u0939\u093F\u0928\u094D\u0926\u0940",
246
+ th: "\u0E44\u0E17\u0E22",
247
+ vi: "Ti\u1EBFng Vi\u1EC7t"
248
+ };
249
+ function getLocaleLabels(locales) {
250
+ return Object.fromEntries(
251
+ locales.map((locale) => [
252
+ locale,
253
+ ALL_LOCALE_LABELS[locale] || locale
254
+ ])
255
+ );
256
+ }
257
+ function createCommonAppConfig(options) {
258
+ var _a, _b, _c, _d, _e;
259
+ const locales = (_c = (_b = options == null ? void 0 : options.locales) != null ? _b : (_a = process.env.NEXT_PUBLIC_I18N_LOCALES) == null ? void 0 : _a.split(",").map((s) => s.trim())) != null ? _c : ["en", "zh"];
260
+ const defaultLocale = (_e = (_d = options == null ? void 0 : options.defaultLocale) != null ? _d : process.env.NEXT_PUBLIC_I18N_DEFAULT_LOCALE) != null ? _e : "en";
261
+ const storagePrefix = process.env.NEXT_PUBLIC_I18N_STORAGE_PREFIX || "WINDRUN-HUAIIN";
262
+ const config = {
263
+ // Basic configuration
264
+ baseUrl: process.env.NEXT_PUBLIC_BASE_URL || "",
265
+ githubBaseUrl: process.env.NEXT_PUBLIC_GITHUB_BASE_URL || "",
266
+ github: process.env.NEXT_PUBLIC_GITHUB || "",
267
+ githubInfoToken: process.env.NEXT_PUBLIC_FUMA_GITHUB_TOKEN || "",
268
+ // Internationalization configuration
269
+ i18n: {
270
+ locales,
271
+ defaultLocale,
272
+ localeLabels: getLocaleLabels(locales),
273
+ detector: {
274
+ storageKey: process.env.NEXT_PUBLIC_I18N_STORAGE_KEY || "language-preference-status",
275
+ autoCloseTimeout: parseInt(process.env.NEXT_PUBLIC_I18N_AUTO_CLOSE_TIMEOUT || "10000"),
276
+ expirationDays: parseInt(process.env.NEXT_PUBLIC_I18N_EXPIRATION_DAYS || "30"),
277
+ storagePrefix
278
+ },
279
+ messageRoot: process.env.NEXT_PUBLIC_I18N_MESSAGE_ROOT || "messages"
280
+ },
281
+ // Style configuration
282
+ style: {
283
+ icon: {
284
+ uniformColor: process.env.NEXT_PUBLIC_STYLE_ICON_COLOR || "text-purple-500"
285
+ },
286
+ showBanner: process.env.NEXT_PUBLIC_STYLE_SHOW_BANNER === "true",
287
+ clerkAuthInModal: process.env.NEXT_PUBLIC_STYLE_CLERK_AUTH_IN_MODAL === "true",
288
+ clerkPageBanner: process.env.NEXT_PUBLIC_STYLE_CLERK_PAGE_BANNER === "true",
289
+ watermark: {
290
+ enabled: process.env.NEXT_PUBLIC_STYLE_WATERMARK_ENABLED === "true",
291
+ text: process.env.NEXT_PUBLIC_STYLE_WATERMARK_TEXT || "\u5DFD\u5DDD\xB7\u6000\u56E0"
292
+ },
293
+ cdnBaseUrl: process.env.NEXT_PUBLIC_STYLE_CDN_BASE_URL || "https://raw.githubusercontent.com/caofanCPU/wind-run-1/main/public",
294
+ placeHolder: {
295
+ image: process.env.NEXT_PUBLIC_STYLE_PLACEHOLDER_IMAGE || "/default.webp"
296
+ }
297
+ },
298
+ // Clerk configuration
299
+ clerk: {
300
+ signInUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_IN_URL || "/sign-in",
301
+ fallbackSignInUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL || "/",
302
+ signUpUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_UP_URL || "/sign-up",
303
+ fallbackSignUpUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL || "/",
304
+ waitlistUrl: process.env.NEXT_PUBLIC_CLERK_WAITLIST_URL || "/waitlist",
305
+ debug: process.env.CLERK_DEBUG === "true"
306
+ },
307
+ // MDX source file directory configuration
308
+ mdxSourceDir: {
309
+ docs: process.env.NEXT_PUBLIC_MDX_DOCS_DIR || "src/mdx/docs",
310
+ blog: process.env.NEXT_PUBLIC_MDX_BLOG_DIR || "src/mdx/blog",
311
+ legal: process.env.NEXT_PUBLIC_MDX_LEGAL_DIR || "src/mdx/legal"
312
+ }
313
+ };
314
+ const shortcuts = {
315
+ iconColor: config.style.icon.uniformColor,
316
+ watermark: config.style.watermark,
317
+ showBanner: config.style.showBanner,
318
+ clerkPageBanner: config.style.clerkPageBanner,
319
+ clerkAuthInModal: config.style.clerkAuthInModal,
320
+ placeHolderImage: config.style.placeHolder.image,
321
+ clerk: config.clerk
322
+ };
323
+ return __spreadProps(__spreadValues({}, config), {
324
+ shortcuts
325
+ });
326
+ }
327
+ function createI18nHelpers(i18nConfig) {
328
+ function isSupportedLocale(locale) {
329
+ return i18nConfig.locales.includes(locale);
330
+ }
331
+ function getValidLocale(locale) {
332
+ return isSupportedLocale(locale) ? locale : i18nConfig.defaultLocale;
333
+ }
334
+ const generatedLocales = i18nConfig.locales.map((loc) => ({
335
+ name: i18nConfig.localeLabels[loc] || loc,
336
+ locale: loc
337
+ }));
338
+ return {
339
+ isSupportedLocale,
340
+ getValidLocale,
341
+ generatedLocales
342
+ };
343
+ }
344
+ var LOCALE_PRESETS = {
345
+ // Only support English
346
+ EN_ONLY: { locales: ["en"], defaultLocale: "en" },
347
+ // English and Chinese
348
+ EN_ZH: { locales: ["en", "zh"], defaultLocale: "en" },
349
+ // Main Asian languages
350
+ ASIA: { locales: ["en", "zh", "ja", "ko"], defaultLocale: "en" },
351
+ // Main European languages
352
+ EUROPE: { locales: ["en", "fr", "de", "es", "it"], defaultLocale: "en" },
353
+ // Globalization
354
+ GLOBAL: { locales: ["en", "zh", "ja", "ko", "fr", "de", "es", "it", "pt", "ru"], defaultLocale: "en" },
355
+ // No internationalization (only default language)
356
+ NONE: { locales: [], defaultLocale: "en" }
357
+ };
358
+ // Annotate the CommonJS export names for ESM import in node:
359
+ 0 && (module.exports = {
360
+ AlbumIcon,
361
+ AlignHorizontalJustifyEnd,
362
+ ArrowLeft,
363
+ ArrowRight,
364
+ ArrowUp,
365
+ Binary,
366
+ Blocks,
367
+ BookX,
368
+ BringToFront,
369
+ Bug,
370
+ Building2,
371
+ Car,
372
+ Check,
373
+ ChevronDown,
374
+ ChevronLeft,
375
+ ChevronRight,
376
+ ChevronUp,
377
+ Circle,
378
+ CircleAlert,
379
+ CircleSmall,
380
+ ComponentIcon,
381
+ Cpu,
382
+ DatabaseZap,
383
+ Dot,
384
+ Download,
385
+ ExternalLink,
386
+ Eye,
387
+ Facebook,
388
+ FileLock2,
389
+ Fingerprint,
390
+ Gift,
391
+ GitPullRequestArrow,
392
+ Globe,
393
+ GlobeLock,
394
+ GripVertical,
395
+ HandHeart,
396
+ Handshake,
397
+ Highlighter,
398
+ HousePlus,
399
+ ImageDown,
400
+ ImageOff,
401
+ ImageUp,
402
+ Info,
403
+ Keyboard,
404
+ LOCALE_PRESETS,
405
+ LandPlot,
406
+ Layout,
407
+ LayoutTemplate,
408
+ LibraryIcon,
409
+ Link,
410
+ Loader2,
411
+ LogIn,
412
+ LogOut,
413
+ MoreHorizontal,
414
+ MousePointerClick,
415
+ Palette,
416
+ PanelLeft,
417
+ PanelsTopLeft,
418
+ Pencil,
419
+ Pi,
420
+ ReceiptText,
421
+ Regex,
422
+ Replace,
423
+ Rss,
424
+ Scale,
425
+ Search,
426
+ Server,
427
+ Share,
428
+ ShieldUser,
429
+ Sparkles,
430
+ SplinePointer,
431
+ SquareDashedBottomCode,
432
+ SquareTerminal,
433
+ Star,
434
+ Tablets,
435
+ Terminal,
436
+ Twitter,
437
+ X,
438
+ Zap,
439
+ cn,
440
+ createCommonAppConfig,
441
+ createI18nHelpers,
442
+ formatTimestamp,
443
+ getLLMText
444
+ });
445
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/utils.ts","../src/limited-lucide-icons.ts","../src/llm-utils.ts","../src/common-app-config.ts"],"sourcesContent":["// export the utility functions\nexport * from './utils';\n\n// export the icons\nexport * from './limited-lucide-icons';\n\n// export the LLM related functions\nexport * from './llm-utils'; \n\n// export the common app config\nexport * from './common-app-config';","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\nimport { format, isValid } from 'date-fns';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n\nexport function formatTimestamp(timestamp: string, formatter: string) {\n const fail = \"\";\n if (!timestamp) {\n return fail;\n }\n\n // Assume gitTimestamp is a millisecond timestamp string\n const timestampMs = parseInt(timestamp, 10);\n if (isNaN(timestampMs)) {\n return fail;\n }\n\n const date = new Date(timestampMs); // or if it is determined to be seconds, use fromUnixTime(timestampSeconds)\n\n // Check if the date is valid\n if (!isValid(date)) {\n return fail;\n }\n\n // Format the date\n try {\n // 'yyyy-MM-dd HH:mm:ss' is the date-fns formatting pattern\n return format(date, formatter);\n } catch (error) {\n // format may also throw an error due to an invalid date (although isValid should have already caught it)\n console.error(\"Error formatting date:\", error);\n return fail;\n }\n} ","/*\n * This file re-exports selected icons from 'lucide-react'.\n * This is the single place to manage which lucide-react icons are available globally.\n * Editing the list of exports here will automatically update their availability\n * in globalLucideIcons.\n */\nexport {\n AlbumIcon,\n AlignHorizontalJustifyEnd,\n ArrowLeft,\n ArrowRight,\n ArrowUp,\n Binary,\n Blocks,\n BookX,\n BringToFront,\n Building2,\n Bug,\n Car,\n Circle,\n CircleAlert,\n CircleSmall,\n Check,\n ChevronDown,\n ChevronLeft,\n ChevronRight,\n ChevronUp,\n Cpu,\n ComponentIcon,\n DatabaseZap,\n Dot,\n Download,\n Eye,\n ExternalLink,\n Facebook,\n FileLock2,\n Fingerprint,\n Gift,\n GitPullRequestArrow,\n Globe,\n GlobeLock,\n GripVertical,\n HandHeart,\n Handshake,\n Highlighter,\n HousePlus,\n Info,\n ImageDown,\n ImageOff,\n ImageUp,\n Keyboard,\n LandPlot,\n Layout,\n LayoutTemplate,\n LibraryIcon,\n Link,\n Loader2,\n LogIn,\n LogOut,\n MoreHorizontal,\n MousePointerClick,\n PanelLeft,\n PanelsTopLeft,\n Pencil,\n Pi,\n Palette,\n ReceiptText,\n Regex,\n Replace,\n Rss,\n Scale,\n Search,\n Share,\n ShieldUser,\n SquareDashedBottomCode,\n SquareTerminal,\n Server,\n SplinePointer,\n Sparkles,\n Star,\n Tablets,\n Terminal,\n Twitter,\n X,\n Zap\n} from 'lucide-react'; ","import { remark } from 'remark';\nimport remarkGfm from 'remark-gfm';\nimport remarkMdx from 'remark-mdx';\nimport remarkFrontmatter from 'remark-frontmatter';\nimport { visit } from 'unist-util-visit';\n\nfunction remarkRemoveFrontmatter() {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (tree: any) => {\n visit(tree, 'yaml', (_node, index, parent) => {\n if (parent && typeof index === 'number') {\n parent.children.splice(index, 1);\n }\n });\n };\n}\n\n// remark(), parse the MDX file into MDAST\n// remarkPlugins(), parse the MDAST into HAST\n// rehypePlugins(), render the HAST into React components, i.e. HTML code\nconst processor = remark()\n // parse the md file header\n .use(remarkFrontmatter, ['yaml'])\n // remove the md file header\n .use(remarkRemoveFrontmatter)\n .use(remarkMdx)\n .use(remarkGfm);\n\nexport async function getLLMText(mdxContent: string, title?: string, description?: string) {\n if (typeof mdxContent !== 'string') {\n console.error('getLLMText: mdxContent received was not a string. Type:', typeof mdxContent);\n return `# Error\\n\\nInvalid content received by text processor.`;\n }\n\n try {\n const processed = await processor.process(mdxContent);\n const contentWithoutFrontmatter = processed.value as string;\n\n const markdownParts = [\n title ? `# ${title}` : null,\n description,\n contentWithoutFrontmatter.trim()\n ];\n\n return markdownParts.filter(part => part != null).join('\\n\\n');\n } catch (processingError) {\n console.error('Error during remark processing in getLLMText:', processingError);\n return `# Error\\n\\nError processing MDX content.`;\n }\n} ","// Supported languages and their labels\nconst ALL_LOCALE_LABELS = {\n en: \"English\",\n zh: \"简体中文\",\n ja: \"日本語\", \n ko: \"한국어\",\n fr: \"Français\",\n de: \"Deutsch\",\n es: \"Español\",\n it: \"Italiano\",\n pt: \"Português\",\n tr: \"Türkçe\",\n pl: \"Polski\",\n ru: \"Русский\",\n ar: \"العربية\",\n hi: \"हिन्दी\",\n th: \"ไทย\",\n vi: \"Tiếng Việt\",\n} as const;\n\nexport type SupportedLocale = keyof typeof ALL_LOCALE_LABELS;\n\n// Helper function to get language configuration from environment variables\nfunction getLocaleLabels(locales: string[]) {\n return Object.fromEntries(\n locales.map(locale => [\n locale, \n ALL_LOCALE_LABELS[locale as SupportedLocale] || locale\n ])\n );\n}\n\n// Common application configuration creation function\nexport function createCommonAppConfig(options?: {\n // Optional: manually specify supported languages, otherwise read from environment variables\n locales?: string[];\n defaultLocale?: string;\n}) {\n // Priority: manual configuration > environment variables > default values\n const locales = options?.locales ?? \n process.env.NEXT_PUBLIC_I18N_LOCALES?.split(',').map(s => s.trim()) ?? \n ['en', 'zh'];\n \n const defaultLocale = options?.defaultLocale ?? \n process.env.NEXT_PUBLIC_I18N_DEFAULT_LOCALE ?? \n 'en';\n \n const storagePrefix = process.env.NEXT_PUBLIC_I18N_STORAGE_PREFIX || 'WINDRUN-HUAIIN';\n\n const config = {\n // Basic configuration\n baseUrl: process.env.NEXT_PUBLIC_BASE_URL || '',\n githubBaseUrl: process.env.NEXT_PUBLIC_GITHUB_BASE_URL || '',\n github: process.env.NEXT_PUBLIC_GITHUB || '',\n githubInfoToken: process.env.NEXT_PUBLIC_FUMA_GITHUB_TOKEN || '',\n\n // Internationalization configuration\n i18n: {\n locales: locales as readonly string[],\n defaultLocale,\n localeLabels: getLocaleLabels(locales),\n detector: {\n storageKey: process.env.NEXT_PUBLIC_I18N_STORAGE_KEY || 'language-preference-status',\n autoCloseTimeout: parseInt(process.env.NEXT_PUBLIC_I18N_AUTO_CLOSE_TIMEOUT || '10000'),\n expirationDays: parseInt(process.env.NEXT_PUBLIC_I18N_EXPIRATION_DAYS || '30'),\n storagePrefix\n },\n messageRoot: process.env.NEXT_PUBLIC_I18N_MESSAGE_ROOT || 'messages',\n },\n\n // Style configuration\n style: {\n icon: {\n uniformColor: process.env.NEXT_PUBLIC_STYLE_ICON_COLOR || \"text-purple-500\"\n },\n showBanner: process.env.NEXT_PUBLIC_STYLE_SHOW_BANNER === 'true',\n clerkAuthInModal: process.env.NEXT_PUBLIC_STYLE_CLERK_AUTH_IN_MODAL === 'true',\n clerkPageBanner: process.env.NEXT_PUBLIC_STYLE_CLERK_PAGE_BANNER === 'true',\n watermark: {\n enabled: process.env.NEXT_PUBLIC_STYLE_WATERMARK_ENABLED === 'true',\n text: process.env.NEXT_PUBLIC_STYLE_WATERMARK_TEXT || \"巽川·怀因\"\n },\n cdnBaseUrl: process.env.NEXT_PUBLIC_STYLE_CDN_BASE_URL || \"https://raw.githubusercontent.com/caofanCPU/wind-run-1/main/public\",\n placeHolder: {\n image: process.env.NEXT_PUBLIC_STYLE_PLACEHOLDER_IMAGE || \"/default.webp\"\n }\n },\n\n // Clerk configuration\n clerk: {\n signInUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_IN_URL || \"/sign-in\",\n fallbackSignInUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL || \"/\",\n signUpUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_UP_URL || \"/sign-up\", \n fallbackSignUpUrl: process.env.NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL || \"/\",\n waitlistUrl: process.env.NEXT_PUBLIC_CLERK_WAITLIST_URL || \"/waitlist\",\n debug: process.env.CLERK_DEBUG === 'true',\n },\n\n // MDX source file directory configuration\n mdxSourceDir: {\n docs: process.env.NEXT_PUBLIC_MDX_DOCS_DIR || \"src/mdx/docs\",\n blog: process.env.NEXT_PUBLIC_MDX_BLOG_DIR || \"src/mdx/blog\", \n legal: process.env.NEXT_PUBLIC_MDX_LEGAL_DIR || \"src/mdx/legal\"\n },\n };\n\n // Convenient constants - avoid deep nested access\n const shortcuts = {\n iconColor: config.style.icon.uniformColor,\n watermark: config.style.watermark,\n showBanner: config.style.showBanner,\n clerkPageBanner: config.style.clerkPageBanner,\n clerkAuthInModal: config.style.clerkAuthInModal,\n placeHolderImage: config.style.placeHolder.image,\n clerk: config.clerk,\n };\n\n return {\n ...config,\n shortcuts\n };\n}\n\n// Create internationalization helper functions\nexport function createI18nHelpers(i18nConfig: ReturnType<typeof createCommonAppConfig>['i18n']) {\n function isSupportedLocale(locale: string): locale is typeof i18nConfig.locales[number] {\n return (i18nConfig.locales as readonly string[]).includes(locale);\n }\n\n function getValidLocale(locale: string): typeof i18nConfig.locales[number] {\n return isSupportedLocale(locale) ? locale : i18nConfig.defaultLocale;\n }\n\n const generatedLocales = i18nConfig.locales.map((loc) => ({\n name: i18nConfig.localeLabels[loc as keyof typeof i18nConfig.localeLabels] || loc,\n locale: loc,\n }));\n\n return {\n isSupportedLocale,\n getValidLocale,\n generatedLocales\n };\n}\n\n// Convenient configuration presets\nexport const LOCALE_PRESETS = {\n // Only support English\n EN_ONLY: { locales: ['en'] as string[], defaultLocale: 'en' as string },\n \n // English and Chinese\n EN_ZH: { locales: ['en', 'zh'] as string[], defaultLocale: 'en' as string },\n \n // Main Asian languages\n ASIA: { locales: ['en', 'zh', 'ja', 'ko'] as string[], defaultLocale: 'en' as string },\n \n // Main European languages\n EUROPE: { locales: ['en', 'fr', 'de', 'es', 'it'] as string[], defaultLocale: 'en' as string },\n \n // Globalization\n GLOBAL: { locales: ['en', 'zh', 'ja', 'ko', 'fr', 'de', 'es', 'it', 'pt', 'ru'] as string[], defaultLocale: 'en' as string },\n \n // No internationalization (only default language)\n NONE: { locales: [] as string[], defaultLocale: 'en' as string }\n}; "],"mappings":"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","names":["remarkFrontmatter","remarkMdx","remarkGfm"]}