@oomol-lab/open-flow 0.1.0-beta.22 → 0.1.0-beta.23

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 (46) hide show
  1. package/dist/browser/{createResourceDialog-CjuJryCv.js → createResourceDialog-PKbMMpEk.js} +29 -29
  2. package/dist/browser/event-sources.d.ts +30 -0
  3. package/dist/browser/{flowChanges-Tg1duLry.js → flowChanges-BUlMz4iC.js} +4236 -3019
  4. package/dist/browser/{flowWorkspace-CoK10XHY.js → flowWorkspace-DLArN17T.js} +49585 -42617
  5. package/dist/browser/{i18n-CVBh0Ni1.js → input-group-C2frNYAx.js} +1801 -75
  6. package/dist/browser/{inputValues-CDiBMKu8.js → inputValues-CcGVt51C.js} +10 -10
  7. package/dist/browser/licenses.md +60 -0
  8. package/dist/browser/lite-Cy6aeiL6.js +8538 -0
  9. package/dist/browser/{markdownContent-BBgH9ZIV.js → markdownContent-SIlWuHve.js} +17 -17
  10. package/dist/browser/theme.css +45 -5
  11. package/dist/browser/ui.css +1 -1
  12. package/dist/browser/ui.d.ts +23 -1
  13. package/dist/browser/ui.js +59 -27
  14. package/dist/browser/workbench-contract.d.ts +19 -0
  15. package/dist/browser/workbench.css +1 -1
  16. package/dist/browser/workbench.d.ts +1 -0
  17. package/dist/browser/workbench.js +1176 -734
  18. package/dist/browser/workbenchSelect-CPRUXKbf.js +6088 -0
  19. package/dist/common/control-api-conformance.js +273 -232
  20. package/dist/common/control-api-errors.d.ts +20 -0
  21. package/dist/common/control-api.d.ts +50 -10
  22. package/dist/common/control-api.js +899 -661
  23. package/dist/common/control-requests.d.ts +23 -0
  24. package/dist/common/control-requests.js +377 -351
  25. package/dist/common/event-sources.d.ts +50 -0
  26. package/dist/common/feishu-events.d.ts +20 -0
  27. package/dist/common/feishu-subscriptions.d.ts +10 -0
  28. package/dist/common/fr-iv1541dF.js +93 -0
  29. package/dist/common/integration-trigger.d.ts +4 -0
  30. package/dist/common/ja-Bq-ZDOD4.js +93 -0
  31. package/dist/common/ko-Z-k9R2c6.js +93 -0
  32. package/dist/common/localization.d.ts +2 -0
  33. package/dist/common/localization.js +37 -1
  34. package/dist/common/mcp.js +615 -382
  35. package/dist/common/poll-trigger.d.ts +2 -0
  36. package/dist/common/provider-triggers.d.ts +4 -0
  37. package/dist/common/provider-triggers.js +3225 -2692
  38. package/dist/common/ru-B4gFecYZ.js +93 -0
  39. package/dist/common/trigger-catalog.d.ts +17 -0
  40. package/dist/common/trigger-config-options.d.ts +13 -0
  41. package/dist/common/trigger-localization.d.ts +7 -0
  42. package/dist/common/zh-CN-ByQ6nYam.js +93 -0
  43. package/dist/common/zh-TW-QjIarvX9.js +93 -0
  44. package/package.json +1 -1
  45. package/dist/browser/useValueChanged-BY05Usw-.js +0 -2944
  46. package/dist/browser/workbenchSelect-DEmv7SLW.js +0 -11666
@@ -1,48 +1,427 @@
1
1
  import { a as e, l as t, r as n } from "./dist-Dz6Nglsd.js";
2
- import { H as r, lt as i } from "./useValueChanged-BY05Usw-.js";
3
- import { i as a, n as o } from "./languages-C0zQ4GSo.js";
4
- import * as s from "react";
5
- //#region ../../node_modules/.bun/@base-ui+react@1.4.1+b87d06724be9db7a/node_modules/@base-ui/react/esm/internals/labelable-provider/useAriaLabelledBy.js
6
- function c(e, t, n, a = !0, o) {
7
- let [c, u] = s.useState(), d = r(o ? `${o}-label` : void 0), f = e ?? t ?? c;
8
- return i(() => {
9
- let r = e || t || !a ? void 0 : l(n.current, d);
10
- c !== r && u(r);
11
- }), f;
2
+ import { At as r, Bn as i, Dt as a, Et as o, Gt as s, Ht as c, Kt as l, Mt as u, Ot as d, Qn as f, Tn as p, Wt as m, Xt as h, Zt as g, _n as _, _t as v, en as y, er as b, fn as x, gt as S, ir as C, jt as w, kt as T, ot as E, st as D, tr as O, un as k, wt as A, zn as j } from "./lite-Cy6aeiL6.js";
3
+ import { i as M, n as N } from "./languages-C0zQ4GSo.js";
4
+ import { jsx as P } from "react/jsx-runtime";
5
+ import * as F from "react";
6
+ import * as I from "react-dom";
7
+ //#region ../../node_modules/.bun/@base-ui+react@1.4.1+fa6c2f29eeb10566/node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverShared.js
8
+ function L(e, t) {
9
+ return t != null && !c(t) ? 0 : typeof e == "function" ? e() : e;
12
10
  }
13
- function l(e, t) {
14
- let n = u(e);
15
- if (n) return !n.id && t && (n.id = t), n.id || void 0;
11
+ function R(e, t, n) {
12
+ let r = L(e, n);
13
+ return typeof r == "number" ? r : r?.[t];
16
14
  }
17
- function u(e) {
18
- if (!e) return;
19
- let t = e.parentElement;
20
- if (t && t.tagName === "LABEL") return t;
21
- let n = e.id;
22
- if (n) {
23
- let t = e.nextElementSibling;
24
- if (t && t.htmlFor === n) return t;
15
+ function z(e) {
16
+ return typeof e == "function" ? e() : e;
17
+ }
18
+ function B(e, t) {
19
+ return t || e === "click" || e === "mousedown";
20
+ }
21
+ //#endregion
22
+ //#region ../../node_modules/.bun/@base-ui+react@1.4.1+fa6c2f29eeb10566/node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverInteractionSharedState.js
23
+ var V = class e {
24
+ constructor() {
25
+ this.pointerType = void 0, this.interactedInside = !1, this.handler = void 0, this.blockMouseMove = !0, this.performedPointerEventsMutation = !1, this.pointerEventsScopeElement = null, this.pointerEventsReferenceElement = null, this.pointerEventsFloatingElement = null, this.restTimeoutPending = !1, this.openChangeTimeout = new a(), this.restTimeout = new a(), this.handleCloseOptions = void 0;
25
26
  }
26
- let r = e.labels;
27
- return r && r[0];
27
+ static create() {
28
+ return new e();
29
+ }
30
+ dispose = () => {
31
+ this.openChangeTimeout.clear(), this.restTimeout.clear();
32
+ };
33
+ disposeEffect = () => this.dispose;
34
+ }, H = /* @__PURE__ */ new WeakMap();
35
+ function U(e) {
36
+ if (!e.performedPointerEventsMutation) return;
37
+ let t = e.pointerEventsScopeElement;
38
+ t && H.get(t) === e && (e.pointerEventsScopeElement?.style.removeProperty("pointer-events"), e.pointerEventsReferenceElement?.style.removeProperty("pointer-events"), e.pointerEventsFloatingElement?.style.removeProperty("pointer-events"), H.delete(t)), e.performedPointerEventsMutation = !1, e.pointerEventsScopeElement = null, e.pointerEventsReferenceElement = null, e.pointerEventsFloatingElement = null;
39
+ }
40
+ function W(e, t) {
41
+ let { scopeElement: n, referenceElement: r, floatingElement: i } = t, a = H.get(n);
42
+ a && a !== e && U(a), U(e), e.performedPointerEventsMutation = !0, e.pointerEventsScopeElement = n, e.pointerEventsReferenceElement = r, e.pointerEventsFloatingElement = i, H.set(n, e), n.style.pointerEvents = "none", r.style.pointerEvents = "auto", i.style.pointerEvents = "auto";
43
+ }
44
+ function G(e) {
45
+ let t = O(V.create).current, n = e.context.dataRef.current;
46
+ return n.hoverInteractionState ||= t, k(n.hoverInteractionState.disposeEffect), n.hoverInteractionState;
47
+ }
48
+ //#endregion
49
+ //#region ../../node_modules/.bun/@base-ui+react@1.4.1+fa6c2f29eeb10566/node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverFloatingInteraction.js
50
+ function K(e, t = {}) {
51
+ let n = "rootStore" in e ? e.rootStore : e, r = n.useState("open"), i = n.useState("floatingElement"), a = n.useState("domReferenceElement"), { dataRef: o } = n.context, { enabled: c = !0, closeDelay: u = 0, nodeId: _ } = t, w = G(n), T = D(), O = E(), k = b(() => B(o.current.openEvent?.type, w.interactedInside)), A = b(() => {
52
+ let e = o.current.openEvent?.type;
53
+ return e?.includes("mouse") && e !== "mousedown";
54
+ }), j = b((e) => l(e, n.context.triggerElements)), M = F.useCallback((e) => {
55
+ let t = R(u, "close", w.pointerType), r = () => {
56
+ n.setOpen(!1, x(p, e)), T?.events.emit("floating.closed", e);
57
+ };
58
+ t ? w.openChangeTimeout.start(t, r) : (w.openChangeTimeout.clear(), r());
59
+ }, [
60
+ u,
61
+ n,
62
+ w,
63
+ T
64
+ ]), N = b(() => {
65
+ U(w);
66
+ }), P = b((e) => {
67
+ let t = g(e);
68
+ if (!s(t)) {
69
+ w.interactedInside = !1;
70
+ return;
71
+ }
72
+ w.interactedInside = t?.closest("[aria-haspopup]") != null;
73
+ });
74
+ f(() => {
75
+ r || (w.pointerType = void 0, w.restTimeoutPending = !1, w.interactedInside = !1, N());
76
+ }, [
77
+ r,
78
+ w,
79
+ N
80
+ ]), F.useEffect(() => N, [N]), f(() => {
81
+ if (c && r && w.handleCloseOptions?.blockPointerEvents && A() && C(a) && i) {
82
+ let e = a, t = i, n = y(i), r = T?.nodesRef.current.find((e) => e.id === O)?.context?.elements.floating;
83
+ r && (r.style.pointerEvents = "");
84
+ let o = w.handleCloseOptions?.getScope?.() ?? w.pointerEventsScopeElement ?? r ?? e.closest("[data-rootownerid]") ?? n.body;
85
+ return W(w, {
86
+ scopeElement: o,
87
+ referenceElement: e,
88
+ floatingElement: t
89
+ }), () => {
90
+ N();
91
+ };
92
+ }
93
+ }, [
94
+ c,
95
+ r,
96
+ a,
97
+ i,
98
+ w,
99
+ A,
100
+ T,
101
+ O,
102
+ N
103
+ ]);
104
+ let I = d();
105
+ F.useEffect(() => {
106
+ if (!c) return;
107
+ function e() {
108
+ w.openChangeTimeout.clear(), I.clear(), T?.events.off("floating.closed", r), N();
109
+ }
110
+ function t(e) {
111
+ if (T && O && m(T.nodesRef.current, O).length > 0) {
112
+ T.events.on("floating.closed", r);
113
+ return;
114
+ }
115
+ if (j(e.relatedTarget)) return;
116
+ let t = o.current.floatingContext?.nodeId ?? _, n = e.relatedTarget;
117
+ if (!(T && t && C(n) && m(T.nodesRef.current, t, !1).some((e) => h(e.context?.elements.floating, n)))) {
118
+ if (w.handler) {
119
+ w.handler(e);
120
+ return;
121
+ }
122
+ N(), k() || M(e);
123
+ }
124
+ }
125
+ function r(e) {
126
+ !T || !O || m(T.nodesRef.current, O).length > 0 || I.start(0, () => {
127
+ T.events.off("floating.closed", r), n.setOpen(!1, x(p, e)), T.events.emit("floating.closed", e);
128
+ });
129
+ }
130
+ let a = i;
131
+ return v(a && S(a, "mouseenter", e), a && S(a, "mouseleave", t), a && S(a, "pointerdown", P, !0), () => {
132
+ T?.events.off("floating.closed", r);
133
+ });
134
+ }, [
135
+ c,
136
+ i,
137
+ n,
138
+ o,
139
+ _,
140
+ k,
141
+ j,
142
+ M,
143
+ N,
144
+ P,
145
+ w,
146
+ T,
147
+ O,
148
+ I
149
+ ]);
150
+ }
151
+ //#endregion
152
+ //#region ../../node_modules/.bun/@base-ui+react@1.4.1+fa6c2f29eeb10566/node_modules/@base-ui/react/esm/floating-ui-react/hooks/useHoverReferenceInteraction.js
153
+ var ee = { current: null };
154
+ function q(e, t = {}) {
155
+ let n = "rootStore" in e ? e.rootStore : e, { dataRef: r, events: i } = n.context, { enabled: a = !0, delay: o = 0, handleClose: s = null, mouseOnly: u = !1, restMs: d = 0, move: f = !0, triggerElementRef: m = ee, externalTree: _, isActiveTrigger: w = !0, getHandleCloseContext: T, isClosing: E } = t, O = D(_), k = G(n), j = F.useRef(!1), M = A(s), N = A(o), P = A(d), L = A(a), V = A(E);
156
+ w && (k.handleCloseOptions = M.current?.__options);
157
+ let H = b(() => B(r.current.openEvent?.type, k.interactedInside)), K = b((e) => l(e, n.context.triggerElements)), q = b((e, t, r) => {
158
+ let i = n.context.triggerElements;
159
+ if (i.hasElement(t)) return !e || !h(e, t);
160
+ if (!C(r)) return !1;
161
+ let a = r;
162
+ return i.hasMatchingElement((e) => h(e, a)) && (!e || !h(e, a));
163
+ }), J = b((e, t = !0) => {
164
+ let r = R(N.current, "close", k.pointerType);
165
+ r ? k.openChangeTimeout.start(r, () => {
166
+ n.setOpen(!1, x(p, e)), O?.events.emit("floating.closed", e);
167
+ }) : t && (k.openChangeTimeout.clear(), n.setOpen(!1, x(p, e)), O?.events.emit("floating.closed", e));
168
+ }), Y = b(() => {
169
+ k.handler &&= (y(n.select("domReferenceElement")).removeEventListener("mousemove", k.handler), void 0);
170
+ }), X = b(() => {
171
+ U(k);
172
+ });
173
+ return F.useEffect(() => Y, [Y]), F.useEffect(() => {
174
+ if (!a) return;
175
+ function e(e) {
176
+ e.open ? j.current = !1 : (j.current = e.reason === p, Y(), k.openChangeTimeout.clear(), k.restTimeout.clear(), k.blockMouseMove = !0, k.restTimeoutPending = !1);
177
+ }
178
+ return i.on("openchange", e), () => {
179
+ i.off("openchange", e);
180
+ };
181
+ }, [
182
+ a,
183
+ i,
184
+ k,
185
+ Y
186
+ ]), F.useEffect(() => {
187
+ if (!a) return;
188
+ let e = m.current ?? (w ? n.select("domReferenceElement") : null);
189
+ if (!C(e)) return;
190
+ function t(e) {
191
+ if (k.openChangeTimeout.clear(), k.blockMouseMove = !1, u && !c(k.pointerType)) return;
192
+ let t = z(P.current), r = R(N.current, "open", k.pointerType), i = g(e), a = e.currentTarget ?? null, o = n.select("domReferenceElement"), s = a;
193
+ if (C(i) && !n.context.triggerElements.hasElement(i)) {
194
+ for (let e of n.context.triggerElements.elements()) if (h(e, i)) {
195
+ s = e;
196
+ break;
197
+ }
198
+ }
199
+ C(a) && C(o) && !n.context.triggerElements.hasElement(a) && h(a, o) && (s = o);
200
+ let l = s != null && q(o, s, i), d = n.select("open"), f = V.current?.() ?? n.select("transitionStatus") === "ending", m = !d && f && j.current, _ = !l && C(s) && C(o) && h(o, s) && m, v = t > 0 && !r, y = l && (d || m) || _, b = !d || l;
201
+ if (y) {
202
+ n.setOpen(!0, x(p, e, s));
203
+ return;
204
+ }
205
+ v || (r ? k.openChangeTimeout.start(r, () => {
206
+ b && n.setOpen(!0, x(p, e, s));
207
+ }) : b && n.setOpen(!0, x(p, e, s)));
208
+ }
209
+ function i(e) {
210
+ if (H()) {
211
+ X();
212
+ return;
213
+ }
214
+ Y();
215
+ let t = n.select("domReferenceElement"), i = y(t);
216
+ k.restTimeout.clear(), k.restTimeoutPending = !1;
217
+ let a = r.current.floatingContext ?? T?.();
218
+ if (!K(e.relatedTarget)) {
219
+ if (M.current && a) {
220
+ n.select("open") || k.openChangeTimeout.clear();
221
+ let t = m.current;
222
+ k.handler = M.current({
223
+ ...a,
224
+ tree: O,
225
+ x: e.clientX,
226
+ y: e.clientY,
227
+ onClose() {
228
+ X(), Y(), L.current && !H() && t === n.select("domReferenceElement") && J(e, !0);
229
+ }
230
+ }), i.addEventListener("mousemove", k.handler), k.handler(e);
231
+ return;
232
+ }
233
+ (k.pointerType !== "touch" || !h(n.select("floatingElement"), e.relatedTarget)) && J(e);
234
+ }
235
+ }
236
+ return f ? v(S(e, "mousemove", t, { once: !0 }), S(e, "mouseenter", t), S(e, "mouseleave", i)) : v(S(e, "mouseenter", t), S(e, "mouseleave", i));
237
+ }, [
238
+ Y,
239
+ X,
240
+ r,
241
+ N,
242
+ J,
243
+ n,
244
+ a,
245
+ M,
246
+ k,
247
+ w,
248
+ q,
249
+ H,
250
+ K,
251
+ u,
252
+ f,
253
+ P,
254
+ m,
255
+ O,
256
+ L,
257
+ T,
258
+ V
259
+ ]), F.useMemo(() => {
260
+ if (!a) return;
261
+ function e(e) {
262
+ k.pointerType = e.pointerType;
263
+ }
264
+ return {
265
+ onPointerDown: e,
266
+ onPointerEnter: e,
267
+ onMouseMove(e) {
268
+ let { nativeEvent: t } = e, r = e.currentTarget, i = n.select("domReferenceElement"), a = n.select("open"), o = q(i, r, e.target);
269
+ if (u && !c(k.pointerType)) return;
270
+ if (a && o && k.handleCloseOptions?.blockPointerEvents) {
271
+ let e = n.select("floatingElement");
272
+ if (e) {
273
+ let t = k.handleCloseOptions?.getScope?.() ?? r.ownerDocument.body;
274
+ W(k, {
275
+ scopeElement: t,
276
+ referenceElement: r,
277
+ floatingElement: e
278
+ });
279
+ }
280
+ }
281
+ let s = z(P.current);
282
+ if (a && !o || s === 0 || !o && k.restTimeoutPending && e.movementX ** 2 + e.movementY ** 2 < 2) return;
283
+ k.restTimeout.clear();
284
+ function l() {
285
+ if (k.restTimeoutPending = !1, H()) return;
286
+ let e = n.select("open");
287
+ !k.blockMouseMove && (!e || o) && n.setOpen(!0, x(p, t, r));
288
+ }
289
+ k.pointerType === "touch" ? I.flushSync(() => {
290
+ l();
291
+ }) : o && a ? l() : (k.restTimeoutPending = !0, k.restTimeout.start(s, l));
292
+ }
293
+ };
294
+ }, [
295
+ a,
296
+ k,
297
+ H,
298
+ q,
299
+ u,
300
+ n,
301
+ P
302
+ ]);
303
+ }
304
+ //#endregion
305
+ //#region ../../node_modules/.bun/@base-ui+react@1.4.1+fa6c2f29eeb10566/node_modules/@base-ui/react/esm/floating-ui-react/safePolygon.js
306
+ var J = .1, Y = J * J, X = .5;
307
+ function Z(e, t, n, r, i, a) {
308
+ return r >= t != a >= t && e <= (i - n) * (t - r) / (a - r) + n;
309
+ }
310
+ function Q(e, t, n, r, i, a, o, s, c, l) {
311
+ let u = !1;
312
+ return Z(e, t, n, r, i, a) && (u = !u), Z(e, t, i, a, o, s) && (u = !u), Z(e, t, o, s, c, l) && (u = !u), Z(e, t, c, l, n, r) && (u = !u), u;
313
+ }
314
+ function te(e, t, n) {
315
+ return e >= n.x && e <= n.x + n.width && t >= n.y && t <= n.y + n.height;
316
+ }
317
+ function $(e, t, n, r, i, a) {
318
+ return e >= Math.min(n, i) && e <= Math.max(n, i) && t >= Math.min(r, a) && t <= Math.max(r, a);
319
+ }
320
+ function ne(e = {}) {
321
+ let { blockPointerEvents: t = !1 } = e, n = new a(), r = ({ x: e, y: t, placement: r, elements: i, onClose: a, nodeId: o, tree: s }) => {
322
+ let c = r?.split("-")[0], l = !1, u = null, d = null, f = typeof performance < "u" ? performance.now() : 0;
323
+ function p(e, t) {
324
+ let n = performance.now(), r = n - f;
325
+ if (u === null || d === null || r === 0) return u = e, d = t, f = n, !1;
326
+ let i = e - u, a = t - d, o = i * i + a * a, s = r * r * Y;
327
+ return u = e, d = t, f = n, o < s;
328
+ }
329
+ function _() {
330
+ n.clear(), a();
331
+ }
332
+ return function(r) {
333
+ n.clear();
334
+ let a = i.domReference, u = i.floating;
335
+ if (!a || !u || c == null || e == null || t == null) return;
336
+ let { clientX: d, clientY: f } = r, v = g(r), y = r.type === "mouseleave", b = h(u, v), x = h(a, v);
337
+ if (b && (l = !0, !y)) return;
338
+ if (x && (l = !1, !y)) {
339
+ l = !0;
340
+ return;
341
+ }
342
+ if (y && C(r.relatedTarget) && h(u, r.relatedTarget)) return;
343
+ function S() {
344
+ return !!(s && m(s.nodesRef.current, o).length > 0);
345
+ }
346
+ function w() {
347
+ S() || _();
348
+ }
349
+ if (S()) return;
350
+ let T = a.getBoundingClientRect(), E = u.getBoundingClientRect(), D = e > E.right - E.width / 2, O = t > E.bottom - E.height / 2, k = E.width > T.width, A = E.height > T.height, j = (k ? T : E).left, M = (k ? T : E).right, N = (A ? T : E).top, P = (A ? T : E).bottom;
351
+ if (c === "top" && t >= T.bottom - 1 || c === "bottom" && t <= T.top + 1 || c === "left" && e >= T.right - 1 || c === "right" && e <= T.left + 1) {
352
+ w();
353
+ return;
354
+ }
355
+ let F = !1;
356
+ switch (c) {
357
+ case "top":
358
+ F = $(d, f, j, T.top + 1, M, E.bottom - 1);
359
+ break;
360
+ case "bottom":
361
+ F = $(d, f, j, E.top + 1, M, T.bottom - 1);
362
+ break;
363
+ case "left":
364
+ F = $(d, f, E.right - 1, P, T.left + 1, N);
365
+ break;
366
+ case "right": F = $(d, f, T.right - 1, P, E.left + 1, N);
367
+ }
368
+ if (F) return;
369
+ if (l && !te(d, f, T)) {
370
+ w();
371
+ return;
372
+ }
373
+ if (!y && p(d, f)) {
374
+ w();
375
+ return;
376
+ }
377
+ let I = !1;
378
+ switch (c) {
379
+ case "top": {
380
+ let n = k ? X / 2 : X * 4, r = k || D ? e + n : e - n, i = k ? e - n : D ? e + n : e - n, a = t + X + 1, o = D || k ? E.bottom - X : E.top, s = D ? k ? E.bottom - X : E.top : E.bottom - X;
381
+ I = Q(d, f, r, a, i, a, E.left, o, E.right, s);
382
+ break;
383
+ }
384
+ case "bottom": {
385
+ let n = k ? X / 2 : X * 4, r = k || D ? e + n : e - n, i = k ? e - n : D ? e + n : e - n, a = t - X, o = D || k ? E.top + X : E.bottom, s = D ? k ? E.top + X : E.bottom : E.top + X;
386
+ I = Q(d, f, r, a, i, a, E.left, o, E.right, s);
387
+ break;
388
+ }
389
+ case "left": {
390
+ let n = A ? X / 2 : X * 4, r = A || O ? t + n : t - n, i = A ? t - n : O ? t + n : t - n, a = e + X + 1, o = O || A ? E.right - X : E.left, s = O ? A ? E.right - X : E.left : E.right - X;
391
+ I = Q(d, f, o, E.top, s, E.bottom, a, r, a, i);
392
+ break;
393
+ }
394
+ case "right": {
395
+ let n = A ? X / 2 : X * 4, r = A || O ? t + n : t - n, i = A ? t - n : O ? t + n : t - n, a = e - X, o = O || A ? E.left + X : E.right, s = O ? A ? E.left + X : E.right : E.left + X;
396
+ I = Q(d, f, a, r, a, i, o, E.top, s, E.bottom);
397
+ break;
398
+ }
399
+ }
400
+ I ? l || n.start(40, w) : w();
401
+ };
402
+ };
403
+ return r.__options = {
404
+ ...e,
405
+ blockPointerEvents: t
406
+ }, r;
28
407
  }
29
408
  //#endregion
30
409
  //#region ../../node_modules/.bun/val-i18n@0.1.14+882451ae40c8d660/node_modules/val-i18n/dist/main.mjs
31
- var d = (e, t = {}, n = "") => {
32
- for (let [r, i] of Object.entries(e)) typeof i == "string" ? t[n + r] = i : d(i, t, n + r + ".");
410
+ var re = (e, t = {}, n = "") => {
411
+ for (let [r, i] of Object.entries(e)) typeof i == "string" ? t[n + r] = i : re(i, t, n + r + ".");
33
412
  return t;
34
- }, f = (e) => {
413
+ }, ie = (e) => {
35
414
  let t = [], n = [], r = /{{(\S+?)}}/gi, i, a = 0;
36
415
  for (; i = r.exec(e);) t.push(e.slice(a, i.index), ""), n.push(i[1]), a = i.index + i[0].length;
37
416
  return t.push(e.slice(a)), n.length <= 0 ? !1 : (e) => {
38
417
  for (let r = n.length - 1; r >= 0; r--) t[r * 2 + 1] = e[n[r]] ?? n[r];
39
418
  return t.join("");
40
419
  };
41
- }, p = class r {
420
+ }, ae = class r {
42
421
  constructor(r, i, a) {
43
422
  this.t = (e, t) => this.t$.get()(e, t), this.fetcher = a?.fetcher;
44
423
  let o = /* @__PURE__ */ new Map();
45
- this.locales$ = t(i), this.lang$ = t(r), this.locale$ = n([this.lang$, this.locales$], ([e, t]) => t[e] || {}), this.a = e(this.locale$, d), this.t$ = e(this.a, (e) => ((e, t, n) => {
424
+ this.locales$ = t(i), this.lang$ = t(r), this.locale$ = n([this.lang$, this.locales$], ([e, t]) => t[e] || {}), this.a = e(this.locale$, re), this.t$ = e(this.a, (e) => ((e, t, n) => {
46
425
  if (n) {
47
426
  let r = n["@"];
48
427
  if (r != null) {
@@ -57,7 +436,7 @@ var d = (e, t = {}, n = "") => {
57
436
  }
58
437
  if (e[t]) {
59
438
  let r = o.get(t);
60
- if (r ?? o.set(t, r = f(e[t])), r) return r(n);
439
+ if (r ?? o.set(t, r = ie(e[t])), r) return r(n);
61
440
  }
62
441
  }
63
442
  return e[t] || t;
@@ -90,7 +469,7 @@ var d = (e, t = {}, n = "") => {
90
469
  dispose() {
91
470
  this.lang$.dispose(), this.t$.dispose(), this.locales$.dispose(), this.locale$.dispose(), this.a.dispose();
92
471
  }
93
- }, m = {
472
+ }, oe = {
94
473
  en: { valueEditor: {
95
474
  invalidJson: "Enter valid JSON.",
96
475
  invalidNumber: "Enter a valid number.",
@@ -127,7 +506,11 @@ var d = (e, t = {}, n = "") => {
127
506
  nullable: "Allow null",
128
507
  group: "Group",
129
508
  addGroup: "Add group",
130
- collapsed: "Collapsed"
509
+ collapsed: "Collapsed",
510
+ options: "Value options for {{name}}",
511
+ hours: "Hours",
512
+ minutes: "Minutes",
513
+ seconds: "Seconds"
131
514
  } },
132
515
  "zh-CN": { valueEditor: {
133
516
  invalidJson: "请输入有效的 JSON。",
@@ -165,7 +548,11 @@ var d = (e, t = {}, n = "") => {
165
548
  nullable: "允许空值",
166
549
  group: "分组",
167
550
  addGroup: "添加分组",
168
- collapsed: "默认折叠"
551
+ collapsed: "默认折叠",
552
+ options: "{{name}} 的值选项",
553
+ hours: "时",
554
+ minutes: "分",
555
+ seconds: "秒"
169
556
  } },
170
557
  "zh-TW": { valueEditor: {
171
558
  invalidJson: "請輸入有效的 JSON。",
@@ -203,7 +590,11 @@ var d = (e, t = {}, n = "") => {
203
590
  nullable: "允許空值",
204
591
  group: "群組",
205
592
  addGroup: "新增群組",
206
- collapsed: "預設摺疊"
593
+ collapsed: "預設摺疊",
594
+ options: "{{name}} 的值選項",
595
+ hours: "時",
596
+ minutes: "分",
597
+ seconds: "秒"
207
598
  } },
208
599
  ja: { valueEditor: {
209
600
  invalidJson: "有効な JSON を入力してください。",
@@ -241,7 +632,11 @@ var d = (e, t = {}, n = "") => {
241
632
  nullable: "null を許可",
242
633
  group: "グループ",
243
634
  addGroup: "グループを追加",
244
- collapsed: "折りたたむ"
635
+ collapsed: "折りたたむ",
636
+ options: "{{name}} の値オプション",
637
+ hours: "時",
638
+ minutes: "分",
639
+ seconds: "秒"
245
640
  } },
246
641
  ko: { valueEditor: {
247
642
  invalidJson: "유효한 JSON을 입력하세요.",
@@ -279,7 +674,11 @@ var d = (e, t = {}, n = "") => {
279
674
  nullable: "null 허용",
280
675
  group: "그룹",
281
676
  addGroup: "그룹 추가",
282
- collapsed: "접힘"
677
+ collapsed: "접힘",
678
+ options: "{{name}} 값 옵션",
679
+ hours: "시",
680
+ minutes: "분",
681
+ seconds: "초"
283
682
  } },
284
683
  ru: { valueEditor: {
285
684
  invalidJson: "Введите корректный JSON.",
@@ -317,7 +716,11 @@ var d = (e, t = {}, n = "") => {
317
716
  nullable: "Разрешить null",
318
717
  group: "Группа",
319
718
  addGroup: "Добавить группу",
320
- collapsed: "Свёрнута"
719
+ collapsed: "Свёрнута",
720
+ options: "Параметры значения {{name}}",
721
+ hours: "Часы",
722
+ minutes: "Минуты",
723
+ seconds: "Секунды"
321
724
  } },
322
725
  fr: { valueEditor: {
323
726
  invalidJson: "Saisissez un JSON valide.",
@@ -355,9 +758,13 @@ var d = (e, t = {}, n = "") => {
355
758
  nullable: "Autoriser null",
356
759
  group: "Groupe",
357
760
  addGroup: "Ajouter un groupe",
358
- collapsed: "Replié"
761
+ collapsed: "Replié",
762
+ options: "Options de valeur pour {{name}}",
763
+ hours: "Heures",
764
+ minutes: "Minutes",
765
+ seconds: "Secondes"
359
766
  } }
360
- }, h = {
767
+ }, se = {
361
768
  en: {
362
769
  jsonViewer: {
363
770
  bin: "Binary",
@@ -792,7 +1199,7 @@ var d = (e, t = {}, n = "") => {
792
1199
  more: "Plus d'actions"
793
1200
  }
794
1201
  }
795
- }, g = {
1202
+ }, ce = {
796
1203
  en: {
797
1204
  addNode: {
798
1205
  blocks: "Blocks",
@@ -814,7 +1221,7 @@ var d = (e, t = {}, n = "") => {
814
1221
  javascriptDescription: "Create a JavaScript scriptlet for this node.",
815
1222
  llmChat: "LLM Chat",
816
1223
  llmChatDescription: "Generate a text response from messages and a prompt template.",
817
- llmStructured: "LLM Structured Output",
1224
+ llmStructured: "LLM JSON",
818
1225
  llmStructuredDescription: "Generate structured JSON from messages and a prompt template.",
819
1226
  generatedResponse: "Generated response.",
820
1227
  subflowDescription: "Add an existing subflow.",
@@ -827,7 +1234,7 @@ var d = (e, t = {}, n = "") => {
827
1234
  triggers: "Triggers",
828
1235
  value: "Fixed Values",
829
1236
  valueDescription: "Set fixed values, such as text and numbers, for downstream nodes to use.",
830
- wait: "Wait",
1237
+ wait: "Wait for confirmation",
831
1238
  waitDescription: "Pause the Run until an operator continues or approves it.",
832
1239
  webhook: "Webhook",
833
1240
  webhookDescription: "Receive external events through a dedicated HTTP endpoint.",
@@ -886,7 +1293,9 @@ var d = (e, t = {}, n = "") => {
886
1293
  noConnections: "No connections are available for this Trigger.",
887
1294
  retry: "Retry",
888
1295
  search: "Search blocks",
889
- searchPlaceholder: "Search blocks…"
1296
+ searchPlaceholder: "Search blocks…",
1297
+ catalogRefreshFailed: "Could not refresh the Trigger catalog. Saved results remain available.",
1298
+ resize: "Resize properties panel"
890
1299
  },
891
1300
  empty: {
892
1301
  loadFailedDescription: "Check the API configuration and make sure the deployment endpoint is reachable.",
@@ -1077,6 +1486,16 @@ var d = (e, t = {}, n = "") => {
1077
1486
  preview: "Preview",
1078
1487
  duplicate: "Duplicate",
1079
1488
  delete: "Delete"
1489
+ },
1490
+ ports: {
1491
+ reorder: "Reorder {{name}}",
1492
+ reorderHint: "Drag to reorder within the group, or use Up / Down while focused.",
1493
+ moved: "{{name}} moved to position {{position}}.",
1494
+ groupSettings: "Group settings",
1495
+ connected: "Connected",
1496
+ columnName: "Name",
1497
+ columnType: "Type",
1498
+ columnValue: "Value"
1080
1499
  }
1081
1500
  },
1082
1501
  language: { label: "Language" },
@@ -1123,7 +1542,8 @@ var d = (e, t = {}, n = "") => {
1123
1542
  triggerNotFound: "This Trigger does not exist or was deleted. Refresh the Trigger list.",
1124
1543
  variableInvalid: "The Variable name or value is invalid. Review it and try again.",
1125
1544
  variableLimitReached: "The deployment has reached its Variable limit.",
1126
- variableNotFound: "This Variable does not exist or was deleted. Refresh the Variable list."
1545
+ variableNotFound: "This Variable does not exist or was deleted. Refresh the Variable list.",
1546
+ connectorConsoleUnconfigured: "The Connector authorization console URL is not configured. Set it in Settings → Connector → Authorization console URL, then try again."
1127
1547
  },
1128
1548
  flowDeleted: "Deleted {{name}}.",
1129
1549
  flowDeleteAccepted: "Deleting {{name}}.",
@@ -1679,6 +2099,192 @@ var d = (e, t = {}, n = "") => {
1679
2099
  deleteOne: "Delete 1 node",
1680
2100
  pasteOne: "Paste 1 node",
1681
2101
  moveOne: "Move 1 node"
2102
+ },
2103
+ linearTrigger: {
2104
+ team: "Team",
2105
+ selectTeam: "Select a Team",
2106
+ connectFirst: "Select a Connection first.",
2107
+ loading: "Loading…",
2108
+ noTeams: "No accessible Teams.",
2109
+ missingTeam: "The selected Team is no longer available. Choose another Team.",
2110
+ loadFailed: "Could not load options.",
2111
+ retry: "Retry",
2112
+ statuses: "Issue statuses",
2113
+ selectTeamFirst: "Select a Team first.",
2114
+ statusHint: "Matches the current status when an Issue changes, not only transitions into it.",
2115
+ allStatuses: "All statuses",
2116
+ selectedCount: "Selected statuses: {{count}}",
2117
+ noStatuses: "No available statuses.",
2118
+ unavailableStatus: "Unavailable status ({{id}})",
2119
+ missingStatuses: "Some selected statuses are no longer available. Remove or replace them."
2120
+ },
2121
+ nodePicker: {
2122
+ actionGroups: {
2123
+ read: "Read actions",
2124
+ write: "Write actions",
2125
+ destructive: "High-risk actions",
2126
+ other: "Other actions"
2127
+ },
2128
+ builtInNodes: "Built-in nodes",
2129
+ configured: "Configured",
2130
+ configuredDescription: "An account is configured and ready to use.",
2131
+ builtInAccount: "Built-in account",
2132
+ builtInAccountDescription: "Uses an account provided by OOMOL. Usage consumes credits.",
2133
+ noSetup: "No setup",
2134
+ noSetupDescription: "Ready to use without configuring an account.",
2135
+ needsSetup: "Needs setup",
2136
+ needsSetupDescription: "Add or reauthorize an account to use these apps.",
2137
+ clearSearch: "Clear search",
2138
+ search: "Search nodes, apps, or actions…",
2139
+ apps: "Apps",
2140
+ searching: "Searching…",
2141
+ browseNodes: "Browse all nodes",
2142
+ backToResults: "Back to search results",
2143
+ back: "Back to all nodes",
2144
+ results: "Search results",
2145
+ builtIn: "Built-in"
2146
+ },
2147
+ eventSources: {
2148
+ required: "Required",
2149
+ optional: "Optional",
2150
+ tenantHint: "The tenant is retrieved automatically from the selected Connection when you save.",
2151
+ secretsHint: "Copy both values from the app’s Events & Callbacks encryption settings. This event source requires encrypted callbacks. When editing, leave a secret blank to keep its current value.",
2152
+ openConsole: "Open Feishu Developer Console",
2153
+ defaultName: "Feishu event source",
2154
+ title: "Event sources",
2155
+ description: "Receive application events once and share them across Flows.",
2156
+ refresh: "Refresh",
2157
+ add: "Add event source",
2158
+ loading: "Loading event sources…",
2159
+ empty: "No event sources yet",
2160
+ emptyDescription: "Connect a Feishu application to start Flows when events occur.",
2161
+ edit: "Edit",
2162
+ disabled: "Disabled",
2163
+ unverified: "Waiting for address verification",
2164
+ ready: "Callback verified",
2165
+ disable: "Disable",
2166
+ enable: "Enable",
2167
+ callback: "Callback URL",
2168
+ originMissing: "Configure the public Integration origin in deployment settings first.",
2169
+ connection: "Connection",
2170
+ lastReceived: "Last event received",
2171
+ never: "No events received",
2172
+ consumers: "Published Flows",
2173
+ noConsumers: "No published Flows use this source.",
2174
+ deleteConfirm: "Delete this event source?",
2175
+ delete: "Delete",
2176
+ cancel: "Cancel",
2177
+ name: "Name",
2178
+ team: "Connector Team",
2179
+ keepSecret: "Leave empty to keep the saved value",
2180
+ events: "Events to receive",
2181
+ eventsHint: "Select events to receive here, and enable the same events and permissions in Feishu. This selection does not configure the Feishu app. Synchronous interactive callbacks are not supported.",
2182
+ manageHint: "Allow this deployment to manage resource subscriptions for this application, including existing subscriptions and automatic cleanup when no published Flow needs them.",
2183
+ save: "Save",
2184
+ invalid: "The event source configuration is invalid. Check its Connection, tenant and required fields.",
2185
+ notFound: "This event source is unavailable for the selected Connection.",
2186
+ conflict: "The source changed or is still in use. Refresh and check the affected Flows and subscriptions.",
2187
+ source: "Event source",
2188
+ noSources: "This Flow’s team has no Feishu event sources yet. Create one here to continue.",
2189
+ loadFailed: "Event sources could not be loaded.",
2190
+ searchEvents: "Search by name or event ID",
2191
+ customEvent: "Add custom event type",
2192
+ addCustom: "Add",
2193
+ noEventMatches: "No matching events",
2194
+ chooseEvents: "Select at least one event",
2195
+ customInvalid: "Enter a valid asynchronous event ID.",
2196
+ sourceEventsHint: "Only events allowed by the selected source are available.",
2197
+ eventUnavailable: "This event is not allowed by the selected source. Remove it or update the source.",
2198
+ eventGroups: {
2199
+ messages: "Messages",
2200
+ documents: "Documents",
2201
+ base: "Base",
2202
+ calendar: "Calendar",
2203
+ approval: "Approvals",
2204
+ contacts: "Contacts",
2205
+ custom: "Custom events"
2206
+ },
2207
+ eventNames: {
2208
+ im_message_receive_v1: "Message received",
2209
+ im_message_recalled_v1: "Message recalled",
2210
+ im_message_reaction_created_v1: "Reaction added",
2211
+ im_chat_member_bot_added_v1: "Bot added to group",
2212
+ drive_file_edit_v1: "Document edited",
2213
+ drive_file_title_updated_v1: "Document renamed",
2214
+ drive_file_created_in_folder_v1: "File added to folder",
2215
+ drive_file_deleted_v1: "File deleted",
2216
+ drive_file_bitable_record_changed_v1: "Base records changed",
2217
+ drive_file_bitable_field_changed_v1: "Base fields changed",
2218
+ calendar_calendar_event_changed_v4: "Calendar event changed",
2219
+ calendar_calendar_changed_v4: "Calendar changed",
2220
+ approval_instance_status_changed_v4: "Approval instance status changed",
2221
+ approval_task_status_changed_v4: "Approval task status changed",
2222
+ approval_instance: "Approval instance (legacy)",
2223
+ contact_user_created_v3: "Employee added",
2224
+ contact_user_updated_v3: "Employee updated",
2225
+ contact_user_deleted_v3: "Employee removed"
2226
+ },
2227
+ identityUnavailable: "This Connector does not provide a verified application ID. Upgrade Connector before creating this event source.",
2228
+ selectApp: "Select a Feishu app",
2229
+ configureCallback: "Configure the callback",
2230
+ selectAppHint: "Create a custom enterprise app in Feishu, then select Feishu App Bot in Connector and connect with its App ID and App Secret. Feishu user OAuth connections are not used here. Creating the app does not require a callback URL.",
2231
+ configureCallbackHint: "Get the Verification Token and configure an Encrypt Key under Events & Callbacks → Security Settings in Feishu. Save this form first, then paste the generated URL into Feishu.",
2232
+ feishuApp: "Feishu app (Feishu App Bot)",
2233
+ noApplications: "This team has no active Feishu App Bot connections. Connect an app to continue.",
2234
+ appSourceName: "{{name}} events",
2235
+ resourceManagement: "Resource subscription management",
2236
+ back: "Back",
2237
+ next: "Next",
2238
+ receiving: "Events received",
2239
+ create: "Create event source",
2240
+ created: "Event source created",
2241
+ flowCreateHint: "This event source belongs to the current Flow’s team and can be shared by multiple Flows.",
2242
+ bindFailed: "The event source was created, but could not be selected. Try again.",
2243
+ useSource: "Use this event source",
2244
+ verifyBeforePublish: "You can continue editing this Flow. Verify the callback in Feishu before publishing.",
2245
+ setupCopy: "1. Copy the callback URL",
2246
+ setupFeishu: "2. Configure event subscriptions in Feishu",
2247
+ setupVerify: "3. Return here to check verification",
2248
+ copy: "Copy",
2249
+ copied: "Copied",
2250
+ copyFailed: "Copy failed. Select the URL and copy it manually.",
2251
+ publicCallbackHint: "Feishu must be able to reach this URL over the public internet. Localhost and private addresses will not work.",
2252
+ setupFeishuHint: "Open the app’s Events & Callbacks → Event Configuration. Choose delivery to your server, paste the URL and save. Add the events below and their required permissions, then publish an app version as required by Feishu.",
2253
+ openFeishu: "Open Feishu Developer Console",
2254
+ manualSubscriptionHint: "Selecting events here does not add them to Feishu. Configure each event in the Feishu console.",
2255
+ awaitingVerification: "No callback verification received yet. Finish configuration in Feishu, then check below.",
2256
+ callbackVerified: "Callback verified. Check the source’s receiving status to see whether business events have arrived.",
2257
+ checkingVerification: "Checking…",
2258
+ checkVerification: "Check verification",
2259
+ specifiedChats: "Specific chats (optional)",
2260
+ specifiedChatsHint: "Enter one chat_id per line. Leave empty for all chats the app has permission to receive events from.",
2261
+ subscribeResource: "Subscribe to a specific resource",
2262
+ subscribeResourceHint: "Optional. Publishing will request a Feishu subscription for this resource and restrict this Flow to its events.",
2263
+ managementRequired: "Enable resource subscription management on this event source in Settings first.",
2264
+ incompatibleChats: "The selected events do not support chat filtering. Remove the previous filter.",
2265
+ incompatibleResource: "The configured resource does not match the selected events. Turn off the subscription and select compatible events.",
2266
+ removeFilter: "Remove filter",
2267
+ documentType: "Document type",
2268
+ documentTypes: {
2269
+ doc: "Legacy document",
2270
+ docx: "Document",
2271
+ sheet: "Spreadsheet",
2272
+ bitable: "Base",
2273
+ file: "File",
2274
+ folder: "Folder"
2275
+ },
2276
+ resourceIds: {
2277
+ document: "Document token",
2278
+ calendar: "Calendar ID",
2279
+ approval: "Approval definition code"
2280
+ },
2281
+ resourceHints: {
2282
+ document: "Enter the document or Base token, not its full URL.",
2283
+ calendar: "Enter the calendar ID whose event changes you want to receive.",
2284
+ approval: "Enter the approval definition code, not an instance ID. Only legacy approval business events are supported."
2285
+ },
2286
+ connectApp: "Connect Feishu App Bot",
2287
+ connectAppHint: "Connector opens in a new tab. Use this Flow’s team; the list refreshes automatically when you return after connecting."
1682
2288
  }
1683
2289
  },
1684
2290
  "zh-CN": {
@@ -1702,7 +2308,7 @@ var d = (e, t = {}, n = "") => {
1702
2308
  javascriptDescription: "为此节点创建 JavaScript scriptlet。",
1703
2309
  llmChat: "LLM 对话",
1704
2310
  llmChatDescription: "根据消息和提示词模板生成文本回复。",
1705
- llmStructured: "LLM 结构化输出",
2311
+ llmStructured: "LLM JSON",
1706
2312
  llmStructuredDescription: "根据消息和提示词模板生成结构化 JSON。",
1707
2313
  generatedResponse: "生成的回复。",
1708
2314
  subflowDescription: "添加已有的 Subflow。",
@@ -1715,7 +2321,7 @@ var d = (e, t = {}, n = "") => {
1715
2321
  triggers: "触发器",
1716
2322
  value: "固定值",
1717
2323
  valueDescription: "设置固定的文本、数字等值,供下游节点使用。",
1718
- wait: "等待",
2324
+ wait: "等待确认",
1719
2325
  waitDescription: "暂停 Run,直到 Operator 继续、审批或拒绝。",
1720
2326
  webhook: "Webhook",
1721
2327
  webhookDescription: "通过专属 HTTP 入口接收外部事件。",
@@ -1774,7 +2380,9 @@ var d = (e, t = {}, n = "") => {
1774
2380
  noConnections: "这个 Trigger 没有可用的 Connection。",
1775
2381
  retry: "重试",
1776
2382
  search: "搜索节点",
1777
- searchPlaceholder: "搜索节点…"
2383
+ searchPlaceholder: "搜索节点…",
2384
+ catalogRefreshFailed: "无法刷新触发器列表,仍可使用已缓存的结果。",
2385
+ resize: "调整属性面板宽度"
1778
2386
  },
1779
2387
  empty: {
1780
2388
  loadFailedDescription: "请检查 API 配置,并确认部署服务可访问。",
@@ -1965,6 +2573,16 @@ var d = (e, t = {}, n = "") => {
1965
2573
  preview: "预览",
1966
2574
  duplicate: "克隆",
1967
2575
  delete: "删除"
2576
+ },
2577
+ ports: {
2578
+ reorder: "调整 {{name}} 的顺序",
2579
+ reorderHint: "拖动调整组内顺序,或聚焦后使用上、下方向键。",
2580
+ moved: "{{name}} 已移至第 {{position}} 位。",
2581
+ groupSettings: "分组设置",
2582
+ connected: "已连接",
2583
+ columnName: "名称",
2584
+ columnType: "类型",
2585
+ columnValue: "值"
1968
2586
  }
1969
2587
  },
1970
2588
  language: { label: "语言" },
@@ -2011,7 +2629,8 @@ var d = (e, t = {}, n = "") => {
2011
2629
  triggerNotFound: "找不到此 Trigger,请刷新 Trigger 列表。",
2012
2630
  variableInvalid: "Variable 名称或值不符合要求,请检查后重试。",
2013
2631
  variableLimitReached: "当前部署的 Variable 已达到上限。",
2014
- variableNotFound: "找不到此 Variable,请刷新 Variable 列表。"
2632
+ variableNotFound: "找不到此 Variable,请刷新 Variable 列表。",
2633
+ connectorConsoleUnconfigured: "尚未配置 Connector 授权控制台地址。请前往“设置 → Connector → 授权控制台地址”完成配置后重试。"
2015
2634
  },
2016
2635
  flowDeleted: "已删除 {{name}}。",
2017
2636
  flowDeleteAccepted: "正在删除 {{name}}。",
@@ -2567,6 +3186,192 @@ var d = (e, t = {}, n = "") => {
2567
3186
  deleteOne: "删除 1 个节点",
2568
3187
  pasteOne: "粘贴 1 个节点",
2569
3188
  moveOne: "移动 1 个节点"
3189
+ },
3190
+ linearTrigger: {
3191
+ team: "Team",
3192
+ selectTeam: "选择 Team",
3193
+ connectFirst: "请先选择连接。",
3194
+ loading: "加载中…",
3195
+ noTeams: "没有可访问的 Team。",
3196
+ missingTeam: "已选 Team 不再可用,请重新选择。",
3197
+ loadFailed: "无法加载选项。",
3198
+ retry: "重试",
3199
+ statuses: "Issue 状态",
3200
+ selectTeamFirst: "请先选择 Team。",
3201
+ statusHint: "匹配 Issue 变化时的当前状态,不仅限于进入该状态的变化。",
3202
+ allStatuses: "全部状态",
3203
+ selectedCount: "已选择 {{count}} 个状态",
3204
+ noStatuses: "没有可用状态。",
3205
+ unavailableStatus: "不可用的状态({{id}})",
3206
+ missingStatuses: "部分已选状态不再可用,请移除或重新选择。"
3207
+ },
3208
+ nodePicker: {
3209
+ actionGroups: {
3210
+ read: "读取接口",
3211
+ write: "写入接口",
3212
+ destructive: "高风险接口",
3213
+ other: "其他接口"
3214
+ },
3215
+ builtInNodes: "内置节点",
3216
+ configured: "已配置",
3217
+ configuredDescription: "已配置账号,可直接使用。",
3218
+ builtInAccount: "内置账号",
3219
+ builtInAccountDescription: "使用 OOMOL 提供的内置账号,使用时会扣除点数。",
3220
+ noSetup: "免配置",
3221
+ noSetupDescription: "无需配置账号即可使用。",
3222
+ needsSetup: "需要配置",
3223
+ needsSetupDescription: "添加或重新授权账号后即可使用。",
3224
+ clearSearch: "清空搜索",
3225
+ search: "搜索节点、应用或操作…",
3226
+ apps: "应用",
3227
+ searching: "正在搜索…",
3228
+ browseNodes: "浏览全部节点",
3229
+ backToResults: "返回搜索结果",
3230
+ back: "返回全部节点",
3231
+ results: "搜索结果",
3232
+ builtIn: "内置"
3233
+ },
3234
+ eventSources: {
3235
+ required: "必填",
3236
+ optional: "选填",
3237
+ tenantHint: "保存时会从所选连接账号自动获取租户信息,无需填写 Tenant Key。",
3238
+ secretsHint: "从飞书应用的“事件与回调”加密设置中复制这两项。本事件源使用加密回调;编辑时留空可保留原密钥。",
3239
+ openConsole: "打开飞书开发者后台",
3240
+ defaultName: "飞书事件源",
3241
+ title: "事件源",
3242
+ description: "统一接收应用事件,供多个 Flow 使用。",
3243
+ refresh: "刷新",
3244
+ add: "添加事件源",
3245
+ loading: "正在加载事件源…",
3246
+ empty: "尚无事件源",
3247
+ emptyDescription: "接入飞书应用,在事件发生时启动 Flow。",
3248
+ edit: "编辑",
3249
+ disabled: "已停用",
3250
+ unverified: "等待验证回调地址",
3251
+ ready: "回调已验证",
3252
+ disable: "停用",
3253
+ enable: "启用",
3254
+ callback: "回调地址",
3255
+ originMissing: "请先在部署设置中配置 Integration 公网地址。",
3256
+ connection: "连接账号",
3257
+ lastReceived: "最近接收事件",
3258
+ never: "尚未收到事件",
3259
+ consumers: "引用此来源的已发布 Flow",
3260
+ noConsumers: "暂无已发布 Flow 使用此事件源。",
3261
+ deleteConfirm: "删除此事件源?",
3262
+ delete: "删除",
3263
+ cancel: "取消",
3264
+ name: "名称",
3265
+ team: "Connector 团队",
3266
+ keepSecret: "留空保留已保存的值",
3267
+ events: "接收的事件",
3268
+ eventsHint: "在这里选择接收的事件,并在飞书应用后台启用对应事件和权限。此处选择不会自动配置飞书应用,不支持需要同步响应的交互回调。",
3269
+ manageHint: "允许当前部署管理该应用的资源订阅,包括接管已有订阅,以及在不再被已发布 Flow 使用时自动清理。",
3270
+ save: "保存",
3271
+ invalid: "事件源配置无效,请检查连接账号、租户和必填字段。",
3272
+ notFound: "所选连接账号无法使用此事件源。",
3273
+ conflict: "事件源已变更或仍在使用,请刷新并检查相关 Flow 和订阅。",
3274
+ source: "事件源",
3275
+ noSources: "当前 Flow 所属团队暂无飞书事件源,可以在这里创建。",
3276
+ loadFailed: "无法加载事件源。",
3277
+ searchEvents: "搜索事件名称或标识",
3278
+ customEvent: "添加自定义事件类型",
3279
+ addCustom: "添加",
3280
+ noEventMatches: "没有匹配的事件",
3281
+ chooseEvents: "请至少选择一个事件",
3282
+ customInvalid: "请输入有效的异步事件标识。",
3283
+ sourceEventsHint: "只能选择此事件源允许接收的事件。",
3284
+ eventUnavailable: "此事件不在所选事件源的接收范围内,请移除或修改事件源。",
3285
+ eventGroups: {
3286
+ messages: "消息",
3287
+ documents: "文档",
3288
+ base: "多维表格",
3289
+ calendar: "日历",
3290
+ approval: "审批",
3291
+ contacts: "通讯录",
3292
+ custom: "自定义事件"
3293
+ },
3294
+ eventNames: {
3295
+ im_message_receive_v1: "收到消息",
3296
+ im_message_recalled_v1: "消息被撤回",
3297
+ im_message_reaction_created_v1: "添加消息表情回复",
3298
+ im_chat_member_bot_added_v1: "机器人入群",
3299
+ drive_file_edit_v1: "文档内容变化",
3300
+ drive_file_title_updated_v1: "文档标题变化",
3301
+ drive_file_created_in_folder_v1: "文件夹中新增文件",
3302
+ drive_file_deleted_v1: "文件被删除",
3303
+ drive_file_bitable_record_changed_v1: "多维表格记录变化",
3304
+ drive_file_bitable_field_changed_v1: "多维表格字段变化",
3305
+ calendar_calendar_event_changed_v4: "日程变化",
3306
+ calendar_calendar_changed_v4: "日历变化",
3307
+ approval_instance_status_changed_v4: "审批实例状态变化",
3308
+ approval_task_status_changed_v4: "审批任务状态变化",
3309
+ approval_instance: "审批实例(旧版事件)",
3310
+ contact_user_created_v3: "员工入职",
3311
+ contact_user_updated_v3: "员工信息变化",
3312
+ contact_user_deleted_v3: "员工离职"
3313
+ },
3314
+ identityUnavailable: "当前 Connector 未提供已验证的应用 ID,请升级 Connector 后再创建事件源。",
3315
+ selectApp: "选择飞书应用",
3316
+ configureCallback: "配置事件回调",
3317
+ selectAppHint: "先在飞书创建企业自建应用,再在 Connector 中选择 Feishu App Bot,用 App ID 和 App Secret 连接。这里不使用 Feishu 用户授权连接;创建飞书应用时不需要事件回调地址。",
3318
+ configureCallbackHint: "从飞书应用的“事件与回调 → 安全设置”获取 Verification Token 并配置 Encrypt Key。先保存这里的表单,再把生成的地址填回飞书。",
3319
+ feishuApp: "飞书应用(Feishu App Bot)",
3320
+ noApplications: "当前团队还没有有效的 Feishu App Bot 连接,请先连接应用。",
3321
+ appSourceName: "{{name}} 事件源",
3322
+ resourceManagement: "资源订阅管理",
3323
+ back: "上一步",
3324
+ next: "下一步",
3325
+ receiving: "已收到事件",
3326
+ create: "创建事件源",
3327
+ created: "事件源已创建",
3328
+ flowCreateHint: "事件源将归属当前 Flow 的团队,可供团队内多个 Flow 共用。",
3329
+ bindFailed: "事件源已创建,但未能关联到当前节点,请重试。",
3330
+ useSource: "使用此事件源",
3331
+ verifyBeforePublish: "可以继续编辑 Flow;发布前,请先在飞书完成回调验证。",
3332
+ setupCopy: "1. 复制回调地址",
3333
+ setupFeishu: "2. 在飞书配置事件订阅",
3334
+ setupVerify: "3. 回到这里检查验证结果",
3335
+ copy: "复制",
3336
+ copied: "已复制",
3337
+ copyFailed: "复制失败,请选中地址手动复制。",
3338
+ publicCallbackHint: "此地址需要能被飞书从公网访问;localhost 和内网地址不可用。",
3339
+ setupFeishuHint: "打开对应应用的“事件与回调 → 事件配置”,选择“将事件发送至开发者服务器”,粘贴地址并保存。随后添加下列事件及所需权限,按飞书要求发布应用版本。",
3340
+ openFeishu: "打开飞书开放平台",
3341
+ manualSubscriptionHint: "这里选择的事件不会自动添加到飞书,请在飞书后台逐项配置。",
3342
+ awaitingVerification: "尚未收到飞书的回调验证。完成飞书配置后,点击下方按钮检查。",
3343
+ callbackVerified: "回调已验证。是否已收到业务事件,请查看事件源的接收状态。",
3344
+ checkingVerification: "正在检查…",
3345
+ checkVerification: "检查验证结果",
3346
+ specifiedChats: "指定会话(可选)",
3347
+ specifiedChatsHint: "每行填写一个会话 ID(chat_id)。留空表示不限制会话;应用仍只能接收有权限访问的会话事件。",
3348
+ subscribeResource: "订阅指定资源",
3349
+ subscribeResourceHint: "可选。开启后会在发布时向飞书申请该资源的订阅,并仅用该资源的事件触发此 Flow。",
3350
+ managementRequired: "此事件源未开启“资源订阅管理”,请先在设置中的事件源页面开启。",
3351
+ incompatibleChats: "当前事件不支持会话筛选,请移除旧的会话条件。",
3352
+ incompatibleResource: "当前事件与已配置的资源不匹配,请关闭资源订阅后重新选择事件。",
3353
+ removeFilter: "移除筛选条件",
3354
+ documentType: "文档类型",
3355
+ documentTypes: {
3356
+ doc: "旧版文档",
3357
+ docx: "新版文档",
3358
+ sheet: "电子表格",
3359
+ bitable: "多维表格",
3360
+ file: "文件",
3361
+ folder: "文件夹"
3362
+ },
3363
+ resourceIds: {
3364
+ document: "文档 Token",
3365
+ calendar: "日历 ID",
3366
+ approval: "审批定义 Code"
3367
+ },
3368
+ resourceHints: {
3369
+ document: "填写文档或多维表格的 Token,不是完整链接。",
3370
+ calendar: "填写需要监听日程变化的日历 ID。",
3371
+ approval: "填写审批定义的 Code,不是单个审批实例 ID;当前仅支持旧版审批业务事件。"
3372
+ },
3373
+ connectApp: "连接 Feishu App Bot",
3374
+ connectAppHint: "将在新标签页打开 Connector。请使用当前 Flow 所属团队;连接完成后返回这里,列表会自动刷新。"
2570
3375
  }
2571
3376
  },
2572
3377
  "zh-TW": {
@@ -2590,7 +3395,7 @@ var d = (e, t = {}, n = "") => {
2590
3395
  javascriptDescription: "為這個節點建立 JavaScript 小腳本。",
2591
3396
  llmChat: "LLM 對話",
2592
3397
  llmChatDescription: "依訊息和提示詞範本產生文字回覆。",
2593
- llmStructured: "LLM 結構化輸出",
3398
+ llmStructured: "LLM JSON",
2594
3399
  llmStructuredDescription: "依訊息和提示詞範本產生結構化 JSON。",
2595
3400
  generatedResponse: "產生的回覆。",
2596
3401
  subflowDescription: "加入現有的 Subflow。",
@@ -2603,7 +3408,7 @@ var d = (e, t = {}, n = "") => {
2603
3408
  triggers: "Trigger",
2604
3409
  value: "固定值",
2605
3410
  valueDescription: "設定固定的文字、數字等值,供下游節點使用。",
2606
- wait: "等待",
3411
+ wait: "等待確認",
2607
3412
  waitDescription: "暫停 Run,直到 Operator 繼續或審批。",
2608
3413
  webhook: "Webhook",
2609
3414
  webhookDescription: "透過專屬的 HTTP 端點接收外部事件。",
@@ -2662,7 +3467,9 @@ var d = (e, t = {}, n = "") => {
2662
3467
  noConnections: "這個 Trigger 沒有可用的 Connection。",
2663
3468
  retry: "重試",
2664
3469
  search: "搜尋節點",
2665
- searchPlaceholder: "搜尋節點…"
3470
+ searchPlaceholder: "搜尋節點…",
3471
+ catalogRefreshFailed: "無法重新整理觸發器清單,仍可使用已快取的結果。",
3472
+ resize: "調整屬性面板寬度"
2666
3473
  },
2667
3474
  empty: {
2668
3475
  loadFailedDescription: "請檢查 API 設定,並確認部署端點可以連線。",
@@ -2853,6 +3660,16 @@ var d = (e, t = {}, n = "") => {
2853
3660
  preview: "預覽",
2854
3661
  duplicate: "建立副本",
2855
3662
  delete: "刪除"
3663
+ },
3664
+ ports: {
3665
+ reorder: "調整 {{name}} 的順序",
3666
+ reorderHint: "拖動調整組內順序,或聚焦後使用上、下方向鍵。",
3667
+ moved: "{{name}} 已移至第 {{position}} 位。",
3668
+ groupSettings: "群組設定",
3669
+ connected: "已連接",
3670
+ columnName: "名稱",
3671
+ columnType: "類型",
3672
+ columnValue: "值"
2856
3673
  }
2857
3674
  },
2858
3675
  language: { label: "語言" },
@@ -2899,7 +3716,8 @@ var d = (e, t = {}, n = "") => {
2899
3716
  triggerNotFound: "找不到此 Trigger,請重新整理 Trigger 列表。",
2900
3717
  variableInvalid: "Variable 名稱或值不符合要求,請檢查後再試一次。",
2901
3718
  variableLimitReached: "目前部署的 Variable 已達上限。",
2902
- variableNotFound: "找不到此 Variable,請重新整理 Variable 列表。"
3719
+ variableNotFound: "找不到此 Variable,請重新整理 Variable 列表。",
3720
+ connectorConsoleUnconfigured: "尚未設定 Connector 授權控制台地址。請前往「設定 → Connector → 授權控制台地址」完成設定後重試。"
2903
3721
  },
2904
3722
  flowDeleted: "已刪除 {{name}}。",
2905
3723
  flowDeleteAccepted: "正在刪除 {{name}}。",
@@ -3455,6 +4273,192 @@ var d = (e, t = {}, n = "") => {
3455
4273
  deleteOne: "刪除 1 個節點",
3456
4274
  pasteOne: "貼上 1 個節點",
3457
4275
  moveOne: "移動 1 個節點"
4276
+ },
4277
+ linearTrigger: {
4278
+ team: "Team",
4279
+ selectTeam: "選擇 Team",
4280
+ connectFirst: "請先選擇連線。",
4281
+ loading: "載入中…",
4282
+ noTeams: "沒有可存取的 Team。",
4283
+ missingTeam: "已選 Team 不再可用,請重新選擇。",
4284
+ loadFailed: "無法載入選項。",
4285
+ retry: "重試",
4286
+ statuses: "Issue 狀態",
4287
+ selectTeamFirst: "請先選擇 Team。",
4288
+ statusHint: "比對 Issue 變更時的目前狀態,不僅限於進入該狀態的變更。",
4289
+ allStatuses: "全部狀態",
4290
+ selectedCount: "已選擇 {{count}} 個狀態",
4291
+ noStatuses: "沒有可用狀態。",
4292
+ unavailableStatus: "不可用的狀態({{id}})",
4293
+ missingStatuses: "部分已選狀態不再可用,請移除或重新選擇。"
4294
+ },
4295
+ nodePicker: {
4296
+ actionGroups: {
4297
+ read: "讀取介面",
4298
+ write: "寫入介面",
4299
+ destructive: "高風險介面",
4300
+ other: "其他介面"
4301
+ },
4302
+ builtInNodes: "內建節點",
4303
+ configured: "已設定",
4304
+ configuredDescription: "已設定帳號,可直接使用。",
4305
+ builtInAccount: "內建帳號",
4306
+ builtInAccountDescription: "使用 OOMOL 提供的內建帳號,使用時會扣除點數。",
4307
+ noSetup: "免設定",
4308
+ noSetupDescription: "無需設定帳號即可使用。",
4309
+ needsSetup: "需要設定",
4310
+ needsSetupDescription: "新增或重新授權帳號後即可使用。",
4311
+ clearSearch: "清空搜尋",
4312
+ search: "搜尋節點、應用或操作…",
4313
+ apps: "應用",
4314
+ searching: "正在搜尋…",
4315
+ browseNodes: "瀏覽全部節點",
4316
+ backToResults: "返回搜尋結果",
4317
+ back: "返回全部節點",
4318
+ results: "搜尋結果",
4319
+ builtIn: "內建"
4320
+ },
4321
+ eventSources: {
4322
+ required: "必填",
4323
+ optional: "選填",
4324
+ tenantHint: "儲存時會從所選連線帳號自動取得租戶資訊,無需填寫 Tenant Key。",
4325
+ secretsHint: "從飛書應用程式的「事件與回呼」加密設定中複製這兩項。本事件來源使用加密回呼;編輯時留空可保留原金鑰。",
4326
+ openConsole: "開啟飛書開發者後台",
4327
+ defaultName: "飛書事件來源",
4328
+ title: "事件來源",
4329
+ description: "統一接收應用程式事件,供多個 Flow 使用。",
4330
+ refresh: "重新整理",
4331
+ add: "新增事件來源",
4332
+ loading: "正在載入事件來源…",
4333
+ empty: "尚無事件來源",
4334
+ emptyDescription: "連接飛書應用程式,在事件發生時啟動 Flow。",
4335
+ edit: "編輯",
4336
+ disabled: "已停用",
4337
+ unverified: "等待驗證回呼位址",
4338
+ ready: "回呼已驗證",
4339
+ disable: "停用",
4340
+ enable: "啟用",
4341
+ callback: "回呼位址",
4342
+ originMissing: "請先在部署設定中設定 Integration 公開位址。",
4343
+ connection: "連線帳號",
4344
+ lastReceived: "最近接收事件",
4345
+ never: "尚未收到事件",
4346
+ consumers: "引用此來源的已發佈 Flow",
4347
+ noConsumers: "尚無已發佈 Flow 使用此來源。",
4348
+ deleteConfirm: "刪除此事件來源?",
4349
+ delete: "刪除",
4350
+ cancel: "取消",
4351
+ name: "名稱",
4352
+ team: "Connector 團隊",
4353
+ keepSecret: "留空保留已儲存的值",
4354
+ events: "接收的事件",
4355
+ eventsHint: "在此選擇接收的事件,並在飛書應用程式後台啟用對應事件與權限。此處選擇不會自動設定飛書應用程式,不支援需要同步回應的互動回呼。",
4356
+ manageHint: "允許目前部署管理該應用程式的資源訂閱,包括接管既有訂閱,以及在不再被已發佈 Flow 使用時自動清理。",
4357
+ save: "儲存",
4358
+ invalid: "事件來源設定無效,請檢查帳號、租戶和必填欄位。",
4359
+ notFound: "所選帳號無法使用此事件來源。",
4360
+ conflict: "來源已變更或仍在使用,請重新整理並檢查相關 Flow 和訂閱。",
4361
+ source: "事件來源",
4362
+ noSources: "目前 Flow 所屬團隊尚無飛書事件來源,可以在此建立。",
4363
+ loadFailed: "無法載入事件來源。",
4364
+ searchEvents: "搜尋事件名稱或識別碼",
4365
+ customEvent: "新增自訂事件類型",
4366
+ addCustom: "新增",
4367
+ noEventMatches: "沒有符合的事件",
4368
+ chooseEvents: "請至少選擇一個事件",
4369
+ customInvalid: "請輸入有效的非同步事件識別碼。",
4370
+ sourceEventsHint: "只能選擇此事件來源允許接收的事件。",
4371
+ eventUnavailable: "此事件不在所選事件來源的接收範圍內,請移除或修改事件來源。",
4372
+ eventGroups: {
4373
+ messages: "訊息",
4374
+ documents: "文件",
4375
+ base: "多維表格",
4376
+ calendar: "日曆",
4377
+ approval: "審批",
4378
+ contacts: "通訊錄",
4379
+ custom: "自訂事件"
4380
+ },
4381
+ eventNames: {
4382
+ im_message_receive_v1: "收到訊息",
4383
+ im_message_recalled_v1: "訊息被撤回",
4384
+ im_message_reaction_created_v1: "新增訊息表情回覆",
4385
+ im_chat_member_bot_added_v1: "機器人加入群組",
4386
+ drive_file_edit_v1: "文件內容變更",
4387
+ drive_file_title_updated_v1: "文件標題變更",
4388
+ drive_file_created_in_folder_v1: "資料夾新增檔案",
4389
+ drive_file_deleted_v1: "檔案被刪除",
4390
+ drive_file_bitable_record_changed_v1: "多維表格記錄變更",
4391
+ drive_file_bitable_field_changed_v1: "多維表格欄位變更",
4392
+ calendar_calendar_event_changed_v4: "行程變更",
4393
+ calendar_calendar_changed_v4: "日曆變更",
4394
+ approval_instance_status_changed_v4: "審批實例狀態變更",
4395
+ approval_task_status_changed_v4: "審批任務狀態變更",
4396
+ approval_instance: "審批實例(舊版事件)",
4397
+ contact_user_created_v3: "員工到職",
4398
+ contact_user_updated_v3: "員工資訊變更",
4399
+ contact_user_deleted_v3: "員工離職"
4400
+ },
4401
+ identityUnavailable: "目前 Connector 未提供已驗證的應用程式 ID,請升級 Connector 後再建立事件來源。",
4402
+ selectApp: "選擇飛書應用程式",
4403
+ configureCallback: "設定事件回呼",
4404
+ selectAppHint: "先在飛書建立企業自建應用,再於 Connector 選擇 Feishu App Bot,以 App ID 與 App Secret 連接。此處不使用 Feishu 使用者授權連接;建立應用時不需要事件回呼地址。",
4405
+ configureCallbackHint: "從飛書應用的「事件與回呼 → 安全設定」取得 Verification Token 並設定 Encrypt Key。先儲存此表單,再將產生的地址填回飛書。",
4406
+ feishuApp: "飛書應用(Feishu App Bot)",
4407
+ noApplications: "目前團隊尚無有效的 Feishu App Bot 連接,請先連接應用。",
4408
+ appSourceName: "{{name}} 事件來源",
4409
+ resourceManagement: "資源訂閱管理",
4410
+ back: "上一步",
4411
+ next: "下一步",
4412
+ receiving: "已收到事件",
4413
+ create: "建立事件來源",
4414
+ created: "事件來源已建立",
4415
+ flowCreateHint: "事件來源將歸屬目前 Flow 的團隊,可供團隊內多個 Flow 共用。",
4416
+ bindFailed: "事件來源已建立,但未能關聯至目前節點,請重試。",
4417
+ useSource: "使用此事件來源",
4418
+ verifyBeforePublish: "可以繼續編輯 Flow;發佈前,請先在飛書完成回呼驗證。",
4419
+ setupCopy: "1. 複製回呼地址",
4420
+ setupFeishu: "2. 在飛書設定事件訂閱",
4421
+ setupVerify: "3. 回到此處檢查驗證結果",
4422
+ copy: "複製",
4423
+ copied: "已複製",
4424
+ copyFailed: "複製失敗,請選取地址手動複製。",
4425
+ publicCallbackHint: "此地址必須能讓飛書從公網存取;localhost 與內網地址無法使用。",
4426
+ setupFeishuHint: "開啟對應應用的「事件與回呼 → 事件設定」,選擇將事件傳送至開發者伺服器,貼上地址並儲存。接著新增下列事件與所需權限,依飛書要求發佈應用版本。",
4427
+ openFeishu: "開啟飛書開放平台",
4428
+ manualSubscriptionHint: "此處選取的事件不會自動新增至飛書,請在飛書後台逐項設定。",
4429
+ awaitingVerification: "尚未收到飛書的回呼驗證。完成飛書設定後,點擊下方按鈕檢查。",
4430
+ callbackVerified: "回呼已驗證。是否已收到業務事件,請查看事件來源的接收狀態。",
4431
+ checkingVerification: "正在檢查…",
4432
+ checkVerification: "檢查驗證結果",
4433
+ specifiedChats: "指定會話(選填)",
4434
+ specifiedChatsHint: "每行填寫一個會話 ID(chat_id)。留空表示不限會話;應用仍只能接收有權限存取的會話事件。",
4435
+ subscribeResource: "訂閱指定資源",
4436
+ subscribeResourceHint: "選填。開啟後會在發佈時向飛書申請該資源的訂閱,並僅以該資源的事件觸發此 Flow。",
4437
+ managementRequired: "此事件來源未開啟「資源訂閱管理」,請先在設定中的事件來源頁面開啟。",
4438
+ incompatibleChats: "目前事件不支援會話篩選,請移除舊的會話條件。",
4439
+ incompatibleResource: "目前事件與已設定的資源不符,請關閉資源訂閱後重新選取事件。",
4440
+ removeFilter: "移除篩選條件",
4441
+ documentType: "文件類型",
4442
+ documentTypes: {
4443
+ doc: "舊版文件",
4444
+ docx: "新版文件",
4445
+ sheet: "試算表",
4446
+ bitable: "多維表格",
4447
+ file: "檔案",
4448
+ folder: "資料夾"
4449
+ },
4450
+ resourceIds: {
4451
+ document: "文件 Token",
4452
+ calendar: "日曆 ID",
4453
+ approval: "審批定義 Code"
4454
+ },
4455
+ resourceHints: {
4456
+ document: "填寫文件或多維表格的 Token,非完整連結。",
4457
+ calendar: "填寫要監聽日程變更的日曆 ID。",
4458
+ approval: "填寫審批定義 Code,非單個審批實例 ID;目前僅支援舊版審批業務事件。"
4459
+ },
4460
+ connectApp: "連接 Feishu App Bot",
4461
+ connectAppHint: "將於新分頁開啟 Connector。請使用目前 Flow 所屬團隊;連接完成後返回此處,清單會自動更新。"
3458
4462
  }
3459
4463
  },
3460
4464
  ja: {
@@ -3478,7 +4482,7 @@ var d = (e, t = {}, n = "") => {
3478
4482
  javascriptDescription: "このノード用の JavaScript スクリプトレットを作成します。",
3479
4483
  llmChat: "LLM チャット",
3480
4484
  llmChatDescription: "メッセージとプロンプトテンプレートからテキストの応答を生成します。",
3481
- llmStructured: "LLM 構造化出力",
4485
+ llmStructured: "LLM JSON",
3482
4486
  llmStructuredDescription: "メッセージとプロンプトテンプレートから構造化された JSON を生成します。",
3483
4487
  generatedResponse: "生成された応答。",
3484
4488
  subflowDescription: "既存の Subflow を追加します。",
@@ -3491,7 +4495,7 @@ var d = (e, t = {}, n = "") => {
3491
4495
  triggers: "Trigger",
3492
4496
  value: "固定値",
3493
4497
  valueDescription: "テキストや数値などの固定値を設定し、下流のノードで使用します。",
3494
- wait: "待機",
4498
+ wait: "確認待ち",
3495
4499
  waitDescription: "オペレーターが続行または承認するまで Run を一時停止します。",
3496
4500
  webhook: "Webhook",
3497
4501
  webhookDescription: "専用の HTTP エンドポイントで外部イベントを受信します。",
@@ -3550,7 +4554,9 @@ var d = (e, t = {}, n = "") => {
3550
4554
  noConnections: "この Trigger で利用できる Connection はありません。",
3551
4555
  retry: "再試行",
3552
4556
  search: "ノードを検索",
3553
- searchPlaceholder: "ノードを検索…"
4557
+ searchPlaceholder: "ノードを検索…",
4558
+ catalogRefreshFailed: "トリガー一覧を更新できませんでした。キャッシュ済みの結果は引き続き利用できます。",
4559
+ resize: "プロパティパネルの幅を変更"
3554
4560
  },
3555
4561
  empty: {
3556
4562
  loadFailedDescription: "API 設定を確認し、デプロイ先のエンドポイントに接続できることを確認してください。",
@@ -3741,6 +4747,16 @@ var d = (e, t = {}, n = "") => {
3741
4747
  preview: "プレビュー",
3742
4748
  duplicate: "複製",
3743
4749
  delete: "削除"
4750
+ },
4751
+ ports: {
4752
+ reorder: "{{name}} の順序を変更",
4753
+ reorderHint: "ドラッグでグループ内の順序を変更。フォーカス時は上下キーでも移動できます。",
4754
+ moved: "{{name}} を {{position}} 番目に移動しました。",
4755
+ groupSettings: "グループ設定",
4756
+ connected: "接続済み",
4757
+ columnName: "名前",
4758
+ columnType: "型",
4759
+ columnValue: "値"
3744
4760
  }
3745
4761
  },
3746
4762
  language: { label: "言語" },
@@ -3787,7 +4803,8 @@ var d = (e, t = {}, n = "") => {
3787
4803
  triggerNotFound: "この Trigger は存在しないか、削除されています。Trigger 一覧を更新してください。",
3788
4804
  variableInvalid: "Variable の名前または値が無効です。確認してから再試行してください。",
3789
4805
  variableLimitReached: "このデプロイでは Variable が上限に達しました。",
3790
- variableNotFound: "この Variable は存在しないか、削除されています。Variable 一覧を更新してください。"
4806
+ variableNotFound: "この Variable は存在しないか、削除されています。Variable 一覧を更新してください。",
4807
+ connectorConsoleUnconfigured: "Connector の認証コンソール URL が未設定です。「設定 → Connector → 認証コンソール URL」で設定してから再試行してください。"
3791
4808
  },
3792
4809
  flowDeleted: "{{name}} を削除しました。",
3793
4810
  flowDeleteAccepted: "{{name}} を削除しています。",
@@ -4343,6 +5360,192 @@ var d = (e, t = {}, n = "") => {
4343
5360
  deleteOne: "ノードを 1 個削除",
4344
5361
  pasteOne: "ノードを 1 個貼り付け",
4345
5362
  moveOne: "ノードを 1 個移動"
5363
+ },
5364
+ linearTrigger: {
5365
+ team: "チーム",
5366
+ selectTeam: "チームを選択",
5367
+ connectFirst: "先に接続を選択してください。",
5368
+ loading: "読み込み中…",
5369
+ noTeams: "アクセス可能なチームがありません。",
5370
+ missingTeam: "選択したチームは利用できません。別のチームを選択してください。",
5371
+ loadFailed: "選択肢を読み込めませんでした。",
5372
+ retry: "再試行",
5373
+ statuses: "Issue のステータス",
5374
+ selectTeamFirst: "先にチームを選択してください。",
5375
+ statusHint: "Issue の変更時の現在のステータスに一致します。そのステータスへの遷移だけには限定されません。",
5376
+ allStatuses: "すべてのステータス",
5377
+ selectedCount: "{{count}} 件のステータスを選択中",
5378
+ noStatuses: "利用可能なステータスがありません。",
5379
+ unavailableStatus: "利用できないステータス({{id}})",
5380
+ missingStatuses: "選択したステータスの一部は利用できません。削除するか選び直してください。"
5381
+ },
5382
+ nodePicker: {
5383
+ actionGroups: {
5384
+ read: "読み取り操作",
5385
+ write: "書き込み操作",
5386
+ destructive: "高リスク操作",
5387
+ other: "その他の操作"
5388
+ },
5389
+ builtInNodes: "組み込みノード",
5390
+ configured: "設定済み",
5391
+ configuredDescription: "アカウントが設定済みで、そのまま利用できます。",
5392
+ builtInAccount: "組み込みアカウント",
5393
+ builtInAccountDescription: "OOMOL が提供するアカウントを使用します。利用時にクレジットが消費されます。",
5394
+ noSetup: "設定不要",
5395
+ noSetupDescription: "アカウントを設定せずに利用できます。",
5396
+ needsSetup: "要設定",
5397
+ needsSetupDescription: "アカウントを追加または再認証すると利用できます。",
5398
+ clearSearch: "検索をクリア",
5399
+ search: "ノード、アプリ、操作を検索…",
5400
+ apps: "アプリ",
5401
+ searching: "検索中…",
5402
+ browseNodes: "すべてのノードを表示",
5403
+ backToResults: "検索結果に戻る",
5404
+ back: "すべてのノードに戻る",
5405
+ results: "検索結果",
5406
+ builtIn: "組み込み"
5407
+ },
5408
+ eventSources: {
5409
+ required: "必須",
5410
+ optional: "任意",
5411
+ tenantHint: "保存時に選択した接続からテナント情報を取得するため、Tenant Key の入力は不要です。",
5412
+ secretsHint: "アプリのイベントとコールバックの暗号化設定から両方の値をコピーします。暗号化されたコールバックが必要です。編集時は空欄にすると現在のキーを保持します。",
5413
+ openConsole: "Feishu 開発者コンソールを開く",
5414
+ defaultName: "Feishu イベントソース",
5415
+ title: "イベントソース",
5416
+ description: "アプリのイベントを受信し、複数の Flow で共有します。",
5417
+ refresh: "更新",
5418
+ add: "イベントソースを追加",
5419
+ loading: "イベントソースを読み込み中…",
5420
+ empty: "イベントソースがありません",
5421
+ emptyDescription: "Feishu アプリを接続し、イベントで Flow を開始します。",
5422
+ edit: "編集",
5423
+ disabled: "無効",
5424
+ unverified: "アドレスの検証待ち",
5425
+ ready: "コールバック検証済み",
5426
+ disable: "無効にする",
5427
+ enable: "有効にする",
5428
+ callback: "コールバック URL",
5429
+ originMissing: "先にデプロイ設定で Integration の公開 URL を設定してください。",
5430
+ connection: "接続",
5431
+ lastReceived: "最終イベント受信",
5432
+ never: "未受信",
5433
+ consumers: "公開済み Flow",
5434
+ noConsumers: "このソースを使用する公開済み Flow はありません。",
5435
+ deleteConfirm: "このイベントソースを削除しますか?",
5436
+ delete: "削除",
5437
+ cancel: "キャンセル",
5438
+ name: "名前",
5439
+ team: "Connector チーム",
5440
+ keepSecret: "空欄で保存済みの値を維持",
5441
+ events: "受信するイベント",
5442
+ eventsHint: "受信するイベントを選択し、Feishu 側でも対応するイベントと権限を有効にしてください。この選択ではアプリは設定されません。同期応答が必要なコールバックには対応していません。",
5443
+ manageHint: "既存の購読の引き継ぎと、公開済み Flow が使用しなくなった購読の自動削除を含め、このデプロイによるリソース購読の管理を許可します。",
5444
+ save: "保存",
5445
+ invalid: "イベントソースの設定が無効です。接続、テナント、必須項目を確認してください。",
5446
+ notFound: "選択した接続ではこのソースを使用できません。",
5447
+ conflict: "ソースが変更されたか使用中です。更新して Flow と購読を確認してください。",
5448
+ source: "イベントソース",
5449
+ noSources: "この Flow のチームには Feishu イベントソースがありません。ここで作成できます。",
5450
+ loadFailed: "イベントソースを読み込めませんでした。",
5451
+ searchEvents: "イベント名または ID を検索",
5452
+ customEvent: "カスタムイベント追加",
5453
+ addCustom: "追加",
5454
+ noEventMatches: "一致するイベントがありません",
5455
+ chooseEvents: "イベントを1つ以上選択してください",
5456
+ customInvalid: "有効な非同期イベント ID を入力してください。",
5457
+ sourceEventsHint: "選択したソースで許可されたイベントのみ選択できます。",
5458
+ eventUnavailable: "このソースでは許可されていません。削除するかソースを更新してください。",
5459
+ eventGroups: {
5460
+ messages: "メッセージ",
5461
+ documents: "ドキュメント",
5462
+ base: "Base",
5463
+ calendar: "カレンダー",
5464
+ approval: "承認",
5465
+ contacts: "連絡先",
5466
+ custom: "カスタムイベント"
5467
+ },
5468
+ eventNames: {
5469
+ im_message_receive_v1: "メッセージ受信",
5470
+ im_message_recalled_v1: "メッセージ取り消し",
5471
+ im_message_reaction_created_v1: "リアクション追加",
5472
+ im_chat_member_bot_added_v1: "ボットがグループに参加",
5473
+ drive_file_edit_v1: "ドキュメント編集",
5474
+ drive_file_title_updated_v1: "ドキュメント名変更",
5475
+ drive_file_created_in_folder_v1: "フォルダー内にファイル追加",
5476
+ drive_file_deleted_v1: "ファイル削除",
5477
+ drive_file_bitable_record_changed_v1: "Base レコード変更",
5478
+ drive_file_bitable_field_changed_v1: "Base フィールド変更",
5479
+ calendar_calendar_event_changed_v4: "予定変更",
5480
+ calendar_calendar_changed_v4: "カレンダー変更",
5481
+ approval_instance_status_changed_v4: "承認インスタンスの状態変更",
5482
+ approval_task_status_changed_v4: "承認タスクの状態変更",
5483
+ approval_instance: "承認インスタンス(旧形式)",
5484
+ contact_user_created_v3: "従業員追加",
5485
+ contact_user_updated_v3: "従業員情報更新",
5486
+ contact_user_deleted_v3: "従業員削除"
5487
+ },
5488
+ identityUnavailable: "Connector が検証済みアプリ ID を提供していません。更新してから作成してください。",
5489
+ selectApp: "Feishu アプリを選択",
5490
+ configureCallback: "コールバックを設定",
5491
+ selectAppHint: "Feishu で企業自作アプリを作成し、Connector の Feishu App Bot を選んで App ID と App Secret で接続します。Feishu のユーザー認証接続は対象外です。アプリ作成時にコールバック URL は不要です。",
5492
+ configureCallbackHint: "Feishu の「イベントとコールバック → セキュリティ設定」で Verification Token を取得し、Encrypt Key を設定します。このフォームを保存してから、生成された URL を Feishu に入力してください。",
5493
+ feishuApp: "Feishu アプリ(Feishu App Bot)",
5494
+ noApplications: "このチームには有効な Feishu App Bot 接続がありません。先にアプリを接続してください。",
5495
+ appSourceName: "{{name}} イベント",
5496
+ resourceManagement: "リソース購読管理",
5497
+ back: "戻る",
5498
+ next: "次へ",
5499
+ receiving: "イベント受信済み",
5500
+ create: "イベントソースを作成",
5501
+ created: "イベントソースを作成しました",
5502
+ flowCreateHint: "このイベントソースは現在の Flow のチームに属し、複数の Flow で共有できます。",
5503
+ bindFailed: "イベントソースを作成しましたが、ノードに関連付けられませんでした。再試行してください。",
5504
+ useSource: "このイベントソースを使用",
5505
+ verifyBeforePublish: "Flow の編集を続けられます。公開前に Feishu でコールバックを検証してください。",
5506
+ setupCopy: "1. コールバック URL をコピー",
5507
+ setupFeishu: "2. Feishu でイベント購読を設定",
5508
+ setupVerify: "3. ここに戻って検証結果を確認",
5509
+ copy: "コピー",
5510
+ copied: "コピー済み",
5511
+ copyFailed: "コピーに失敗しました。URL を選択して手動でコピーしてください。",
5512
+ publicCallbackHint: "Feishu からインターネット経由でアクセスできる URL が必要です。localhost やプライベートアドレスは使えません。",
5513
+ setupFeishuHint: "アプリの「イベントとコールバック → イベント設定」で開発者サーバーへの送信を選び、URL を貼り付けて保存します。以下のイベントと必要な権限を追加し、Feishu の要件に従ってアプリを公開してください。",
5514
+ openFeishu: "Feishu 開発者コンソールを開く",
5515
+ manualSubscriptionHint: "ここで選んだイベントは Feishu に自動追加されません。Feishu 側でも設定してください。",
5516
+ awaitingVerification: "コールバック検証はまだ届いていません。Feishu の設定後に確認してください。",
5517
+ callbackVerified: "コールバック検証済みです。業務イベントの到着はソースの受信状態で確認してください。",
5518
+ checkingVerification: "確認中…",
5519
+ checkVerification: "検証結果を確認",
5520
+ specifiedChats: "会話を指定(任意)",
5521
+ specifiedChatsHint: "1 行に 1 つの chat_id を入力します。空欄の場合、アプリに権限があるすべての会話が対象です。",
5522
+ subscribeResource: "特定のリソースを購読",
5523
+ subscribeResourceHint: "任意です。公開時に Feishu でリソースを購読し、この Flow をそのリソースのイベントに限定します。",
5524
+ managementRequired: "先に設定のイベントソースでリソース購読管理を有効にしてください。",
5525
+ incompatibleChats: "選択したイベントは会話フィルターに対応していません。以前の条件を削除してください。",
5526
+ incompatibleResource: "リソースとイベントが一致しません。購読を無効にして、対応するイベントを選択してください。",
5527
+ removeFilter: "フィルターを削除",
5528
+ documentType: "文書の種類",
5529
+ documentTypes: {
5530
+ doc: "旧文書",
5531
+ docx: "文書",
5532
+ sheet: "スプレッドシート",
5533
+ bitable: "Base",
5534
+ file: "ファイル",
5535
+ folder: "フォルダー"
5536
+ },
5537
+ resourceIds: {
5538
+ document: "文書トークン",
5539
+ calendar: "カレンダー ID",
5540
+ approval: "承認定義コード"
5541
+ },
5542
+ resourceHints: {
5543
+ document: "URL ではなく、文書または Base のトークンを入力します。",
5544
+ calendar: "予定の変更を監視するカレンダー ID を入力します。",
5545
+ approval: "承認インスタンス ID ではなく承認定義コードを入力します。旧版の承認イベントのみ対応しています。"
5546
+ },
5547
+ connectApp: "Feishu App Bot を接続",
5548
+ connectAppHint: "Connector を新しいタブで開きます。この Flow のチームを使用してください。接続後に戻ると一覧が自動更新されます。"
4346
5549
  }
4347
5550
  },
4348
5551
  ko: {
@@ -4366,7 +5569,7 @@ var d = (e, t = {}, n = "") => {
4366
5569
  javascriptDescription: "이 노드에 사용할 JavaScript 스크립틀릿을 만듭니다.",
4367
5570
  llmChat: "LLM 대화",
4368
5571
  llmChatDescription: "메시지와 프롬프트 템플릿으로 텍스트 응답을 생성합니다.",
4369
- llmStructured: "LLM 구조화 출력",
5572
+ llmStructured: "LLM JSON",
4370
5573
  llmStructuredDescription: "메시지와 프롬프트 템플릿으로 구조화된 JSON을 생성합니다.",
4371
5574
  generatedResponse: "생성된 응답.",
4372
5575
  subflowDescription: "기존 Subflow를 추가합니다.",
@@ -4379,7 +5582,7 @@ var d = (e, t = {}, n = "") => {
4379
5582
  triggers: "Trigger",
4380
5583
  value: "고정 값",
4381
5584
  valueDescription: "다운스트림 노드에서 사용할 텍스트, 숫자 등의 고정 값을 설정합니다.",
4382
- wait: "대기",
5585
+ wait: "확인 대기",
4383
5586
  waitDescription: "운영자가 계속하거나 승인할 때까지 Run을 일시 중지합니다.",
4384
5587
  webhook: "Webhook",
4385
5588
  webhookDescription: "전용 HTTP 엔드포인트로 외부 이벤트를 수신합니다.",
@@ -4438,7 +5641,9 @@ var d = (e, t = {}, n = "") => {
4438
5641
  noConnections: "이 Trigger에는 사용할 수 있는 Connection이 없습니다.",
4439
5642
  retry: "다시 시도",
4440
5643
  search: "블록 검색",
4441
- searchPlaceholder: "블록 검색…"
5644
+ searchPlaceholder: "블록 검색…",
5645
+ catalogRefreshFailed: "트리거 목록을 새로 고치지 못했습니다. 캐시된 결과는 계속 사용할 수 있습니다.",
5646
+ resize: "속성 패널 너비 조절"
4442
5647
  },
4443
5648
  empty: {
4444
5649
  loadFailedDescription: "API 설정을 확인하고 배포 엔드포인트에 연결할 수 있는지 확인하세요.",
@@ -4629,6 +5834,16 @@ var d = (e, t = {}, n = "") => {
4629
5834
  preview: "미리 보기",
4630
5835
  duplicate: "복제",
4631
5836
  delete: "삭제"
5837
+ },
5838
+ ports: {
5839
+ reorder: "{{name}} 순서 변경",
5840
+ reorderHint: "그룹 안에서 드래그하거나 포커스 후 위 / 아래 키로 순서를 변경하세요.",
5841
+ moved: "{{name}}이(가) {{position}}번째로 이동했습니다.",
5842
+ groupSettings: "그룹 설정",
5843
+ connected: "연결됨",
5844
+ columnName: "이름",
5845
+ columnType: "유형",
5846
+ columnValue: "값"
4632
5847
  }
4633
5848
  },
4634
5849
  language: { label: "언어" },
@@ -4675,7 +5890,8 @@ var d = (e, t = {}, n = "") => {
4675
5890
  triggerNotFound: "이 Trigger가 없거나 삭제되었습니다. Trigger 목록을 새로 고치세요.",
4676
5891
  variableInvalid: "Variable 이름 또는 값이 올바르지 않습니다. 확인한 뒤 다시 시도하세요.",
4677
5892
  variableLimitReached: "이 배포에서 Variable이 한도에 도달했습니다.",
4678
- variableNotFound: "이 Variable이 없거나 삭제되었습니다. Variable 목록을 새로 고치세요."
5893
+ variableNotFound: "이 Variable이 없거나 삭제되었습니다. Variable 목록을 새로 고치세요.",
5894
+ connectorConsoleUnconfigured: "Connector 인증 콘솔 URL이 설정되지 않았습니다. 설정 → Connector → 인증 콘솔 URL에서 설정한 후 다시 시도하세요."
4679
5895
  },
4680
5896
  flowDeleted: "{{name}} 삭제를 완료했습니다.",
4681
5897
  flowDeleteAccepted: "{{name}}을(를) 삭제하는 중입니다.",
@@ -5231,6 +6447,192 @@ var d = (e, t = {}, n = "") => {
5231
6447
  deleteOne: "노드 1개 삭제",
5232
6448
  pasteOne: "노드 1개 붙여넣기",
5233
6449
  moveOne: "노드 1개 이동"
6450
+ },
6451
+ linearTrigger: {
6452
+ team: "팀",
6453
+ selectTeam: "팀 선택",
6454
+ connectFirst: "먼저 연결을 선택하세요.",
6455
+ loading: "불러오는 중…",
6456
+ noTeams: "접근 가능한 팀이 없습니다.",
6457
+ missingTeam: "선택한 팀을 사용할 수 없습니다. 다른 팀을 선택하세요.",
6458
+ loadFailed: "옵션을 불러오지 못했습니다.",
6459
+ retry: "다시 시도",
6460
+ statuses: "Issue 상태",
6461
+ selectTeamFirst: "먼저 팀을 선택하세요.",
6462
+ statusHint: "해당 상태로 전환될 때뿐 아니라 Issue 변경 시 현재 상태와 일치하는지 확인합니다.",
6463
+ allStatuses: "모든 상태",
6464
+ selectedCount: "상태 {{count}}개 선택됨",
6465
+ noStatuses: "사용 가능한 상태가 없습니다.",
6466
+ unavailableStatus: "사용할 수 없는 상태 ({{id}})",
6467
+ missingStatuses: "선택한 상태 중 일부를 사용할 수 없습니다. 삭제하거나 다시 선택하세요."
6468
+ },
6469
+ nodePicker: {
6470
+ actionGroups: {
6471
+ read: "읽기 작업",
6472
+ write: "쓰기 작업",
6473
+ destructive: "고위험 작업",
6474
+ other: "기타 작업"
6475
+ },
6476
+ builtInNodes: "기본 노드",
6477
+ configured: "설정 완료",
6478
+ configuredDescription: "계정이 설정되어 바로 사용할 수 있습니다.",
6479
+ builtInAccount: "기본 제공 계정",
6480
+ builtInAccountDescription: "OOMOL이 제공하는 계정을 사용합니다. 사용 시 크레딧이 차감됩니다.",
6481
+ noSetup: "설정 불필요",
6482
+ noSetupDescription: "계정을 설정하지 않고 바로 사용할 수 있습니다.",
6483
+ needsSetup: "설정 필요",
6484
+ needsSetupDescription: "계정을 추가하거나 다시 인증하면 사용할 수 있습니다.",
6485
+ clearSearch: "검색 지우기",
6486
+ search: "노드, 앱 또는 작업 검색…",
6487
+ apps: "앱",
6488
+ searching: "검색 중…",
6489
+ browseNodes: "모든 노드 보기",
6490
+ backToResults: "검색 결과로 돌아가기",
6491
+ back: "모든 노드로 돌아가기",
6492
+ results: "검색 결과",
6493
+ builtIn: "기본 제공"
6494
+ },
6495
+ eventSources: {
6496
+ required: "필수",
6497
+ optional: "선택",
6498
+ tenantHint: "저장할 때 선택한 연결에서 테넌트 정보를 자동으로 가져옵니다. Tenant Key를 입력할 필요가 없습니다.",
6499
+ secretsHint: "앱의 이벤트 및 콜백 암호화 설정에서 두 값을 복사하세요. 암호화된 콜백이 필요합니다. 수정 시 비워 두면 기존 키가 유지됩니다.",
6500
+ openConsole: "Feishu 개발자 콘솔 열기",
6501
+ defaultName: "Feishu 이벤트 소스",
6502
+ title: "이벤트 소스",
6503
+ description: "앱 이벤트를 수신하여 여러 Flow에서 공유합니다.",
6504
+ refresh: "새로 고침",
6505
+ add: "이벤트 소스 추가",
6506
+ loading: "이벤트 소스 로드 중…",
6507
+ empty: "이벤트 소스가 없습니다",
6508
+ emptyDescription: "Feishu 앱을 연결하여 이벤트가 발생하면 Flow를 시작합니다.",
6509
+ edit: "편집",
6510
+ disabled: "비활성화됨",
6511
+ unverified: "주소 확인 대기 중",
6512
+ ready: "콜백 검증 완료",
6513
+ disable: "비활성화",
6514
+ enable: "활성화",
6515
+ callback: "콜백 URL",
6516
+ originMissing: "먼저 배포 설정에서 Integration 공개 주소를 설정하세요.",
6517
+ connection: "연결",
6518
+ lastReceived: "마지막 이벤트 수신",
6519
+ never: "수신한 이벤트 없음",
6520
+ consumers: "게시된 Flow",
6521
+ noConsumers: "이 소스를 사용하는 게시된 Flow가 없습니다.",
6522
+ deleteConfirm: "이 이벤트 소스를 삭제할까요?",
6523
+ delete: "삭제",
6524
+ cancel: "취소",
6525
+ name: "이름",
6526
+ team: "Connector 팀",
6527
+ keepSecret: "비워 두면 저장된 값 유지",
6528
+ events: "수신할 이벤트",
6529
+ eventsHint: "수신할 이벤트를 선택하고 Feishu 앱에서도 해당 이벤트와 권한을 활성화하세요. 여기서 선택해도 앱은 자동 설정되지 않습니다. 동기 응답이 필요한 콜백은 지원하지 않습니다.",
6530
+ manageHint: "기존 구독 인계 및 게시된 Flow에서 더 이상 필요하지 않은 구독의 자동 정리를 포함하여 이 배포가 리소스 구독을 관리하도록 허용합니다.",
6531
+ save: "저장",
6532
+ invalid: "이벤트 소스 설정이 잘못되었습니다. 연결, 테넌트 및 필수 항목을 확인하세요.",
6533
+ notFound: "선택한 연결에서 이 소스를 사용할 수 없습니다.",
6534
+ conflict: "소스가 변경되었거나 사용 중입니다. 새로 고침 후 Flow와 구독을 확인하세요.",
6535
+ source: "이벤트 소스",
6536
+ noSources: "현재 Flow의 팀에 Feishu 이벤트 소스가 없습니다. 여기에서 만들 수 있습니다.",
6537
+ loadFailed: "이벤트 소스를 불러올 수 없습니다。",
6538
+ searchEvents: "이벤트 이름 또는 ID 검색",
6539
+ customEvent: "사용자 지정 이벤트 추가",
6540
+ addCustom: "추가",
6541
+ noEventMatches: "일치하는 이벤트 없음",
6542
+ chooseEvents: "이벤트를 하나 이상 선택하세요",
6543
+ customInvalid: "유효한 비동기 이벤트 ID를 입력하세요.",
6544
+ sourceEventsHint: "선택한 소스에서 허용한 이벤트만 선택할 수 있습니다.",
6545
+ eventUnavailable: "이 소스에서 허용하지 않는 이벤트입니다. 제거하거나 소스를 수정하세요.",
6546
+ eventGroups: {
6547
+ messages: "메시지",
6548
+ documents: "문서",
6549
+ base: "Base",
6550
+ calendar: "캘린더",
6551
+ approval: "승인",
6552
+ contacts: "연락처",
6553
+ custom: "사용자 지정 이벤트"
6554
+ },
6555
+ eventNames: {
6556
+ im_message_receive_v1: "메시지 수신",
6557
+ im_message_recalled_v1: "메시지 회수",
6558
+ im_message_reaction_created_v1: "반응 추가",
6559
+ im_chat_member_bot_added_v1: "봇이 그룹에 추가됨",
6560
+ drive_file_edit_v1: "문서 편집",
6561
+ drive_file_title_updated_v1: "문서 이름 변경",
6562
+ drive_file_created_in_folder_v1: "폴더에 파일 추가",
6563
+ drive_file_deleted_v1: "파일 삭제",
6564
+ drive_file_bitable_record_changed_v1: "Base 레코드 변경",
6565
+ drive_file_bitable_field_changed_v1: "Base 필드 변경",
6566
+ calendar_calendar_event_changed_v4: "일정 변경",
6567
+ calendar_calendar_changed_v4: "캘린더 변경",
6568
+ approval_instance_status_changed_v4: "승인 인스턴스 상태 변경",
6569
+ approval_task_status_changed_v4: "승인 작업 상태 변경",
6570
+ approval_instance: "승인 인스턴스 (레거시)",
6571
+ contact_user_created_v3: "직원 추가",
6572
+ contact_user_updated_v3: "직원 정보 변경",
6573
+ contact_user_deleted_v3: "직원 삭제"
6574
+ },
6575
+ identityUnavailable: "Connector가 검증된 앱 ID를 제공하지 않습니다. 업데이트 후 생성하세요.",
6576
+ selectApp: "Feishu 앱 선택",
6577
+ configureCallback: "콜백 설정",
6578
+ selectAppHint: "Feishu에서 기업 자체 앱을 만든 후 Connector의 Feishu App Bot을 선택해 App ID와 App Secret으로 연결하세요. Feishu 사용자 OAuth 연결은 대상이 아닙니다. 앱 생성 시 콜백 URL은 필요하지 않습니다.",
6579
+ configureCallbackHint: "Feishu의 이벤트 및 콜백 → 보안 설정에서 Verification Token을 확인하고 Encrypt Key를 설정하세요. 이 양식을 먼저 저장한 후 생성된 URL을 Feishu에 입력하세요.",
6580
+ feishuApp: "Feishu 앱 (Feishu App Bot)",
6581
+ noApplications: "이 팀에 활성 Feishu App Bot 연결이 없습니다. 먼저 앱을 연결하세요.",
6582
+ appSourceName: "{{name}} 이벤트",
6583
+ resourceManagement: "리소스 구독 관리",
6584
+ back: "이전",
6585
+ next: "다음",
6586
+ receiving: "이벤트 수신됨",
6587
+ create: "이벤트 소스 만들기",
6588
+ created: "이벤트 소스 생성 완료",
6589
+ flowCreateHint: "이벤트 소스는 현재 Flow의 팀에 속하며 여러 Flow에서 공유할 수 있습니다.",
6590
+ bindFailed: "이벤트 소스를 만들었지만 현재 노드에 연결하지 못했습니다. 다시 시도하세요.",
6591
+ useSource: "이 이벤트 소스 사용",
6592
+ verifyBeforePublish: "Flow 편집을 계속할 수 있습니다. 게시 전에 Feishu에서 콜백을 검증하세요.",
6593
+ setupCopy: "1. 콜백 URL 복사",
6594
+ setupFeishu: "2. Feishu에서 이벤트 구독 설정",
6595
+ setupVerify: "3. 여기로 돌아와 검증 결과 확인",
6596
+ copy: "복사",
6597
+ copied: "복사됨",
6598
+ copyFailed: "복사하지 못했습니다. URL을 선택하여 직접 복사하세요.",
6599
+ publicCallbackHint: "Feishu가 인터넷을 통해 접근할 수 있는 URL이어야 합니다. localhost와 사설 주소는 사용할 수 없습니다.",
6600
+ setupFeishuHint: "앱의 이벤트 및 콜백 → 이벤트 설정에서 개발자 서버로 전송을 선택하고 URL을 붙여 넣어 저장하세요. 아래 이벤트와 필요한 권한을 추가하고 Feishu 요구 사항에 따라 앱 버전을 게시하세요.",
6601
+ openFeishu: "Feishu 개발자 콘솔 열기",
6602
+ manualSubscriptionHint: "여기서 선택한 이벤트는 Feishu에 자동으로 추가되지 않습니다. Feishu 콘솔에서도 설정하세요.",
6603
+ awaitingVerification: "아직 콜백 검증을 받지 못했습니다. Feishu 설정을 마친 후 아래에서 확인하세요.",
6604
+ callbackVerified: "콜백이 검증되었습니다. 실제 이벤트 수신 여부는 소스의 수신 상태에서 확인하세요.",
6605
+ checkingVerification: "확인 중…",
6606
+ checkVerification: "검증 결과 확인",
6607
+ specifiedChats: "특정 대화 지정 (선택)",
6608
+ specifiedChatsHint: "한 줄에 chat_id 하나를 입력하세요. 비워 두면 앱에 권한이 있는 모든 대화가 대상입니다.",
6609
+ subscribeResource: "특정 리소스 구독",
6610
+ subscribeResourceHint: "선택 사항입니다. 게시 시 Feishu에 리소스 구독을 요청하고 이 Flow를 해당 리소스의 이벤트로 제한합니다.",
6611
+ managementRequired: "먼저 설정의 이벤트 소스에서 리소스 구독 관리를 활성화하세요.",
6612
+ incompatibleChats: "선택한 이벤트는 대화 필터를 지원하지 않습니다. 기존 조건을 삭제하세요.",
6613
+ incompatibleResource: "리소스가 선택한 이벤트와 일치하지 않습니다. 구독을 끄고 호환되는 이벤트를 선택하세요.",
6614
+ removeFilter: "필터 삭제",
6615
+ documentType: "문서 유형",
6616
+ documentTypes: {
6617
+ doc: "이전 문서",
6618
+ docx: "문서",
6619
+ sheet: "스프레드시트",
6620
+ bitable: "Base",
6621
+ file: "파일",
6622
+ folder: "폴더"
6623
+ },
6624
+ resourceIds: {
6625
+ document: "문서 토큰",
6626
+ calendar: "캘린더 ID",
6627
+ approval: "승인 정의 코드"
6628
+ },
6629
+ resourceHints: {
6630
+ document: "전체 URL 대신 문서 또는 Base 토큰을 입력하세요.",
6631
+ calendar: "일정 변경을 수신할 캘린더 ID를 입력하세요.",
6632
+ approval: "인스턴스 ID 대신 승인 정의 코드를 입력하세요. 이전 버전 승인 이벤트만 지원합니다."
6633
+ },
6634
+ connectApp: "Feishu App Bot 연결",
6635
+ connectAppHint: "새 탭에서 Connector를 엽니다. 현재 Flow의 팀을 사용하세요. 연결 후 돌아오면 목록이 자동으로 새로 고쳐집니다."
5234
6636
  }
5235
6637
  },
5236
6638
  ru: {
@@ -5254,7 +6656,7 @@ var d = (e, t = {}, n = "") => {
5254
6656
  javascriptDescription: "Создать JavaScript-скриптлет для этого узла.",
5255
6657
  llmChat: "Чат LLM",
5256
6658
  llmChatDescription: "Генерировать текстовый ответ по сообщениям и шаблону промпта.",
5257
- llmStructured: "Структурированный вывод LLM",
6659
+ llmStructured: "LLM JSON",
5258
6660
  llmStructuredDescription: "Генерировать структурированный JSON по сообщениям и шаблону промпта.",
5259
6661
  generatedResponse: "Сгенерированный ответ.",
5260
6662
  subflowDescription: "Добавить существующий Subflow.",
@@ -5267,7 +6669,7 @@ var d = (e, t = {}, n = "") => {
5267
6669
  triggers: "Triggers",
5268
6670
  value: "Фиксированные значения",
5269
6671
  valueDescription: "Задайте фиксированные значения, например текст или числа, для использования в последующих узлах.",
5270
- wait: "Ожидание",
6672
+ wait: "Ожидание подтверждения",
5271
6673
  waitDescription: "Приостановить Run, пока оператор не продолжит, не одобрит или не отклонит его.",
5272
6674
  webhook: "Webhook",
5273
6675
  webhookDescription: "Получать внешние события через выделенный HTTP-адрес.",
@@ -5326,7 +6728,9 @@ var d = (e, t = {}, n = "") => {
5326
6728
  noConnections: "Для этого Trigger нет доступных Connection.",
5327
6729
  retry: "Повторить",
5328
6730
  search: "Поиск узлов",
5329
- searchPlaceholder: "Поиск узлов…"
6731
+ searchPlaceholder: "Поиск узлов…",
6732
+ catalogRefreshFailed: "Не удалось обновить каталог триггеров. Сохранённые результаты остаются доступны.",
6733
+ resize: "Изменить ширину панели свойств"
5330
6734
  },
5331
6735
  empty: {
5332
6736
  loadFailedDescription: "Проверьте настройки API и убедитесь, что адрес развёртывания доступен.",
@@ -5517,6 +6921,16 @@ var d = (e, t = {}, n = "") => {
5517
6921
  preview: "Предпросмотр",
5518
6922
  duplicate: "Дублировать",
5519
6923
  delete: "Удалить"
6924
+ },
6925
+ ports: {
6926
+ reorder: "Изменить порядок {{name}}",
6927
+ reorderHint: "Перетащите внутри группы или используйте стрелки вверх / вниз при фокусе.",
6928
+ moved: "{{name}} перемещён на позицию {{position}}.",
6929
+ groupSettings: "Настройки группы",
6930
+ connected: "Подключено",
6931
+ columnName: "Имя",
6932
+ columnType: "Тип",
6933
+ columnValue: "Значение"
5520
6934
  }
5521
6935
  },
5522
6936
  language: { label: "Язык" },
@@ -5563,7 +6977,8 @@ var d = (e, t = {}, n = "") => {
5563
6977
  triggerNotFound: "Этот Trigger не существует или был удалён. Обновите список Trigger.",
5564
6978
  variableInvalid: "Имя или значение Variable недопустимо. Проверьте данные и повторите попытку.",
5565
6979
  variableLimitReached: "Достигнут предел Variable для этого развертывания.",
5566
- variableNotFound: "Эта Variable не существует или была удалена. Обновите список Variable."
6980
+ variableNotFound: "Эта Variable не существует или была удалена. Обновите список Variable.",
6981
+ connectorConsoleUnconfigured: "URL консоли авторизации Connector не настроен. Укажите его в разделе «Настройки → Connector → URL консоли авторизации» и повторите попытку."
5567
6982
  },
5568
6983
  flowDeleted: "Удалено: {{name}}.",
5569
6984
  flowDeleteAccepted: "Удаление {{name}}.",
@@ -6119,7 +7534,52 @@ var d = (e, t = {}, n = "") => {
6119
7534
  deleteOne: "Удалить узлы: 1",
6120
7535
  pasteOne: "Вставить узлы: 1",
6121
7536
  moveOne: "Переместить узлы: 1"
6122
- }
7537
+ },
7538
+ linearTrigger: {
7539
+ team: "Команда",
7540
+ selectTeam: "Выберите команду",
7541
+ connectFirst: "Сначала выберите подключение.",
7542
+ loading: "Загрузка…",
7543
+ noTeams: "Нет доступных команд.",
7544
+ missingTeam: "Выбранная команда больше недоступна. Выберите другую.",
7545
+ loadFailed: "Не удалось загрузить варианты.",
7546
+ retry: "Повторить",
7547
+ statuses: "Статусы задач",
7548
+ selectTeamFirst: "Сначала выберите команду.",
7549
+ statusHint: "Проверяется текущий статус при изменении задачи, а не только переход в этот статус.",
7550
+ allStatuses: "Все статусы",
7551
+ selectedCount: "Выбрано статусов: {{count}}",
7552
+ noStatuses: "Нет доступных статусов.",
7553
+ unavailableStatus: "Недоступный статус ({{id}})",
7554
+ missingStatuses: "Некоторые выбранные статусы больше недоступны. Удалите или замените их."
7555
+ },
7556
+ nodePicker: {
7557
+ actionGroups: {
7558
+ read: "Операции чтения",
7559
+ write: "Операции записи",
7560
+ destructive: "Операции высокого риска",
7561
+ other: "Другие операции"
7562
+ },
7563
+ builtInNodes: "Встроенные узлы",
7564
+ configured: "Настроено",
7565
+ configuredDescription: "Аккаунт настроен и готов к использованию.",
7566
+ builtInAccount: "Встроенный аккаунт",
7567
+ builtInAccountDescription: "Используется аккаунт OOMOL. При использовании списываются кредиты.",
7568
+ noSetup: "Без настройки",
7569
+ noSetupDescription: "Можно использовать без настройки аккаунта.",
7570
+ needsSetup: "Требуется настройка",
7571
+ needsSetupDescription: "Добавьте аккаунт или повторно авторизуйте его для использования этих приложений.",
7572
+ clearSearch: "Очистить поиск",
7573
+ search: "Поиск узлов, приложений и действий…",
7574
+ apps: "Приложения",
7575
+ searching: "Поиск…",
7576
+ browseNodes: "Просмотреть все узлы",
7577
+ backToResults: "Назад к результатам поиска",
7578
+ back: "Назад ко всем узлам",
7579
+ results: "Результаты поиска",
7580
+ builtIn: "Встроенные"
7581
+ },
7582
+ eventSources: /* @__PURE__ */ JSON.parse("{\"required\":\"Обязательно\",\"optional\":\"Необязательно\",\"tenantHint\":\"При сохранении организация определяется автоматически по выбранному подключению. Tenant Key вводить не нужно.\",\"secretsHint\":\"Скопируйте оба значения из настроек шифрования событий и обратных вызовов приложения. Требуются зашифрованные вызовы. При редактировании оставьте поле пустым, чтобы сохранить текущий ключ.\",\"openConsole\":\"Открыть консоль разработчика Feishu\",\"defaultName\":\"Источник событий Feishu\",\"title\":\"Источники событий\",\"description\":\"Принимайте события приложения и передавайте их нескольким Flow.\",\"refresh\":\"Обновить\",\"add\":\"Добавить источник\",\"loading\":\"Загрузка источников…\",\"empty\":\"Источников событий пока нет\",\"emptyDescription\":\"Подключите приложение Feishu для запуска Flow по событиям.\",\"edit\":\"Изменить\",\"disabled\":\"Отключён\",\"unverified\":\"Ожидается проверка адреса\",\"ready\":\"Обратный вызов проверен\",\"disable\":\"Отключить\",\"enable\":\"Включить\",\"callback\":\"URL обратного вызова\",\"originMissing\":\"Сначала настройте публичный адрес Integration в параметрах развёртывания.\",\"connection\":\"Подключение\",\"lastReceived\":\"Последнее полученное событие\",\"never\":\"Событий ещё нет\",\"consumers\":\"Опубликованные Flow\",\"noConsumers\":\"Ни один опубликованный Flow не использует этот источник.\",\"deleteConfirm\":\"Удалить этот источник?\",\"delete\":\"Удалить\",\"cancel\":\"Отмена\",\"name\":\"Название\",\"team\":\"Команда Connector\",\"keepSecret\":\"Оставьте пустым, чтобы сохранить значение\",\"events\":\"Принимаемые события\",\"eventsHint\":\"Выберите события и включите их с нужными разрешениями в Feishu. Этот выбор не настраивает приложение. Интерактивные вызовы с синхронным ответом не поддерживаются.\",\"manageHint\":\"Разрешить управление подписками на ресурсы, включая существующие подписки и их автоматическое удаление, когда они не нужны опубликованным Flow.\",\"save\":\"Сохранить\",\"invalid\":\"Неверные параметры источника. Проверьте подключение, организацию и обязательные поля.\",\"notFound\":\"Источник недоступен для выбранного подключения.\",\"conflict\":\"Источник изменён или используется. Обновите данные и проверьте Flow и подписки.\",\"source\":\"Источник событий\",\"noSources\":\"У команды этого Flow пока нет источников событий Feishu. Создайте источник здесь.\",\"loadFailed\":\"Не удалось загрузить источники.\",\"searchEvents\":\"Поиск по названию или ID\",\"customEvent\":\"Добавить свой тип события\",\"addCustom\":\"Добавить\",\"noEventMatches\":\"Нет подходящих событий\",\"chooseEvents\":\"Выберите хотя бы одно событие\",\"customInvalid\":\"Введите корректный ID асинхронного события.\",\"sourceEventsHint\":\"Доступны только события, разрешённые выбранным источником.\",\"eventUnavailable\":\"Событие не разрешено источником. Удалите его или обновите источник.\",\"eventGroups\":{\"messages\":\"Сообщения\",\"documents\":\"Документы\",\"base\":\"Base\",\"calendar\":\"Календарь\",\"approval\":\"Согласования\",\"contacts\":\"Контакты\",\"custom\":\"Свои события\"},\"eventNames\":{\"im_message_receive_v1\":\"Получено сообщение\",\"im_message_recalled_v1\":\"Сообщение отозвано\",\"im_message_reaction_created_v1\":\"Добавлена реакция\",\"im_chat_member_bot_added_v1\":\"Бот добавлен в группу\",\"drive_file_edit_v1\":\"Документ изменён\",\"drive_file_title_updated_v1\":\"Документ переименован\",\"drive_file_created_in_folder_v1\":\"Файл добавлен в папку\",\"drive_file_deleted_v1\":\"Файл удалён\",\"drive_file_bitable_record_changed_v1\":\"Записи Base изменены\",\"drive_file_bitable_field_changed_v1\":\"Поля Base изменены\",\"calendar_calendar_event_changed_v4\":\"Событие календаря изменено\",\"calendar_calendar_changed_v4\":\"Календарь изменён\",\"approval_instance_status_changed_v4\":\"Статус экземпляра согласования изменён\",\"approval_task_status_changed_v4\":\"Статус задачи согласования изменён\",\"approval_instance\":\"Экземпляр согласования (старый формат)\",\"contact_user_created_v3\":\"Сотрудник добавлен\",\"contact_user_updated_v3\":\"Данные сотрудника обновлены\",\"contact_user_deleted_v3\":\"Сотрудник удалён\"},\"identityUnavailable\":\"Connector не предоставляет проверенный ID приложения. Обновите Connector перед созданием источника.\",\"selectApp\":\"Выберите приложение Feishu\",\"configureCallback\":\"Настройте обратный вызов\",\"selectAppHint\":\"Создайте корпоративное приложение в Feishu, затем выберите Feishu App Bot в Connector и подключитесь через App ID и App Secret. Пользовательские OAuth-подключения Feishu здесь не используются. Для создания приложения URL callback не нужен.\",\"configureCallbackHint\":\"Получите Verification Token и настройте Encrypt Key в разделе «События и callback → Настройки безопасности». Сохраните эту форму, затем укажите полученный URL в Feishu.\",\"feishuApp\":\"Приложение Feishu (Feishu App Bot)\",\"noApplications\":\"В этой команде нет активных подключений Feishu App Bot. Сначала подключите приложение.\",\"appSourceName\":\"События {{name}}\",\"resourceManagement\":\"Управление подписками на ресурсы\",\"back\":\"Назад\",\"next\":\"Далее\",\"receiving\":\"События получены\",\"create\":\"Создать источник событий\",\"created\":\"Источник событий создан\",\"flowCreateHint\":\"Источник принадлежит команде текущего Flow и доступен нескольким Flow.\",\"bindFailed\":\"Источник создан, но его не удалось связать с узлом. Повторите попытку.\",\"useSource\":\"Использовать этот источник\",\"verifyBeforePublish\":\"Можно продолжить редактирование Flow. Перед публикацией подтвердите callback в Feishu.\",\"setupCopy\":\"1. Скопируйте URL callback\",\"setupFeishu\":\"2. Настройте подписки в Feishu\",\"setupVerify\":\"3. Вернитесь сюда для проверки\",\"copy\":\"Копировать\",\"copied\":\"Скопировано\",\"copyFailed\":\"Не удалось скопировать. Выделите URL и скопируйте вручную.\",\"publicCallbackHint\":\"URL должен быть доступен Feishu через интернет. Localhost и частные адреса не подходят.\",\"setupFeishuHint\":\"В приложении откройте «События и callback → Настройка событий», выберите отправку на сервер разработчика, вставьте URL и сохраните. Добавьте события ниже и необходимые разрешения, затем опубликуйте версию по требованиям Feishu.\",\"openFeishu\":\"Открыть консоль Feishu\",\"manualSubscriptionHint\":\"Выбор здесь не добавляет события в Feishu автоматически. Настройте их также в консоли Feishu.\",\"awaitingVerification\":\"Подтверждение callback ещё не получено. Завершите настройку в Feishu и проверьте результат ниже.\",\"callbackVerified\":\"Callback подтверждён. Поступление рабочих событий смотрите в статусе приёма источника.\",\"checkingVerification\":\"Проверка…\",\"checkVerification\":\"Проверить callback\",\"specifiedChats\":\"Конкретные чаты (необязательно)\",\"specifiedChatsHint\":\"Один chat_id в каждой строке. Пустое поле означает все чаты, доступные приложению.\",\"subscribeResource\":\"Подписаться на конкретный ресурс\",\"subscribeResourceHint\":\"Необязательно. При публикации будет запрошена подписка Feishu, и Flow будет получать только события этого ресурса.\",\"managementRequired\":\"Сначала включите управление подписками у этого источника в настройках.\",\"incompatibleChats\":\"Выбранные события не поддерживают фильтр чатов. Удалите прежний фильтр.\",\"incompatibleResource\":\"Ресурс не соответствует событиям. Отключите подписку и выберите совместимые события.\",\"removeFilter\":\"Удалить фильтр\",\"documentType\":\"Тип документа\",\"documentTypes\":{\"doc\":\"Старый документ\",\"docx\":\"Документ\",\"sheet\":\"Таблица\",\"bitable\":\"Base\",\"file\":\"Файл\",\"folder\":\"Папка\"},\"resourceIds\":{\"document\":\"Токен документа\",\"calendar\":\"ID календаря\",\"approval\":\"Код определения согласования\"},\"resourceHints\":{\"document\":\"Введите токен документа или Base, а не полный URL.\",\"calendar\":\"Введите ID календаря для отслеживания изменений встреч.\",\"approval\":\"Введите код определения, а не ID экземпляра. Поддерживаются только старые бизнес-события согласования.\"},\"connectApp\":\"Подключить Feishu App Bot\",\"connectAppHint\":\"Connector откроется в новой вкладке. Используйте команду текущего Flow. После подключения и возвращения список обновится автоматически.\"}")
6123
7583
  },
6124
7584
  fr: {
6125
7585
  addNode: {
@@ -6142,7 +7602,7 @@ var d = (e, t = {}, n = "") => {
6142
7602
  javascriptDescription: "Créer un mini-script JavaScript pour ce nœud.",
6143
7603
  llmChat: "Conversation LLM",
6144
7604
  llmChatDescription: "Générer une réponse texte à partir de messages et d'un modèle de prompt.",
6145
- llmStructured: "Sortie structurée LLM",
7605
+ llmStructured: "LLM JSON",
6146
7606
  llmStructuredDescription: "Générer du JSON structuré à partir de messages et d'un modèle de prompt.",
6147
7607
  generatedResponse: "Réponse générée.",
6148
7608
  subflowDescription: "Ajouter un Subflow existant.",
@@ -6155,7 +7615,7 @@ var d = (e, t = {}, n = "") => {
6155
7615
  triggers: "Triggers",
6156
7616
  value: "Valeurs fixes",
6157
7617
  valueDescription: "Définir des valeurs fixes, comme du texte ou des nombres, à utiliser par les nœuds en aval.",
6158
- wait: "Attente",
7618
+ wait: "Attendre une confirmation",
6159
7619
  waitDescription: "Mettre le Run en pause jusqu’à ce qu’un opérateur le poursuive ou l’approuve.",
6160
7620
  webhook: "Webhook",
6161
7621
  webhookDescription: "Recevoir des événements externes via un point de terminaison HTTP dédié.",
@@ -6214,7 +7674,9 @@ var d = (e, t = {}, n = "") => {
6214
7674
  noConnections: "Aucune Connection n'est disponible pour ce Trigger.",
6215
7675
  retry: "Réessayer",
6216
7676
  search: "Rechercher des blocs",
6217
- searchPlaceholder: "Rechercher des blocs…"
7677
+ searchPlaceholder: "Rechercher des blocs…",
7678
+ catalogRefreshFailed: "Impossible d’actualiser le catalogue des déclencheurs. Les résultats en cache restent disponibles.",
7679
+ resize: "Redimensionner le panneau de propriétés"
6218
7680
  },
6219
7681
  empty: {
6220
7682
  loadFailedDescription: "Vérifiez la configuration de l'API et assurez-vous que le point de terminaison de déploiement est accessible.",
@@ -6405,6 +7867,16 @@ var d = (e, t = {}, n = "") => {
6405
7867
  preview: "Aperçu",
6406
7868
  duplicate: "Dupliquer",
6407
7869
  delete: "Supprimer"
7870
+ },
7871
+ ports: {
7872
+ reorder: "Réordonner {{name}}",
7873
+ reorderHint: "Glissez dans le groupe ou utilisez les flèches haut / bas au clavier.",
7874
+ moved: "{{name}} déplacé en position {{position}}.",
7875
+ groupSettings: "Paramètres du groupe",
7876
+ connected: "Connecté",
7877
+ columnName: "Nom",
7878
+ columnType: "Type",
7879
+ columnValue: "Valeur"
6408
7880
  }
6409
7881
  },
6410
7882
  language: { label: "Langue" },
@@ -6451,7 +7923,8 @@ var d = (e, t = {}, n = "") => {
6451
7923
  triggerNotFound: "Ce Trigger n’existe pas ou a été supprimé. Actualisez la liste des Triggers.",
6452
7924
  variableInvalid: "Le nom ou la valeur de la Variable n’est pas valide. Vérifiez-la, puis réessayez.",
6453
7925
  variableLimitReached: "Ce déploiement a atteint sa limite de Variables.",
6454
- variableNotFound: "Cette Variable n’existe pas ou a été supprimée. Actualisez la liste des Variables."
7926
+ variableNotFound: "Cette Variable n’existe pas ou a été supprimée. Actualisez la liste des Variables.",
7927
+ connectorConsoleUnconfigured: "L’URL de la console d’autorisation Connector n’est pas configurée. Renseignez-la dans Paramètres → Connector → URL de la console d’autorisation, puis réessayez."
6455
7928
  },
6456
7929
  flowDeleted: "{{name}} supprimé.",
6457
7930
  flowDeleteAccepted: "Suppression de {{name}}.",
@@ -7007,15 +8480,268 @@ var d = (e, t = {}, n = "") => {
7007
8480
  deleteOne: "Supprimer 1 nœuds",
7008
8481
  pasteOne: "Coller 1 nœuds",
7009
8482
  moveOne: "Déplacer 1 nœuds"
8483
+ },
8484
+ linearTrigger: {
8485
+ team: "Équipe",
8486
+ selectTeam: "Choisir une équipe",
8487
+ connectFirst: "Choisissez d’abord une connexion.",
8488
+ loading: "Chargement…",
8489
+ noTeams: "Aucune équipe accessible.",
8490
+ missingTeam: "L’équipe sélectionnée n’est plus disponible. Choisissez-en une autre.",
8491
+ loadFailed: "Impossible de charger les options.",
8492
+ retry: "Réessayer",
8493
+ statuses: "Statuts des issues",
8494
+ selectTeamFirst: "Choisissez d’abord une équipe.",
8495
+ statusHint: "Correspond au statut actuel lors d’une modification, pas uniquement aux transitions vers ce statut.",
8496
+ allStatuses: "Tous les statuts",
8497
+ selectedCount: "{{count}} statuts sélectionnés",
8498
+ noStatuses: "Aucun statut disponible.",
8499
+ unavailableStatus: "Statut indisponible ({{id}})",
8500
+ missingStatuses: "Certains statuts sélectionnés ne sont plus disponibles. Supprimez-les ou remplacez-les."
8501
+ },
8502
+ nodePicker: {
8503
+ actionGroups: {
8504
+ read: "Actions de lecture",
8505
+ write: "Actions d’écriture",
8506
+ destructive: "Actions à haut risque",
8507
+ other: "Autres actions"
8508
+ },
8509
+ builtInNodes: "Nœuds intégrés",
8510
+ configured: "Configurées",
8511
+ configuredDescription: "Un compte est configuré et prêt à être utilisé.",
8512
+ builtInAccount: "Compte intégré",
8513
+ builtInAccountDescription: "Utilise un compte fourni par OOMOL. Son utilisation consomme des crédits.",
8514
+ noSetup: "Sans configuration",
8515
+ noSetupDescription: "Prêt à utiliser sans configurer de compte.",
8516
+ needsSetup: "À configurer",
8517
+ needsSetupDescription: "Ajoutez un compte ou renouvelez son autorisation pour utiliser ces applications.",
8518
+ clearSearch: "Effacer la recherche",
8519
+ search: "Rechercher des nœuds, applications ou actions…",
8520
+ apps: "Applications",
8521
+ searching: "Recherche en cours…",
8522
+ browseNodes: "Parcourir tous les nœuds",
8523
+ backToResults: "Retour aux résultats de recherche",
8524
+ back: "Retour à tous les nœuds",
8525
+ results: "Résultats",
8526
+ builtIn: "Intégrés"
8527
+ },
8528
+ eventSources: {
8529
+ required: "Obligatoire",
8530
+ optional: "Facultatif",
8531
+ tenantHint: "Le tenant est récupéré automatiquement depuis la connexion sélectionnée lors de l’enregistrement.",
8532
+ secretsHint: "Copiez ces deux valeurs depuis les paramètres de chiffrement des événements et rappels de l’application. Les rappels chiffrés sont requis. Lors d’une modification, laissez un secret vide pour conserver sa valeur.",
8533
+ openConsole: "Ouvrir la console développeur Feishu",
8534
+ defaultName: "Source d’événements Feishu",
8535
+ title: "Sources d’événements",
8536
+ description: "Recevez les événements d’une application et partagez-les entre plusieurs Flows.",
8537
+ refresh: "Actualiser",
8538
+ add: "Ajouter une source",
8539
+ loading: "Chargement des sources…",
8540
+ empty: "Aucune source d’événements",
8541
+ emptyDescription: "Connectez une application Feishu pour démarrer des Flows lors d’événements.",
8542
+ edit: "Modifier",
8543
+ disabled: "Désactivée",
8544
+ unverified: "Vérification de l’adresse en attente",
8545
+ ready: "Rappel vérifié",
8546
+ disable: "Désactiver",
8547
+ enable: "Activer",
8548
+ callback: "URL de rappel",
8549
+ originMissing: "Configurez d’abord l’URL publique Integration dans les paramètres du déploiement.",
8550
+ connection: "Connexion",
8551
+ lastReceived: "Dernier événement reçu",
8552
+ never: "Aucun événement reçu",
8553
+ consumers: "Flows publiés",
8554
+ noConsumers: "Aucun Flow publié n’utilise cette source.",
8555
+ deleteConfirm: "Supprimer cette source ?",
8556
+ delete: "Supprimer",
8557
+ cancel: "Annuler",
8558
+ name: "Nom",
8559
+ team: "Équipe Connector",
8560
+ keepSecret: "Laisser vide pour conserver la valeur enregistrée",
8561
+ events: "Événements à recevoir",
8562
+ eventsHint: "Sélectionnez les événements à recevoir et activez les mêmes événements et autorisations dans Feishu. Ce choix ne configure pas l’application. Les rappels interactifs synchrones ne sont pas pris en charge.",
8563
+ manageHint: "Autoriser ce déploiement à gérer les abonnements aux ressources, y compris les abonnements existants et leur suppression automatique lorsqu’aucun Flow publié ne les utilise.",
8564
+ save: "Enregistrer",
8565
+ invalid: "Configuration invalide. Vérifiez la connexion, le tenant et les champs obligatoires.",
8566
+ notFound: "Cette source n’est pas disponible pour la connexion sélectionnée.",
8567
+ conflict: "La source a changé ou est utilisée. Actualisez et vérifiez les Flows et abonnements concernés.",
8568
+ source: "Source d’événements",
8569
+ noSources: "L’équipe de ce Flow ne possède aucune source Feishu. Vous pouvez en créer une ici.",
8570
+ loadFailed: "Impossible de charger les sources.",
8571
+ searchEvents: "Rechercher un nom ou un identifiant",
8572
+ customEvent: "Ajouter un type personnalisé",
8573
+ addCustom: "Ajouter",
8574
+ noEventMatches: "Aucun événement correspondant",
8575
+ chooseEvents: "Sélectionnez au moins un événement",
8576
+ customInvalid: "Saisissez un identifiant d’événement asynchrone valide.",
8577
+ sourceEventsHint: "Seuls les événements autorisés par cette source sont disponibles.",
8578
+ eventUnavailable: "Événement non autorisé par cette source. Supprimez-le ou modifiez la source.",
8579
+ eventGroups: {
8580
+ messages: "Messages",
8581
+ documents: "Documents",
8582
+ base: "Base",
8583
+ calendar: "Calendrier",
8584
+ approval: "Approbations",
8585
+ contacts: "Contacts",
8586
+ custom: "Événements personnalisés"
8587
+ },
8588
+ eventNames: {
8589
+ im_message_receive_v1: "Message reçu",
8590
+ im_message_recalled_v1: "Message retiré",
8591
+ im_message_reaction_created_v1: "Réaction ajoutée",
8592
+ im_chat_member_bot_added_v1: "Bot ajouté au groupe",
8593
+ drive_file_edit_v1: "Document modifié",
8594
+ drive_file_title_updated_v1: "Document renommé",
8595
+ drive_file_created_in_folder_v1: "Fichier ajouté au dossier",
8596
+ drive_file_deleted_v1: "Fichier supprimé",
8597
+ drive_file_bitable_record_changed_v1: "Enregistrements Base modifiés",
8598
+ drive_file_bitable_field_changed_v1: "Champs Base modifiés",
8599
+ calendar_calendar_event_changed_v4: "Événement de calendrier modifié",
8600
+ calendar_calendar_changed_v4: "Calendrier modifié",
8601
+ approval_instance_status_changed_v4: "Statut de l’instance d’approbation modifié",
8602
+ approval_task_status_changed_v4: "Statut de la tâche d’approbation modifié",
8603
+ approval_instance: "Instance d’approbation (ancien format)",
8604
+ contact_user_created_v3: "Employé ajouté",
8605
+ contact_user_updated_v3: "Employé mis à jour",
8606
+ contact_user_deleted_v3: "Employé supprimé"
8607
+ },
8608
+ identityUnavailable: "Ce Connector ne fournit pas d’identifiant d’application vérifié. Mettez-le à jour avant de créer la source.",
8609
+ selectApp: "Choisir une application Feishu",
8610
+ configureCallback: "Configurer le rappel",
8611
+ selectAppHint: "Créez une application d’entreprise dans Feishu, puis choisissez Feishu App Bot dans Connector et utilisez son App ID et son App Secret. Les connexions OAuth utilisateur Feishu ne sont pas utilisées ici. Aucun callback n’est nécessaire pour créer l’application.",
8612
+ configureCallbackHint: "Récupérez le Verification Token et configurez l’Encrypt Key dans Événements et callbacks → Paramètres de sécurité. Enregistrez ce formulaire, puis renseignez l’URL générée dans Feishu.",
8613
+ feishuApp: "Application Feishu (Feishu App Bot)",
8614
+ noApplications: "Cette équipe ne possède aucune connexion Feishu App Bot active. Connectez une application pour continuer.",
8615
+ appSourceName: "Événements {{name}}",
8616
+ resourceManagement: "Gestion des abonnements aux ressources",
8617
+ back: "Retour",
8618
+ next: "Suivant",
8619
+ receiving: "Événements reçus",
8620
+ create: "Créer une source d’événements",
8621
+ created: "Source d’événements créée",
8622
+ flowCreateHint: "Cette source appartient à l’équipe du Flow actuel et peut être partagée par plusieurs Flows.",
8623
+ bindFailed: "La source a été créée, mais son association au nœud a échoué. Réessayez.",
8624
+ useSource: "Utiliser cette source",
8625
+ verifyBeforePublish: "Vous pouvez continuer à modifier le Flow. Validez le callback dans Feishu avant de publier.",
8626
+ setupCopy: "1. Copier l’URL de callback",
8627
+ setupFeishu: "2. Configurer les abonnements dans Feishu",
8628
+ setupVerify: "3. Revenir ici pour vérifier",
8629
+ copy: "Copier",
8630
+ copied: "Copié",
8631
+ copyFailed: "Échec de la copie. Sélectionnez l’URL et copiez-la manuellement.",
8632
+ publicCallbackHint: "Cette URL doit être accessible à Feishu sur Internet. Les adresses privées et localhost ne conviennent pas.",
8633
+ setupFeishuHint: "Dans Événements et callbacks → Configuration des événements, choisissez l’envoi vers votre serveur, collez l’URL et enregistrez. Ajoutez les événements ci-dessous et leurs permissions, puis publiez une version selon les exigences de Feishu.",
8634
+ openFeishu: "Ouvrir la console Feishu",
8635
+ manualSubscriptionHint: "La sélection ici n’ajoute pas les événements dans Feishu. Configurez-les aussi dans sa console.",
8636
+ awaitingVerification: "Aucune vérification reçue. Terminez la configuration dans Feishu, puis vérifiez ci-dessous.",
8637
+ callbackVerified: "Callback vérifié. Consultez l’état de réception de la source pour savoir si des événements métier sont arrivés.",
8638
+ checkingVerification: "Vérification…",
8639
+ checkVerification: "Vérifier le callback",
8640
+ specifiedChats: "Conversations précises (facultatif)",
8641
+ specifiedChatsHint: "Saisissez un chat_id par ligne. Laissez vide pour toutes les conversations accessibles à l’application.",
8642
+ subscribeResource: "S’abonner à une ressource précise",
8643
+ subscribeResourceHint: "Facultatif. La publication demandera un abonnement Feishu à cette ressource et limitera ce Flow à ses événements.",
8644
+ managementRequired: "Activez d’abord la gestion des abonnements de cette source dans les paramètres.",
8645
+ incompatibleChats: "Ces événements ne permettent pas de filtrer les conversations. Supprimez le filtre précédent.",
8646
+ incompatibleResource: "La ressource ne correspond pas aux événements. Désactivez l’abonnement et choisissez des événements compatibles.",
8647
+ removeFilter: "Supprimer le filtre",
8648
+ documentType: "Type de document",
8649
+ documentTypes: {
8650
+ doc: "Ancien document",
8651
+ docx: "Document",
8652
+ sheet: "Tableur",
8653
+ bitable: "Base",
8654
+ file: "Fichier",
8655
+ folder: "Dossier"
8656
+ },
8657
+ resourceIds: {
8658
+ document: "Token du document",
8659
+ calendar: "ID du calendrier",
8660
+ approval: "Code de définition d’approbation"
8661
+ },
8662
+ resourceHints: {
8663
+ document: "Saisissez le token du document ou de la Base, pas son URL complète.",
8664
+ calendar: "Saisissez l’ID du calendrier dont vous souhaitez suivre les changements de rendez-vous.",
8665
+ approval: "Saisissez le code de définition, pas un ID d’instance. Seuls les anciens événements métier d’approbation sont pris en charge."
8666
+ },
8667
+ connectApp: "Connecter Feishu App Bot",
8668
+ connectAppHint: "Connector s’ouvre dans un nouvel onglet. Utilisez l’équipe de ce Flow ; la liste sera actualisée à votre retour après la connexion."
7010
8669
  }
7011
8670
  }
7012
- }, _ = Object.fromEntries(a.map((e) => [e, {
7013
- ...g[e],
7014
- ...h[e],
7015
- ...m[e]
8671
+ }, le = Object.fromEntries(M.map((e) => [e, {
8672
+ ...ce[e],
8673
+ ...se[e],
8674
+ ...oe[e]
7016
8675
  }]));
7017
- function v(e = "en") {
7018
- return new p(o([e]), _);
8676
+ function ue(e = "en") {
8677
+ return new ae(N([e]), le);
8678
+ }
8679
+ //#endregion
8680
+ //#region ../../node_modules/.bun/@base-ui+react@1.4.1+fa6c2f29eeb10566/node_modules/@base-ui/react/esm/utils/popups/useTriggerFocusGuards.js
8681
+ function de(e, t) {
8682
+ let n = F.useRef(null);
8683
+ return {
8684
+ preFocusGuardRef: n,
8685
+ handlePreFocusGuardFocus: b((t) => {
8686
+ I.flushSync(() => {
8687
+ e.setOpen(!1, x(_, t.nativeEvent, t.currentTarget));
8688
+ }), w(n.current)?.focus();
8689
+ }),
8690
+ handleFocusTargetFocus: b((n) => {
8691
+ let i = e.select("positionerElement");
8692
+ if (i && u(n, i)) e.context.beforeContentFocusGuardRef.current?.focus();
8693
+ else {
8694
+ I.flushSync(() => {
8695
+ e.setOpen(!1, x(_, n.nativeEvent, n.currentTarget));
8696
+ });
8697
+ let a = r(e.context.triggerFocusTargetRef.current || t.current);
8698
+ for (; a !== null && h(i, a);) {
8699
+ let e = a;
8700
+ if (a = T(a), a === e) break;
8701
+ }
8702
+ a?.focus();
8703
+ }
8704
+ })
8705
+ };
8706
+ }
8707
+ //#endregion
8708
+ //#region src/ui/browser/input-group.tsx
8709
+ function fe({ className: e, ...t }) {
8710
+ return /* @__PURE__ */ P("div", {
8711
+ "data-slot": "input-group",
8712
+ role: "group",
8713
+ className: j("group/input-group relative flex h-8 w-full min-w-0 items-center rounded-[var(--ui-control-radius,calc(var(--ui-radius)_+_2px))] border border-input bg-[var(--ui-control-background,var(--ui-muted))] transition-colors outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:outline-none has-disabled:bg-input/50 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:text-field-focus has-[[data-slot][aria-invalid=true]]:has-[[data-slot=input-group-control]:focus-visible]:text-field-focus has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto dark:bg-[var(--ui-control-background,var(--ui-muted))] dark:has-disabled:bg-input/80 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5", e),
8714
+ ...t
8715
+ });
8716
+ }
8717
+ var pe = i("flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium text-muted-foreground select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4", {
8718
+ variants: { align: {
8719
+ "inline-start": "order-first pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem]",
8720
+ "inline-end": "order-last pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem]",
8721
+ "block-start": "order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2",
8722
+ "block-end": "order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2"
8723
+ } },
8724
+ defaultVariants: { align: "inline-start" }
8725
+ });
8726
+ function me({ className: e, align: t = "inline-start", ...n }) {
8727
+ return /* @__PURE__ */ P("div", {
8728
+ role: "group",
8729
+ "data-slot": "input-group-addon",
8730
+ "data-align": t,
8731
+ className: j(pe({ align: t }), e),
8732
+ onClick: (e) => {
8733
+ e.target.closest("button") || e.currentTarget.parentElement?.querySelector("input")?.focus();
8734
+ },
8735
+ ...n
8736
+ });
7019
8737
  }
8738
+ var he = F.forwardRef(function({ className: e, ...t }, n) {
8739
+ return /* @__PURE__ */ P(o, {
8740
+ ref: n,
8741
+ "data-slot": "input-group-control",
8742
+ className: j("flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:outline-none disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent", e),
8743
+ ...t
8744
+ });
8745
+ });
7020
8746
  //#endregion
7021
- export { c as i, h as n, p as r, v as t };
8747
+ export { ue as a, ne as c, R as d, de as i, q as l, me as n, se as o, he as r, ae as s, fe as t, K as u };