@learnmd/core 0.0.1-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +30 -0
- package/dist/components/LearnMDProvider.d.ts +33 -0
- package/dist/components/LearnMDProvider.d.ts.map +1 -0
- package/dist/components/LearnMDProvider.js +16 -0
- package/dist/components/LearnMDProvider.js.map +1 -0
- package/dist/gamification/index.d.ts +77 -0
- package/dist/gamification/index.d.ts.map +1 -0
- package/dist/gamification/index.js +402 -0
- package/dist/gamification/index.js.map +1 -0
- package/dist/i18n/index.d.ts +119 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +261 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/index.d.ts +81 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/index.d.ts +57 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +182 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/plugins/index.d.ts +150 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +291 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/pdf/index.d.ts +8 -0
- package/dist/plugins/pdf/index.d.ts.map +1 -0
- package/dist/plugins/pdf/index.js +53 -0
- package/dist/plugins/pdf/index.js.map +1 -0
- package/dist/router/index.d.ts +111 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +268 -0
- package/dist/router/index.js.map +1 -0
- package/dist/storage/index.d.ts +110 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +390 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/types/index.d.ts +283 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import type { I18nAdapter, I18nConfig } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* i18n Manager class
|
|
4
|
+
*/
|
|
5
|
+
export declare class I18nManager implements I18nAdapter {
|
|
6
|
+
private _currentLanguage;
|
|
7
|
+
private readonly _availableLanguages;
|
|
8
|
+
private readonly _translations;
|
|
9
|
+
private readonly _config;
|
|
10
|
+
constructor(config?: I18nConfig);
|
|
11
|
+
get currentLanguage(): string;
|
|
12
|
+
get availableLanguages(): string[];
|
|
13
|
+
/**
|
|
14
|
+
* Set the current language
|
|
15
|
+
*/
|
|
16
|
+
setLanguage(lang: string): void;
|
|
17
|
+
/**
|
|
18
|
+
* Add translations for a language
|
|
19
|
+
*/
|
|
20
|
+
addTranslations(lang: string, translations: Record<string, string>): void;
|
|
21
|
+
/**
|
|
22
|
+
* Translate a key to current language
|
|
23
|
+
*/
|
|
24
|
+
translate(key: string, lang?: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Translate an object with translatable strings
|
|
27
|
+
*/
|
|
28
|
+
translateObject<T extends Record<string, unknown>>(obj: T, lang?: string): T;
|
|
29
|
+
/**
|
|
30
|
+
* Check if a value is a translated string
|
|
31
|
+
*/
|
|
32
|
+
private isTranslatedString;
|
|
33
|
+
/**
|
|
34
|
+
* Get paragraph-level translation
|
|
35
|
+
* Format: <Paragraph i18n="key"><en>Text</en><es>Texto</es></Paragraph>
|
|
36
|
+
*/
|
|
37
|
+
getParagraphTranslation(paragraphContent: string): string;
|
|
38
|
+
/**
|
|
39
|
+
* Extract all translatable paragraphs from content
|
|
40
|
+
*/
|
|
41
|
+
extractTranslatableParagraphs(content: string): Array<{
|
|
42
|
+
key: string;
|
|
43
|
+
translations: Record<string, string>;
|
|
44
|
+
}>;
|
|
45
|
+
/**
|
|
46
|
+
* Process content and replace translatable paragraphs
|
|
47
|
+
*/
|
|
48
|
+
processContent(content: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* Event listener for language changes
|
|
51
|
+
*/
|
|
52
|
+
private emitLanguageChange;
|
|
53
|
+
/**
|
|
54
|
+
* Subscribe to language changes
|
|
55
|
+
*/
|
|
56
|
+
onLanguageChange(callback: (lang: string) => void): () => void;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Create i18n instance with configuration
|
|
60
|
+
*/
|
|
61
|
+
export declare function createI18n(config?: I18nConfig): I18nManager;
|
|
62
|
+
/**
|
|
63
|
+
* Common translation keys
|
|
64
|
+
*/
|
|
65
|
+
export declare const COMMON_TRANSLATIONS: {
|
|
66
|
+
en: {
|
|
67
|
+
'nav.home': string;
|
|
68
|
+
'nav.courses': string;
|
|
69
|
+
'nav.progress': string;
|
|
70
|
+
'nav.settings': string;
|
|
71
|
+
'course.start': string;
|
|
72
|
+
'course.continue': string;
|
|
73
|
+
'course.completed': string;
|
|
74
|
+
'lesson.next': string;
|
|
75
|
+
'lesson.previous': string;
|
|
76
|
+
'quiz.submit': string;
|
|
77
|
+
'quiz.correct': string;
|
|
78
|
+
'quiz.incorrect': string;
|
|
79
|
+
'quiz.retry': string;
|
|
80
|
+
'progress.completed': string;
|
|
81
|
+
'progress.of': string;
|
|
82
|
+
'search.placeholder': string;
|
|
83
|
+
'search.noResults': string;
|
|
84
|
+
'badge.earned': string;
|
|
85
|
+
'points.earned': string;
|
|
86
|
+
'theme.light': string;
|
|
87
|
+
'theme.dark': string;
|
|
88
|
+
'theme.system': string;
|
|
89
|
+
};
|
|
90
|
+
es: {
|
|
91
|
+
'nav.home': string;
|
|
92
|
+
'nav.courses': string;
|
|
93
|
+
'nav.progress': string;
|
|
94
|
+
'nav.settings': string;
|
|
95
|
+
'course.start': string;
|
|
96
|
+
'course.continue': string;
|
|
97
|
+
'course.completed': string;
|
|
98
|
+
'lesson.next': string;
|
|
99
|
+
'lesson.previous': string;
|
|
100
|
+
'quiz.submit': string;
|
|
101
|
+
'quiz.correct': string;
|
|
102
|
+
'quiz.incorrect': string;
|
|
103
|
+
'quiz.retry': string;
|
|
104
|
+
'progress.completed': string;
|
|
105
|
+
'progress.of': string;
|
|
106
|
+
'search.placeholder': string;
|
|
107
|
+
'search.noResults': string;
|
|
108
|
+
'badge.earned': string;
|
|
109
|
+
'points.earned': string;
|
|
110
|
+
'theme.light': string;
|
|
111
|
+
'theme.dark': string;
|
|
112
|
+
'theme.system': string;
|
|
113
|
+
};
|
|
114
|
+
};
|
|
115
|
+
/**
|
|
116
|
+
* Initialize i18n with common translations
|
|
117
|
+
*/
|
|
118
|
+
export declare function initializeI18n(defaultLanguage?: string): I18nManager;
|
|
119
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAoB,UAAU,EAAE,MAAM,UAAU,CAAC;AAW1E;;GAEG;AACH,qBAAa,WAAY,YAAW,WAAW;IAC7C,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAW;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmB;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA2B;gBAEvC,MAAM,CAAC,EAAE,UAAU;IAY/B,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,IAAI,kBAAkB,IAAI,MAAM,EAAE,CAEjC;IAED;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAW/B;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAWzE;;OAEG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAoB7C;;OAEG;IACH,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,CAAC;IAiB5E;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;;OAGG;IACH,uBAAuB,CAAC,gBAAgB,EAAE,MAAM,GAAG,MAAM;IAoBzD;;OAEG;IACH,6BAA6B,CAC3B,OAAO,EAAE,MAAM,GACd,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAuB/D;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAUvC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;OAEG;IACH,gBAAgB,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI;CAe/D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,WAAW,CAE3D;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiD/B,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,eAAe,SAAO,GAAG,WAAW,CAYlE"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* i18n Manager class
|
|
3
|
+
*/
|
|
4
|
+
export class I18nManager {
|
|
5
|
+
constructor(config) {
|
|
6
|
+
Object.defineProperty(this, "_currentLanguage", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
writable: true,
|
|
10
|
+
value: void 0
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(this, "_availableLanguages", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
configurable: true,
|
|
15
|
+
writable: true,
|
|
16
|
+
value: void 0
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(this, "_translations", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
configurable: true,
|
|
21
|
+
writable: true,
|
|
22
|
+
value: void 0
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(this, "_config", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
configurable: true,
|
|
27
|
+
writable: true,
|
|
28
|
+
value: null
|
|
29
|
+
});
|
|
30
|
+
this._currentLanguage = config?.defaultLanguage || 'en';
|
|
31
|
+
this._availableLanguages = config?.availableLanguages || ['en'];
|
|
32
|
+
this._translations = {};
|
|
33
|
+
if (config?.translations) {
|
|
34
|
+
this._translations = config.translations;
|
|
35
|
+
}
|
|
36
|
+
this._config = config || null;
|
|
37
|
+
}
|
|
38
|
+
get currentLanguage() {
|
|
39
|
+
return this._currentLanguage;
|
|
40
|
+
}
|
|
41
|
+
get availableLanguages() {
|
|
42
|
+
return this._availableLanguages;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Set the current language
|
|
46
|
+
*/
|
|
47
|
+
setLanguage(lang) {
|
|
48
|
+
if (this._availableLanguages.includes(lang)) {
|
|
49
|
+
this._currentLanguage = lang;
|
|
50
|
+
this.emitLanguageChange(lang);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
console.warn(`Language "${lang}" is not available. Available: ${this._availableLanguages.join(', ')}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Add translations for a language
|
|
58
|
+
*/
|
|
59
|
+
addTranslations(lang, translations) {
|
|
60
|
+
if (!this._translations[lang]) {
|
|
61
|
+
this._translations[lang] = {};
|
|
62
|
+
}
|
|
63
|
+
this._translations[lang] = { ...this._translations[lang], ...translations };
|
|
64
|
+
if (!this._availableLanguages.includes(lang)) {
|
|
65
|
+
this._availableLanguages.push(lang);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Translate a key to current language
|
|
70
|
+
*/
|
|
71
|
+
translate(key, lang) {
|
|
72
|
+
const targetLang = lang || this._currentLanguage;
|
|
73
|
+
const translation = this._translations[targetLang]?.[key];
|
|
74
|
+
if (translation) {
|
|
75
|
+
return translation;
|
|
76
|
+
}
|
|
77
|
+
// Fallback to default language
|
|
78
|
+
const defaultLang = this._config?.defaultLanguage || 'en';
|
|
79
|
+
const fallback = this._translations[defaultLang]?.[key];
|
|
80
|
+
if (fallback) {
|
|
81
|
+
return fallback;
|
|
82
|
+
}
|
|
83
|
+
// Return key if no translation found
|
|
84
|
+
return key;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Translate an object with translatable strings
|
|
88
|
+
*/
|
|
89
|
+
translateObject(obj, lang) {
|
|
90
|
+
const targetLang = lang || this._currentLanguage;
|
|
91
|
+
const result = {};
|
|
92
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
93
|
+
if (this.isTranslatedString(value)) {
|
|
94
|
+
result[key] = value[targetLang] || value[Object.keys(value)[0]];
|
|
95
|
+
}
|
|
96
|
+
else if (typeof value === 'object' && value !== null) {
|
|
97
|
+
result[key] = this.translateObject(value, lang);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
result[key] = value;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Check if a value is a translated string
|
|
107
|
+
*/
|
|
108
|
+
isTranslatedString(value) {
|
|
109
|
+
if (typeof value !== 'object' || value === null) {
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
const keys = Object.keys(value);
|
|
113
|
+
return keys.length > 0 && keys.every((k) => k.length === 2); // Language codes are typically 2 chars
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get paragraph-level translation
|
|
117
|
+
* Format: <Paragraph i18n="key"><en>Text</en><es>Texto</es></Paragraph>
|
|
118
|
+
*/
|
|
119
|
+
getParagraphTranslation(paragraphContent) {
|
|
120
|
+
const tagContents = `[^<]*(?:<(?!<\\/${this._currentLanguage}>)[^<]*)*`;
|
|
121
|
+
const langRegex = new RegExp(`<${this._currentLanguage}>(${tagContents})<\\/${this._currentLanguage}>`, "g");
|
|
122
|
+
const match = langRegex.exec(paragraphContent);
|
|
123
|
+
if (match) {
|
|
124
|
+
return match[1].trim();
|
|
125
|
+
}
|
|
126
|
+
// Fallback to first available language
|
|
127
|
+
const fallbackRegex = /<(\w{2})>([^<]*(?:<(?!<\/\1>)[^<]*)*)<\/\1>/;
|
|
128
|
+
const fallbackMatch = fallbackRegex.exec(paragraphContent);
|
|
129
|
+
if (fallbackMatch) {
|
|
130
|
+
return fallbackMatch[2].trim();
|
|
131
|
+
}
|
|
132
|
+
return paragraphContent;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Extract all translatable paragraphs from content
|
|
136
|
+
*/
|
|
137
|
+
extractTranslatableParagraphs(content) {
|
|
138
|
+
const paragraphs = [];
|
|
139
|
+
const paragraphRegex = /<Paragraph\s+i18n=["']([^"']*)["']\s*>([^<]*(?:<(?!<\/Paragraph>)[^<]*)*)<\/Paragraph>/g;
|
|
140
|
+
let match;
|
|
141
|
+
while ((match = paragraphRegex.exec(content)) !== null) {
|
|
142
|
+
const key = match[1];
|
|
143
|
+
const content_ = match[2];
|
|
144
|
+
const translations = {};
|
|
145
|
+
const langRegex = /<(\w{2})>([\s\S]*?)<\/\1>/g;
|
|
146
|
+
let langMatch;
|
|
147
|
+
while ((langMatch = langRegex.exec(content_)) !== null) {
|
|
148
|
+
translations[langMatch[1]] = langMatch[2].trim();
|
|
149
|
+
}
|
|
150
|
+
paragraphs.push({ key, translations });
|
|
151
|
+
}
|
|
152
|
+
return paragraphs;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Process content and replace translatable paragraphs
|
|
156
|
+
*/
|
|
157
|
+
processContent(content) {
|
|
158
|
+
return content.replace(/<Paragraph\s+i18n=["']([^"']*)["']\s*>([^<]*(?:<(?!<\/Paragraph>)[^<]*)*)<\/Paragraph>/g, (_match, key, content_) => {
|
|
159
|
+
const translated = this.getParagraphTranslation(content_);
|
|
160
|
+
return `<p data-i18n="${key}">${translated}</p>`;
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Event listener for language changes
|
|
165
|
+
*/
|
|
166
|
+
emitLanguageChange(lang) {
|
|
167
|
+
if (typeof window !== 'undefined') {
|
|
168
|
+
window.dispatchEvent(new CustomEvent('learnmd:languageChange', { detail: { language: lang } }));
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Subscribe to language changes
|
|
173
|
+
*/
|
|
174
|
+
onLanguageChange(callback) {
|
|
175
|
+
const handler = (event) => {
|
|
176
|
+
callback(event.detail.language);
|
|
177
|
+
};
|
|
178
|
+
if (typeof window !== 'undefined') {
|
|
179
|
+
window.addEventListener('learnmd:languageChange', handler);
|
|
180
|
+
}
|
|
181
|
+
return () => {
|
|
182
|
+
if (typeof window !== 'undefined') {
|
|
183
|
+
window.removeEventListener('learnmd:languageChange', handler);
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Create i18n instance with configuration
|
|
190
|
+
*/
|
|
191
|
+
export function createI18n(config) {
|
|
192
|
+
return new I18nManager(config);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Common translation keys
|
|
196
|
+
*/
|
|
197
|
+
export const COMMON_TRANSLATIONS = {
|
|
198
|
+
en: {
|
|
199
|
+
'nav.home': 'Home',
|
|
200
|
+
'nav.courses': 'Courses',
|
|
201
|
+
'nav.progress': 'Progress',
|
|
202
|
+
'nav.settings': 'Settings',
|
|
203
|
+
'course.start': 'Start Course',
|
|
204
|
+
'course.continue': 'Continue',
|
|
205
|
+
'course.completed': 'Completed',
|
|
206
|
+
'lesson.next': 'Next Lesson',
|
|
207
|
+
'lesson.previous': 'Previous Lesson',
|
|
208
|
+
'quiz.submit': 'Submit Answer',
|
|
209
|
+
'quiz.correct': 'Correct!',
|
|
210
|
+
'quiz.incorrect': 'Incorrect',
|
|
211
|
+
'quiz.retry': 'Try Again',
|
|
212
|
+
'progress.completed': 'Completed',
|
|
213
|
+
'progress.of': 'of',
|
|
214
|
+
'search.placeholder': 'Search courses...',
|
|
215
|
+
'search.noResults': 'No results found',
|
|
216
|
+
'badge.earned': 'Badge Earned!',
|
|
217
|
+
'points.earned': 'Points Earned',
|
|
218
|
+
'theme.light': 'Light',
|
|
219
|
+
'theme.dark': 'Dark',
|
|
220
|
+
'theme.system': 'System',
|
|
221
|
+
},
|
|
222
|
+
es: {
|
|
223
|
+
'nav.home': 'Inicio',
|
|
224
|
+
'nav.courses': 'Cursos',
|
|
225
|
+
'nav.progress': 'Progreso',
|
|
226
|
+
'nav.settings': 'Configuración',
|
|
227
|
+
'course.start': 'Iniciar Curso',
|
|
228
|
+
'course.continue': 'Continuar',
|
|
229
|
+
'course.completed': 'Completado',
|
|
230
|
+
'lesson.next': 'Siguiente Lección',
|
|
231
|
+
'lesson.previous': 'Lección Anterior',
|
|
232
|
+
'quiz.submit': 'Enviar Respuesta',
|
|
233
|
+
'quiz.correct': '¡Correcto!',
|
|
234
|
+
'quiz.incorrect': 'Incorrecto',
|
|
235
|
+
'quiz.retry': 'Intentar de Nuevo',
|
|
236
|
+
'progress.completed': 'Completado',
|
|
237
|
+
'progress.of': 'de',
|
|
238
|
+
'search.placeholder': 'Buscar cursos...',
|
|
239
|
+
'search.noResults': 'No se encontraron resultados',
|
|
240
|
+
'badge.earned': '¡Insignia Obtenida!',
|
|
241
|
+
'points.earned': 'Puntos Obtenidos',
|
|
242
|
+
'theme.light': 'Claro',
|
|
243
|
+
'theme.dark': 'Oscuro',
|
|
244
|
+
'theme.system': 'Sistema',
|
|
245
|
+
},
|
|
246
|
+
};
|
|
247
|
+
/**
|
|
248
|
+
* Initialize i18n with common translations
|
|
249
|
+
*/
|
|
250
|
+
export function initializeI18n(defaultLanguage = 'en') {
|
|
251
|
+
const i18n = createI18n({
|
|
252
|
+
defaultLanguage,
|
|
253
|
+
availableLanguages: ['en', 'es'],
|
|
254
|
+
});
|
|
255
|
+
// Add common translations
|
|
256
|
+
Object.entries(COMMON_TRANSLATIONS).forEach(([lang, translations]) => {
|
|
257
|
+
i18n.addTranslations(lang, translations);
|
|
258
|
+
});
|
|
259
|
+
return i18n;
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export type * from './types/index.js';
|
|
2
|
+
export * from './parser/index.js';
|
|
3
|
+
export * from './i18n/index.js';
|
|
4
|
+
export * from './router/index.js';
|
|
5
|
+
export * from './storage/index.js';
|
|
6
|
+
export * from './gamification/index.js';
|
|
7
|
+
export * from './plugins/index.js';
|
|
8
|
+
export * from './plugins/pdf/index.js';
|
|
9
|
+
export * from './components/LearnMDProvider.js';
|
|
10
|
+
import { I18nManager } from './i18n/index.js';
|
|
11
|
+
import { StorageManager } from './storage/index.js';
|
|
12
|
+
import { GamificationManager } from './gamification/index.js';
|
|
13
|
+
import { RouterManager } from './router/index.js';
|
|
14
|
+
/**
|
|
15
|
+
* LearnMD Core - Main entry point
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import {
|
|
20
|
+
* parseLesson,
|
|
21
|
+
* createI18n,
|
|
22
|
+
* createStorageManager,
|
|
23
|
+
* createGamificationManager,
|
|
24
|
+
* createRouterManager
|
|
25
|
+
* } from '@learnmd/core';
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* Core version
|
|
30
|
+
*/
|
|
31
|
+
export declare const VERSION = "0.0.1";
|
|
32
|
+
/**
|
|
33
|
+
* Initialize LearnMD core with default configuration
|
|
34
|
+
*/
|
|
35
|
+
export interface LearnMDConfig {
|
|
36
|
+
title?: string;
|
|
37
|
+
description?: string;
|
|
38
|
+
defaultLanguage?: string;
|
|
39
|
+
availableLanguages?: string[];
|
|
40
|
+
basePath?: string;
|
|
41
|
+
storagePrefix?: string;
|
|
42
|
+
enableGamification?: boolean;
|
|
43
|
+
enableAnalytics?: boolean;
|
|
44
|
+
theme?: {
|
|
45
|
+
primaryColor?: string;
|
|
46
|
+
darkMode?: boolean;
|
|
47
|
+
};
|
|
48
|
+
gamification?: {
|
|
49
|
+
pointsPerLesson?: number;
|
|
50
|
+
pointsPerQuiz?: number;
|
|
51
|
+
badges?: Array<{
|
|
52
|
+
id: string;
|
|
53
|
+
name: string;
|
|
54
|
+
icon: string;
|
|
55
|
+
}>;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export declare function defineConfig(config: LearnMDConfig): LearnMDConfig;
|
|
59
|
+
export declare function createLearnMD(config?: LearnMDConfig): {
|
|
60
|
+
i18n: I18nManager;
|
|
61
|
+
storage: StorageManager;
|
|
62
|
+
gamification: GamificationManager | null;
|
|
63
|
+
router: RouterManager;
|
|
64
|
+
config: {
|
|
65
|
+
defaultLanguage: string;
|
|
66
|
+
basePath: string;
|
|
67
|
+
storagePrefix: string;
|
|
68
|
+
enableGamification: boolean;
|
|
69
|
+
enableAnalytics: boolean;
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
export { LearnMDProvider, useLearnMD } from './components/LearnMDProvider.js';
|
|
73
|
+
/**
|
|
74
|
+
* Default export
|
|
75
|
+
*/
|
|
76
|
+
declare const _default: {
|
|
77
|
+
createLearnMD: typeof createLearnMD;
|
|
78
|
+
VERSION: string;
|
|
79
|
+
};
|
|
80
|
+
export default _default;
|
|
81
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,mBAAmB,kBAAkB,CAAC;AAGtC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,iBAAiB,CAAC;AAGhC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,yBAAyB,CAAC;AAGxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,iCAAiC,CAAC;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,YAAY,CAAC,EAAE;QACb,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,MAAM,CAAC,EAAE,KAAK,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC5D,CAAC;CACH;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAEjE;AAED,wBAAgB,aAAa,CAAC,MAAM,GAAE,aAAkB;;;;;;;;;;;;EAqCvD;AAED,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE9E;;GAEG;;;;;AACH,wBAGE"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
// Parser
|
|
2
|
+
export * from './parser/index.js';
|
|
3
|
+
// i18n
|
|
4
|
+
export * from './i18n/index.js';
|
|
5
|
+
// Router
|
|
6
|
+
export * from './router/index.js';
|
|
7
|
+
// Storage
|
|
8
|
+
export * from './storage/index.js';
|
|
9
|
+
// Gamification
|
|
10
|
+
export * from './gamification/index.js';
|
|
11
|
+
// Plugins
|
|
12
|
+
export * from './plugins/index.js';
|
|
13
|
+
export * from './plugins/pdf/index.js';
|
|
14
|
+
// LearnMD Context
|
|
15
|
+
export * from './components/LearnMDProvider.js';
|
|
16
|
+
// Import class implementations for createLearnMD
|
|
17
|
+
import { I18nManager } from './i18n/index.js';
|
|
18
|
+
import { StorageManager } from './storage/index.js';
|
|
19
|
+
import { GamificationManager } from './gamification/index.js';
|
|
20
|
+
import { RouterManager } from './router/index.js';
|
|
21
|
+
/**
|
|
22
|
+
* LearnMD Core - Main entry point
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import {
|
|
27
|
+
* parseLesson,
|
|
28
|
+
* createI18n,
|
|
29
|
+
* createStorageManager,
|
|
30
|
+
* createGamificationManager,
|
|
31
|
+
* createRouterManager
|
|
32
|
+
* } from '@learnmd/core';
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
/**
|
|
36
|
+
* Core version
|
|
37
|
+
*/
|
|
38
|
+
export const VERSION = '0.0.1';
|
|
39
|
+
export function defineConfig(config) {
|
|
40
|
+
return config;
|
|
41
|
+
}
|
|
42
|
+
export function createLearnMD(config = {}) {
|
|
43
|
+
const { defaultLanguage = 'en', basePath = '', storagePrefix = 'learnmd', enableGamification = true, enableAnalytics = false, } = config;
|
|
44
|
+
// Initialize i18n
|
|
45
|
+
const i18n = new I18nManager({
|
|
46
|
+
defaultLanguage,
|
|
47
|
+
availableLanguages: [defaultLanguage],
|
|
48
|
+
});
|
|
49
|
+
// Initialize storage
|
|
50
|
+
const storage = new StorageManager();
|
|
51
|
+
// Initialize gamification
|
|
52
|
+
const gamification = enableGamification ? new GamificationManager() : null;
|
|
53
|
+
// Initialize router
|
|
54
|
+
const router = new RouterManager();
|
|
55
|
+
return {
|
|
56
|
+
i18n,
|
|
57
|
+
storage,
|
|
58
|
+
gamification,
|
|
59
|
+
router,
|
|
60
|
+
config: {
|
|
61
|
+
defaultLanguage,
|
|
62
|
+
basePath,
|
|
63
|
+
storagePrefix,
|
|
64
|
+
enableGamification,
|
|
65
|
+
enableAnalytics,
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export { LearnMDProvider, useLearnMD } from './components/LearnMDProvider.js';
|
|
70
|
+
/**
|
|
71
|
+
* Default export
|
|
72
|
+
*/
|
|
73
|
+
export default {
|
|
74
|
+
createLearnMD,
|
|
75
|
+
VERSION,
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,SAAS;AACT,cAAc,mBAAmB,CAAC;AAElC,OAAO;AACP,cAAc,iBAAiB,CAAC;AAEhC,SAAS;AACT,cAAc,mBAAmB,CAAC;AAElC,UAAU;AACV,cAAc,oBAAoB,CAAC;AAEnC,eAAe;AACf,cAAc,yBAAyB,CAAC;AAExC,UAAU;AACV,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AAEvC,kBAAkB;AAClB,cAAc,iCAAiC,CAAC;AAEhD,iDAAiD;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAyB/B,MAAM,UAAU,YAAY,CAAC,MAAqB;IAChD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,SAAwB,EAAE;IACtD,MAAM,EACJ,eAAe,GAAG,IAAI,EACtB,QAAQ,GAAG,EAAE,EACb,aAAa,GAAG,SAAS,EACzB,kBAAkB,GAAG,IAAI,EACzB,eAAe,GAAG,KAAK,GACxB,GAAG,MAAM,CAAC;IAEX,kBAAkB;IAClB,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC;QAC3B,eAAe;QACf,kBAAkB,EAAE,CAAC,eAAe,CAAC;KACtC,CAAC,CAAC;IAEH,qBAAqB;IACrB,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IAErC,0BAA0B;IAC1B,MAAM,YAAY,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAE3E,oBAAoB;IACpB,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IAEnC,OAAO;QACL,IAAI;QACJ,OAAO;QACP,YAAY;QACZ,MAAM;QACN,MAAM,EAAE;YACN,eAAe;YACf,QAAQ;YACR,aAAa;YACb,kBAAkB;YAClB,eAAe;SAChB;KACF,CAAC;AACJ,CAAC;AAED,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAE9E;;GAEG;AACH,eAAe;IACb,aAAa;IACb,OAAO;CACR,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { Lesson, CourseFrontmatter, TranslatedString, LessonSection } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Parse Markdown content with frontmatter
|
|
4
|
+
*/
|
|
5
|
+
export declare function parseMarkdown(content: string): {
|
|
6
|
+
data: CourseFrontmatter;
|
|
7
|
+
content: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Extract translated string based on current language
|
|
11
|
+
*/
|
|
12
|
+
export declare function getTranslatedString(value: string | TranslatedString | undefined, lang: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Parse markdown to HTML
|
|
15
|
+
*/
|
|
16
|
+
export declare function markdownToHtml(markdown: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Extract sections (headings) from markdown content
|
|
19
|
+
*/
|
|
20
|
+
export declare function extractSections(markdown: string): LessonSection[];
|
|
21
|
+
/**
|
|
22
|
+
* Extract quiz from markdown content using custom syntax
|
|
23
|
+
*/
|
|
24
|
+
export declare function extractQuiz(markdown: string, slug: string): Lesson['quiz'];
|
|
25
|
+
/**
|
|
26
|
+
* Parse a complete lesson from markdown content
|
|
27
|
+
*/
|
|
28
|
+
export declare function parseLesson(slug: string, content: string, lang?: string): Lesson;
|
|
29
|
+
/**
|
|
30
|
+
* Parse multiple lessons into a course structure
|
|
31
|
+
*/
|
|
32
|
+
export interface ParseCourseOptions {
|
|
33
|
+
basePath: string;
|
|
34
|
+
defaultLanguage?: string;
|
|
35
|
+
}
|
|
36
|
+
export declare function parseCourse(lessons: Array<{
|
|
37
|
+
slug: string;
|
|
38
|
+
content: string;
|
|
39
|
+
}>, options: ParseCourseOptions): Promise<{
|
|
40
|
+
lessons: Lesson[];
|
|
41
|
+
}>;
|
|
42
|
+
/**
|
|
43
|
+
* Get all code blocks from markdown content
|
|
44
|
+
*/
|
|
45
|
+
export declare function extractCodeBlocks(markdown: string): Array<{
|
|
46
|
+
language: string;
|
|
47
|
+
code: string;
|
|
48
|
+
}>;
|
|
49
|
+
/**
|
|
50
|
+
* Extract embedded media from markdown content
|
|
51
|
+
*/
|
|
52
|
+
export declare function extractEmbeddedMedia(markdown: string): Array<{
|
|
53
|
+
type: 'video' | 'image' | 'audio';
|
|
54
|
+
url: string;
|
|
55
|
+
provider?: string;
|
|
56
|
+
}>;
|
|
57
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE3F;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAM3F;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,EAC5C,IAAI,EAAE,MAAM,GACX,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,aAAa,EAAE,CAqBjE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAyC1E;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,SAAO,GAAG,MAAM,CAoB9E;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAsB,WAAW,CAC/B,OAAO,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EACjD,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAUhC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAa7F;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;IAC5D,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC,CA6CD"}
|