@pie-players/pie-players-shared 0.2.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 (233) hide show
  1. package/dist/config/profile.d.ts +15 -0
  2. package/dist/config/profile.d.ts.map +1 -0
  3. package/dist/config/profile.js +27 -0
  4. package/dist/config/profile.js.map +1 -0
  5. package/dist/i18n/index.d.ts +13 -0
  6. package/dist/i18n/index.d.ts.map +1 -0
  7. package/dist/i18n/index.js +12 -0
  8. package/dist/i18n/index.js.map +1 -0
  9. package/dist/i18n/loader.d.ts +36 -0
  10. package/dist/i18n/loader.d.ts.map +1 -0
  11. package/dist/i18n/loader.js +133 -0
  12. package/dist/i18n/loader.js.map +1 -0
  13. package/dist/i18n/scripts/check-coverage.d.ts +16 -0
  14. package/dist/i18n/scripts/check-coverage.d.ts.map +1 -0
  15. package/dist/i18n/scripts/check-coverage.js +262 -0
  16. package/dist/i18n/scripts/check-coverage.js.map +1 -0
  17. package/dist/i18n/scripts/scan-hardcoded.d.ts +16 -0
  18. package/dist/i18n/scripts/scan-hardcoded.d.ts.map +1 -0
  19. package/dist/i18n/scripts/scan-hardcoded.js +266 -0
  20. package/dist/i18n/scripts/scan-hardcoded.js.map +1 -0
  21. package/dist/i18n/simple-i18n.d.ts +69 -0
  22. package/dist/i18n/simple-i18n.d.ts.map +1 -0
  23. package/dist/i18n/simple-i18n.js +199 -0
  24. package/dist/i18n/simple-i18n.js.map +1 -0
  25. package/dist/i18n/translations/ar/common.json +36 -0
  26. package/dist/i18n/translations/ar/toolkit.json +48 -0
  27. package/dist/i18n/translations/ar/tools.json +109 -0
  28. package/dist/i18n/translations/en/common.json +36 -0
  29. package/dist/i18n/translations/en/toolkit.json +48 -0
  30. package/dist/i18n/translations/en/tools.json +109 -0
  31. package/dist/i18n/translations/es/common.json +36 -0
  32. package/dist/i18n/translations/es/toolkit.json +48 -0
  33. package/dist/i18n/translations/es/tools.json +109 -0
  34. package/dist/i18n/translations/zh/common.json +36 -0
  35. package/dist/i18n/translations/zh/toolkit.json +48 -0
  36. package/dist/i18n/translations/zh/tools.json +109 -0
  37. package/dist/i18n/types.d.ts +58 -0
  38. package/dist/i18n/types.d.ts.map +1 -0
  39. package/dist/i18n/types.js +8 -0
  40. package/dist/i18n/types.js.map +1 -0
  41. package/dist/i18n/use-i18n-standalone.svelte.d.ts +87 -0
  42. package/dist/i18n/use-i18n-standalone.svelte.d.ts.map +1 -0
  43. package/dist/i18n/use-i18n-standalone.svelte.js +151 -0
  44. package/dist/i18n/use-i18n-standalone.svelte.js.map +1 -0
  45. package/dist/i18n/use-i18n.svelte.d.ts +67 -0
  46. package/dist/i18n/use-i18n.svelte.d.ts.map +1 -0
  47. package/dist/i18n/use-i18n.svelte.js +144 -0
  48. package/dist/i18n/use-i18n.svelte.js.map +1 -0
  49. package/dist/index.d.ts +11 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +11 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/instrumentation/index.d.ts +53 -0
  54. package/dist/instrumentation/index.d.ts.map +1 -0
  55. package/dist/instrumentation/index.js +53 -0
  56. package/dist/instrumentation/index.js.map +1 -0
  57. package/dist/instrumentation/providers/BaseInstrumentationProvider.d.ts +197 -0
  58. package/dist/instrumentation/providers/BaseInstrumentationProvider.d.ts.map +1 -0
  59. package/dist/instrumentation/providers/BaseInstrumentationProvider.js +267 -0
  60. package/dist/instrumentation/providers/BaseInstrumentationProvider.js.map +1 -0
  61. package/dist/instrumentation/providers/ConsoleInstrumentationProvider.d.ts +106 -0
  62. package/dist/instrumentation/providers/ConsoleInstrumentationProvider.d.ts.map +1 -0
  63. package/dist/instrumentation/providers/ConsoleInstrumentationProvider.js +182 -0
  64. package/dist/instrumentation/providers/ConsoleInstrumentationProvider.js.map +1 -0
  65. package/dist/instrumentation/providers/DataDogInstrumentationProvider.d.ts +170 -0
  66. package/dist/instrumentation/providers/DataDogInstrumentationProvider.d.ts.map +1 -0
  67. package/dist/instrumentation/providers/DataDogInstrumentationProvider.js +183 -0
  68. package/dist/instrumentation/providers/DataDogInstrumentationProvider.js.map +1 -0
  69. package/dist/instrumentation/providers/NewRelicInstrumentationProvider.d.ts +86 -0
  70. package/dist/instrumentation/providers/NewRelicInstrumentationProvider.d.ts.map +1 -0
  71. package/dist/instrumentation/providers/NewRelicInstrumentationProvider.js +135 -0
  72. package/dist/instrumentation/providers/NewRelicInstrumentationProvider.js.map +1 -0
  73. package/dist/instrumentation/providers/index.d.ts +12 -0
  74. package/dist/instrumentation/providers/index.d.ts.map +1 -0
  75. package/dist/instrumentation/providers/index.js +12 -0
  76. package/dist/instrumentation/providers/index.js.map +1 -0
  77. package/dist/instrumentation/types.d.ts +348 -0
  78. package/dist/instrumentation/types.d.ts.map +1 -0
  79. package/dist/instrumentation/types.js +9 -0
  80. package/dist/instrumentation/types.js.map +1 -0
  81. package/dist/loader-config.d.ts +76 -0
  82. package/dist/loader-config.d.ts.map +1 -0
  83. package/dist/loader-config.js +12 -0
  84. package/dist/loader-config.js.map +1 -0
  85. package/dist/loaders/ElementLoader.d.ts +72 -0
  86. package/dist/loaders/ElementLoader.d.ts.map +1 -0
  87. package/dist/loaders/ElementLoader.js +52 -0
  88. package/dist/loaders/ElementLoader.js.map +1 -0
  89. package/dist/loaders/EsmElementLoader.d.ts +67 -0
  90. package/dist/loaders/EsmElementLoader.d.ts.map +1 -0
  91. package/dist/loaders/EsmElementLoader.js +71 -0
  92. package/dist/loaders/EsmElementLoader.js.map +1 -0
  93. package/dist/loaders/IifeElementLoader.d.ts +61 -0
  94. package/dist/loaders/IifeElementLoader.d.ts.map +1 -0
  95. package/dist/loaders/IifeElementLoader.js +63 -0
  96. package/dist/loaders/IifeElementLoader.js.map +1 -0
  97. package/dist/loaders/index.d.ts +28 -0
  98. package/dist/loaders/index.d.ts.map +1 -0
  99. package/dist/loaders/index.js +25 -0
  100. package/dist/loaders/index.js.map +1 -0
  101. package/dist/object/index.d.ts +12 -0
  102. package/dist/object/index.d.ts.map +1 -0
  103. package/dist/object/index.js +40 -0
  104. package/dist/object/index.js.map +1 -0
  105. package/dist/pie/asset-handler.d.ts +64 -0
  106. package/dist/pie/asset-handler.d.ts.map +1 -0
  107. package/dist/pie/asset-handler.js +238 -0
  108. package/dist/pie/asset-handler.js.map +1 -0
  109. package/dist/pie/component-context.d.ts +22 -0
  110. package/dist/pie/component-context.d.ts.map +1 -0
  111. package/dist/pie/component-context.js +30 -0
  112. package/dist/pie/component-context.js.map +1 -0
  113. package/dist/pie/config.d.ts +39 -0
  114. package/dist/pie/config.d.ts.map +1 -0
  115. package/dist/pie/config.js +174 -0
  116. package/dist/pie/config.js.map +1 -0
  117. package/dist/pie/configure-initialization.d.ts +35 -0
  118. package/dist/pie/configure-initialization.d.ts.map +1 -0
  119. package/dist/pie/configure-initialization.js +141 -0
  120. package/dist/pie/configure-initialization.js.map +1 -0
  121. package/dist/pie/esm-loader.d.ts +93 -0
  122. package/dist/pie/esm-loader.d.ts.map +1 -0
  123. package/dist/pie/esm-loader.js +308 -0
  124. package/dist/pie/esm-loader.js.map +1 -0
  125. package/dist/pie/iife-loader.d.ts +76 -0
  126. package/dist/pie/iife-loader.d.ts.map +1 -0
  127. package/dist/pie/iife-loader.js +303 -0
  128. package/dist/pie/iife-loader.js.map +1 -0
  129. package/dist/pie/index.d.ts +31 -0
  130. package/dist/pie/index.d.ts.map +1 -0
  131. package/dist/pie/index.js +34 -0
  132. package/dist/pie/index.js.map +1 -0
  133. package/dist/pie/initialization.d.ts +40 -0
  134. package/dist/pie/initialization.d.ts.map +1 -0
  135. package/dist/pie/initialization.js +349 -0
  136. package/dist/pie/initialization.js.map +1 -0
  137. package/dist/pie/logger.d.ts +64 -0
  138. package/dist/pie/logger.d.ts.map +1 -0
  139. package/dist/pie/logger.js +45 -0
  140. package/dist/pie/logger.js.map +1 -0
  141. package/dist/pie/math-rendering.d.ts +69 -0
  142. package/dist/pie/math-rendering.d.ts.map +1 -0
  143. package/dist/pie/math-rendering.js +98 -0
  144. package/dist/pie/math-rendering.js.map +1 -0
  145. package/dist/pie/overrides.d.ts +43 -0
  146. package/dist/pie/overrides.d.ts.map +1 -0
  147. package/dist/pie/overrides.js +146 -0
  148. package/dist/pie/overrides.js.map +1 -0
  149. package/dist/pie/player-initializer.d.ts +55 -0
  150. package/dist/pie/player-initializer.d.ts.map +1 -0
  151. package/dist/pie/player-initializer.js +123 -0
  152. package/dist/pie/player-initializer.js.map +1 -0
  153. package/dist/pie/registry.d.ts +11 -0
  154. package/dist/pie/registry.d.ts.map +1 -0
  155. package/dist/pie/registry.js +21 -0
  156. package/dist/pie/registry.js.map +1 -0
  157. package/dist/pie/resource-monitor.d.ts +208 -0
  158. package/dist/pie/resource-monitor.d.ts.map +1 -0
  159. package/dist/pie/resource-monitor.js +969 -0
  160. package/dist/pie/resource-monitor.js.map +1 -0
  161. package/dist/pie/scoring.d.ts +17 -0
  162. package/dist/pie/scoring.d.ts.map +1 -0
  163. package/dist/pie/scoring.js +84 -0
  164. package/dist/pie/scoring.js.map +1 -0
  165. package/dist/pie/types.d.ts +136 -0
  166. package/dist/pie/types.d.ts.map +1 -0
  167. package/dist/pie/types.js +52 -0
  168. package/dist/pie/types.js.map +1 -0
  169. package/dist/pie/updates.d.ts +20 -0
  170. package/dist/pie/updates.d.ts.map +1 -0
  171. package/dist/pie/updates.js +175 -0
  172. package/dist/pie/updates.js.map +1 -0
  173. package/dist/pie/use-resource-monitor.svelte.d.ts +56 -0
  174. package/dist/pie/use-resource-monitor.svelte.d.ts.map +1 -0
  175. package/dist/pie/use-resource-monitor.svelte.js +117 -0
  176. package/dist/pie/use-resource-monitor.svelte.js.map +1 -0
  177. package/dist/pie/utils.d.ts +44 -0
  178. package/dist/pie/utils.d.ts.map +1 -0
  179. package/dist/pie/utils.js +74 -0
  180. package/dist/pie/utils.js.map +1 -0
  181. package/dist/types/custom-elements.d.ts +183 -0
  182. package/dist/types/custom-elements.d.ts.map +1 -0
  183. package/dist/types/custom-elements.js +8 -0
  184. package/dist/types/custom-elements.js.map +1 -0
  185. package/dist/types/index.d.ts +761 -0
  186. package/dist/types/index.d.ts.map +1 -0
  187. package/dist/types/index.js +120 -0
  188. package/dist/types/index.js.map +1 -0
  189. package/dist/types/search.d.ts +105 -0
  190. package/dist/types/search.d.ts.map +1 -0
  191. package/dist/types/search.js +12 -0
  192. package/dist/types/search.js.map +1 -0
  193. package/dist/types/transform.d.ts +48 -0
  194. package/dist/types/transform.d.ts.map +1 -0
  195. package/dist/types/transform.js +21 -0
  196. package/dist/types/transform.js.map +1 -0
  197. package/dist/ui/focus-trap.d.ts +10 -0
  198. package/dist/ui/focus-trap.d.ts.map +1 -0
  199. package/dist/ui/focus-trap.js +30 -0
  200. package/dist/ui/focus-trap.js.map +1 -0
  201. package/dist/ui/safe-storage.d.ts +3 -0
  202. package/dist/ui/safe-storage.d.ts.map +1 -0
  203. package/dist/ui/safe-storage.js +21 -0
  204. package/dist/ui/safe-storage.js.map +1 -0
  205. package/package.json +118 -0
  206. package/src/components/PieItemPlayer.svelte +604 -0
  207. package/src/components/PiePreviewLayout.svelte +144 -0
  208. package/src/components/PiePreviewToggle.svelte +110 -0
  209. package/src/components/PieSpinner.svelte +85 -0
  210. package/src/components/ToolSettingsButton.svelte +31 -0
  211. package/src/components/ToolSettingsPanel.svelte +90 -0
  212. package/src/components/index.ts +6 -0
  213. package/src/i18n/README.md +223 -0
  214. package/src/i18n/index.ts +26 -0
  215. package/src/i18n/loader.ts +156 -0
  216. package/src/i18n/scripts/check-coverage.ts +345 -0
  217. package/src/i18n/scripts/scan-hardcoded.ts +342 -0
  218. package/src/i18n/simple-i18n.ts +236 -0
  219. package/src/i18n/translations/ar/common.json +36 -0
  220. package/src/i18n/translations/ar/toolkit.json +48 -0
  221. package/src/i18n/translations/ar/tools.json +109 -0
  222. package/src/i18n/translations/en/common.json +36 -0
  223. package/src/i18n/translations/en/toolkit.json +48 -0
  224. package/src/i18n/translations/en/tools.json +109 -0
  225. package/src/i18n/translations/es/common.json +36 -0
  226. package/src/i18n/translations/es/toolkit.json +48 -0
  227. package/src/i18n/translations/es/tools.json +109 -0
  228. package/src/i18n/translations/zh/common.json +36 -0
  229. package/src/i18n/translations/zh/toolkit.json +48 -0
  230. package/src/i18n/translations/zh/tools.json +109 -0
  231. package/src/i18n/types.ts +66 -0
  232. package/src/i18n/use-i18n-standalone.svelte.ts +184 -0
  233. package/src/i18n/use-i18n.svelte.ts +163 -0
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Minimal, frontend-safe defaults for PIE build service URLs.
3
+ *
4
+ * In PIEOneer, these come from `$env/dynamic/public`. In `pie-players` we avoid
5
+ * SvelteKit env dependencies so this can be consumed by any bundler.
6
+ */
7
+ declare global {
8
+ interface Window {
9
+ PIE_BUILDER_ORIGIN_URL?: string;
10
+ PIE_BUILDER_BUNDLE_URL?: string;
11
+ }
12
+ }
13
+ export declare const BUILDER_ORIGIN_URL: string;
14
+ export declare const BUILDER_BUNDLE_URL: string;
15
+ //# sourceMappingURL=profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/config/profile.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,CAAC,MAAM,CAAC;IACd,UAAU,MAAM;QACf,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,sBAAsB,CAAC,EAAE,MAAM,CAAC;KAChC;CACD;AAWD,eAAO,MAAM,kBAAkB,QAGJ,CAAC;AAE5B,eAAO,MAAM,kBAAkB,QAGJ,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Minimal, frontend-safe defaults for PIE build service URLs.
3
+ *
4
+ * In PIEOneer, these come from `$env/dynamic/public`. In `pie-players` we avoid
5
+ * SvelteKit env dependencies so this can be consumed by any bundler.
6
+ */
7
+ // Default public bundle host. Keep this aligned with the IIFE loader default.
8
+ // (We prefer the proxy endpoint, which is stable/cached for browser usage.)
9
+ const DEFAULT_BUILDER_ORIGIN_URL = "https://proxy.pie-api.com";
10
+ const DEFAULT_BUILDER_BUNDLE_URL = `${DEFAULT_BUILDER_ORIGIN_URL}/bundles/`;
11
+ function readPublicEnv(key) {
12
+ try {
13
+ // Vite/SvelteKit-like
14
+ const v = import.meta?.env?.[key];
15
+ if (typeof v === "string" && v.length > 0)
16
+ return v;
17
+ }
18
+ catch { }
19
+ return undefined;
20
+ }
21
+ export const BUILDER_ORIGIN_URL = (typeof window !== "undefined" && window.PIE_BUILDER_ORIGIN_URL) ||
22
+ readPublicEnv("PUBLIC_BUILDER_ORIGIN_URL") ||
23
+ DEFAULT_BUILDER_ORIGIN_URL;
24
+ export const BUILDER_BUNDLE_URL = (typeof window !== "undefined" && window.PIE_BUILDER_BUNDLE_URL) ||
25
+ readPublicEnv("PUBLIC_BUILDER_BUNDLE_URL") ||
26
+ DEFAULT_BUILDER_BUNDLE_URL;
27
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/config/profile.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8EAA8E;AAC9E,4EAA4E;AAC5E,MAAM,0BAA0B,GAAG,2BAA2B,CAAC;AAC/D,MAAM,0BAA0B,GAAG,GAAG,0BAA0B,WAAW,CAAC;AAS5E,SAAS,aAAa,CAAC,GAAW;IACjC,IAAI,CAAC;QACJ,sBAAsB;QACtB,MAAM,CAAC,GAAI,MAAM,CAAC,IAAY,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAC9B,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,sBAAsB,CAAC;IAChE,aAAa,CAAC,2BAA2B,CAAC;IAC1C,0BAA0B,CAAC;AAE5B,MAAM,CAAC,MAAM,kBAAkB,GAC9B,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,sBAAsB,CAAC;IAChE,aAAa,CAAC,2BAA2B,CAAC;IAC1C,0BAA0B,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * I18n Module
3
+ *
4
+ * Internationalization system for PIE Players.
5
+ *
6
+ * @module @pie-players/pie-players-shared/i18n
7
+ */
8
+ export { BUNDLED_TRANSLATIONS, getAvailableLocales, isRTLLocale, loadTranslations, } from "./loader";
9
+ export { SimpleI18n } from "./simple-i18n";
10
+ export type { I18nConfig, II18nService, PluralTranslation, TranslationBundle, } from "./types";
11
+ export { useI18n } from "./use-i18n.svelte";
12
+ export { type UseI18nStandaloneConfig, useI18nStandalone, } from "./use-i18n-standalone.svelte";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACN,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,GAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EACX,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,GACjB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EACN,KAAK,uBAAuB,EAC5B,iBAAiB,GACjB,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * I18n Module
3
+ *
4
+ * Internationalization system for PIE Players.
5
+ *
6
+ * @module @pie-players/pie-players-shared/i18n
7
+ */
8
+ export { BUNDLED_TRANSLATIONS, getAvailableLocales, isRTLLocale, loadTranslations, } from "./loader";
9
+ export { SimpleI18n } from "./simple-i18n";
10
+ export { useI18n } from "./use-i18n.svelte";
11
+ export { useI18nStandalone, } from "./use-i18n-standalone.svelte";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACN,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,gBAAgB,GAChB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAO3C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAEN,iBAAiB,GACjB,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Translation Loader
3
+ *
4
+ * Implements hybrid loading strategy:
5
+ * - English bundled with application
6
+ * - Other languages loaded on demand
7
+ *
8
+ * Part of PIE Players i18n system.
9
+ */
10
+ import type { TranslationBundle } from "./types";
11
+ /**
12
+ * Bundled English translations
13
+ * Available immediately without network request
14
+ */
15
+ export declare const BUNDLED_TRANSLATIONS: Record<string, TranslationBundle>;
16
+ /**
17
+ * Load translations for a locale
18
+ *
19
+ * @param locale Locale code (e.g., 'en', 'es', 'zh', 'ar')
20
+ * @returns Translation bundle with flattened keys
21
+ */
22
+ export declare function loadTranslations(locale: string): Promise<TranslationBundle>;
23
+ /**
24
+ * Get available locales
25
+ *
26
+ * @returns Array of locale codes
27
+ */
28
+ export declare function getAvailableLocales(): string[];
29
+ /**
30
+ * Check if locale is RTL
31
+ *
32
+ * @param locale Locale code
33
+ * @returns True if locale is right-to-left
34
+ */
35
+ export declare function isRTLLocale(locale: string): boolean;
36
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/i18n/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAKjD;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAUlE,CAAC;AAuBF;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACrC,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,iBAAiB,CAAC,CAgC5B;AA0CD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEnD"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Translation Loader
3
+ *
4
+ * Implements hybrid loading strategy:
5
+ * - English bundled with application
6
+ * - Other languages loaded on demand
7
+ *
8
+ * Part of PIE Players i18n system.
9
+ */
10
+ // Import English translations (bundled)
11
+ import enCommon from "./translations/en/common.json";
12
+ import enToolkit from "./translations/en/toolkit.json";
13
+ import enTools from "./translations/en/tools.json";
14
+ // RTL locales
15
+ const RTL_LOCALES = ["ar", "he", "fa", "ur"];
16
+ /**
17
+ * Bundled English translations
18
+ * Available immediately without network request
19
+ */
20
+ export const BUNDLED_TRANSLATIONS = {
21
+ en: {
22
+ locale: "en",
23
+ direction: "ltr",
24
+ translations: {
25
+ ...flattenTranslations(enCommon),
26
+ ...flattenTranslations(enToolkit),
27
+ ...flattenTranslations(enTools),
28
+ },
29
+ },
30
+ };
31
+ const LOCALE_IMPORTS = {
32
+ es: () => Promise.all([
33
+ import("./translations/es/common.json"),
34
+ import("./translations/es/toolkit.json"),
35
+ import("./translations/es/tools.json"),
36
+ ]),
37
+ zh: () => Promise.all([
38
+ import("./translations/zh/common.json"),
39
+ import("./translations/zh/toolkit.json"),
40
+ import("./translations/zh/tools.json"),
41
+ ]),
42
+ ar: () => Promise.all([
43
+ import("./translations/ar/common.json"),
44
+ import("./translations/ar/toolkit.json"),
45
+ import("./translations/ar/tools.json"),
46
+ ]),
47
+ };
48
+ /**
49
+ * Load translations for a locale
50
+ *
51
+ * @param locale Locale code (e.g., 'en', 'es', 'zh', 'ar')
52
+ * @returns Translation bundle with flattened keys
53
+ */
54
+ export async function loadTranslations(locale) {
55
+ // Return bundled English immediately
56
+ if (locale === "en") {
57
+ return BUNDLED_TRANSLATIONS.en;
58
+ }
59
+ const importer = LOCALE_IMPORTS[locale];
60
+ if (!importer) {
61
+ throw new Error(`Translation files not found for locale: ${locale}. Ensure translation files exist in packages/players-shared/src/i18n/translations/${locale}/`);
62
+ }
63
+ // Lazy load other locales
64
+ try {
65
+ const [common, toolkit, tools] = await importer();
66
+ return {
67
+ locale,
68
+ direction: RTL_LOCALES.includes(locale) ? "rtl" : "ltr",
69
+ translations: {
70
+ ...flattenTranslations(common.default || common),
71
+ ...flattenTranslations(toolkit.default || toolkit),
72
+ ...flattenTranslations(tools.default || tools),
73
+ },
74
+ };
75
+ }
76
+ catch (error) {
77
+ console.error(`Failed to load translations for locale: ${locale}`, error);
78
+ throw new Error(`Translation files not found for locale: ${locale}. Ensure translation files exist in packages/players-shared/src/i18n/translations/${locale}/`);
79
+ }
80
+ }
81
+ /**
82
+ * Flatten nested JSON to dot notation
83
+ *
84
+ * Converts:
85
+ * { "common": { "save": "Save" } }
86
+ *
87
+ * To:
88
+ * { "common.save": "Save" }
89
+ *
90
+ * @param obj Nested translation object
91
+ * @param prefix Current key prefix
92
+ * @param result Accumulated result
93
+ * @returns Flattened translation object
94
+ */
95
+ function flattenTranslations(obj, prefix = "", result = {}) {
96
+ for (const [key, value] of Object.entries(obj)) {
97
+ const newKey = prefix ? `${prefix}.${key}` : key;
98
+ if (value && typeof value === "object" && !Array.isArray(value)) {
99
+ // Check if it's a plural form (has 'one' or 'other' keys)
100
+ if ("one" in value || "other" in value) {
101
+ // This is a plural translation, keep it as an object
102
+ result[newKey] = value;
103
+ }
104
+ else {
105
+ // This is a nested object, flatten recursively
106
+ flattenTranslations(value, newKey, result);
107
+ }
108
+ }
109
+ else {
110
+ // This is a leaf value
111
+ result[newKey] = value;
112
+ }
113
+ }
114
+ return result;
115
+ }
116
+ /**
117
+ * Get available locales
118
+ *
119
+ * @returns Array of locale codes
120
+ */
121
+ export function getAvailableLocales() {
122
+ return ["en", "es", "zh", "ar"];
123
+ }
124
+ /**
125
+ * Check if locale is RTL
126
+ *
127
+ * @param locale Locale code
128
+ * @returns True if locale is right-to-left
129
+ */
130
+ export function isRTLLocale(locale) {
131
+ return RTL_LOCALES.includes(locale);
132
+ }
133
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/i18n/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Translation Coverage Checker
4
+ *
5
+ * Validates that all locales have complete translations compared to the reference locale (English).
6
+ * Adapted from pie-qti's translation coverage checker for JSON-based translations.
7
+ *
8
+ * Usage:
9
+ * bun run packages/players-shared/src/i18n/scripts/check-coverage.ts
10
+ *
11
+ * Exit codes:
12
+ * 0 - All translations complete
13
+ * 1 - Missing translations found
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=check-coverage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-coverage.d.ts","sourceRoot":"","sources":["../../../src/i18n/scripts/check-coverage.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG"}
@@ -0,0 +1,262 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Translation Coverage Checker
4
+ *
5
+ * Validates that all locales have complete translations compared to the reference locale (English).
6
+ * Adapted from pie-qti's translation coverage checker for JSON-based translations.
7
+ *
8
+ * Usage:
9
+ * bun run packages/players-shared/src/i18n/scripts/check-coverage.ts
10
+ *
11
+ * Exit codes:
12
+ * 0 - All translations complete
13
+ * 1 - Missing translations found
14
+ */
15
+ import { readFileSync } from "fs";
16
+ import { dirname, join, resolve } from "path";
17
+ import { fileURLToPath } from "url";
18
+ const __filename = fileURLToPath(import.meta.url);
19
+ const __dirname = dirname(__filename);
20
+ /**
21
+ * Extract all keys from a translation object recursively
22
+ */
23
+ function extractKeys(obj, prefix = "") {
24
+ const keys = new Set();
25
+ for (const [key, value] of Object.entries(obj)) {
26
+ const fullKey = prefix ? `${prefix}.${key}` : key;
27
+ if (typeof value === "object" && value !== null) {
28
+ // Check if it's a plural form (has 'one' and 'other' keys)
29
+ if ("one" in value && "other" in value) {
30
+ keys.add(fullKey);
31
+ }
32
+ else {
33
+ // Recurse for nested objects
34
+ const nested = extractKeys(value, fullKey);
35
+ nested.forEach((k) => keys.add(k));
36
+ }
37
+ }
38
+ else {
39
+ keys.add(fullKey);
40
+ }
41
+ }
42
+ return keys;
43
+ }
44
+ /**
45
+ * Load all translations for a locale
46
+ */
47
+ function loadLocaleTranslations(locale) {
48
+ const basePath = resolve(__dirname, "../translations", locale);
49
+ try {
50
+ const common = JSON.parse(readFileSync(join(basePath, "common.json"), "utf-8"));
51
+ const toolkit = JSON.parse(readFileSync(join(basePath, "toolkit.json"), "utf-8"));
52
+ const tools = JSON.parse(readFileSync(join(basePath, "tools.json"), "utf-8"));
53
+ return { ...common, ...toolkit, ...tools };
54
+ }
55
+ catch (error) {
56
+ console.error(`Error loading translations for locale ${locale}:`, error);
57
+ throw error;
58
+ }
59
+ }
60
+ /**
61
+ * Get value at a dot-notation path
62
+ */
63
+ function getValueAtPath(obj, path) {
64
+ const keys = path.split(".");
65
+ let current = obj;
66
+ for (const key of keys) {
67
+ if (current && typeof current === "object" && key in current) {
68
+ current = current[key];
69
+ }
70
+ else {
71
+ return undefined;
72
+ }
73
+ }
74
+ return current;
75
+ }
76
+ /**
77
+ * Check if a value looks like English (starts with uppercase letter)
78
+ */
79
+ function looksLikeEnglish(value) {
80
+ if (typeof value !== "string")
81
+ return false;
82
+ return /^[A-Z]/.test(value) && value.length > 1;
83
+ }
84
+ /**
85
+ * Check translation coverage for a locale
86
+ */
87
+ function checkLocale(referenceKeys, referenceTranslations, targetLocale) {
88
+ const targetTranslations = loadLocaleTranslations(targetLocale);
89
+ const targetKeys = extractKeys(targetTranslations);
90
+ // Missing keys (in reference but not in target)
91
+ const missing = Array.from(referenceKeys).filter((key) => !targetKeys.has(key));
92
+ // Extra keys (in target but not in reference)
93
+ const extra = Array.from(targetKeys).filter((key) => !referenceKeys.has(key));
94
+ // Potentially untranslated (same value as reference and looks like English)
95
+ const untranslated = Array.from(targetKeys).filter((key) => {
96
+ const refValue = getValueAtPath(referenceTranslations, key);
97
+ const targetValue = getValueAtPath(targetTranslations, key);
98
+ // For plural forms, check both 'one' and 'other'
99
+ if (typeof refValue === "object" && "one" in refValue) {
100
+ return (refValue.one === targetValue.one &&
101
+ refValue.other === targetValue.other &&
102
+ looksLikeEnglish(targetValue.one));
103
+ }
104
+ if (typeof refValue === "string" && typeof targetValue === "string") {
105
+ return refValue === targetValue && looksLikeEnglish(targetValue);
106
+ }
107
+ return false;
108
+ });
109
+ const translatedKeys = referenceKeys.size - missing.length;
110
+ const coverage = referenceKeys.size > 0 ? (translatedKeys / referenceKeys.size) * 100 : 0;
111
+ return {
112
+ locale: targetLocale,
113
+ coverage,
114
+ totalKeys: referenceKeys.size,
115
+ translatedKeys,
116
+ missing,
117
+ extra,
118
+ untranslated,
119
+ };
120
+ }
121
+ /**
122
+ * Format coverage report
123
+ */
124
+ function formatReport(results) {
125
+ let report = "\n";
126
+ report += "┌─────────────────────────────────────────────────────┐\n";
127
+ report += "│ PIE Players Translation Coverage Report │\n";
128
+ report += `│ Reference Locale: en (${results[0]?.totalKeys || 0} keys) │\n`;
129
+ report += "└─────────────────────────────────────────────────────┘\n\n";
130
+ for (const result of results) {
131
+ report += `📋 Locale: ${result.locale}\n`;
132
+ report += "─────────────────────────────────────────────────────\n";
133
+ const coverageEmoji = result.coverage === 100 ? "✅" : result.coverage >= 95 ? "⚠️ " : "❌";
134
+ report += `${coverageEmoji} Coverage: ${result.coverage.toFixed(1)}% `;
135
+ report += `(${result.translatedKeys}/${result.totalKeys} keys)\n\n`;
136
+ if (result.coverage === 100 &&
137
+ result.extra.length === 0 &&
138
+ result.untranslated.length === 0) {
139
+ report += "✅ All keys present and translated!\n\n";
140
+ }
141
+ else {
142
+ if (result.missing.length > 0) {
143
+ report += `❌ Missing Keys (${result.missing.length}):\n`;
144
+ const displayCount = Math.min(result.missing.length, 15);
145
+ result.missing.slice(0, displayCount).forEach((key) => {
146
+ report += ` • ${key}\n`;
147
+ });
148
+ if (result.missing.length > displayCount) {
149
+ report += ` ... and ${result.missing.length - displayCount} more\n`;
150
+ }
151
+ report += "\n";
152
+ }
153
+ if (result.extra.length > 0) {
154
+ report += `⚠️ Extra Keys (${result.extra.length}) - Not in reference locale:\n`;
155
+ const displayCount = Math.min(result.extra.length, 10);
156
+ result.extra.slice(0, displayCount).forEach((key) => {
157
+ report += ` • ${key}\n`;
158
+ });
159
+ if (result.extra.length > displayCount) {
160
+ report += ` ... and ${result.extra.length - displayCount} more\n`;
161
+ }
162
+ report += "\n";
163
+ }
164
+ if (result.untranslated.length > 0) {
165
+ report += `⚠️ Potentially Untranslated (${result.untranslated.length}):\n`;
166
+ const displayCount = Math.min(result.untranslated.length, 10);
167
+ result.untranslated.slice(0, displayCount).forEach((key) => {
168
+ const value = getValueAtPath(loadLocaleTranslations(result.locale), key);
169
+ const displayValue = typeof value === "string" ? value : JSON.stringify(value);
170
+ report += ` • ${key} = "${displayValue}"\n`;
171
+ });
172
+ if (result.untranslated.length > displayCount) {
173
+ report += ` ... and ${result.untranslated.length - displayCount} more\n`;
174
+ }
175
+ report += "\n";
176
+ }
177
+ }
178
+ }
179
+ // Summary
180
+ report += "════════════════════════════════════════════════════════\n";
181
+ report += "📊 Summary:\n";
182
+ report += "────────────────────────────────────────────────────────\n";
183
+ for (const result of results) {
184
+ const emoji = result.coverage === 100 ? "✅" : result.coverage >= 95 ? "⚠️ " : "❌";
185
+ const status = result.coverage === 100
186
+ ? result.extra.length > 0 || result.untranslated.length > 0
187
+ ? `Complete (${result.extra.length} extra, ${result.untranslated.length} untranslated)`
188
+ : "Complete"
189
+ : `Missing: ${result.missing.length}`;
190
+ report += ` ${result.locale}: ${result.coverage.toFixed(1)}% `;
191
+ report += `(${result.translatedKeys}/${result.totalKeys}) `;
192
+ report += `${emoji} ${status}\n`;
193
+ }
194
+ const avgCoverage = results.reduce((sum, r) => sum + r.coverage, 0) / results.length;
195
+ report += `\nOverall: ${avgCoverage.toFixed(1)}% average coverage\n`;
196
+ const allComplete = results.every((r) => r.coverage === 100);
197
+ const hasIssues = results.some((r) => r.extra.length > 0 || r.untranslated.length > 0);
198
+ if (allComplete && !hasIssues) {
199
+ report += "✅ All translations complete!\n";
200
+ }
201
+ else if (allComplete) {
202
+ report +=
203
+ "⚠️ All keys present, but some issues found (extra keys or untranslated)\n";
204
+ }
205
+ else {
206
+ report += "❌ Some translations incomplete\n";
207
+ }
208
+ report += "════════════════════════════════════════════════════════\n";
209
+ return report;
210
+ }
211
+ /**
212
+ * Main entry point
213
+ */
214
+ async function main() {
215
+ console.log("🔍 Checking translation coverage...\n");
216
+ try {
217
+ // Load reference locale (English)
218
+ const referenceTranslations = loadLocaleTranslations("en");
219
+ const referenceKeys = extractKeys(referenceTranslations);
220
+ console.log(`📖 Reference locale loaded: ${referenceKeys.size} keys\n`);
221
+ // Check all other locales
222
+ const targetLocales = ["es", "zh", "ar"];
223
+ const results = [];
224
+ for (const locale of targetLocales) {
225
+ try {
226
+ const result = checkLocale(referenceKeys, referenceTranslations, locale);
227
+ results.push(result);
228
+ }
229
+ catch (error) {
230
+ console.error(`❌ Error checking locale ${locale}:`, error);
231
+ process.exit(1);
232
+ }
233
+ }
234
+ // Print report
235
+ const report = formatReport(results);
236
+ console.log(report);
237
+ // Exit with error if any locale is incomplete
238
+ const allComplete = results.every((r) => r.coverage === 100);
239
+ if (!allComplete) {
240
+ console.error("\n❌ Exiting with error code 1 (translations incomplete)\n");
241
+ process.exit(1);
242
+ }
243
+ // Warn if there are extra keys or untranslated strings
244
+ const hasIssues = results.some((r) => r.extra.length > 0 || r.untranslated.length > 0);
245
+ if (hasIssues) {
246
+ console.warn("\n⚠️ Warning: Some locales have extra keys or potentially untranslated strings.\n" +
247
+ " Consider reviewing and cleaning up these issues.\n");
248
+ // Don't exit with error for warnings, just inform
249
+ }
250
+ console.log("✅ Translation coverage check passed!\n");
251
+ process.exit(0);
252
+ }
253
+ catch (error) {
254
+ console.error("\n❌ Fatal error during coverage check:", error);
255
+ process.exit(1);
256
+ }
257
+ }
258
+ // Run if executed directly
259
+ if (import.meta.url === `file://${process.argv[1]}`) {
260
+ main();
261
+ }
262
+ //# sourceMappingURL=check-coverage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-coverage.js","sourceRoot":"","sources":["../../../src/i18n/scripts/check-coverage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Hardcoded String Scanner
4
+ *
5
+ * Scans component files for hardcoded English strings that should use i18n.
6
+ * Adapted from pie-qti's hardcoded string scanner.
7
+ *
8
+ * Usage:
9
+ * bun run packages/players-shared/src/i18n/scripts/scan-hardcoded.ts
10
+ *
11
+ * Options:
12
+ * --path <dir> - Directory to scan (default: packages/)
13
+ * --fix - Attempt to auto-fix issues (not implemented yet)
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=scan-hardcoded.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-hardcoded.d.ts","sourceRoot":"","sources":["../../../src/i18n/scripts/scan-hardcoded.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG"}