@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.
Files changed (43) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +30 -0
  3. package/dist/components/LearnMDProvider.d.ts +33 -0
  4. package/dist/components/LearnMDProvider.d.ts.map +1 -0
  5. package/dist/components/LearnMDProvider.js +16 -0
  6. package/dist/components/LearnMDProvider.js.map +1 -0
  7. package/dist/gamification/index.d.ts +77 -0
  8. package/dist/gamification/index.d.ts.map +1 -0
  9. package/dist/gamification/index.js +402 -0
  10. package/dist/gamification/index.js.map +1 -0
  11. package/dist/i18n/index.d.ts +119 -0
  12. package/dist/i18n/index.d.ts.map +1 -0
  13. package/dist/i18n/index.js +261 -0
  14. package/dist/i18n/index.js.map +1 -0
  15. package/dist/index.d.ts +81 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +77 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/parser/index.d.ts +57 -0
  20. package/dist/parser/index.d.ts.map +1 -0
  21. package/dist/parser/index.js +182 -0
  22. package/dist/parser/index.js.map +1 -0
  23. package/dist/plugins/index.d.ts +150 -0
  24. package/dist/plugins/index.d.ts.map +1 -0
  25. package/dist/plugins/index.js +291 -0
  26. package/dist/plugins/index.js.map +1 -0
  27. package/dist/plugins/pdf/index.d.ts +8 -0
  28. package/dist/plugins/pdf/index.d.ts.map +1 -0
  29. package/dist/plugins/pdf/index.js +53 -0
  30. package/dist/plugins/pdf/index.js.map +1 -0
  31. package/dist/router/index.d.ts +111 -0
  32. package/dist/router/index.d.ts.map +1 -0
  33. package/dist/router/index.js +268 -0
  34. package/dist/router/index.js.map +1 -0
  35. package/dist/storage/index.d.ts +110 -0
  36. package/dist/storage/index.d.ts.map +1 -0
  37. package/dist/storage/index.js +390 -0
  38. package/dist/storage/index.js.map +1 -0
  39. package/dist/types/index.d.ts +283 -0
  40. package/dist/types/index.d.ts.map +1 -0
  41. package/dist/types/index.js +2 -0
  42. package/dist/types/index.js.map +1 -0
  43. 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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"}
@@ -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"}