@windrun-huaiin/lib 5.1.2 → 5.3.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common-app-config.ts"],"names":[],"mappings":"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","file":"common-app-config.js","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}; "]}
1
+ {"version":3,"sources":["../src/common-app-config.ts"],"names":[],"mappings":"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","file":"common-app-config.js","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}; "]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/common-app-config.ts"],"names":[],"mappings":"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","file":"common-app-config.mjs","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}; "]}
1
+ {"version":3,"sources":["../src/common-app-config.ts"],"names":[],"mappings":"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","file":"common-app-config.mjs","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}; "]}
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
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';
2
+ export { AlbumIcon, AlignHorizontalJustifyEnd, ArrowLeft, ArrowRight, ArrowUp, Binary, Blocks, BookX, BringToFront, Bug, Building2, Car, Check, CheckCheck, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Circle, CircleAlert, CircleSmall, ComponentIcon, Copy, Cpu, DatabaseZap, Dot, Download, ExternalLink, Eye, Facebook, File, FileDown, FileInput, FileLock2, FileUp, Fingerprint, Folder, FolderOpen, Gift, GitPullRequestArrow, Globe, GlobeLock, Grip, GripVertical, HandHeart, Handshake, Highlighter, HousePlus, ImageDown, ImageOff, ImageUp, Infinity, Info, Keyboard, LandPlot, Layout, LayoutTemplate, LibraryIcon, Link, ListTodo, Loader2, LogIn, LogOut, Mail, MoreHorizontal, MousePointerClick, Palette, PanelLeft, PanelsTopLeft, PawPrint, Pencil, Pi, QrCode, ReceiptText, RefreshCcw, Regex, Replace, Rocket, Rss, Scale, Search, SendHorizontal, Server, Share, Shield, ShieldUser, Sigma, Sparkles, SplinePointer, Sprout, SquareDashedBottomCode, SquareTerminal, Star, Tablets, Terminal, Twitter, Workflow, X, Zap } from 'lucide-react';
3
3
  export { getLLMText } from './llm-utils.mjs';
4
4
  export { LOCALE_PRESETS, SupportedLocale, createCommonAppConfig, createI18nHelpers } from './common-app-config.mjs';
5
5
  import 'clsx';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
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';
2
+ export { AlbumIcon, AlignHorizontalJustifyEnd, ArrowLeft, ArrowRight, ArrowUp, Binary, Blocks, BookX, BringToFront, Bug, Building2, Car, Check, CheckCheck, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Circle, CircleAlert, CircleSmall, ComponentIcon, Copy, Cpu, DatabaseZap, Dot, Download, ExternalLink, Eye, Facebook, File, FileDown, FileInput, FileLock2, FileUp, Fingerprint, Folder, FolderOpen, Gift, GitPullRequestArrow, Globe, GlobeLock, Grip, GripVertical, HandHeart, Handshake, Highlighter, HousePlus, ImageDown, ImageOff, ImageUp, Infinity, Info, Keyboard, LandPlot, Layout, LayoutTemplate, LibraryIcon, Link, ListTodo, Loader2, LogIn, LogOut, Mail, MoreHorizontal, MousePointerClick, Palette, PanelLeft, PanelsTopLeft, PawPrint, Pencil, Pi, QrCode, ReceiptText, RefreshCcw, Regex, Replace, Rocket, Rss, Scale, Search, SendHorizontal, Server, Share, Shield, ShieldUser, Sigma, Sparkles, SplinePointer, Sprout, SquareDashedBottomCode, SquareTerminal, Star, Tablets, Terminal, Twitter, Workflow, X, Zap } from 'lucide-react';
3
3
  export { getLLMText } from './llm-utils.js';
4
4
  export { LOCALE_PRESETS, SupportedLocale, createCommonAppConfig, createI18nHelpers } from './common-app-config.js';
5
5
  import 'clsx';
package/dist/index.js CHANGED
@@ -295,6 +295,10 @@ Object.defineProperty(exports, "Check", {
295
295
  enumerable: true,
296
296
  get: function () { return lucideReact.Check; }
297
297
  });
298
+ Object.defineProperty(exports, "CheckCheck", {
299
+ enumerable: true,
300
+ get: function () { return lucideReact.CheckCheck; }
301
+ });
298
302
  Object.defineProperty(exports, "ChevronDown", {
299
303
  enumerable: true,
300
304
  get: function () { return lucideReact.ChevronDown; }
@@ -327,6 +331,10 @@ Object.defineProperty(exports, "ComponentIcon", {
327
331
  enumerable: true,
328
332
  get: function () { return lucideReact.ComponentIcon; }
329
333
  });
334
+ Object.defineProperty(exports, "Copy", {
335
+ enumerable: true,
336
+ get: function () { return lucideReact.Copy; }
337
+ });
330
338
  Object.defineProperty(exports, "Cpu", {
331
339
  enumerable: true,
332
340
  get: function () { return lucideReact.Cpu; }
@@ -355,14 +363,38 @@ Object.defineProperty(exports, "Facebook", {
355
363
  enumerable: true,
356
364
  get: function () { return lucideReact.Facebook; }
357
365
  });
366
+ Object.defineProperty(exports, "File", {
367
+ enumerable: true,
368
+ get: function () { return lucideReact.File; }
369
+ });
370
+ Object.defineProperty(exports, "FileDown", {
371
+ enumerable: true,
372
+ get: function () { return lucideReact.FileDown; }
373
+ });
374
+ Object.defineProperty(exports, "FileInput", {
375
+ enumerable: true,
376
+ get: function () { return lucideReact.FileInput; }
377
+ });
358
378
  Object.defineProperty(exports, "FileLock2", {
359
379
  enumerable: true,
360
380
  get: function () { return lucideReact.FileLock2; }
361
381
  });
382
+ Object.defineProperty(exports, "FileUp", {
383
+ enumerable: true,
384
+ get: function () { return lucideReact.FileUp; }
385
+ });
362
386
  Object.defineProperty(exports, "Fingerprint", {
363
387
  enumerable: true,
364
388
  get: function () { return lucideReact.Fingerprint; }
365
389
  });
390
+ Object.defineProperty(exports, "Folder", {
391
+ enumerable: true,
392
+ get: function () { return lucideReact.Folder; }
393
+ });
394
+ Object.defineProperty(exports, "FolderOpen", {
395
+ enumerable: true,
396
+ get: function () { return lucideReact.FolderOpen; }
397
+ });
366
398
  Object.defineProperty(exports, "Gift", {
367
399
  enumerable: true,
368
400
  get: function () { return lucideReact.Gift; }
@@ -379,6 +411,10 @@ Object.defineProperty(exports, "GlobeLock", {
379
411
  enumerable: true,
380
412
  get: function () { return lucideReact.GlobeLock; }
381
413
  });
414
+ Object.defineProperty(exports, "Grip", {
415
+ enumerable: true,
416
+ get: function () { return lucideReact.Grip; }
417
+ });
382
418
  Object.defineProperty(exports, "GripVertical", {
383
419
  enumerable: true,
384
420
  get: function () { return lucideReact.GripVertical; }
@@ -411,6 +447,10 @@ Object.defineProperty(exports, "ImageUp", {
411
447
  enumerable: true,
412
448
  get: function () { return lucideReact.ImageUp; }
413
449
  });
450
+ Object.defineProperty(exports, "Infinity", {
451
+ enumerable: true,
452
+ get: function () { return lucideReact.Infinity; }
453
+ });
414
454
  Object.defineProperty(exports, "Info", {
415
455
  enumerable: true,
416
456
  get: function () { return lucideReact.Info; }
@@ -439,6 +479,10 @@ Object.defineProperty(exports, "Link", {
439
479
  enumerable: true,
440
480
  get: function () { return lucideReact.Link; }
441
481
  });
482
+ Object.defineProperty(exports, "ListTodo", {
483
+ enumerable: true,
484
+ get: function () { return lucideReact.ListTodo; }
485
+ });
442
486
  Object.defineProperty(exports, "Loader2", {
443
487
  enumerable: true,
444
488
  get: function () { return lucideReact.Loader2; }
@@ -451,6 +495,10 @@ Object.defineProperty(exports, "LogOut", {
451
495
  enumerable: true,
452
496
  get: function () { return lucideReact.LogOut; }
453
497
  });
498
+ Object.defineProperty(exports, "Mail", {
499
+ enumerable: true,
500
+ get: function () { return lucideReact.Mail; }
501
+ });
454
502
  Object.defineProperty(exports, "MoreHorizontal", {
455
503
  enumerable: true,
456
504
  get: function () { return lucideReact.MoreHorizontal; }
@@ -471,6 +519,10 @@ Object.defineProperty(exports, "PanelsTopLeft", {
471
519
  enumerable: true,
472
520
  get: function () { return lucideReact.PanelsTopLeft; }
473
521
  });
522
+ Object.defineProperty(exports, "PawPrint", {
523
+ enumerable: true,
524
+ get: function () { return lucideReact.PawPrint; }
525
+ });
474
526
  Object.defineProperty(exports, "Pencil", {
475
527
  enumerable: true,
476
528
  get: function () { return lucideReact.Pencil; }
@@ -479,10 +531,18 @@ Object.defineProperty(exports, "Pi", {
479
531
  enumerable: true,
480
532
  get: function () { return lucideReact.Pi; }
481
533
  });
534
+ Object.defineProperty(exports, "QrCode", {
535
+ enumerable: true,
536
+ get: function () { return lucideReact.QrCode; }
537
+ });
482
538
  Object.defineProperty(exports, "ReceiptText", {
483
539
  enumerable: true,
484
540
  get: function () { return lucideReact.ReceiptText; }
485
541
  });
542
+ Object.defineProperty(exports, "RefreshCcw", {
543
+ enumerable: true,
544
+ get: function () { return lucideReact.RefreshCcw; }
545
+ });
486
546
  Object.defineProperty(exports, "Regex", {
487
547
  enumerable: true,
488
548
  get: function () { return lucideReact.Regex; }
@@ -491,6 +551,10 @@ Object.defineProperty(exports, "Replace", {
491
551
  enumerable: true,
492
552
  get: function () { return lucideReact.Replace; }
493
553
  });
554
+ Object.defineProperty(exports, "Rocket", {
555
+ enumerable: true,
556
+ get: function () { return lucideReact.Rocket; }
557
+ });
494
558
  Object.defineProperty(exports, "Rss", {
495
559
  enumerable: true,
496
560
  get: function () { return lucideReact.Rss; }
@@ -503,6 +567,10 @@ Object.defineProperty(exports, "Search", {
503
567
  enumerable: true,
504
568
  get: function () { return lucideReact.Search; }
505
569
  });
570
+ Object.defineProperty(exports, "SendHorizontal", {
571
+ enumerable: true,
572
+ get: function () { return lucideReact.SendHorizontal; }
573
+ });
506
574
  Object.defineProperty(exports, "Server", {
507
575
  enumerable: true,
508
576
  get: function () { return lucideReact.Server; }
@@ -511,10 +579,18 @@ Object.defineProperty(exports, "Share", {
511
579
  enumerable: true,
512
580
  get: function () { return lucideReact.Share; }
513
581
  });
582
+ Object.defineProperty(exports, "Shield", {
583
+ enumerable: true,
584
+ get: function () { return lucideReact.Shield; }
585
+ });
514
586
  Object.defineProperty(exports, "ShieldUser", {
515
587
  enumerable: true,
516
588
  get: function () { return lucideReact.ShieldUser; }
517
589
  });
590
+ Object.defineProperty(exports, "Sigma", {
591
+ enumerable: true,
592
+ get: function () { return lucideReact.Sigma; }
593
+ });
518
594
  Object.defineProperty(exports, "Sparkles", {
519
595
  enumerable: true,
520
596
  get: function () { return lucideReact.Sparkles; }
@@ -523,6 +599,10 @@ Object.defineProperty(exports, "SplinePointer", {
523
599
  enumerable: true,
524
600
  get: function () { return lucideReact.SplinePointer; }
525
601
  });
602
+ Object.defineProperty(exports, "Sprout", {
603
+ enumerable: true,
604
+ get: function () { return lucideReact.Sprout; }
605
+ });
526
606
  Object.defineProperty(exports, "SquareDashedBottomCode", {
527
607
  enumerable: true,
528
608
  get: function () { return lucideReact.SquareDashedBottomCode; }
@@ -547,6 +627,10 @@ Object.defineProperty(exports, "Twitter", {
547
627
  enumerable: true,
548
628
  get: function () { return lucideReact.Twitter; }
549
629
  });
630
+ Object.defineProperty(exports, "Workflow", {
631
+ enumerable: true,
632
+ get: function () { return lucideReact.Workflow; }
633
+ });
550
634
  Object.defineProperty(exports, "X", {
551
635
  enumerable: true,
552
636
  get: function () { return lucideReact.X; }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/llm-utils.ts","../src/common-app-config.ts"],"names":["twMerge","clsx","isValid","format","visit","remark","remarkFrontmatter","remarkMdx","remarkGfm"],"mappings":"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","file":"index.js","sourcesContent":["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} ","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}; "]}
1
+ {"version":3,"sources":["../src/utils.ts","../src/llm-utils.ts","../src/common-app-config.ts"],"names":["twMerge","clsx","isValid","format","visit","remark","remarkFrontmatter","remarkMdx","remarkGfm"],"mappings":"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","file":"index.js","sourcesContent":["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} ","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}; "]}
package/dist/index.mjs CHANGED
@@ -1,7 +1,7 @@
1
1
  import { clsx } from 'clsx';
2
2
  import { twMerge } from 'tailwind-merge';
3
3
  import { isValid, format } from 'date-fns';
4
- 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';
4
+ export { AlbumIcon, AlignHorizontalJustifyEnd, ArrowLeft, ArrowRight, ArrowUp, Binary, Blocks, BookX, BringToFront, Bug, Building2, Car, Check, CheckCheck, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Circle, CircleAlert, CircleSmall, ComponentIcon, Copy, Cpu, DatabaseZap, Dot, Download, ExternalLink, Eye, Facebook, File, FileDown, FileInput, FileLock2, FileUp, Fingerprint, Folder, FolderOpen, Gift, GitPullRequestArrow, Globe, GlobeLock, Grip, GripVertical, HandHeart, Handshake, Highlighter, HousePlus, ImageDown, ImageOff, ImageUp, Infinity, Info, Keyboard, LandPlot, Layout, LayoutTemplate, LibraryIcon, Link, ListTodo, Loader2, LogIn, LogOut, Mail, MoreHorizontal, MousePointerClick, Palette, PanelLeft, PanelsTopLeft, PawPrint, Pencil, Pi, QrCode, ReceiptText, RefreshCcw, Regex, Replace, Rocket, Rss, Scale, Search, SendHorizontal, Server, Share, Shield, ShieldUser, Sigma, Sparkles, SplinePointer, Sprout, SquareDashedBottomCode, SquareTerminal, Star, Tablets, Terminal, Twitter, Workflow, X, Zap } from 'lucide-react';
5
5
  import { remark } from 'remark';
6
6
  import remarkGfm from 'remark-gfm';
7
7
  import remarkMdx from 'remark-mdx';
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts","../src/llm-utils.ts","../src/common-app-config.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["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} ","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}; "]}
1
+ {"version":3,"sources":["../src/utils.ts","../src/llm-utils.ts","../src/common-app-config.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["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} ","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}; "]}
@@ -1 +1 @@
1
- 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';
1
+ export { AlbumIcon, AlignHorizontalJustifyEnd, ArrowLeft, ArrowRight, ArrowUp, Binary, Blocks, BookX, BringToFront, Bug, Building2, Car, Check, CheckCheck, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Circle, CircleAlert, CircleSmall, ComponentIcon, Copy, Cpu, DatabaseZap, Dot, Download, ExternalLink, Eye, Facebook, File, FileDown, FileInput, FileLock2, FileUp, Fingerprint, Folder, FolderOpen, Gift, GitPullRequestArrow, Globe, GlobeLock, Grip, GripVertical, HandHeart, Handshake, Highlighter, HousePlus, ImageDown, ImageOff, ImageUp, Infinity, Info, Keyboard, LandPlot, Layout, LayoutTemplate, LibraryIcon, Link, ListTodo, Loader2, LogIn, LogOut, Mail, MoreHorizontal, MousePointerClick, Palette, PanelLeft, PanelsTopLeft, PawPrint, Pencil, Pi, QrCode, ReceiptText, RefreshCcw, Regex, Replace, Rocket, Rss, Scale, Search, SendHorizontal, Server, Share, Shield, ShieldUser, Sigma, Sparkles, SplinePointer, Sprout, SquareDashedBottomCode, SquareTerminal, Star, Tablets, Terminal, Twitter, Workflow, X, Zap } from 'lucide-react';
@@ -1 +1 @@
1
- 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';
1
+ export { AlbumIcon, AlignHorizontalJustifyEnd, ArrowLeft, ArrowRight, ArrowUp, Binary, Blocks, BookX, BringToFront, Bug, Building2, Car, Check, CheckCheck, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Circle, CircleAlert, CircleSmall, ComponentIcon, Copy, Cpu, DatabaseZap, Dot, Download, ExternalLink, Eye, Facebook, File, FileDown, FileInput, FileLock2, FileUp, Fingerprint, Folder, FolderOpen, Gift, GitPullRequestArrow, Globe, GlobeLock, Grip, GripVertical, HandHeart, Handshake, Highlighter, HousePlus, ImageDown, ImageOff, ImageUp, Infinity, Info, Keyboard, LandPlot, Layout, LayoutTemplate, LibraryIcon, Link, ListTodo, Loader2, LogIn, LogOut, Mail, MoreHorizontal, MousePointerClick, Palette, PanelLeft, PanelsTopLeft, PawPrint, Pencil, Pi, QrCode, ReceiptText, RefreshCcw, Regex, Replace, Rocket, Rss, Scale, Search, SendHorizontal, Server, Share, Shield, ShieldUser, Sigma, Sparkles, SplinePointer, Sprout, SquareDashedBottomCode, SquareTerminal, Star, Tablets, Terminal, Twitter, Workflow, X, Zap } from 'lucide-react';
@@ -56,6 +56,10 @@ Object.defineProperty(exports, "Check", {
56
56
  enumerable: true,
57
57
  get: function () { return lucideReact.Check; }
58
58
  });
59
+ Object.defineProperty(exports, "CheckCheck", {
60
+ enumerable: true,
61
+ get: function () { return lucideReact.CheckCheck; }
62
+ });
59
63
  Object.defineProperty(exports, "ChevronDown", {
60
64
  enumerable: true,
61
65
  get: function () { return lucideReact.ChevronDown; }
@@ -88,6 +92,10 @@ Object.defineProperty(exports, "ComponentIcon", {
88
92
  enumerable: true,
89
93
  get: function () { return lucideReact.ComponentIcon; }
90
94
  });
95
+ Object.defineProperty(exports, "Copy", {
96
+ enumerable: true,
97
+ get: function () { return lucideReact.Copy; }
98
+ });
91
99
  Object.defineProperty(exports, "Cpu", {
92
100
  enumerable: true,
93
101
  get: function () { return lucideReact.Cpu; }
@@ -116,14 +124,38 @@ Object.defineProperty(exports, "Facebook", {
116
124
  enumerable: true,
117
125
  get: function () { return lucideReact.Facebook; }
118
126
  });
127
+ Object.defineProperty(exports, "File", {
128
+ enumerable: true,
129
+ get: function () { return lucideReact.File; }
130
+ });
131
+ Object.defineProperty(exports, "FileDown", {
132
+ enumerable: true,
133
+ get: function () { return lucideReact.FileDown; }
134
+ });
135
+ Object.defineProperty(exports, "FileInput", {
136
+ enumerable: true,
137
+ get: function () { return lucideReact.FileInput; }
138
+ });
119
139
  Object.defineProperty(exports, "FileLock2", {
120
140
  enumerable: true,
121
141
  get: function () { return lucideReact.FileLock2; }
122
142
  });
143
+ Object.defineProperty(exports, "FileUp", {
144
+ enumerable: true,
145
+ get: function () { return lucideReact.FileUp; }
146
+ });
123
147
  Object.defineProperty(exports, "Fingerprint", {
124
148
  enumerable: true,
125
149
  get: function () { return lucideReact.Fingerprint; }
126
150
  });
151
+ Object.defineProperty(exports, "Folder", {
152
+ enumerable: true,
153
+ get: function () { return lucideReact.Folder; }
154
+ });
155
+ Object.defineProperty(exports, "FolderOpen", {
156
+ enumerable: true,
157
+ get: function () { return lucideReact.FolderOpen; }
158
+ });
127
159
  Object.defineProperty(exports, "Gift", {
128
160
  enumerable: true,
129
161
  get: function () { return lucideReact.Gift; }
@@ -140,6 +172,10 @@ Object.defineProperty(exports, "GlobeLock", {
140
172
  enumerable: true,
141
173
  get: function () { return lucideReact.GlobeLock; }
142
174
  });
175
+ Object.defineProperty(exports, "Grip", {
176
+ enumerable: true,
177
+ get: function () { return lucideReact.Grip; }
178
+ });
143
179
  Object.defineProperty(exports, "GripVertical", {
144
180
  enumerable: true,
145
181
  get: function () { return lucideReact.GripVertical; }
@@ -172,6 +208,10 @@ Object.defineProperty(exports, "ImageUp", {
172
208
  enumerable: true,
173
209
  get: function () { return lucideReact.ImageUp; }
174
210
  });
211
+ Object.defineProperty(exports, "Infinity", {
212
+ enumerable: true,
213
+ get: function () { return lucideReact.Infinity; }
214
+ });
175
215
  Object.defineProperty(exports, "Info", {
176
216
  enumerable: true,
177
217
  get: function () { return lucideReact.Info; }
@@ -200,6 +240,10 @@ Object.defineProperty(exports, "Link", {
200
240
  enumerable: true,
201
241
  get: function () { return lucideReact.Link; }
202
242
  });
243
+ Object.defineProperty(exports, "ListTodo", {
244
+ enumerable: true,
245
+ get: function () { return lucideReact.ListTodo; }
246
+ });
203
247
  Object.defineProperty(exports, "Loader2", {
204
248
  enumerable: true,
205
249
  get: function () { return lucideReact.Loader2; }
@@ -212,6 +256,10 @@ Object.defineProperty(exports, "LogOut", {
212
256
  enumerable: true,
213
257
  get: function () { return lucideReact.LogOut; }
214
258
  });
259
+ Object.defineProperty(exports, "Mail", {
260
+ enumerable: true,
261
+ get: function () { return lucideReact.Mail; }
262
+ });
215
263
  Object.defineProperty(exports, "MoreHorizontal", {
216
264
  enumerable: true,
217
265
  get: function () { return lucideReact.MoreHorizontal; }
@@ -232,6 +280,10 @@ Object.defineProperty(exports, "PanelsTopLeft", {
232
280
  enumerable: true,
233
281
  get: function () { return lucideReact.PanelsTopLeft; }
234
282
  });
283
+ Object.defineProperty(exports, "PawPrint", {
284
+ enumerable: true,
285
+ get: function () { return lucideReact.PawPrint; }
286
+ });
235
287
  Object.defineProperty(exports, "Pencil", {
236
288
  enumerable: true,
237
289
  get: function () { return lucideReact.Pencil; }
@@ -240,10 +292,18 @@ Object.defineProperty(exports, "Pi", {
240
292
  enumerable: true,
241
293
  get: function () { return lucideReact.Pi; }
242
294
  });
295
+ Object.defineProperty(exports, "QrCode", {
296
+ enumerable: true,
297
+ get: function () { return lucideReact.QrCode; }
298
+ });
243
299
  Object.defineProperty(exports, "ReceiptText", {
244
300
  enumerable: true,
245
301
  get: function () { return lucideReact.ReceiptText; }
246
302
  });
303
+ Object.defineProperty(exports, "RefreshCcw", {
304
+ enumerable: true,
305
+ get: function () { return lucideReact.RefreshCcw; }
306
+ });
247
307
  Object.defineProperty(exports, "Regex", {
248
308
  enumerable: true,
249
309
  get: function () { return lucideReact.Regex; }
@@ -252,6 +312,10 @@ Object.defineProperty(exports, "Replace", {
252
312
  enumerable: true,
253
313
  get: function () { return lucideReact.Replace; }
254
314
  });
315
+ Object.defineProperty(exports, "Rocket", {
316
+ enumerable: true,
317
+ get: function () { return lucideReact.Rocket; }
318
+ });
255
319
  Object.defineProperty(exports, "Rss", {
256
320
  enumerable: true,
257
321
  get: function () { return lucideReact.Rss; }
@@ -264,6 +328,10 @@ Object.defineProperty(exports, "Search", {
264
328
  enumerable: true,
265
329
  get: function () { return lucideReact.Search; }
266
330
  });
331
+ Object.defineProperty(exports, "SendHorizontal", {
332
+ enumerable: true,
333
+ get: function () { return lucideReact.SendHorizontal; }
334
+ });
267
335
  Object.defineProperty(exports, "Server", {
268
336
  enumerable: true,
269
337
  get: function () { return lucideReact.Server; }
@@ -272,10 +340,18 @@ Object.defineProperty(exports, "Share", {
272
340
  enumerable: true,
273
341
  get: function () { return lucideReact.Share; }
274
342
  });
343
+ Object.defineProperty(exports, "Shield", {
344
+ enumerable: true,
345
+ get: function () { return lucideReact.Shield; }
346
+ });
275
347
  Object.defineProperty(exports, "ShieldUser", {
276
348
  enumerable: true,
277
349
  get: function () { return lucideReact.ShieldUser; }
278
350
  });
351
+ Object.defineProperty(exports, "Sigma", {
352
+ enumerable: true,
353
+ get: function () { return lucideReact.Sigma; }
354
+ });
279
355
  Object.defineProperty(exports, "Sparkles", {
280
356
  enumerable: true,
281
357
  get: function () { return lucideReact.Sparkles; }
@@ -284,6 +360,10 @@ Object.defineProperty(exports, "SplinePointer", {
284
360
  enumerable: true,
285
361
  get: function () { return lucideReact.SplinePointer; }
286
362
  });
363
+ Object.defineProperty(exports, "Sprout", {
364
+ enumerable: true,
365
+ get: function () { return lucideReact.Sprout; }
366
+ });
287
367
  Object.defineProperty(exports, "SquareDashedBottomCode", {
288
368
  enumerable: true,
289
369
  get: function () { return lucideReact.SquareDashedBottomCode; }
@@ -308,6 +388,10 @@ Object.defineProperty(exports, "Twitter", {
308
388
  enumerable: true,
309
389
  get: function () { return lucideReact.Twitter; }
310
390
  });
391
+ Object.defineProperty(exports, "Workflow", {
392
+ enumerable: true,
393
+ get: function () { return lucideReact.Workflow; }
394
+ });
311
395
  Object.defineProperty(exports, "X", {
312
396
  enumerable: true,
313
397
  get: function () { return lucideReact.X; }
@@ -1,3 +1,3 @@
1
- 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';
1
+ export { AlbumIcon, AlignHorizontalJustifyEnd, ArrowLeft, ArrowRight, ArrowUp, Binary, Blocks, BookX, BringToFront, Bug, Building2, Car, Check, CheckCheck, ChevronDown, ChevronLeft, ChevronRight, ChevronUp, Circle, CircleAlert, CircleSmall, ComponentIcon, Copy, Cpu, DatabaseZap, Dot, Download, ExternalLink, Eye, Facebook, File, FileDown, FileInput, FileLock2, FileUp, Fingerprint, Folder, FolderOpen, Gift, GitPullRequestArrow, Globe, GlobeLock, Grip, GripVertical, HandHeart, Handshake, Highlighter, HousePlus, ImageDown, ImageOff, ImageUp, Infinity, Info, Keyboard, LandPlot, Layout, LayoutTemplate, LibraryIcon, Link, ListTodo, Loader2, LogIn, LogOut, Mail, MoreHorizontal, MousePointerClick, Palette, PanelLeft, PanelsTopLeft, PawPrint, Pencil, Pi, QrCode, ReceiptText, RefreshCcw, Regex, Replace, Rocket, Rss, Scale, Search, SendHorizontal, Server, Share, Shield, ShieldUser, Sigma, Sparkles, SplinePointer, Sprout, SquareDashedBottomCode, SquareTerminal, Star, Tablets, Terminal, Twitter, Workflow, X, Zap } from 'lucide-react';
2
2
  //# sourceMappingURL=limited-lucide-icons.mjs.map
3
3
  //# sourceMappingURL=limited-lucide-icons.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/llm-utils.ts"],"names":["visit","remark","remarkFrontmatter","remarkMdx","remarkGfm"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,SAAS,uBAAA,GAA0B;AAEjC,EAAA,OAAO,CAAC,IAAA,KAAc;AACpB,IAAAA,oBAAA,CAAM,IAAA,EAAM,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAO,MAAA,KAAW;AAC5C,MAAA,IAAI,MAAA,IAAU,OAAO,KAAA,KAAU,QAAA,EAAU;AACvC,QAAA,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAAA;AACjC,KACD,CAAA;AAAA,GACH;AACF;AAKA,IAAM,YAAYC,aAAA,EAAO,CAEtB,GAAA,CAAIC,kCAAA,EAAmB,CAAC,MAAM,CAAC,CAAA,CAE/B,GAAA,CAAI,uBAAuB,CAAA,CAC3B,GAAA,CAAIC,0BAAS,CAAA,CACb,IAAIC,0BAAS,CAAA;AAEhB,SAAsB,UAAA,CAAW,UAAA,EAAoB,KAAA,EAAgB,WAAA,EAAsB;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACzF,IAAA,IAAI,OAAO,eAAe,QAAA,EAAU;AAClC,MAAA,OAAA,CAAQ,KAAA,CAAM,yDAAA,EAA2D,OAAO,UAAU,CAAA;AAC1F,MAAA,OAAO,CAAA;;AAAA,2CAAA,CAAA;AAAA;AAGT,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,MAAM,SAAA,CAAU,OAAA,CAAQ,UAAU,CAAA;AACpD,MAAA,MAAM,4BAA4B,SAAA,CAAU,KAAA;AAE5C,MAAA,MAAM,aAAA,GAAgB;AAAA,QACpB,KAAA,GAAQ,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,GAAK,IAAA;AAAA,QACvB,WAAA;AAAA,QACA,0BAA0B,IAAA;AAAK,OACjC;AAEA,MAAA,OAAO,cAAc,MAAA,CAAO,CAAA,IAAA,KAAQ,QAAQ,IAAI,CAAA,CAAE,KAAK,MAAM,CAAA;AAAA,aACtD,eAAA,EAAiB;AACxB,MAAA,OAAA,CAAQ,KAAA,CAAM,iDAAiD,eAAe,CAAA;AAC9E,MAAA,OAAO,CAAA;;AAAA,6BAAA,CAAA;AAAA;AACT,GACF,CAAA;AAAA","file":"llm-utils.js","sourcesContent":["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} "]}
1
+ {"version":3,"sources":["../src/llm-utils.ts"],"names":["visit","remark","remarkFrontmatter","remarkMdx","remarkGfm"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,SAAS,uBAAA,GAA0B;AAEjC,EAAA,OAAO,CAAC,IAAA,KAAc;AACpB,IAAAA,oBAAA,CAAM,IAAA,EAAM,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAO,MAAA,KAAW;AAC5C,MAAA,IAAI,MAAA,IAAU,OAAO,KAAA,KAAU,QAAA,EAAU;AACvC,QAAA,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAAA,MACjC;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AACF;AAKA,IAAM,YAAYC,aAAA,EAAO,CAEtB,GAAA,CAAIC,kCAAA,EAAmB,CAAC,MAAM,CAAC,CAAA,CAE/B,GAAA,CAAI,uBAAuB,CAAA,CAC3B,GAAA,CAAIC,0BAAS,CAAA,CACb,IAAIC,0BAAS,CAAA;AAEhB,SAAsB,UAAA,CAAW,UAAA,EAAoB,KAAA,EAAgB,WAAA,EAAsB;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACzF,IAAA,IAAI,OAAO,eAAe,QAAA,EAAU;AAClC,MAAA,OAAA,CAAQ,KAAA,CAAM,yDAAA,EAA2D,OAAO,UAAU,CAAA;AAC1F,MAAA,OAAO,CAAA;;AAAA,2CAAA,CAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,MAAM,SAAA,CAAU,OAAA,CAAQ,UAAU,CAAA;AACpD,MAAA,MAAM,4BAA4B,SAAA,CAAU,KAAA;AAE5C,MAAA,MAAM,aAAA,GAAgB;AAAA,QACpB,KAAA,GAAQ,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,GAAK,IAAA;AAAA,QACvB,WAAA;AAAA,QACA,0BAA0B,IAAA;AAAK,OACjC;AAEA,MAAA,OAAO,cAAc,MAAA,CAAO,CAAA,IAAA,KAAQ,QAAQ,IAAI,CAAA,CAAE,KAAK,MAAM,CAAA;AAAA,IAC/D,SAAS,eAAA,EAAiB;AACxB,MAAA,OAAA,CAAQ,KAAA,CAAM,iDAAiD,eAAe,CAAA;AAC9E,MAAA,OAAO,CAAA;;AAAA,6BAAA,CAAA;AAAA,IACT;AAAA,EACF,CAAA,CAAA;AAAA","file":"llm-utils.js","sourcesContent":["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} "]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/llm-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,SAAS,uBAAA,GAA0B;AAEjC,EAAA,OAAO,CAAC,IAAA,KAAc;AACpB,IAAA,KAAA,CAAM,IAAA,EAAM,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAO,MAAA,KAAW;AAC5C,MAAA,IAAI,MAAA,IAAU,OAAO,KAAA,KAAU,QAAA,EAAU;AACvC,QAAA,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAAA;AACjC,KACD,CAAA;AAAA,GACH;AACF;AAKA,IAAM,YAAY,MAAA,EAAO,CAEtB,GAAA,CAAI,iBAAA,EAAmB,CAAC,MAAM,CAAC,CAAA,CAE/B,GAAA,CAAI,uBAAuB,CAAA,CAC3B,GAAA,CAAI,SAAS,CAAA,CACb,IAAI,SAAS,CAAA;AAEhB,SAAsB,UAAA,CAAW,UAAA,EAAoB,KAAA,EAAgB,WAAA,EAAsB;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACzF,IAAA,IAAI,OAAO,eAAe,QAAA,EAAU;AAClC,MAAA,OAAA,CAAQ,KAAA,CAAM,yDAAA,EAA2D,OAAO,UAAU,CAAA;AAC1F,MAAA,OAAO,CAAA;;AAAA,2CAAA,CAAA;AAAA;AAGT,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,MAAM,SAAA,CAAU,OAAA,CAAQ,UAAU,CAAA;AACpD,MAAA,MAAM,4BAA4B,SAAA,CAAU,KAAA;AAE5C,MAAA,MAAM,aAAA,GAAgB;AAAA,QACpB,KAAA,GAAQ,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,GAAK,IAAA;AAAA,QACvB,WAAA;AAAA,QACA,0BAA0B,IAAA;AAAK,OACjC;AAEA,MAAA,OAAO,cAAc,MAAA,CAAO,CAAA,IAAA,KAAQ,QAAQ,IAAI,CAAA,CAAE,KAAK,MAAM,CAAA;AAAA,aACtD,eAAA,EAAiB;AACxB,MAAA,OAAA,CAAQ,KAAA,CAAM,iDAAiD,eAAe,CAAA;AAC9E,MAAA,OAAO,CAAA;;AAAA,6BAAA,CAAA;AAAA;AACT,GACF,CAAA;AAAA","file":"llm-utils.mjs","sourcesContent":["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} "]}
1
+ {"version":3,"sources":["../src/llm-utils.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,SAAS,uBAAA,GAA0B;AAEjC,EAAA,OAAO,CAAC,IAAA,KAAc;AACpB,IAAA,KAAA,CAAM,IAAA,EAAM,MAAA,EAAQ,CAAC,KAAA,EAAO,OAAO,MAAA,KAAW;AAC5C,MAAA,IAAI,MAAA,IAAU,OAAO,KAAA,KAAU,QAAA,EAAU;AACvC,QAAA,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAAA,MACjC;AAAA,IACF,CAAC,CAAA;AAAA,EACH,CAAA;AACF;AAKA,IAAM,YAAY,MAAA,EAAO,CAEtB,GAAA,CAAI,iBAAA,EAAmB,CAAC,MAAM,CAAC,CAAA,CAE/B,GAAA,CAAI,uBAAuB,CAAA,CAC3B,GAAA,CAAI,SAAS,CAAA,CACb,IAAI,SAAS,CAAA;AAEhB,SAAsB,UAAA,CAAW,UAAA,EAAoB,KAAA,EAAgB,WAAA,EAAsB;AAAA,EAAA,OAAA,OAAA,CAAA,IAAA,EAAA,IAAA,EAAA,aAAA;AACzF,IAAA,IAAI,OAAO,eAAe,QAAA,EAAU;AAClC,MAAA,OAAA,CAAQ,KAAA,CAAM,yDAAA,EAA2D,OAAO,UAAU,CAAA;AAC1F,MAAA,OAAO,CAAA;;AAAA,2CAAA,CAAA;AAAA,IACT;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAY,MAAM,SAAA,CAAU,OAAA,CAAQ,UAAU,CAAA;AACpD,MAAA,MAAM,4BAA4B,SAAA,CAAU,KAAA;AAE5C,MAAA,MAAM,aAAA,GAAgB;AAAA,QACpB,KAAA,GAAQ,CAAA,EAAA,EAAK,KAAK,CAAA,CAAA,GAAK,IAAA;AAAA,QACvB,WAAA;AAAA,QACA,0BAA0B,IAAA;AAAK,OACjC;AAEA,MAAA,OAAO,cAAc,MAAA,CAAO,CAAA,IAAA,KAAQ,QAAQ,IAAI,CAAA,CAAE,KAAK,MAAM,CAAA;AAAA,IAC/D,SAAS,eAAA,EAAiB;AACxB,MAAA,OAAA,CAAQ,KAAA,CAAM,iDAAiD,eAAe,CAAA;AAC9E,MAAA,OAAO,CAAA;;AAAA,6BAAA,CAAA;AAAA,IACT;AAAA,EACF,CAAA,CAAA;AAAA","file":"llm-utils.mjs","sourcesContent":["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} "]}
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts"],"names":["twMerge","clsx","isValid","format"],"mappings":";;;;;;;AAIO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;AAEO,SAAS,eAAA,CAAgB,WAAmB,SAAA,EAAmB;AACpE,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,IAAA;AAAA;AAIT,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,SAAA,EAAW,EAAE,CAAA;AAC1C,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACrB,IAAA,OAAO,IAAA;AAAA;AAGV,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,WAAW,CAAA;AAGjC,EAAA,IAAI,CAACC,eAAA,CAAQ,IAAI,CAAA,EAAG;AAClB,IAAA,OAAO,IAAA;AAAA;AAIT,EAAA,IAAI;AAED,IAAA,OAAOC,cAAA,CAAO,MAAM,SAAS,CAAA;AAAA,WACvB,KAAA,EAAO;AAEb,IAAA,OAAA,CAAQ,KAAA,CAAM,0BAA0B,KAAK,CAAA;AAC7C,IAAA,OAAO,IAAA;AAAA;AAEZ","file":"utils.js","sourcesContent":["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} "]}
1
+ {"version":3,"sources":["../src/utils.ts"],"names":["twMerge","clsx","isValid","format"],"mappings":";;;;;;;AAIO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAOA,qBAAA,CAAQC,SAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;AAEO,SAAS,eAAA,CAAgB,WAAmB,SAAA,EAAmB;AACpE,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,SAAA,EAAW,EAAE,CAAA;AAC1C,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACrB,IAAA,OAAO,IAAA;AAAA,EACV;AAEA,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,WAAW,CAAA;AAGjC,EAAA,IAAI,CAACC,eAAA,CAAQ,IAAI,CAAA,EAAG;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI;AAED,IAAA,OAAOC,cAAA,CAAO,MAAM,SAAS,CAAA;AAAA,EAChC,SAAS,KAAA,EAAO;AAEb,IAAA,OAAA,CAAQ,KAAA,CAAM,0BAA0B,KAAK,CAAA;AAC7C,IAAA,OAAO,IAAA;AAAA,EACV;AACF","file":"utils.js","sourcesContent":["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} "]}
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.ts"],"names":[],"mappings":";;;;;AAIO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;AAEO,SAAS,eAAA,CAAgB,WAAmB,SAAA,EAAmB;AACpE,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,IAAA;AAAA;AAIT,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,SAAA,EAAW,EAAE,CAAA;AAC1C,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACrB,IAAA,OAAO,IAAA;AAAA;AAGV,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,WAAW,CAAA;AAGjC,EAAA,IAAI,CAAC,OAAA,CAAQ,IAAI,CAAA,EAAG;AAClB,IAAA,OAAO,IAAA;AAAA;AAIT,EAAA,IAAI;AAED,IAAA,OAAO,MAAA,CAAO,MAAM,SAAS,CAAA;AAAA,WACvB,KAAA,EAAO;AAEb,IAAA,OAAA,CAAQ,KAAA,CAAM,0BAA0B,KAAK,CAAA;AAC7C,IAAA,OAAO,IAAA;AAAA;AAEZ","file":"utils.mjs","sourcesContent":["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} "]}
1
+ {"version":3,"sources":["../src/utils.ts"],"names":[],"mappings":";;;;;AAIO,SAAS,MAAM,MAAA,EAAsB;AAC1C,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,MAAM,CAAC,CAAA;AAC7B;AAEO,SAAS,eAAA,CAAgB,WAAmB,SAAA,EAAmB;AACpE,EAAA,MAAM,IAAA,GAAO,EAAA;AACb,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,MAAM,WAAA,GAAc,QAAA,CAAS,SAAA,EAAW,EAAE,CAAA;AAC1C,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACrB,IAAA,OAAO,IAAA;AAAA,EACV;AAEA,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,WAAW,CAAA;AAGjC,EAAA,IAAI,CAAC,OAAA,CAAQ,IAAI,CAAA,EAAG;AAClB,IAAA,OAAO,IAAA;AAAA,EACT;AAGA,EAAA,IAAI;AAED,IAAA,OAAO,MAAA,CAAO,MAAM,SAAS,CAAA;AAAA,EAChC,SAAS,KAAA,EAAO;AAEb,IAAA,OAAA,CAAQ,KAAA,CAAM,0BAA0B,KAAK,CAAA;AAC7C,IAAA,OAAO,IAAA;AAAA,EACV;AACF","file":"utils.mjs","sourcesContent":["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} "]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@windrun-huaiin/lib",
3
- "version": "5.1.2",
3
+ "version": "5.3.0",
4
4
  "description": "Common utilities and configuration",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -47,7 +47,7 @@
47
47
  "remark-mdx": "^3.1.0",
48
48
  "remark-frontmatter": "^5.0.0",
49
49
  "unist-util-visit": "^5.0.0",
50
- "lucide-react": "^0.511.0"
50
+ "lucide-react": "^0.525.0"
51
51
  },
52
52
  "devDependencies": {
53
53
  "typescript": "^5.8.3",
@@ -21,11 +21,13 @@ export {
21
21
  CircleAlert,
22
22
  CircleSmall,
23
23
  Check,
24
+ CheckCheck,
24
25
  ChevronDown,
25
26
  ChevronLeft,
26
27
  ChevronRight,
27
28
  ChevronUp,
28
29
  Cpu,
30
+ Copy,
29
31
  ComponentIcon,
30
32
  DatabaseZap,
31
33
  Dot,
@@ -33,17 +35,26 @@ export {
33
35
  Eye,
34
36
  ExternalLink,
35
37
  Facebook,
38
+ Shield,
39
+ File,
40
+ FileDown,
41
+ FileInput,
36
42
  FileLock2,
43
+ FileUp,
37
44
  Fingerprint,
45
+ Folder,
46
+ FolderOpen,
38
47
  Gift,
39
48
  GitPullRequestArrow,
40
49
  Globe,
41
50
  GlobeLock,
51
+ Grip,
42
52
  GripVertical,
43
53
  HandHeart,
44
54
  Handshake,
45
55
  Highlighter,
46
56
  HousePlus,
57
+ Infinity,
47
58
  Info,
48
59
  ImageDown,
49
60
  ImageOff,
@@ -54,24 +65,33 @@ export {
54
65
  LayoutTemplate,
55
66
  LibraryIcon,
56
67
  Link,
68
+ ListTodo,
57
69
  Loader2,
58
70
  LogIn,
59
71
  LogOut,
72
+ Mail,
60
73
  MoreHorizontal,
61
74
  MousePointerClick,
75
+ Palette,
62
76
  PanelLeft,
63
77
  PanelsTopLeft,
78
+ PawPrint,
64
79
  Pencil,
65
80
  Pi,
66
- Palette,
81
+ QrCode,
67
82
  ReceiptText,
83
+ RefreshCcw,
68
84
  Regex,
69
85
  Replace,
86
+ Rocket,
70
87
  Rss,
71
88
  Scale,
72
89
  Search,
90
+ SendHorizontal,
73
91
  Share,
92
+ Sigma,
74
93
  ShieldUser,
94
+ Sprout,
75
95
  SquareDashedBottomCode,
76
96
  SquareTerminal,
77
97
  Server,
@@ -81,6 +101,7 @@ export {
81
101
  Tablets,
82
102
  Terminal,
83
103
  Twitter,
104
+ Workflow,
84
105
  X,
85
- Zap
86
- } from 'lucide-react';
106
+ Zap,
107
+ } from "lucide-react";