@voltro/client 0.3.0 → 0.5.0

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/dist/index.js CHANGED
@@ -30,47 +30,50 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
30
30
  let r = t.split("."), i = (e) => typeof e == "object" && e && !Array.isArray(e) ? { ...e } : {}, a = i(e), o = a;
31
31
  for (let e = 0; e < r.length - 1; e += 1) o[r[e]] = i(o[r[e]]), o = o[r[e]];
32
32
  return o[r[r.length - 1]] = n, a;
33
- }, te = (e, t, n) => {
33
+ }, te = (e, t) => {
34
+ let n = e.by ?? "id", r = e.identify ? e.identify(t) : typeof t[n] == "string" ? t[n] : typeof t.id == "string" ? t.id : void 0, i = r === void 0 ? [] : Array.isArray(r) ? r : [r];
35
+ return i.length === 0 ? null : new Set(i);
36
+ }, ne = (e, t, n) => {
34
37
  let r = e.path, i = e.by ?? "id";
35
38
  if (e.op === "insert") {
36
- let a = e.shape ? {
39
+ let a = e.shapeItem ?? e.shape, o = a ? {
37
40
  [i]: n,
38
- ...e.shape(t, n),
41
+ ...a(t, n),
39
42
  optimistic: !0
40
43
  } : {
41
44
  [i]: n,
42
45
  ...t,
43
46
  optimistic: !0
44
- }, o = e.order ?? "append";
47
+ }, s = e.order ?? "append";
45
48
  return (e) => {
46
49
  let t = Array.isArray(D(e, r)) ? D(e, r) : [];
47
- return O(e ?? {}, r, o === "append" ? [...t, a] : [a, ...t]);
50
+ return O(e ?? {}, r, s === "append" ? [...t, o] : [o, ...t]);
48
51
  };
49
52
  }
50
- let a = e.identify ? e.identify(t) : typeof t[i] == "string" ? t[i] : typeof t.id == "string" ? t.id : void 0;
51
- if (a === void 0) return null;
53
+ let a = te(e, t);
54
+ if (a === null) return null;
52
55
  if (e.op === "update") {
53
- let n = e.shape ? (n) => ({
54
- ...e.shape(t, n),
55
- [i]: a,
56
+ let n = e.shapeItem ?? e.shape, o = n ? (e) => ({
57
+ ...n(t, e),
58
+ [i]: e[i],
56
59
  optimistic: !0
57
60
  }) : (e) => ({
58
61
  ...e,
59
62
  ...t,
60
- [i]: a,
63
+ [i]: e[i],
61
64
  optimistic: !0
62
65
  });
63
66
  return (e) => {
64
67
  let t = Array.isArray(D(e, r)) ? D(e, r) : [];
65
- return O(e, r, t.map((e) => e[i] === a ? n(e) : e));
68
+ return O(e, r, t.map((e) => a.has(e[i]) ? o(e) : e));
66
69
  };
67
70
  }
68
71
  return (e) => {
69
72
  let t = Array.isArray(D(e, r)) ? D(e, r) : [];
70
- return O(e, r, t.filter((e) => e[i] !== a));
73
+ return O(e, r, t.filter((e) => !a.has(e[i])));
71
74
  };
72
- }, ne = (e, t, n) => {
73
- if (e.path !== void 0) return te(e, t, n);
75
+ }, re = (e, t, n) => {
76
+ if (e.path !== void 0) return ne(e, t, n);
74
77
  switch (e.op) {
75
78
  case "insert": {
76
79
  let r = e.shape ? {
@@ -88,11 +91,11 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
88
91
  };
89
92
  }
90
93
  case "update": {
91
- let n = e.identify ? e.identify(t) : typeof t.id == "string" ? t.id : void 0;
92
- if (n === void 0) return null;
94
+ let n = te(e, t);
95
+ if (n === null) return null;
93
96
  let r = e.shape, i = r ? (e) => ({
94
97
  ...r(t, e),
95
- id: n,
98
+ id: e.id,
96
99
  optimistic: !0
97
100
  }) : (e) => ({
98
101
  ...e,
@@ -101,21 +104,21 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
101
104
  });
102
105
  return (e) => (Array.isArray(e) ? e : []).map((e) => {
103
106
  let t = e;
104
- return t.id === n ? i(t) : t;
107
+ return n.has(t.id) ? i(t) : t;
105
108
  });
106
109
  }
107
110
  case "delete": {
108
- let n = e.identify ? e.identify(t) : typeof t.id == "string" ? t.id : void 0;
109
- return n === void 0 ? null : (e) => (Array.isArray(e) ? e : []).filter((e) => e.id !== n);
111
+ let n = te(e, t);
112
+ return n === null ? null : (e) => (Array.isArray(e) ? e : []).filter((e) => !n.has(e.id));
110
113
  }
111
114
  }
112
- }, re = 5e3, ie = class {
115
+ }, ie = 5e3, ae = class {
113
116
  entries = /* @__PURE__ */ new Map();
114
117
  inactiveTtlMs;
115
118
  onChangeHook;
116
119
  errorBus;
117
120
  constructor(e = {}) {
118
- this.inactiveTtlMs = e.inactiveTtlMs ?? re, this.onChangeHook = e.onChange, this.errorBus = e.errorBus;
121
+ this.inactiveTtlMs = e.inactiveTtlMs ?? ie, this.onChangeHook = e.onChange, this.errorBus = e.errorBus;
119
122
  }
120
123
  subscribe(e, t, n, r, i = {}) {
121
124
  let a = C(e), o = typeof e[0] == "string" ? e[0] : void 0, s = this.entries.get(a);
@@ -175,7 +178,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
175
178
  if (!n) continue;
176
179
  }
177
180
  if (e.computed && i.op === "insert" && i.path === void 0) continue;
178
- let a = ne(i, t, r);
181
+ let a = re(i, t, r);
179
182
  if (a === null) continue;
180
183
  let o = {
181
184
  id: `${r}-${e.key}`,
@@ -317,14 +320,14 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
317
320
  t && t.subscribers.size === 0 && (t.fiber && d.runFork(p.interrupt(t.fiber)), this.entries.delete(e));
318
321
  }, this.inactiveTtlMs)));
319
322
  }
320
- }, ae = class extends ie {
323
+ }, oe = class extends ae {
321
324
  subscribe(e, t, n, r, i = {}) {
322
325
  return {
323
326
  getSnapshot: () => this.peek(e),
324
327
  unsubscribe: () => {}
325
328
  };
326
329
  }
327
- }, oe = class {
330
+ }, se = class {
328
331
  #e = /* @__PURE__ */ new Set();
329
332
  on(e) {
330
333
  return this.#e.add(e), () => {
@@ -336,34 +339,34 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
336
339
  t(e);
337
340
  } catch {}
338
341
  }
339
- }, se = (e) => {
342
+ }, ce = (e) => {
340
343
  if (typeof e != "object" || !e) return;
341
344
  let t = e._tag;
342
345
  return typeof t == "string" ? t : void 0;
343
- }, k = e(null), ce = () => {
346
+ }, le = e(null), ue = () => {
344
347
  throw Error("Voltro: rpc / cache calls are not invokable on a not-yet-resolved api — either during SSR, or in the client boot window before the api client resolves");
345
- }, A = new Proxy(() => ce(), {
346
- get: (e, t) => A,
348
+ }, k = new Proxy(() => ue(), {
349
+ get: (e, t) => k,
347
350
  has: () => !0,
348
- apply: () => ce()
349
- }), le = {
351
+ apply: () => ue()
352
+ }), de = {
350
353
  runtime: { runPromise: () => Promise.reject(/* @__PURE__ */ Error("Voltro: mutations are not invokable during SSR")) },
351
- cache: new ae(),
352
- client: A,
354
+ cache: new oe(),
355
+ client: k,
353
356
  descriptors: {},
354
357
  inspectBaseUrl: "",
355
- errorBus: new oe()
356
- }, ue = {
357
- get: () => le,
358
+ errorBus: new se()
359
+ }, fe = {
360
+ get: () => de,
358
361
  names: []
359
- }, j = !1, M = !1, N = null, de = () => {
360
- j = !1, M = !1, N !== null && (clearTimeout(N), N = null);
361
- }, fe = () => {
362
- let e = r(k);
363
- return e ? (M || (M = !0, N !== null && (clearTimeout(N), N = null)), e) : (typeof window < "u" && !j && !M && N === null && process.env.NODE_ENV !== "production" && (N = setTimeout(() => {
364
- N = null, !(j || M) && (j = !0, console.warn("useFrameworkRuntimes: no <FrameworkRuntimesProvider> in the tree — returning a loading baseline (subscriptions read `undefined`, mutations are no-ops). If this is not an intentional lazy/conditional mount, mount your app via @voltro/web mount() or wrap the subtree in <VoltroRuntimeProvider>."));
365
- }, 0)), ue);
366
- }, P = (e) => fe().get(e), pe = ({ apis: e, children: t }) => {
362
+ }, A = !1, j = !1, M = null, pe = () => {
363
+ A = !1, j = !1, M !== null && (clearTimeout(M), M = null);
364
+ }, me = () => {
365
+ let e = r(le);
366
+ return e ? (j || (j = !0, M !== null && (clearTimeout(M), M = null)), e) : (typeof window < "u" && !A && !j && M === null && process.env.NODE_ENV !== "production" && (M = setTimeout(() => {
367
+ M = null, !(A || j) && (A = !0, console.warn("useFrameworkRuntimes: no <FrameworkRuntimesProvider> in the tree — returning a loading baseline (subscriptions read `undefined`, mutations are no-ops). If this is not an intentional lazy/conditional mount, mount your app via @voltro/web mount() or wrap the subtree in <VoltroRuntimeProvider>."));
368
+ }, 0)), fe);
369
+ }, N = (e) => me().get(e), he = ({ apis: e, children: t }) => {
367
370
  let n = a(() => ({
368
371
  get: (t) => {
369
372
  let n = e.get(t);
@@ -375,11 +378,11 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
375
378
  },
376
379
  names: Array.from(e.keys())
377
380
  }), [e]);
378
- return /* @__PURE__ */ v(k.Provider, {
381
+ return /* @__PURE__ */ v(le.Provider, {
379
382
  value: n,
380
383
  children: t
381
384
  });
382
- }, F = (e, t) => {
385
+ }, P = (e, t) => {
383
386
  let n = t.split("."), r = e;
384
387
  for (let e = 0; e < n.length; e++) {
385
388
  let i = n[e];
@@ -398,54 +401,56 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
398
401
  }
399
402
  if (typeof r != "function") throw Error(`@voltro/client: rpc tag ${JSON.stringify(t)} did not resolve to a callable method.`);
400
403
  return r;
401
- }, me = Object.freeze({
404
+ }, ge = Object.freeze({
402
405
  data: void 0,
403
406
  revision: -1,
404
407
  emittedAt: void 0,
405
408
  error: void 0,
406
409
  pendingPatches: 0
407
- }), he = () => me, I = (e, t, r = {}, i = {}) => {
408
- let s = i.skip === !0, { runtime: l, cache: u, client: d, descriptors: f } = P(e), p = f[t]?.source, m = o(r);
410
+ }), _e = () => ge, F = (e, t, r = {}, i = {}) => {
411
+ let s = i.skip === !0, { runtime: l, cache: u, client: d, descriptors: f } = N(e), p = f[t]?.source, m = o(r);
409
412
  m.current = r;
410
413
  let h = o(d);
411
414
  h.current = d;
412
- let g = o(() => F(h.current, t)(m.current)), _ = a(() => [t, m.current], [t, a(() => JSON.stringify(Object.entries(r).sort(([e], [t]) => e.localeCompare(t))), [r])]), v = c(n((e) => s ? () => {} : u.subscribe(_, g.current, l, e, p === void 0 ? {} : { source: p }).unsubscribe, [
415
+ let g = o(() => P(h.current, t)(m.current)), _ = a(() => [t, m.current], [t, a(() => JSON.stringify(Object.entries(r).sort(([e], [t]) => e.localeCompare(t))), [r])]), v = c(n((e) => s ? () => {} : u.subscribe(_, g.current, l, e, p === void 0 ? {} : { source: p }).unsubscribe, [
413
416
  u,
414
417
  l,
415
418
  p,
416
419
  s,
417
420
  _
418
- ]), n(() => s ? me : u.peek(_), [
421
+ ]), n(() => s ? ge : u.peek(_), [
419
422
  u,
420
423
  s,
421
424
  _
422
- ]), he);
425
+ ]), _e), y = v.revision < 0, b = v.data === void 0 && i?.fallback !== void 0 ? i.fallback : v.data, x = !y && (Array.isArray(v.data) ? v.data.length === 0 : v.data === null || v.data === void 0);
423
426
  return {
424
- data: v.data,
427
+ data: b,
425
428
  revision: v.revision,
426
429
  emittedAt: v.emittedAt,
427
430
  error: v.error,
428
- pendingPatches: v.pendingPatches
431
+ pendingPatches: v.pendingPatches,
432
+ loading: y,
433
+ isEmpty: x
429
434
  };
430
- }, ge = 100, L = [], R = /* @__PURE__ */ new Set(), _e = [], ve = () => {
431
- _e = L.slice();
432
- }, z = () => {
433
- ve();
434
- for (let e of R) try {
435
+ }, ve = 100, I = [], L = /* @__PURE__ */ new Set(), ye = [], be = () => {
436
+ ye = I.slice();
437
+ }, R = () => {
438
+ be();
439
+ for (let e of L) try {
435
440
  e();
436
441
  } catch {}
437
- }, B = (e) => {
442
+ }, z = (e) => {
438
443
  let t = {
439
444
  ...e,
440
445
  status: "pending",
441
446
  startedAt: Date.now()
442
447
  };
443
- L.unshift(t), L.length > ge && (L.length = ge), z();
444
- }, V = (e, t) => {
445
- let n = L.findIndex((t) => t.id === e);
448
+ I.unshift(t), I.length > ve && (I.length = ve), R();
449
+ }, B = (e, t) => {
450
+ let n = I.findIndex((t) => t.id === e);
446
451
  if (n === -1) return;
447
- let r = L[n], i = Date.now();
448
- L[n] = t.status === "success" ? {
452
+ let r = I[n], i = Date.now();
453
+ I[n] = t.status === "success" ? {
449
454
  ...r,
450
455
  status: "success",
451
456
  output: t.output,
@@ -457,12 +462,12 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
457
462
  error: t.error,
458
463
  settledAt: i,
459
464
  durationMs: i - r.startedAt
460
- }, z();
461
- }, ye = () => _e, be = (e) => (R.add(e), () => {
462
- R.delete(e);
463
- }), xe = () => {
464
- L.length !== 0 && (L.length = 0, z());
465
- }, Se = (e, t) => {
465
+ }, R();
466
+ }, xe = () => ye, Se = (e) => (L.add(e), () => {
467
+ L.delete(e);
468
+ }), Ce = () => {
469
+ I.length !== 0 && (I.length = 0, R());
470
+ }, we = (e, t) => {
466
471
  if (t === void 0 || typeof e != "object" || !e) return e;
467
472
  try {
468
473
  Object.defineProperty(e, "__voltroTraceId", {
@@ -472,40 +477,48 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
472
477
  });
473
478
  } catch {}
474
479
  return e;
475
- }, Ce = 0, we = () => `mut_${++Ce}`, Te = (e, t) => ({
480
+ }, V, Te = (e) => {
481
+ V = e;
482
+ }, Ee = () => V, De = (e, t, n) => typeof e == "function" ? e(t, n) : e, Oe = 0, ke = () => `mut_${++Oe}`, Ae = (e, t) => ({
476
483
  update: (n, r) => {
477
484
  e.update(n, r, t);
478
485
  },
479
486
  forTag: (n, r) => e.forTag(n, r, t)
480
487
  }), H = (e, t) => {
481
- let { runtime: r, cache: i, client: c, descriptors: l, errorBus: u } = P(e), f = l[t], p = f?.targets;
488
+ let { runtime: r, cache: i, client: c, descriptors: l, errorBus: u } = N(e), f = l[t], p = f?.targets;
482
489
  if (process.env.NODE_ENV !== "production") {
483
490
  let n = f?.kind;
484
491
  n !== void 0 && n !== "mutation" && console.error(`[@voltro/client] useMutation('${e}', '${t}') targets a ${n}, not a mutation. Use ${n === "action" ? "useAction" : n === "workflow" ? "useWorkflow" : `the ${n} hook`} instead.`);
485
492
  }
486
- let [m, h] = s(!1), [g, _] = s(void 0), [v, y] = s(void 0), b = o(null), S = o(!1), C = n(async (n) => {
493
+ let [m, h] = s(!1), [g, _] = s(void 0), [v, y] = s(void 0), b = o(null), S = o(!1), C = n(async (n, a) => {
494
+ let o = a?.onError !== void 0 || a?.notify?.error !== void 0, s = (e) => {
495
+ a?.onError?.(e, n);
496
+ let t = De(a?.notify?.error, e, n);
497
+ t !== void 0 && V?.error(t);
498
+ };
487
499
  h(!0), _(void 0);
488
- let a = we();
489
- B({
490
- id: a,
500
+ let l = ke();
501
+ z({
502
+ id: l,
491
503
  apiName: e,
492
504
  tag: t,
493
505
  input: n
494
506
  });
495
- let o = b.current, s = S.current;
496
- if (o) try {
497
- o(Te(i, a), n);
507
+ let f = b.current, m = S.current;
508
+ if (f) try {
509
+ f(Ae(i, l), n);
498
510
  } catch (e) {
499
- throw _(e), h(!1), i.revertByMutation(a), V(a, {
511
+ if (_(e), h(!1), i.revertByMutation(l), B(l, {
500
512
  status: "error",
501
513
  error: e
502
- }), e;
514
+ }), o) return s(e);
515
+ throw e;
503
516
  }
504
- else !s && p && p.length > 0 && i.autoApply(p, n, a);
505
- let l;
517
+ else !m && p && p.length > 0 && i.autoApply(p, n, l);
518
+ let g;
506
519
  try {
507
- let o = F(c, t), s = d.currentSpan.pipe(d.tap((e) => d.sync(() => {
508
- l = e.traceId, x({
520
+ let o = P(c, t), s = d.currentSpan.pipe(d.tap((e) => d.sync(() => {
521
+ g = e.traceId, x({
509
522
  traceId: e.traceId,
510
523
  spanId: e.spanId,
511
524
  source: "mutation",
@@ -513,24 +526,27 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
513
526
  });
514
527
  })), d.catchAll(() => d.void), d.zipRight(o(n))).pipe(d.withSpan(`client.mutation.${t}`, { attributes: {
515
528
  "voltro.api": e,
516
- "voltro.mutationId": a,
529
+ "voltro.mutationId": l,
517
530
  "rpc.tag": t
518
531
  } })), u = await r.runPromise(s);
519
- return y(u), V(a, {
532
+ y(u), B(l, {
520
533
  status: "success",
521
534
  output: u
522
- }), i.confirmByMutation(a), u;
535
+ }), i.confirmByMutation(l), a?.onSuccess?.(u, n);
536
+ let f = De(a?.notify?.success, u, n);
537
+ return f !== void 0 && V?.success(f), u;
523
538
  } catch (e) {
524
- let n = Se(e, l);
525
- throw _(n), V(a, {
539
+ let n = we(e, g);
540
+ if (_(n), B(l, {
526
541
  status: "error",
527
542
  error: n
528
- }), i.revertByMutation(a), u.emit({
543
+ }), i.revertByMutation(l), u.emit({
529
544
  source: "mutation",
530
545
  tag: t,
531
546
  error: n,
532
- ...l === void 0 ? {} : { traceId: l }
533
- }), n;
547
+ ...g === void 0 ? {} : { traceId: g }
548
+ }), o) return s(n);
549
+ throw n;
534
550
  } finally {
535
551
  h(!1);
536
552
  }
@@ -558,7 +574,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
558
574
  g,
559
575
  v
560
576
  ]);
561
- }, Ee = (e, t) => {
577
+ }, je = (e, t) => {
562
578
  if (t === void 0 || typeof e != "object" || !e) return e;
563
579
  try {
564
580
  Object.defineProperty(e, "__voltroTraceId", {
@@ -568,16 +584,16 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
568
584
  });
569
585
  } catch {}
570
586
  return e;
571
- }, De = 0, Oe = () => `act_${++De}`, U = (e, t) => {
572
- let { runtime: r, client: i, descriptors: o, errorBus: c } = P(e);
587
+ }, Me = 0, Ne = () => `act_${++Me}`, U = (e, t) => {
588
+ let { runtime: r, client: i, descriptors: o, errorBus: c } = N(e);
573
589
  if (process.env.NODE_ENV !== "production") {
574
590
  let n = o[t]?.kind;
575
591
  n !== void 0 && n !== "action" && console.error(`[@voltro/client] useAction('${e}', '${t}') targets a ${n}, not an action. Use ${n === "mutation" ? "useMutation" : n === "workflow" ? "useWorkflow" : `the ${n} hook`} instead.`);
576
592
  }
577
593
  let [l, u] = s(!1), [f, p] = s(void 0), [m, h] = s(void 0), g = n(async (n) => {
578
594
  u(!0), p(void 0);
579
- let a = Oe();
580
- B({
595
+ let a = Ne();
596
+ z({
581
597
  id: a,
582
598
  apiName: e,
583
599
  tag: t,
@@ -585,7 +601,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
585
601
  });
586
602
  let o;
587
603
  try {
588
- let s = F(i, t), c = d.currentSpan.pipe(d.tap((e) => d.sync(() => {
604
+ let s = P(i, t), c = d.currentSpan.pipe(d.tap((e) => d.sync(() => {
589
605
  o = e.traceId, x({
590
606
  traceId: e.traceId,
591
607
  spanId: e.spanId,
@@ -597,13 +613,13 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
597
613
  "voltro.actionId": a,
598
614
  "rpc.tag": t
599
615
  } })), l = await r.runPromise(c);
600
- return h(l), V(a, {
616
+ return h(l), B(a, {
601
617
  status: "success",
602
618
  output: l
603
619
  }), l;
604
620
  } catch (e) {
605
- let n = Ee(e, o);
606
- throw p(n), V(a, {
621
+ let n = je(e, o);
622
+ throw p(n), B(a, {
607
623
  status: "error",
608
624
  error: n
609
625
  }), c.emit({
@@ -633,7 +649,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
633
649
  f,
634
650
  m
635
651
  ]);
636
- }, W = "storage.mintUploadTicket", ke = "storage.mintPresignedUpload", Ae = "storage.finalizeUpload", je = "storage.beginResumableUpload", Me = "storage.beginMultipartUpload", Ne = "storage.signMultipartPart", Pe = "storage.completeMultipartUpload", Fe = "storage.abortMultipartUpload", Ie = (e, t, n, r) => new Promise((i, a) => {
652
+ }, W = "storage.mintUploadTicket", Pe = "storage.mintPresignedUpload", Fe = "storage.finalizeUpload", Ie = "storage.beginResumableUpload", Le = "storage.beginMultipartUpload", Re = "storage.signMultipartPart", ze = "storage.completeMultipartUpload", Be = "storage.abortMultipartUpload", Ve = (e, t, n, r) => new Promise((i, a) => {
637
653
  let o = new XMLHttpRequest();
638
654
  if (o.open("PUT", e), o.upload.onprogress = (e) => {
639
655
  e.lengthComputable && n(e.loaded / e.total);
@@ -647,7 +663,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
647
663
  return;
648
664
  }
649
665
  r.addEventListener("abort", () => o.abort(), { once: !0 }), o.send(t);
650
- }), Le = (e, t, n, r, i, a) => new Promise((o, s) => {
666
+ }), He = (e, t, n, r, i, a) => new Promise((o, s) => {
651
667
  let c = new XMLHttpRequest();
652
668
  if (c.open("POST", e), c.setRequestHeader("content-type", t), c.upload.onprogress = (e) => {
653
669
  e.lengthComputable && r(e.loaded / e.total);
@@ -665,7 +681,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
665
681
  return;
666
682
  }
667
683
  i.addEventListener("abort", () => c.abort(), { once: !0 }), c.send(n);
668
- }), Re = (e, t, n, r, i) => new Promise((a, o) => {
684
+ }), Ue = (e, t, n, r, i) => new Promise((a, o) => {
669
685
  let s = new XMLHttpRequest();
670
686
  if (s.open("PUT", e), s.setRequestHeader("content-type", t), s.upload.onprogress = (e) => {
671
687
  e.lengthComputable && r(e.loaded / e.total);
@@ -676,7 +692,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
676
692
  return;
677
693
  }
678
694
  i.addEventListener("abort", () => s.abort(), { once: !0 }), s.send(n);
679
- }), ze = (e, t, n, r, i) => new Promise((a, o) => {
695
+ }), We = (e, t, n, r, i) => new Promise((a, o) => {
680
696
  let s = new XMLHttpRequest();
681
697
  if (s.open("POST", e), s.setRequestHeader("content-type", t), s.upload.onprogress = (e) => {
682
698
  e.lengthComputable && r(e.loaded / e.total);
@@ -692,8 +708,8 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
692
708
  return;
693
709
  }
694
710
  i.addEventListener("abort", () => s.abort(), { once: !0 }), s.send(n);
695
- }), Be = (e, t = {}) => {
696
- let { runtime: r, client: i, inspectBaseUrl: c, errorBus: l } = P(e), [u, d] = s(0), [f, p] = s("idle"), [m, h] = s(void 0), g = o(null), _ = n(() => {
711
+ }), Ge = (e, t = {}) => {
712
+ let { runtime: r, client: i, inspectBaseUrl: c, errorBus: l } = N(e), [u, d] = s(0), [f, p] = s("idle"), [m, h] = s(void 0), g = o(null), _ = n(() => {
697
713
  d(0), p("idle"), h(void 0);
698
714
  }, []), v = n(() => {
699
715
  g.current?.abort();
@@ -713,16 +729,16 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
713
729
  ...e.width === void 0 ? {} : { width: e.width },
714
730
  ...e.height === void 0 ? {} : { height: e.height }
715
731
  }), g = async () => {
716
- let s = n.mintTag ?? t.mintTag ?? W, l = F(i, s), u = await r.runPromise(l({
732
+ let s = n.mintTag ?? t.mintTag ?? W, l = P(i, s), u = await r.runPromise(l({
717
733
  contentType: c,
718
734
  ...m,
719
735
  ...d ? { key: d } : {}
720
- })), f = await ze(y(u.uploadUrl), c, e, o, a);
736
+ })), f = await We(y(u.uploadUrl), c, e, o, a);
721
737
  return h(f);
722
738
  }, _ = async () => {
723
- let s = n.presignMintTag ?? t.presignMintTag ?? ke, l = n.finalizeTag ?? t.finalizeTag ?? Ae, u;
739
+ let s = n.presignMintTag ?? t.presignMintTag ?? Pe, l = n.finalizeTag ?? t.finalizeTag ?? Fe, u;
724
740
  try {
725
- let e = F(i, s);
741
+ let e = P(i, s);
726
742
  u = await r.runPromise(e({
727
743
  contentType: c,
728
744
  ...m
@@ -730,11 +746,11 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
730
746
  } catch {
731
747
  return null;
732
748
  }
733
- await Re(u.uploadUrl, c, e, o, a);
734
- let d = F(i, l), f = await r.runPromise(d({ finalizeToken: u.finalizeToken }));
749
+ await Ue(u.uploadUrl, c, e, o, a);
750
+ let d = P(i, l), f = await r.runPromise(d({ finalizeToken: u.finalizeToken }));
735
751
  return h(f);
736
752
  }, v = async () => {
737
- let s = n.beginResumableTag ?? t.beginResumableTag ?? je, l = F(i, s), u = e.size, d = n.chunkSize ?? t.chunkSize, f = await r.runPromise(l({
753
+ let s = n.beginResumableTag ?? t.beginResumableTag ?? Ie, l = P(i, s), u = e.size, d = n.chunkSize ?? t.chunkSize, f = await r.runPromise(l({
738
754
  contentType: c,
739
755
  size: u,
740
756
  ...m,
@@ -745,7 +761,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
745
761
  for (;;) {
746
762
  if (a.aborted) throw new DOMException("upload aborted", "AbortError");
747
763
  try {
748
- let e = await Le(`${p}?${`token=${encodeURIComponent(f.resumableToken)}&index=${t}${s ? "&final=1" : ""}`}`, c, i, (e) => o((b + e * l) / u), a, s);
764
+ let e = await He(`${p}?${`token=${encodeURIComponent(f.resumableToken)}&index=${t}${s ? "&final=1" : ""}`}`, c, i, (e) => o((b + e * l) / u), a, s);
749
765
  s && (x = e);
750
766
  break;
751
767
  } catch (e) {
@@ -757,9 +773,9 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
757
773
  if (!x) throw Error("resumable upload produced no final reply");
758
774
  return h(x);
759
775
  }, b = async () => {
760
- let s = n.multipartBeginTag ?? t.multipartBeginTag ?? Me, u = n.multipartSignTag ?? t.multipartSignTag ?? Ne, d = n.multipartCompleteTag ?? t.multipartCompleteTag ?? Pe, f = n.multipartAbortTag ?? t.multipartAbortTag ?? Fe, p = e.size, h = n.chunkSize ?? t.chunkSize, g;
776
+ let s = n.multipartBeginTag ?? t.multipartBeginTag ?? Le, u = n.multipartSignTag ?? t.multipartSignTag ?? Re, d = n.multipartCompleteTag ?? t.multipartCompleteTag ?? ze, f = n.multipartAbortTag ?? t.multipartAbortTag ?? Be, p = e.size, h = n.chunkSize ?? t.chunkSize, g;
761
777
  try {
762
- let e = F(i, s);
778
+ let e = P(i, s);
763
779
  g = await r.runPromise(e({
764
780
  contentType: c,
765
781
  size: p,
@@ -769,7 +785,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
769
785
  } catch {
770
786
  return null;
771
787
  }
772
- let _ = F(i, u), v = F(i, d), b = F(i, f), x = Math.max(1, g.partSize), S = Math.max(1, Math.ceil(p / x)), C = Math.max(0, n.retries ?? t.retries ?? 1), w = [], T = 0;
788
+ let _ = P(i, u), v = P(i, d), b = P(i, f), x = Math.max(1, g.partSize), S = Math.max(1, Math.ceil(p / x)), C = Math.max(0, n.retries ?? t.retries ?? 1), w = [], T = 0;
773
789
  try {
774
790
  for (let t = 0; t < S; t++) {
775
791
  let n = t * x, i = Math.min(p, n + x), s = e.slice(n, i), c = t + 1, l = i - n, u = 0;
@@ -779,7 +795,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
779
795
  let { url: e } = await r.runPromise(_({
780
796
  multipartToken: g.multipartToken,
781
797
  partNumber: c
782
- })), t = await Ie(e, s, (e) => o((T + e * l) / p), a);
798
+ })), t = await Ve(e, s, (e) => o((T + e * l) / p), a);
783
799
  w.push({
784
800
  partNumber: c,
785
801
  etag: t
@@ -925,7 +941,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
925
941
  T
926
942
  ]);
927
943
  }, G = async (e) => {
928
- let t = F(e.client, e.tag), n = d.currentSpan.pipe(d.tap((t) => d.sync(() => {
944
+ let t = P(e.client, e.tag), n = d.currentSpan.pipe(d.tap((t) => d.sync(() => {
929
945
  x({
930
946
  traceId: t.traceId,
931
947
  spanId: t.spanId,
@@ -937,8 +953,8 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
937
953
  "rpc.tag": e.tag
938
954
  } }));
939
955
  return e.runtime.runPromise(n);
940
- }, Ve = (e, t) => {
941
- let { runtime: r, client: i, descriptors: o } = P(e);
956
+ }, Ke = (e, t) => {
957
+ let { runtime: r, client: i, descriptors: o } = N(e);
942
958
  if (process.env.NODE_ENV !== "production") {
943
959
  let n = o[t]?.kind;
944
960
  n !== void 0 && n !== "workflow" && console.error(`[@voltro/client] useWorkflow('${e}', '${t}') targets a ${n}, not a workflow. Use ${n === "mutation" ? "useMutation" : n === "action" ? "useAction" : `the ${n} hook`} instead.`);
@@ -1042,8 +1058,8 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1042
1058
  u,
1043
1059
  f
1044
1060
  ]);
1045
- }, He = (e) => {
1046
- let { runtime: t, client: r } = P(e), [i, o] = s(!1), [c, l] = s(void 0), [u, d] = s(void 0), f = n(async (n, i, a) => {
1061
+ }, qe = (e) => {
1062
+ let { runtime: t, client: r } = N(e), [i, o] = s(!1), [c, l] = s(void 0), [u, d] = s(void 0), f = n(async (n, i, a) => {
1047
1063
  o(!0), l(void 0);
1048
1064
  try {
1049
1065
  let o = await G({
@@ -1080,8 +1096,8 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1080
1096
  c,
1081
1097
  u
1082
1098
  ]);
1083
- }, Ue = (e) => {
1084
- let { runtime: t, client: r } = P(e), [i, o] = s(!1), [c, l] = s(void 0), [u, d] = s(void 0), f = n(async (n, i, a, s) => {
1099
+ }, Je = (e) => {
1100
+ let { runtime: t, client: r } = N(e), [i, o] = s(!1), [c, l] = s(void 0), [u, d] = s(void 0), f = n(async (n, i, a, s) => {
1085
1101
  o(!0), l(void 0);
1086
1102
  try {
1087
1103
  let o = await G({
@@ -1119,38 +1135,38 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1119
1135
  c,
1120
1136
  u
1121
1137
  ]);
1122
- }, We = (e, t) => {
1123
- let n = I(e, "__voltro.workflow.run", t ? { id: t } : {}, { skip: t === void 0 });
1138
+ }, Ye = (e, t) => {
1139
+ let n = F(e, "__voltro.workflow.run", t ? { id: t } : {}, { skip: t === void 0 });
1124
1140
  return {
1125
1141
  ...n,
1126
1142
  run: n.data?.[0]
1127
1143
  };
1128
- }, Ge = (e, t = {}, n = {}) => {
1129
- let r = I(e, "__voltro.workflow.runs", t, n);
1144
+ }, Xe = (e, t = {}, n = {}) => {
1145
+ let r = F(e, "__voltro.workflow.runs", t, n);
1130
1146
  return {
1131
1147
  ...r,
1132
1148
  runs: r.data ?? []
1133
1149
  };
1134
- }, Ke = (e, t) => {
1135
- let n = I(e, "__voltro.workflow.run.steps", t ? { runId: t } : {}, { skip: t === void 0 });
1150
+ }, Ze = (e, t) => {
1151
+ let n = F(e, "__voltro.workflow.run.steps", t ? { runId: t } : {}, { skip: t === void 0 });
1136
1152
  return {
1137
1153
  ...n,
1138
1154
  steps: n.data ?? []
1139
1155
  };
1140
1156
  }, K = (e, t) => {
1141
- let n = I(e, "__voltro.workflow.run.events", t ? { runId: t } : {}, { skip: t === void 0 });
1157
+ let n = F(e, "__voltro.workflow.run.events", t ? { runId: t } : {}, { skip: t === void 0 });
1142
1158
  return {
1143
1159
  ...n,
1144
1160
  events: n.data ?? []
1145
1161
  };
1146
- }, qe = K, Je = (e, t = {}, n = {}) => {
1147
- let r = I(e, "__voltro.workflow.domainEvents", t, n);
1162
+ }, Qe = K, $e = (e, t = {}, n = {}) => {
1163
+ let r = F(e, "__voltro.workflow.domainEvents", t, n);
1148
1164
  return {
1149
1165
  ...r,
1150
1166
  events: r.data ?? []
1151
1167
  };
1152
- }, Ye = (e, t) => {
1153
- let n = I(e, "__voltro.workflow.event.deliveries", t ? { eventId: t } : {}, { skip: t === void 0 });
1168
+ }, et = (e, t) => {
1169
+ let n = F(e, "__voltro.workflow.event.deliveries", t ? { eventId: t } : {}, { skip: t === void 0 });
1154
1170
  return {
1155
1171
  ...n,
1156
1172
  deliveries: n.data ?? []
@@ -1160,18 +1176,18 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1160
1176
  if (!n || typeof n != "object") return;
1161
1177
  let r = n[t];
1162
1178
  return typeof r == "string" ? r : void 0;
1163
- }, Xe = (e) => {
1179
+ }, tt = (e) => {
1164
1180
  let t = e.payload;
1165
1181
  if (!t || typeof t != "object") return;
1166
1182
  let n = t.updateId;
1167
1183
  return typeof n == "string" ? n : void 0;
1168
- }, Ze = (e) => {
1184
+ }, nt = (e) => {
1169
1185
  let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set();
1170
1186
  for (let r of e) if (r.eventType === "signal-received") {
1171
1187
  let e = q(r, "signalName");
1172
1188
  e && t.add(e);
1173
1189
  } else if (r.eventType === "update-completed" || r.eventType === "update-failed") {
1174
- let e = Xe(r);
1190
+ let e = tt(r);
1175
1191
  e && n.add(e);
1176
1192
  }
1177
1193
  for (let r = e.length - 1; r >= 0; --r) {
@@ -1183,14 +1199,14 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1183
1199
  kind: "signal"
1184
1200
  };
1185
1201
  } else if (i.eventType === "update-requested") {
1186
- let e = Xe(i), t = q(i, "updateName");
1202
+ let e = tt(i), t = q(i, "updateName");
1187
1203
  if (t && (!e || !n.has(e))) return {
1188
1204
  name: t,
1189
1205
  kind: "update"
1190
1206
  };
1191
1207
  }
1192
1208
  }
1193
- }, Qe = (e) => e.find((e) => e.status === "running") || (e.length > 0 ? e[e.length - 1] : void 0), $e = (e, t) => {
1209
+ }, rt = (e) => e.find((e) => e.status === "running") || (e.length > 0 ? e[e.length - 1] : void 0), it = (e, t) => {
1194
1210
  if (!e || e.status !== "failed") return;
1195
1211
  let n = t.find((e) => e.status === "failed");
1196
1212
  return {
@@ -1198,8 +1214,8 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1198
1214
  message: e.errorMessage,
1199
1215
  step: n?.stepName
1200
1216
  };
1201
- }, et = (e, t) => {
1202
- let r = We(e, t), i = Ke(e, t), o = K(e, t), s = Ve(e, r.run?.tag ?? ""), c = r.run, l = i.steps, u = o.events, d = n(async () => {
1217
+ }, at = (e, t) => {
1218
+ let r = Ye(e, t), i = Ze(e, t), o = K(e, t), s = Ke(e, r.run?.tag ?? ""), c = r.run, l = i.steps, u = o.events, d = n(async () => {
1203
1219
  if (!c) throw Error("useWorkflowRunState: no run loaded — cannot cancel");
1204
1220
  await s.cancel({
1205
1221
  workflowName: c.tag,
@@ -1223,9 +1239,9 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1223
1239
  status: c?.status,
1224
1240
  steps: l,
1225
1241
  events: u,
1226
- currentStep: Qe(l),
1227
- waitingFor: c?.status === "suspended" ? Ze(u) : void 0,
1228
- error: $e(c, l),
1242
+ currentStep: rt(l),
1243
+ waitingFor: c?.status === "suspended" ? nt(u) : void 0,
1244
+ error: it(c, l),
1229
1245
  traceId: c?.traceId,
1230
1246
  loading: r.data === void 0,
1231
1247
  cancel: d,
@@ -1242,8 +1258,8 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1242
1258
  p,
1243
1259
  m
1244
1260
  ]);
1245
- }, tt = (e, t) => {
1246
- let { runtime: r, client: i } = P(e), [a, c] = s([]), [u, f] = s("idle"), [m, h] = s(void 0), _ = o(null), v = n(() => {
1261
+ }, ot = (e, t) => {
1262
+ let { runtime: r, client: i } = N(e), [a, c] = s([]), [u, f] = s("idle"), [m, h] = s(void 0), _ = o(null), v = n(() => {
1247
1263
  let e = _.current;
1248
1264
  e && (_.current = null, r.runFork(p.interrupt(e)), f((e) => e === "streaming" ? "idle" : e));
1249
1265
  }, [r]);
@@ -1254,7 +1270,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1254
1270
  start: n((e = {}) => {
1255
1271
  let n = _.current;
1256
1272
  n && r.runFork(p.interrupt(n)), c([]), h(void 0), f("streaming");
1257
- let a = F(i, t)(e), o = g.runForEach(a, (e) => d.sync(() => c((t) => [...t, e]))).pipe(d.matchCause({
1273
+ let a = P(i, t)(e), o = g.runForEach(a, (e) => d.sync(() => c((t) => [...t, e]))).pipe(d.matchCause({
1258
1274
  onSuccess: () => {
1259
1275
  f("done");
1260
1276
  },
@@ -1270,7 +1286,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1270
1286
  ]),
1271
1287
  cancel: v
1272
1288
  };
1273
- }, nt = (e, t, n, r) => {
1289
+ }, st = (e, t, n, r) => {
1274
1290
  let i = 0, a = !1, o = (e) => d.sync(() => {
1275
1291
  e.seq <= i || (i = e.seq, n.onEvent(e.event), r.isTerminal(e.event) && (a = !0));
1276
1292
  }), s = (e, t, a) => {
@@ -1293,15 +1309,15 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1293
1309
  }));
1294
1310
  });
1295
1311
  return c(0);
1296
- }, rt = (e) => {
1312
+ }, ct = (e) => {
1297
1313
  let t = e?._tag;
1298
1314
  return t === "done" || t === "error";
1299
- }, it = (e, t, r = {}) => {
1300
- let { runtime: i, client: a } = P(e), [c, l] = s([]), [u, d] = s("idle"), [f, m] = s(0), [h, g] = s(void 0), _ = o(null), v = {
1315
+ }, lt = (e, t, r = {}) => {
1316
+ let { runtime: i, client: a } = N(e), [c, l] = s([]), [u, d] = s("idle"), [f, m] = s(0), [h, g] = s(void 0), _ = o(null), v = {
1301
1317
  maxReconnects: r.maxReconnects ?? 6,
1302
1318
  backoffMs: r.backoffMs ?? 400,
1303
1319
  maxBackoffMs: r.maxBackoffMs ?? 8e3,
1304
- isTerminal: r.isTerminal ?? rt
1320
+ isTerminal: r.isTerminal ?? ct
1305
1321
  }, y = n(() => {
1306
1322
  let e = _.current;
1307
1323
  e && (_.current = null, i.runFork(p.interrupt(e)), d((e) => e === "streaming" || e === "reconnecting" ? "idle" : e));
@@ -1314,13 +1330,13 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1314
1330
  start: n((e = {}) => {
1315
1331
  let n = _.current;
1316
1332
  n && i.runFork(p.interrupt(n)), l([]), g(void 0), m(0), d("streaming");
1317
- let r = F(a, t), o = {
1333
+ let r = P(a, t), o = {
1318
1334
  onEvent: (e) => l((t) => [...t, e]),
1319
1335
  onStatus: d,
1320
1336
  onReconnect: () => m((e) => e + 1),
1321
1337
  onError: g
1322
1338
  };
1323
- _.current = i.runFork(nt(r, e, o, v));
1339
+ _.current = i.runFork(st(r, e, o, v));
1324
1340
  }, [
1325
1341
  i,
1326
1342
  a,
@@ -1332,13 +1348,13 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1332
1348
  ]),
1333
1349
  cancel: y
1334
1350
  };
1335
- }, at = (e, t) => e.order - t.order || (e.stepOrder ?? 0) - (t.stepOrder ?? 0), ot = (e) => {
1351
+ }, ut = (e, t) => e.order - t.order || (e.stepOrder ?? 0) - (t.stepOrder ?? 0), dt = (e) => {
1336
1352
  for (let t = e.length - 1; t >= 0; --t) {
1337
1353
  let n = e[t];
1338
1354
  if (n.role === "user" && n.content) return n.content;
1339
1355
  }
1340
- }, st = (e, t, r) => {
1341
- let { threadId: i } = r, o = I(e, `${t}.messages`, { threadId: i }), s = U(e, `${t}.send`), c = a(() => [...o.data ?? []].sort(at), [o.data]), l = n((e, t = {}) => s.run({
1356
+ }, ft = (e, t, r) => {
1357
+ let { threadId: i } = r, o = F(e, `${t}.messages`, { threadId: i }), s = U(e, `${t}.send`), c = a(() => [...o.data ?? []].sort(ut), [o.data]), l = n((e, t = {}) => s.run({
1342
1358
  threadId: i,
1343
1359
  order: o.data?.length ?? 0,
1344
1360
  prompt: e,
@@ -1348,7 +1364,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1348
1364
  i,
1349
1365
  o.data
1350
1366
  ]), u = n(() => {
1351
- let e = ot(c);
1367
+ let e = dt(c);
1352
1368
  return e === void 0 ? void 0 : l(e);
1353
1369
  }, [c, l]);
1354
1370
  return a(() => ({
@@ -1368,8 +1384,8 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1368
1384
  l,
1369
1385
  u
1370
1386
  ]);
1371
- }, ct = (e, t) => {
1372
- let { events: r, status: c, error: l, start: u, cancel: d } = tt(e, t), [f, p] = s([]), m = o(null), h = a(() => r.filter((e) => e._tag === "token").map((e) => e.text ?? "").join(""), [r]);
1387
+ }, pt = (e, t) => {
1388
+ let { events: r, status: c, error: l, start: u, cancel: d } = ot(e, t), [f, p] = s([]), m = o(null), h = a(() => r.filter((e) => e._tag === "token").map((e) => e.text ?? "").join(""), [r]);
1373
1389
  return i(() => {
1374
1390
  if (c !== "done" || m.current === null) return;
1375
1391
  let e = m.current;
@@ -1395,7 +1411,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1395
1411
  }, [u]),
1396
1412
  cancel: d
1397
1413
  };
1398
- }, lt = (e, t) => {
1414
+ }, mt = (e, t) => {
1399
1415
  let r = U(e, t), [i, o] = s(void 0), c = n(async (e) => {
1400
1416
  let t = await r.run({ question: e });
1401
1417
  return o(t), t;
@@ -1413,43 +1429,43 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1413
1429
  r.error,
1414
1430
  l
1415
1431
  ]);
1416
- }, ut = (e) => {
1417
- let { cache: t, runtime: r } = P(e);
1432
+ }, ht = (e) => {
1433
+ let { cache: t, runtime: r } = N(e);
1418
1434
  return n(() => {
1419
1435
  t.refreshAll(r);
1420
1436
  }, [t, r]);
1421
- }, J = /* @__PURE__ */ new Set(), dt = (e) => {
1437
+ }, J = /* @__PURE__ */ new Set(), gt = (e) => {
1422
1438
  for (let t of J) try {
1423
1439
  t(e);
1424
1440
  } catch {}
1425
- }, ft = (e) => (J.add(e), () => {
1441
+ }, _t = (e) => (J.add(e), () => {
1426
1442
  J.delete(e);
1427
- }), pt = (e, t) => {
1428
- dt({
1443
+ }), vt = (e, t) => {
1444
+ gt({
1429
1445
  error: e,
1430
1446
  source: "manual",
1431
1447
  ...t ? { context: t } : {}
1432
1448
  });
1433
- }, mt = (e, t) => {
1434
- let { errorBus: n } = P(e);
1449
+ }, yt = (e, t) => {
1450
+ let { errorBus: n } = N(e);
1435
1451
  i(() => n.on(t), [n, t]);
1436
- }, ht = "#/$defs/", gt = (e) => e.replace(/[_-]+/g, " ").replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/\s+/g, " ").trim().replace(/^./, (e) => e.toUpperCase()), Y = (e, t) => {
1452
+ }, bt = "#/$defs/", xt = (e) => e.replace(/[_-]+/g, " ").replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/\s+/g, " ").trim().replace(/^./, (e) => e.toUpperCase()), Y = (e, t) => {
1437
1453
  let n = e;
1438
1454
  for (let e = 0; e < 8; e += 1) {
1439
1455
  let e = n.$ref;
1440
- if (typeof e != "string" || !e.startsWith(ht)) return n;
1456
+ if (typeof e != "string" || !e.startsWith(bt)) return n;
1441
1457
  let r = t[e.slice(8)];
1442
1458
  if (!r || typeof r != "object") return n;
1443
1459
  n = r;
1444
1460
  }
1445
1461
  return n;
1446
- }, _t = (e) => {
1462
+ }, St = (e) => {
1447
1463
  if (!e || typeof e != "object") return !1;
1448
1464
  let t = e;
1449
1465
  if (t.type === "null" || t.const === null) return !0;
1450
1466
  let n = t.enum;
1451
1467
  return Array.isArray(n) && n.length === 1 && n[0] === null;
1452
- }, vt = (e, t) => {
1468
+ }, Ct = (e, t) => {
1453
1469
  let n = e.type;
1454
1470
  if (Array.isArray(n) && n.includes("null")) {
1455
1471
  let t = n.filter((e) => e !== "null");
@@ -1464,7 +1480,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1464
1480
  for (let n of ["anyOf", "oneOf"]) {
1465
1481
  let r = e[n];
1466
1482
  if (!Array.isArray(r)) continue;
1467
- let i = r.filter((e) => !_t(e));
1483
+ let i = r.filter((e) => !St(e));
1468
1484
  if (i.length !== r.length) return i.length === 1 ? {
1469
1485
  node: Y(i[0], t),
1470
1486
  nullable: !0
@@ -1480,14 +1496,14 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1480
1496
  node: e,
1481
1497
  nullable: !1
1482
1498
  };
1483
- }, yt = (e) => e.map((e) => ({
1499
+ }, wt = (e) => e.map((e) => ({
1484
1500
  value: String(e),
1485
- label: gt(String(e))
1486
- })), bt = (e) => {
1501
+ label: xt(String(e))
1502
+ })), Tt = (e) => {
1487
1503
  let t = e.enum;
1488
1504
  if (Array.isArray(t) && t.length > 0) return {
1489
1505
  widget: "select",
1490
- options: yt(t)
1506
+ options: wt(t)
1491
1507
  };
1492
1508
  let n = e.type, r = Array.isArray(n) ? n.find((e) => e !== "null") : n, i = e.format;
1493
1509
  switch (r) {
@@ -1498,37 +1514,37 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1498
1514
  case "array": return { widget: "multi-select" };
1499
1515
  default: return { widget: "custom" };
1500
1516
  }
1501
- }, xt = (e, t, n) => Object.entries(e).map(([e, r]) => {
1502
- let { node: i, nullable: a } = vt(Y(r, n), n), o = Y(i, n), { widget: s, options: c } = bt(o);
1517
+ }, Et = (e, t, n) => Object.entries(e).map(([e, r]) => {
1518
+ let { node: i, nullable: a } = Ct(Y(r, n), n), o = Y(i, n), { widget: s, options: c } = Tt(o);
1503
1519
  return {
1504
1520
  name: e,
1505
- label: gt(e),
1521
+ label: xt(e),
1506
1522
  widget: s,
1507
1523
  required: t.has(e),
1508
1524
  nullable: a,
1509
1525
  ...c ? { options: c } : {},
1510
1526
  jsonSchema: o
1511
1527
  };
1512
- }), St = (e) => {
1528
+ }), Dt = (e) => {
1513
1529
  try {
1514
1530
  return m.make(e);
1515
1531
  } catch {
1516
1532
  return;
1517
1533
  }
1518
1534
  }, X = (e) => {
1519
- let t = St(e);
1535
+ let t = Dt(e);
1520
1536
  if (t === void 0) return [];
1521
1537
  let n = t.$defs ?? {}, r = Y(t, n), i = r.properties;
1522
- return i ? xt(i, new Set(Array.isArray(r.required) ? r.required : []), n) : [];
1538
+ return i ? Et(i, new Set(Array.isArray(r.required) ? r.required : []), n) : [];
1523
1539
  }, Z = (e) => {
1524
- let t = St(e);
1540
+ let t = Dt(e);
1525
1541
  if (t === void 0) return [];
1526
1542
  let n = t.$defs ?? {}, r = Y(t, n);
1527
1543
  if (r.type !== "array") return [];
1528
1544
  let i = r.items;
1529
1545
  if (!i || typeof i != "object") return [];
1530
1546
  let a = Y(i, n), o = a.properties;
1531
- return o ? xt(o, new Set(Array.isArray(a.required) ? a.required : []), n) : [];
1547
+ return o ? Et(o, new Set(Array.isArray(a.required) ? a.required : []), n) : [];
1532
1548
  }, Q = (e, t) => {
1533
1549
  let n = h.decodeUnknownEither(e, { errors: "all" })(t);
1534
1550
  if (n._tag === "Right") return {
@@ -1544,8 +1560,8 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1544
1560
  valid: !1,
1545
1561
  errors: r
1546
1562
  };
1547
- }, Ct = (e, t, r) => {
1548
- let i = P(e), c = H(e, t), l = r.schema ?? i.descriptors[t]?.input;
1563
+ }, Ot = (e, t, r) => {
1564
+ let i = N(e), c = H(e, t), l = r.schema ?? i.descriptors[t]?.input;
1549
1565
  process.env.NODE_ENV !== "production" && l === void 0 && console.error(`[@voltro/client] useFormBinding('${e}', '${t}'): no input schema. Pass options.schema, or mount the descriptor so its input reaches the client. Rendering no fields; submit skips client-side validation.`);
1550
1566
  let u = a(() => l ? X(l) : [], [l]), d = o(r.defaults ?? {}), [f, p] = s(d.current), [m, h] = s({}), g = n((e, t) => {
1551
1567
  p((n) => ({
@@ -1583,13 +1599,13 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1583
1599
  reset: v,
1584
1600
  submit: y
1585
1601
  };
1586
- }, wt = (e, t, n) => e.map((e) => {
1602
+ }, kt = (e, t, n) => e.map((e) => {
1587
1603
  let r = String(e[n] ?? ""), i = e[t];
1588
1604
  return {
1589
1605
  value: r,
1590
1606
  label: i == null ? r : String(i)
1591
1607
  };
1592
- }), Tt = (e, t, r = {}) => {
1608
+ }), At = (e, t, r = {}) => {
1593
1609
  let o = r.debounceMs ?? 200, c = r.labelField ?? "name", l = r.valueField ?? "id", u = r.input ?? ((e) => ({ q: e })), [d, f] = s(r.initialTerm ?? ""), [p, m] = s(d);
1594
1610
  i(() => {
1595
1611
  if (d === p) return;
@@ -1600,7 +1616,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1600
1616
  p,
1601
1617
  o
1602
1618
  ]);
1603
- let h = r.skipUntilTerm === !0 && p.trim() === "", g = I(e, t, a(() => u(p), [u, p]), { skip: h }), _ = a(() => wt(g.data ?? [], c, l), [
1619
+ let h = r.skipUntilTerm === !0 && p.trim() === "", g = F(e, t, a(() => u(p), [u, p]), { skip: h }), _ = a(() => kt(g.data ?? [], c, l), [
1604
1620
  g.data,
1605
1621
  c,
1606
1622
  l
@@ -1611,8 +1627,8 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1611
1627
  term: d,
1612
1628
  search: v
1613
1629
  };
1614
- }, Et = (e, t) => e === t ? 0 : e == null ? 1 : t == null || e < t ? -1 : 1, Dt = (e, t, r = {}) => {
1615
- let i = P(e), [o, c] = s(r.pageSize), l = I(e, t, a(() => o === void 0 ? r.input ?? {} : {
1630
+ }, jt = (e, t) => e === t ? 0 : e == null ? 1 : t == null || e < t ? -1 : 1, Mt = (e, t, r = {}) => {
1631
+ let i = N(e), [o, c] = s(r.pageSize), l = F(e, t, a(() => o === void 0 ? r.input ?? {} : {
1616
1632
  ...r.input,
1617
1633
  limit: o
1618
1634
  }, [r.input, o])), u = i.descriptors[t]?.output, d = n(() => {
@@ -1632,7 +1648,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1632
1648
  let e = l.data ?? [];
1633
1649
  if (p === void 0) return e;
1634
1650
  let t = p.direction === "asc" ? 1 : -1;
1635
- return [...e].sort((e, n) => Et(e[p.column], n[p.column]) * t);
1651
+ return [...e].sort((e, n) => jt(e[p.column], n[p.column]) * t);
1636
1652
  }, [l.data, p]),
1637
1653
  loading: l.data === void 0,
1638
1654
  error: l.error,
@@ -1641,14 +1657,14 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1641
1657
  loadMore: d,
1642
1658
  hasMore: o !== void 0 && (l.data?.length ?? 0) >= o
1643
1659
  };
1644
- }, Ot = (e, t, n, r) => {
1660
+ }, Nt = (e, t, n, r) => {
1645
1661
  let i = e.replace(/\/$/, ""), a = new URLSearchParams({
1646
1662
  table: t,
1647
1663
  id: n
1648
1664
  });
1649
1665
  return r !== void 0 && a.set("column", r), `${i}/_voltro/inspect/provenance?${a.toString()}`;
1650
- }, kt = Ot, At = (e, t, n, r) => {
1651
- let { inspectBaseUrl: a } = P(e), [o, c] = s({
1666
+ }, Pt = Nt, Ft = (e, t, n, r) => {
1667
+ let { inspectBaseUrl: a } = N(e), [o, c] = s({
1652
1668
  data: void 0,
1653
1669
  loading: !0,
1654
1670
  error: void 0
@@ -1660,7 +1676,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1660
1676
  loading: !0,
1661
1677
  error: void 0
1662
1678
  });
1663
- let i = Ot(a ?? "", t, n, r);
1679
+ let i = Nt(a ?? "", t, n, r);
1664
1680
  return fetch(i).then(async (e) => {
1665
1681
  if (!e.ok) throw Error(`provenance fetch failed: HTTP ${e.status}`);
1666
1682
  return await e.json();
@@ -1686,8 +1702,8 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1686
1702
  n,
1687
1703
  r
1688
1704
  ]), o;
1689
- }, jt = (e) => `${e.replace(/\/$/, "")}/_voltro/inspect/manifest`, Mt = (e) => {
1690
- let { inspectBaseUrl: t } = P(e), [n, r] = s({
1705
+ }, It = (e) => `${e.replace(/\/$/, "")}/_voltro/inspect/manifest`, Lt = (e) => {
1706
+ let { inspectBaseUrl: t } = N(e), [n, r] = s({
1691
1707
  manifest: void 0,
1692
1708
  loading: !0,
1693
1709
  error: void 0
@@ -1698,7 +1714,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1698
1714
  manifest: void 0,
1699
1715
  loading: !0,
1700
1716
  error: void 0
1701
- }), fetch(jt(t ?? "")).then(async (e) => {
1717
+ }), fetch(It(t ?? "")).then(async (e) => {
1702
1718
  if (!e.ok) throw Error(`manifest fetch failed: HTTP ${e.status}`);
1703
1719
  return await e.json();
1704
1720
  }).then((t) => {
@@ -1717,8 +1733,8 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1717
1733
  e = !0;
1718
1734
  };
1719
1735
  }, [e, t]), n;
1720
- }, Nt = (e, t) => Array.isArray(e) ? e.includes(t) : e === t, Pt = (e, t, n) => e.targets?.some((e) => e.table === t && e.op === n) ?? !1, Ft = (e) => e.tables.filter((e) => !e.framework).map((t) => {
1721
- let n = e.procedures.find((e) => e.kind === "query" && Nt(e.source, t.name)), r = e.procedures.find((e) => e.kind === "mutation" && Pt(e, t.name, "insert")), i = e.procedures.find((e) => e.kind === "mutation" && Pt(e, t.name, "update")), a = e.procedures.find((e) => e.kind === "mutation" && Pt(e, t.name, "delete"));
1736
+ }, Rt = (e, t) => Array.isArray(e) ? e.includes(t) : e === t, zt = (e, t, n) => e.targets?.some((e) => e.table === t && e.op === n) ?? !1, Bt = (e) => e.tables.filter((e) => !e.framework).map((t) => {
1737
+ let n = e.procedures.find((e) => e.kind === "query" && Rt(e.source, t.name)), r = e.procedures.find((e) => e.kind === "mutation" && zt(e, t.name, "insert")), i = e.procedures.find((e) => e.kind === "mutation" && zt(e, t.name, "update")), a = e.procedures.find((e) => e.kind === "mutation" && zt(e, t.name, "delete"));
1722
1738
  return {
1723
1739
  table: t.name,
1724
1740
  columns: t.columns,
@@ -1731,7 +1747,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1731
1747
  writeScope: `${t.name}:write`,
1732
1748
  deleteScope: `${t.name}:delete`
1733
1749
  };
1734
- }), It = (e) => {
1750
+ }), Vt = (e) => {
1735
1751
  let [t, r] = s([]), [i, o] = s([]), c = n((e) => {
1736
1752
  r((t) => [...t, e]), o([]);
1737
1753
  }, []), l = n(async () => {
@@ -1759,8 +1775,8 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1759
1775
  l,
1760
1776
  u
1761
1777
  ]);
1762
- }, Lt = "__voltro.undo.log", Rt = "__voltro.undo.apply", zt = "__voltro.undo.redo", Bt = (e, t) => {
1763
- let r = t?.limit, { data: i } = I(e, Lt, r === void 0 ? {} : { limit: r }), a = H(e, Rt), o = H(e, zt), s = i ?? [], c = s.find((e) => !e.undone && !e.crossesAction), l = s.find((e) => e.undone), u = n(async (e) => {
1778
+ }, Ht = "__voltro.undo.log", Ut = "__voltro.undo.apply", Wt = "__voltro.undo.redo", Gt = (e, t) => {
1779
+ let r = t?.limit, { data: i } = F(e, Ht, r === void 0 ? {} : { limit: r }), a = H(e, Ut), o = H(e, Wt), s = i ?? [], c = s.find((e) => !e.undone && !e.crossesAction), l = s.find((e) => e.undone), u = n(async (e) => {
1764
1780
  await a.mutate({ invocationId: e });
1765
1781
  }, [a]), d = n(async (e) => {
1766
1782
  await o.mutate({ invocationId: e });
@@ -1779,13 +1795,13 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1779
1795
  undoLast: f,
1780
1796
  redoLast: p
1781
1797
  };
1782
- }, Vt = (e, t) => ({
1798
+ }, Kt = (e, t) => ({
1783
1799
  name: e,
1784
1800
  map: t
1785
- }), $ = (e, t) => e === void 0 ? null : typeof e == "string" ? { event: e } : e(t), Ht = /* @__PURE__ */ new Set(["onMount", "onUnmount"]), Ut = (e, t, n) => {
1801
+ }), $ = (e, t) => e === void 0 ? null : typeof e == "string" ? { event: e } : e(t), qt = /* @__PURE__ */ new Set(["onMount", "onUnmount"]), Jt = (e, t, n) => {
1786
1802
  let r = { ...t };
1787
1803
  for (let [i, a] of Object.entries(e.map)) {
1788
- if (Ht.has(i) || a === void 0) continue;
1804
+ if (qt.has(i) || a === void 0) continue;
1789
1805
  let e = t[i];
1790
1806
  r[i] = (...r) => {
1791
1807
  let i = $(a, t);
@@ -1793,7 +1809,7 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1793
1809
  };
1794
1810
  }
1795
1811
  return r;
1796
- }, Wt = (e, t, n) => {
1812
+ }, Yt = (e, t, n) => {
1797
1813
  let r = o({
1798
1814
  spec: e,
1799
1815
  props: t,
@@ -1809,45 +1825,45 @@ var b = /* @__PURE__ */ new Set(), x = (e) => {
1809
1825
  let e = r.current, t = $(e.spec.map.onUnmount, e.props);
1810
1826
  t !== null && e.sink(t);
1811
1827
  };
1812
- }, []), a(() => Ut(e, t, n), [
1828
+ }, []), a(() => Jt(e, t, n), [
1813
1829
  e,
1814
1830
  t,
1815
1831
  n
1816
1832
  ]);
1817
- }, Gt = (e, t) => {
1818
- let n = P(e).descriptors[t]?.input;
1833
+ }, Xt = (e, t) => {
1834
+ let n = N(e).descriptors[t]?.input;
1819
1835
  return a(() => n === void 0 ? [] : X(n), [n]);
1820
- }, Kt = (e, t) => {
1821
- let n = P(e).descriptors[t]?.output;
1836
+ }, Zt = (e, t) => {
1837
+ let n = N(e).descriptors[t]?.output;
1822
1838
  return a(() => n === void 0 ? [] : Z(n), [n]);
1823
- }, qt = (e, t) => {
1839
+ }, Qt = (e, t) => {
1824
1840
  if (e === t) return !0;
1825
1841
  if (e.length !== t.length) return !1;
1826
1842
  for (let n = 0; n < e.length; n += 1) if (!Object.is(e[n], t[n])) return !1;
1827
1843
  return !0;
1828
- }, Jt = (e) => Object.keys(e).sort().map((t) => e[t]), Yt = (e, t) => {
1829
- let n = o(null), r = Jt(e);
1830
- return (n.current === null || !qt(n.current.key, r)) && (n.current = {
1844
+ }, $t = (e) => Object.keys(e).sort().map((t) => e[t]), en = (e, t) => {
1845
+ let n = o(null), r = $t(e);
1846
+ return (n.current === null || !Qt(n.current.key, r)) && (n.current = {
1831
1847
  key: r,
1832
1848
  value: t(e)
1833
1849
  }), n.current.value;
1834
- }, Xt = "admin:full", Zt = (e, t) => e.includes("admin:full") ? !0 : (typeof t == "string" ? [t] : t).every((t) => e.includes(t)), Qt = e({ scopes: [] });
1835
- function $t(e) {
1836
- return t(Qt.Provider, { value: { scopes: e.scopes } }, e.children);
1850
+ }, tn = "admin:full", nn = (e, t) => e.includes("admin:full") ? !0 : (typeof t == "string" ? [t] : t).every((t) => e.includes(t)), rn = (e, t) => t.length === 0 || e.includes("admin:full") ? !0 : t.some((t) => e.includes(t)), an = e({ scopes: [] });
1851
+ function on(e) {
1852
+ return t(an.Provider, { value: { scopes: e.scopes } }, e.children);
1837
1853
  }
1838
- var en = () => r(Qt), tn = (e) => Zt(en().scopes, e), nn = (e, t, n, r = {}) => {
1839
- let i = I(e, t, { ...n }, r);
1854
+ var sn = () => r(an), cn = (e) => nn(sn().scopes, e), ln = (e) => rn(sn().scopes, e), un = (e, t, n, r = {}) => {
1855
+ let i = F(e, t, { ...n }, r);
1840
1856
  return a(() => ({
1841
1857
  allowed: i.data?.allowed === !0,
1842
1858
  pending: i.data === void 0
1843
1859
  }), [i.data]);
1844
- }, rn = (e, t, n, r = {}) => {
1845
- let i = I(e, t, { ...n }, r);
1860
+ }, dn = (e, t, n, r = {}) => {
1861
+ let i = F(e, t, { ...n }, r);
1846
1862
  return a(() => ({
1847
1863
  allowedIds: new Set(i.data?.allowedIds ?? []),
1848
1864
  pending: i.data === void 0
1849
1865
  }), [i.data]);
1850
- }, an = (e) => {
1866
+ }, fn = (e) => {
1851
1867
  switch (e) {
1852
1868
  case "select":
1853
1869
  case "radio":
@@ -1863,25 +1879,25 @@ var en = () => r(Qt), tn = (e) => Zt(en().scopes, e), nn = (e, t, n, r = {}) =>
1863
1879
  case "switch": return "boolean";
1864
1880
  default: return null;
1865
1881
  }
1866
- }, on = (e) => X(e).map((e) => {
1867
- let t = an(e.widget);
1882
+ }, pn = (e) => X(e).map((e) => {
1883
+ let t = fn(e.widget);
1868
1884
  return t === null ? null : {
1869
1885
  name: e.name,
1870
1886
  label: e.label,
1871
1887
  kind: t,
1872
1888
  ...e.options ? { options: e.options } : {}
1873
1889
  };
1874
- }).filter((e) => e !== null), sn = (e) => {
1890
+ }).filter((e) => e !== null), mn = (e) => {
1875
1891
  let t = {};
1876
1892
  for (let [n, r] of Object.entries(e)) r === void 0 || r === "" || Array.isArray(r) && r.length === 0 || (t[n] = r);
1877
1893
  return t;
1878
- }, cn = (e, t, r = {}) => {
1879
- let i = P(e).descriptors[t]?.input, o = a(() => i === void 0 ? [] : on(i), [i]), [c, l] = s(r.initial ?? {}), u = n((e, t) => {
1880
- l((n) => sn({
1894
+ }, hn = (e, t, r = {}) => {
1895
+ let i = N(e).descriptors[t]?.input, o = a(() => i === void 0 ? [] : pn(i), [i]), [c, l] = s(r.initial ?? {}), u = n((e, t) => {
1896
+ l((n) => mn({
1881
1897
  ...n,
1882
1898
  [e]: t
1883
1899
  }));
1884
- }, []), d = n(() => l({}), []), f = I(e, t, a(() => sn(c), [c]));
1900
+ }, []), d = n(() => l({}), []), f = F(e, t, a(() => mn(c), [c]));
1885
1901
  return {
1886
1902
  filters: o,
1887
1903
  values: c,
@@ -1892,20 +1908,20 @@ var en = () => r(Qt), tn = (e) => Zt(en().scopes, e), nn = (e, t, n, r = {}) =>
1892
1908
  loading: f.data === void 0,
1893
1909
  error: f.error
1894
1910
  };
1895
- }, ln = (e, t, n = {}) => {
1896
- let r = I(e, t, n), i = r.data;
1911
+ }, gn = (e, t, n = {}) => {
1912
+ let r = F(e, t, n), i = r.data;
1897
1913
  return {
1898
1914
  record: Array.isArray(i) ? i[0] : i,
1899
1915
  loading: i === void 0,
1900
1916
  error: r.error
1901
1917
  };
1902
- }, un = (e, t = 300) => {
1918
+ }, _n = (e, t = 300) => {
1903
1919
  let [n, r] = s(e);
1904
1920
  return i(() => {
1905
1921
  let n = setTimeout(() => r(e), t);
1906
1922
  return () => clearTimeout(n);
1907
1923
  }, [e, t]), n;
1908
- }, dn = (e) => {
1924
+ }, vn = (e) => {
1909
1925
  let { value: t, debouncedValue: n, data: r, interpret: i, skipEmpty: a = !0 } = e;
1910
1926
  if (a && t.trim() === "") return {
1911
1927
  status: "idle",
@@ -1923,19 +1939,19 @@ var en = () => r(Qt), tn = (e) => Zt(en().scopes, e), nn = (e, t, n, r = {}) =>
1923
1939
  valid: o.valid,
1924
1940
  message: o.message
1925
1941
  };
1926
- }, fn = (e, t, n, r) => {
1927
- let { input: i, interpret: o, debounceMs: s = 300, skipEmpty: c = !0 } = r, l = un(n, s), u = c && l.trim() === "", d = I(e, t, a(() => i ? i(l) : { value: l }, [i, l]), { skip: u });
1928
- return dn({
1942
+ }, yn = (e, t, n, r) => {
1943
+ let { input: i, interpret: o, debounceMs: s = 300, skipEmpty: c = !0 } = r, l = _n(n, s), u = c && l.trim() === "", d = F(e, t, a(() => i ? i(l) : { value: l }, [i, l]), { skip: u });
1944
+ return vn({
1929
1945
  value: n,
1930
1946
  debouncedValue: l,
1931
1947
  data: u ? null : d.data,
1932
1948
  interpret: o,
1933
1949
  skipEmpty: c
1934
1950
  });
1935
- }, pn = (e, t) => ({
1951
+ }, bn = (e, t) => ({
1936
1952
  name: e,
1937
1953
  payload: t
1938
- }), mn = (e, t) => {
1954
+ }), xn = (e, t) => {
1939
1955
  let n = h.decodeUnknownEither(e.payload, { errors: "all" })(t);
1940
1956
  if (n._tag === "Right") return {
1941
1957
  valid: !0,
@@ -1947,15 +1963,15 @@ var en = () => r(Qt), tn = (e) => Zt(en().scopes, e), nn = (e, t, n, r = {}) =>
1947
1963
  valid: !1,
1948
1964
  errors: r
1949
1965
  };
1950
- }, hn = (e) => {
1966
+ }, Sn = (e) => {
1951
1967
  let t = new Map(e.map((e) => [e.name, e]));
1952
1968
  return {
1953
1969
  names: [...t.keys()].sort(),
1954
1970
  get: (e) => t.get(e),
1955
1971
  events: e
1956
1972
  };
1957
- }, gn = (e, t) => {
1958
- let n = hn(e);
1973
+ }, Cn = (e, t) => {
1974
+ let n = Sn(e);
1959
1975
  return {
1960
1976
  track: (e, r) => {
1961
1977
  let i = n.get(e);
@@ -1964,7 +1980,7 @@ var en = () => r(Qt), tn = (e) => Zt(en().scopes, e), nn = (e, t, n, r = {}) =>
1964
1980
  return;
1965
1981
  }
1966
1982
  if (process.env.NODE_ENV !== "production") {
1967
- let t = mn(i, r);
1983
+ let t = xn(i, r);
1968
1984
  t.valid || console.error(`[@voltro/client] analytics.track('${e}'): payload failed its schema`, t.errors);
1969
1985
  }
1970
1986
  t({
@@ -1975,7 +1991,7 @@ var en = () => r(Qt), tn = (e) => Zt(en().scopes, e), nn = (e, t, n, r = {}) =>
1975
1991
  names: n.names,
1976
1992
  catalog: n
1977
1993
  };
1978
- }, _n = (e, t) => {
1994
+ }, wn = (e, t) => {
1979
1995
  let r = U(e, t);
1980
1996
  return {
1981
1997
  preview: n((e) => r.run(e), [r]),
@@ -1983,34 +1999,34 @@ var en = () => r(Qt), tn = (e) => Zt(en().scopes, e), nn = (e, t, n, r = {}) =>
1983
1999
  pending: r.pending,
1984
2000
  error: r.error
1985
2001
  };
1986
- }, vn = (e, t, n, r) => [...e, {
2002
+ }, Tn = (e, t, n, r) => [...e, {
1987
2003
  id: t,
1988
2004
  tag: n,
1989
2005
  input: r,
1990
2006
  status: "pending",
1991
2007
  attempts: 0
1992
- }], yn = (e, t, n) => e.map((e) => e.id === t ? {
2008
+ }], En = (e, t, n) => e.map((e) => e.id === t ? {
1993
2009
  ...e,
1994
2010
  ...n
1995
- } : e), bn = (e, t) => yn(e, t, { status: "sent" }), xn = (e, t, n) => e.map((e) => e.id === t ? {
2011
+ } : e), Dn = (e, t) => En(e, t, { status: "sent" }), On = (e, t, n) => e.map((e) => e.id === t ? {
1996
2012
  ...e,
1997
2013
  status: "failed",
1998
2014
  error: n,
1999
2015
  attempts: e.attempts + 1
2000
- } : e), Sn = (e, t, n) => yn(e, t, {
2016
+ } : e), kn = (e, t, n) => En(e, t, {
2001
2017
  status: "conflict",
2002
2018
  error: n
2003
- }), Cn = (e) => e.filter((e) => e.status !== "sent"), wn = (e) => {
2019
+ }), An = (e) => e.filter((e) => e.status !== "sent"), jn = (e) => {
2004
2020
  let t = [];
2005
2021
  for (let n of e) {
2006
2022
  if (n.status === "conflict") break;
2007
2023
  (n.status === "pending" || n.status === "failed") && t.push(n);
2008
2024
  }
2009
2025
  return t;
2010
- }, Tn = (e) => {
2026
+ }, Mn = (e) => {
2011
2027
  let t = e;
2012
2028
  return t?.conflict === !0 || t?._tag === "UndoBoundaryError" && t?.boundary === "conflict";
2013
- }, En = (e) => {
2029
+ }, Nn = (e) => {
2014
2030
  let [t, n] = s(e ?? (typeof navigator < "u" ? navigator.onLine : !0));
2015
2031
  return i(() => {
2016
2032
  if (e !== void 0) {
@@ -2023,21 +2039,21 @@ var en = () => r(Qt), tn = (e) => Zt(en().scopes, e), nn = (e, t, n, r = {}) =>
2023
2039
  window.removeEventListener("online", t), window.removeEventListener("offline", r);
2024
2040
  };
2025
2041
  }, [e]), t;
2026
- }, Dn = (e) => {
2027
- let { send: t, isConflict: r = Tn, idFor: a } = e, [c, l] = s([]), u = En(e.online), d = o(c);
2042
+ }, Pn = (e) => {
2043
+ let { send: t, isConflict: r = Mn, idFor: a } = e, [c, l] = s([]), u = Nn(e.online), d = o(c);
2028
2044
  d.current = c;
2029
2045
  let f = o(0), p = n((e, t) => {
2030
2046
  let n = a?.() ?? `obx_${f.current++}_${e}`;
2031
- l((r) => vn(r, n, e, t));
2047
+ l((r) => Tn(r, n, e, t));
2032
2048
  }, [a]), m = n(async () => {
2033
- for (let e of wn(d.current)) try {
2034
- await t(e), l((t) => bn(t, e.id));
2049
+ for (let e of jn(d.current)) try {
2050
+ await t(e), l((t) => Dn(t, e.id));
2035
2051
  } catch (t) {
2036
2052
  if (r(t)) {
2037
- l((n) => Sn(n, e.id, t));
2053
+ l((n) => kn(n, e.id, t));
2038
2054
  break;
2039
2055
  }
2040
- l((n) => xn(n, e.id, t));
2056
+ l((n) => On(n, e.id, t));
2041
2057
  }
2042
2058
  }, [t, r]);
2043
2059
  return i(() => {
@@ -2050,7 +2066,7 @@ var en = () => r(Qt), tn = (e) => Zt(en().scopes, e), nn = (e, t, n, r = {}) =>
2050
2066
  pending: c.filter((e) => e.status === "pending" || e.status === "failed").length,
2051
2067
  conflicts: c.filter((e) => e.status === "conflict")
2052
2068
  };
2053
- }, On = (e) => {
2069
+ }, Fn = (e) => {
2054
2070
  let { scrollTop: t, viewportHeight: n, rowHeight: r, overscan: i = 5, total: a } = e, o = r > 0 ? r : 1, s = Math.max(0, Math.floor(t / o)), c = Math.ceil(n / o), l = Math.max(0, s - i), u = s + c + i, d = a === void 0 ? u : Math.min(u, a);
2055
2071
  return {
2056
2072
  startIndex: l,
@@ -2060,8 +2076,8 @@ var en = () => r(Qt), tn = (e) => Zt(en().scopes, e), nn = (e, t, n, r = {}) =>
2060
2076
  topSpacer: l * r,
2061
2077
  bottomSpacer: a === void 0 ? 0 : Math.max(0, (a - d) * r)
2062
2078
  };
2063
- }, kn = (e, t, r) => {
2064
- let { rowHeight: i, viewportHeight: o, overscan: c, total: l, input: u } = r, [d, f] = s(0), p = a(() => On({
2079
+ }, In = (e, t, r) => {
2080
+ let { rowHeight: i, viewportHeight: o, overscan: c, total: l, input: u } = r, [d, f] = s(0), p = a(() => Fn({
2065
2081
  scrollTop: d,
2066
2082
  viewportHeight: o,
2067
2083
  rowHeight: i,
@@ -2073,7 +2089,7 @@ var en = () => r(Qt), tn = (e) => Zt(en().scopes, e), nn = (e, t, n, r = {}) =>
2073
2089
  i,
2074
2090
  c,
2075
2091
  l
2076
- ]), m = I(e, t, a(() => ({
2092
+ ]), m = F(e, t, a(() => ({
2077
2093
  ...u,
2078
2094
  offset: p.offset,
2079
2095
  limit: p.limit
@@ -2093,6 +2109,33 @@ var en = () => r(Qt), tn = (e) => Zt(en().scopes, e), nn = (e, t, n, r = {}) =>
2093
2109
  loading: m.data === void 0,
2094
2110
  error: m.error
2095
2111
  };
2096
- }, An = "framework-client";
2112
+ }, Ln = () => typeof navigator > "u" || navigator.onLine, Rn = (e) => {
2113
+ let { errorBus: t } = N(e), [r, a] = s(Ln), [c, l] = s(0), [u, d] = s(void 0), f = o(!0);
2114
+ i(() => (f.current = !0, () => {
2115
+ f.current = !1;
2116
+ }), []), i(() => {
2117
+ if (typeof window > "u") return;
2118
+ let e = () => {
2119
+ a(!0), l(0);
2120
+ }, t = () => a(!1);
2121
+ return window.addEventListener("online", e), window.addEventListener("offline", t), () => {
2122
+ window.removeEventListener("online", e), window.removeEventListener("offline", t);
2123
+ };
2124
+ }, []), i(() => {
2125
+ if (t?.on) return t.on(() => {
2126
+ f.current && (l((e) => e + 1), d(Date.now()));
2127
+ });
2128
+ }, [t]);
2129
+ let p = n(() => {
2130
+ l(0);
2131
+ }, []);
2132
+ return {
2133
+ status: r ? c > 0 ? "degraded" : "connected" : "offline",
2134
+ online: r,
2135
+ failureCount: c,
2136
+ lastFailureAt: u,
2137
+ reportSuccess: p
2138
+ };
2139
+ }, zn = "framework-client";
2097
2140
  //#endregion
2098
- export { Xt as ADMIN_SCOPE, An as CLIENT_NAME, k as FrameworkRuntimesContext, pe as FrameworkRuntimesProvider, ae as LoadingSubscriptionCache, $t as PermissionProvider, oe as RpcErrorBus, ie as SubscriptionCache, Rt as UNDO_APPLY_TAG, Lt as UNDO_LOG_TAG, zt as UNDO_REDO_TAG, de as _resetFrameworkRuntimesWarning, Zt as canCall, xe as clearMutations, Cn as clearSent, On as computeWindow, gn as createAnalytics, pn as defineEvent, Vt as defineTracking, Ft as deriveEntityAdmins, vn as enqueueEntry, se as errorTag, hn as eventCatalog, on as filtersFromSchema, ye as getMutations, jt as manifestUrl, Sn as markConflict, xn as markFailed, bn as markSent, kt as provenanceUrl, dt as publishClientError, x as publishClientTrace, wn as replayable, pt as reportClientError, F as resolveByTag, $ as resolveTrackingEvent, nt as resumableConsumeProgram, wt as rowsToOptions, Z as schemaToColumns, X as schemaToFields, V as settleMutation, qt as shallowArrayEqual, Jt as sourceValues, A as ssrClientProxy, le as ssrStubHandle, C as stableKey, B as startMutation, ft as subscribeClientErrors, S as subscribeClientTraces, be as subscribeMutations, U as useAction, ct as useAgent, st as useAgentChat, tt as useAgentStream, fn as useAsyncValidation, tn as useCan, Mt as useCapabilityManifest, lt as useDataCopilot, Dt as useDataTable, un as useDebounced, Yt as useDerived, Ct as useFormBinding, Gt as useFormSkeleton, P as useFrameworkApi, fe as useFrameworkRuntimes, H as useMutation, mt as useOnRpcError, Dn as useOutbox, en as usePermissions, _n as usePreview, At as useProvenance, Tt as useQueryField, cn as useQueryFilters, ln as useRecord, ut as useRefreshSubscriptions, nn as useResourceCan, rn as useResourceCans, it as useResumableAgentStream, I as useSubscription, Kt as useTableSkeleton, Wt as useTracking, It as useUndo, Bt as useUndoLog, Be as useUpload, kn as useWindowedSubscription, Ve as useWorkflow, Je as useWorkflowDomainEvents, Ye as useWorkflowEventDeliveries, qe as useWorkflowEvents, We as useWorkflowRun, K as useWorkflowRunEvents, et as useWorkflowRunState, Ke as useWorkflowRunSteps, Ge as useWorkflowRuns, He as useWorkflowSignal, Ue as useWorkflowUpdate, mn as validateEventPayload, Q as validateFields, dn as validationStatus, Ut as wrapTrackedCallbacks };
2141
+ export { tn as ADMIN_SCOPE, zn as CLIENT_NAME, le as FrameworkRuntimesContext, he as FrameworkRuntimesProvider, oe as LoadingSubscriptionCache, on as PermissionProvider, se as RpcErrorBus, ae as SubscriptionCache, Ut as UNDO_APPLY_TAG, Ht as UNDO_LOG_TAG, Wt as UNDO_REDO_TAG, pe as _resetFrameworkRuntimesWarning, nn as canCall, rn as canCallAny, Ce as clearMutations, An as clearSent, Fn as computeWindow, Cn as createAnalytics, bn as defineEvent, Kt as defineTracking, Bt as deriveEntityAdmins, Tn as enqueueEntry, ce as errorTag, Sn as eventCatalog, pn as filtersFromSchema, Ee as getMutationNotifier, xe as getMutations, It as manifestUrl, kn as markConflict, On as markFailed, Dn as markSent, Pt as provenanceUrl, gt as publishClientError, x as publishClientTrace, jn as replayable, vt as reportClientError, P as resolveByTag, $ as resolveTrackingEvent, st as resumableConsumeProgram, kt as rowsToOptions, Z as schemaToColumns, X as schemaToFields, Te as setMutationNotifier, B as settleMutation, Qt as shallowArrayEqual, $t as sourceValues, k as ssrClientProxy, de as ssrStubHandle, C as stableKey, z as startMutation, _t as subscribeClientErrors, S as subscribeClientTraces, Se as subscribeMutations, U as useAction, pt as useAgent, ft as useAgentChat, ot as useAgentStream, yn as useAsyncValidation, cn as useCan, ln as useCanAny, Lt as useCapabilityManifest, Rn as useConnectionStatus, mt as useDataCopilot, Mt as useDataTable, _n as useDebounced, en as useDerived, Ot as useFormBinding, Xt as useFormSkeleton, N as useFrameworkApi, me as useFrameworkRuntimes, H as useMutation, yt as useOnRpcError, Pn as useOutbox, sn as usePermissions, wn as usePreview, Ft as useProvenance, At as useQueryField, hn as useQueryFilters, gn as useRecord, ht as useRefreshSubscriptions, un as useResourceCan, dn as useResourceCans, lt as useResumableAgentStream, F as useSubscription, Zt as useTableSkeleton, Yt as useTracking, Vt as useUndo, Gt as useUndoLog, Ge as useUpload, In as useWindowedSubscription, Ke as useWorkflow, $e as useWorkflowDomainEvents, et as useWorkflowEventDeliveries, Qe as useWorkflowEvents, Ye as useWorkflowRun, K as useWorkflowRunEvents, at as useWorkflowRunState, Ze as useWorkflowRunSteps, Xe as useWorkflowRuns, qe as useWorkflowSignal, Je as useWorkflowUpdate, xn as validateEventPayload, Q as validateFields, vn as validationStatus, Jt as wrapTrackedCallbacks };