@designcrowd/library.brand-page 5.17.25-undo-9 → 5.17.25-undo-12

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 (20) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-DmDSspcZ.js → CreatedOnBrandCrowd-de-de-4mxqeHPP.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-B5Lh1tFl.js → CreatedOnBrandCrowd-en-us-DQN_hGjC.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-BOiOyh5Y.js → CreatedOnBrandCrowd-es-es-gijtJMPK.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-BbC8s_pY.js → CreatedOnBrandCrowd-fr-ca-BcOADD0V.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-BbC8s_pY.js → CreatedOnBrandCrowd-fr-fr-BcOADD0V.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-B9PQ72m4.js → CreatedOnBrandCrowd-pt-br-B5eEyjAo.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-B9PQ72m4.js → CreatedOnBrandCrowd-pt-pt-B5eEyjAo.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-C7NzbKIg.js → CreatedOnDcom-de-de-DSGP6AAT.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-DbVi6Q9C.js → CreatedOnDcom-en-us-BOuoJM_x.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-C4TPAk-c.js → CreatedOnDcom-es-es-kbiGFyBV.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-xqzYFaKy.js → CreatedOnDcom-fr-ca-BVFxrE6-.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-Bh-7lY7W.js → CreatedOnDcom-fr-fr-92xJGi0w.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-D3J8peaF.js → CreatedOnDcom-pt-br-C40X9FAV.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-101mCRJX.js → CreatedOnDcom-pt-pt-CXxJUTUx.js} +1 -1
  15. package/lib/src/brand-page-maker/stores/history/history-store.js +6 -2
  16. package/lib/src/index.mjs +1 -1
  17. package/lib/src/{lib-MGJszuw2.js → lib-DaFVTyb9.js} +3 -3
  18. package/package.json +1 -1
  19. package/src/brand-page-maker/stores/history/history-store.test.ts +6 -7
  20. package/src/brand-page-maker/stores/history/history-store.ts +6 -2
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-MGJszuw2.js";
2
+ import { _ as t } from "./lib-DaFVTyb9.js";
3
3
  const i = {}, h = {
4
4
  width: "275",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-MGJszuw2.js";
2
+ import { _ as t } from "./lib-DaFVTyb9.js";
3
3
  const i = {}, h = {
4
4
  width: "251",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-MGJszuw2.js";
2
+ import { _ as t } from "./lib-DaFVTyb9.js";
3
3
  const i = {}, h = {
4
4
  width: "250",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-MGJszuw2.js";
2
+ import { _ as t } from "./lib-DaFVTyb9.js";
3
3
  const i = {}, h = {
4
4
  width: "237",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-MGJszuw2.js";
2
+ import { _ as t } from "./lib-DaFVTyb9.js";
3
3
  const i = {}, h = {
4
4
  width: "237",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-MGJszuw2.js";
2
+ import { _ as t } from "./lib-DaFVTyb9.js";
3
3
  const i = {}, h = {
4
4
  width: "263",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-MGJszuw2.js";
2
+ import { _ as t } from "./lib-DaFVTyb9.js";
3
3
  const i = {}, h = {
4
4
  width: "263",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-MGJszuw2.js";
2
+ import { _ as e } from "./lib-DaFVTyb9.js";
3
3
  const M = {}, Z = {
4
4
  width: "242",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-MGJszuw2.js";
2
+ import { _ as e } from "./lib-DaFVTyb9.js";
3
3
  const i = {}, M = {
4
4
  width: "231",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-MGJszuw2.js";
2
+ import { _ as e } from "./lib-DaFVTyb9.js";
3
3
  const M = {}, Z = {
4
4
  width: "230",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-MGJszuw2.js";
2
+ import { _ as e } from "./lib-DaFVTyb9.js";
3
3
  const i = {}, l = {
4
4
  width: "216",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-MGJszuw2.js";
2
+ import { _ as e } from "./lib-DaFVTyb9.js";
3
3
  const i = {}, l = {
4
4
  width: "216",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as M } from "./lib-MGJszuw2.js";
2
+ import { _ as M } from "./lib-DaFVTyb9.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as M } from "./lib-MGJszuw2.js";
2
+ import { _ as M } from "./lib-DaFVTyb9.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -29,11 +29,15 @@ import { useEventTracker } from '../../composables/useEventTracker';
29
29
  // so a user holding down a key for 15 s still gets periodic snapshots.
30
30
  const CAPTURE_DEBOUNCE_MS = 1700;
31
31
  const CAPTURE_MAX_WAIT_MS = 10000;
32
- // FR-12: 40-entry cap. FR-13: 100 MB memory budget. FR-13c: 5 MB per-entry
32
+ // FR-12: 40-entry cap. FR-13: 100 MB memory budget. FR-13c: per-entry
33
33
  // oversize threshold — entries above this are skipped + emit telemetry.
34
+ // 25 MB accommodates a high-res BYO logo upload, which renders ~2.5 MB
35
+ // of base64 PNG into each of four viewport sections (~10 MB) plus
36
+ // per-page logo content blocks. The 100 MB total budget still evicts
37
+ // oldest non-baseline entries to keep memory bounded.
34
38
  const MAX_ENTRIES = 40;
35
39
  const MAX_MEMORY_BYTES = 100 * 1024 * 1024;
36
- const MAX_ENTRY_BYTES = 5 * 1024 * 1024;
40
+ const MAX_ENTRY_BYTES = 25 * 1024 * 1024;
37
41
  // Window after baseline-capture during which any auto-captured snapshot
38
42
  // REPLACES the baseline rather than pushing a new entry. Covers post-init
39
43
  // reactive cascades (template loadPageNo, router afterEach, layout settle)
package/lib/src/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { A as E, a as T, b as s, c as I, d as S, e as N, f as e, B as A, g as O, h as C, i as G, j as D, k as P, l as t, m as R, n as L, o as M, p as o, q as r, r as b, s as n, t as F, u as i, v as l, w as g, x as B, y as c, z as Y, C as U, D as d, E as u, F as H, G as p, H as y, I as K, J as k, K as m, L as V, M as X, N as h, O as v, P as W, Q as f, R as x, S as z, T as w, U as Z, V as j, W as Q, X as q, Y as J, Z as $, $ as aa, a0 as _a, a1 as Ea, a2 as Ta, a3 as sa, a4 as Ia, a5 as Sa, a6 as Na, a7 as ea, a8 as Aa, a9 as Oa, aa as Ca, ab as Ga, ac as Da, ad as Pa, ae as ta, af as Ra, ag as La, ah as Ma, ai as oa, aj as ra, ak as ba, al as na, am as Fa, an as ia, ao as la, ap as ga, aq as Ba, ar as ca, as as Ya, at as Ua, au as da, av as ua, aw as Ha, ax as pa, ay as ya, az as Ka, aA as ka, aB as ma, aC as Va, aD as Xa, aE as ha, aF as va, aG as Wa, aH as fa, aI as xa, aJ as za, aK as wa, aL as Za, aM as ja, aN as Qa, aO as qa, aP as Ja, aQ as $a, aR as a_, aS as __, aT as E_, aU as T_, aV as s_, aW as I_, aX as S_, aY as N_, aZ as e_, a_ as A_, a$ as O_, b0 as C_, b1 as G_, b2 as D_, b3 as P_, b4 as t_, b5 as R_, b6 as L_, b7 as M_, b8 as o_, b9 as r_, ba as b_, bb as n_, bc as F_, bd as i_, be as l_, bf as g_, bg as B_, bh as c_, bi as Y_, bj as U_, bk as d_, bl as u_, bm as H_, bn as p_, bo as y_, bp as K_, bq as k_, br as m_, bs as V_, bt as X_, bu as h_, bv as v_, bw as W_, bx as f_, by as x_, bz as z_, bA as w_, bB as Z_, bC as j_, bD as Q_, bE as q_, bF as J_, bG as $_, bH as aE, bI as _E, bJ as EE, bK as TE, bL as sE, bM as IE, bN as SE, bO as NE, bP as eE, bQ as AE, bR as OE, bS as CE, bT as GE, bU as DE, bV as PE, bW as tE, bX as RE, bY as LE, bZ as ME, b_ as oE, b$ as rE, c0 as bE, c1 as nE, c2 as FE, c3 as iE, c4 as lE, c5 as gE, c6 as BE, c7 as cE, c8 as YE, c9 as UE, ca as dE, cb as uE, cc as HE, cd as pE, ce as yE, cf as KE, cg as kE, ch as mE, ci as VE, cj as XE, ck as hE, cl as vE, cm as WE, cn as fE, co as xE } from "./lib-MGJszuw2.js";
1
+ import { A as E, a as T, b as s, c as I, d as S, e as N, f as e, B as A, g as O, h as C, i as G, j as D, k as P, l as t, m as R, n as L, o as M, p as o, q as r, r as b, s as n, t as F, u as i, v as l, w as g, x as B, y as c, z as Y, C as U, D as d, E as u, F as H, G as p, H as y, I as K, J as k, K as m, L as V, M as X, N as h, O as v, P as W, Q as f, R as x, S as z, T as w, U as Z, V as j, W as Q, X as q, Y as J, Z as $, $ as aa, a0 as _a, a1 as Ea, a2 as Ta, a3 as sa, a4 as Ia, a5 as Sa, a6 as Na, a7 as ea, a8 as Aa, a9 as Oa, aa as Ca, ab as Ga, ac as Da, ad as Pa, ae as ta, af as Ra, ag as La, ah as Ma, ai as oa, aj as ra, ak as ba, al as na, am as Fa, an as ia, ao as la, ap as ga, aq as Ba, ar as ca, as as Ya, at as Ua, au as da, av as ua, aw as Ha, ax as pa, ay as ya, az as Ka, aA as ka, aB as ma, aC as Va, aD as Xa, aE as ha, aF as va, aG as Wa, aH as fa, aI as xa, aJ as za, aK as wa, aL as Za, aM as ja, aN as Qa, aO as qa, aP as Ja, aQ as $a, aR as a_, aS as __, aT as E_, aU as T_, aV as s_, aW as I_, aX as S_, aY as N_, aZ as e_, a_ as A_, a$ as O_, b0 as C_, b1 as G_, b2 as D_, b3 as P_, b4 as t_, b5 as R_, b6 as L_, b7 as M_, b8 as o_, b9 as r_, ba as b_, bb as n_, bc as F_, bd as i_, be as l_, bf as g_, bg as B_, bh as c_, bi as Y_, bj as U_, bk as d_, bl as u_, bm as H_, bn as p_, bo as y_, bp as K_, bq as k_, br as m_, bs as V_, bt as X_, bu as h_, bv as v_, bw as W_, bx as f_, by as x_, bz as z_, bA as w_, bB as Z_, bC as j_, bD as Q_, bE as q_, bF as J_, bG as $_, bH as aE, bI as _E, bJ as EE, bK as TE, bL as sE, bM as IE, bN as SE, bO as NE, bP as eE, bQ as AE, bR as OE, bS as CE, bT as GE, bU as DE, bV as PE, bW as tE, bX as RE, bY as LE, bZ as ME, b_ as oE, b$ as rE, c0 as bE, c1 as nE, c2 as FE, c3 as iE, c4 as lE, c5 as gE, c6 as BE, c7 as cE, c8 as YE, c9 as UE, ca as dE, cb as uE, cc as HE, cd as pE, ce as yE, cf as KE, cg as kE, ch as mE, ci as VE, cj as XE, ck as hE, cl as vE, cm as WE, cn as fE, co as xE } from "./lib-DaFVTyb9.js";
2
2
  import { createPinia as wE, setActivePinia as ZE } from "pinia";
3
3
  export {
4
4
  E as ABOUT_SECTION_SETTINGS_CONFIG,
@@ -60954,7 +60954,7 @@ const Kn = /* @__PURE__ */ Z6(GB1), WB1 = (e, t, n) => {
60954
60954
  stopGeneration: l
60955
60955
  };
60956
60956
  }
60957
- ), KB1 = 1700, YB1 = 1e4, XB1 = 40, JB1 = 100 * 1024 * 1024, QB1 = 5 * 1024 * 1024, eO1 = 2e3, an = ne("history", () => {
60957
+ ), KB1 = 1700, YB1 = 1e4, XB1 = 40, JB1 = 100 * 1024 * 1024, QB1 = 25 * 1024 * 1024, eO1 = 2e3, an = ne("history", () => {
60958
60958
  const e = h3(), t = Yi([]), n = s1(-1), i = s1(!1), o = s1(!1), s = s1(!1);
60959
60959
  let r = 0;
60960
60960
  const a = T(() => n.value > 0), l = T(
@@ -62190,10 +62190,10 @@ const Kn = /* @__PURE__ */ Z6(GB1), WB1 = (e, t, n) => {
62190
62190
  R2(() => n.context.isDesignCom, async () => {
62191
62191
  const M = P6().toLowerCase(), _ = n.context.isDesignCom ? "Dcom" : "BrandCrowd";
62192
62192
  try {
62193
- const { default: V } = await yk(/* @__PURE__ */ Object.assign({ "./watermark/CreatedOnBrandCrowd-de-de.vue": () => import("./CreatedOnBrandCrowd-de-de-DmDSspcZ.js"), "./watermark/CreatedOnBrandCrowd-en-us.vue": () => import("./CreatedOnBrandCrowd-en-us-B5Lh1tFl.js"), "./watermark/CreatedOnBrandCrowd-es-es.vue": () => import("./CreatedOnBrandCrowd-es-es-BOiOyh5Y.js"), "./watermark/CreatedOnBrandCrowd-fr-ca.vue": () => import("./CreatedOnBrandCrowd-fr-ca-BbC8s_pY.js"), "./watermark/CreatedOnBrandCrowd-fr-fr.vue": () => import("./CreatedOnBrandCrowd-fr-fr-BbC8s_pY.js"), "./watermark/CreatedOnBrandCrowd-pt-br.vue": () => import("./CreatedOnBrandCrowd-pt-br-B9PQ72m4.js"), "./watermark/CreatedOnBrandCrowd-pt-pt.vue": () => import("./CreatedOnBrandCrowd-pt-pt-B9PQ72m4.js"), "./watermark/CreatedOnDcom-de-de.vue": () => import("./CreatedOnDcom-de-de-C7NzbKIg.js"), "./watermark/CreatedOnDcom-en-us.vue": () => import("./CreatedOnDcom-en-us-DbVi6Q9C.js"), "./watermark/CreatedOnDcom-es-es.vue": () => import("./CreatedOnDcom-es-es-C4TPAk-c.js"), "./watermark/CreatedOnDcom-fr-ca.vue": () => import("./CreatedOnDcom-fr-ca-xqzYFaKy.js"), "./watermark/CreatedOnDcom-fr-fr.vue": () => import("./CreatedOnDcom-fr-fr-Bh-7lY7W.js"), "./watermark/CreatedOnDcom-pt-br.vue": () => import("./CreatedOnDcom-pt-br-D3J8peaF.js"), "./watermark/CreatedOnDcom-pt-pt.vue": () => import("./CreatedOnDcom-pt-pt-101mCRJX.js") }), `./watermark/CreatedOn${_}-${M}.vue`, 3);
62193
+ const { default: V } = await yk(/* @__PURE__ */ Object.assign({ "./watermark/CreatedOnBrandCrowd-de-de.vue": () => import("./CreatedOnBrandCrowd-de-de-4mxqeHPP.js"), "./watermark/CreatedOnBrandCrowd-en-us.vue": () => import("./CreatedOnBrandCrowd-en-us-DQN_hGjC.js"), "./watermark/CreatedOnBrandCrowd-es-es.vue": () => import("./CreatedOnBrandCrowd-es-es-gijtJMPK.js"), "./watermark/CreatedOnBrandCrowd-fr-ca.vue": () => import("./CreatedOnBrandCrowd-fr-ca-BcOADD0V.js"), "./watermark/CreatedOnBrandCrowd-fr-fr.vue": () => import("./CreatedOnBrandCrowd-fr-fr-BcOADD0V.js"), "./watermark/CreatedOnBrandCrowd-pt-br.vue": () => import("./CreatedOnBrandCrowd-pt-br-B5eEyjAo.js"), "./watermark/CreatedOnBrandCrowd-pt-pt.vue": () => import("./CreatedOnBrandCrowd-pt-pt-B5eEyjAo.js"), "./watermark/CreatedOnDcom-de-de.vue": () => import("./CreatedOnDcom-de-de-DSGP6AAT.js"), "./watermark/CreatedOnDcom-en-us.vue": () => import("./CreatedOnDcom-en-us-BOuoJM_x.js"), "./watermark/CreatedOnDcom-es-es.vue": () => import("./CreatedOnDcom-es-es-kbiGFyBV.js"), "./watermark/CreatedOnDcom-fr-ca.vue": () => import("./CreatedOnDcom-fr-ca-BVFxrE6-.js"), "./watermark/CreatedOnDcom-fr-fr.vue": () => import("./CreatedOnDcom-fr-fr-92xJGi0w.js"), "./watermark/CreatedOnDcom-pt-br.vue": () => import("./CreatedOnDcom-pt-br-C40X9FAV.js"), "./watermark/CreatedOnDcom-pt-pt.vue": () => import("./CreatedOnDcom-pt-pt-CXxJUTUx.js") }), `./watermark/CreatedOn${_}-${M}.vue`, 3);
62194
62194
  i.value = V;
62195
62195
  } catch {
62196
- const { default: H } = await yk(/* @__PURE__ */ Object.assign({ "./watermark/CreatedOnBrandCrowd-en-us.vue": () => import("./CreatedOnBrandCrowd-en-us-B5Lh1tFl.js"), "./watermark/CreatedOnDcom-en-us.vue": () => import("./CreatedOnDcom-en-us-DbVi6Q9C.js") }), `./watermark/CreatedOn${_}-en-us.vue`, 3);
62196
+ const { default: H } = await yk(/* @__PURE__ */ Object.assign({ "./watermark/CreatedOnBrandCrowd-en-us.vue": () => import("./CreatedOnBrandCrowd-en-us-DQN_hGjC.js"), "./watermark/CreatedOnDcom-en-us.vue": () => import("./CreatedOnDcom-en-us-BOuoJM_x.js") }), `./watermark/CreatedOn${_}-en-us.vue`, 3);
62197
62197
  i.value = H;
62198
62198
  }
62199
62199
  }, {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@designcrowd/library.brand-page",
3
3
  "description": "A collection of Maker/Designer applications",
4
- "version": "5.17.25-undo-9",
4
+ "version": "5.17.25-undo-12",
5
5
  "author": "Design.com Eng",
6
6
  "license": "UNLICENSED",
7
7
  "type": "module",
@@ -844,13 +844,13 @@ describe('history-store (single stack + JSON-string snapshots)', () => {
844
844
  expect(store.currentIndex).toBe(39);
845
845
  });
846
846
 
847
- it('FR-13c: skips oversize captures (> 5 MB) and leaves the stack alone', async () => {
847
+ it('FR-13c: skips oversize captures (> 25 MB) and leaves the stack alone', async () => {
848
848
  const store = useHistoryStore();
849
849
 
850
850
  await store.captureBaseline();
851
851
  const lengthBefore = store.entries.length;
852
852
 
853
- // Swap in a mock that produces a 6 MB snapshot on serialize.
853
+ // Swap in a mock that produces a > 25 MB snapshot on serialize.
854
854
  const originalData = mockMakerStore.brandPageData;
855
855
 
856
856
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -858,8 +858,7 @@ describe('history-store (single stack + JSON-string snapshots)', () => {
858
858
  v: 1,
859
859
  pages: [],
860
860
  styles: {},
861
- // Pad to > 5 MB.
862
- _padding: 'x'.repeat(6 * 1024 * 1024),
861
+ _padding: 'x'.repeat(26 * 1024 * 1024),
863
862
  };
864
863
 
865
864
  const result = store.capture({ source: 'manual_edit', actor: 'user' });
@@ -932,7 +931,7 @@ describe('history-store (single stack + JSON-string snapshots)', () => {
932
931
  expect((redoEvent!.props as any).actor).toBe('ai_builder');
933
932
  });
934
933
 
935
- it('emits oversized event when a capture exceeds 5 MB', async () => {
934
+ it('emits oversized event when a capture exceeds 25 MB', async () => {
936
935
  const received: { name: string; props: unknown }[] = [];
937
936
 
938
937
  useEventTracker().subscribe((event) =>
@@ -950,7 +949,7 @@ describe('history-store (single stack + JSON-string snapshots)', () => {
950
949
  v: 1,
951
950
  pages: [],
952
951
  styles: {},
953
- _padding: 'x'.repeat(6 * 1024 * 1024),
952
+ _padding: 'x'.repeat(26 * 1024 * 1024),
954
953
  };
955
954
 
956
955
  store.capture({ source: 'manual_edit', actor: 'user' });
@@ -962,7 +961,7 @@ describe('history-store (single stack + JSON-string snapshots)', () => {
962
961
  expect(oversized).toBeDefined();
963
962
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
964
963
  expect((oversized!.props as any).attempted_bytes).toBeGreaterThan(
965
- 5 * 1024 * 1024,
964
+ 25 * 1024 * 1024,
966
965
  );
967
966
 
968
967
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -63,11 +63,15 @@ export interface HistoryEntry {
63
63
  const CAPTURE_DEBOUNCE_MS = 1700;
64
64
  const CAPTURE_MAX_WAIT_MS = 10000;
65
65
 
66
- // FR-12: 40-entry cap. FR-13: 100 MB memory budget. FR-13c: 5 MB per-entry
66
+ // FR-12: 40-entry cap. FR-13: 100 MB memory budget. FR-13c: per-entry
67
67
  // oversize threshold — entries above this are skipped + emit telemetry.
68
+ // 25 MB accommodates a high-res BYO logo upload, which renders ~2.5 MB
69
+ // of base64 PNG into each of four viewport sections (~10 MB) plus
70
+ // per-page logo content blocks. The 100 MB total budget still evicts
71
+ // oldest non-baseline entries to keep memory bounded.
68
72
  const MAX_ENTRIES = 40;
69
73
  const MAX_MEMORY_BYTES = 100 * 1024 * 1024;
70
- const MAX_ENTRY_BYTES = 5 * 1024 * 1024;
74
+ const MAX_ENTRY_BYTES = 25 * 1024 * 1024;
71
75
 
72
76
  // Window after baseline-capture during which any auto-captured snapshot
73
77
  // REPLACES the baseline rather than pushing a new entry. Covers post-init