qapture2 0.7.3 → 0.7.4

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/README.md CHANGED
@@ -351,9 +351,15 @@ Because by default it is. The DOM engine re-draws your page; fonts shift,
351
351
  shadows and gradients flatten, `<canvas>` and video come out blank. From
352
352
  v0.7.3 a redrawn capture says so under the preview and offers a one-tap **Use
353
353
  real screenshots**, which grants tab-share and re-shoots the same selection
354
- with the exact engine below. Chromium desktop only — on Safari and Firefox the
355
- redraw is the only engine there is, so for screenshot-critical QA, test in
356
- Chrome.
354
+ with the exact engine below.
355
+
356
+ That upgrade is Chromium-only, because it depends on `preferCurrentTab`. On
357
+ Safari and Firefox the redraw is the only engine there is — so from v0.7.4 the
358
+ card says so outright and points you at Chrome, rather than leaving you to
359
+ conclude the tool is broken. **If your app draws anything with inline SVG, a
360
+ `<canvas>`, or video, do your screenshot QA in Chrome.** A redraw will render
361
+ an SVG chart as bare outlines and a canvas as a blank box, every time, in any
362
+ tool built this way.
357
363
 
358
364
  ### `exact` — opt-in, pixel-for-pixel
359
365
 
@@ -1784,6 +1784,7 @@ var STR = {
1784
1784
  exact_hint: "Screenshots become a real photo of the tab instead of a redraw. Asks once to share this tab; nothing leaves your device.",
1785
1785
  redraw_notice: "This is a redraw of the page, not a real photo.",
1786
1786
  redraw_action: "Use real screenshots",
1787
+ redraw_no_engine: "This browser cannot photograph a tab, so charts and canvases may come out wrong. Open the app in Chrome, Edge or Brave for true screenshots.",
1787
1788
  exact_on: "Pixel-exact screenshots on",
1788
1789
  exact_off: "Back to redrawn screenshots",
1789
1790
  exact_declined: "Staying on redrawn screenshots",
@@ -1980,6 +1981,7 @@ var STR = {
1980
1981
  exact_hint: "\u062A\u0635\u0628\u062D \u0627\u0644\u0644\u0642\u0637\u0629 \u0635\u0648\u0631\u0629 \u062D\u0642\u064A\u0642\u064A\u0629 \u0644\u0644\u062A\u0628\u0648\u064A\u0628 \u0628\u062F\u0644 \u0625\u0639\u0627\u062F\u0629 \u0631\u0633\u0645\u0647. \u064A\u064F\u0637\u0644\u0628 \u0627\u0644\u0625\u0630\u0646 \u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629\u060C \u0648\u0644\u0627 \u0634\u064A\u0621 \u064A\u063A\u0627\u062F\u0631 \u062C\u0647\u0627\u0632\u0643.",
1981
1982
  redraw_notice: "\u0647\u0630\u0647 \u0625\u0639\u0627\u062F\u0629 \u0631\u0633\u0645 \u0644\u0644\u0635\u0641\u062D\u0629\u060C \u0648\u0644\u064A\u0633\u062A \u0635\u0648\u0631\u0629 \u062D\u0642\u064A\u0642\u064A\u0629.",
1982
1983
  redraw_action: "\u0627\u0633\u062A\u062E\u062F\u0645 \u0644\u0642\u0637\u0627\u062A \u062D\u0642\u064A\u0642\u064A\u0629",
1984
+ redraw_no_engine: "\u0644\u0627 \u064A\u0633\u062A\u0637\u064A\u0639 \u0647\u0630\u0627 \u0627\u0644\u0645\u062A\u0635\u0641\u062D \u062A\u0635\u0648\u064A\u0631 \u0627\u0644\u062A\u0628\u0648\u064A\u0628\u060C \u0644\u0630\u0627 \u0642\u062F \u062A\u0638\u0647\u0631 \u0627\u0644\u0645\u062E\u0637\u0637\u0627\u062A \u0648\u0627\u0644\u0644\u0648\u062D\u0627\u062A \u0628\u0634\u0643\u0644 \u062E\u0627\u0637\u0626. \u0627\u0641\u062A\u062D \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0641\u064A Chrome \u0623\u0648 Edge \u0623\u0648 Brave \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0644\u0642\u0637\u0627\u062A \u062D\u0642\u064A\u0642\u064A\u0629.",
1983
1985
  exact_on: "\u062A\u0645 \u062A\u0641\u0639\u064A\u0644 \u0627\u0644\u0644\u0642\u0637\u0627\u062A \u0627\u0644\u0645\u0637\u0627\u0628\u0642\u0629",
1984
1986
  exact_off: "\u0627\u0644\u0639\u0648\u062F\u0629 \u0625\u0644\u0649 \u0627\u0644\u0644\u0642\u0637\u0627\u062A \u0627\u0644\u0645\u064F\u0639\u0627\u062F \u0631\u0633\u0645\u0647\u0627",
1985
1987
  exact_declined: "\u0633\u0646\u0628\u0642\u0649 \u0639\u0644\u0649 \u0627\u0644\u0644\u0642\u0637\u0627\u062A \u0627\u0644\u0645\u064F\u0639\u0627\u062F \u0631\u0633\u0645\u0647\u0627",
@@ -9758,7 +9760,7 @@ function CaptureMode() {
9758
9760
  )
9759
9761
  ] })
9760
9762
  ) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "qa-py-4 qa-text-xs qa-text-slate-400", children: t("no_shot") }),
9761
- shotUrl && shotEngine === "dom" && exactShots.supported && exactShots.status !== "live" && /* @__PURE__ */ jsxRuntime.jsxs(
9763
+ shotUrl && shotEngine === "dom" && (exactShots.status !== "live" && exactShots.supported ? /* @__PURE__ */ jsxRuntime.jsxs(
9762
9764
  "span",
9763
9765
  {
9764
9766
  "data-qa-redraw-offer": "true",
@@ -9784,7 +9786,25 @@ function CaptureMode() {
9784
9786
  )
9785
9787
  ]
9786
9788
  }
9787
- )
9789
+ ) : !exactShots.supported ? (
9790
+ // Safari and Firefox have no way to photograph the tab, so
9791
+ // there is nothing to offer — but saying NOTHING was the real
9792
+ // failure. A tester watching an SVG chart come back as bare
9793
+ // outlines concludes the tool is broken and files it as a bug,
9794
+ // over and over. Name the limit and name the way out.
9795
+ /* @__PURE__ */ jsxRuntime.jsxs(
9796
+ "span",
9797
+ {
9798
+ "data-qa-redraw-note": "true",
9799
+ className: "qa-mt-1.5 qa-block qa-text-center qa-text-10 qa-text-mid",
9800
+ children: [
9801
+ t("redraw_notice"),
9802
+ " ",
9803
+ t("redraw_no_engine")
9804
+ ]
9805
+ }
9806
+ )
9807
+ ) : null)
9788
9808
  ]
9789
9809
  }
9790
9810
  ),
@@ -10079,5 +10099,5 @@ function Qapture({ config }) {
10079
10099
  exports.Qapture = Qapture;
10080
10100
  exports.deleteQaDatabase = deleteQaDatabase;
10081
10101
  exports.initQaStudio = initQaStudio;
10082
- //# sourceMappingURL=chunk-C5WJFSMN.cjs.map
10083
- //# sourceMappingURL=chunk-C5WJFSMN.cjs.map
10102
+ //# sourceMappingURL=chunk-7WHQBMVP.cjs.map
10103
+ //# sourceMappingURL=chunk-7WHQBMVP.cjs.map
@@ -1777,6 +1777,7 @@ var STR = {
1777
1777
  exact_hint: "Screenshots become a real photo of the tab instead of a redraw. Asks once to share this tab; nothing leaves your device.",
1778
1778
  redraw_notice: "This is a redraw of the page, not a real photo.",
1779
1779
  redraw_action: "Use real screenshots",
1780
+ redraw_no_engine: "This browser cannot photograph a tab, so charts and canvases may come out wrong. Open the app in Chrome, Edge or Brave for true screenshots.",
1780
1781
  exact_on: "Pixel-exact screenshots on",
1781
1782
  exact_off: "Back to redrawn screenshots",
1782
1783
  exact_declined: "Staying on redrawn screenshots",
@@ -1973,6 +1974,7 @@ var STR = {
1973
1974
  exact_hint: "\u062A\u0635\u0628\u062D \u0627\u0644\u0644\u0642\u0637\u0629 \u0635\u0648\u0631\u0629 \u062D\u0642\u064A\u0642\u064A\u0629 \u0644\u0644\u062A\u0628\u0648\u064A\u0628 \u0628\u062F\u0644 \u0625\u0639\u0627\u062F\u0629 \u0631\u0633\u0645\u0647. \u064A\u064F\u0637\u0644\u0628 \u0627\u0644\u0625\u0630\u0646 \u0645\u0631\u0629 \u0648\u0627\u062D\u062F\u0629\u060C \u0648\u0644\u0627 \u0634\u064A\u0621 \u064A\u063A\u0627\u062F\u0631 \u062C\u0647\u0627\u0632\u0643.",
1974
1975
  redraw_notice: "\u0647\u0630\u0647 \u0625\u0639\u0627\u062F\u0629 \u0631\u0633\u0645 \u0644\u0644\u0635\u0641\u062D\u0629\u060C \u0648\u0644\u064A\u0633\u062A \u0635\u0648\u0631\u0629 \u062D\u0642\u064A\u0642\u064A\u0629.",
1975
1976
  redraw_action: "\u0627\u0633\u062A\u062E\u062F\u0645 \u0644\u0642\u0637\u0627\u062A \u062D\u0642\u064A\u0642\u064A\u0629",
1977
+ redraw_no_engine: "\u0644\u0627 \u064A\u0633\u062A\u0637\u064A\u0639 \u0647\u0630\u0627 \u0627\u0644\u0645\u062A\u0635\u0641\u062D \u062A\u0635\u0648\u064A\u0631 \u0627\u0644\u062A\u0628\u0648\u064A\u0628\u060C \u0644\u0630\u0627 \u0642\u062F \u062A\u0638\u0647\u0631 \u0627\u0644\u0645\u062E\u0637\u0637\u0627\u062A \u0648\u0627\u0644\u0644\u0648\u062D\u0627\u062A \u0628\u0634\u0643\u0644 \u062E\u0627\u0637\u0626. \u0627\u0641\u062A\u062D \u0627\u0644\u062A\u0637\u0628\u064A\u0642 \u0641\u064A Chrome \u0623\u0648 Edge \u0623\u0648 Brave \u0644\u0644\u062D\u0635\u0648\u0644 \u0639\u0644\u0649 \u0644\u0642\u0637\u0627\u062A \u062D\u0642\u064A\u0642\u064A\u0629.",
1976
1978
  exact_on: "\u062A\u0645 \u062A\u0641\u0639\u064A\u0644 \u0627\u0644\u0644\u0642\u0637\u0627\u062A \u0627\u0644\u0645\u0637\u0627\u0628\u0642\u0629",
1977
1979
  exact_off: "\u0627\u0644\u0639\u0648\u062F\u0629 \u0625\u0644\u0649 \u0627\u0644\u0644\u0642\u0637\u0627\u062A \u0627\u0644\u0645\u064F\u0639\u0627\u062F \u0631\u0633\u0645\u0647\u0627",
1978
1980
  exact_declined: "\u0633\u0646\u0628\u0642\u0649 \u0639\u0644\u0649 \u0627\u0644\u0644\u0642\u0637\u0627\u062A \u0627\u0644\u0645\u064F\u0639\u0627\u062F \u0631\u0633\u0645\u0647\u0627",
@@ -9751,7 +9753,7 @@ function CaptureMode() {
9751
9753
  )
9752
9754
  ] })
9753
9755
  ) : /* @__PURE__ */ jsx("span", { className: "qa-py-4 qa-text-xs qa-text-slate-400", children: t("no_shot") }),
9754
- shotUrl && shotEngine === "dom" && exactShots.supported && exactShots.status !== "live" && /* @__PURE__ */ jsxs(
9756
+ shotUrl && shotEngine === "dom" && (exactShots.status !== "live" && exactShots.supported ? /* @__PURE__ */ jsxs(
9755
9757
  "span",
9756
9758
  {
9757
9759
  "data-qa-redraw-offer": "true",
@@ -9777,7 +9779,25 @@ function CaptureMode() {
9777
9779
  )
9778
9780
  ]
9779
9781
  }
9780
- )
9782
+ ) : !exactShots.supported ? (
9783
+ // Safari and Firefox have no way to photograph the tab, so
9784
+ // there is nothing to offer — but saying NOTHING was the real
9785
+ // failure. A tester watching an SVG chart come back as bare
9786
+ // outlines concludes the tool is broken and files it as a bug,
9787
+ // over and over. Name the limit and name the way out.
9788
+ /* @__PURE__ */ jsxs(
9789
+ "span",
9790
+ {
9791
+ "data-qa-redraw-note": "true",
9792
+ className: "qa-mt-1.5 qa-block qa-text-center qa-text-10 qa-text-mid",
9793
+ children: [
9794
+ t("redraw_notice"),
9795
+ " ",
9796
+ t("redraw_no_engine")
9797
+ ]
9798
+ }
9799
+ )
9800
+ ) : null)
9781
9801
  ]
9782
9802
  }
9783
9803
  ),
@@ -10070,5 +10090,5 @@ function Qapture({ config }) {
10070
10090
  }
10071
10091
 
10072
10092
  export { Qapture, deleteQaDatabase, initQaStudio };
10073
- //# sourceMappingURL=chunk-BM3ESR2O.js.map
10074
- //# sourceMappingURL=chunk-BM3ESR2O.js.map
10093
+ //# sourceMappingURL=chunk-ZAWR5VJR.js.map
10094
+ //# sourceMappingURL=chunk-ZAWR5VJR.js.map
package/dist/index.cjs CHANGED
@@ -1,24 +1,24 @@
1
1
  'use strict';
2
2
 
3
- var chunkC5WJFSMN_cjs = require('./chunk-C5WJFSMN.cjs');
3
+ var chunk7WHQBMVP_cjs = require('./chunk-7WHQBMVP.cjs');
4
4
 
5
5
 
6
6
 
7
7
  Object.defineProperty(exports, "QaStudio", {
8
8
  enumerable: true,
9
- get: function () { return chunkC5WJFSMN_cjs.Qapture; }
9
+ get: function () { return chunk7WHQBMVP_cjs.Qapture; }
10
10
  });
11
11
  Object.defineProperty(exports, "Qapture", {
12
12
  enumerable: true,
13
- get: function () { return chunkC5WJFSMN_cjs.Qapture; }
13
+ get: function () { return chunk7WHQBMVP_cjs.Qapture; }
14
14
  });
15
15
  Object.defineProperty(exports, "deleteQaDatabase", {
16
16
  enumerable: true,
17
- get: function () { return chunkC5WJFSMN_cjs.deleteQaDatabase; }
17
+ get: function () { return chunk7WHQBMVP_cjs.deleteQaDatabase; }
18
18
  });
19
19
  Object.defineProperty(exports, "initQaStudio", {
20
20
  enumerable: true,
21
- get: function () { return chunkC5WJFSMN_cjs.initQaStudio; }
21
+ get: function () { return chunk7WHQBMVP_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-BM3ESR2O.js';
1
+ export { Qapture as QaStudio, Qapture, deleteQaDatabase, initQaStudio } from './chunk-ZAWR5VJR.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 chunkC5WJFSMN_cjs = require('./chunk-C5WJFSMN.cjs');
4
+ var chunk7WHQBMVP_cjs = require('./chunk-7WHQBMVP.cjs');
5
5
 
6
6
 
7
7
 
8
8
  Object.defineProperty(exports, "QaStudio", {
9
9
  enumerable: true,
10
- get: function () { return chunkC5WJFSMN_cjs.Qapture; }
10
+ get: function () { return chunk7WHQBMVP_cjs.Qapture; }
11
11
  });
12
12
  Object.defineProperty(exports, "Qapture", {
13
13
  enumerable: true,
14
- get: function () { return chunkC5WJFSMN_cjs.Qapture; }
14
+ get: function () { return chunk7WHQBMVP_cjs.Qapture; }
15
15
  });
16
16
  Object.defineProperty(exports, "initQaStudio", {
17
17
  enumerable: true,
18
- get: function () { return chunkC5WJFSMN_cjs.initQaStudio; }
18
+ get: function () { return chunk7WHQBMVP_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-BM3ESR2O.js';
2
+ export { Qapture as QaStudio, Qapture, initQaStudio } from './chunk-ZAWR5VJR.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 chunkC5WJFSMN_cjs = require('./chunk-C5WJFSMN.cjs');
3
+ var chunk7WHQBMVP_cjs = require('./chunk-7WHQBMVP.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 chunkC5WJFSMN_cjs.initQaStudio; }
41
+ get: function () { return chunk7WHQBMVP_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-BM3ESR2O.js';
1
+ export { initQaStudio } from './chunk-ZAWR5VJR.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.7.3",
3
+ "version": "0.7.4",
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",
@@ -90,6 +90,7 @@
90
90
  "browser-test": "node scripts/browser-test.mjs",
91
91
  "capture-accuracy-test": "node scripts/capture-accuracy-test.mjs",
92
92
  "element-capture-test": "node scripts/element-capture-test.mjs",
93
+ "svg-vars-test": "node scripts/svg-vars-test.mjs",
93
94
  "loop-features-test": "node scripts/loop-features-test.mjs",
94
95
  "walk-test": "node scripts/walk-test.mjs",
95
96
  "modern-css-test": "node scripts/modern-css-test.mjs",