qapture2 0.10.0 → 0.10.1

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.
@@ -1939,6 +1939,8 @@ var STR = {
1939
1939
  exact_unsupported: "Needs a desktop browser \u2014 phones cannot photograph the screen",
1940
1940
  exact_native_hint: "Screenshots are real photographs, taken by the qapture helper on this machine with the same engine as Cmd+Shift+4. It never asks permission and leaves nothing recording, so it costs no battery. Nothing leaves your device.",
1941
1941
  exact_native_on: "Real screenshots on \u2014 local helper",
1942
+ exact_helper_offer: "To stop being asked every time: run this next to your dev server and leave it going. macOS asks once for Screen Recording, then never again.",
1943
+ exact_helper_safari: "Safari cannot reach the local helper on an https site \u2014 it blocks loopback as mixed content, and no setting changes that. Open this site in Chrome for screenshots that never ask, or turn the option above off to stay on redrawn shots.",
1942
1944
  sync_title: "Save to a folder",
1943
1945
  sync_hint: "Every note is written to your disk the moment you save it \u2014 nothing is lost if this browser dies.",
1944
1946
  sync_choose: "Choose folder",
@@ -2178,6 +2180,8 @@ var STR = {
2178
2180
  exact_turn_on: "\u062A\u0641\u0639\u064A\u0644",
2179
2181
  exact_native_hint: "\u0627\u0644\u0644\u0642\u0637\u0627\u062A \u0635\u0648\u0631 \u062D\u0642\u064A\u0642\u064A\u0629 \u064A\u0644\u062A\u0642\u0637\u0647\u0627 \u0645\u0633\u0627\u0639\u062F qapture \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062C\u0647\u0627\u0632 \u0628\u0627\u0644\u0645\u062D\u0631\u0643 \u0646\u0641\u0633\u0647 \u0627\u0644\u0630\u064A \u064A\u0633\u062A\u062E\u062F\u0645\u0647 Cmd+Shift+4. \u0644\u0627 \u064A\u0637\u0644\u0628 \u0625\u0630\u0646\u064B\u0627 \u0648\u0644\u0627 \u064A\u062A\u0631\u0643 \u0623\u064A \u062A\u0633\u062C\u064A\u0644 \u064A\u0639\u0645\u0644\u060C \u0641\u0644\u0627 \u064A\u0633\u062A\u0647\u0644\u0643 \u0627\u0644\u0628\u0637\u0627\u0631\u064A\u0629. \u0648\u0644\u0627 \u0634\u064A\u0621 \u064A\u063A\u0627\u062F\u0631 \u062C\u0647\u0627\u0632\u0643.",
2180
2182
  exact_native_on: "\u0627\u0644\u0644\u0642\u0637\u0627\u062A \u0627\u0644\u062D\u0642\u064A\u0642\u064A\u0629 \u0645\u0641\u0639\u0651\u0644\u0629 \u2014 \u0627\u0644\u0645\u0633\u0627\u0639\u062F \u0627\u0644\u0645\u062D\u0644\u064A",
2183
+ exact_helper_offer: "\u0644\u0625\u064A\u0642\u0627\u0641 \u0627\u0644\u0633\u0624\u0627\u0644 \u0641\u064A \u0643\u0644 \u0645\u0631\u0629: \u0634\u063A\u0651\u0644 \u0647\u0630\u0627 \u0627\u0644\u0623\u0645\u0631 \u0628\u062C\u0627\u0646\u0628 \u062E\u0627\u062F\u0645 \u0627\u0644\u062A\u0637\u0648\u064A\u0631 \u0648\u0627\u062A\u0631\u0643\u0647 \u064A\u0639\u0645\u0644. \u064A\u0637\u0644\u0628 \u0645\u0627\u0643 \u0625\u0630\u0646 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u0634\u0627\u0634\u0629 \u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629 \u0641\u0642\u0637.",
2184
+ exact_helper_safari: "\u0644\u0627 \u064A\u0633\u062A\u0637\u064A\u0639 Safari \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u0645\u0633\u0627\u0639\u062F \u0627\u0644\u0645\u062D\u0644\u064A \u0639\u0644\u0649 \u0645\u0648\u0642\u0639 https \u2014 \u0641\u0647\u0648 \u064A\u062D\u062C\u0628 \u0627\u0644\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0645\u062D\u0644\u064A \u0643\u0645\u062D\u062A\u0648\u0649 \u0645\u062E\u062A\u0644\u0637\u060C \u0648\u0644\u0627 \u064A\u063A\u064A\u0651\u0631 \u0630\u0644\u0643 \u0623\u064A \u0625\u0639\u062F\u0627\u062F. \u0627\u0641\u062A\u062D \u0627\u0644\u0645\u0648\u0642\u0639 \u0641\u064A Chrome \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0644\u0642\u0637\u0627\u062A \u0628\u0644\u0627 \u0633\u0624\u0627\u0644\u060C \u0623\u0648 \u0623\u0637\u0641\u0626 \u0627\u0644\u062E\u064A\u0627\u0631 \u0623\u0639\u0644\u0627\u0647 \u0644\u0644\u0628\u0642\u0627\u0621 \u0639\u0644\u0649 \u0627\u0644\u0644\u0642\u0637\u0627\u062A \u0627\u0644\u0645\u064F\u0639\u0627\u062F \u0631\u0633\u0645\u0647\u0627.",
2181
2185
  exact_unsupported: "\u064A\u062A\u0637\u0644\u0628 \u0645\u062A\u0635\u0641\u062D \u0633\u0637\u062D \u0645\u0643\u062A\u0628 \u2014 \u0627\u0644\u0647\u0648\u0627\u062A\u0641 \u0644\u0627 \u062A\u0633\u062A\u0637\u064A\u0639 \u062A\u0635\u0648\u064A\u0631 \u0627\u0644\u0634\u0627\u0634\u0629",
2182
2186
  sync_title: "\u0627\u0644\u062D\u0641\u0638 \u0641\u064A \u0645\u062C\u0644\u062F",
2183
2187
  sync_hint: "\u062A\u064F\u0643\u062A\u0628 \u0643\u0644 \u0645\u0644\u0627\u062D\u0638\u0629 \u0639\u0644\u0649 \u0627\u0644\u0642\u0631\u0635 \u0644\u062D\u0638\u0629 \u062D\u0641\u0638\u0647\u0627 \u2014 \u0644\u0627 \u0634\u064A\u0621 \u064A\u0636\u064A\u0639 \u0625\u0630\u0627 \u062A\u0639\u0637\u0651\u0644 \u0627\u0644\u0645\u062A\u0635\u0641\u062D.",
@@ -2533,6 +2537,13 @@ var PROBE_TIMEOUT_MS = 700;
2533
2537
  var SHOT_TIMEOUT_MS = 9e3;
2534
2538
  var ABSENT_RECHECK_MS = 3e4;
2535
2539
  var configuredPort = DEFAULT_SHOT_PORT;
2540
+ function helperReachableHere() {
2541
+ if (typeof window === "undefined") return false;
2542
+ if (window.location.protocol !== "https:") return true;
2543
+ const ua = navigator.userAgent;
2544
+ const isSafari = /Safari/.test(ua) && !/Chrome|Chromium|Edg|OPR/.test(ua);
2545
+ return !isSafari;
2546
+ }
2536
2547
  function setShotPort(port) {
2537
2548
  if (!Number.isInteger(port) || port <= 0 || port >= 65536) return;
2538
2549
  if (port === configuredPort) return;
@@ -2559,6 +2570,7 @@ async function fetchWithTimeout(url, init, ms) {
2559
2570
  }
2560
2571
  async function isNativeShotAvailable(port = configuredPort) {
2561
2572
  if (typeof window === "undefined") return false;
2573
+ if (!helperReachableHere()) return false;
2562
2574
  const now2 = Date.now();
2563
2575
  if (lastProbeResult && cachedBase) return true;
2564
2576
  if (!lastProbeResult && now2 - lastProbeAt < ABSENT_RECHECK_MS) return false;
@@ -2568,6 +2580,16 @@ async function isNativeShotAvailable(port = configuredPort) {
2568
2580
  cachedBase = lastProbeResult ? baseUrl(port) : null;
2569
2581
  return lastProbeResult;
2570
2582
  }
2583
+ function helperStartCommand(port = configuredPort) {
2584
+ const flags = [];
2585
+ if (port !== DEFAULT_SHOT_PORT) flags.push(`--port ${port}`);
2586
+ if (typeof window !== "undefined") {
2587
+ const origin = window.location.origin;
2588
+ const local = /^https?:\/\/(localhost|127\.0\.0\.1|\[::1\])(:|$)/.test(origin);
2589
+ if (!local) flags.push(`--allow ${origin}`);
2590
+ }
2591
+ return `npx qapture2 shots${flags.length ? " " + flags.join(" ") : ""}`;
2592
+ }
2571
2593
  function resetNativeShotProbe() {
2572
2594
  cachedBase = null;
2573
2595
  lastProbeAt = 0;
@@ -2633,6 +2655,12 @@ var CALIBRATION_SETTLE_MS = 220;
2633
2655
  var FRESH_FRAME_TIMEOUT_MS = 500;
2634
2656
  var VIDEO_READY_TIMEOUT_MS = 4e3;
2635
2657
  var nativeReady = false;
2658
+ function isHelperReachableHere() {
2659
+ return helperReachableHere();
2660
+ }
2661
+ function getHelperCommand() {
2662
+ return helperStartCommand();
2663
+ }
2636
2664
  async function refreshNativeAvailability(port) {
2637
2665
  if (typeof port === "number") setShotPort(port);
2638
2666
  nativeReady = await isNativeShotAvailable();
@@ -6062,7 +6090,13 @@ function QaProvider({
6062
6090
  gradeStep,
6063
6091
  evidenceByStep,
6064
6092
  // v0.4 — screenshots
6065
- exactShots: { supported: exactSupported, status: exactStatus, frozenAt },
6093
+ exactShots: {
6094
+ supported: exactSupported,
6095
+ status: exactStatus,
6096
+ frozenAt,
6097
+ helperReachable: isHelperReachableHere(),
6098
+ helperCommand: getHelperCommand()
6099
+ },
6066
6100
  enableExactShots,
6067
6101
  photographNow,
6068
6102
  disableExactShots,
@@ -8399,7 +8433,7 @@ function upgradeHint(latest) {
8399
8433
  }
8400
8434
 
8401
8435
  // src/version.ts
8402
- var QA_VERSION = "0.10.0" ;
8436
+ var QA_VERSION = "0.10.1" ;
8403
8437
  function Section({
8404
8438
  icon,
8405
8439
  title,
@@ -8666,7 +8700,18 @@ function SettingsSheet({ onClose }) {
8666
8700
  t("exact_turn_on")
8667
8701
  ]
8668
8702
  }
8669
- )
8703
+ ),
8704
+ exactShots.status !== "native" && (exactShots.helperReachable ? /* @__PURE__ */ jsxs("div", { className: "qa-mt-2", children: [
8705
+ /* @__PURE__ */ jsx("p", { className: "qa-m-0 qa-mb-1 qa-text-10 qa-text-lo qa-leading-relaxed", children: t("exact_helper_offer") }),
8706
+ /* @__PURE__ */ jsx(
8707
+ "code",
8708
+ {
8709
+ className: "qa-block qa-rounded-lg qa-bg-2 qa-border qa-border-subtle qa-px-2 qa-py-1.5 qa-text-10 qa-text-hi",
8710
+ style: { userSelect: "all", wordBreak: "break-all" },
8711
+ children: exactShots.helperCommand
8712
+ }
8713
+ )
8714
+ ] }) : /* @__PURE__ */ jsx("p", { className: "qa-m-0 qa-mt-2 qa-text-10 qa-text-mid qa-leading-relaxed", children: t("exact_helper_safari") }))
8670
8715
  ] }),
8671
8716
  /* @__PURE__ */ jsx("div", { className: "qa-h-px qa-bg-3 qa-mt-3 qa-mb-4" }),
8672
8717
  /* @__PURE__ */ jsxs("label", { className: "qa-flex qa-items-start qa-gap-2 qa-text-xs qa-text-hi", style: { cursor: "pointer" }, children: [
@@ -11558,5 +11603,5 @@ function Qapture({ config }) {
11558
11603
  }
11559
11604
 
11560
11605
  export { Qapture, deleteQaDatabase, initQaStudio };
11561
- //# sourceMappingURL=chunk-5W5FS7JY.js.map
11562
- //# sourceMappingURL=chunk-5W5FS7JY.js.map
11606
+ //# sourceMappingURL=chunk-F66JBHJG.js.map
11607
+ //# sourceMappingURL=chunk-F66JBHJG.js.map
@@ -1946,6 +1946,8 @@ var STR = {
1946
1946
  exact_unsupported: "Needs a desktop browser \u2014 phones cannot photograph the screen",
1947
1947
  exact_native_hint: "Screenshots are real photographs, taken by the qapture helper on this machine with the same engine as Cmd+Shift+4. It never asks permission and leaves nothing recording, so it costs no battery. Nothing leaves your device.",
1948
1948
  exact_native_on: "Real screenshots on \u2014 local helper",
1949
+ exact_helper_offer: "To stop being asked every time: run this next to your dev server and leave it going. macOS asks once for Screen Recording, then never again.",
1950
+ exact_helper_safari: "Safari cannot reach the local helper on an https site \u2014 it blocks loopback as mixed content, and no setting changes that. Open this site in Chrome for screenshots that never ask, or turn the option above off to stay on redrawn shots.",
1949
1951
  sync_title: "Save to a folder",
1950
1952
  sync_hint: "Every note is written to your disk the moment you save it \u2014 nothing is lost if this browser dies.",
1951
1953
  sync_choose: "Choose folder",
@@ -2185,6 +2187,8 @@ var STR = {
2185
2187
  exact_turn_on: "\u062A\u0641\u0639\u064A\u0644",
2186
2188
  exact_native_hint: "\u0627\u0644\u0644\u0642\u0637\u0627\u062A \u0635\u0648\u0631 \u062D\u0642\u064A\u0642\u064A\u0629 \u064A\u0644\u062A\u0642\u0637\u0647\u0627 \u0645\u0633\u0627\u0639\u062F qapture \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u062C\u0647\u0627\u0632 \u0628\u0627\u0644\u0645\u062D\u0631\u0643 \u0646\u0641\u0633\u0647 \u0627\u0644\u0630\u064A \u064A\u0633\u062A\u062E\u062F\u0645\u0647 Cmd+Shift+4. \u0644\u0627 \u064A\u0637\u0644\u0628 \u0625\u0630\u0646\u064B\u0627 \u0648\u0644\u0627 \u064A\u062A\u0631\u0643 \u0623\u064A \u062A\u0633\u062C\u064A\u0644 \u064A\u0639\u0645\u0644\u060C \u0641\u0644\u0627 \u064A\u0633\u062A\u0647\u0644\u0643 \u0627\u0644\u0628\u0637\u0627\u0631\u064A\u0629. \u0648\u0644\u0627 \u0634\u064A\u0621 \u064A\u063A\u0627\u062F\u0631 \u062C\u0647\u0627\u0632\u0643.",
2187
2189
  exact_native_on: "\u0627\u0644\u0644\u0642\u0637\u0627\u062A \u0627\u0644\u062D\u0642\u064A\u0642\u064A\u0629 \u0645\u0641\u0639\u0651\u0644\u0629 \u2014 \u0627\u0644\u0645\u0633\u0627\u0639\u062F \u0627\u0644\u0645\u062D\u0644\u064A",
2190
+ exact_helper_offer: "\u0644\u0625\u064A\u0642\u0627\u0641 \u0627\u0644\u0633\u0624\u0627\u0644 \u0641\u064A \u0643\u0644 \u0645\u0631\u0629: \u0634\u063A\u0651\u0644 \u0647\u0630\u0627 \u0627\u0644\u0623\u0645\u0631 \u0628\u062C\u0627\u0646\u0628 \u062E\u0627\u062F\u0645 \u0627\u0644\u062A\u0637\u0648\u064A\u0631 \u0648\u0627\u062A\u0631\u0643\u0647 \u064A\u0639\u0645\u0644. \u064A\u0637\u0644\u0628 \u0645\u0627\u0643 \u0625\u0630\u0646 \u062A\u0633\u062C\u064A\u0644 \u0627\u0644\u0634\u0627\u0634\u0629 \u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629 \u0641\u0642\u0637.",
2191
+ exact_helper_safari: "\u0644\u0627 \u064A\u0633\u062A\u0637\u064A\u0639 Safari \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u0645\u0633\u0627\u0639\u062F \u0627\u0644\u0645\u062D\u0644\u064A \u0639\u0644\u0649 \u0645\u0648\u0642\u0639 https \u2014 \u0641\u0647\u0648 \u064A\u062D\u062C\u0628 \u0627\u0644\u0639\u0646\u0648\u0627\u0646 \u0627\u0644\u0645\u062D\u0644\u064A \u0643\u0645\u062D\u062A\u0648\u0649 \u0645\u062E\u062A\u0644\u0637\u060C \u0648\u0644\u0627 \u064A\u063A\u064A\u0651\u0631 \u0630\u0644\u0643 \u0623\u064A \u0625\u0639\u062F\u0627\u062F. \u0627\u0641\u062A\u062D \u0627\u0644\u0645\u0648\u0642\u0639 \u0641\u064A Chrome \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0644\u0642\u0637\u0627\u062A \u0628\u0644\u0627 \u0633\u0624\u0627\u0644\u060C \u0623\u0648 \u0623\u0637\u0641\u0626 \u0627\u0644\u062E\u064A\u0627\u0631 \u0623\u0639\u0644\u0627\u0647 \u0644\u0644\u0628\u0642\u0627\u0621 \u0639\u0644\u0649 \u0627\u0644\u0644\u0642\u0637\u0627\u062A \u0627\u0644\u0645\u064F\u0639\u0627\u062F \u0631\u0633\u0645\u0647\u0627.",
2188
2192
  exact_unsupported: "\u064A\u062A\u0637\u0644\u0628 \u0645\u062A\u0635\u0641\u062D \u0633\u0637\u062D \u0645\u0643\u062A\u0628 \u2014 \u0627\u0644\u0647\u0648\u0627\u062A\u0641 \u0644\u0627 \u062A\u0633\u062A\u0637\u064A\u0639 \u062A\u0635\u0648\u064A\u0631 \u0627\u0644\u0634\u0627\u0634\u0629",
2189
2193
  sync_title: "\u0627\u0644\u062D\u0641\u0638 \u0641\u064A \u0645\u062C\u0644\u062F",
2190
2194
  sync_hint: "\u062A\u064F\u0643\u062A\u0628 \u0643\u0644 \u0645\u0644\u0627\u062D\u0638\u0629 \u0639\u0644\u0649 \u0627\u0644\u0642\u0631\u0635 \u0644\u062D\u0638\u0629 \u062D\u0641\u0638\u0647\u0627 \u2014 \u0644\u0627 \u0634\u064A\u0621 \u064A\u0636\u064A\u0639 \u0625\u0630\u0627 \u062A\u0639\u0637\u0651\u0644 \u0627\u0644\u0645\u062A\u0635\u0641\u062D.",
@@ -2540,6 +2544,13 @@ var PROBE_TIMEOUT_MS = 700;
2540
2544
  var SHOT_TIMEOUT_MS = 9e3;
2541
2545
  var ABSENT_RECHECK_MS = 3e4;
2542
2546
  var configuredPort = DEFAULT_SHOT_PORT;
2547
+ function helperReachableHere() {
2548
+ if (typeof window === "undefined") return false;
2549
+ if (window.location.protocol !== "https:") return true;
2550
+ const ua = navigator.userAgent;
2551
+ const isSafari = /Safari/.test(ua) && !/Chrome|Chromium|Edg|OPR/.test(ua);
2552
+ return !isSafari;
2553
+ }
2543
2554
  function setShotPort(port) {
2544
2555
  if (!Number.isInteger(port) || port <= 0 || port >= 65536) return;
2545
2556
  if (port === configuredPort) return;
@@ -2566,6 +2577,7 @@ async function fetchWithTimeout(url, init, ms) {
2566
2577
  }
2567
2578
  async function isNativeShotAvailable(port = configuredPort) {
2568
2579
  if (typeof window === "undefined") return false;
2580
+ if (!helperReachableHere()) return false;
2569
2581
  const now2 = Date.now();
2570
2582
  if (lastProbeResult && cachedBase) return true;
2571
2583
  if (!lastProbeResult && now2 - lastProbeAt < ABSENT_RECHECK_MS) return false;
@@ -2575,6 +2587,16 @@ async function isNativeShotAvailable(port = configuredPort) {
2575
2587
  cachedBase = lastProbeResult ? baseUrl(port) : null;
2576
2588
  return lastProbeResult;
2577
2589
  }
2590
+ function helperStartCommand(port = configuredPort) {
2591
+ const flags = [];
2592
+ if (port !== DEFAULT_SHOT_PORT) flags.push(`--port ${port}`);
2593
+ if (typeof window !== "undefined") {
2594
+ const origin = window.location.origin;
2595
+ const local = /^https?:\/\/(localhost|127\.0\.0\.1|\[::1\])(:|$)/.test(origin);
2596
+ if (!local) flags.push(`--allow ${origin}`);
2597
+ }
2598
+ return `npx qapture2 shots${flags.length ? " " + flags.join(" ") : ""}`;
2599
+ }
2578
2600
  function resetNativeShotProbe() {
2579
2601
  cachedBase = null;
2580
2602
  lastProbeAt = 0;
@@ -2640,6 +2662,12 @@ var CALIBRATION_SETTLE_MS = 220;
2640
2662
  var FRESH_FRAME_TIMEOUT_MS = 500;
2641
2663
  var VIDEO_READY_TIMEOUT_MS = 4e3;
2642
2664
  var nativeReady = false;
2665
+ function isHelperReachableHere() {
2666
+ return helperReachableHere();
2667
+ }
2668
+ function getHelperCommand() {
2669
+ return helperStartCommand();
2670
+ }
2643
2671
  async function refreshNativeAvailability(port) {
2644
2672
  if (typeof port === "number") setShotPort(port);
2645
2673
  nativeReady = await isNativeShotAvailable();
@@ -6069,7 +6097,13 @@ function QaProvider({
6069
6097
  gradeStep,
6070
6098
  evidenceByStep,
6071
6099
  // v0.4 — screenshots
6072
- exactShots: { supported: exactSupported, status: exactStatus, frozenAt },
6100
+ exactShots: {
6101
+ supported: exactSupported,
6102
+ status: exactStatus,
6103
+ frozenAt,
6104
+ helperReachable: isHelperReachableHere(),
6105
+ helperCommand: getHelperCommand()
6106
+ },
6073
6107
  enableExactShots,
6074
6108
  photographNow,
6075
6109
  disableExactShots,
@@ -8406,7 +8440,7 @@ function upgradeHint(latest) {
8406
8440
  }
8407
8441
 
8408
8442
  // src/version.ts
8409
- var QA_VERSION = "0.10.0" ;
8443
+ var QA_VERSION = "0.10.1" ;
8410
8444
  function Section({
8411
8445
  icon,
8412
8446
  title,
@@ -8673,7 +8707,18 @@ function SettingsSheet({ onClose }) {
8673
8707
  t("exact_turn_on")
8674
8708
  ]
8675
8709
  }
8676
- )
8710
+ ),
8711
+ exactShots.status !== "native" && (exactShots.helperReachable ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "qa-mt-2", children: [
8712
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: "qa-m-0 qa-mb-1 qa-text-10 qa-text-lo qa-leading-relaxed", children: t("exact_helper_offer") }),
8713
+ /* @__PURE__ */ jsxRuntime.jsx(
8714
+ "code",
8715
+ {
8716
+ className: "qa-block qa-rounded-lg qa-bg-2 qa-border qa-border-subtle qa-px-2 qa-py-1.5 qa-text-10 qa-text-hi",
8717
+ style: { userSelect: "all", wordBreak: "break-all" },
8718
+ children: exactShots.helperCommand
8719
+ }
8720
+ )
8721
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx("p", { className: "qa-m-0 qa-mt-2 qa-text-10 qa-text-mid qa-leading-relaxed", children: t("exact_helper_safari") }))
8677
8722
  ] }),
8678
8723
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "qa-h-px qa-bg-3 qa-mt-3 qa-mb-4" }),
8679
8724
  /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "qa-flex qa-items-start qa-gap-2 qa-text-xs qa-text-hi", style: { cursor: "pointer" }, children: [
@@ -11567,5 +11612,5 @@ function Qapture({ config }) {
11567
11612
  exports.Qapture = Qapture;
11568
11613
  exports.deleteQaDatabase = deleteQaDatabase;
11569
11614
  exports.initQaStudio = initQaStudio;
11570
- //# sourceMappingURL=chunk-R6WVHVXO.cjs.map
11571
- //# sourceMappingURL=chunk-R6WVHVXO.cjs.map
11615
+ //# sourceMappingURL=chunk-PEPHZGI2.cjs.map
11616
+ //# sourceMappingURL=chunk-PEPHZGI2.cjs.map
package/dist/index.cjs CHANGED
@@ -1,24 +1,24 @@
1
1
  'use strict';
2
2
 
3
- var chunkR6WVHVXO_cjs = require('./chunk-R6WVHVXO.cjs');
3
+ var chunkPEPHZGI2_cjs = require('./chunk-PEPHZGI2.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "QaStudio", {
8
8
  enumerable: true,
9
- get: function () { return chunkR6WVHVXO_cjs.Qapture; }
9
+ get: function () { return chunkPEPHZGI2_cjs.Qapture; }
10
10
  });
11
11
  Object.defineProperty(exports, "Qapture", {
12
12
  enumerable: true,
13
- get: function () { return chunkR6WVHVXO_cjs.Qapture; }
13
+ get: function () { return chunkPEPHZGI2_cjs.Qapture; }
14
14
  });
15
15
  Object.defineProperty(exports, "deleteQaDatabase", {
16
16
  enumerable: true,
17
- get: function () { return chunkR6WVHVXO_cjs.deleteQaDatabase; }
17
+ get: function () { return chunkPEPHZGI2_cjs.deleteQaDatabase; }
18
18
  });
19
19
  Object.defineProperty(exports, "initQaStudio", {
20
20
  enumerable: true,
21
- get: function () { return chunkR6WVHVXO_cjs.initQaStudio; }
21
+ get: function () { return chunkPEPHZGI2_cjs.initQaStudio; }
22
22
  });
23
23
  //# sourceMappingURL=index.cjs.map
24
24
  //# sourceMappingURL=index.cjs.map
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { Qapture as QaStudio, Qapture, deleteQaDatabase, initQaStudio } from './chunk-5W5FS7JY.js';
1
+ export { Qapture as QaStudio, Qapture, deleteQaDatabase, initQaStudio } from './chunk-F66JBHJG.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
package/dist/next.cjs CHANGED
@@ -1,21 +1,21 @@
1
1
  "use client";
2
2
  'use strict';
3
3
 
4
- var chunkR6WVHVXO_cjs = require('./chunk-R6WVHVXO.cjs');
4
+ var chunkPEPHZGI2_cjs = require('./chunk-PEPHZGI2.cjs');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "QaStudio", {
9
9
  enumerable: true,
10
- get: function () { return chunkR6WVHVXO_cjs.Qapture; }
10
+ get: function () { return chunkPEPHZGI2_cjs.Qapture; }
11
11
  });
12
12
  Object.defineProperty(exports, "Qapture", {
13
13
  enumerable: true,
14
- get: function () { return chunkR6WVHVXO_cjs.Qapture; }
14
+ get: function () { return chunkPEPHZGI2_cjs.Qapture; }
15
15
  });
16
16
  Object.defineProperty(exports, "initQaStudio", {
17
17
  enumerable: true,
18
- get: function () { return chunkR6WVHVXO_cjs.initQaStudio; }
18
+ get: function () { return chunkPEPHZGI2_cjs.initQaStudio; }
19
19
  });
20
20
  //# sourceMappingURL=next.cjs.map
21
21
  //# sourceMappingURL=next.cjs.map
package/dist/next.js CHANGED
@@ -1,4 +1,4 @@
1
1
  "use client";
2
- export { Qapture as QaStudio, Qapture, initQaStudio } from './chunk-5W5FS7JY.js';
2
+ export { Qapture as QaStudio, Qapture, initQaStudio } from './chunk-F66JBHJG.js';
3
3
  //# sourceMappingURL=next.js.map
4
4
  //# sourceMappingURL=next.js.map
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkR6WVHVXO_cjs = require('./chunk-R6WVHVXO.cjs');
3
+ var chunkPEPHZGI2_cjs = require('./chunk-PEPHZGI2.cjs');
4
4
 
5
5
  // src/standalone.ts
6
6
  if (typeof window !== "undefined" && typeof customElements !== "undefined" && !customElements.get("qapture-widget")) {
@@ -38,7 +38,7 @@ if (typeof window !== "undefined" && typeof customElements !== "undefined" && !c
38
38
 
39
39
  Object.defineProperty(exports, "initQaStudio", {
40
40
  enumerable: true,
41
- get: function () { return chunkR6WVHVXO_cjs.initQaStudio; }
41
+ get: function () { return chunkPEPHZGI2_cjs.initQaStudio; }
42
42
  });
43
43
  //# sourceMappingURL=standalone.cjs.map
44
44
  //# sourceMappingURL=standalone.cjs.map
@@ -1,4 +1,4 @@
1
- export { initQaStudio } from './chunk-5W5FS7JY.js';
1
+ export { initQaStudio } from './chunk-F66JBHJG.js';
2
2
 
3
3
  // src/standalone.ts
4
4
  if (typeof window !== "undefined" && typeof customElements !== "undefined" && !customElements.get("qapture-widget")) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qapture2",
3
- "version": "0.10.0",
3
+ "version": "0.10.1",
4
4
  "description": "Drop-in, AI-aware in-browser QA capture widget. A tester annotates the live app (element/region + auto-screenshot + note), tracks a graded testing journey, and exports a ZIP your own coding agent reads. Ships zero AI.",
5
5
  "type": "module",
6
6
  "license": "MIT",