@alfadocs/ui-kit 0.95.0 → 0.96.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/_chunks/signature-request-BzXTV_RH.js +403 -0
  2. package/dist/agent-catalog.json +10 -6
  3. package/dist/agent-i18n/en.json +1 -1
  4. package/dist/i18n/locales/ar.d.ts +3 -1
  5. package/dist/i18n/locales/ar.js +3 -1
  6. package/dist/i18n/locales/de.d.ts +3 -1
  7. package/dist/i18n/locales/de.js +3 -1
  8. package/dist/i18n/locales/el.d.ts +3 -1
  9. package/dist/i18n/locales/el.js +3 -1
  10. package/dist/i18n/locales/en.d.ts +3 -1
  11. package/dist/i18n/locales/en.js +3 -1
  12. package/dist/i18n/locales/es.d.ts +3 -1
  13. package/dist/i18n/locales/es.js +3 -1
  14. package/dist/i18n/locales/fr.d.ts +3 -1
  15. package/dist/i18n/locales/fr.js +3 -1
  16. package/dist/i18n/locales/hi.d.ts +3 -1
  17. package/dist/i18n/locales/hi.js +3 -1
  18. package/dist/i18n/locales/it.d.ts +3 -1
  19. package/dist/i18n/locales/it.js +3 -1
  20. package/dist/i18n/locales/ja.d.ts +3 -1
  21. package/dist/i18n/locales/ja.js +3 -1
  22. package/dist/i18n/locales/nl.d.ts +3 -1
  23. package/dist/i18n/locales/nl.js +3 -1
  24. package/dist/i18n/locales/pl.d.ts +3 -1
  25. package/dist/i18n/locales/pl.js +3 -1
  26. package/dist/i18n/locales/pt.d.ts +3 -1
  27. package/dist/i18n/locales/pt.js +3 -1
  28. package/dist/i18n/locales/ro.d.ts +3 -1
  29. package/dist/i18n/locales/ro.js +3 -1
  30. package/dist/i18n/locales/ru.d.ts +3 -1
  31. package/dist/i18n/locales/ru.js +3 -1
  32. package/dist/i18n/locales/sq.d.ts +3 -1
  33. package/dist/i18n/locales/sq.js +3 -1
  34. package/dist/i18n/locales/sv.d.ts +3 -1
  35. package/dist/i18n/locales/sv.js +3 -1
  36. package/dist/i18n/locales/tr.d.ts +3 -1
  37. package/dist/i18n/locales/tr.js +3 -1
  38. package/dist/i18n/locales/zh.d.ts +3 -1
  39. package/dist/i18n/locales/zh.js +3 -1
  40. package/dist/index.js +1 -1
  41. package/dist/locales/ar.json +3 -1
  42. package/dist/locales/de.json +3 -1
  43. package/dist/locales/el.json +3 -1
  44. package/dist/locales/en.json +3 -1
  45. package/dist/locales/es.json +3 -1
  46. package/dist/locales/fr.json +3 -1
  47. package/dist/locales/hi.json +3 -1
  48. package/dist/locales/it.json +3 -1
  49. package/dist/locales/ja.json +3 -1
  50. package/dist/locales/nl.json +3 -1
  51. package/dist/locales/pl.json +3 -1
  52. package/dist/locales/pt.json +3 -1
  53. package/dist/locales/ro.json +3 -1
  54. package/dist/locales/ru.json +3 -1
  55. package/dist/locales/sq.json +3 -1
  56. package/dist/locales/sv.json +3 -1
  57. package/dist/locales/tr.json +3 -1
  58. package/dist/locales/zh.json +3 -1
  59. package/dist/patterns/signature-request/index.d.ts +1 -1
  60. package/dist/patterns/signature-request/index.js +1 -1
  61. package/dist/patterns/signature-request/signature-request.d.ts +30 -3
  62. package/package.json +1 -1
  63. package/dist/_chunks/signature-request-D_6jgDZd.js +0 -324
@@ -0,0 +1,403 @@
1
+ import { jsx as a, jsxs as r } from "react/jsx-runtime";
2
+ import { forwardRef as pe, useRef as A, useState as S, useEffect as J } from "react";
3
+ import { useTranslation as ve } from "react-i18next";
4
+ import { D as m } from "./dialog-UbKJCi1X.js";
5
+ import { B as k } from "./button-CPGiR_bH.js";
6
+ import { I as ge } from "./icon-button-C_kbcd7I.js";
7
+ import { C as K } from "./checkbox-BuZ1u__2.js";
8
+ import { a as fe } from "./whatsapp-button-BIy6NaJK.js";
9
+ import { S as Q } from "./select-BW5ecXlX.js";
10
+ import { S as xe } from "./switch-OILsBLWo.js";
11
+ import { A as y } from "./alert-Cxaqd-QO.js";
12
+ import { I as Re } from "./info-tip-Bxk3w6UM.js";
13
+ import { S as be } from "./separator-CYU_bGFn.js";
14
+ import { A as Y } from "./avatar-BNQNhoyL.js";
15
+ import { c as ae } from "./createLucideIcon-DhHxpK9K.js";
16
+ import { P as qe } from "./plus-DzMQ_c6b.js";
17
+ import { X as Ne } from "./x-B5YnXwCz.js";
18
+ import { P as we } from "./pen-line-D0De5zdl.js";
19
+ import { M as Ce } from "./mail-BqXVF2zH.js";
20
+ import { M as Ie } from "./message-square-Bye4ATvx.js";
21
+ /**
22
+ * @license lucide-react v1.22.0 - ISC
23
+ *
24
+ * This source code is licensed under the ISC license.
25
+ * See the LICENSE file in the root directory of this source tree.
26
+ */
27
+ const Se = [
28
+ ["rect", { width: "16", height: "20", x: "4", y: "2", rx: "2", ry: "2", key: "76otgf" }],
29
+ ["line", { x1: "12", x2: "12.01", y1: "18", y2: "18", key: "1dp563" }]
30
+ ], ke = ae("tablet", Se);
31
+ /**
32
+ * @license lucide-react v1.22.0 - ISC
33
+ *
34
+ * This source code is licensed under the ISC license.
35
+ * See the LICENSE file in the root directory of this source tree.
36
+ */
37
+ const ye = [
38
+ ["path", { d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2", key: "1yyitq" }],
39
+ ["circle", { cx: "9", cy: "7", r: "4", key: "nufk8" }],
40
+ ["line", { x1: "19", x2: "19", y1: "8", y2: "14", key: "1bvyxn" }],
41
+ ["line", { x1: "22", x2: "16", y1: "11", y2: "11", key: "1shjgl" }]
42
+ ], ze = ae("user-plus", ye), v = "__assign-later__", Z = [
43
+ "sms",
44
+ "email",
45
+ "whatsapp",
46
+ "on-device"
47
+ ];
48
+ function ee(h, z) {
49
+ var c;
50
+ return ((c = h.find((o) => o.value === z)) == null ? void 0 : c.label) ?? "";
51
+ }
52
+ const Oe = pe(
53
+ ({
54
+ open: h,
55
+ onOpenChange: z,
56
+ operators: c,
57
+ signerOptions: o,
58
+ currentOperatorId: O,
59
+ allowAssignLater: _ = !0,
60
+ initialOperatorId: B,
61
+ initialOperatorChannel: L,
62
+ initialSigners: D,
63
+ maxSigners: se = 2,
64
+ busy: i = !1,
65
+ error: j,
66
+ title: ne,
67
+ description: te,
68
+ onRequestSignature: le,
69
+ contentProps: re
70
+ }, ie) => {
71
+ const { t: n } = ve(), E = A(0), F = A(null), H = (e) => {
72
+ var l;
73
+ const s = (l = o.find(
74
+ (d) => d.value === e
75
+ )) == null ? void 0 : l.availableChannels;
76
+ return s && s.length > 0 ? Z.filter((d) => s.includes(d)) : Z;
77
+ }, M = (e, s) => {
78
+ const l = H(e);
79
+ return l.includes(s) ? s : l[0];
80
+ }, U = () => {
81
+ var e, s;
82
+ return B === null ? _ ? v : ((e = c[0]) == null ? void 0 : e.value) ?? v : B ?? ((s = c[0]) == null ? void 0 : s.value) ?? (_ ? v : "");
83
+ }, V = () => (D && D.length > 0 ? D : o.length > 0 ? [
84
+ {
85
+ signerId: o[0].value,
86
+ channel: M(o[0].value, "on-device")
87
+ }
88
+ ] : []).map((s) => ({ ...s, rowId: E.current++ })), g = (e) => {
89
+ var s;
90
+ return ((s = c.find((l) => l.value === e)) == null ? void 0 : s.defaultChannel) ?? "email";
91
+ }, W = (e, s) => L === "on-device" ? s.some((l) => l.channel === "on-device") ? "on-device" : g(e) : L ?? g(e), [p, T] = S(U), [u, b] = S(V), [q, f] = S(
92
+ () => W(p, u)
93
+ ), [G, x] = S(null), X = A(h);
94
+ J(() => {
95
+ if (h && !X.current) {
96
+ const e = U(), s = V();
97
+ T(e), b(s), f(W(e, s)), x(null);
98
+ }
99
+ X.current = h;
100
+ }, [h]);
101
+ const N = u.some(
102
+ (e) => e.channel === "on-device"
103
+ );
104
+ J(() => {
105
+ if (q === "on-device" && !N) {
106
+ const e = g(p);
107
+ f(e), x(e);
108
+ }
109
+ }, [q, N, p]);
110
+ const de = _ ? [
111
+ ...c,
112
+ { value: v, label: n("signatureRequest.assignLater") }
113
+ ] : c, w = p === v, R = {
114
+ sms: {
115
+ label: n("signatureRequest.viaSms"),
116
+ icon: /* @__PURE__ */ a(Ie, { className: "ds:size-4", "aria-hidden": !0 })
117
+ },
118
+ email: {
119
+ label: n("signatureRequest.viaEmail"),
120
+ icon: /* @__PURE__ */ a(Ce, { className: "ds:size-4", "aria-hidden": !0 })
121
+ },
122
+ whatsapp: {
123
+ label: n("signatureRequest.viaWhatsapp"),
124
+ icon: /* @__PURE__ */ a(fe, { className: "ds:size-4", "aria-hidden": !0 })
125
+ },
126
+ "on-device": {
127
+ label: n("signatureRequest.onThisDevice"),
128
+ icon: /* @__PURE__ */ a(ke, { className: "ds:size-4", "aria-hidden": !0 })
129
+ }
130
+ }, ce = [
131
+ { value: "sms", ...R.sms },
132
+ { value: "email", ...R.email },
133
+ {
134
+ value: "on-device",
135
+ ...R["on-device"],
136
+ disabled: !N,
137
+ hint: N ? void 0 : n("signatureRequest.onDeviceUnavailableHint")
138
+ }
139
+ ], $ = u.map((e) => e.signerId), C = o.find(
140
+ (e) => !$.includes(e.value)
141
+ ), oe = !i && u.length < se && C !== void 0, P = (e, s) => {
142
+ b(
143
+ (l) => l.map(
144
+ (d) => d.rowId === e ? { ...d, ...s } : d
145
+ )
146
+ );
147
+ }, ue = () => {
148
+ C && b((e) => [
149
+ ...e,
150
+ {
151
+ signerId: C.value,
152
+ channel: M(C.value, "sms"),
153
+ rowId: E.current++
154
+ }
155
+ ]);
156
+ }, me = (e) => {
157
+ var s;
158
+ (s = F.current) == null || s.focus(), b(
159
+ (l) => l.filter((d) => d.rowId !== e)
160
+ );
161
+ }, he = () => {
162
+ le({
163
+ operatorId: w ? null : p,
164
+ operatorChannel: w ? null : q,
165
+ signers: u.map(({ rowId: e, ...s }) => s)
166
+ });
167
+ };
168
+ return /* @__PURE__ */ a("div", { ref: ie, className: "ds:contents", "data-component": "signature-request", children: /* @__PURE__ */ a(m, { open: h, onOpenChange: z, children: /* @__PURE__ */ r(m.Content, { size: "lg", hideCloseButton: !0, ...re, children: [
169
+ /* @__PURE__ */ r(m.Header, { children: [
170
+ /* @__PURE__ */ a(m.Title, { children: ne ?? n("signatureRequest.title") }),
171
+ /* @__PURE__ */ a(m.Description, { children: te ?? n("signatureRequest.noSignedVersions") })
172
+ ] }),
173
+ /* @__PURE__ */ r(m.Body, { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-md)]", children: [
174
+ /* @__PURE__ */ r("section", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]", children: [
175
+ /* @__PURE__ */ r("div", { className: "ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]", children: [
176
+ /* @__PURE__ */ a("p", { className: "type-eyebrow ds:text-start ds:text-[color:var(--muted-foreground)]", children: n("signatureRequest.operatorSection") }),
177
+ O !== void 0 ? /* @__PURE__ */ a(
178
+ k,
179
+ {
180
+ intent: "primary",
181
+ size: "sm",
182
+ startIcon: /* @__PURE__ */ a(ze, {}),
183
+ disabled: i,
184
+ onClick: () => {
185
+ T(O), f(
186
+ g(O)
187
+ ), x(null);
188
+ },
189
+ children: n("signatureRequest.assignToMe")
190
+ }
191
+ ) : null
192
+ ] }),
193
+ /* @__PURE__ */ r("div", { className: "ds:flex ds:items-center ds:gap-[var(--spacing-sm)]", children: [
194
+ /* @__PURE__ */ a(
195
+ Y,
196
+ {
197
+ "aria-hidden": "true",
198
+ name: w ? void 0 : ee(c, p),
199
+ size: "sm"
200
+ }
201
+ ),
202
+ /* @__PURE__ */ a("div", { className: "ds:min-w-0 ds:flex-1 ds:text-start", children: /* @__PURE__ */ a(
203
+ Q,
204
+ {
205
+ options: de,
206
+ value: p,
207
+ onValueChange: (e) => {
208
+ e && (T(e), f(
209
+ e === v ? "email" : g(e)
210
+ ), x(null));
211
+ },
212
+ required: !0,
213
+ disabled: i,
214
+ placeholder: n("signatureRequest.operatorPlaceholder"),
215
+ "aria-label": n("signatureRequest.operatorSection")
216
+ }
217
+ ) })
218
+ ] }),
219
+ w ? null : /* @__PURE__ */ a(
220
+ "div",
221
+ {
222
+ role: "group",
223
+ "aria-label": n("signatureRequest.operatorChannelLabel"),
224
+ className: "ds:flex ds:flex-wrap ds:items-center ds:gap-x-[var(--spacing-lg)] ds:gap-y-[var(--spacing-sm)] ds:ps-[var(--spacing-xl)]",
225
+ children: ce.map((e) => /* @__PURE__ */ r(
226
+ "span",
227
+ {
228
+ className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-sm)]",
229
+ children: [
230
+ /* @__PURE__ */ a(
231
+ K,
232
+ {
233
+ checked: q === e.value,
234
+ disabled: i || e.disabled,
235
+ onCheckedChange: (s) => {
236
+ s === !0 && (f(e.value), x(null));
237
+ },
238
+ label: /* @__PURE__ */ r("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]", children: [
239
+ /* @__PURE__ */ a(
240
+ "span",
241
+ {
242
+ "aria-hidden": "true",
243
+ className: "ds:text-[var(--accent)]",
244
+ children: e.icon
245
+ }
246
+ ),
247
+ e.label
248
+ ] })
249
+ }
250
+ ),
251
+ e.hint ? /* @__PURE__ */ a(Re, { size: "sm", content: e.hint }) : null
252
+ ]
253
+ },
254
+ e.value
255
+ ))
256
+ }
257
+ ),
258
+ /* @__PURE__ */ a("span", { role: "status", className: "ds:sr-only", children: G ? n("signatureRequest.operatorChannelReverted", {
259
+ channel: R[G].label
260
+ }) : null })
261
+ ] }),
262
+ /* @__PURE__ */ a(be, { decorative: !0 }),
263
+ /* @__PURE__ */ r("section", { className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:text-start", children: [
264
+ /* @__PURE__ */ r("div", { className: "ds:flex ds:items-center ds:justify-between ds:gap-[var(--spacing-sm)]", children: [
265
+ /* @__PURE__ */ a("p", { className: "type-eyebrow ds:text-[color:var(--muted-foreground)]", children: n("signatureRequest.signersSection") }),
266
+ /* @__PURE__ */ a(
267
+ k,
268
+ {
269
+ ref: F,
270
+ intent: "primary",
271
+ size: "sm",
272
+ startIcon: /* @__PURE__ */ a(qe, {}),
273
+ disabled: !oe,
274
+ onClick: ue,
275
+ children: n("signatureRequest.addSigner")
276
+ }
277
+ )
278
+ ] }),
279
+ u.map((e) => {
280
+ const s = o.filter(
281
+ (t) => t.value === e.signerId || !$.includes(t.value)
282
+ ), l = ee(o, e.signerId), d = H(e.signerId).map(
283
+ (t) => ({ value: t, ...R[t] })
284
+ );
285
+ return /* @__PURE__ */ r(
286
+ "div",
287
+ {
288
+ role: "group",
289
+ "aria-label": l,
290
+ className: "ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]",
291
+ children: [
292
+ /* @__PURE__ */ r("div", { className: "ds:flex ds:items-center ds:gap-[var(--spacing-sm)]", children: [
293
+ /* @__PURE__ */ a(Y, { "aria-hidden": "true", name: l, size: "sm" }),
294
+ /* @__PURE__ */ a("div", { className: "ds:min-w-0 ds:flex-1", children: /* @__PURE__ */ a(
295
+ Q,
296
+ {
297
+ options: s,
298
+ value: e.signerId,
299
+ onValueChange: (t) => {
300
+ if (!t) return;
301
+ const I = M(
302
+ t,
303
+ e.channel
304
+ );
305
+ P(e.rowId, {
306
+ signerId: t,
307
+ channel: I,
308
+ skipOtp: I === "on-device" ? e.skipOtp : void 0
309
+ });
310
+ },
311
+ required: !0,
312
+ disabled: i,
313
+ placeholder: n(
314
+ "signatureRequest.signerPlaceholder"
315
+ ),
316
+ "aria-label": n("signatureRequest.signerPlaceholder")
317
+ }
318
+ ) }),
319
+ u.length > 1 ? /* @__PURE__ */ a(
320
+ ge,
321
+ {
322
+ intent: "ghost",
323
+ size: "sm",
324
+ icon: /* @__PURE__ */ a(Ne, {}),
325
+ disabled: i,
326
+ "aria-label": n("signatureRequest.removeSigner"),
327
+ onClick: () => me(e.rowId)
328
+ }
329
+ ) : null
330
+ ] }),
331
+ /* @__PURE__ */ a(
332
+ "div",
333
+ {
334
+ role: "group",
335
+ "aria-label": n("signatureRequest.channelLabel"),
336
+ className: "ds:flex ds:flex-wrap ds:items-center ds:gap-x-[var(--spacing-lg)] ds:gap-y-[var(--spacing-sm)] ds:ps-[var(--spacing-xl)]",
337
+ children: d.map((t) => /* @__PURE__ */ a(
338
+ K,
339
+ {
340
+ checked: e.channel === t.value,
341
+ disabled: i,
342
+ onCheckedChange: (I) => I === !0 && P(e.rowId, {
343
+ channel: t.value,
344
+ skipOtp: void 0
345
+ }),
346
+ label: /* @__PURE__ */ r("span", { className: "ds:inline-flex ds:items-center ds:gap-[var(--spacing-xs)]", children: [
347
+ /* @__PURE__ */ a(
348
+ "span",
349
+ {
350
+ "aria-hidden": "true",
351
+ className: "ds:text-[var(--accent)]",
352
+ children: t.icon
353
+ }
354
+ ),
355
+ t.label
356
+ ] })
357
+ },
358
+ t.value
359
+ ))
360
+ }
361
+ ),
362
+ e.channel === "on-device" ? /* @__PURE__ */ a("div", { className: "ds:ps-[var(--spacing-xl)]", children: /* @__PURE__ */ a(
363
+ xe,
364
+ {
365
+ label: n("signatureRequest.noOtp"),
366
+ checked: e.skipOtp === !0,
367
+ disabled: i,
368
+ onCheckedChange: (t) => P(e.rowId, { skipOtp: t })
369
+ }
370
+ ) }) : null
371
+ ]
372
+ },
373
+ e.rowId
374
+ );
375
+ })
376
+ ] }),
377
+ u.some(
378
+ (e) => e.channel === "on-device" && e.skipOtp === !0
379
+ ) ? /* @__PURE__ */ a(y, { variant: "warning", children: /* @__PURE__ */ a(y.Description, { children: n("signatureRequest.noOtpWarning") }) }) : null,
380
+ j ? /* @__PURE__ */ a(y, { variant: "error", children: /* @__PURE__ */ a(y.Description, { children: j }) }) : null
381
+ ] }),
382
+ /* @__PURE__ */ r(m.Footer, { children: [
383
+ /* @__PURE__ */ a(
384
+ k,
385
+ {
386
+ intent: "primary",
387
+ startIcon: /* @__PURE__ */ a(we, {}),
388
+ onClick: he,
389
+ disabled: i || u.length === 0,
390
+ loading: i,
391
+ children: n("signatureRequest.requestSignature")
392
+ }
393
+ ),
394
+ /* @__PURE__ */ a(m.Close, { asChild: !0, children: /* @__PURE__ */ a(k, { intent: "outline", disabled: i, children: n("signatureRequest.close") }) })
395
+ ] })
396
+ ] }) }) });
397
+ }
398
+ );
399
+ Oe.displayName = "SignatureRequestModal";
400
+ export {
401
+ Oe as S
402
+ };
403
+ //# sourceMappingURL=signature-request-BzXTV_RH.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "packageVersion": "0.95.0",
3
+ "packageVersion": "0.96.0",
4
4
  "components": [
5
5
  {
6
6
  "kind": "component",
@@ -16501,6 +16501,14 @@
16501
16501
  "component": "select",
16502
16502
  "as": "operatorSigner"
16503
16503
  },
16504
+ {
16505
+ "component": "checkbox",
16506
+ "as": "operatorChannel"
16507
+ },
16508
+ {
16509
+ "component": "info-tip",
16510
+ "as": "operatorChannelHint"
16511
+ },
16504
16512
  {
16505
16513
  "component": "select",
16506
16514
  "as": "signerPerson",
@@ -16516,10 +16524,6 @@
16516
16524
  "as": "otpWaiver",
16517
16525
  "entity": "signer"
16518
16526
  },
16519
- {
16520
- "component": "alert",
16521
- "as": "operatorHint"
16522
- },
16523
16527
  {
16524
16528
  "component": "alert",
16525
16529
  "as": "otpWarning",
@@ -16581,7 +16585,7 @@
16581
16585
  {
16582
16586
  "name": "choose_delivery_channel",
16583
16587
  "safety": "write",
16584
- "description": "Choose how each signer's request is delivered via the per-row channel checkboxes (mutually exclusive — checking one channel unchecks the others): SMS, e-mail, WhatsApp, or signing on this device. On-device signers sign sequentially in roster order.",
16588
+ "description": "Choose how each signer's request is delivered via the per-row channel checkboxes (mutually exclusive — checking one channel unchecks the others): SMS, e-mail, WhatsApp, or signing on this device. On-device signers sign sequentially in roster order. The assigned operator has the same mutually exclusive checkboxes with SMS, e-mail, or on this device — the operator's own system-defined channel arrives pre-checked, and the on-device option is enabled only while a patient signer also signs on this device (an info tip explains the greyed-out state; an automatic fallback to the operator's default is announced via a live region when the last on-device patient row leaves).",
16585
16589
  "descriptionKey": "ui.agent.signatureRequest.workflows.chooseDeliveryChannel",
16586
16590
  "uiActions": [
16587
16591
  "checkbox.set_checked"
@@ -1608,7 +1608,7 @@
1608
1608
  "workflows": {
1609
1609
  "assignOperator": "Pick the operator who must counter-sign (or \"Assign later\" to leave the request unassigned). \"Assign to me\" claims it for the signed-in operator.",
1610
1610
  "manageSignerRoster": "Build the patient-side signer roster: pick who signs in each row (the patient or their configured signee, e.g. a legal guardian), add a second signer up to the cap, or remove a row. People already on the roster are excluded from the other rows.",
1611
- "chooseDeliveryChannel": "Choose how each signer's request is delivered via the per-row channel checkboxes (mutually exclusive — checking one channel unchecks the others): SMS, e-mail, WhatsApp, or signing on this device. On-device signers sign sequentially in roster order.",
1611
+ "chooseDeliveryChannel": "Choose how each signer's request is delivered via the per-row channel checkboxes (mutually exclusive — checking one channel unchecks the others): SMS, e-mail, WhatsApp, or signing on this device. On-device signers sign sequentially in roster order. The assigned operator has the same mutually exclusive checkboxes with SMS, e-mail, or on this device — the operator's own system-defined channel arrives pre-checked, and the on-device option is enabled only while a patient signer also signs on this device (an info tip explains the greyed-out state; an automatic fallback to the operator's default is announced via a live region when the last on-device patient row leaves).",
1612
1612
  "waiveOtp": "Toggle a signer's on-device OTP waiver. Waiving OTP lowers the evidentiary value of that signature; the pattern surfaces a warning alert while waived.",
1613
1613
  "requestSignature": "Send the signature request. Notifies every roster signer over their selected channel and hands the submission to the host.",
1614
1614
  "dismiss": "Close the modal without sending a signature request. Discards the in-progress operator, roster, channel, and OTP choices."
@@ -3030,7 +3030,9 @@ export declare const arUi: {
3030
3030
  readonly assignToMe: "إسناد إليّ";
3031
3031
  readonly operatorPlaceholder: "اختر مشغّلاً";
3032
3032
  readonly assignLater: "الإسناد لاحقاً";
3033
- readonly operatorHint: "سيتم إرسال طلب التوقيع إلى المشغّل عبر البريد الإلكتروني أو الرسائل النصية حسب إعداداته.";
3033
+ readonly operatorChannelLabel: "قناة توقيع المشغّل";
3034
+ readonly onDeviceUnavailableHint: "متاح عندما يوقّع واحد على الأقل من موقّعي المريض على هذا الجهاز.";
3035
+ readonly operatorChannelReverted: "تمت إعادة تعيين قناة توقيع المشغّل إلى {{channel}} — لا يوقّع أي من موقّعي المريض على هذا الجهاز.";
3034
3036
  readonly signersSection: "موقّعو المريض";
3035
3037
  readonly signerPlaceholder: "اختر موقّعاً";
3036
3038
  readonly channelLabel: "قناة التوقيع";
@@ -3004,7 +3004,9 @@ const e = {
3004
3004
  assignToMe: "إسناد إليّ",
3005
3005
  operatorPlaceholder: "اختر مشغّلاً",
3006
3006
  assignLater: "الإسناد لاحقاً",
3007
- operatorHint: "سيتم إرسال طلب التوقيع إلى المشغّل عبر البريد الإلكتروني أو الرسائل النصية حسب إعداداته.",
3007
+ operatorChannelLabel: "قناة توقيع المشغّل",
3008
+ onDeviceUnavailableHint: "متاح عندما يوقّع واحد على الأقل من موقّعي المريض على هذا الجهاز.",
3009
+ operatorChannelReverted: "تمت إعادة تعيين قناة توقيع المشغّل إلى {{channel}} — لا يوقّع أي من موقّعي المريض على هذا الجهاز.",
3008
3010
  signersSection: "موقّعو المريض",
3009
3011
  signerPlaceholder: "اختر موقّعاً",
3010
3012
  channelLabel: "قناة التوقيع",
@@ -3030,7 +3030,9 @@ export declare const deUi: {
3030
3030
  readonly assignToMe: "Mir zuweisen";
3031
3031
  readonly operatorPlaceholder: "Operator auswählen";
3032
3032
  readonly assignLater: "Später zuweisen";
3033
- readonly operatorHint: "Die Signaturanfrage wird dem Operator je nach Einstellung per E-Mail oder SMS gesendet.";
3033
+ readonly operatorChannelLabel: "Signaturkanal des Operators";
3034
+ readonly onDeviceUnavailableHint: "Verfügbar, wenn mindestens ein Patienten-Unterzeichner auf diesem Gerät signiert.";
3035
+ readonly operatorChannelReverted: "Der Signaturkanal des Operators wurde auf {{channel}} zurückgesetzt — kein Patienten-Unterzeichner signiert auf diesem Gerät.";
3034
3036
  readonly signersSection: "Unterzeichner (Patientenseite)";
3035
3037
  readonly signerPlaceholder: "Unterzeichner auswählen";
3036
3038
  readonly channelLabel: "Signaturkanal";
@@ -3005,7 +3005,9 @@ const e = {
3005
3005
  assignToMe: "Mir zuweisen",
3006
3006
  operatorPlaceholder: "Operator auswählen",
3007
3007
  assignLater: "Später zuweisen",
3008
- operatorHint: "Die Signaturanfrage wird dem Operator je nach Einstellung per E-Mail oder SMS gesendet.",
3008
+ operatorChannelLabel: "Signaturkanal des Operators",
3009
+ onDeviceUnavailableHint: "Verfügbar, wenn mindestens ein Patienten-Unterzeichner auf diesem Gerät signiert.",
3010
+ operatorChannelReverted: "Der Signaturkanal des Operators wurde auf {{channel}} zurückgesetzt — kein Patienten-Unterzeichner signiert auf diesem Gerät.",
3009
3011
  signersSection: "Unterzeichner (Patientenseite)",
3010
3012
  signerPlaceholder: "Unterzeichner auswählen",
3011
3013
  channelLabel: "Signaturkanal",
@@ -3027,7 +3027,9 @@ export declare const elUi: {
3027
3027
  readonly assignToMe: "Ανάθεση σε εμένα";
3028
3028
  readonly operatorPlaceholder: "Επιλέξτε χειριστή";
3029
3029
  readonly assignLater: "Ανάθεση αργότερα";
3030
- readonly operatorHint: "Το αίτημα υπογραφής θα σταλεί στον χειριστή μέσω e-mail ή SMS, ανάλογα με τις ρυθμίσεις του.";
3030
+ readonly operatorChannelLabel: "Κανάλι υπογραφής χειριστή";
3031
+ readonly onDeviceUnavailableHint: "Διαθέσιμο όταν τουλάχιστον ένας υπογράφων ασθενούς υπογράφει σε αυτήν τη συσκευή.";
3032
+ readonly operatorChannelReverted: "Η αποστολή προς τον χειριστή επανήλθε σε {{channel}} — κανένας υπογράφων ασθενούς δεν υπογράφει σε αυτήν τη συσκευή.";
3031
3033
  readonly signersSection: "Υπογράφοντες ασθενούς";
3032
3034
  readonly signerPlaceholder: "Επιλέξτε υπογράφοντα";
3033
3035
  readonly channelLabel: "Κανάλι υπογραφής";
@@ -3011,7 +3011,9 @@ const e = {
3011
3011
  assignToMe: "Ανάθεση σε εμένα",
3012
3012
  operatorPlaceholder: "Επιλέξτε χειριστή",
3013
3013
  assignLater: "Ανάθεση αργότερα",
3014
- operatorHint: "Το αίτημα υπογραφής θα σταλεί στον χειριστή μέσω e-mail ή SMS, ανάλογα με τις ρυθμίσεις του.",
3014
+ operatorChannelLabel: "Κανάλι υπογραφής χειριστή",
3015
+ onDeviceUnavailableHint: "Διαθέσιμο όταν τουλάχιστον ένας υπογράφων ασθενούς υπογράφει σε αυτήν τη συσκευή.",
3016
+ operatorChannelReverted: "Η αποστολή προς τον χειριστή επανήλθε σε {{channel}} — κανένας υπογράφων ασθενούς δεν υπογράφει σε αυτήν τη συσκευή.",
3015
3017
  signersSection: "Υπογράφοντες ασθενούς",
3016
3018
  signerPlaceholder: "Επιλέξτε υπογράφοντα",
3017
3019
  channelLabel: "Κανάλι υπογραφής",
@@ -3038,7 +3038,9 @@ export declare const enUi: {
3038
3038
  readonly assignToMe: "Assign to me";
3039
3039
  readonly operatorPlaceholder: "Select an operator";
3040
3040
  readonly assignLater: "Assign later";
3041
- readonly operatorHint: "The signature request will be sent to the Operator via e-mail or SMS, based on their settings.";
3041
+ readonly operatorChannelLabel: "Operator signature channel";
3042
+ readonly onDeviceUnavailableHint: "Available when at least one patient signer signs on this device.";
3043
+ readonly operatorChannelReverted: "The operator's delivery reset to {{channel}} — no patient signer signs on this device.";
3042
3044
  readonly signersSection: "Patient signers";
3043
3045
  readonly signerPlaceholder: "Select a signer";
3044
3046
  readonly channelLabel: "Signature channel";
@@ -3024,7 +3024,9 @@ const e = {
3024
3024
  assignToMe: "Assign to me",
3025
3025
  operatorPlaceholder: "Select an operator",
3026
3026
  assignLater: "Assign later",
3027
- operatorHint: "The signature request will be sent to the Operator via e-mail or SMS, based on their settings.",
3027
+ operatorChannelLabel: "Operator signature channel",
3028
+ onDeviceUnavailableHint: "Available when at least one patient signer signs on this device.",
3029
+ operatorChannelReverted: "The operator's delivery reset to {{channel}} — no patient signer signs on this device.",
3028
3030
  signersSection: "Patient signers",
3029
3031
  signerPlaceholder: "Select a signer",
3030
3032
  channelLabel: "Signature channel",
@@ -3027,7 +3027,9 @@ export declare const esUi: {
3027
3027
  readonly assignToMe: "Asignármelo";
3028
3028
  readonly operatorPlaceholder: "Selecciona un operador";
3029
3029
  readonly assignLater: "Asignar más tarde";
3030
- readonly operatorHint: "La solicitud de firma se enviará al operador por correo electrónico o SMS, según su configuración.";
3030
+ readonly operatorChannelLabel: "Canal de firma del operador";
3031
+ readonly onDeviceUnavailableHint: "Disponible cuando al menos un firmante del paciente firma en este dispositivo.";
3032
+ readonly operatorChannelReverted: "El canal de firma del operador se ha restablecido a {{channel}}: ningún firmante del paciente firma en este dispositivo.";
3031
3033
  readonly signersSection: "Firmantes del paciente";
3032
3034
  readonly signerPlaceholder: "Selecciona un firmante";
3033
3035
  readonly channelLabel: "Canal de firma";
@@ -3002,7 +3002,9 @@ const e = {
3002
3002
  assignToMe: "Asignármelo",
3003
3003
  operatorPlaceholder: "Selecciona un operador",
3004
3004
  assignLater: "Asignar más tarde",
3005
- operatorHint: "La solicitud de firma se enviará al operador por correo electrónico o SMS, según su configuración.",
3005
+ operatorChannelLabel: "Canal de firma del operador",
3006
+ onDeviceUnavailableHint: "Disponible cuando al menos un firmante del paciente firma en este dispositivo.",
3007
+ operatorChannelReverted: "El canal de firma del operador se ha restablecido a {{channel}}: ningún firmante del paciente firma en este dispositivo.",
3006
3008
  signersSection: "Firmantes del paciente",
3007
3009
  signerPlaceholder: "Selecciona un firmante",
3008
3010
  channelLabel: "Canal de firma",
@@ -3027,7 +3027,9 @@ export declare const frUi: {
3027
3027
  readonly assignToMe: "Me l'assigner";
3028
3028
  readonly operatorPlaceholder: "Sélectionner un opérateur";
3029
3029
  readonly assignLater: "Assigner plus tard";
3030
- readonly operatorHint: "La demande de signature sera envoyée à l'opérateur par e-mail ou SMS, selon ses préférences.";
3030
+ readonly operatorChannelLabel: "Canal de signature de l'opérateur";
3031
+ readonly onDeviceUnavailableHint: "Disponible lorsqu'au moins un signataire patient signe sur cet appareil.";
3032
+ readonly operatorChannelReverted: "Le canal de signature de l'opérateur est revenu à {{channel}} — aucun signataire patient ne signe sur cet appareil.";
3031
3033
  readonly signersSection: "Signataires patient";
3032
3034
  readonly signerPlaceholder: "Sélectionner un signataire";
3033
3035
  readonly channelLabel: "Canal de signature";
@@ -3005,7 +3005,9 @@ const e = {
3005
3005
  assignToMe: "Me l'assigner",
3006
3006
  operatorPlaceholder: "Sélectionner un opérateur",
3007
3007
  assignLater: "Assigner plus tard",
3008
- operatorHint: "La demande de signature sera envoyée à l'opérateur par e-mail ou SMS, selon ses préférences.",
3008
+ operatorChannelLabel: "Canal de signature de l'opérateur",
3009
+ onDeviceUnavailableHint: "Disponible lorsqu'au moins un signataire patient signe sur cet appareil.",
3010
+ operatorChannelReverted: "Le canal de signature de l'opérateur est revenu à {{channel}} — aucun signataire patient ne signe sur cet appareil.",
3009
3011
  signersSection: "Signataires patient",
3010
3012
  signerPlaceholder: "Sélectionner un signataire",
3011
3013
  channelLabel: "Canal de signature",
@@ -3027,7 +3027,9 @@ export declare const hiUi: {
3027
3027
  readonly assignToMe: "मुझे सौंपें";
3028
3028
  readonly operatorPlaceholder: "ऑपरेटर चुनें";
3029
3029
  readonly assignLater: "बाद में सौंपें";
3030
- readonly operatorHint: "हस्ताक्षर अनुरोध ऑपरेटर को उनकी सेटिंग्स के अनुसार ई-मेल या SMS से भेजा जाएगा।";
3030
+ readonly operatorChannelLabel: "ऑपरेटर हस्ताक्षर चैनल";
3031
+ readonly onDeviceUnavailableHint: "तब उपलब्ध जब कम से कम एक मरीज़ हस्ताक्षरकर्ता इस डिवाइस पर हस्ताक्षर करता है।";
3032
+ readonly operatorChannelReverted: "ऑपरेटर का हस्ताक्षर चैनल {{channel}} पर रीसेट हो गया — कोई भी मरीज़ हस्ताक्षरकर्ता इस डिवाइस पर हस्ताक्षर नहीं कर रहा है।";
3031
3033
  readonly signersSection: "मरीज़ पक्ष के हस्ताक्षरकर्ता";
3032
3034
  readonly signerPlaceholder: "हस्ताक्षरकर्ता चुनें";
3033
3035
  readonly channelLabel: "हस्ताक्षर चैनल";
@@ -3002,7 +3002,9 @@ const e = {
3002
3002
  assignToMe: "मुझे सौंपें",
3003
3003
  operatorPlaceholder: "ऑपरेटर चुनें",
3004
3004
  assignLater: "बाद में सौंपें",
3005
- operatorHint: "हस्ताक्षर अनुरोध ऑपरेटर को उनकी सेटिंग्स के अनुसार ई-मेल या SMS से भेजा जाएगा।",
3005
+ operatorChannelLabel: "ऑपरेटर हस्ताक्षर चैनल",
3006
+ onDeviceUnavailableHint: "तब उपलब्ध जब कम से कम एक मरीज़ हस्ताक्षरकर्ता इस डिवाइस पर हस्ताक्षर करता है।",
3007
+ operatorChannelReverted: "ऑपरेटर का हस्ताक्षर चैनल {{channel}} पर रीसेट हो गया — कोई भी मरीज़ हस्ताक्षरकर्ता इस डिवाइस पर हस्ताक्षर नहीं कर रहा है।",
3006
3008
  signersSection: "मरीज़ पक्ष के हस्ताक्षरकर्ता",
3007
3009
  signerPlaceholder: "हस्ताक्षरकर्ता चुनें",
3008
3010
  channelLabel: "हस्ताक्षर चैनल",
@@ -3024,7 +3024,9 @@ export declare const itUi: {
3024
3024
  readonly assignToMe: "Assegna a me";
3025
3025
  readonly operatorPlaceholder: "Seleziona un operatore";
3026
3026
  readonly assignLater: "Assegna più tardi";
3027
- readonly operatorHint: "La richiesta di firma verrà inviata all'Operatore via e-mail o SMS, in base alle sue impostazioni.";
3027
+ readonly operatorChannelLabel: "Canale di firma dell'Operatore";
3028
+ readonly onDeviceUnavailableHint: "Disponibile quando almeno un firmatario paziente firma su questo dispositivo.";
3029
+ readonly operatorChannelReverted: "Il canale di firma dell'Operatore è stato reimpostato su {{channel}}: nessun firmatario paziente firma su questo dispositivo.";
3028
3030
  readonly signersSection: "Firmatari paziente";
3029
3031
  readonly signerPlaceholder: "Seleziona un firmatario";
3030
3032
  readonly channelLabel: "Canale di firma";