@lionrapid/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (302) hide show
  1. package/README.md +106 -0
  2. package/dist/base/event-emitter.d.ts +91 -0
  3. package/dist/base/event-emitter.d.ts.map +1 -0
  4. package/dist/base/event-emitter.js +330 -0
  5. package/dist/base/event-emitter.js.map +1 -0
  6. package/dist/base/index.d.ts +5 -0
  7. package/dist/base/index.d.ts.map +1 -0
  8. package/dist/base/index.js +5 -0
  9. package/dist/base/index.js.map +1 -0
  10. package/dist/browser/auto-init.d.ts +57 -0
  11. package/dist/browser/auto-init.d.ts.map +1 -0
  12. package/dist/browser/auto-init.js +304 -0
  13. package/dist/browser/auto-init.js.map +1 -0
  14. package/dist/browser/auto-translator.d.ts +98 -0
  15. package/dist/browser/auto-translator.d.ts.map +1 -0
  16. package/dist/browser/auto-translator.js +218 -0
  17. package/dist/browser/auto-translator.js.map +1 -0
  18. package/dist/browser/block-extractor.d.ts +26 -0
  19. package/dist/browser/block-extractor.d.ts.map +1 -0
  20. package/dist/browser/block-extractor.js +143 -0
  21. package/dist/browser/block-extractor.js.map +1 -0
  22. package/dist/browser/dom-observer.d.ts +42 -0
  23. package/dist/browser/dom-observer.d.ts.map +1 -0
  24. package/dist/browser/dom-observer.js +109 -0
  25. package/dist/browser/dom-observer.js.map +1 -0
  26. package/dist/browser/editor/editor-api.d.ts +67 -0
  27. package/dist/browser/editor/editor-api.d.ts.map +1 -0
  28. package/dist/browser/editor/editor-api.js +233 -0
  29. package/dist/browser/editor/editor-api.js.map +1 -0
  30. package/dist/browser/editor/editor-init.d.ts +11 -0
  31. package/dist/browser/editor/editor-init.d.ts.map +1 -0
  32. package/dist/browser/editor/editor-init.js +181 -0
  33. package/dist/browser/editor/editor-init.js.map +1 -0
  34. package/dist/browser/editor/editor-styles.d.ts +6 -0
  35. package/dist/browser/editor/editor-styles.d.ts.map +1 -0
  36. package/dist/browser/editor/editor-styles.js +419 -0
  37. package/dist/browser/editor/editor-styles.js.map +1 -0
  38. package/dist/browser/editor/inspector.d.ts +22 -0
  39. package/dist/browser/editor/inspector.d.ts.map +1 -0
  40. package/dist/browser/editor/inspector.js +125 -0
  41. package/dist/browser/editor/inspector.js.map +1 -0
  42. package/dist/browser/editor/key-resolver.d.ts +19 -0
  43. package/dist/browser/editor/key-resolver.d.ts.map +1 -0
  44. package/dist/browser/editor/key-resolver.js +49 -0
  45. package/dist/browser/editor/key-resolver.js.map +1 -0
  46. package/dist/browser/editor/live-preview.d.ts +10 -0
  47. package/dist/browser/editor/live-preview.d.ts.map +1 -0
  48. package/dist/browser/editor/live-preview.js +57 -0
  49. package/dist/browser/editor/live-preview.js.map +1 -0
  50. package/dist/browser/editor/sidebar.d.ts +50 -0
  51. package/dist/browser/editor/sidebar.d.ts.map +1 -0
  52. package/dist/browser/editor/sidebar.js +353 -0
  53. package/dist/browser/editor/sidebar.js.map +1 -0
  54. package/dist/browser/editor/toolbar.d.ts +29 -0
  55. package/dist/browser/editor/toolbar.d.ts.map +1 -0
  56. package/dist/browser/editor/toolbar.js +131 -0
  57. package/dist/browser/editor/toolbar.js.map +1 -0
  58. package/dist/browser/exclude-filter.d.ts +21 -0
  59. package/dist/browser/exclude-filter.d.ts.map +1 -0
  60. package/dist/browser/exclude-filter.js +51 -0
  61. package/dist/browser/exclude-filter.js.map +1 -0
  62. package/dist/browser/index.d.ts +32 -0
  63. package/dist/browser/index.d.ts.map +1 -0
  64. package/dist/browser/index.js +28 -0
  65. package/dist/browser/index.js.map +1 -0
  66. package/dist/browser/language-switcher.d.ts +70 -0
  67. package/dist/browser/language-switcher.d.ts.map +1 -0
  68. package/dist/browser/language-switcher.js +339 -0
  69. package/dist/browser/language-switcher.js.map +1 -0
  70. package/dist/browser/lionrapid.auto.dev.js +5757 -0
  71. package/dist/browser/lionrapid.auto.dev.js.map +7 -0
  72. package/dist/browser/lionrapid.auto.js +5757 -0
  73. package/dist/browser/lionrapid.auto.js.map +7 -0
  74. package/dist/browser/lionrapid.auto.min.js +80 -0
  75. package/dist/browser/lionrapid.auto.min.js.map +7 -0
  76. package/dist/browser/lionrapid.editor.js +1869 -0
  77. package/dist/browser/lionrapid.editor.js.map +7 -0
  78. package/dist/browser/lionrapid.editor.min.js +415 -0
  79. package/dist/browser/lionrapid.editor.min.js.map +7 -0
  80. package/dist/browser/lionrapid.esm.js +4786 -0
  81. package/dist/browser/lionrapid.esm.js.map +7 -0
  82. package/dist/browser/lionrapid.esm.min.js +3 -0
  83. package/dist/browser/lionrapid.esm.min.js.map +7 -0
  84. package/dist/browser/lionrapid.iife.dev.js +4809 -0
  85. package/dist/browser/lionrapid.iife.dev.js.map +7 -0
  86. package/dist/browser/lionrapid.iife.js +4809 -0
  87. package/dist/browser/lionrapid.iife.js.map +7 -0
  88. package/dist/browser/lionrapid.iife.min.js +3 -0
  89. package/dist/browser/lionrapid.iife.min.js.map +7 -0
  90. package/dist/browser/lionrapid.umd.js +4822 -0
  91. package/dist/browser/lionrapid.umd.js.map +7 -0
  92. package/dist/browser/lionrapid.umd.min.js +18 -0
  93. package/dist/browser/lionrapid.umd.min.js.map +7 -0
  94. package/dist/browser/markup-parser.d.ts +13 -0
  95. package/dist/browser/markup-parser.d.ts.map +1 -0
  96. package/dist/browser/markup-parser.js +56 -0
  97. package/dist/browser/markup-parser.js.map +1 -0
  98. package/dist/browser/md5.d.ts +16 -0
  99. package/dist/browser/md5.d.ts.map +1 -0
  100. package/dist/browser/md5.js +145 -0
  101. package/dist/browser/md5.js.map +1 -0
  102. package/dist/browser/storage/cache-storage-repository.d.ts +44 -0
  103. package/dist/browser/storage/cache-storage-repository.d.ts.map +1 -0
  104. package/dist/browser/storage/cache-storage-repository.js +186 -0
  105. package/dist/browser/storage/cache-storage-repository.js.map +1 -0
  106. package/dist/browser/storage/localstorage-repository.d.ts +51 -0
  107. package/dist/browser/storage/localstorage-repository.d.ts.map +1 -0
  108. package/dist/browser/storage/localstorage-repository.js +270 -0
  109. package/dist/browser/storage/localstorage-repository.js.map +1 -0
  110. package/dist/builder.d.ts +24 -0
  111. package/dist/builder.d.ts.map +1 -0
  112. package/dist/builder.js +169 -0
  113. package/dist/builder.js.map +1 -0
  114. package/dist/cache/CacheManager.d.ts +132 -0
  115. package/dist/cache/CacheManager.d.ts.map +1 -0
  116. package/dist/cache/CacheManager.js +277 -0
  117. package/dist/cache/CacheManager.js.map +1 -0
  118. package/dist/cache/index.d.ts +6 -0
  119. package/dist/cache/index.d.ts.map +1 -0
  120. package/dist/cache/index.js +5 -0
  121. package/dist/cache/index.js.map +1 -0
  122. package/dist/config/index.d.ts +6 -0
  123. package/dist/config/index.d.ts.map +1 -0
  124. package/dist/config/index.js +6 -0
  125. package/dist/config/index.js.map +1 -0
  126. package/dist/config/lionrapid.config.d.ts +12 -0
  127. package/dist/config/lionrapid.config.d.ts.map +1 -0
  128. package/dist/config/lionrapid.config.js +2 -0
  129. package/dist/config/lionrapid.config.js.map +1 -0
  130. package/dist/config/logger.config.d.ts +19 -0
  131. package/dist/config/logger.config.d.ts.map +1 -0
  132. package/dist/config/logger.config.js +9 -0
  133. package/dist/config/logger.config.js.map +1 -0
  134. package/dist/config/repository.config.d.ts +87 -0
  135. package/dist/config/repository.config.d.ts.map +1 -0
  136. package/dist/config/repository.config.js +5 -0
  137. package/dist/config/repository.config.js.map +1 -0
  138. package/dist/content/index.d.ts +20 -0
  139. package/dist/content/index.d.ts.map +1 -0
  140. package/dist/content/index.js +13 -0
  141. package/dist/content/index.js.map +1 -0
  142. package/dist/content/parser/IParser.d.ts +33 -0
  143. package/dist/content/parser/IParser.d.ts.map +1 -0
  144. package/dist/content/parser/IParser.js +6 -0
  145. package/dist/content/parser/IParser.js.map +1 -0
  146. package/dist/content/parser/MarkupParser.d.ts +67 -0
  147. package/dist/content/parser/MarkupParser.d.ts.map +1 -0
  148. package/dist/content/parser/MarkupParser.js +231 -0
  149. package/dist/content/parser/MarkupParser.js.map +1 -0
  150. package/dist/content/serializer/HTMLSerializer.d.ts +61 -0
  151. package/dist/content/serializer/HTMLSerializer.d.ts.map +1 -0
  152. package/dist/content/serializer/HTMLSerializer.js +100 -0
  153. package/dist/content/serializer/HTMLSerializer.js.map +1 -0
  154. package/dist/content/serializer/ISerializer.d.ts +33 -0
  155. package/dist/content/serializer/ISerializer.d.ts.map +1 -0
  156. package/dist/content/serializer/ISerializer.js +6 -0
  157. package/dist/content/serializer/ISerializer.js.map +1 -0
  158. package/dist/content/style-mapper/DefaultStyleMapper.d.ts +59 -0
  159. package/dist/content/style-mapper/DefaultStyleMapper.d.ts.map +1 -0
  160. package/dist/content/style-mapper/DefaultStyleMapper.js +128 -0
  161. package/dist/content/style-mapper/DefaultStyleMapper.js.map +1 -0
  162. package/dist/content/style-mapper/IStyleMapper.d.ts +50 -0
  163. package/dist/content/style-mapper/IStyleMapper.d.ts.map +1 -0
  164. package/dist/content/style-mapper/IStyleMapper.js +6 -0
  165. package/dist/content/style-mapper/IStyleMapper.js.map +1 -0
  166. package/dist/content/types.d.ts +39 -0
  167. package/dist/content/types.d.ts.map +1 -0
  168. package/dist/content/types.js +6 -0
  169. package/dist/content/types.js.map +1 -0
  170. package/dist/content/validator/ContentValidator.d.ts +57 -0
  171. package/dist/content/validator/ContentValidator.d.ts.map +1 -0
  172. package/dist/content/validator/ContentValidator.js +215 -0
  173. package/dist/content/validator/ContentValidator.js.map +1 -0
  174. package/dist/content/validator/IValidator.d.ts +82 -0
  175. package/dist/content/validator/IValidator.d.ts.map +1 -0
  176. package/dist/content/validator/IValidator.js +6 -0
  177. package/dist/content/validator/IValidator.js.map +1 -0
  178. package/dist/errors/translation-errors.d.ts +55 -0
  179. package/dist/errors/translation-errors.d.ts.map +1 -0
  180. package/dist/errors/translation-errors.js +85 -0
  181. package/dist/errors/translation-errors.js.map +1 -0
  182. package/dist/handlers/async-storage-handler.d.ts +77 -0
  183. package/dist/handlers/async-storage-handler.d.ts.map +1 -0
  184. package/dist/handlers/async-storage-handler.js +239 -0
  185. package/dist/handlers/async-storage-handler.js.map +1 -0
  186. package/dist/handlers/handler-chain.d.ts +79 -0
  187. package/dist/handlers/handler-chain.d.ts.map +1 -0
  188. package/dist/handlers/handler-chain.js +366 -0
  189. package/dist/handlers/handler-chain.js.map +1 -0
  190. package/dist/handlers/index.d.ts +7 -0
  191. package/dist/handlers/index.d.ts.map +1 -0
  192. package/dist/handlers/index.js +7 -0
  193. package/dist/handlers/index.js.map +1 -0
  194. package/dist/handlers/network-handler.d.ts +90 -0
  195. package/dist/handlers/network-handler.d.ts.map +1 -0
  196. package/dist/handlers/network-handler.js +283 -0
  197. package/dist/handlers/network-handler.js.map +1 -0
  198. package/dist/handlers/sync-storage-handler.d.ts +88 -0
  199. package/dist/handlers/sync-storage-handler.d.ts.map +1 -0
  200. package/dist/handlers/sync-storage-handler.js +270 -0
  201. package/dist/handlers/sync-storage-handler.js.map +1 -0
  202. package/dist/index.d.ts +37 -0
  203. package/dist/index.d.ts.map +1 -0
  204. package/dist/index.js +30 -0
  205. package/dist/index.js.map +1 -0
  206. package/dist/interfaces/emitter.interface.d.ts +33 -0
  207. package/dist/interfaces/emitter.interface.d.ts.map +1 -0
  208. package/dist/interfaces/emitter.interface.js +2 -0
  209. package/dist/interfaces/emitter.interface.js.map +1 -0
  210. package/dist/interfaces/handler.interface.d.ts +50 -0
  211. package/dist/interfaces/handler.interface.d.ts.map +1 -0
  212. package/dist/interfaces/handler.interface.js +5 -0
  213. package/dist/interfaces/handler.interface.js.map +1 -0
  214. package/dist/interfaces/index.d.ts +8 -0
  215. package/dist/interfaces/index.d.ts.map +1 -0
  216. package/dist/interfaces/index.js +8 -0
  217. package/dist/interfaces/index.js.map +1 -0
  218. package/dist/interfaces/plugin.interface.d.ts +49 -0
  219. package/dist/interfaces/plugin.interface.d.ts.map +1 -0
  220. package/dist/interfaces/plugin.interface.js +6 -0
  221. package/dist/interfaces/plugin.interface.js.map +1 -0
  222. package/dist/interfaces/repository.interface.d.ts +56 -0
  223. package/dist/interfaces/repository.interface.d.ts.map +1 -0
  224. package/dist/interfaces/repository.interface.js +2 -0
  225. package/dist/interfaces/repository.interface.js.map +1 -0
  226. package/dist/lionRapid.d.ts +225 -0
  227. package/dist/lionRapid.d.ts.map +1 -0
  228. package/dist/lionRapid.js +596 -0
  229. package/dist/lionRapid.js.map +1 -0
  230. package/dist/repositories/index.d.ts +3 -0
  231. package/dist/repositories/index.d.ts.map +1 -0
  232. package/dist/repositories/index.js +3 -0
  233. package/dist/repositories/index.js.map +1 -0
  234. package/dist/repositories/memory-repository.d.ts +30 -0
  235. package/dist/repositories/memory-repository.d.ts.map +1 -0
  236. package/dist/repositories/memory-repository.js +100 -0
  237. package/dist/repositories/memory-repository.js.map +1 -0
  238. package/dist/repositories/network-repository.d.ts +138 -0
  239. package/dist/repositories/network-repository.d.ts.map +1 -0
  240. package/dist/repositories/network-repository.js +516 -0
  241. package/dist/repositories/network-repository.js.map +1 -0
  242. package/dist/sync/missing-translation-queue.d.ts +64 -0
  243. package/dist/sync/missing-translation-queue.d.ts.map +1 -0
  244. package/dist/sync/missing-translation-queue.js +184 -0
  245. package/dist/sync/missing-translation-queue.js.map +1 -0
  246. package/dist/types/cache.types.d.ts +62 -0
  247. package/dist/types/cache.types.d.ts.map +1 -0
  248. package/dist/types/cache.types.js +6 -0
  249. package/dist/types/cache.types.js.map +1 -0
  250. package/dist/types/event-payloads.types.d.ts +46 -0
  251. package/dist/types/event-payloads.types.d.ts.map +1 -0
  252. package/dist/types/event-payloads.types.js +6 -0
  253. package/dist/types/event-payloads.types.js.map +1 -0
  254. package/dist/types/generated.types.d.ts +31 -0
  255. package/dist/types/generated.types.d.ts.map +1 -0
  256. package/dist/types/generated.types.js +6 -0
  257. package/dist/types/generated.types.js.map +1 -0
  258. package/dist/types/index.d.ts +7 -0
  259. package/dist/types/index.d.ts.map +1 -0
  260. package/dist/types/index.js +7 -0
  261. package/dist/types/index.js.map +1 -0
  262. package/dist/types/lionRapid.types.d.ts +169 -0
  263. package/dist/types/lionRapid.types.d.ts.map +1 -0
  264. package/dist/types/lionRapid.types.js +8 -0
  265. package/dist/types/lionRapid.types.js.map +1 -0
  266. package/dist/types/parameters.types.d.ts +36 -0
  267. package/dist/types/parameters.types.d.ts.map +1 -0
  268. package/dist/types/parameters.types.js +6 -0
  269. package/dist/types/parameters.types.js.map +1 -0
  270. package/dist/types/translation-data.types.d.ts +54 -0
  271. package/dist/types/translation-data.types.d.ts.map +1 -0
  272. package/dist/types/translation-data.types.js +6 -0
  273. package/dist/types/translation-data.types.js.map +1 -0
  274. package/dist/types/translation.types.d.ts +94 -0
  275. package/dist/types/translation.types.d.ts.map +1 -0
  276. package/dist/types/translation.types.js +5 -0
  277. package/dist/types/translation.types.js.map +1 -0
  278. package/dist/utils/context-utils.d.ts +23 -0
  279. package/dist/utils/context-utils.d.ts.map +1 -0
  280. package/dist/utils/context-utils.js +36 -0
  281. package/dist/utils/context-utils.js.map +1 -0
  282. package/dist/utils/index.d.ts +10 -0
  283. package/dist/utils/index.d.ts.map +1 -0
  284. package/dist/utils/index.js +19 -0
  285. package/dist/utils/index.js.map +1 -0
  286. package/dist/utils/logger.d.ts +229 -0
  287. package/dist/utils/logger.d.ts.map +1 -0
  288. package/dist/utils/logger.js +345 -0
  289. package/dist/utils/logger.js.map +1 -0
  290. package/dist/utils/namespace-utils.d.ts +30 -0
  291. package/dist/utils/namespace-utils.d.ts.map +1 -0
  292. package/dist/utils/namespace-utils.js +56 -0
  293. package/dist/utils/namespace-utils.js.map +1 -0
  294. package/dist/utils/translation-flow.d.ts +18 -0
  295. package/dist/utils/translation-flow.d.ts.map +1 -0
  296. package/dist/utils/translation-flow.js +74 -0
  297. package/dist/utils/translation-flow.js.map +1 -0
  298. package/dist/utils/translation-value-utils.d.ts +57 -0
  299. package/dist/utils/translation-value-utils.d.ts.map +1 -0
  300. package/dist/utils/translation-value-utils.js +194 -0
  301. package/dist/utils/translation-value-utils.js.map +1 -0
  302. package/package.json +76 -0
package/README.md ADDED
@@ -0,0 +1,106 @@
1
+ # @lionrapid/core
2
+
3
+ Core translation engine for LionRapid. TypeScript-first i18n with multi-layer caching, server sync, and browser auto-translation.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @lionrapid/core
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ### Developer mode (npm)
14
+
15
+ ```typescript
16
+ import { LionRapidBuilder, MemoryRepository, NetworkRepository } from '@lionrapid/core';
17
+
18
+ const lionRapid = await LionRapidBuilder.init({
19
+ defaultLocale: 'en',
20
+ namespace: 'app',
21
+ })
22
+ .use(new MemoryRepository({ enabled: true }))
23
+ .use(new NetworkRepository({
24
+ enabled: true,
25
+ options: { baseUrl: 'https://api.lionrapid.com' },
26
+ }))
27
+ .build();
28
+
29
+ // Translate
30
+ const text = lionRapid.t('welcome', 'Welcome!');
31
+
32
+ // With parameters (ICU MessageFormat)
33
+ const greeting = lionRapid.t('greeting', { name: 'John' });
34
+
35
+ // Change language
36
+ await lionRapid.changeLanguage('es');
37
+
38
+ // Get current locale
39
+ const locale = lionRapid.getCurrentLocale(); // 'es'
40
+ ```
41
+
42
+ ### Auto-init mode (script tag)
43
+
44
+ No build step required. Add to any HTML page:
45
+
46
+ ```html
47
+ <script
48
+ src="https://cdn.lionrapid.com/lionrapid.auto.min.js"
49
+ data-api-key="pk_eng_xxx"
50
+ data-base-url="https://api.lionrapid.com"
51
+ data-default-locale="en"
52
+ data-languages="en,es,fr"
53
+ data-mode="full"
54
+ async
55
+ ></script>
56
+ ```
57
+
58
+ Auto-init scans the DOM, extracts text blocks, fetches translations, and applies them in-place. Includes a floating language switcher.
59
+
60
+ ## Features
61
+
62
+ - **Multi-layer cache**: Memory (sync) -> LocalStorage -> Cache API -> Network
63
+ - **Auto-sync missing keys**: Batched POST of untranslated content to your backend
64
+ - **ICU MessageFormat**: Plurals, select, date/time, number formatting (via `@lionrapid/formatters` plugin)
65
+ - **Event-driven**: Subscribe to `language:change:success`, `repo:set:success`, and more
66
+ - **Block-level translation**: ContentUnit format preserves inline styles (`<1>bold</1>`)
67
+ - **Visual editor**: Built-in editor activated via `?__lr_editor=grant_xxx` query param
68
+ - **Tree-shakable**: Import only what you use
69
+
70
+ ## API
71
+
72
+ ```typescript
73
+ // Translation
74
+ t(key: string, fallback?: string): string
75
+ t(key: string, params: Record<string, unknown>, fallback?: string): string
76
+
77
+ // Language
78
+ await lionRapid.changeLanguage('fr');
79
+ lionRapid.getCurrentLocale(); // 'fr'
80
+
81
+ // Events
82
+ lionRapid.bus.on('language:change:success', (envelope) => {
83
+ console.log(envelope.payload.newLocale);
84
+ });
85
+ ```
86
+
87
+ ## Browser Bundles
88
+
89
+ | Bundle | Use case |
90
+ |--------|----------|
91
+ | `lionrapid.auto.min.js` | Script tag auto-translation |
92
+ | `lionrapid.iife.min.js` | Script tag (developer mode) |
93
+ | `lionrapid.esm.min.js` | ES modules |
94
+ | `lionrapid.umd.min.js` | Universal (CommonJS + AMD) |
95
+ | `lionrapid.editor.min.js` | Visual editor (lazy-loaded) |
96
+
97
+ ## Related Packages
98
+
99
+ - [@lionrapid/react](https://www.npmjs.com/package/@lionrapid/react) - React hooks and `<Trans>` component
100
+ - [@lionrapid/formatters](https://www.npmjs.com/package/@lionrapid/formatters) - ICU MessageFormat plugin
101
+ - [@lionrapid/storage](https://www.npmjs.com/package/@lionrapid/storage) - LocalStorage and Cache API adapters
102
+ - [@lionrapid/types](https://www.npmjs.com/package/@lionrapid/types) - TypeScript type generation CLI
103
+
104
+ ## License
105
+
106
+ MIT
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Enhanced event emitter with language change helpers
3
+ * filepath: /home/janrau/tm-integration/packages/core/src/base/event-emitter.ts
4
+ */
5
+ import type { LionRapidEventEnvelope, LionRapidEventPayloads } from '../types/lionRapid.types.js';
6
+ import type { TranslationRequest } from '../types/translation.types.js';
7
+ type EventListener<T extends Record<string, unknown>, K extends keyof T> = (envelope: LionRapidEventEnvelope<T, K>) => void;
8
+ export declare class EventEmitter {
9
+ private eventListeners;
10
+ private debugMode;
11
+ /**
12
+ * Subscribe to events (PUBLIC API) - Fully type-safe
13
+ */
14
+ on<K extends keyof LionRapidEventPayloads>(event: K, listener: EventListener<LionRapidEventPayloads, K>): void;
15
+ /**
16
+ * Unsubscribe from events (PUBLIC API) - Fully type-safe
17
+ */
18
+ off<K extends keyof LionRapidEventPayloads>(event: K, listener: EventListener<LionRapidEventPayloads, K>): void;
19
+ /**
20
+ * ✅ Type-safe emit with proper generic constraint
21
+ */
22
+ emit<K extends keyof LionRapidEventPayloads>(event: K, envelope: LionRapidEventEnvelope<LionRapidEventPayloads, K>): void;
23
+ hasListeners<K extends keyof LionRapidEventPayloads>(event: K): boolean;
24
+ clearEvents(): void;
25
+ /**
26
+ * ✅ Create base context once per request
27
+ */
28
+ private createContext;
29
+ /**
30
+ * ✅ Type-safe event emission helper
31
+ */
32
+ private emitEvent;
33
+ /**
34
+ * ✅ Translation event builder with proper typing
35
+ */
36
+ translation(request: TranslationRequest, handler?: string): {
37
+ request: () => void;
38
+ success: (value: string) => void;
39
+ fallback: (value: string) => void;
40
+ missing: (fallbackValue: string, locale: string, namespace: string) => void;
41
+ notFound: (fallbackValue: string, locale: string, namespace: string) => void;
42
+ locked: (fallbackValue: string, locale: string, namespace: string) => void;
43
+ };
44
+ /**
45
+ * ✅ Repository event builder with better typing
46
+ */
47
+ repo(request: TranslationRequest | string, source: string): {
48
+ getStart: () => void;
49
+ getSuccess: (value: string) => void;
50
+ getMiss: () => void;
51
+ setStart: (value: string) => void;
52
+ setSuccess: (value: string) => void;
53
+ error: (error: Error) => void;
54
+ };
55
+ /**
56
+ * ✅ Network event builder
57
+ */
58
+ network(request: TranslationRequest | string, method?: string): {
59
+ start: () => void;
60
+ success: (value: string) => void;
61
+ error: (error: unknown, status?: number) => void;
62
+ retry: (attempt: number, delayMs: number, reason?: string) => void;
63
+ };
64
+ /**
65
+ * ✅ Builder event builder
66
+ */
67
+ builder(): {
68
+ use: (type: "plugin" | "sync" | "async" | "network") => void;
69
+ buildStart: (locale: string, namespace: string) => void;
70
+ buildDone: (repositories: string[], plugins: string[]) => void;
71
+ };
72
+ /**
73
+ * ✅ Language change event builder
74
+ */
75
+ language(oldLocale: string, newLocale: string): {
76
+ start: () => void;
77
+ complete: () => void;
78
+ error: (error: Error) => void;
79
+ };
80
+ /**
81
+ * ✅ Cache operations (debug only)
82
+ */
83
+ cache(operation: 'clear', reason: string, stats?: {
84
+ clearedCount: number;
85
+ }): {
86
+ start: () => void;
87
+ complete: () => void;
88
+ };
89
+ }
90
+ export {};
91
+ //# sourceMappingURL=event-emitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../../src/base/event-emitter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,sBAAsB,EACtB,sBAAsB,EAEvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAIxE,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CACzE,QAAQ,EAAE,sBAAsB,CAAC,CAAC,EAAE,CAAC,CAAC,KACnC,IAAI,CAAC;AASV,qBAAa,YAAY;IAEvB,OAAO,CAAC,cAAc,CAGlB;IAEJ,OAAO,CAAC,SAAS,CAAmD;IAEpE;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,sBAAsB,EACvC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,CAAC,sBAAsB,EAAE,CAAC,CAAC,GACjD,IAAI;IAYP;;OAEG;IACH,GAAG,CAAC,CAAC,SAAS,MAAM,sBAAsB,EACxC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,aAAa,CAAC,sBAAsB,EAAE,CAAC,CAAC,GACjD,IAAI;IASP;;OAEG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,sBAAsB,EACzC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,sBAAsB,CAAC,sBAAsB,EAAE,CAAC,CAAC,GAC1D,IAAI;IAeP,YAAY,CAAC,CAAC,SAAS,MAAM,sBAAsB,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO;IAMvE,WAAW,IAAI,IAAI;IAInB;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACH,OAAO,CAAC,SAAS;IAYjB;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,MAAM;;yBAYpC,MAAM;0BAOL,MAAM;iCAOC,MAAM,UAAU,MAAM,aAAa,MAAM;kCAYxC,MAAM,UAAU,MAAM,aAAa,MAAM;gCAa3C,MAAM,UAAU,MAAM,aAAa,MAAM;;IAerE;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM;;4BAgBjC,MAAM;;0BAwBR,MAAM;4BAYJ,MAAM;uBASX,KAAK;;IAUxB;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;;yBAaxC,MAAM;uBAOR,OAAO,WAAW,MAAM;yBAYtB,MAAM,WAAW,MAAM,WAAW,MAAM;;IAS7D;;OAEG;IACH,OAAO;oBAKS,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS;6BAO9B,MAAM,aAAa,MAAM;kCAWpB,MAAM,EAAE,WAAW,MAAM,EAAE;;IAazD;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;;;uBAmB1B,KAAK;;IASxB;;OAEG;IACH,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE;;;;CAgB3E"}
@@ -0,0 +1,330 @@
1
+ /**
2
+ * Enhanced event emitter with language change helpers
3
+ * filepath: /home/janrau/tm-integration/packages/core/src/base/event-emitter.ts
4
+ */
5
+ import { logger } from '../utils/logger.js';
6
+ // ✅ Type-safe listener storage
7
+ // type EventListenerMap = {
8
+ // [K in keyof LionRapidEventPayloads]: Set<
9
+ // EventListener<LionRapidEventPayloads, K>
10
+ // >;
11
+ // };
12
+ export class EventEmitter {
13
+ // ✅ Properly typed event listeners without `any`
14
+ eventListeners = new Map();
15
+ debugMode = process.env.NODE_ENV === 'development';
16
+ /**
17
+ * Subscribe to events (PUBLIC API) - Fully type-safe
18
+ */
19
+ on(event, listener) {
20
+ if (!this.eventListeners.has(event)) {
21
+ this.eventListeners.set(event, new Set());
22
+ }
23
+ // ✅ Type assertion is safe here because we control the map structure
24
+ const listeners = this.eventListeners.get(event);
25
+ listeners.add(listener);
26
+ }
27
+ /**
28
+ * Unsubscribe from events (PUBLIC API) - Fully type-safe
29
+ */
30
+ off(event, listener) {
31
+ const listeners = this.eventListeners.get(event);
32
+ if (listeners) {
33
+ listeners.delete(listener);
34
+ }
35
+ }
36
+ /**
37
+ * ✅ Type-safe emit with proper generic constraint
38
+ */
39
+ emit(event, envelope) {
40
+ const listeners = this.eventListeners.get(event);
41
+ if (listeners) {
42
+ listeners.forEach(listener => {
43
+ try {
44
+ listener(envelope);
45
+ }
46
+ catch (error) {
47
+ console.error(`Error in event listener for ${String(event)}:`, error);
48
+ }
49
+ });
50
+ }
51
+ }
52
+ hasListeners(event) {
53
+ return (this.eventListeners.has(event) && this.eventListeners.get(event).size > 0);
54
+ }
55
+ clearEvents() {
56
+ this.eventListeners.clear();
57
+ }
58
+ /**
59
+ * ✅ Create base context once per request
60
+ */
61
+ createContext(requestId, trace, extra) {
62
+ return {
63
+ requestId,
64
+ timestamp: performance.now(),
65
+ trace,
66
+ ...extra,
67
+ };
68
+ }
69
+ /**
70
+ * ✅ Type-safe event emission helper
71
+ */
72
+ emitEvent(event, payload, requestId, trace) {
73
+ this.emit(event, {
74
+ context: this.createContext(requestId, trace),
75
+ payload,
76
+ });
77
+ }
78
+ /**
79
+ * ✅ Translation event builder with proper typing
80
+ */
81
+ translation(request, handler) {
82
+ const baseTrace = ['translation'];
83
+ const handlerTrace = handler ? [...baseTrace, handler] : baseTrace;
84
+ return {
85
+ request: () => {
86
+ this.emit('translation:request', {
87
+ context: this.createContext(request.id, [...baseTrace, 'request']),
88
+ payload: { key: request.cleanKey },
89
+ });
90
+ },
91
+ success: (value) => {
92
+ this.emit('translation:success', {
93
+ context: this.createContext(request.id, [...handlerTrace, 'success']),
94
+ payload: { key: request.cleanKey, value },
95
+ });
96
+ },
97
+ fallback: (value) => {
98
+ this.emit('translation:fallback', {
99
+ context: this.createContext(request.id, [...baseTrace, 'fallback']),
100
+ payload: { key: request.cleanKey, value },
101
+ });
102
+ },
103
+ missing: (fallbackValue, locale, namespace) => {
104
+ this.emit('translation:missing', {
105
+ context: this.createContext(request.id, [...baseTrace, 'missing']),
106
+ payload: {
107
+ key: request.cleanKey,
108
+ fallbackValue,
109
+ locale,
110
+ namespace,
111
+ },
112
+ });
113
+ },
114
+ notFound: (fallbackValue, locale, namespace) => {
115
+ this.emit('translation:not-found', {
116
+ context: this.createContext(request.id, [...baseTrace, 'not-found']),
117
+ payload: {
118
+ key: request.cleanKey,
119
+ fallbackValue,
120
+ locale,
121
+ namespace,
122
+ status: 404,
123
+ },
124
+ });
125
+ },
126
+ locked: (fallbackValue, locale, namespace) => {
127
+ this.emit('translation:locked', {
128
+ context: this.createContext(request.id, [...baseTrace, 'locked']),
129
+ payload: {
130
+ key: request.cleanKey,
131
+ fallbackValue,
132
+ locale,
133
+ namespace,
134
+ status: 423,
135
+ },
136
+ });
137
+ },
138
+ };
139
+ }
140
+ /**
141
+ * ✅ Repository event builder with better typing
142
+ */
143
+ repo(request, source) {
144
+ const baseTrace = ['repo', source];
145
+ return {
146
+ getStart: () => {
147
+ if (typeof request === 'string')
148
+ return;
149
+ this.emit('repo:get:start', {
150
+ context: this.createContext(request.id, [
151
+ ...baseTrace,
152
+ 'get',
153
+ 'start',
154
+ ]),
155
+ payload: { key: request.cleanKey, source },
156
+ });
157
+ },
158
+ getSuccess: (value) => {
159
+ if (typeof request === 'string')
160
+ return;
161
+ this.emit('repo:get:success', {
162
+ context: this.createContext(request.id, [
163
+ ...baseTrace,
164
+ 'get',
165
+ 'success',
166
+ ]),
167
+ payload: { key: request.cleanKey, value, source },
168
+ });
169
+ },
170
+ getMiss: () => {
171
+ if (typeof request === 'string')
172
+ return;
173
+ this.emit('repo:get:miss', {
174
+ context: this.createContext(request.id, [
175
+ ...baseTrace,
176
+ 'get',
177
+ 'miss',
178
+ ]),
179
+ payload: { key: request.cleanKey, source },
180
+ });
181
+ },
182
+ setStart: (value) => {
183
+ if (typeof request === 'string')
184
+ return;
185
+ this.emit('repo:set:start', {
186
+ context: this.createContext(request.id, [
187
+ ...baseTrace,
188
+ 'set',
189
+ 'start',
190
+ ]),
191
+ payload: { key: request.cleanKey, value, source },
192
+ });
193
+ },
194
+ setSuccess: (value) => {
195
+ const id = typeof request === 'string' ? 'system' : request.id;
196
+ const key = typeof request === 'string' ? request : request.cleanKey;
197
+ this.emit('repo:set:success', {
198
+ context: this.createContext(id, [...baseTrace, 'set', 'success']),
199
+ payload: { key: key, value, source },
200
+ });
201
+ },
202
+ error: (error) => {
203
+ if (typeof request === 'string')
204
+ return;
205
+ this.emit('repo:error', {
206
+ context: this.createContext(request.id, [...baseTrace, 'error']),
207
+ payload: { key: request.cleanKey, source, error },
208
+ });
209
+ },
210
+ };
211
+ }
212
+ /**
213
+ * ✅ Network event builder
214
+ */
215
+ network(request, method) {
216
+ const key = typeof request === 'string' ? request : request.cleanKey;
217
+ const requestId = typeof request === 'string' ? 'network' : request.id;
218
+ const baseTrace = ['network', method || 'request'];
219
+ return {
220
+ start: () => {
221
+ this.emit('network:request:start', {
222
+ context: this.createContext(requestId, [...baseTrace, 'start']),
223
+ payload: { key },
224
+ });
225
+ },
226
+ success: (value) => {
227
+ this.emit('network:request:success', {
228
+ context: this.createContext(requestId, [...baseTrace, 'success']),
229
+ payload: { key, value, method: method || 'GET' },
230
+ });
231
+ },
232
+ error: (error, status) => {
233
+ this.emit('network:request:error', {
234
+ context: this.createContext(requestId, [...baseTrace, 'error']),
235
+ payload: {
236
+ key,
237
+ method: method || 'GET',
238
+ error,
239
+ ...(status && { status }),
240
+ },
241
+ });
242
+ },
243
+ retry: (attempt, delayMs, reason) => {
244
+ this.emit('network:retry', {
245
+ context: this.createContext(requestId, [...baseTrace, 'retry']),
246
+ payload: { key, attempt, delayMs, ...(reason && { reason }) },
247
+ });
248
+ },
249
+ };
250
+ }
251
+ /**
252
+ * ✅ Builder event builder
253
+ */
254
+ builder() {
255
+ const baseTrace = ['builder'];
256
+ const systemId = `build-${Date.now()}`;
257
+ return {
258
+ use: (type) => {
259
+ this.emit('builder:use', {
260
+ context: this.createContext(systemId, [...baseTrace, 'use']),
261
+ payload: { type },
262
+ });
263
+ },
264
+ buildStart: (locale, namespace) => {
265
+ this.emit('builder:build:start', {
266
+ context: this.createContext(systemId, [
267
+ ...baseTrace,
268
+ 'build',
269
+ 'start',
270
+ ]),
271
+ payload: { locale, namespace },
272
+ });
273
+ },
274
+ buildDone: (repositories, plugins) => {
275
+ this.emit('builder:build:done', {
276
+ context: this.createContext(systemId, [
277
+ ...baseTrace,
278
+ 'build',
279
+ 'done',
280
+ ]),
281
+ payload: { repositories, plugins },
282
+ });
283
+ },
284
+ };
285
+ }
286
+ /**
287
+ * ✅ Language change event builder
288
+ */
289
+ language(oldLocale, newLocale) {
290
+ const requestId = `lang-change-${Date.now()}`;
291
+ const baseTrace = ['language', 'change'];
292
+ return {
293
+ start: () => {
294
+ this.emit('language:change:start', {
295
+ context: this.createContext(requestId, [...baseTrace, 'start']),
296
+ payload: { oldLocale, newLocale },
297
+ });
298
+ },
299
+ complete: () => {
300
+ this.emit('language:change:success', {
301
+ context: this.createContext(requestId, [...baseTrace, 'complete']),
302
+ payload: { oldLocale, newLocale },
303
+ });
304
+ },
305
+ error: (error) => {
306
+ this.emit('language:change:error', {
307
+ context: this.createContext(requestId, [...baseTrace, 'error']),
308
+ payload: { oldLocale, newLocale, error },
309
+ });
310
+ },
311
+ };
312
+ }
313
+ /**
314
+ * ✅ Cache operations (debug only)
315
+ */
316
+ cache(operation, reason, stats) {
317
+ // Only emit in debug mode
318
+ if (!this.debugMode)
319
+ return { start: () => { }, complete: () => { } };
320
+ return {
321
+ start: () => {
322
+ logger.debug(`🧹 Cache ${operation} starting: ${reason}`);
323
+ },
324
+ complete: () => {
325
+ logger.debug(`✅ Cache ${operation} complete: ${stats?.clearedCount || 0} entries`);
326
+ },
327
+ };
328
+ }
329
+ }
330
+ //# sourceMappingURL=event-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-emitter.js","sourceRoot":"","sources":["../../src/base/event-emitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Base classes exports
3
+ */
4
+ export * from './event-emitter.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Base classes exports
3
+ */
4
+ export * from './event-emitter.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/base/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Auto-Init for Browser Bundle
3
+ * Reads script tag attributes and auto-configures LionRapid
4
+ *
5
+ * Usage:
6
+ * <script
7
+ * src="https://cdn.lionrapid.com/lionrapid.min.js"
8
+ * data-api-key="pk_live_xxx"
9
+ * data-default-locale="en"
10
+ * data-namespace="default"
11
+ * data-languages="en,es,fr,de"
12
+ * ></script>
13
+ */
14
+ import { AutoTranslator } from './auto-translator.js';
15
+ import { LanguageSwitcher } from './language-switcher.js';
16
+ export interface AutoInitConfig {
17
+ apiKey: string;
18
+ baseUrl: string;
19
+ defaultLocale: string;
20
+ namespace: string;
21
+ languages: string[];
22
+ excludeSelectors: string[];
23
+ autoDetect: boolean;
24
+ mode: 'full' | 'dynamic-only';
25
+ switcherStyle?: string;
26
+ switcherPosition?: string;
27
+ switcherShowFlags?: boolean;
28
+ switcherShowNames?: boolean;
29
+ switcherCustomCss?: string;
30
+ }
31
+ declare global {
32
+ interface Window {
33
+ LionRapid: LionRapidInstance | undefined;
34
+ __lionrapidConfig?: AutoInitConfig;
35
+ }
36
+ }
37
+ export interface LionRapidInstance {
38
+ t: (key: string, params?: Record<string, unknown>, defaultValue?: string) => string;
39
+ tHtml: (key: string, params?: Record<string, unknown>, defaultValue?: string) => string;
40
+ changeLanguage: (locale: string) => Promise<void>;
41
+ getCurrentLocale: () => string;
42
+ on: (event: string, callback: (payload: unknown) => void) => void;
43
+ retranslate: () => void;
44
+ reloadTranslations: () => Promise<void>;
45
+ autoTranslator: AutoTranslator;
46
+ languageSwitcher: LanguageSwitcher;
47
+ }
48
+ /**
49
+ * Parse script tag attributes
50
+ */
51
+ declare function parseConfig(script: HTMLScriptElement): AutoInitConfig;
52
+ /**
53
+ * Initialize LionRapid from script tag
54
+ */
55
+ declare function autoInit(): Promise<void>;
56
+ export { autoInit, parseConfig };
57
+ //# sourceMappingURL=auto-init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-init.d.ts","sourceRoot":"","sources":["../../src/browser/auto-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI1D,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,SAAS,EAAE,iBAAiB,GAAG,SAAS,CAAC;QACzC,iBAAiB,CAAC,EAAE,cAAc,CAAC;KACpC;CACF;AAED,MAAM,WAAW,iBAAiB;IAChC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACpF,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACxF,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,gBAAgB,EAAE,MAAM,MAAM,CAAC;IAC/B,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,CAAC;IAClE,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED;;GAEG;AACH,iBAAS,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,cAAc,CAsC9D;AAqCD;;GAEG;AACH,iBAAe,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAgOvC;AAKD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC"}