@oomol-lab/open-flow 0.1.0-alpha.2 → 0.1.0-alpha.3

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.
@@ -0,0 +1,252 @@
1
+ //#region ../../node_modules/value-enhancer/dist/index.mjs
2
+ var e = {}, t = (e, t) => e?.set?.(t), n = (e) => e, r = Object.is, i = (e, t) => {
3
+ if (r(e, t)) return !0;
4
+ if (!Array.isArray(e) || !Array.isArray(t)) return !1;
5
+ let n = e.length;
6
+ if (t.length !== n) return !1;
7
+ for (let i = 0; i < n; i++) if (!r(e[i], t[i])) return !1;
8
+ return !0;
9
+ }, a = (e) => e.value, o = (e) => e.map(a), s = (e) => e.$version, c = (e, t) => {
10
+ try {
11
+ e(t);
12
+ } catch (e) {
13
+ console.error(e);
14
+ }
15
+ }, l = (e, t) => (e.set = t, e), u = (e) => !!e?.$valCompute, d = (e) => !!e?.set;
16
+ function f() {
17
+ if (typeof window > "u") return;
18
+ let e = { style: "color:#a225c2" }, t = { style: "color:#268bd2" }, n = { style: "color:#e28c5f" }, r = { style: "color:#eb2f96" }, i = {
19
+ header: (t) => u(t) ? [
20
+ "div",
21
+ e,
22
+ `${d(t) ? "Val" : "ReadonlyVal"}`,
23
+ "<",
24
+ a(t.value),
25
+ ">"
26
+ ] : null,
27
+ hasBody: () => !1
28
+ };
29
+ function a(e) {
30
+ return typeof e == "number" ? [
31
+ "span",
32
+ t,
33
+ e
34
+ ] : typeof e == "string" ? [
35
+ "span",
36
+ n,
37
+ e
38
+ ] : typeof e == "boolean" ? [
39
+ "span",
40
+ r,
41
+ e
42
+ ] : typeof e == "object" && e ? ["object", { object: e }] : [
43
+ "span",
44
+ n,
45
+ String(e)
46
+ ];
47
+ }
48
+ (window.devtoolsFormatters ??= []).push(i);
49
+ }
50
+ function p() {
51
+ f();
52
+ }
53
+ var m = /* @__PURE__ */ Promise.resolve(), h = /* @__PURE__ */ new Set(), g = /* @__PURE__ */ new Set(), _ = h, v, y = () => {
54
+ let e = _;
55
+ _ = _ === h ? g : h, v = !1;
56
+ for (let t of e) t.t();
57
+ e.clear();
58
+ }, b = (e) => {
59
+ _.add(e), v ||= m.then(y);
60
+ }, x = (e) => _.delete(e), S = /* @__PURE__ */ new FinalizationRegistry(c), C = class {
61
+ constructor(e, t, n) {
62
+ if (this.#n = e, this.q = (t?.equal ?? r) || void 0, this.e = t?.eager, this.m = t?.name, this.#t = t?.onDisposeValue, n) {
63
+ let e = new WeakRef(this), t = () => {
64
+ if (r) {
65
+ let e = r;
66
+ r = void 0, e();
67
+ }
68
+ }, r = n(() => {
69
+ let n = e.deref();
70
+ n ? n.n() : t();
71
+ });
72
+ r && S.register(this, this.#e = t);
73
+ }
74
+ }
75
+ g = this;
76
+ b = /* @__PURE__ */ new Map();
77
+ s = 4;
78
+ v;
79
+ c = e;
80
+ q;
81
+ e;
82
+ m;
83
+ u = () => {
84
+ if (this.s & 4) {
85
+ this.s &= -5;
86
+ let t = this.#n();
87
+ this.c === e ? this.w(t) : this.q?.(t, this.c) || (this.w(t), this.s & 1 && (this.s |= 2));
88
+ }
89
+ return this.c;
90
+ };
91
+ n = () => {
92
+ this.#i && (console.error(this.c, /* @__PURE__ */ Error(`${this.m || ""} disposed`)), process.env.NODE_ENV !== "production" && console.error(this.#i)), this.s |= 4, this.b.size && (this.s |= 1, this[3] && this.#r(3), this[2] && (this.u(), this.s & 2 && this.#r(2)), this[1] ? b(this) : this.s &= -4);
93
+ };
94
+ a(e, t) {
95
+ let n = this.b.get(e);
96
+ return n && this[n]--, this.b.set(e, t), this[t]++, () => this.r(e);
97
+ }
98
+ r(e) {
99
+ if (e) {
100
+ let t = this.b.get(e);
101
+ t && (this.b.delete(e), this[t]--);
102
+ } else this.b.clear(), this[1] = this[2] = this[3] = 0, x(this);
103
+ }
104
+ t() {
105
+ this[1] && (this.u(), this.s & 2 && this.#r(1)), this.s &= -4;
106
+ }
107
+ d() {
108
+ let t = this.c;
109
+ this.r(), S.unregister(this), this.#e?.(), this.#i = process.env.NODE_ENV === "production" || /* @__PURE__ */ Error("[val-dev] Val disposed at:"), this.#t && t !== e && this.#t(t);
110
+ }
111
+ w(e) {
112
+ this.w = this.q?.(e, e) ? this.y : this.x, this.w(e);
113
+ }
114
+ x(t) {
115
+ let n = this.c;
116
+ this.c = t, this.v = Symbol(), this.#t && n !== e && n !== t && this.#t(n);
117
+ }
118
+ y(t) {
119
+ let n = this.c;
120
+ this.c = this.v = t, this.#t && n !== e && n !== t && this.#t(n);
121
+ }
122
+ 1 = 0;
123
+ 2 = 0;
124
+ 3 = 0;
125
+ #e;
126
+ #t;
127
+ #n;
128
+ #r(e) {
129
+ for (let [t, n] of this.b) n === e && c(t, this.c);
130
+ }
131
+ #i;
132
+ }, w = class {
133
+ #e = /* @__PURE__ */ new WeakSet();
134
+ constructor(e) {
135
+ this.g = e.g, this.e = e.e, this.u = e.u, this.n = e.n, this.b = e.b;
136
+ }
137
+ get v() {
138
+ return this.g.v;
139
+ }
140
+ g;
141
+ b;
142
+ e;
143
+ u;
144
+ n;
145
+ a(e, t) {
146
+ return this.#e.add(e), this.g.a(e, t);
147
+ }
148
+ r(e) {
149
+ if (e) this.#e.has(e) && (this.#e.delete(e), this.g.r(e));
150
+ else for (let e of this.g.b.keys()) this.r(e);
151
+ }
152
+ d() {
153
+ this.r();
154
+ }
155
+ }, T = class {
156
+ #e;
157
+ constructor(e) {
158
+ this.#e = e, this.get = e.u, e.u();
159
+ }
160
+ get name() {
161
+ return this.#e.m;
162
+ }
163
+ get $version() {
164
+ return this.get(), this.#e.v;
165
+ }
166
+ get value() {
167
+ return this.get();
168
+ }
169
+ set value(e) {
170
+ this.set?.(e);
171
+ }
172
+ set;
173
+ get;
174
+ ref(e) {
175
+ let t = new T(new w(this.#e));
176
+ return e && this.set ? l(t, this.set) : t;
177
+ }
178
+ reaction(e, t = this.#e.e) {
179
+ return this.#e.a(e, t ? 2 : 1);
180
+ }
181
+ subscribe(e, t = this.#e.e) {
182
+ let n = this.reaction(e, t);
183
+ return c(e, this.get()), n;
184
+ }
185
+ $valCompute(e) {
186
+ return this.#e.a(e, 3);
187
+ }
188
+ unsubscribe(e) {
189
+ this.#e.r(e);
190
+ }
191
+ dispose() {
192
+ this.#e.d();
193
+ }
194
+ toString() {
195
+ return String(this.get());
196
+ }
197
+ toJSON(e) {
198
+ let t = this.get();
199
+ return t && t.toJSON ? t.toJSON(e) : t;
200
+ }
201
+ }, E = (e, t) => {
202
+ let n = e, r = new C(() => n, t);
203
+ return [new T(r), (e) => {
204
+ r.q?.(e, n) || (n = e, r.n());
205
+ }];
206
+ }, D = (e, t) => l(...E(e, t)), O = (e, t, n) => new T(new C(e, n, t)), k = (e, t = n, r) => {
207
+ let a, l;
208
+ return O(() => {
209
+ let n = e.map(s);
210
+ return (!l || !i(n, l)) && (l = n, a = t(o(e))), a;
211
+ }, (t) => {
212
+ let n = e.map((e) => e.$valCompute(t));
213
+ return () => n.forEach(c);
214
+ }, r);
215
+ }, A = (t, n) => {
216
+ let i = 0, a = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Map(), s = (t) => {
217
+ if (!u(t)) {
218
+ if (!u(t?.$)) return t;
219
+ t = t.$;
220
+ }
221
+ return a.has(t) ? r(t.$version, a.get(t)) || a.set(t, e) : (o.delete(t) || t.$valCompute(l.n), a.set(t, t.$version)), t.value;
222
+ }, c, l = new C(() => {
223
+ if (!i) {
224
+ if (a.size) x: {
225
+ for (let [e, t] of a) if (!r(e.$version, t)) break x;
226
+ return c;
227
+ }
228
+ let e = a;
229
+ a = o, o = e, i++;
230
+ }
231
+ if (c = t(s), !--i && o.size) {
232
+ for (let e of o.keys()) e.unsubscribe(l.n);
233
+ o.clear();
234
+ }
235
+ return c;
236
+ }, n, () => () => {
237
+ if (a.size) {
238
+ for (let e of a.keys()) e.unsubscribe(l.n);
239
+ a.clear();
240
+ }
241
+ });
242
+ return new T(l);
243
+ }, j = (t, i = n, a) => {
244
+ let o, s = e;
245
+ return O(() => {
246
+ let e = t.$version;
247
+ return r(e, s) || (s = e, o = i(t.value)), o;
248
+ }, (e) => t.$valCompute(e), a);
249
+ };
250
+ process.env.NODE_ENV !== "production" && p();
251
+ //#endregion
252
+ export { j as a, d as c, r as d, D as f, A as i, E as l, l as n, n as o, k as r, u as s, i as t, t as u };
@@ -0,0 +1,312 @@
1
+ import { En as e, F as t, Mt as n, Nt as r, O as i, Yn as a, _r as o, ar as s, er as c, k as l, kr as u, mr as d, nt as f, tr as p, vr as m } from "./createLucideIcon-MmUpJrIU.js";
2
+ import * as h from "react";
3
+ import { useMemo as g } from "react";
4
+ import { jsx as _ } from "react/jsx-runtime";
5
+ //#region ../../node_modules/@base-ui/react/esm/utils/popups/popupStoreUtils.js
6
+ function v(e, t) {
7
+ let n = h.useRef(null), r = h.useRef(null);
8
+ return h.useCallback((i) => {
9
+ if (e !== void 0) {
10
+ if (n.current !== null) {
11
+ let e = n.current, i = r.current, a = t.context.triggerElements.getById(e);
12
+ i && a === i && t.context.triggerElements.delete(e), n.current = null, r.current = null;
13
+ }
14
+ i !== null && (n.current = e, r.current = i, t.context.triggerElements.add(e, i));
15
+ }
16
+ }, [t, e]);
17
+ }
18
+ function y(e, t, n, r) {
19
+ let i = n.useState("isMountedByTrigger", e), a = v(e, n), s = o((t) => {
20
+ if (a(t), !t || !n.select("open")) return;
21
+ let i = n.select("activeTriggerId");
22
+ if (i === e) {
23
+ n.update({
24
+ activeTriggerElement: t,
25
+ ...r
26
+ });
27
+ return;
28
+ }
29
+ i ?? n.update({
30
+ activeTriggerId: e,
31
+ activeTriggerElement: t,
32
+ ...r
33
+ });
34
+ });
35
+ return d(() => {
36
+ i && n.update({
37
+ activeTriggerElement: t.current,
38
+ ...r
39
+ });
40
+ }, [
41
+ i,
42
+ n,
43
+ t,
44
+ ...Object.values(r)
45
+ ]), {
46
+ registerTrigger: s,
47
+ isMountedByThisTrigger: i
48
+ };
49
+ }
50
+ function b(e) {
51
+ let t = e.useState("open");
52
+ d(() => {
53
+ if (t && !e.select("activeTriggerId") && e.context.triggerElements.size === 1) {
54
+ let t = e.context.triggerElements.entries().next();
55
+ if (!t.done) {
56
+ let [n, r] = t.value;
57
+ e.update({
58
+ activeTriggerId: n,
59
+ activeTriggerElement: r
60
+ });
61
+ }
62
+ }
63
+ }, [t, e]);
64
+ }
65
+ function x(e, t, i) {
66
+ let { mounted: a, setMounted: s, transitionStatus: c } = n(e);
67
+ t.useSyncedValues({
68
+ mounted: a,
69
+ transitionStatus: c
70
+ });
71
+ let l = o(() => {
72
+ s(!1), t.update({
73
+ activeTriggerId: null,
74
+ activeTriggerElement: null,
75
+ mounted: !1
76
+ }), i?.(), t.context.onOpenChangeComplete?.(!1);
77
+ }), u = t.useState("preventUnmountingOnClose");
78
+ return r({
79
+ enabled: !u,
80
+ open: e,
81
+ ref: t.context.popupRef,
82
+ onComplete() {
83
+ e || l();
84
+ }
85
+ }), {
86
+ forceUnmount: l,
87
+ transitionStatus: c
88
+ };
89
+ }
90
+ //#endregion
91
+ //#region ../../node_modules/@base-ui/react/esm/floating-ui-react/utils/getEmptyRootContext.js
92
+ function S() {
93
+ return new l({
94
+ open: !1,
95
+ transitionStatus: void 0,
96
+ floatingElement: null,
97
+ referenceElement: null,
98
+ triggerElements: new i(),
99
+ floatingId: "",
100
+ syncOnly: !1,
101
+ nested: !1,
102
+ onOpenChange: void 0
103
+ });
104
+ }
105
+ //#endregion
106
+ //#region ../../node_modules/@base-ui/react/esm/utils/popups/store.js
107
+ function C() {
108
+ return {
109
+ open: !1,
110
+ openProp: void 0,
111
+ mounted: !1,
112
+ transitionStatus: void 0,
113
+ floatingRootContext: S(),
114
+ preventUnmountingOnClose: !1,
115
+ payload: void 0,
116
+ activeTriggerId: null,
117
+ activeTriggerElement: null,
118
+ triggerIdProp: void 0,
119
+ popupElement: null,
120
+ positionerElement: null,
121
+ activeTriggerProps: s,
122
+ inactiveTriggerProps: s,
123
+ popupProps: s
124
+ };
125
+ }
126
+ var w = f((e) => e.triggerIdProp ?? e.activeTriggerId), T = {
127
+ open: f((e) => e.openProp ?? e.open),
128
+ mounted: f((e) => e.mounted),
129
+ transitionStatus: f((e) => e.transitionStatus),
130
+ floatingRootContext: f((e) => e.floatingRootContext),
131
+ preventUnmountingOnClose: f((e) => e.preventUnmountingOnClose),
132
+ payload: f((e) => e.payload),
133
+ activeTriggerId: w,
134
+ activeTriggerElement: f((e) => e.mounted ? e.activeTriggerElement : null),
135
+ isTriggerActive: f((e, t) => t !== void 0 && w(e) === t),
136
+ isOpenedByTrigger: f((e, t) => t !== void 0 && w(e) === t && e.open),
137
+ isMountedByTrigger: f((e, t) => t !== void 0 && w(e) === t && e.mounted),
138
+ triggerProps: f((e, t) => t ? e.activeTriggerProps : e.inactiveTriggerProps),
139
+ popupProps: f((e) => e.popupProps),
140
+ popupElement: f((e) => e.popupElement),
141
+ positionerElement: f((e) => e.positionerElement)
142
+ };
143
+ //#endregion
144
+ //#region ../../node_modules/@base-ui/react/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.js
145
+ function E(e) {
146
+ let { popupStore: n, treatPopupAsFloatingElement: r = !1, onOpenChange: i } = e, o = a(), s = t() != null, c = n.useState("open"), f = n.useState("activeTriggerElement"), p = n.useState(r ? "popupElement" : "positionerElement"), h = n.context.triggerElements, g = m(() => new l({
147
+ open: c,
148
+ transitionStatus: void 0,
149
+ referenceElement: f,
150
+ floatingElement: p,
151
+ triggerElements: h,
152
+ onOpenChange: i,
153
+ floatingId: o,
154
+ syncOnly: !0,
155
+ nested: s
156
+ })).current;
157
+ return d(() => {
158
+ let e = {
159
+ open: c,
160
+ floatingId: o,
161
+ referenceElement: f,
162
+ floatingElement: p
163
+ };
164
+ u(f) && (e.domReferenceElement = f), g.state.positionReference === g.state.referenceElement && (e.positionReference = f), g.update(e);
165
+ }, [
166
+ c,
167
+ o,
168
+ f,
169
+ p,
170
+ g
171
+ ]), g.context.onOpenChange = i, g.context.nested = s, g;
172
+ }
173
+ //#endregion
174
+ //#region ../../node_modules/@base-ui/react/esm/floating-ui-react/hooks/useRole.js
175
+ var D = /* @__PURE__ */ new Map([
176
+ ["select", "listbox"],
177
+ ["combobox", "listbox"],
178
+ ["label", !1]
179
+ ]);
180
+ function O(n, r = {}) {
181
+ let i = "rootStore" in n ? n.rootStore : n, o = i.useState("open"), c = i.useState("floatingId"), l = i.useState("domReferenceElement"), u = i.useState("floatingElement"), { role: d = "dialog" } = r, f = a(), p = l?.id || f, m = h.useMemo(() => e(u)?.id || c, [u, c]), g = D.get(d) ?? d, _ = t() != null, v = h.useMemo(() => g === "tooltip" || d === "label" ? s : {
182
+ "aria-haspopup": g === "alertdialog" ? "dialog" : g,
183
+ "aria-expanded": "false",
184
+ ...g === "listbox" && { role: "combobox" },
185
+ ...g === "menu" && _ && { role: "menuitem" },
186
+ ...d === "select" && { "aria-autocomplete": "none" },
187
+ ...d === "combobox" && { "aria-autocomplete": "list" }
188
+ }, [
189
+ g,
190
+ _,
191
+ d
192
+ ]), y = h.useMemo(() => g === "tooltip" || d === "label" ? { [`aria-${d === "label" ? "labelledby" : "describedby"}`]: o ? m : void 0 } : {
193
+ ...v,
194
+ "aria-expanded": o ? "true" : "false",
195
+ "aria-controls": o ? m : void 0,
196
+ ...g === "menu" && { id: p }
197
+ }, [
198
+ g,
199
+ m,
200
+ o,
201
+ p,
202
+ d,
203
+ v
204
+ ]), b = h.useMemo(() => {
205
+ let e = {
206
+ id: m,
207
+ ...g && { role: g }
208
+ };
209
+ return g === "tooltip" || d === "label" ? e : {
210
+ ...e,
211
+ ...g === "menu" && { "aria-labelledby": p }
212
+ };
213
+ }, [
214
+ g,
215
+ m,
216
+ p,
217
+ d
218
+ ]), x = h.useCallback(({ active: e, selected: t }) => {
219
+ let n = {
220
+ role: "option",
221
+ ...e && { id: `${m}-fui-option` }
222
+ };
223
+ switch (d) {
224
+ case "select":
225
+ case "combobox": return {
226
+ ...n,
227
+ "aria-selected": t
228
+ };
229
+ }
230
+ return {};
231
+ }, [m, d]);
232
+ return h.useMemo(() => ({
233
+ reference: y,
234
+ floating: b,
235
+ item: x,
236
+ trigger: v
237
+ }), [
238
+ y,
239
+ b,
240
+ v,
241
+ x
242
+ ]);
243
+ }
244
+ //#endregion
245
+ //#region src/ui/browser/label.tsx
246
+ function k({ className: e, ...t }) {
247
+ return /* @__PURE__ */ _("label", {
248
+ "data-slot": "label",
249
+ className: c("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", e),
250
+ ...t
251
+ });
252
+ }
253
+ //#endregion
254
+ //#region src/ui/browser/field.tsx
255
+ function A({ className: e, ...t }) {
256
+ return /* @__PURE__ */ _("div", {
257
+ "data-slot": "field-group",
258
+ className: c("group/field-group @container/field-group flex w-full flex-col gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4", e),
259
+ ...t
260
+ });
261
+ }
262
+ var j = p("group/field flex w-full gap-2 data-[invalid=true]:text-destructive", {
263
+ variants: { orientation: {
264
+ vertical: "flex-col *:w-full [&>.sr-only]:w-auto",
265
+ horizontal: "flex-row items-center has-[>[data-slot=field-content]]:items-start *:data-[slot=field-label]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px",
266
+ responsive: "flex-col *:w-full @md/field-group:flex-row @md/field-group:items-center @md/field-group:*:w-auto @md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:*:data-[slot=field-label]:flex-auto [&>.sr-only]:w-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
267
+ } },
268
+ defaultVariants: { orientation: "vertical" }
269
+ });
270
+ function M({ className: e, orientation: t = "vertical", ...n }) {
271
+ return /* @__PURE__ */ _("div", {
272
+ role: "group",
273
+ "data-slot": "field",
274
+ "data-orientation": t,
275
+ className: c(j({ orientation: t }), e),
276
+ ...n
277
+ });
278
+ }
279
+ function N({ className: e, ...t }) {
280
+ return /* @__PURE__ */ _(k, {
281
+ "data-slot": "field-label",
282
+ className: c("group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50 has-data-checked:border-primary/30 has-data-checked:bg-primary/5 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border has-[>[data-slot=field]]:not-has-[:disabled,[data-disabled]]:hover:bg-muted/50 has-[>[data-slot=field]]:has-[:focus-visible]:border-ring has-[>[data-slot=field]]:has-[:focus-visible]:ring-3 has-[>[data-slot=field]]:has-[:focus-visible]:ring-ring/50 *:data-[slot=field]:p-2.5 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10", "has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col", e),
283
+ ...t
284
+ });
285
+ }
286
+ function P({ className: e, ...t }) {
287
+ return /* @__PURE__ */ _("p", {
288
+ "data-slot": "field-description",
289
+ className: c("text-left text-sm leading-normal font-normal text-muted-foreground group-has-data-horizontal/field:text-balance [[data-variant=legend]+&]:-mt-1.5", "last:mt-0 nth-last-2:-mt-1", "[&>a]:underline [&>a]:underline-offset-4 [&>a:hover]:text-primary", e),
290
+ ...t
291
+ });
292
+ }
293
+ function F({ className: e, children: t, errors: n, ...r }) {
294
+ let i = g(() => {
295
+ if (t) return t;
296
+ if (!n?.length) return null;
297
+ let e = [...new Map(n.map((e) => [e?.message, e])).values()];
298
+ return e?.length == 1 ? e[0]?.message : /* @__PURE__ */ _("ul", {
299
+ className: "ml-4 flex list-disc flex-col gap-1",
300
+ children: e.map((e, t) => e?.message && /* @__PURE__ */ _("li", { children: e.message }, t))
301
+ });
302
+ }, [t, n]);
303
+ return i ? /* @__PURE__ */ _("div", {
304
+ role: "alert",
305
+ "data-slot": "field-error",
306
+ className: c("text-sm font-normal text-destructive", e),
307
+ ...r,
308
+ children: i
309
+ }) : null;
310
+ }
311
+ //#endregion
312
+ export { N as a, C as c, x as d, y as f, A as i, T as l, P as n, O as o, v as p, F as r, E as s, M as t, b as u };