@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 @@
1
+ {"version":3,"file":"math-rendering.js","sourceRoot":"","sources":["../../src/pie/math-rendering.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,sCAAsC;AAEtC,OAAO,EAEN,oBAAoB,GACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC5C,cAAiC;IAEjC,sBAAsB;IACtB,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QACnC,OAAO;IACR,CAAC;IAED,6BAA6B;IAC7B,IAAI,oBAAoB,CAAC,aAAa,EAAE,EAAE,CAAC;QAC1C,OAAO;IACR,CAAC;IAED,IAAI,CAAC;QACJ,uEAAuE;QACvE,MAAM,QAAQ,GAAG,cAAc,IAAI,CAAC,MAAM,qBAAqB,EAAE,CAAC,CAAC;QAEnE,yDAAyD;QACzD,oBAAoB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE3C,OAAO,CAAC,GAAG,CACV,wEAAwE,CACxE,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CACZ,wDAAwD,EACxD,KAAK,CACL,CAAC;QACF,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,eAAe,CAAC,QAA0B;IACzD,oBAAoB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CAAC,OAAoB;IAC9C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,EAAE,CAAC;IAEpD,IAAI,QAAQ,IAAI,OAAO,QAAQ,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QAC3D,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;AACF,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * PIE element override helpers.
3
+ *
4
+ * Used to:
5
+ * - parse overrides from URL params
6
+ * - apply overrides to a PIE config (server-side or client-side)
7
+ * - build URLs/params for sharing override state
8
+ */
9
+ export type ElementOverrides = Record<string, string>;
10
+ /**
11
+ * Apply element overrides to a PIE config
12
+ * @param config The original PIE config
13
+ * @param elementOverrides Map of element packages to override versions
14
+ * @returns Updated config with overridden elements
15
+ */
16
+ export declare function applyElementOverrides(config: any, elementOverrides: ElementOverrides): any;
17
+ /**
18
+ * Parse element overrides from URL search params.
19
+ * @returns Map of element package names to versions
20
+ */
21
+ export declare function parseElementOverridesFromUrl(searchParams: URLSearchParams): ElementOverrides;
22
+ /**
23
+ * Parse element overrides from current window URL (client-only).
24
+ */
25
+ export declare function parseElementOverridesFromCurrentUrl(): ElementOverrides;
26
+ /**
27
+ * Generate a URL parameter string for an element override
28
+ */
29
+ export declare function formatElementOverrideParam(packageName: string, version: string): string;
30
+ /**
31
+ * Creates a URL that preserves existing overrides and adds or updates a new one.
32
+ */
33
+ export declare function addOrUpdateOverrideInUrl(url: URL, packageName: string, version: string): string;
34
+ /**
35
+ * Extract package information from a package string.
36
+ * Intended for UI display.
37
+ */
38
+ export declare function extractPackageInfo(packageStr: string): {
39
+ name: string;
40
+ version: string;
41
+ displayName: string;
42
+ };
43
+ //# sourceMappingURL=overrides.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../../src/pie/overrides.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEtD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACpC,MAAM,EAAE,GAAG,EACX,gBAAgB,EAAE,gBAAgB,OAyElC;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC3C,YAAY,EAAE,eAAe,GAC3B,gBAAgB,CAkBlB;AAED;;GAEG;AACH,wBAAgB,mCAAmC,IAAI,gBAAgB,CAOtE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACzC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACb,MAAM,CAMR;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACvC,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACb,MAAM,CAeR;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM;;;;EAgBpD"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * PIE element override helpers.
3
+ *
4
+ * Used to:
5
+ * - parse overrides from URL params
6
+ * - apply overrides to a PIE config (server-side or client-side)
7
+ * - build URLs/params for sharing override state
8
+ */
9
+ import { cloneDeep } from "../object";
10
+ import { parsePackageName } from "./utils";
11
+ /**
12
+ * Apply element overrides to a PIE config
13
+ * @param config The original PIE config
14
+ * @param elementOverrides Map of element packages to override versions
15
+ * @returns Updated config with overridden elements
16
+ */
17
+ export function applyElementOverrides(config, elementOverrides) {
18
+ if (!config ||
19
+ !elementOverrides ||
20
+ Object.keys(elementOverrides).length === 0) {
21
+ return config;
22
+ }
23
+ // Create a deep copy of the config to avoid mutating the original
24
+ const updatedConfig = cloneDeep(config);
25
+ // Check if there are elements to override
26
+ if (!updatedConfig.elements) {
27
+ return updatedConfig;
28
+ }
29
+ // Process each override
30
+ for (const [packageName, version] of Object.entries(elementOverrides)) {
31
+ let matched = false;
32
+ // Find the element key that uses this package
33
+ for (const [elementKey, elementPackageValue] of Object.entries(updatedConfig.elements)) {
34
+ const elementPackageStr = String(elementPackageValue);
35
+ let basePackageName = "";
36
+ try {
37
+ basePackageName = parsePackageName(elementPackageStr).name;
38
+ }
39
+ catch {
40
+ console.warn(`[pie/overrides] Couldn't parse element package value: ${elementPackageStr}`);
41
+ continue;
42
+ }
43
+ if (basePackageName === packageName) {
44
+ matched = true;
45
+ // Create a new element key with the specified version
46
+ const versionNumber = String(version).replace(/[^0-9.-]/g, "");
47
+ const parts = String(elementKey).split("--version-");
48
+ const baseElementName = parts[0];
49
+ const newElementKey = `${baseElementName}--version-${versionNumber.replace(/\./g, "-")}`;
50
+ // Update the elements map
51
+ updatedConfig.elements[newElementKey] = `${packageName}@${version}`;
52
+ // If the key changed, update markup to reference the new key
53
+ if (newElementKey !== elementKey) {
54
+ if (updatedConfig.markup) {
55
+ updatedConfig.markup = String(updatedConfig.markup).replace(new RegExp(elementKey, "g"), newElementKey);
56
+ }
57
+ // Remove the old element if we created a new one with a different key
58
+ delete updatedConfig.elements[elementKey];
59
+ }
60
+ }
61
+ }
62
+ if (!matched) {
63
+ console.debug(`[pie/overrides] No matching element found for package ${packageName}`);
64
+ }
65
+ }
66
+ return updatedConfig;
67
+ }
68
+ /**
69
+ * Parse element overrides from URL search params.
70
+ * @returns Map of element package names to versions
71
+ */
72
+ export function parseElementOverridesFromUrl(searchParams) {
73
+ const overrides = {};
74
+ // Look for parameters with the pattern pie-overrides[packageName]=version
75
+ for (const [key, value] of searchParams.entries()) {
76
+ if (key.startsWith("pie-overrides[") && key.endsWith("]")) {
77
+ // Extract the package name from between the brackets
78
+ const packageName = key.substring(14, key.length - 1);
79
+ // Ensure the package name format is correct (including @)
80
+ const normalizedPackageName = packageName.startsWith("@")
81
+ ? packageName
82
+ : `@${packageName}`;
83
+ overrides[normalizedPackageName] = value;
84
+ }
85
+ }
86
+ return overrides;
87
+ }
88
+ /**
89
+ * Parse element overrides from current window URL (client-only).
90
+ */
91
+ export function parseElementOverridesFromCurrentUrl() {
92
+ if (typeof window === "undefined") {
93
+ return {};
94
+ }
95
+ const url = new URL(window.location.href);
96
+ return parseElementOverridesFromUrl(url.searchParams);
97
+ }
98
+ /**
99
+ * Generate a URL parameter string for an element override
100
+ */
101
+ export function formatElementOverrideParam(packageName, version) {
102
+ // Normalize the package name for the parameter key (strip leading @)
103
+ const normalizedPackageName = packageName.startsWith("@")
104
+ ? packageName.substring(1)
105
+ : packageName;
106
+ return `pie-overrides[${normalizedPackageName}]=${encodeURIComponent(version)}`;
107
+ }
108
+ /**
109
+ * Creates a URL that preserves existing overrides and adds or updates a new one.
110
+ */
111
+ export function addOrUpdateOverrideInUrl(url, packageName, version) {
112
+ const params = new URLSearchParams(url.search);
113
+ // Remove @ if present for consistency in URL
114
+ const normalizedPackageName = packageName.startsWith("@")
115
+ ? packageName.substring(1)
116
+ : packageName;
117
+ // Set the new override
118
+ params.set(`pie-overrides[${normalizedPackageName}]`, version);
119
+ // Create the new URL
120
+ const newUrl = new URL(url.pathname, url.origin);
121
+ newUrl.search = params.toString();
122
+ return newUrl.toString();
123
+ }
124
+ /**
125
+ * Extract package information from a package string.
126
+ * Intended for UI display.
127
+ */
128
+ export function extractPackageInfo(packageStr) {
129
+ try {
130
+ const parsed = parsePackageName(String(packageStr));
131
+ return {
132
+ name: parsed.name,
133
+ version: parsed.version || "unknown",
134
+ displayName: parsed.name.split("/").pop() || parsed.name,
135
+ };
136
+ }
137
+ catch {
138
+ const s = String(packageStr);
139
+ return {
140
+ name: s,
141
+ version: "unknown",
142
+ displayName: s.split("/").pop() || s,
143
+ };
144
+ }
145
+ }
146
+ //# sourceMappingURL=overrides.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/pie/overrides.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Shared PIE player initialization logic
3
+ * Used by both pie-inline-player and pie-fixed-player
4
+ */
5
+ export interface PiePlayerConfig {
6
+ env: any;
7
+ addCorrectResponse: boolean;
8
+ session: any[];
9
+ externalStyleUrls?: string;
10
+ customClassname?: string;
11
+ containerClass?: string;
12
+ passageContainerClass?: string;
13
+ }
14
+ export interface ItemData {
15
+ item: {
16
+ config: any;
17
+ };
18
+ passage?: {
19
+ config: {
20
+ markup?: string;
21
+ };
22
+ };
23
+ }
24
+ export interface PiePlayerElements {
25
+ playerEl: HTMLElement;
26
+ passageMarkup: string | null;
27
+ }
28
+ /**
29
+ * Initialize PIE player with item data
30
+ * This is the SAME for both inline and fixed players
31
+ */
32
+ export declare function initializePiePlayer(itemData: ItemData, config: PiePlayerConfig, elements: PiePlayerElements): Promise<void>;
33
+ /**
34
+ * Extract passage markup from item data
35
+ */
36
+ export declare function extractPassageMarkup(itemData: ItemData): string | null;
37
+ /**
38
+ * Ensure pie-player web component is loaded
39
+ */
40
+ export declare function ensurePiePlayerLoaded(): Promise<void>;
41
+ /**
42
+ * Build event listeners map for PIE elements
43
+ */
44
+ export declare function buildEventListenersMap(config: any, onSessionChanged: (detail: any) => void): Record<string, Record<string, (e: CustomEvent) => void>> | undefined;
45
+ /**
46
+ * Build URL parameters for API request
47
+ * SHARED by both inline and fixed players
48
+ */
49
+ export declare function buildApiParams(env: any, addCorrectResponse: boolean): URLSearchParams;
50
+ /**
51
+ * Fetch item data from API
52
+ * SHARED by both inline and fixed players
53
+ */
54
+ export declare function fetchItemData(apiBaseUrl: string, itemId: string, token: string, endpoint: "packaged" | "data-only", env: any, addCorrectResponse: boolean, signal?: AbortSignal): Promise<any>;
55
+ //# sourceMappingURL=player-initializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"player-initializer.d.ts","sourceRoot":"","sources":["../../src/pie/player-initializer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC/B,GAAG,EAAE,GAAG,CAAC;IACT,kBAAkB,EAAE,OAAO,CAAC;IAC5B,OAAO,EAAE,GAAG,EAAE,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE;QACL,MAAM,EAAE,GAAG,CAAC;KACZ,CAAC;IACF,OAAO,CAAC,EAAE;QACT,MAAM,EAAE;YACP,MAAM,CAAC,EAAE,MAAM,CAAC;SAChB,CAAC;KACF,CAAC;CACF;AAED,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,WAAW,CAAC;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACxC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAEtE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CA8B3D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACrC,MAAM,EAAE,GAAG,EACX,gBAAgB,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,IAAI,GACrC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI,CAAC,CAAC,GAAG,SAAS,CAatE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC7B,GAAG,EAAE,GAAG,EACR,kBAAkB,EAAE,OAAO,GACzB,eAAe,CAQjB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,UAAU,GAAG,WAAW,EAClC,GAAG,EAAE,GAAG,EACR,kBAAkB,EAAE,OAAO,EAC3B,MAAM,CAAC,EAAE,WAAW,GAClB,OAAO,CAAC,GAAG,CAAC,CAqBd"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Shared PIE player initialization logic
3
+ * Used by both pie-inline-player and pie-fixed-player
4
+ */
5
+ /**
6
+ * Initialize PIE player with item data
7
+ * This is the SAME for both inline and fixed players
8
+ */
9
+ export async function initializePiePlayer(itemData, config, elements) {
10
+ const { playerEl } = elements;
11
+ if (!itemData.item?.config || !playerEl) {
12
+ throw new Error("Missing item config or player element");
13
+ }
14
+ // Ensure pie-player is loaded
15
+ await ensurePiePlayerLoaded();
16
+ const defaultEnv = config.env || { mode: "evaluate", role: "instructor" };
17
+ // Configure player element
18
+ playerEl.config = itemData.item.config;
19
+ playerEl.env = defaultEnv;
20
+ const shouldShowCorrect = !!(config.addCorrectResponse ||
21
+ (defaultEnv.mode === "evaluate" && defaultEnv.role === "instructor"));
22
+ playerEl.addCorrectResponse = shouldShowCorrect;
23
+ // Forward additional properties
24
+ playerEl.session = {
25
+ id: "",
26
+ data: Array.isArray(config.session) ? config.session : [],
27
+ };
28
+ if (config.externalStyleUrls) {
29
+ playerEl.externalStyleUrls = config.externalStyleUrls;
30
+ }
31
+ if (config.customClassname) {
32
+ playerEl.customClassname = config.customClassname;
33
+ }
34
+ if (config.containerClass) {
35
+ playerEl.containerClass = config.containerClass;
36
+ }
37
+ if (config.passageContainerClass) {
38
+ playerEl.passageContainerClass = config.passageContainerClass;
39
+ }
40
+ }
41
+ /**
42
+ * Extract passage markup from item data
43
+ */
44
+ export function extractPassageMarkup(itemData) {
45
+ return itemData.passage?.config?.markup || null;
46
+ }
47
+ /**
48
+ * Ensure pie-player web component is loaded
49
+ */
50
+ export async function ensurePiePlayerLoaded() {
51
+ if (customElements.get("pie-player"))
52
+ return;
53
+ const url = "https://cdn.jsdelivr.net/npm/@pie-players/pie-player-components@latest/dist/pie-player-components/pie-player-components.esm.js";
54
+ await new Promise((resolve, reject) => {
55
+ const existing = document.querySelector("script[data-pie-player]");
56
+ if (existing) {
57
+ existing.addEventListener("load", () => resolve());
58
+ existing.addEventListener("error", () => reject(new Error("failed to load pie-player")));
59
+ return;
60
+ }
61
+ const s = document.createElement("script");
62
+ s.type = "module";
63
+ s.dataset.piePlayer = "true";
64
+ s.src = url;
65
+ s.addEventListener("load", () => resolve());
66
+ s.addEventListener("error", () => reject(new Error("failed to load pie-player")));
67
+ document.head.appendChild(s);
68
+ });
69
+ await customElements.whenDefined("pie-player");
70
+ }
71
+ /**
72
+ * Build event listeners map for PIE elements
73
+ */
74
+ export function buildEventListenersMap(config, onSessionChanged) {
75
+ if (!config?.elements)
76
+ return undefined;
77
+ const listeners = {};
78
+ Object.keys(config.elements).forEach((elName) => {
79
+ listeners[elName] = {
80
+ "session-changed": (e) => onSessionChanged(e.detail),
81
+ };
82
+ });
83
+ return listeners;
84
+ }
85
+ /**
86
+ * Build URL parameters for API request
87
+ * SHARED by both inline and fixed players
88
+ */
89
+ export function buildApiParams(env, addCorrectResponse) {
90
+ const params = new URLSearchParams();
91
+ if (env && typeof env === "object") {
92
+ if (env.mode)
93
+ params.set("mode", String(env.mode));
94
+ if (env.role)
95
+ params.set("role", String(env.role));
96
+ }
97
+ if (addCorrectResponse)
98
+ params.set("addCorrectResponse", "true");
99
+ return params;
100
+ }
101
+ /**
102
+ * Fetch item data from API
103
+ * SHARED by both inline and fixed players
104
+ */
105
+ export async function fetchItemData(apiBaseUrl, itemId, token, endpoint, env, addCorrectResponse, signal) {
106
+ if (typeof window === "undefined" || typeof document === "undefined") {
107
+ throw new Error("PIE initialization must run in browser");
108
+ }
109
+ const params = buildApiParams(env, addCorrectResponse);
110
+ const apiUrl = `${apiBaseUrl}/api/item/${itemId}/${endpoint}${params.toString() ? `?${params.toString()}` : ""}`;
111
+ const response = await fetch(apiUrl, {
112
+ headers: {
113
+ Authorization: `Bearer ${token}`,
114
+ Accept: "application/json",
115
+ },
116
+ signal,
117
+ });
118
+ if (!response.ok) {
119
+ throw new Error(`Failed to fetch item data: ${response.statusText}`);
120
+ }
121
+ return await response.json();
122
+ }
123
+ //# sourceMappingURL=player-initializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"player-initializer.js","sourceRoot":"","sources":["../../src/pie/player-initializer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * PIE Registry Module
3
+ *
4
+ * Manages the global PIE registry that tracks loaded elements.
5
+ */
6
+ import type { PieRegistry } from "./types";
7
+ /**
8
+ * Get or create the global PIE registry
9
+ */
10
+ export declare const pieRegistry: () => PieRegistry;
11
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/pie/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAG3C;;GAEG;AACH,eAAO,MAAM,WAAW,QAAO,WAS9B,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * PIE Registry Module
3
+ *
4
+ * Manages the global PIE registry that tracks loaded elements.
5
+ */
6
+ import { isPieRegistryAvailable } from "./types";
7
+ /**
8
+ * Get or create the global PIE registry
9
+ */
10
+ export const pieRegistry = () => {
11
+ let registry;
12
+ if (isPieRegistryAvailable(window)) {
13
+ registry = window.PIE_REGISTRY;
14
+ }
15
+ else {
16
+ registry = {};
17
+ window.PIE_REGISTRY = registry;
18
+ }
19
+ return registry;
20
+ };
21
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/pie/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAgB,EAAE;IAC5C,IAAI,QAAqB,CAAC;IAC1B,IAAI,sBAAsB,CAAC,MAAM,CAAC,EAAE,CAAC;QACpC,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC;IAChC,CAAC;SAAM,CAAC;QACP,QAAQ,GAAG,EAAE,CAAC;QACb,MAAc,CAAC,YAAY,GAAG,QAAQ,CAAC;IACzC,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC"}
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Resource Monitor for PIE Element Assets
3
+ *
4
+ * Tracks and monitors loading of resources (audio, video, images) embedded
5
+ * in PIE element content without requiring changes to PIE elements.
6
+ *
7
+ * Features:
8
+ * - Tracks resource load timing with PerformanceObserver
9
+ * - Detects and retries failed resource loads
10
+ * - Sends instrumentation to New Relic
11
+ * - Works with all resource types (audio, video, img, link)
12
+ */
13
+ import type { InstrumentationProvider } from "../instrumentation/types";
14
+ import type { ComponentContext } from "./component-context";
15
+ export type ResourceMonitorConfig = {
16
+ /**
17
+ * Enable tracking page actions/events
18
+ *
19
+ * When true, resource monitoring events will be sent to the instrumentation provider.
20
+ */
21
+ trackPageActions?: boolean;
22
+ /**
23
+ * Instrumentation provider for tracking events and errors
24
+ *
25
+ * Optional. If not provided, defaults to NewRelicInstrumentationProvider.
26
+ * The provider handles instrumentation gracefully - if New Relic is not available,
27
+ * it will simply not track events (no errors thrown).
28
+ *
29
+ * To use a different provider (DataDog, Dynatrace, etc.), pass it here:
30
+ *
31
+ * @example
32
+ * ```typescript
33
+ * const provider = new DataDogInstrumentationProvider();
34
+ * await provider.initialize({ providerSettings: { ... } });
35
+ *
36
+ * const monitor = new ResourceMonitor({
37
+ * trackPageActions: true,
38
+ * instrumentationProvider: provider
39
+ * });
40
+ * ```
41
+ */
42
+ instrumentationProvider?: InstrumentationProvider;
43
+ /**
44
+ * Maximum number of retry attempts for failed resources
45
+ * Default: 3
46
+ */
47
+ maxRetries?: number;
48
+ /**
49
+ * Initial delay in ms before first retry
50
+ * Default: 500
51
+ */
52
+ initialRetryDelay?: number;
53
+ /**
54
+ * Maximum delay in ms between retries
55
+ * Default: 5000
56
+ */
57
+ maxRetryDelay?: number;
58
+ /**
59
+ * Enable debug logging
60
+ */
61
+ debug?: boolean;
62
+ };
63
+ /**
64
+ * Event detail for resource monitoring events
65
+ */
66
+ export interface ResourceMonitorEventDetail {
67
+ url: string;
68
+ resourceType: string;
69
+ duration?: number;
70
+ size?: number;
71
+ retryCount: number;
72
+ maxRetries: number;
73
+ error?: string;
74
+ }
75
+ /**
76
+ * Tracks resource loads and provides retry capability
77
+ */
78
+ export declare class ResourceMonitor {
79
+ private config;
80
+ private logger;
81
+ private observer;
82
+ private mutationObserver;
83
+ private errorHandler;
84
+ private retryAttempts;
85
+ private container;
86
+ private isBrowser;
87
+ private containerResources;
88
+ private provider;
89
+ constructor(config?: ResourceMonitorConfig);
90
+ /**
91
+ * Check if debug logging is enabled (dynamically checks window.PIE_DEBUG)
92
+ */
93
+ private isDebugEnabled;
94
+ /**
95
+ * Truncate URL for display in logs
96
+ */
97
+ private truncateUrl;
98
+ /**
99
+ * Strip retry parameters from URL to get the original URL
100
+ */
101
+ private getOriginalUrl;
102
+ /**
103
+ * Track event with instrumentation provider if enabled
104
+ */
105
+ private trackInstrumentationEvent;
106
+ /**
107
+ * Track error with instrumentation provider if enabled
108
+ */
109
+ private trackInstrumentationError;
110
+ /**
111
+ * Start monitoring resources in the given container
112
+ */
113
+ start(container: HTMLElement): void;
114
+ /**
115
+ * Stop monitoring and clean up
116
+ */
117
+ stop(): void;
118
+ /**
119
+ * Set up MutationObserver to track DOM changes within container
120
+ * This allows us to know which resources belong to our container
121
+ */
122
+ private setupMutationObserver;
123
+ /**
124
+ * Scan an element and its descendants for resources
125
+ */
126
+ private scanElementForResources;
127
+ /**
128
+ * Initial scan of container for existing resources
129
+ */
130
+ private scanContainerResources;
131
+ /**
132
+ * Set up PerformanceObserver to track resource loading timing
133
+ */
134
+ private setupPerformanceObserver;
135
+ /**
136
+ * Handle resource timing entry
137
+ */
138
+ private handleResourceTiming;
139
+ /**
140
+ * Handle successful resource load
141
+ */
142
+ private handleSuccessfulLoad;
143
+ /**
144
+ * Handle failed resource load
145
+ */
146
+ private handleFailedLoad;
147
+ /**
148
+ * Check if resource is relevant to our container
149
+ * Uses container-scoped tracking via MutationObserver
150
+ * Also retroactively checks if resource belongs to container if not yet tracked
151
+ */
152
+ private isRelevantResource;
153
+ /**
154
+ * Check if a resource URL actually belongs to our container by checking DOM elements
155
+ * This is a fallback for resources that loaded before MutationObserver scanned
156
+ */
157
+ private isResourceInContainer;
158
+ /**
159
+ * Set up error event handler for resource loading failures
160
+ */
161
+ private setupErrorHandler;
162
+ /**
163
+ * Check if element is a resource element
164
+ */
165
+ private isResourceElement;
166
+ /**
167
+ * Get resource src/href from element
168
+ */
169
+ private getResourceSrc;
170
+ /**
171
+ * Handle permanent resource failure after all retries exhausted
172
+ */
173
+ private handlePermanentFailure;
174
+ /**
175
+ * Log retry schedule information
176
+ */
177
+ private logRetrySchedule;
178
+ /**
179
+ * Retry loading a failed resource with exponential backoff
180
+ */
181
+ private retryResourceLoad;
182
+ /**
183
+ * Dispatch a custom event from the container
184
+ */
185
+ private dispatchEvent;
186
+ /**
187
+ * Get current retry statistics
188
+ */
189
+ getStats(): {
190
+ activeRetries: number;
191
+ failedResources: Array<{
192
+ url: string;
193
+ attempts: number;
194
+ }>;
195
+ };
196
+ }
197
+ /**
198
+ * Create and start a resource monitor for a container
199
+ */
200
+ export declare function createResourceMonitor(container: HTMLElement, config?: ResourceMonitorConfig): ResourceMonitor;
201
+ /**
202
+ * Initialize global resource request tracking (404s for fonts/images/etc.)
203
+ * Call this once when the app loads (client-side only).
204
+ */
205
+ export declare function initializeResourceRequestTracking(): void;
206
+ export declare function getTrackedResourceRequests(): Map<string, ComponentContext[]>;
207
+ export declare function clearTrackedResourceRequests(): void;
208
+ //# sourceMappingURL=resource-monitor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-monitor.d.ts","sourceRoot":"","sources":["../../src/pie/resource-monitor.ts"],"names":[],"mappings":"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"}