@windrun-huaiin/lib 5.2.0 → 5.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/common-app-config.js.map +1 -1
- package/dist/common-app-config.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +16 -2
- package/dist/index.mjs.map +1 -1
- package/dist/limited-lucide-icons.d.mts +1 -1
- package/dist/limited-lucide-icons.d.ts +1 -1
- package/dist/limited-lucide-icons.js +32 -0
- package/dist/limited-lucide-icons.mjs +1 -1
- package/dist/llm-utils.js.map +1 -1
- package/dist/llm-utils.mjs.map +1 -1
- package/dist/utils.d.mts +2 -1
- package/dist/utils.d.ts +2 -1
- package/dist/utils.js +15 -0
- package/dist/utils.js.map +1 -1
- package/dist/utils.mjs +15 -1
- package/dist/utils.mjs.map +1 -1
- package/package.json +2 -2
- package/src/limited-lucide-icons.ts +9 -1
- package/src/utils.ts +20 -1
|
@@ -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
|
-
export { cn, formatTimestamp } from './utils.mjs';
|
|
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, GripVertical, HandHeart, Handshake, Highlighter, HousePlus, ImageDown, ImageOff, ImageUp, Info, Keyboard, LandPlot, Layout, LayoutTemplate, LibraryIcon, Link, ListTodo, Loader2, LogIn, LogOut, Mail, MoreHorizontal, MousePointerClick, Palette, PanelLeft, PanelsTopLeft, Pencil, Pi, ReceiptText, RefreshCcw, Regex, Replace, Rss, Scale, Search, SendHorizontal, Server, Share, ShieldUser, Sigma, Sparkles, SplinePointer, SquareDashedBottomCode, SquareTerminal, Star, Tablets, Terminal, Twitter, X, Zap } from 'lucide-react';
|
|
1
|
+
export { cn, formatTimestamp, handlePastePlainText } from './utils.mjs';
|
|
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
|
-
export { cn, formatTimestamp } from './utils.js';
|
|
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, GripVertical, HandHeart, Handshake, Highlighter, HousePlus, ImageDown, ImageOff, ImageUp, Info, Keyboard, LandPlot, Layout, LayoutTemplate, LibraryIcon, Link, ListTodo, Loader2, LogIn, LogOut, Mail, MoreHorizontal, MousePointerClick, Palette, PanelLeft, PanelsTopLeft, Pencil, Pi, ReceiptText, RefreshCcw, Regex, Replace, Rss, Scale, Search, SendHorizontal, Server, Share, ShieldUser, Sigma, Sparkles, SplinePointer, SquareDashedBottomCode, SquareTerminal, Star, Tablets, Terminal, Twitter, X, Zap } from 'lucide-react';
|
|
1
|
+
export { cn, formatTimestamp, handlePastePlainText } from './utils.js';
|
|
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
|
@@ -78,6 +78,20 @@ function formatTimestamp(timestamp, formatter) {
|
|
|
78
78
|
return fail;
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
+
function handlePastePlainText(e) {
|
|
82
|
+
e.preventDefault();
|
|
83
|
+
const text = e.clipboardData.getData("text/plain");
|
|
84
|
+
const selection = window.getSelection();
|
|
85
|
+
if (!selection || !selection.rangeCount) return;
|
|
86
|
+
selection.deleteFromDocument();
|
|
87
|
+
const textNode = document.createTextNode(text);
|
|
88
|
+
const range = selection.getRangeAt(0);
|
|
89
|
+
range.insertNode(textNode);
|
|
90
|
+
range.setStartAfter(textNode);
|
|
91
|
+
range.collapse(true);
|
|
92
|
+
selection.removeAllRanges();
|
|
93
|
+
selection.addRange(range);
|
|
94
|
+
}
|
|
81
95
|
function remarkRemoveFrontmatter() {
|
|
82
96
|
return (tree) => {
|
|
83
97
|
unistUtilVisit.visit(tree, "yaml", (_node, index, parent) => {
|
|
@@ -411,6 +425,10 @@ Object.defineProperty(exports, "GlobeLock", {
|
|
|
411
425
|
enumerable: true,
|
|
412
426
|
get: function () { return lucideReact.GlobeLock; }
|
|
413
427
|
});
|
|
428
|
+
Object.defineProperty(exports, "Grip", {
|
|
429
|
+
enumerable: true,
|
|
430
|
+
get: function () { return lucideReact.Grip; }
|
|
431
|
+
});
|
|
414
432
|
Object.defineProperty(exports, "GripVertical", {
|
|
415
433
|
enumerable: true,
|
|
416
434
|
get: function () { return lucideReact.GripVertical; }
|
|
@@ -443,6 +461,10 @@ Object.defineProperty(exports, "ImageUp", {
|
|
|
443
461
|
enumerable: true,
|
|
444
462
|
get: function () { return lucideReact.ImageUp; }
|
|
445
463
|
});
|
|
464
|
+
Object.defineProperty(exports, "Infinity", {
|
|
465
|
+
enumerable: true,
|
|
466
|
+
get: function () { return lucideReact.Infinity; }
|
|
467
|
+
});
|
|
446
468
|
Object.defineProperty(exports, "Info", {
|
|
447
469
|
enumerable: true,
|
|
448
470
|
get: function () { return lucideReact.Info; }
|
|
@@ -511,6 +533,10 @@ Object.defineProperty(exports, "PanelsTopLeft", {
|
|
|
511
533
|
enumerable: true,
|
|
512
534
|
get: function () { return lucideReact.PanelsTopLeft; }
|
|
513
535
|
});
|
|
536
|
+
Object.defineProperty(exports, "PawPrint", {
|
|
537
|
+
enumerable: true,
|
|
538
|
+
get: function () { return lucideReact.PawPrint; }
|
|
539
|
+
});
|
|
514
540
|
Object.defineProperty(exports, "Pencil", {
|
|
515
541
|
enumerable: true,
|
|
516
542
|
get: function () { return lucideReact.Pencil; }
|
|
@@ -519,6 +545,10 @@ Object.defineProperty(exports, "Pi", {
|
|
|
519
545
|
enumerable: true,
|
|
520
546
|
get: function () { return lucideReact.Pi; }
|
|
521
547
|
});
|
|
548
|
+
Object.defineProperty(exports, "QrCode", {
|
|
549
|
+
enumerable: true,
|
|
550
|
+
get: function () { return lucideReact.QrCode; }
|
|
551
|
+
});
|
|
522
552
|
Object.defineProperty(exports, "ReceiptText", {
|
|
523
553
|
enumerable: true,
|
|
524
554
|
get: function () { return lucideReact.ReceiptText; }
|
|
@@ -535,6 +565,10 @@ Object.defineProperty(exports, "Replace", {
|
|
|
535
565
|
enumerable: true,
|
|
536
566
|
get: function () { return lucideReact.Replace; }
|
|
537
567
|
});
|
|
568
|
+
Object.defineProperty(exports, "Rocket", {
|
|
569
|
+
enumerable: true,
|
|
570
|
+
get: function () { return lucideReact.Rocket; }
|
|
571
|
+
});
|
|
538
572
|
Object.defineProperty(exports, "Rss", {
|
|
539
573
|
enumerable: true,
|
|
540
574
|
get: function () { return lucideReact.Rss; }
|
|
@@ -559,6 +593,10 @@ Object.defineProperty(exports, "Share", {
|
|
|
559
593
|
enumerable: true,
|
|
560
594
|
get: function () { return lucideReact.Share; }
|
|
561
595
|
});
|
|
596
|
+
Object.defineProperty(exports, "Shield", {
|
|
597
|
+
enumerable: true,
|
|
598
|
+
get: function () { return lucideReact.Shield; }
|
|
599
|
+
});
|
|
562
600
|
Object.defineProperty(exports, "ShieldUser", {
|
|
563
601
|
enumerable: true,
|
|
564
602
|
get: function () { return lucideReact.ShieldUser; }
|
|
@@ -575,6 +613,10 @@ Object.defineProperty(exports, "SplinePointer", {
|
|
|
575
613
|
enumerable: true,
|
|
576
614
|
get: function () { return lucideReact.SplinePointer; }
|
|
577
615
|
});
|
|
616
|
+
Object.defineProperty(exports, "Sprout", {
|
|
617
|
+
enumerable: true,
|
|
618
|
+
get: function () { return lucideReact.Sprout; }
|
|
619
|
+
});
|
|
578
620
|
Object.defineProperty(exports, "SquareDashedBottomCode", {
|
|
579
621
|
enumerable: true,
|
|
580
622
|
get: function () { return lucideReact.SquareDashedBottomCode; }
|
|
@@ -599,6 +641,10 @@ Object.defineProperty(exports, "Twitter", {
|
|
|
599
641
|
enumerable: true,
|
|
600
642
|
get: function () { return lucideReact.Twitter; }
|
|
601
643
|
});
|
|
644
|
+
Object.defineProperty(exports, "Workflow", {
|
|
645
|
+
enumerable: true,
|
|
646
|
+
get: function () { return lucideReact.Workflow; }
|
|
647
|
+
});
|
|
602
648
|
Object.defineProperty(exports, "X", {
|
|
603
649
|
enumerable: true,
|
|
604
650
|
get: function () { return lucideReact.X; }
|
|
@@ -613,5 +659,6 @@ exports.createCommonAppConfig = createCommonAppConfig;
|
|
|
613
659
|
exports.createI18nHelpers = createI18nHelpers;
|
|
614
660
|
exports.formatTimestamp = formatTimestamp;
|
|
615
661
|
exports.getLLMText = getLLMText;
|
|
662
|
+
exports.handlePastePlainText = handlePastePlainText;
|
|
616
663
|
//# sourceMappingURL=index.js.map
|
|
617
664
|
//# sourceMappingURL=index.js.map
|
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} \n\n// Only allow pasting plain text, prohibit style content\nexport function handlePastePlainText(e: React.ClipboardEvent<HTMLElement>) {\n e.preventDefault();\n const text = e.clipboardData.getData('text/plain');\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount) return;\n // Delete the current selected content\n selection.deleteFromDocument();\n // Insert plain text\n const textNode = document.createTextNode(text);\n const range = selection.getRangeAt(0);\n range.insertNode(textNode);\n // Move the cursor to the inserted text\n range.setStartAfter(textNode);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\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, 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, GripVertical, HandHeart, Handshake, Highlighter, HousePlus, ImageDown, ImageOff, ImageUp, Info, Keyboard, LandPlot, Layout, LayoutTemplate, LibraryIcon, Link, ListTodo, Loader2, LogIn, LogOut, Mail, MoreHorizontal, MousePointerClick, Palette, PanelLeft, PanelsTopLeft, Pencil, Pi, ReceiptText, RefreshCcw, Regex, Replace, Rss, Scale, Search, SendHorizontal, Server, Share, ShieldUser, Sigma, 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';
|
|
@@ -70,6 +70,20 @@ function formatTimestamp(timestamp, formatter) {
|
|
|
70
70
|
return fail;
|
|
71
71
|
}
|
|
72
72
|
}
|
|
73
|
+
function handlePastePlainText(e) {
|
|
74
|
+
e.preventDefault();
|
|
75
|
+
const text = e.clipboardData.getData("text/plain");
|
|
76
|
+
const selection = window.getSelection();
|
|
77
|
+
if (!selection || !selection.rangeCount) return;
|
|
78
|
+
selection.deleteFromDocument();
|
|
79
|
+
const textNode = document.createTextNode(text);
|
|
80
|
+
const range = selection.getRangeAt(0);
|
|
81
|
+
range.insertNode(textNode);
|
|
82
|
+
range.setStartAfter(textNode);
|
|
83
|
+
range.collapse(true);
|
|
84
|
+
selection.removeAllRanges();
|
|
85
|
+
selection.addRange(range);
|
|
86
|
+
}
|
|
73
87
|
function remarkRemoveFrontmatter() {
|
|
74
88
|
return (tree) => {
|
|
75
89
|
visit(tree, "yaml", (_node, index, parent) => {
|
|
@@ -235,6 +249,6 @@ var LOCALE_PRESETS = {
|
|
|
235
249
|
NONE: { locales: [], defaultLocale: "en" }
|
|
236
250
|
};
|
|
237
251
|
|
|
238
|
-
export { LOCALE_PRESETS, cn, createCommonAppConfig, createI18nHelpers, formatTimestamp, getLLMText };
|
|
252
|
+
export { LOCALE_PRESETS, cn, createCommonAppConfig, createI18nHelpers, formatTimestamp, getLLMText, handlePastePlainText };
|
|
239
253
|
//# sourceMappingURL=index.mjs.map
|
|
240
254
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -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} \n\n// Only allow pasting plain text, prohibit style content\nexport function handlePastePlainText(e: React.ClipboardEvent<HTMLElement>) {\n e.preventDefault();\n const text = e.clipboardData.getData('text/plain');\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount) return;\n // Delete the current selected content\n selection.deleteFromDocument();\n // Insert plain text\n const textNode = document.createTextNode(text);\n const range = selection.getRangeAt(0);\n range.insertNode(textNode);\n // Move the cursor to the inserted text\n range.setStartAfter(textNode);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\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, 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, GripVertical, HandHeart, Handshake, Highlighter, HousePlus, ImageDown, ImageOff, ImageUp, Info, Keyboard, LandPlot, Layout, LayoutTemplate, LibraryIcon, Link, ListTodo, Loader2, LogIn, LogOut, Mail, MoreHorizontal, MousePointerClick, Palette, PanelLeft, PanelsTopLeft, Pencil, Pi, ReceiptText, RefreshCcw, Regex, Replace, Rss, Scale, Search, SendHorizontal, Server, Share, ShieldUser, Sigma, 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, 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, GripVertical, HandHeart, Handshake, Highlighter, HousePlus, ImageDown, ImageOff, ImageUp, Info, Keyboard, LandPlot, Layout, LayoutTemplate, LibraryIcon, Link, ListTodo, Loader2, LogIn, LogOut, Mail, MoreHorizontal, MousePointerClick, Palette, PanelLeft, PanelsTopLeft, Pencil, Pi, ReceiptText, RefreshCcw, Regex, Replace, Rss, Scale, Search, SendHorizontal, Server, Share, ShieldUser, Sigma, 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';
|
|
@@ -172,6 +172,10 @@ Object.defineProperty(exports, "GlobeLock", {
|
|
|
172
172
|
enumerable: true,
|
|
173
173
|
get: function () { return lucideReact.GlobeLock; }
|
|
174
174
|
});
|
|
175
|
+
Object.defineProperty(exports, "Grip", {
|
|
176
|
+
enumerable: true,
|
|
177
|
+
get: function () { return lucideReact.Grip; }
|
|
178
|
+
});
|
|
175
179
|
Object.defineProperty(exports, "GripVertical", {
|
|
176
180
|
enumerable: true,
|
|
177
181
|
get: function () { return lucideReact.GripVertical; }
|
|
@@ -204,6 +208,10 @@ Object.defineProperty(exports, "ImageUp", {
|
|
|
204
208
|
enumerable: true,
|
|
205
209
|
get: function () { return lucideReact.ImageUp; }
|
|
206
210
|
});
|
|
211
|
+
Object.defineProperty(exports, "Infinity", {
|
|
212
|
+
enumerable: true,
|
|
213
|
+
get: function () { return lucideReact.Infinity; }
|
|
214
|
+
});
|
|
207
215
|
Object.defineProperty(exports, "Info", {
|
|
208
216
|
enumerable: true,
|
|
209
217
|
get: function () { return lucideReact.Info; }
|
|
@@ -272,6 +280,10 @@ Object.defineProperty(exports, "PanelsTopLeft", {
|
|
|
272
280
|
enumerable: true,
|
|
273
281
|
get: function () { return lucideReact.PanelsTopLeft; }
|
|
274
282
|
});
|
|
283
|
+
Object.defineProperty(exports, "PawPrint", {
|
|
284
|
+
enumerable: true,
|
|
285
|
+
get: function () { return lucideReact.PawPrint; }
|
|
286
|
+
});
|
|
275
287
|
Object.defineProperty(exports, "Pencil", {
|
|
276
288
|
enumerable: true,
|
|
277
289
|
get: function () { return lucideReact.Pencil; }
|
|
@@ -280,6 +292,10 @@ Object.defineProperty(exports, "Pi", {
|
|
|
280
292
|
enumerable: true,
|
|
281
293
|
get: function () { return lucideReact.Pi; }
|
|
282
294
|
});
|
|
295
|
+
Object.defineProperty(exports, "QrCode", {
|
|
296
|
+
enumerable: true,
|
|
297
|
+
get: function () { return lucideReact.QrCode; }
|
|
298
|
+
});
|
|
283
299
|
Object.defineProperty(exports, "ReceiptText", {
|
|
284
300
|
enumerable: true,
|
|
285
301
|
get: function () { return lucideReact.ReceiptText; }
|
|
@@ -296,6 +312,10 @@ Object.defineProperty(exports, "Replace", {
|
|
|
296
312
|
enumerable: true,
|
|
297
313
|
get: function () { return lucideReact.Replace; }
|
|
298
314
|
});
|
|
315
|
+
Object.defineProperty(exports, "Rocket", {
|
|
316
|
+
enumerable: true,
|
|
317
|
+
get: function () { return lucideReact.Rocket; }
|
|
318
|
+
});
|
|
299
319
|
Object.defineProperty(exports, "Rss", {
|
|
300
320
|
enumerable: true,
|
|
301
321
|
get: function () { return lucideReact.Rss; }
|
|
@@ -320,6 +340,10 @@ Object.defineProperty(exports, "Share", {
|
|
|
320
340
|
enumerable: true,
|
|
321
341
|
get: function () { return lucideReact.Share; }
|
|
322
342
|
});
|
|
343
|
+
Object.defineProperty(exports, "Shield", {
|
|
344
|
+
enumerable: true,
|
|
345
|
+
get: function () { return lucideReact.Shield; }
|
|
346
|
+
});
|
|
323
347
|
Object.defineProperty(exports, "ShieldUser", {
|
|
324
348
|
enumerable: true,
|
|
325
349
|
get: function () { return lucideReact.ShieldUser; }
|
|
@@ -336,6 +360,10 @@ Object.defineProperty(exports, "SplinePointer", {
|
|
|
336
360
|
enumerable: true,
|
|
337
361
|
get: function () { return lucideReact.SplinePointer; }
|
|
338
362
|
});
|
|
363
|
+
Object.defineProperty(exports, "Sprout", {
|
|
364
|
+
enumerable: true,
|
|
365
|
+
get: function () { return lucideReact.Sprout; }
|
|
366
|
+
});
|
|
339
367
|
Object.defineProperty(exports, "SquareDashedBottomCode", {
|
|
340
368
|
enumerable: true,
|
|
341
369
|
get: function () { return lucideReact.SquareDashedBottomCode; }
|
|
@@ -360,6 +388,10 @@ Object.defineProperty(exports, "Twitter", {
|
|
|
360
388
|
enumerable: true,
|
|
361
389
|
get: function () { return lucideReact.Twitter; }
|
|
362
390
|
});
|
|
391
|
+
Object.defineProperty(exports, "Workflow", {
|
|
392
|
+
enumerable: true,
|
|
393
|
+
get: function () { return lucideReact.Workflow; }
|
|
394
|
+
});
|
|
363
395
|
Object.defineProperty(exports, "X", {
|
|
364
396
|
enumerable: true,
|
|
365
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, 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, GripVertical, HandHeart, Handshake, Highlighter, HousePlus, ImageDown, ImageOff, ImageUp, Info, Keyboard, LandPlot, Layout, LayoutTemplate, LibraryIcon, Link, ListTodo, Loader2, LogIn, LogOut, Mail, MoreHorizontal, MousePointerClick, Palette, PanelLeft, PanelsTopLeft, Pencil, Pi, ReceiptText, RefreshCcw, Regex, Replace, Rss, Scale, Search, SendHorizontal, Server, Share, ShieldUser, Sigma, 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
|
package/dist/llm-utils.js.map
CHANGED
|
@@ -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;
|
|
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} "]}
|
package/dist/llm-utils.mjs.map
CHANGED
|
@@ -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;
|
|
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.d.mts
CHANGED
|
@@ -2,5 +2,6 @@ import { ClassValue } from 'clsx';
|
|
|
2
2
|
|
|
3
3
|
declare function cn(...inputs: ClassValue[]): string;
|
|
4
4
|
declare function formatTimestamp(timestamp: string, formatter: string): string;
|
|
5
|
+
declare function handlePastePlainText(e: React.ClipboardEvent<HTMLElement>): void;
|
|
5
6
|
|
|
6
|
-
export { cn, formatTimestamp };
|
|
7
|
+
export { cn, formatTimestamp, handlePastePlainText };
|
package/dist/utils.d.ts
CHANGED
|
@@ -2,5 +2,6 @@ import { ClassValue } from 'clsx';
|
|
|
2
2
|
|
|
3
3
|
declare function cn(...inputs: ClassValue[]): string;
|
|
4
4
|
declare function formatTimestamp(timestamp: string, formatter: string): string;
|
|
5
|
+
declare function handlePastePlainText(e: React.ClipboardEvent<HTMLElement>): void;
|
|
5
6
|
|
|
6
|
-
export { cn, formatTimestamp };
|
|
7
|
+
export { cn, formatTimestamp, handlePastePlainText };
|
package/dist/utils.js
CHANGED
|
@@ -28,8 +28,23 @@ function formatTimestamp(timestamp, formatter) {
|
|
|
28
28
|
return fail;
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
|
+
function handlePastePlainText(e) {
|
|
32
|
+
e.preventDefault();
|
|
33
|
+
const text = e.clipboardData.getData("text/plain");
|
|
34
|
+
const selection = window.getSelection();
|
|
35
|
+
if (!selection || !selection.rangeCount) return;
|
|
36
|
+
selection.deleteFromDocument();
|
|
37
|
+
const textNode = document.createTextNode(text);
|
|
38
|
+
const range = selection.getRangeAt(0);
|
|
39
|
+
range.insertNode(textNode);
|
|
40
|
+
range.setStartAfter(textNode);
|
|
41
|
+
range.collapse(true);
|
|
42
|
+
selection.removeAllRanges();
|
|
43
|
+
selection.addRange(range);
|
|
44
|
+
}
|
|
31
45
|
|
|
32
46
|
exports.cn = cn;
|
|
33
47
|
exports.formatTimestamp = formatTimestamp;
|
|
48
|
+
exports.handlePastePlainText = handlePastePlainText;
|
|
34
49
|
//# sourceMappingURL=utils.js.map
|
|
35
50
|
//# sourceMappingURL=utils.js.map
|
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;
|
|
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;AAGO,SAAS,qBAAqB,CAAA,EAAsC;AACzE,EAAA,CAAA,CAAE,cAAA,EAAe;AACjB,EAAA,MAAM,IAAA,GAAO,CAAA,CAAE,aAAA,CAAc,OAAA,CAAQ,YAAY,CAAA;AACjD,EAAA,MAAM,SAAA,GAAY,OAAO,YAAA,EAAa;AACtC,EAAA,IAAI,CAAC,SAAA,IAAa,CAAC,SAAA,CAAU,UAAA,EAAY;AAEzC,EAAA,SAAA,CAAU,kBAAA,EAAmB;AAE7B,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,cAAA,CAAe,IAAI,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,UAAA,CAAW,CAAC,CAAA;AACpC,EAAA,KAAA,CAAM,WAAW,QAAQ,CAAA;AAEzB,EAAA,KAAA,CAAM,cAAc,QAAQ,CAAA;AAC5B,EAAA,KAAA,CAAM,SAAS,IAAI,CAAA;AACnB,EAAA,SAAA,CAAU,eAAA,EAAgB;AAC1B,EAAA,SAAA,CAAU,SAAS,KAAK,CAAA;AAC1B","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} \n\n// Only allow pasting plain text, prohibit style content\nexport function handlePastePlainText(e: React.ClipboardEvent<HTMLElement>) {\n e.preventDefault();\n const text = e.clipboardData.getData('text/plain');\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount) return;\n // Delete the current selected content\n selection.deleteFromDocument();\n // Insert plain text\n const textNode = document.createTextNode(text);\n const range = selection.getRangeAt(0);\n range.insertNode(textNode);\n // Move the cursor to the inserted text\n range.setStartAfter(textNode);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n}"]}
|
package/dist/utils.mjs
CHANGED
|
@@ -26,7 +26,21 @@ function formatTimestamp(timestamp, formatter) {
|
|
|
26
26
|
return fail;
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
+
function handlePastePlainText(e) {
|
|
30
|
+
e.preventDefault();
|
|
31
|
+
const text = e.clipboardData.getData("text/plain");
|
|
32
|
+
const selection = window.getSelection();
|
|
33
|
+
if (!selection || !selection.rangeCount) return;
|
|
34
|
+
selection.deleteFromDocument();
|
|
35
|
+
const textNode = document.createTextNode(text);
|
|
36
|
+
const range = selection.getRangeAt(0);
|
|
37
|
+
range.insertNode(textNode);
|
|
38
|
+
range.setStartAfter(textNode);
|
|
39
|
+
range.collapse(true);
|
|
40
|
+
selection.removeAllRanges();
|
|
41
|
+
selection.addRange(range);
|
|
42
|
+
}
|
|
29
43
|
|
|
30
|
-
export { cn, formatTimestamp };
|
|
44
|
+
export { cn, formatTimestamp, handlePastePlainText };
|
|
31
45
|
//# sourceMappingURL=utils.mjs.map
|
|
32
46
|
//# sourceMappingURL=utils.mjs.map
|
package/dist/utils.mjs.map
CHANGED
|
@@ -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;
|
|
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;AAGO,SAAS,qBAAqB,CAAA,EAAsC;AACzE,EAAA,CAAA,CAAE,cAAA,EAAe;AACjB,EAAA,MAAM,IAAA,GAAO,CAAA,CAAE,aAAA,CAAc,OAAA,CAAQ,YAAY,CAAA;AACjD,EAAA,MAAM,SAAA,GAAY,OAAO,YAAA,EAAa;AACtC,EAAA,IAAI,CAAC,SAAA,IAAa,CAAC,SAAA,CAAU,UAAA,EAAY;AAEzC,EAAA,SAAA,CAAU,kBAAA,EAAmB;AAE7B,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,cAAA,CAAe,IAAI,CAAA;AAC7C,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,UAAA,CAAW,CAAC,CAAA;AACpC,EAAA,KAAA,CAAM,WAAW,QAAQ,CAAA;AAEzB,EAAA,KAAA,CAAM,cAAc,QAAQ,CAAA;AAC5B,EAAA,KAAA,CAAM,SAAS,IAAI,CAAA;AACnB,EAAA,SAAA,CAAU,eAAA,EAAgB;AAC1B,EAAA,SAAA,CAAU,SAAS,KAAK,CAAA;AAC1B","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} \n\n// Only allow pasting plain text, prohibit style content\nexport function handlePastePlainText(e: React.ClipboardEvent<HTMLElement>) {\n e.preventDefault();\n const text = e.clipboardData.getData('text/plain');\n const selection = window.getSelection();\n if (!selection || !selection.rangeCount) return;\n // Delete the current selected content\n selection.deleteFromDocument();\n // Insert plain text\n const textNode = document.createTextNode(text);\n const range = selection.getRangeAt(0);\n range.insertNode(textNode);\n // Move the cursor to the inserted text\n range.setStartAfter(textNode);\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n}"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@windrun-huaiin/lib",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.3.1",
|
|
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.
|
|
50
|
+
"lucide-react": "^0.525.0"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
53
|
"typescript": "^5.8.3",
|
|
@@ -35,6 +35,7 @@ export {
|
|
|
35
35
|
Eye,
|
|
36
36
|
ExternalLink,
|
|
37
37
|
Facebook,
|
|
38
|
+
Shield,
|
|
38
39
|
File,
|
|
39
40
|
FileDown,
|
|
40
41
|
FileInput,
|
|
@@ -47,11 +48,13 @@ export {
|
|
|
47
48
|
GitPullRequestArrow,
|
|
48
49
|
Globe,
|
|
49
50
|
GlobeLock,
|
|
51
|
+
Grip,
|
|
50
52
|
GripVertical,
|
|
51
53
|
HandHeart,
|
|
52
54
|
Handshake,
|
|
53
55
|
Highlighter,
|
|
54
56
|
HousePlus,
|
|
57
|
+
Infinity,
|
|
55
58
|
Info,
|
|
56
59
|
ImageDown,
|
|
57
60
|
ImageOff,
|
|
@@ -69,15 +72,18 @@ export {
|
|
|
69
72
|
Mail,
|
|
70
73
|
MoreHorizontal,
|
|
71
74
|
MousePointerClick,
|
|
75
|
+
Palette,
|
|
72
76
|
PanelLeft,
|
|
73
77
|
PanelsTopLeft,
|
|
78
|
+
PawPrint,
|
|
74
79
|
Pencil,
|
|
75
80
|
Pi,
|
|
76
|
-
|
|
81
|
+
QrCode,
|
|
77
82
|
ReceiptText,
|
|
78
83
|
RefreshCcw,
|
|
79
84
|
Regex,
|
|
80
85
|
Replace,
|
|
86
|
+
Rocket,
|
|
81
87
|
Rss,
|
|
82
88
|
Scale,
|
|
83
89
|
Search,
|
|
@@ -85,6 +91,7 @@ export {
|
|
|
85
91
|
Share,
|
|
86
92
|
Sigma,
|
|
87
93
|
ShieldUser,
|
|
94
|
+
Sprout,
|
|
88
95
|
SquareDashedBottomCode,
|
|
89
96
|
SquareTerminal,
|
|
90
97
|
Server,
|
|
@@ -94,6 +101,7 @@ export {
|
|
|
94
101
|
Tablets,
|
|
95
102
|
Terminal,
|
|
96
103
|
Twitter,
|
|
104
|
+
Workflow,
|
|
97
105
|
X,
|
|
98
106
|
Zap,
|
|
99
107
|
} from "lucide-react";
|
package/src/utils.ts
CHANGED
|
@@ -34,4 +34,23 @@ export function formatTimestamp(timestamp: string, formatter: string) {
|
|
|
34
34
|
console.error("Error formatting date:", error);
|
|
35
35
|
return fail;
|
|
36
36
|
}
|
|
37
|
-
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// Only allow pasting plain text, prohibit style content
|
|
40
|
+
export function handlePastePlainText(e: React.ClipboardEvent<HTMLElement>) {
|
|
41
|
+
e.preventDefault();
|
|
42
|
+
const text = e.clipboardData.getData('text/plain');
|
|
43
|
+
const selection = window.getSelection();
|
|
44
|
+
if (!selection || !selection.rangeCount) return;
|
|
45
|
+
// Delete the current selected content
|
|
46
|
+
selection.deleteFromDocument();
|
|
47
|
+
// Insert plain text
|
|
48
|
+
const textNode = document.createTextNode(text);
|
|
49
|
+
const range = selection.getRangeAt(0);
|
|
50
|
+
range.insertNode(textNode);
|
|
51
|
+
// Move the cursor to the inserted text
|
|
52
|
+
range.setStartAfter(textNode);
|
|
53
|
+
range.collapse(true);
|
|
54
|
+
selection.removeAllRanges();
|
|
55
|
+
selection.addRange(range);
|
|
56
|
+
}
|