@juo/blocks 1.12.0-alpha.1 → 1.12.0-alpha.2

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 (52) hide show
  1. package/dist/{ExtensionRoot-Z2DlF9X6.js → ExtensionRoot-peABLAZZ.js} +3 -2
  2. package/dist/{block-Bh3z0B3y.js → block-B6s9jL7l.js} +37 -42
  3. package/dist/block.d.ts +1 -1
  4. package/dist/block.d.ts.map +1 -1
  5. package/dist/{bridge-w5KQ-czl.js → bridge-r7Yk8fjY.js} +34 -25
  6. package/dist/core.js +170 -98
  7. package/dist/devtools/env.d.ts +3 -0
  8. package/dist/devtools/env.d.ts.map +1 -0
  9. package/dist/devtools/hook.d.ts +35 -0
  10. package/dist/devtools/hook.d.ts.map +1 -0
  11. package/dist/devtools/index.d.ts +4 -0
  12. package/dist/devtools/index.d.ts.map +1 -0
  13. package/dist/devtools/protocol.d.ts +91 -0
  14. package/dist/devtools/protocol.d.ts.map +1 -0
  15. package/dist/devtools.js +44 -0
  16. package/dist/editor/bridge.d.ts +7 -0
  17. package/dist/editor/bridge.d.ts.map +1 -1
  18. package/dist/editor/components.d.ts.map +1 -1
  19. package/dist/editor/main.d.ts +2 -1
  20. package/dist/editor/main.d.ts.map +1 -1
  21. package/dist/editor/messages.d.ts +13 -2
  22. package/dist/editor/messages.d.ts.map +1 -1
  23. package/dist/editor/messages.test.d.ts +2 -0
  24. package/dist/editor/messages.test.d.ts.map +1 -0
  25. package/dist/editor/overlays.d.ts +14 -0
  26. package/dist/editor/overlays.d.ts.map +1 -0
  27. package/dist/editor/overlays.test.d.ts +2 -0
  28. package/dist/editor/overlays.test.d.ts.map +1 -0
  29. package/dist/editor.js +63 -45
  30. package/dist/{juo-workflow-D3c29mxb.js → juo-workflow-DY4rd256.js} +29 -9
  31. package/dist/main.d.ts +1 -0
  32. package/dist/main.d.ts.map +1 -1
  33. package/dist/overlay-wrapper.d.ts +1 -0
  34. package/dist/overlay-wrapper.d.ts.map +1 -1
  35. package/dist/overlay-wrapper.test.d.ts +2 -0
  36. package/dist/overlay-wrapper.test.d.ts.map +1 -0
  37. package/dist/overlays/OverlayService.d.ts +34 -0
  38. package/dist/overlays/OverlayService.d.ts.map +1 -0
  39. package/dist/overlays/OverlayService.test.d.ts +2 -0
  40. package/dist/overlays/OverlayService.test.d.ts.map +1 -0
  41. package/dist/preact.js +1 -1
  42. package/dist/react.js +1 -1
  43. package/dist/services/subscription/adapter.d.ts +9 -0
  44. package/dist/services/subscription/adapter.d.ts.map +1 -1
  45. package/dist/services/subscription/subscriptionService.d.ts.map +1 -1
  46. package/dist/services/subscription/types.d.ts +38 -0
  47. package/dist/services/subscription/types.d.ts.map +1 -1
  48. package/dist/theme-state.d.ts.map +1 -1
  49. package/dist/vue.js +3 -2
  50. package/dist/web-components-editor.js +4 -4
  51. package/dist/web-components-runtime.js +3 -3
  52. package/package.json +6 -3
package/dist/core.js CHANGED
@@ -1,9 +1,9 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { c as createContext, d, w, a as defineBlock, b as createBlockInstance, r as registerBlock, E, u } from "./block-Bh3z0B3y.js";
5
- import { B, C, e, S, _, f, g, h, i, j, k, l, m, n, o, p, q, s, t, v, x, y, z, A, D, F } from "./block-Bh3z0B3y.js";
6
- import { D as D2, T, a, W, c, b, d as d2, e as e2, g as g2, h as h2, i as i2 } from "./juo-workflow-D3c29mxb.js";
4
+ import { e as createContext, d, k as w, l as defineBlock, g as createBlockInstance, h as getDefinedBlocks, r as registerBlock, E, u } from "./block-B6s9jL7l.js";
5
+ import { B, m, p, S, q, _, t, b, v, f, x, y, z, A, D, i, F, a, o, G, j, H, s, n, w as w2 } from "./block-B6s9jL7l.js";
6
+ import { D as D2, a as a2, T, W, c, b as b2, d as d2, e, g, h, i as i2 } from "./juo-workflow-DY4rd256.js";
7
7
  import { reportBlockWarning, reportBlockError } from "./observability.js";
8
8
  function createState() {
9
9
  const discountCode = d(null);
@@ -105,6 +105,7 @@ function defineOverlayWrapper(opts) {
105
105
  const layout = opts.layout ?? "sidebar";
106
106
  const canAbort = opts.canAbort ?? true;
107
107
  return defineBlock(opts.name, {
108
+ displayName: opts.title,
108
109
  group: "internal",
109
110
  schema: OVERLAY_WRAPPER_SCHEMA,
110
111
  initialValue: () => ({
@@ -116,6 +117,67 @@ function defineOverlayWrapper(opts) {
116
117
  renderer: () => null
117
118
  });
118
119
  }
120
+ const OVERLAY_PREFIX$1 = "overlay:";
121
+ function callInitialValue(block) {
122
+ if (typeof block.initialValue !== "function") return block.initialValue;
123
+ try {
124
+ return block.initialValue();
125
+ } catch (error) {
126
+ console.warn(
127
+ `[overlays] initialValue() threw for "${block.name}"; its content block will not be hidden from the palette.`,
128
+ error
129
+ );
130
+ return void 0;
131
+ }
132
+ }
133
+ function buildOverlayRegistry(blocks) {
134
+ var _a, _b;
135
+ const registry = {};
136
+ for (const block of blocks) {
137
+ if (!block.name.startsWith(OVERLAY_PREFIX$1)) continue;
138
+ const id = block.name.slice(OVERLAY_PREFIX$1.length);
139
+ const initial = callInitialValue(block);
140
+ const first = (_b = (_a = initial == null ? void 0 : initial.slots) == null ? void 0 : _a.content) == null ? void 0 : _b[0];
141
+ const contentBlock = typeof (first == null ? void 0 : first.type) === "string" ? first.type : "";
142
+ registry[id] = {
143
+ block: block.name,
144
+ title: block.displayName ?? id,
145
+ contentBlock
146
+ };
147
+ }
148
+ return registry;
149
+ }
150
+ const OVERLAY_PREFIX = "overlay:";
151
+ const OverlayServiceContext = createContext("services/overlay");
152
+ function createOverlayService(themeState, options = {}) {
153
+ const getBlocks = options.getBlocks ?? getDefinedBlocks;
154
+ const current = w(() => {
155
+ const root = themeState.overlay.blocks.value[0];
156
+ const type = root == null ? void 0 : root.type;
157
+ if (typeof type !== "string" || !type.startsWith(OVERLAY_PREFIX)) {
158
+ return null;
159
+ }
160
+ const props = root.props ?? {};
161
+ return {
162
+ name: type,
163
+ // Defaults mirror defineOverlayWrapper's seeding in overlay-wrapper.ts — keep in sync.
164
+ layout: props.layout ?? "sidebar",
165
+ canAbort: Boolean(props.canAbort ?? true)
166
+ };
167
+ });
168
+ return {
169
+ getEditableOverlays() {
170
+ return buildOverlayRegistry(getBlocks());
171
+ },
172
+ open(name, params) {
173
+ void themeState.resolve("overlay", name, params);
174
+ },
175
+ close() {
176
+ themeState.overlay.blocks.value = [];
177
+ },
178
+ current
179
+ };
180
+ }
119
181
  function isLocalhostOrigin(origin) {
120
182
  try {
121
183
  const url = new URL(origin);
@@ -231,8 +293,8 @@ function createApiCustomerAdapter(fetcher) {
231
293
  _tag: "Success",
232
294
  data: { id: data.id, name, email: data.email }
233
295
  };
234
- } catch (e3) {
235
- return { _tag: "Failure", error: e3 };
296
+ } catch (e2) {
297
+ return { _tag: "Failure", error: e2 };
236
298
  }
237
299
  }
238
300
  };
@@ -320,8 +382,8 @@ function createApiLoginAdapter(fetcher, opts) {
320
382
  lang
321
383
  );
322
384
  return { _tag: "Success", data: void 0 };
323
- } catch (e3) {
324
- return { _tag: "Failure", error: e3 };
385
+ } catch (e2) {
386
+ return { _tag: "Failure", error: e2 };
325
387
  }
326
388
  },
327
389
  async authenticate(params) {
@@ -355,8 +417,8 @@ function createApiLoginAdapter(fetcher, opts) {
355
417
  throw new Error(`Unexpected response: ${res.statusText}`);
356
418
  }
357
419
  return { _tag: "Success", data: await res.json() };
358
- } catch (e3) {
359
- return { _tag: "Failure", error: e3 };
420
+ } catch (e2) {
421
+ return { _tag: "Failure", error: e2 };
360
422
  }
361
423
  },
362
424
  getAuthorizeUrl({ connection, state, shop }) {
@@ -1305,7 +1367,7 @@ function createMockSchedulesAdapter() {
1305
1367
  },
1306
1368
  async removeAdjustment({ adjustmentId }) {
1307
1369
  await new Promise((r) => setTimeout(r, 200));
1308
- adjustments = adjustments.filter((a2) => a2.id !== adjustmentId);
1370
+ adjustments = adjustments.filter((a3) => a3.id !== adjustmentId);
1309
1371
  return { _tag: "Success", data: void 0 };
1310
1372
  }
1311
1373
  };
@@ -1320,8 +1382,8 @@ function createApiSchedulesAdapter(fetcher) {
1320
1382
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
1321
1383
  const data = await res.json();
1322
1384
  return { _tag: "Success", data: data.orders };
1323
- } catch (e3) {
1324
- return { _tag: "Failure", error: e3 };
1385
+ } catch (e2) {
1386
+ return { _tag: "Failure", error: e2 };
1325
1387
  }
1326
1388
  },
1327
1389
  async getAdjustments() {
@@ -1329,15 +1391,15 @@ function createApiSchedulesAdapter(fetcher) {
1329
1391
  const res = await fetcher(`/customer/v1/schedules/adjustments`);
1330
1392
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
1331
1393
  const data = await res.json();
1332
- const adjustments = data.data.map((a2) => ({
1333
- id: a2.id,
1334
- subscriptionId: a2.subscriptionId ?? "",
1335
- type: a2.type === "CHANGE_DATE" ? "date_change" : "skip",
1336
- newDate: a2.newDate
1394
+ const adjustments = data.data.map((a3) => ({
1395
+ id: a3.id,
1396
+ subscriptionId: a3.subscriptionId ?? "",
1397
+ type: a3.type === "CHANGE_DATE" ? "date_change" : "skip",
1398
+ newDate: a3.newDate
1337
1399
  }));
1338
1400
  return { _tag: "Success", data: adjustments };
1339
- } catch (e3) {
1340
- return { _tag: "Failure", error: e3 };
1401
+ } catch (e2) {
1402
+ return { _tag: "Failure", error: e2 };
1341
1403
  }
1342
1404
  },
1343
1405
  async skipOrder({ cycle, date }) {
@@ -1356,8 +1418,8 @@ function createApiSchedulesAdapter(fetcher) {
1356
1418
  });
1357
1419
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
1358
1420
  return { _tag: "Success", data: void 0 };
1359
- } catch (e3) {
1360
- return { _tag: "Failure", error: e3 };
1421
+ } catch (e2) {
1422
+ return { _tag: "Failure", error: e2 };
1361
1423
  }
1362
1424
  },
1363
1425
  async changeDateAdjustment({ newDate, currentDate }) {
@@ -1382,8 +1444,8 @@ function createApiSchedulesAdapter(fetcher) {
1382
1444
  });
1383
1445
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
1384
1446
  return { _tag: "Success", data: void 0 };
1385
- } catch (e3) {
1386
- return { _tag: "Failure", error: e3 };
1447
+ } catch (e2) {
1448
+ return { _tag: "Failure", error: e2 };
1387
1449
  }
1388
1450
  },
1389
1451
  async removeAdjustment({ adjustmentId }) {
@@ -1394,8 +1456,8 @@ function createApiSchedulesAdapter(fetcher) {
1394
1456
  );
1395
1457
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
1396
1458
  return { _tag: "Success", data: void 0 };
1397
- } catch (e3) {
1398
- return { _tag: "Failure", error: e3 };
1459
+ } catch (e2) {
1460
+ return { _tag: "Failure", error: e2 };
1399
1461
  }
1400
1462
  }
1401
1463
  };
@@ -1976,7 +2038,7 @@ function createApiSubscriptionAdapter(fetcher) {
1976
2038
  try {
1977
2039
  const params = new URLSearchParams();
1978
2040
  if ((_a = options == null ? void 0 : options.filters) == null ? void 0 : _a.length) {
1979
- const q2 = options.filters.filter((f2) => Object.keys(f2).length > 0).flatMap((f2) => Object.entries(f2).filter(([, v2]) => Boolean(v2))).map(([k2, v2]) => `${k2}:'${v2}'`).join(" AND ");
2041
+ const q2 = options.filters.filter((f2) => Object.keys(f2).length > 0).flatMap((f2) => Object.entries(f2).filter(([, v2]) => Boolean(v2))).map(([k, v2]) => `${k}:'${v2}'`).join(" AND ");
1980
2042
  if (q2) params.set("query", q2);
1981
2043
  }
1982
2044
  if (options == null ? void 0 : options.pagination) {
@@ -2001,8 +2063,8 @@ function createApiSubscriptionAdapter(fetcher) {
2001
2063
  }
2002
2064
  }
2003
2065
  };
2004
- } catch (e3) {
2005
- return { _tag: "Failure", error: e3 };
2066
+ } catch (e2) {
2067
+ return { _tag: "Failure", error: e2 };
2006
2068
  }
2007
2069
  },
2008
2070
  async getById(id) {
@@ -2014,8 +2076,8 @@ function createApiSubscriptionAdapter(fetcher) {
2014
2076
  const body = await res.json();
2015
2077
  const raw = body.data[0];
2016
2078
  return { _tag: "Success", data: raw ? mapSubscription(raw) : null };
2017
- } catch (e3) {
2018
- return { _tag: "Failure", error: e3 };
2079
+ } catch (e2) {
2080
+ return { _tag: "Failure", error: e2 };
2019
2081
  }
2020
2082
  },
2021
2083
  async addItem({ subscriptionId, item }) {
@@ -2030,8 +2092,8 @@ function createApiSubscriptionAdapter(fetcher) {
2030
2092
  );
2031
2093
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
2032
2094
  return { _tag: "Success", data: void 0 };
2033
- } catch (e3) {
2034
- return { _tag: "Failure", error: e3 };
2095
+ } catch (e2) {
2096
+ return { _tag: "Failure", error: e2 };
2035
2097
  }
2036
2098
  },
2037
2099
  async removeItem({ subscriptionId, itemId }) {
@@ -2042,8 +2104,8 @@ function createApiSubscriptionAdapter(fetcher) {
2042
2104
  );
2043
2105
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
2044
2106
  return { _tag: "Success", data: void 0 };
2045
- } catch (e3) {
2046
- return { _tag: "Failure", error: e3 };
2107
+ } catch (e2) {
2108
+ return { _tag: "Failure", error: e2 };
2047
2109
  }
2048
2110
  },
2049
2111
  async updateItem({ subscriptionId, lineId, update }) {
@@ -2064,8 +2126,8 @@ function createApiSubscriptionAdapter(fetcher) {
2064
2126
  );
2065
2127
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
2066
2128
  return { _tag: "Success", data: void 0 };
2067
- } catch (e3) {
2068
- return { _tag: "Failure", error: e3 };
2129
+ } catch (e2) {
2130
+ return { _tag: "Failure", error: e2 };
2069
2131
  }
2070
2132
  },
2071
2133
  async skipLineItem({ subscriptionId, lineId, nextBillingDate }) {
@@ -2080,8 +2142,8 @@ function createApiSubscriptionAdapter(fetcher) {
2080
2142
  );
2081
2143
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
2082
2144
  return { _tag: "Success", data: void 0 };
2083
- } catch (e3) {
2084
- return { _tag: "Failure", error: e3 };
2145
+ } catch (e2) {
2146
+ return { _tag: "Failure", error: e2 };
2085
2147
  }
2086
2148
  },
2087
2149
  async updateBoxItems({ subscriptionId, parentId, items, shippingMethodHandle }) {
@@ -2096,8 +2158,8 @@ function createApiSubscriptionAdapter(fetcher) {
2096
2158
  );
2097
2159
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
2098
2160
  return { _tag: "Success", data: void 0 };
2099
- } catch (e3) {
2100
- return { _tag: "Failure", error: e3 };
2161
+ } catch (e2) {
2162
+ return { _tag: "Failure", error: e2 };
2101
2163
  }
2102
2164
  },
2103
2165
  async addDiscount({ subscriptionId, code }) {
@@ -2112,8 +2174,8 @@ function createApiSubscriptionAdapter(fetcher) {
2112
2174
  );
2113
2175
  if (!res.ok) return { _tag: "Failure", error: { kind: "NETWORK", message: `HTTP ${res.status}` } };
2114
2176
  return { _tag: "Success", data: void 0 };
2115
- } catch (e3) {
2116
- return { _tag: "Failure", error: { kind: "UNKNOWN", message: e3 instanceof Error ? e3.message : void 0 } };
2177
+ } catch (e2) {
2178
+ return { _tag: "Failure", error: { kind: "UNKNOWN", message: e2 instanceof Error ? e2.message : void 0 } };
2117
2179
  }
2118
2180
  },
2119
2181
  async removeDiscount({ subscriptionId, discountId }) {
@@ -2124,8 +2186,8 @@ function createApiSubscriptionAdapter(fetcher) {
2124
2186
  );
2125
2187
  if (!res.ok) return { _tag: "Failure", error: { kind: "NETWORK", message: `HTTP ${res.status}` } };
2126
2188
  return { _tag: "Success", data: void 0 };
2127
- } catch (e3) {
2128
- return { _tag: "Failure", error: { kind: "UNKNOWN", message: e3 instanceof Error ? e3.message : void 0 } };
2189
+ } catch (e2) {
2190
+ return { _tag: "Failure", error: { kind: "UNKNOWN", message: e2 instanceof Error ? e2.message : void 0 } };
2129
2191
  }
2130
2192
  },
2131
2193
  // Uses PATCH /customer/v1/subscriptions/{id} — the dedicated /reschedule route does not exist.
@@ -2142,8 +2204,8 @@ function createApiSubscriptionAdapter(fetcher) {
2142
2204
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
2143
2205
  const data = await res.json();
2144
2206
  return { _tag: "Success", data: mapSubscription(data) };
2145
- } catch (e3) {
2146
- return { _tag: "Failure", error: e3 };
2207
+ } catch (e2) {
2208
+ return { _tag: "Failure", error: e2 };
2147
2209
  }
2148
2210
  },
2149
2211
  async resume({ subscriptionId }) {
@@ -2155,8 +2217,8 @@ function createApiSubscriptionAdapter(fetcher) {
2155
2217
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
2156
2218
  const data = await res.json();
2157
2219
  return { _tag: "Success", data: mapSubscription(data) };
2158
- } catch (e3) {
2159
- return { _tag: "Failure", error: e3 };
2220
+ } catch (e2) {
2221
+ return { _tag: "Failure", error: e2 };
2160
2222
  }
2161
2223
  },
2162
2224
  async pause({ subscriptionId }) {
@@ -2168,8 +2230,8 @@ function createApiSubscriptionAdapter(fetcher) {
2168
2230
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
2169
2231
  const data = await res.json();
2170
2232
  return { _tag: "Success", data: mapSubscription(data) };
2171
- } catch (e3) {
2172
- return { _tag: "Failure", error: e3 };
2233
+ } catch (e2) {
2234
+ return { _tag: "Failure", error: e2 };
2173
2235
  }
2174
2236
  },
2175
2237
  async reactivate({ subscriptionId }) {
@@ -2181,8 +2243,8 @@ function createApiSubscriptionAdapter(fetcher) {
2181
2243
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
2182
2244
  const data = await res.json();
2183
2245
  return { _tag: "Success", data: mapSubscription(data) };
2184
- } catch (e3) {
2185
- return { _tag: "Failure", error: e3 };
2246
+ } catch (e2) {
2247
+ return { _tag: "Failure", error: e2 };
2186
2248
  }
2187
2249
  },
2188
2250
  async cancel({ subscriptionId, reason }) {
@@ -2198,8 +2260,8 @@ function createApiSubscriptionAdapter(fetcher) {
2198
2260
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
2199
2261
  const data = await res.json();
2200
2262
  return { _tag: "Success", data: mapSubscription(data) };
2201
- } catch (e3) {
2202
- return { _tag: "Failure", error: e3 };
2263
+ } catch (e2) {
2264
+ return { _tag: "Failure", error: e2 };
2203
2265
  }
2204
2266
  },
2205
2267
  // Legacy endpoint — no /customer/v1/subscriptions/{id}/plans exists yet.
@@ -2211,8 +2273,8 @@ function createApiSubscriptionAdapter(fetcher) {
2211
2273
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
2212
2274
  const data = await res.json();
2213
2275
  return { _tag: "Success", data };
2214
- } catch (e3) {
2215
- return { _tag: "Failure", error: e3 };
2276
+ } catch (e2) {
2277
+ return { _tag: "Failure", error: e2 };
2216
2278
  }
2217
2279
  },
2218
2280
  // Legacy endpoint — no /customer/v1 equivalent exists yet.
@@ -2224,8 +2286,8 @@ function createApiSubscriptionAdapter(fetcher) {
2224
2286
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
2225
2287
  const data = await res.json();
2226
2288
  return { _tag: "Success", data: (data == null ? void 0 : data.id) ?? null };
2227
- } catch (e3) {
2228
- return { _tag: "Failure", error: e3 };
2289
+ } catch (e2) {
2290
+ return { _tag: "Failure", error: e2 };
2229
2291
  }
2230
2292
  },
2231
2293
  // Legacy endpoint — no /customer/v1/subscriptions/{id}/upsells exists yet.
@@ -2252,8 +2314,8 @@ function createApiSubscriptionAdapter(fetcher) {
2252
2314
  };
2253
2315
  });
2254
2316
  return { _tag: "Success", data: products };
2255
- } catch (e3) {
2256
- return { _tag: "Failure", error: e3 };
2317
+ } catch (e2) {
2318
+ return { _tag: "Failure", error: e2 };
2257
2319
  }
2258
2320
  },
2259
2321
  // Legacy endpoint — no /customer/v1/subscriptions/{id}/upsells POST exists yet.
@@ -2273,8 +2335,8 @@ function createApiSubscriptionAdapter(fetcher) {
2273
2335
  );
2274
2336
  if (!res.ok) return { _tag: "Failure", error: `HTTP ${res.status}` };
2275
2337
  return { _tag: "Success", data: void 0 };
2276
- } catch (e3) {
2277
- return { _tag: "Failure", error: e3 };
2338
+ } catch (e2) {
2339
+ return { _tag: "Failure", error: e2 };
2278
2340
  }
2279
2341
  },
2280
2342
  // Legacy endpoint — no /customer/v1 equivalent exists yet.
@@ -2290,8 +2352,8 @@ function createApiSubscriptionAdapter(fetcher) {
2290
2352
  _tag: "Success",
2291
2353
  data: { id: data.id, createdAt: data.createdAt }
2292
2354
  };
2293
- } catch (e3) {
2294
- return { _tag: "Failure", error: e3 };
2355
+ } catch (e2) {
2356
+ return { _tag: "Failure", error: e2 };
2295
2357
  }
2296
2358
  },
2297
2359
  // Legacy endpoints, split by stage (see SubscriptionService.renewNow docs):
@@ -2311,8 +2373,8 @@ function createApiSubscriptionAdapter(fetcher) {
2311
2373
  result: (body == null ? void 0 : body.result) ?? "success"
2312
2374
  }
2313
2375
  };
2314
- } catch (e3) {
2315
- return { _tag: "Failure", error: e3 };
2376
+ } catch (e2) {
2377
+ return { _tag: "Failure", error: e2 };
2316
2378
  }
2317
2379
  },
2318
2380
  // Legacy endpoint — POST /plan returns 204; re-fetch to return the updated subscription.
@@ -2334,8 +2396,8 @@ function createApiSubscriptionAdapter(fetcher) {
2334
2396
  _tag: "Failure",
2335
2397
  error: "Subscription not found after frequency change"
2336
2398
  };
2337
- } catch (e3) {
2338
- return { _tag: "Failure", error: e3 };
2399
+ } catch (e2) {
2400
+ return { _tag: "Failure", error: e2 };
2339
2401
  }
2340
2402
  }
2341
2403
  };
@@ -2398,6 +2460,14 @@ function createSubscriptionService(adapter) {
2398
2460
  itemsChangedAt,
2399
2461
  lastOrder,
2400
2462
  search: adapter.search,
2463
+ // Prefer the adapter's rich cross-subscription list (legacy endpoint, active-first).
2464
+ // Fall back to a single `search` page for adapters that don't implement it
2465
+ // (e.g. the editor mock) so the cross-subscription views still render.
2466
+ listAll: adapter.listAll ? adapter.listAll.bind(adapter) : async () => {
2467
+ const result = await adapter.search();
2468
+ if (result._tag !== "Success") return result;
2469
+ return { _tag: "Success", data: result.data.items };
2470
+ },
2401
2471
  getById: adapter.getById,
2402
2472
  getCurrentSubscriptionId,
2403
2473
  addItem: async (subscriptionId, item) => {
@@ -2746,13 +2816,14 @@ export {
2746
2816
  AuthenticationError,
2747
2817
  AuthenticationErrorReason,
2748
2818
  B as BlockWrapperEvent,
2749
- C as ContextProvideEvent,
2750
- e as ContextRequestEvent,
2819
+ m as ContextProvideEvent,
2820
+ p as ContextRequestEvent,
2751
2821
  CustomerServiceContext,
2752
2822
  D2 as DEFAULT_GLOBAL_STYLES,
2753
2823
  DISCOUNT_REJECTION_REASONS,
2754
2824
  LoginServiceContext,
2755
2825
  OrdersServiceContext,
2826
+ OverlayServiceContext,
2756
2827
  ProductServiceContext,
2757
2828
  RouterServiceContext,
2758
2829
  SchedulesServiceContext,
@@ -2762,13 +2833,13 @@ export {
2762
2833
  u as Signal,
2763
2834
  StateContext,
2764
2835
  SubscriptionServiceContext,
2765
- T as ThemeStateContext,
2766
- a as TranslationContext,
2836
+ a2 as ThemeStateContext,
2837
+ T as TranslationContext,
2767
2838
  W as WorkflowServiceContext,
2768
- _ as __recordDevtoolsInstance,
2769
- f as __recordDevtoolsPropSetter,
2770
- g as attachEmptyTracking,
2771
- h as backfillInstanceDefaults,
2839
+ q as __recordDevtoolsInstance,
2840
+ _ as __recordDevtoolsPropSetter,
2841
+ t as attachEmptyTracking,
2842
+ b as backfillInstanceDefaults,
2772
2843
  w as computed,
2773
2844
  createApiCustomerAdapter,
2774
2845
  createApiLoginAdapter,
@@ -2776,9 +2847,9 @@ export {
2776
2847
  createApiSchedulesAdapter,
2777
2848
  createApiSubscriptionAdapter,
2778
2849
  createBlockInstance,
2779
- i as createBlockInstanceFromJSON,
2780
- j as createBlockInstanceFromObject,
2781
- k as createCeRenderer,
2850
+ v as createBlockInstanceFromJSON,
2851
+ f as createBlockInstanceFromObject,
2852
+ x as createCeRenderer,
2782
2853
  createContext,
2783
2854
  createCustomerService,
2784
2855
  createLoginService,
@@ -2791,41 +2862,42 @@ export {
2791
2862
  createMockSubscriptionAdapter,
2792
2863
  createMockWorkflowApiAdapter,
2793
2864
  createOrdersService,
2865
+ createOverlayService,
2794
2866
  createProductService,
2795
2867
  createRouterService,
2796
2868
  createSchedulesService,
2797
- l as createSelectedBlock,
2869
+ y as createSelectedBlock,
2798
2870
  createSettingsService,
2799
2871
  createShopService,
2800
2872
  createState,
2801
2873
  createSubscriptionService,
2802
2874
  c as createThemeState,
2803
- b as createTranslationService,
2875
+ b2 as createTranslationService,
2804
2876
  d2 as createWorkflowApiAdapter,
2805
- e2 as createWorkflowService,
2877
+ e as createWorkflowService,
2806
2878
  defineBlock,
2807
- m as defineBlockRuntime,
2879
+ z as defineBlockRuntime,
2808
2880
  defineOverlayWrapper,
2809
2881
  E as effect,
2810
- g2 as getDefaultBlockForAction,
2811
- n as getDefinedBlocks,
2812
- o as getDevtoolsBlockState,
2813
- h2 as hasDefaultBlockForAction,
2814
- p as hasRenderedContent,
2882
+ g as getDefaultBlockForAction,
2883
+ getDefinedBlocks,
2884
+ A as getDevtoolsBlockState,
2885
+ h as hasDefaultBlockForAction,
2886
+ D as hasRenderedContent,
2815
2887
  i2 as indexOverrides,
2816
- q as injectContext,
2817
- s as isEditorPreview,
2818
- t as isStubDefinition,
2888
+ i as injectContext,
2889
+ F as isEditorPreview,
2890
+ a as isStubDefinition,
2819
2891
  loadBlockRegistry,
2820
2892
  loginService,
2821
- v as onRegisterBlock,
2822
- x as provideContext,
2893
+ o as onRegisterBlock,
2894
+ G as provideContext,
2823
2895
  registerBlock,
2824
- y as serializeBlocks,
2825
- z as setDevtoolsBlockProp,
2896
+ j as serializeBlocks,
2897
+ H as setDevtoolsBlockProp,
2826
2898
  d as signal,
2827
- A as subscribeContext,
2828
- D as untracked,
2899
+ s as subscribeContext,
2900
+ n as untracked,
2829
2901
  waitForDevBlocksUrl,
2830
- F as withWrapper
2902
+ w2 as withWrapper
2831
2903
  };
@@ -0,0 +1,3 @@
1
+ export declare const target: typeof globalThis;
2
+ export declare const isBrowser: boolean;
3
+ //# sourceMappingURL=env.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/devtools/env.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM,EAMJ,OAAO,UAAU,CAAC;AAEjC,eAAO,MAAM,SAAS,SAAgC,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { DevtoolsEvent, DevtoolsEventKind, PropsSchema } from './protocol';
2
+ /**
3
+ * The page-side resolver surface the framework (`blocks/core`) publishes on the
4
+ * hook so a backend running in a *separate bundle* (e.g. an injected extension
5
+ * script) can read/write live block state without importing `@juo/blocks`.
6
+ * Tree + picker are NOT here — the backend derives them from the DOM.
7
+ */
8
+ export interface DevtoolsResolverSurface {
9
+ getBlockState(id: string): {
10
+ props: Record<string, unknown>;
11
+ propsSchema: PropsSchema;
12
+ } | null;
13
+ setBlockProp(id: string, key: string, value: unknown): {
14
+ props: Record<string, unknown>;
15
+ } | null;
16
+ /** Registry name → editor display label (displayName ?? name). */
17
+ getBlockCatalog(): Record<string, string>;
18
+ }
19
+ export interface JuoBlocksDevtoolsHook {
20
+ readonly version: number;
21
+ emit(kind: DevtoolsEventKind, payload: Record<string, unknown>): void;
22
+ on(cb: (e: DevtoolsEvent) => void): () => void;
23
+ off(cb: (e: DevtoolsEvent) => void): void;
24
+ /** Attached by `blocks/core` on first lifecycle emit; undefined until then. */
25
+ resolvers?: DevtoolsResolverSurface;
26
+ }
27
+ declare global {
28
+ var __JUO_BLOCKS_DEVTOOLS_HOOK__: JuoBlocksDevtoolsHook | undefined;
29
+ }
30
+ export declare function createHook(): JuoBlocksDevtoolsHook;
31
+ /** Installs (idempotently) and returns the global hook. */
32
+ export declare function installHook(): JuoBlocksDevtoolsHook;
33
+ /** Returns the global hook if a shell has installed one, else undefined. */
34
+ export declare function getHook(): JuoBlocksDevtoolsHook | undefined;
35
+ //# sourceMappingURL=hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/devtools/hook.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EACjB,MAAM,YAAY,CAAC;AAIpB;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG;QACzB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,WAAW,EAAE,WAAW,CAAC;KAC1B,GAAG,IAAI,CAAC;IACT,YAAY,CACV,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,GACb;QACD,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAChC,GAAG,IAAI,CAAC;IACT,kEAAkE;IAClE,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,IAAI,CAAC,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACtE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC/C,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1C,+EAA+E;IAC/E,SAAS,CAAC,EAAE,uBAAuB,CAAC;CACrC;AAED,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,4BAA4B,EAAE,qBAAqB,GAAG,SAAS,CAAC;CACrE;AAED,wBAAgB,UAAU,IAAI,qBAAqB,CAqBlD;AAED,2DAA2D;AAC3D,wBAAgB,WAAW,IAAI,qBAAqB,CAEnD;AAED,4EAA4E;AAC5E,wBAAgB,OAAO,IAAI,qBAAqB,GAAG,SAAS,CAE3D"}
@@ -0,0 +1,4 @@
1
+ export * from './env';
2
+ export * from './protocol';
3
+ export * from './hook';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/devtools/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC"}