@metapages/metapage 1.8.9 → 1.8.10

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.
@@ -1 +1 @@
1
- {"version":3,"file":"metapageRenderer.d.ts","sourceRoot":"","sources":["../../src/metapage/metapageRenderer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGxD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACpD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAmGD,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACtD,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA4NlC"}
1
+ {"version":3,"file":"metapageRenderer.d.ts","sourceRoot":"","sources":["../../src/metapage/metapageRenderer.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAGxD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACpD,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AA6FD,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;IACtD,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA8PlC"}
@@ -1,18 +1,12 @@
1
- import { MetapageEvents as W } from "./events.js";
2
- import { Metapage as I } from "./Metapage.js";
3
- import { pageLoaded as N } from "./MetapageTools.js";
4
- import { getMetapageDefinitionFromUrl as P } from "./util.js";
5
- function T(a) {
6
- if (!a.startsWith("data:"))
7
- return !1;
8
- try {
9
- return new URL(a).pathname.split(";")[0].split(";")[1] === "type=metapage-divider";
10
- } catch {
11
- return !1;
12
- }
1
+ import { MetapageEvents as T } from "./events.js";
2
+ import { Metapage as F } from "./Metapage.js";
3
+ import { pageLoaded as J } from "./MetapageTools.js";
4
+ import { getMetapageDefinitionFromUrl as R } from "./util.js";
5
+ function $(r) {
6
+ return r.startsWith("data:") ? r.includes("type=metapage-divider") : !1;
13
7
  }
14
- function U(a) {
15
- const i = JSON.parse(JSON.stringify(a));
8
+ function W(r) {
9
+ const i = JSON.parse(JSON.stringify(r));
16
10
  i.meta || (i.meta = {}), i.meta.layouts || (i.meta.layouts = {}), i.meta.layouts["react-grid-layout"] || (i.meta.layouts["react-grid-layout"] = {
17
11
  docs: "https://www.npmjs.com/package/react-grid-layout",
18
12
  props: {
@@ -23,141 +17,155 @@ function U(a) {
23
17
  },
24
18
  layout: []
25
19
  });
26
- const r = i.meta.layouts["react-grid-layout"];
20
+ const t = i.meta.layouts["react-grid-layout"];
27
21
  if (i.metaframes) {
28
- Object.keys(i.metaframes).forEach((t) => {
29
- if (!r.layout.some((c) => c.i === t)) {
30
- const c = r.layout.length > 0 ? Math.max(...r.layout.map((h) => (h.y || 0) + (h.h || 2))) : 0;
31
- r.layout.push({
32
- i: t,
22
+ Object.keys(i.metaframes).forEach((a) => {
23
+ if (!t.layout.some((l) => l.i === a)) {
24
+ const l = t.layout.length > 0 ? Math.max(...t.layout.map((o) => (o.y || 0) + (o.h || 2))) : 0;
25
+ t.layout.push({
26
+ i: a,
33
27
  x: 0,
34
- y: c,
35
- w: r.props.cols,
36
- h: T(i.metaframes[t].url) ? 1 : 3
28
+ y: l,
29
+ w: t.props.cols,
30
+ h: $(i.metaframes[a].url) ? 1 : 3
37
31
  });
38
32
  }
39
33
  });
40
- const m = new Set(Object.keys(i.metaframes));
41
- r.layout = r.layout.filter((t) => m.has(t.i)), r.layout.forEach((t) => {
42
- t.x = t.x || 0, t.y = t.y || 0, t.w = t.w || 1, t.h = t.h || 1;
34
+ const f = new Set(Object.keys(i.metaframes));
35
+ t.layout = t.layout.filter((a) => f.has(a.i)), t.layout.forEach((a) => {
36
+ a.x = a.x || 0, a.y = a.y || 0, a.w = a.w || 1, a.h = a.h || 1;
43
37
  });
44
38
  }
45
39
  return i;
46
40
  }
47
- async function q(a) {
48
- var C, O, $, H;
49
- let { url: i, definition: r, onOutputs: m, rootDiv: t, options: c = {} } = a;
50
- if (!i && !r)
41
+ async function Z(r) {
42
+ var b, C, O, j, S;
43
+ let { url: i, definition: t, onOutputs: f, rootDiv: a, options: l = {} } = r;
44
+ if (!i && !t)
51
45
  throw new Error("Either url or definition must be provided");
52
- if (i && r)
46
+ if (i && t)
53
47
  throw new Error("Either url or definition must be provided, not both");
54
- if (i && (r = await P(i)), !r)
48
+ if (i && (t = await R(i)), !t)
55
49
  throw new Error("Failed to fetch metapage definition");
56
- const h = U(r), y = await A(h);
57
- await N();
58
- const s = new I();
59
- s.debug = c.debug || !1;
50
+ t = W(t), t = await P(t), await J();
51
+ const o = new F();
52
+ o.debug = l.debug || !1;
60
53
  try {
61
- await s.setDefinition(y);
54
+ await o.setDefinition(JSON.parse(JSON.stringify(t)));
62
55
  } catch (e) {
63
- throw s.dispose(), new Error(`Failed to set metapage definition: ${e}`);
56
+ throw o.dispose(), new Error(`Failed to set metapage definition: ${e}`);
64
57
  }
65
- const M = [];
66
- m && M.push(s.addListenerReturnDisposer(W.Outputs, m));
67
- const f = (O = (C = y == null ? void 0 : y.meta) == null ? void 0 : C.layouts) == null ? void 0 : O["react-grid-layout"], l = f == null ? void 0 : f.layout;
68
- if (!f || !l)
58
+ const y = [];
59
+ f && y.push(o.addListenerReturnDisposer(T.Outputs, f));
60
+ const m = (C = (b = t == null ? void 0 : t.meta) == null ? void 0 : b.layouts) == null ? void 0 : C["react-grid-layout"], p = m == null ? void 0 : m.layout;
61
+ if (!m || !p)
69
62
  throw new Error("No valid layout found in metapage definition");
70
- const { metaframesToHide: x } = (() => {
71
- var w;
72
- const e = l.map((o, p) => {
73
- const S = s.getMetaframes()[o.i];
74
- return S && T(S.url) ? { index: p, y: o.y, id: o.i } : null;
75
- }).filter((o) => o !== null);
76
- if (e.length === 0)
77
- return { metaframesToHide: /* @__PURE__ */ new Set() };
78
- const u = e.reduce((o, p) => p.y < o.y ? p : o), n = /* @__PURE__ */ new Set(), d = ((w = l.find((o) => o.i === u.id)) == null ? void 0 : w.y) ?? 0;
79
- return l.forEach((o) => {
80
- o.y >= d && n.add(o.i);
81
- }), { metaframesToHide: n };
82
- })(), b = Object.keys(s.getMetaframes()).filter((e) => !x.has(e)), j = l.filter((e) => b.includes(e.i)), k = Math.max(...j.map((e) => e.x + e.w)), L = Math.max(...j.map((e) => e.y + e.h)), R = {
63
+ const g = /* @__PURE__ */ new Set(), E = p.map((e, d) => {
64
+ const s = o.getMetaframes()[e.i];
65
+ return s && $(s.url) ? { index: d, y: e.y, id: e.i } : null;
66
+ }).filter((e) => e !== null);
67
+ if (E.length > 0) {
68
+ const e = E.reduce((s, n) => n.y < s.y ? n : s), d = ((O = p.find((s) => s.i === e.id)) == null ? void 0 : O.y) ?? 0;
69
+ p.forEach((s) => {
70
+ s.y >= d && g.add(s.i);
71
+ });
72
+ }
73
+ const M = o.getMetaframeIds().filter((e) => !g.has(e));
74
+ let u = p.filter((e) => M.includes(e.i));
75
+ if (u.length === 0)
76
+ return console.warn("No visible metaframes found"), {
77
+ setInputs: (e) => {
78
+ o.isDisposed() || o.setInputs(e);
79
+ },
80
+ dispose: () => {
81
+ y.forEach((e) => e()), o.dispose(), a.innerHTML = "";
82
+ }
83
+ };
84
+ u.sort((e, d) => e.y !== d.y ? e.y - d.y : e.x - d.x);
85
+ const H = Math.max(...u.map((e) => e.x + e.w));
86
+ Math.max(...u.map((e) => e.y + e.h));
87
+ const L = {
83
88
  display: "grid",
84
- gridTemplateColumns: `repeat(${k}, 1fr)`,
85
- gridTemplateRows: `repeat(${L}, minmax(0, 1fr))`,
86
- gap: `${(($ = f.props.margin) == null ? void 0 : $[0]) || 10}px`,
89
+ gridTemplateColumns: `repeat(${Math.max(1, H)}, 1fr)`,
90
+ gridAutoRows: "minmax(100px, auto)",
91
+ gap: `${((j = m.props.margin) == null ? void 0 : j[0]) || 10}px`,
87
92
  width: "100%",
88
93
  height: "100%",
89
- padding: ((H = f.props.containerPadding) == null ? void 0 : H[0]) || 0,
94
+ padding: ((S = m.props.containerPadding) == null ? void 0 : S[0]) || 0,
90
95
  minHeight: 0,
91
96
  alignContent: "stretch"
92
- }, F = {
97
+ }, k = {
93
98
  width: "100%",
94
99
  height: "100%",
95
100
  overflow: "hidden",
96
101
  display: "flex",
97
102
  flexDirection: "column"
98
103
  };
99
- t.innerHTML = "";
100
- const g = document.createElement("div");
101
- Object.assign(g.style, F);
102
- const v = document.createElement("div");
103
- Object.assign(v.style, R), b.forEach((e, u) => {
104
- const n = l.find((p) => p.i === e);
105
- if (!n)
104
+ a.innerHTML = "";
105
+ const h = document.createElement("div");
106
+ Object.assign(h.style, k);
107
+ const w = document.createElement("div");
108
+ Object.assign(w.style, L), M.forEach((e, d) => {
109
+ const s = p.find((N) => N.i === e);
110
+ if (!s)
106
111
  return;
107
- const d = s.getMetaframes()[e];
108
- if (!d)
112
+ const n = o.getMetaframes()[e];
113
+ if (!n)
109
114
  return;
110
- const w = {
111
- gridColumn: `${n.x + 1} / span ${n.w}`,
112
- gridRow: `${n.y + 1} / span ${n.h}`,
115
+ const I = {
116
+ gridColumn: `${s.x + 1} / span ${s.w}`,
117
+ gridRow: `${s.y + 1} / span ${s.h}`,
113
118
  overflow: "hidden",
114
119
  width: "100%",
115
120
  minHeight: "100%",
116
121
  height: "100%",
117
- border: c.hideFrameBorders ? "none" : "1px solid #e0e0e0"
118
- }, o = document.createElement("iframe");
119
- o.src = d.url, o.style.border = "none", Object.assign(o.style, w), v.appendChild(o);
122
+ border: l.hideFrameBorders ? "none" : "1px solid #e0e0e0",
123
+ position: "relative"
124
+ }, c = document.createElement("iframe");
125
+ c.src = n.url, c.style.border = "none", c.style.position = "absolute", c.style.top = "0", c.style.left = "0", c.style.width = "100%", c.style.height = "100%";
126
+ const x = document.createElement("div");
127
+ Object.assign(x.style, I), x.appendChild(c), w.appendChild(x);
120
128
  });
121
- const E = document.createElement("div");
122
- return E.style.display = "none", Object.keys(s.getMetaframes()).filter((e) => x.has(e)).forEach((e) => {
123
- const u = s.getMetaframes()[e];
124
- if (!u)
129
+ const v = document.createElement("div");
130
+ return v.style.display = "none", Object.keys(o.getMetaframes()).filter((e) => g.has(e)).forEach((e) => {
131
+ const d = o.getMetaframes()[e];
132
+ if (!d)
125
133
  return;
126
- const n = document.createElement("div");
127
- n.setAttribute("data-metaframe-id", e);
128
- const d = document.createElement("iframe");
129
- d.src = u.url, d.style.border = "none", d.style.height = "100%", d.style.width = "100%", d.style.overflow = "clip", n.appendChild(d), E.appendChild(n);
130
- }), g.appendChild(v), g.appendChild(E), t.appendChild(g), {
134
+ const s = document.createElement("div");
135
+ s.setAttribute("data-metaframe-id", e);
136
+ const n = document.createElement("iframe");
137
+ n.src = d.url, n.style.border = "none", n.style.height = "100%", n.style.width = "100%", n.style.overflow = "clip", s.appendChild(n), v.appendChild(s);
138
+ }), h.appendChild(w), h.appendChild(v), a.appendChild(h), {
131
139
  setInputs: (e) => {
132
- s.isDisposed() || s.setInputs(e);
140
+ o.isDisposed() || o.setInputs(e);
133
141
  },
134
142
  dispose: () => {
135
- M.forEach((e) => e()), s.dispose(), t.innerHTML = "";
143
+ y.forEach((e) => e()), o.dispose(), a.innerHTML = "";
136
144
  }
137
145
  };
138
146
  }
139
- const Y = (a) => {
140
- var r;
141
- if (!a)
147
+ const A = (r) => {
148
+ var t;
149
+ if (!r)
142
150
  return;
143
- typeof a == "string" && (a.startsWith("/") && (a = "https://metapage.io" + a), a = new URL(a));
144
- let i = (r = /\/m?f\/([0-9a-zA-Z-]{3,})\/?(metaframe\.json)?.*$/g.exec(a.pathname)) == null ? void 0 : r[1];
145
- return i || (a.searchParams.get("mfk") ?? void 0);
146
- }, A = async (a) => {
147
- if (!(a != null && a.metaframes))
148
- return a;
149
- for (const [i, r] of Object.entries(a.metaframes)) {
150
- if (!(r.url.startsWith("https://metapage.io/mf/") || r.url.startsWith("https://metapage.io/f/")))
151
+ typeof r == "string" && (r.startsWith("/") && (r = "https://metapage.io" + r), r = new URL(r));
152
+ let i = (t = /\/m?f\/([0-9a-zA-Z-]{3,})\/?(metaframe\.json)?.*$/g.exec(r.pathname)) == null ? void 0 : t[1];
153
+ return i || (r.searchParams.get("mfk") ?? void 0);
154
+ }, P = async (r) => {
155
+ if (!(r != null && r.metaframes))
156
+ return r;
157
+ for (const [i, t] of Object.entries(r.metaframes)) {
158
+ if (!(t.url.startsWith("https://metapage.io/mf/") || t.url.startsWith("https://metapage.io/f/")))
151
159
  continue;
152
- const m = Y(r.url);
153
- if (!m)
160
+ const f = A(t.url);
161
+ if (!f)
154
162
  continue;
155
- const t = await fetch(`https://metapage.io/f/${m}/definition.json`).then((c) => c.json());
156
- t != null && t.url && (r.url = t == null ? void 0 : t.url);
163
+ const a = await fetch(`https://metapage.io/f/${f}/definition.json`).then((l) => l.json());
164
+ a != null && a.url && (t.url = a == null ? void 0 : a.url);
157
165
  }
158
- return a;
166
+ return r;
159
167
  };
160
168
  export {
161
- q as renderMetapage
169
+ Z as renderMetapage
162
170
  };
163
171
  //# sourceMappingURL=metapageRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metapageRenderer.js","sources":["../../src/metapage/metapageRenderer.ts"],"sourcesContent":[null],"names":["isMetaframeDivider","url","validateLayout","definition","validated","layout","metaframeId","l","currentMaxY","allMetaframeIds","renderMetapage","props","onOutputs","rootDiv","options","getMetapageDefinitionFromUrl","validatedDefinition","processedDefinition","processMetapage","pageLoaded","metapage","Metapage","err","disposers","MetapageEvents","desktopLayoutBlob","_b","_a","metaframesToHide","dividers","item","index","metaframe","lowestYDivider","lowest","current","dividerY","visibleMetaframeIds","visibleLayoutItems","maxCol","maxRow","gridStyle","_c","_d","containerStyle","container","gridContainer","layoutItem","itemStyle","iframe","hiddenContainer","wrapper","inputs","disposer","getMetaframeKey","mfk","metapageDefinition","metaframeDefinition","r"],"mappings":"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"}
1
+ {"version":3,"file":"metapageRenderer.js","sources":["../../src/metapage/metapageRenderer.ts"],"sourcesContent":[null],"names":["isMetaframeDivider","url","validateLayout","definition","validated","layout","metaframeId","currentMaxY","l","allMetaframeIds","renderMetapage","props","onOutputs","rootDiv","options","getMetapageDefinitionFromUrl","processMetapage","pageLoaded","metapage","Metapage","err","disposers","MetapageEvents","desktopLayoutBlob","_b","_a","metaframesToHide","dividers","item","index","metaframe","lowestYDivider","lowest","current","dividerY","_c","visibleMetaframeIds","visibleLayoutItems","inputs","disposer","a","b","maxCol","gridStyle","_d","_e","containerStyle","container","gridContainer","layoutItem","itemStyle","iframe","wrapper","hiddenContainer","getMetaframeKey","mfk","metapageDefinition","metaframeDefinition","r"],"mappings":";;;;AAgCA,SAASA,EAAmBC,GAAW;AACrC,SAAKA,EAAI,WAAW,OAAO,IAGpBA,EAAI,SAAS,uBAAuB,IAFlC;AAGX;AAGA,SAASC,EACPC,GAAgC;AAGhC,QAAMC,IAAY,KAAK,MAAM,KAAK,UAAUD,CAAU,CAAC;AAEnD,EAACC,EAAU,SACbA,EAAU,OAAO,KAGdA,EAAU,KAAK,YACRA,EAAA,KAAK,UAAU,KAGtBA,EAAU,KAAK,QAAQ,mBAAmB,MACnCA,EAAA,KAAK,QAAQ,mBAAmB,IAAI;AAAA,IAC5C,MAAM;AAAA,IACN,OAAO;AAAA,MACL,MAAM;AAAA,MACN,QAAQ,CAAC,IAAI,EAAE;AAAA,MACf,WAAW;AAAA,MACX,kBAAkB,CAAC,GAAG,CAAC;AAAA,IACxB;AAAA,IACD,QAAQ,CAAE;AAAA,EAAA;AAId,QAAMC,IAASD,EAAU,KAAK,QAAQ,mBAAmB;AAGzD,MAAIA,EAAU,YAAY;AACxB,WAAO,KAAKA,EAAU,UAAU,EAAE,QAAQ,CAACE,MAAe;AACpD,UAAA,CAACD,EAAO,OAAO,KAAK,CAAC,MAAkB,EAAE,MAAMC,CAAW,GAAG;AACzD,cAAAC,IACJF,EAAO,OAAO,SAAS,IACnB,KAAK,IACH,GAAGA,EAAO,OAAO,IAAI,CAACG,OAAmBA,EAAE,KAAK,MAAMA,EAAE,KAAK,EAAE,CAAC,IAElE;AAEN,QAAAH,EAAO,OAAO,KAAK;AAAA,UACjB,GAAGC;AAAA,UACH,GAAG;AAAA,UACH,GAAGC;AAAA,UACH,GAAGF,EAAO,MAAM;AAAA,UAChB,GAAGL,EAAmBI,EAAU,WAAWE,CAAW,EAAE,GAAG,IAAI,IAAI;AAAA,QAAA,CACpE;AAAA,MACH;AAAA,IAAA,CACD;AAGD,UAAMG,IAAkB,IAAI,IAAI,OAAO,KAAKL,EAAU,UAAU,CAAC;AAC1D,IAAAC,EAAA,SAASA,EAAO,OAAO,OAAO,CAACG,MACpCC,EAAgB,IAAID,EAAE,CAAC,CAAC,GAInBH,EAAA,OAAO,QAAQ,CAACG,MAAiB;AACpC,MAAAA,EAAA,IAAIA,EAAE,KAAK,GACXA,EAAA,IAAIA,EAAE,KAAK,GACXA,EAAA,IAAIA,EAAE,KAAK,GACXA,EAAA,IAAIA,EAAE,KAAK;AAAA,IAAA,CACd;AAAA,EACH;AAEO,SAAAJ;AACT;AAOA,eAAsBM,EAAeC,GAMpC;;AAEK,MAAA,EAAE,KAAAV,GAAK,YAAAE,GAAY,WAAAS,GAAW,SAAAC,GAAS,SAAAC,IAAU,CAAA,EAAO,IAAAH;AACxD,MAAA,CAACV,KAAO,CAACE;AACL,UAAA,IAAI,MAAM,2CAA2C;AAE7D,MAAIF,KAAOE;AACH,UAAA,IAAI,MAAM,qDAAqD;AAOvE,MAJIF,MACWE,IAAA,MAAMY,EAA6Bd,CAAG,IAGjD,CAACE;AACG,UAAA,IAAI,MAAM,qCAAqC;AAGvD,EAAAA,IAAaD,EAAeC,CAAU,GACzBA,IAAA,MAAMa,EAAgBb,CAAU,GAG7C,MAAMc;AAGA,QAAAC,IAAW,IAAIC;AACZ,EAAAD,EAAA,QAAQJ,EAAQ,SAAS;AAE9B,MAAA;AACI,UAAAI,EAAS,cAAc,KAAK,MAAM,KAAK,UAAUf,CAAU,CAAC,CAAC;AAAA,WAC5DiB,GAAK;AACZ,UAAAF,EAAS,QAAO,GACV,IAAI,MAAM,sCAAsCE,CAAG,EAAE;AAAA,EAC7D;AAGA,QAAMC,IAA4B,CAAA;AAElC,EAAIT,KACFS,EAAU,KACRH,EAAS,0BAA0BI,EAAe,SAASV,CAAS,CAAC;AAKzE,QAAMW,KAAoBC,KAAAC,IAAAtB,KAAA,gBAAAA,EAAY,SAAZ,gBAAAsB,EAAkB,YAAlB,gBAAAD,EAA4B,sBAChDnB,IAASkB,KAAA,gBAAAA,EAAmB;AAE9B,MAAA,CAACA,KAAqB,CAAClB;AACnB,UAAA,IAAI,MAAM,8CAA8C;AAI1D,QAAAqB,wBAAuB,OAGvBC,IAAWtB,EACd,IAAI,CAACuB,GAAkBC,MAAiB;AACvC,UAAMC,IAAYZ,EAAS,cAAe,EAACU,EAAK,CAAC;AACjD,WAAOE,KAAa9B,EAAmB8B,EAAU,GAAG,IAChD,EAAE,OAAAD,GAAO,GAAGD,EAAK,GAAG,IAAIA,EAAK,MAC7B;AAAA,EACL,CAAA,EACA,OACC,CAACA,MAA2DA,MAAS,IAAI;AAIzE,MAAAD,EAAS,SAAS,GAAG;AAEjB,UAAAI,IAAiBJ,EAAS,OAC9B,CACEK,GACAC,MACIA,EAAQ,IAAID,EAAO,IAAIC,IAAUD,CAAO,GAG1CE,MACJC,IAAA9B,EAAO,KAAK,CAACuB,MAAqBA,EAAK,MAAMG,EAAe,EAAE,MAA9D,gBAAAI,EAAiE,MAAK;AAGjE,IAAA9B,EAAA,QAAQ,CAACuB,MAAoB;AAC9B,MAAAA,EAAK,KAAKM,KACKR,EAAA,IAAIE,EAAK,CAAC;AAAA,IAC7B,CACD;AAAA,EACH;AAGM,QAAAQ,IAAsBlB,EACzB,gBAAA,EACA,OAAO,CAACZ,MAAgB,CAACoB,EAAiB,IAAIpB,CAAW,CAAC;AAGzD,MAAA+B,IAAqBhC,EAAO,OAAO,CAACuB,MACtCQ,EAAoB,SAASR,EAAK,CAAC,CAAC;AAIlC,MAAAS,EAAmB,WAAW;AAChC,mBAAQ,KAAK,6BAA6B,GAEnC;AAAA,MACL,WAAW,CAACC,MAAkC;AACxC,QAACpB,EAAS,gBACZA,EAAS,UAAUoB,CAAM;AAAA,MAE7B;AAAA,MACA,SAAS,MAAK;AACZ,QAAAjB,EAAU,QAAQ,CAACkB,MAAaA,EAAU,CAAA,GAC1CrB,EAAS,QAAO,GAChBL,EAAQ,YAAY;AAAA,MACtB;AAAA,IAAA;AAKe,EAAAwB,EAAA,KAAK,CAACG,GAAGC,MACtBD,EAAE,MAAMC,EAAE,IACLD,EAAE,IAAIC,EAAE,IAEVD,EAAE,IAAIC,EAAE,CAChB;AAGD,QAAMC,IAAS,KAAK,IAClB,GAAGL,EAAmB,IAAI,CAACT,MAAqBA,EAAK,IAAIA,EAAK,CAAC,CAAC;AAKnD,OAAK,IAClB,GAAGS,EAAmB,IAAI,CAACT,MAAqBA,EAAK,IAAIA,EAAK,CAAC,CAAC;AAKlE,QAAMe,IAAY;AAAA,IAChB,SAAS;AAAA,IACT,qBAAqB,UAAU,KAAK,IAAI,GAAGD,CAAM,CAAC;AAAA,IAClD,cAAc;AAAA,IACd,KAAK,KAAGE,IAAArB,EAAkB,MAAM,WAAxB,gBAAAqB,EAAiC,OAAM,EAAE;AAAA,IACjD,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,WAASC,IAAAtB,EAAkB,MAAM,qBAAxB,gBAAAsB,EAA2C,OAAM;AAAA,IAC1D,WAAW;AAAA,IACX,cAAc;AAAA,EAAA,GAIVC,IAAiB;AAAA,IACrB,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,IACT,eAAe;AAAA,EAAA;AAIjB,EAAAjC,EAAQ,YAAY;AAGd,QAAAkC,IAAY,SAAS,cAAc,KAAK;AACvC,SAAA,OAAOA,EAAU,OAAOD,CAAc;AAGvC,QAAAE,IAAgB,SAAS,cAAc,KAAK;AAC3C,SAAA,OAAOA,EAAc,OAAOL,CAAS,GAGxBP,EAAA,QAAQ,CAAC9B,GAAauB,MAAS;AACjD,UAAMoB,IAAa5C,EAAO,KACxB,CAACuB,MAAqBA,EAAK,MAAMtB,CAAW;AAE9C,QAAI,CAAC2C;AAAY;AAEjB,UAAMnB,IAAYZ,EAAS,cAAe,EAACZ,CAAW;AACtD,QAAI,CAACwB;AAAW;AAEhB,UAAMoB,IAA6C;AAAA,MACjD,YAAY,GAAGD,EAAW,IAAI,CAAC,WAAWA,EAAW,CAAC;AAAA,MACtD,SAAS,GAAGA,EAAW,IAAI,CAAC,WAAWA,EAAW,CAAC;AAAA,MACnD,UAAU;AAAA,MACV,OAAO;AAAA,MACP,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,QAAQnC,EAAQ,mBAAmB,SAAS;AAAA,MAC5C,UAAU;AAAA,IAAA,GAINqC,IAAS,SAAS,cAAc,QAAQ;AAC9C,IAAAA,EAAO,MAAMrB,EAAU,KACvBqB,EAAO,MAAM,SAAS,QACtBA,EAAO,MAAM,WAAW,YACxBA,EAAO,MAAM,MAAM,KACnBA,EAAO,MAAM,OAAO,KACpBA,EAAO,MAAM,QAAQ,QACrBA,EAAO,MAAM,SAAS;AAGhB,UAAAC,IAAU,SAAS,cAAc,KAAK;AACrC,WAAA,OAAOA,EAAQ,OAAOF,CAAS,GACtCE,EAAQ,YAAYD,CAAM,GAE1BH,EAAc,YAAYI,CAAO;AAAA,EAAA,CAClC;AAGK,QAAAC,IAAkB,SAAS,cAAc,KAAK;AACpD,SAAAA,EAAgB,MAAM,UAAU,QAGhC,OAAO,KAAKnC,EAAS,cAAe,CAAA,EACjC,OAAO,CAACZ,MAAgBoB,EAAiB,IAAIpB,CAAW,CAAC,EACzD,QAAQ,CAACA,MAAe;AACvB,UAAMwB,IAAYZ,EAAS,cAAe,EAACZ,CAAW;AACtD,QAAI,CAACwB;AAAW;AAEV,UAAAsB,IAAU,SAAS,cAAc,KAAK;AACpC,IAAAA,EAAA,aAAa,qBAAqB9C,CAAW;AAE/C,UAAA6C,IAAS,SAAS,cAAc,QAAQ;AAC9C,IAAAA,EAAO,MAAMrB,EAAU,KACvBqB,EAAO,MAAM,SAAS,QACtBA,EAAO,MAAM,SAAS,QACtBA,EAAO,MAAM,QAAQ,QACrBA,EAAO,MAAM,WAAW,QAExBC,EAAQ,YAAYD,CAAM,GAC1BE,EAAgB,YAAYD,CAAO;AAAA,EAAA,CACpC,GAGHL,EAAU,YAAYC,CAAa,GACnCD,EAAU,YAAYM,CAAe,GACrCxC,EAAQ,YAAYkC,CAAS,GAGtB;AAAA,IACL,WAAW,CAACT,MAAkC;AACxC,MAACpB,EAAS,gBACZA,EAAS,UAAUoB,CAAM;AAAA,IAE7B;AAAA,IACA,SAAS,MAAK;AAEZ,MAAAjB,EAAU,QAAQ,CAACkB,MAAaA,EAAU,CAAA,GAE1CrB,EAAS,QAAO,GAEhBL,EAAQ,YAAY;AAAA,IACtB;AAAA,EAAA;AAEJ;AAEA,MAAMyC,IAAkB,CAACrD,MAAyC;;AAChE,MAAI,CAACA;AACI;AAEL,EAAA,OAAOA,KAAQ,aACbA,EAAI,WAAW,GAAG,MACpBA,IAAM,wBAAwBA,IAE1BA,IAAA,IAAI,IAAIA,CAAG;AAGnB,MAAIsD,KAAM9B,IAAA,qDAAqD,KAC7DxB,EAAI,QAAQ,MADJ,gBAAAwB,EAEN;AACJ,SAAI8B,MAGGtD,EAAI,aAAa,IAAI,KAAK,KAAK;AACxC,GAEMe,IAAkB,OACtBwC,MACiC;AAC7B,MAAA,EAACA,KAAA,QAAAA,EAAoB;AAChB,WAAAA;AAEE,aAAA,CAAClD,GAAawB,CAAS,KAAK,OAAO,QAC5C0B,EAAmB,UAAU,GAC5B;AAGC,QAAA,EACE1B,EAAU,IAAI,WAAW,yBAAyB,KAClDA,EAAU,IAAI,WAAW,wBAAwB;AAGnD;AAEI,UAAAyB,IAAMD,EAAgBxB,EAAU,GAAG;AACzC,QAAI,CAACyB;AACH;AAEF,UAAME,IAAsB,MAAM,MAChC,yBAAyBF,CAAG,kBAAkB,EAC9C,KAAK,CAACG,MAAMA,EAAE,KAAM,CAAA;AACtB,IAAID,KAAA,QAAAA,EAAqB,QACvB3B,EAAU,MAAM2B,KAAA,gBAAAA,EAAqB;AAAA,EAEzC;AACO,SAAAD;AACT;"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@metapages/metapage",
3
3
  "public": true,
4
- "version": "1.8.9",
4
+ "version": "1.8.10",
5
5
  "description": "Connect web pages together",
6
6
  "repository": "https://github.com/metapages/metapage",
7
7
  "homepage": "https://metapage.io/",
@@ -34,13 +34,7 @@ function isMetaframeDivider(url: string): boolean {
34
34
  if (!url.startsWith("data:")) {
35
35
  return false;
36
36
  }
37
- try {
38
- const parsed = new URL(url);
39
- const mimetype = parsed.pathname.split(";")[0];
40
- return mimetype.split(";")[1] === "type=metapage-divider";
41
- } catch {
42
- return false;
43
- }
37
+ return url.includes("type=metapage-divider");
44
38
  }
45
39
 
46
40
  // Utility function to validate layout (simplified version)
@@ -118,14 +112,12 @@ function validateLayout(
118
112
  * and returns a function to set inputs and a dispose function
119
113
  */
120
114
  export async function renderMetapage(props: {
121
- url?: string,
115
+ url?: string;
122
116
  definition?: MetapageDefinitionV2;
123
117
  onOutputs?: (outputs: MetapageInstanceInputs) => void;
124
118
  rootDiv: HTMLElement;
125
119
  options?: RenderingOptions;
126
120
  }): Promise<MetapageRendererResult> {
127
-
128
-
129
121
  // Validate and clean the definition
130
122
  let { url, definition, onOutputs, rootDiv, options = {} } = props;
131
123
  if (!url && !definition) {
@@ -138,13 +130,13 @@ export async function renderMetapage(props: {
138
130
  if (url) {
139
131
  definition = await getMetapageDefinitionFromUrl(url);
140
132
  }
141
-
133
+
142
134
  if (!definition) {
143
135
  throw new Error("Failed to fetch metapage definition");
144
136
  }
145
137
 
146
- const validatedDefinition = validateLayout(definition);
147
- const processedDefinition = await processMetapage(validatedDefinition);
138
+ definition = validateLayout(definition);
139
+ definition = await processMetapage(definition);
148
140
 
149
141
  // Wait for page to be loaded
150
142
  await pageLoaded();
@@ -154,7 +146,7 @@ export async function renderMetapage(props: {
154
146
  metapage.debug = options.debug || false;
155
147
 
156
148
  try {
157
- await metapage.setDefinition(processedDefinition);
149
+ await metapage.setDefinition(JSON.parse(JSON.stringify(definition)));
158
150
  } catch (err) {
159
151
  metapage.dispose();
160
152
  throw new Error(`Failed to set metapage definition: ${err}`);
@@ -170,8 +162,7 @@ export async function renderMetapage(props: {
170
162
  }
171
163
 
172
164
  // Get the layout information
173
- const desktopLayoutBlob =
174
- processedDefinition?.meta?.layouts?.["react-grid-layout"];
165
+ const desktopLayoutBlob = definition?.meta?.layouts?.["react-grid-layout"];
175
166
  const layout = desktopLayoutBlob?.layout as LayoutItem[];
176
167
 
177
168
  if (!desktopLayoutBlob || !layout) {
@@ -179,23 +170,22 @@ export async function renderMetapage(props: {
179
170
  }
180
171
 
181
172
  // Find dividers and determine which metaframes to hide
182
- const { metaframesToHide } = (() => {
183
- // Find all dividers and their y positions
184
- const dividers = layout
185
- .map((item: LayoutItem, index: number) => {
186
- const metaframe = metapage.getMetaframes()[item.i];
187
- return metaframe && isMetaframeDivider(metaframe.url)
188
- ? { index, y: item.y, id: item.i }
189
- : null;
190
- })
191
- .filter(
192
- (item): item is { index: number; y: number; id: string } =>
193
- item !== null
194
- );
195
-
196
- // If no dividers found, return empty list
197
- if (dividers.length === 0) return { metaframesToHide: new Set<string>() };
173
+ const metaframesToHide = new Set<string>();
174
+
175
+ // Find all dividers and their y positions
176
+ const dividers = layout
177
+ .map((item: LayoutItem, index: number) => {
178
+ const metaframe = metapage.getMetaframes()[item.i];
179
+ return metaframe && isMetaframeDivider(metaframe.url)
180
+ ? { index, y: item.y, id: item.i }
181
+ : null;
182
+ })
183
+ .filter(
184
+ (item): item is { index: number; y: number; id: string } => item !== null
185
+ );
198
186
 
187
+ // If dividers found, determine which metaframes to hide
188
+ if (dividers.length > 0) {
199
189
  // Find the divider with the lowest y value
200
190
  const lowestYDivider = dividers.reduce(
201
191
  (
@@ -204,8 +194,6 @@ export async function renderMetapage(props: {
204
194
  ) => (current.y < lowest.y ? current : lowest)
205
195
  );
206
196
 
207
- // Create a set of metaframe IDs to hide (divider and those below it)
208
- const metaframesToHide = new Set<string>();
209
197
  const dividerY =
210
198
  layout.find((item: LayoutItem) => item.i === lowestYDivider.id)?.y ?? 0;
211
199
 
@@ -215,31 +203,61 @@ export async function renderMetapage(props: {
215
203
  metaframesToHide.add(item.i);
216
204
  }
217
205
  });
218
-
219
- return { metaframesToHide };
220
- })();
206
+ }
221
207
 
222
208
  // Get visible metaframes
223
- const visibleMetaframeIds = Object.keys(metapage.getMetaframes()).filter(
224
- (metaframeId) => !metaframesToHide.has(metaframeId)
225
- );
209
+ const visibleMetaframeIds = metapage
210
+ .getMetaframeIds()
211
+ .filter((metaframeId) => !metaframesToHide.has(metaframeId));
226
212
 
227
213
  // Calculate grid dimensions based on visible metaframes only
228
- const visibleLayoutItems = layout.filter((item: LayoutItem) =>
214
+ let visibleLayoutItems = layout.filter((item: LayoutItem) =>
229
215
  visibleMetaframeIds.includes(item.i)
230
216
  );
217
+
218
+ // Handle case where no metaframes are visible
219
+ if (visibleLayoutItems.length === 0) {
220
+ console.warn("No visible metaframes found");
221
+ // Return early with empty result
222
+ return {
223
+ setInputs: (inputs: MetapageInstanceInputs) => {
224
+ if (!metapage.isDisposed()) {
225
+ metapage.setInputs(inputs);
226
+ }
227
+ },
228
+ dispose: () => {
229
+ disposers.forEach((disposer) => disposer());
230
+ metapage.dispose();
231
+ rootDiv.innerHTML = "";
232
+ },
233
+ };
234
+ }
235
+
236
+ // Sort visible layout items by y position to ensure proper grid layout
237
+ visibleLayoutItems.sort((a, b) => {
238
+ if (a.y !== b.y) {
239
+ return a.y - b.y;
240
+ }
241
+ return a.x - b.x;
242
+ });
243
+
244
+ // Calculate grid dimensions based on visible items only
231
245
  const maxCol = Math.max(
232
246
  ...visibleLayoutItems.map((item: LayoutItem) => item.x + item.w)
233
247
  );
248
+
249
+ // For rows, we need to account for the fact that we're hiding items below the divider
250
+ // So we should use the actual visible items' positions
234
251
  const maxRow = Math.max(
235
252
  ...visibleLayoutItems.map((item: LayoutItem) => item.y + item.h)
236
253
  );
254
+
237
255
 
238
256
  // Create grid container style
239
257
  const gridStyle = {
240
258
  display: "grid",
241
- gridTemplateColumns: `repeat(${maxCol}, 1fr)`,
242
- gridTemplateRows: `repeat(${maxRow}, minmax(0, 1fr))`,
259
+ gridTemplateColumns: `repeat(${Math.max(1, maxCol)}, 1fr)`,
260
+ gridAutoRows: "minmax(100px, auto)",
243
261
  gap: `${desktopLayoutBlob.props.margin?.[0] || 10}px`,
244
262
  width: "100%",
245
263
  height: "100%",
@@ -286,15 +304,25 @@ export async function renderMetapage(props: {
286
304
  minHeight: "100%",
287
305
  height: "100%",
288
306
  border: options.hideFrameBorders ? "none" : "1px solid #e0e0e0",
307
+ position: "relative" as const,
289
308
  };
290
309
 
291
310
  // Create iframe for the metaframe
292
311
  const iframe = document.createElement("iframe");
293
312
  iframe.src = metaframe.url;
294
313
  iframe.style.border = "none";
295
- Object.assign(iframe.style, itemStyle);
296
-
297
- gridContainer.appendChild(iframe);
314
+ iframe.style.position = "absolute";
315
+ iframe.style.top = "0";
316
+ iframe.style.left = "0";
317
+ iframe.style.width = "100%";
318
+ iframe.style.height = "100%";
319
+
320
+ // Create wrapper div for proper grid positioning
321
+ const wrapper = document.createElement("div");
322
+ Object.assign(wrapper.style, itemStyle);
323
+ wrapper.appendChild(iframe);
324
+
325
+ gridContainer.appendChild(wrapper);
298
326
  });
299
327
 
300
328
  // Create hidden container for hidden metaframes