koin.js 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -4956,7 +4956,7 @@ function RASidebar({
4956
4956
  if (filter === "unlocked") return unlocked;
4957
4957
  return true;
4958
4958
  });
4959
- return /* @__PURE__ */ jsxs(Fragment, { children: [
4959
+ return /* @__PURE__ */ jsxs("div", { className: "koin-scope", style: { display: "contents" }, children: [
4960
4960
  /* @__PURE__ */ jsx(
4961
4961
  "div",
4962
4962
  {
@@ -7434,8 +7434,39 @@ function usePlayerPersistence(onSettingsChange) {
7434
7434
  updateSettings
7435
7435
  };
7436
7436
  }
7437
+
7438
+ // src/lib/telemetry.ts
7439
+ var sendTelemetry = (eventName, params = {}) => {
7440
+ if (typeof window === "undefined") return;
7441
+ try {
7442
+ fetch("https://koin.theretrosaga.com/api/telemetry", {
7443
+ method: "POST",
7444
+ headers: {
7445
+ "Content-Type": "application/json"
7446
+ },
7447
+ body: JSON.stringify({
7448
+ event_name: eventName,
7449
+ params: {
7450
+ ...params,
7451
+ url: window.location.href,
7452
+ referrer: document.referrer,
7453
+ timestamp: (/* @__PURE__ */ new Date()).toISOString()
7454
+ }
7455
+ })
7456
+ }).catch(() => {
7457
+ });
7458
+ } catch (e) {
7459
+ }
7460
+ };
7437
7461
  var GamePlayer = memo(function GamePlayer2(props) {
7438
7462
  const { settings, updateSettings, isLoaded: settingsLoaded } = usePlayerPersistence();
7463
+ useEffect(() => {
7464
+ sendTelemetry("game_start", {
7465
+ system: props.system,
7466
+ core: props.core,
7467
+ game: props.title || "unknown"
7468
+ });
7469
+ }, [props.system, props.core, props.title]);
7439
7470
  const [biosModalOpen, setBiosModalOpen] = useState(false);
7440
7471
  const [showShortcutsModal, setShowShortcutsModal] = useState(false);
7441
7472
  const effectiveShader = props.shader !== void 0 ? props.shader : settings.shader;
@@ -7533,6 +7564,13 @@ var GamePlayer = memo(function GamePlayer2(props) {
7533
7564
  status,
7534
7565
  isPerformanceMode
7535
7566
  } = nostalgist;
7567
+ useEffect(() => {
7568
+ if (status === "running") {
7569
+ console.log("[Koin Debug] Status:", status);
7570
+ console.log("[Koin Debug] isPerformanceMode:", isPerformanceMode);
7571
+ console.log("[Koin Debug] crossOriginIsolated:", typeof window !== "undefined" ? window.crossOriginIsolated : "N/A");
7572
+ }
7573
+ }, [status, isPerformanceMode]);
7536
7574
  useEffect(() => {
7537
7575
  if (settingsLoaded) {
7538
7576
  setVolume(settings.volume);
@@ -7649,7 +7687,7 @@ var GamePlayer = memo(function GamePlayer2(props) {
7649
7687
  window.addEventListener("keydown", handleKeyDown);
7650
7688
  return () => window.removeEventListener("keydown", handleKeyDown);
7651
7689
  }, [handleToggleShortcuts, handleTogglePerformanceOverlay, handleToggleInputDisplay, handleToggleRecording, handleToggleMute, showShortcutsModal, resume]);
7652
- return /* @__PURE__ */ jsxs(
7690
+ return /* @__PURE__ */ jsx("div", { className: "koin-scope", style: { display: "contents" }, children: /* @__PURE__ */ jsxs(
7653
7691
  "div",
7654
7692
  {
7655
7693
  ref: containerRef,
@@ -7726,6 +7764,18 @@ var GamePlayer = memo(function GamePlayer2(props) {
7726
7764
  ]
7727
7765
  }
7728
7766
  ),
7767
+ !isPerformanceMode && (status === "running" || status === "paused") && /* @__PURE__ */ jsx(
7768
+ "div",
7769
+ {
7770
+ className: "bg-red-900/80 backdrop-blur-md px-2 py-1 rounded border border-red-500/50 flex items-center gap-1.5",
7771
+ title: "Standard Mode (Single Threaded)",
7772
+ children: /* @__PURE__ */ jsxs("span", { className: "text-[10px] uppercase font-bold tracking-wider text-red-200", children: [
7773
+ "Standard (",
7774
+ typeof window !== "undefined" && window.crossOriginIsolated ? "Isolated" : "Not Isolated",
7775
+ ")"
7776
+ ] })
7777
+ }
7778
+ ),
7729
7779
  settings.showInputDisplay && (status === "running" || status === "paused") && /* @__PURE__ */ jsx(
7730
7780
  InputDisplay_default,
7731
7781
  {
@@ -7855,7 +7905,7 @@ var GamePlayer = memo(function GamePlayer2(props) {
7855
7905
  /* @__PURE__ */ jsx(ToastContainer, { toasts, onDismiss: dismissToast })
7856
7906
  ]
7857
7907
  }
7858
- );
7908
+ ) });
7859
7909
  });
7860
7910
  var GamePlayer_default = GamePlayer;
7861
7911
  function AchievementPopup({