@whooshbang/sdk 5.1.0 → 6.0.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 (67) hide show
  1. package/README.md +232 -83
  2. package/dist/cli/commands.js +2 -0
  3. package/dist/cli/commands.js.map +1 -1
  4. package/dist/client.d.ts +139 -1
  5. package/dist/client.js +448 -4
  6. package/dist/client.js.map +1 -1
  7. package/dist/index.d.ts +2 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/interactions.js +18 -3
  10. package/dist/interactions.js.map +1 -1
  11. package/dist/recipient/element.js +641 -14
  12. package/dist/recipient/element.js.map +1 -1
  13. package/dist/recipient/i18n/ar.js +77 -0
  14. package/dist/recipient/i18n/ar.js.map +1 -1
  15. package/dist/recipient/i18n/catalog.d.ts +75 -0
  16. package/dist/recipient/i18n/catalog.js.map +1 -1
  17. package/dist/recipient/i18n/de.js +82 -0
  18. package/dist/recipient/i18n/de.js.map +1 -1
  19. package/dist/recipient/i18n/en.js +82 -0
  20. package/dist/recipient/i18n/en.js.map +1 -1
  21. package/dist/recipient/i18n/es.js +82 -0
  22. package/dist/recipient/i18n/es.js.map +1 -1
  23. package/dist/recipient/i18n/fa.js +77 -0
  24. package/dist/recipient/i18n/fa.js.map +1 -1
  25. package/dist/recipient/i18n/fr.js +82 -0
  26. package/dist/recipient/i18n/fr.js.map +1 -1
  27. package/dist/recipient/i18n/hi.js +82 -0
  28. package/dist/recipient/i18n/hi.js.map +1 -1
  29. package/dist/recipient/i18n/id.js +82 -0
  30. package/dist/recipient/i18n/id.js.map +1 -1
  31. package/dist/recipient/i18n/it.js +82 -0
  32. package/dist/recipient/i18n/it.js.map +1 -1
  33. package/dist/recipient/i18n/nl.js +82 -0
  34. package/dist/recipient/i18n/nl.js.map +1 -1
  35. package/dist/recipient/i18n/pl.js +82 -0
  36. package/dist/recipient/i18n/pl.js.map +1 -1
  37. package/dist/recipient/i18n/pt-BR.js +82 -0
  38. package/dist/recipient/i18n/pt-BR.js.map +1 -1
  39. package/dist/recipient/i18n/ru.js +82 -0
  40. package/dist/recipient/i18n/ru.js.map +1 -1
  41. package/dist/recipient/i18n/tr.js +82 -0
  42. package/dist/recipient/i18n/tr.js.map +1 -1
  43. package/dist/recipient/i18n/uk.js +82 -0
  44. package/dist/recipient/i18n/uk.js.map +1 -1
  45. package/dist/recipient/i18n/zh-Hans.js +77 -0
  46. package/dist/recipient/i18n/zh-Hans.js.map +1 -1
  47. package/dist/recipient/order-section.d.ts +41 -0
  48. package/dist/recipient/order-section.js +547 -0
  49. package/dist/recipient/order-section.js.map +1 -0
  50. package/dist/recipient/order-view.d.ts +123 -0
  51. package/dist/recipient/order-view.js +304 -0
  52. package/dist/recipient/order-view.js.map +1 -0
  53. package/dist/recipient/platform-mark.d.ts +1 -0
  54. package/dist/recipient/platform-mark.js +57 -0
  55. package/dist/recipient/platform-mark.js.map +1 -0
  56. package/dist/recipient/quiet-section.d.ts +47 -0
  57. package/dist/recipient/quiet-section.js +490 -0
  58. package/dist/recipient/quiet-section.js.map +1 -0
  59. package/dist/recipient/quiet-view.d.ts +84 -0
  60. package/dist/recipient/quiet-view.js +250 -0
  61. package/dist/recipient/quiet-view.js.map +1 -0
  62. package/dist/recipient/view.d.ts +2 -0
  63. package/dist/recipient/view.js.map +1 -1
  64. package/dist/webhooks.d.ts +30 -1
  65. package/dist/webhooks.js +57 -4
  66. package/dist/webhooks.js.map +1 -1
  67. package/package.json +12 -2
@@ -0,0 +1,547 @@
1
+ import { normalizeWait, ORDER_LEVELS, typedWait, waitRange, waitBoxDigits, orderCandidates, atStepLimit, orderListText, orderPreviewText as previewFromRules, savedSteps, stepKey, } from "./order-view.js";
2
+ /**
3
+ * "If you don't answer": the recipient's own escalation order (FXO-3672),
4
+ * built exactly to the approved canvas. Always editable: rows reorder by drag
5
+ * or by the arrow buttons, a change brings up Save and Discard, and a saved
6
+ * personal order can go back to the suggested one.
7
+ *
8
+ * Every value reaches the DOM through `textContent` or a typed property.
9
+ */
10
+ export const ORDER_SECTION_STYLES = `
11
+ .order { container-type: inline-size; }
12
+ .order .intro { line-height: 1.45; margin: 0 0 1rem; opacity: .85; }
13
+ .order .intro-narrow { display: none; }
14
+ .order .muted { font-size: .85rem; opacity: .75; }
15
+ .order .levels {
16
+ background: color-mix(in srgb, currentColor 6%, transparent);
17
+ border-radius: .625rem;
18
+ display: grid;
19
+ gap: .375rem;
20
+ grid-template-columns: repeat(4, minmax(0, 1fr));
21
+ margin-bottom: .5rem;
22
+ padding: .25rem;
23
+ }
24
+ .order .levels button {
25
+ background: transparent;
26
+ border-radius: .5rem;
27
+ color: inherit;
28
+ min-height: 2.75rem;
29
+ opacity: .8;
30
+ padding: 0 .25rem;
31
+ }
32
+ .order .levels button[aria-pressed="true"] {
33
+ background: Canvas;
34
+ box-shadow: 0 1px 2px color-mix(in srgb, currentColor 20%, transparent);
35
+ font-weight: 600;
36
+ opacity: 1;
37
+ }
38
+ .order ol { list-style: none; margin: .75rem 0 0; padding: 0; }
39
+ .order ol li {
40
+ align-items: stretch;
41
+ border: 0;
42
+ display: flex;
43
+ flex-direction: column;
44
+ gap: 0;
45
+ margin: 0;
46
+ padding: 0;
47
+ }
48
+ .order ol li.drop-target .row { outline: 2px dashed var(--whooshbang-accent, #EB001B); outline-offset: 2px; }
49
+ .order .row {
50
+ align-items: center;
51
+ border: 1px solid color-mix(in srgb, currentColor 22%, transparent);
52
+ border-radius: .5rem;
53
+ display: flex;
54
+ gap: .625rem;
55
+ padding: .375rem .375rem .375rem .625rem;
56
+ }
57
+ .order .row.unavailable {
58
+ border-color: color-mix(in srgb, #c62828 45%, transparent);
59
+ flex-wrap: wrap;
60
+ }
61
+ .order .row[draggable="true"] { cursor: grab; }
62
+ .order .handle, .order .mark { flex: 0 0 auto; }
63
+ /* A zero basis keeps a long "Disconnected" line from wrapping the row. */
64
+ .order .who { display: flex; flex: 1 1 0%; flex-direction: column; min-width: 0; }
65
+ .order .who .name { font-size: .95rem; font-weight: 600; }
66
+ .order .who .detail { font-size: .85rem; opacity: .75; overflow-wrap: anywhere; }
67
+ .order .row.unavailable .who .name { opacity: .7; }
68
+ .order .row.unavailable .who .detail { color: #b42318; opacity: 1; }
69
+ .order button.icon {
70
+ align-items: center;
71
+ background: transparent;
72
+ border-radius: .375rem;
73
+ color: inherit;
74
+ display: inline-flex;
75
+ flex: 0 0 auto;
76
+ height: 2.25rem;
77
+ justify-content: center;
78
+ padding: 0;
79
+ width: 2.25rem;
80
+ }
81
+ .order button.icon:disabled { opacity: .35; }
82
+ .order .fix { display: flex; flex-basis: 100%; flex-wrap: wrap; gap: .5rem; padding-inline-start: 2.75rem; }
83
+ .order .fix button { min-height: 2.75rem; }
84
+ .order .between {
85
+ align-items: center;
86
+ display: flex;
87
+ flex-wrap: wrap;
88
+ font-size: .9rem;
89
+ gap: .5rem;
90
+ padding: .5rem 0 .5rem 2.125rem;
91
+ }
92
+ .order .between input {
93
+ background: Field;
94
+ border: 1px solid color-mix(in srgb, currentColor 35%, transparent);
95
+ border-radius: .375rem;
96
+ box-sizing: border-box;
97
+ color: inherit;
98
+ font: inherit;
99
+ min-height: 2.25rem;
100
+ padding: 0 .375rem;
101
+ text-align: center;
102
+ font-variant-numeric: tabular-nums;
103
+ width: calc(var(--wait-digits, 3) * 1ch + .75rem + 2px);
104
+ -moz-appearance: textfield;
105
+ appearance: textfield;
106
+ }
107
+ .order .between input::-webkit-inner-spin-button,
108
+ .order .between input::-webkit-outer-spin-button {
109
+ -webkit-appearance: none;
110
+ margin: 0;
111
+ }
112
+ .order .between input:focus-visible {
113
+ outline: 2px solid var(--whooshbang-accent, #EB001B);
114
+ outline-offset: 2px;
115
+ }
116
+ .order .last { font-size: .85rem; opacity: .75; padding: .5rem 0 .25rem 2.125rem; }
117
+ .order .warning {
118
+ background: color-mix(in srgb, #c62828 8%, transparent);
119
+ border: 1px solid color-mix(in srgb, #c62828 40%, transparent);
120
+ border-radius: .5rem;
121
+ line-height: 1.45;
122
+ margin-top: .75rem;
123
+ padding: .75rem .875rem;
124
+ }
125
+ .order .not-in { display: flex; flex-direction: column; gap: .5rem; margin-top: 1rem; }
126
+ .order .not-in .label { font-size: .85rem; font-weight: 600; }
127
+ .order .candidate {
128
+ align-items: center;
129
+ border: 1px dashed color-mix(in srgb, currentColor 35%, transparent);
130
+ border-radius: .5rem;
131
+ display: flex;
132
+ gap: .625rem;
133
+ justify-content: space-between;
134
+ padding: .375rem .375rem .375rem .875rem;
135
+ }
136
+ .order .candidate .who .name { font-weight: 400; }
137
+ .order .candidate button { min-height: 2.5rem; }
138
+ .order .changes {
139
+ border-top: 1px solid color-mix(in srgb, currentColor 18%, transparent);
140
+ display: flex;
141
+ flex-direction: column;
142
+ gap: .75rem;
143
+ margin-top: 1rem;
144
+ padding-top: .875rem;
145
+ }
146
+ .order .changes .preview { line-height: 1.45; }
147
+ .order .changes .preview strong { font-weight: 600; }
148
+ .order .changes .buttons { display: flex; flex-wrap: wrap; gap: .625rem; }
149
+ .order .changes .buttons button { min-height: 2.75rem; padding: 0 1.1rem; }
150
+ .order .changes .buttons .save { font-weight: 600; }
151
+ .order button.link {
152
+ background: transparent;
153
+ color: var(--whooshbang-accent, #EB001B);
154
+ margin-top: 1rem;
155
+ min-height: 2.5rem;
156
+ padding: 0;
157
+ text-decoration: underline;
158
+ }
159
+ .order .order-status:empty { display: none; }
160
+ .order .order-status { margin: .75rem 0 0; }
161
+ @container (max-width: 30rem) {
162
+ .order .intro-wide { display: none; }
163
+ .order .intro-narrow { display: block; }
164
+ .order .handle, .order .mark { display: none; }
165
+ .order .row { gap: .375rem; padding-inline-start: .75rem; }
166
+ .order .between, .order .last { padding-inline-start: .75rem; }
167
+ .order .fix { padding-inline-start: 0; }
168
+ .order .levels { gap: .25rem; }
169
+ .order .changes .buttons { flex-direction: column; }
170
+ .order .changes .buttons button { min-height: 3rem; width: 100%; }
171
+ }
172
+ `;
173
+ const SVG = "http://www.w3.org/2000/svg";
174
+ function icon(paths, attributes) {
175
+ const svg = document.createElementNS(SVG, "svg");
176
+ svg.setAttribute("aria-hidden", "true");
177
+ svg.setAttribute("viewBox", "0 0 24 24");
178
+ svg.setAttribute("fill", "none");
179
+ svg.setAttribute("stroke-width", "1.8");
180
+ for (const [name, value] of Object.entries(attributes))
181
+ svg.setAttribute(name, value);
182
+ for (const path of paths) {
183
+ const element = document.createElementNS(SVG, path.tag);
184
+ for (const [name, value] of Object.entries(path.attributes))
185
+ element.setAttribute(name, value);
186
+ svg.append(element);
187
+ }
188
+ return svg;
189
+ }
190
+ const path = (d) => ({ attributes: { d }, tag: "path" });
191
+ /**
192
+ * Each channel's mark and brand colour, as presentation data: the section
193
+ * never branches on which channel it is drawing.
194
+ */
195
+ const CHANNEL_MARKS = {
196
+ email: {
197
+ color: null,
198
+ join: "round",
199
+ paths: [
200
+ {
201
+ attributes: { height: "14", rx: "2", width: "18", x: "3", y: "5" },
202
+ tag: "rect",
203
+ },
204
+ path("m3 7 9 6 9-6"),
205
+ ],
206
+ },
207
+ slack: {
208
+ color: "#611f69",
209
+ join: null,
210
+ paths: [path("M9 3v18M15 3v18M3 9h18M3 15h18")],
211
+ },
212
+ telegram: {
213
+ color: "#229ED9",
214
+ join: "round",
215
+ paths: [path("M21 4 3 11l6 2 2 6 3-4 5 4z"), path("m9 13 8-6")],
216
+ },
217
+ };
218
+ function channelMark(channel, muted) {
219
+ const shape = CHANNEL_MARKS[channel];
220
+ const mark = icon(shape.paths, {
221
+ height: "22",
222
+ stroke: muted || shape.color === null ? "currentColor" : shape.color,
223
+ width: "22",
224
+ ...(shape.join === null
225
+ ? { "stroke-linecap": "round" }
226
+ : { "stroke-linejoin": shape.join }),
227
+ });
228
+ mark.classList.add("mark");
229
+ if (muted)
230
+ mark.style.opacity = ".55";
231
+ return mark;
232
+ }
233
+ function handle() {
234
+ const svg = document.createElementNS(SVG, "svg");
235
+ svg.setAttribute("aria-hidden", "true");
236
+ svg.setAttribute("viewBox", "0 0 16 22");
237
+ svg.setAttribute("width", "14");
238
+ svg.setAttribute("height", "20");
239
+ svg.setAttribute("fill", "currentColor");
240
+ svg.classList.add("handle");
241
+ svg.style.opacity = ".55";
242
+ for (const [cx, cy] of [
243
+ [5, 5],
244
+ [11, 5],
245
+ [5, 11],
246
+ [11, 11],
247
+ [5, 17],
248
+ [11, 17],
249
+ ]) {
250
+ const dot = document.createElementNS(SVG, "circle");
251
+ dot.setAttribute("cx", String(cx));
252
+ dot.setAttribute("cy", String(cy));
253
+ dot.setAttribute("r", "1.6");
254
+ svg.append(dot);
255
+ }
256
+ return svg;
257
+ }
258
+ const chevron = (d) => icon([path(d)], {
259
+ height: "18",
260
+ stroke: "currentColor",
261
+ "stroke-linecap": "round",
262
+ "stroke-width": "2",
263
+ width: "18",
264
+ });
265
+ const cross = () => icon([path("M6 6l12 12M18 6 6 18")], {
266
+ height: "15",
267
+ stroke: "currentColor",
268
+ "stroke-linecap": "round",
269
+ "stroke-width": "2",
270
+ width: "15",
271
+ });
272
+ function button(label, action, run, options = {}) {
273
+ const element = document.createElement("button");
274
+ element.type = "button";
275
+ element.dataset["action"] = action;
276
+ if (options.className)
277
+ element.className = options.className;
278
+ if (options.content)
279
+ element.append(options.content);
280
+ else
281
+ element.textContent = label;
282
+ if (options.ariaLabel)
283
+ element.setAttribute("aria-label", options.ariaLabel);
284
+ if (options.pressed !== undefined)
285
+ element.setAttribute("aria-pressed", String(options.pressed));
286
+ element.disabled = options.disabled ?? false;
287
+ element.addEventListener("click", run);
288
+ return element;
289
+ }
290
+ function who(name, detail) {
291
+ const block = document.createElement("div");
292
+ block.className = "who";
293
+ const title = document.createElement("span");
294
+ title.className = "name";
295
+ title.textContent = name;
296
+ block.append(title);
297
+ if (detail) {
298
+ const line = document.createElement("span");
299
+ line.className = "detail";
300
+ line.textContent = detail;
301
+ block.append(line);
302
+ }
303
+ return block;
304
+ }
305
+ /** "Telegram, wait 5 min → Slack, wait 5 min → Email", from saved steps only. */
306
+ export function orderPreviewText(props) {
307
+ return previewFromRules({
308
+ channelName: props.channelName,
309
+ draft: props.draft,
310
+ order: props.order,
311
+ step: props.copy.orderPreviewStep,
312
+ });
313
+ }
314
+ export function renderOrderSection(props) {
315
+ const { copy, draft, on } = props;
316
+ const section = document.createElement("section");
317
+ section.className = "order";
318
+ const intro = document.createElement("p");
319
+ intro.className = "intro";
320
+ const wide = document.createElement("span");
321
+ wide.className = "intro-wide";
322
+ wide.textContent = copy.orderIntro;
323
+ const narrow = document.createElement("span");
324
+ narrow.className = "intro-narrow";
325
+ narrow.textContent = copy.orderIntroNarrow;
326
+ intro.append(wide, narrow);
327
+ section.append(intro);
328
+ const levels = document.createElement("div");
329
+ levels.className = "levels";
330
+ levels.setAttribute("role", "group");
331
+ levels.setAttribute("aria-label", copy.orderLevelsLabel);
332
+ for (const level of ORDER_LEVELS)
333
+ levels.append(button(copy.orderLevels[level], `order:level:${level}`, () => {
334
+ on.pickLevel(level);
335
+ }, { disabled: props.disabled, pressed: level === draft.level }));
336
+ section.append(levels);
337
+ if (props.usedFor.length > 0) {
338
+ const used = document.createElement("p");
339
+ used.className = "muted";
340
+ used.style.margin = "0";
341
+ used.textContent = copy.orderUsedFor(orderListText(props.locale, props.usedFor));
342
+ section.append(used);
343
+ }
344
+ const list = document.createElement("ol");
345
+ const steps = draft.steps;
346
+ let dragFrom = null;
347
+ steps.forEach((step, index) => {
348
+ const key = stepKey(step, index);
349
+ const name = props.channelName(step.channel);
350
+ const item = document.createElement("li");
351
+ item.dataset["key"] = key;
352
+ const row = document.createElement("div");
353
+ row.className = step.unavailable ? "row unavailable" : "row";
354
+ if (!props.disabled) {
355
+ row.draggable = true;
356
+ row.addEventListener("dragstart", (event) => {
357
+ dragFrom = index;
358
+ event.dataTransfer?.setData("text/plain", key);
359
+ if (event.dataTransfer)
360
+ event.dataTransfer.effectAllowed = "move";
361
+ });
362
+ row.addEventListener("dragend", () => {
363
+ dragFrom = null;
364
+ for (const target of list.querySelectorAll(".drop-target"))
365
+ target.classList.remove("drop-target");
366
+ });
367
+ }
368
+ item.addEventListener("dragover", (event) => {
369
+ if (dragFrom === null)
370
+ return;
371
+ event.preventDefault();
372
+ item.classList.add("drop-target");
373
+ });
374
+ item.addEventListener("dragleave", () => {
375
+ item.classList.remove("drop-target");
376
+ });
377
+ item.addEventListener("drop", (event) => {
378
+ event.preventDefault();
379
+ const from = dragFrom;
380
+ dragFrom = null;
381
+ if (from !== null)
382
+ on.move(from, index);
383
+ });
384
+ row.append(handle(), channelMark(step.channel, step.unavailable));
385
+ row.append(who(name, step.unavailable ? copy.orderDisconnected : step.maskedAddress));
386
+ row.append(button("", `order:up:${key}`, () => {
387
+ on.move(index, index - 1);
388
+ }, {
389
+ ariaLabel: copy.orderMoveUp(name),
390
+ className: "icon",
391
+ content: chevron("m6 15 6-6 6 6"),
392
+ disabled: props.disabled || index === 0,
393
+ }), button("", `order:down:${key}`, () => {
394
+ on.move(index, index + 1);
395
+ }, {
396
+ ariaLabel: copy.orderMoveDown(name),
397
+ className: "icon",
398
+ content: chevron("m6 9 6 6 6-6"),
399
+ disabled: props.disabled || index === steps.length - 1,
400
+ }), button("", `order:remove:${key}`, () => {
401
+ on.remove(index);
402
+ }, {
403
+ ariaLabel: copy.orderRemove(name),
404
+ className: "icon",
405
+ content: cross(),
406
+ disabled: props.disabled,
407
+ }));
408
+ if (step.unavailable) {
409
+ const fix = document.createElement("div");
410
+ fix.className = "fix";
411
+ if (props.canReconnect(step.channel))
412
+ fix.append(button(copy.orderReconnect(name), `order:reconnect:${key}`, () => {
413
+ on.reconnect(step.channel);
414
+ }, { disabled: props.disabled }));
415
+ fix.append(button(copy.orderRemoveFromOrder, `order:drop:${key}`, () => {
416
+ on.remove(index);
417
+ }, { className: "secondary", disabled: props.disabled }));
418
+ row.append(fix);
419
+ }
420
+ item.append(row);
421
+ if (index < steps.length - 1) {
422
+ const between = document.createElement("label");
423
+ between.className = "between";
424
+ const [before = "", after = ""] = copy.orderWait.split("{minutes}");
425
+ const input = document.createElement("input");
426
+ input.type = "number";
427
+ input.inputMode = "numeric";
428
+ const range = waitRange(draft.limits);
429
+ input.min = String(range.min);
430
+ input.max = String(Math.max(range.max, step.waitMinutes));
431
+ input.step = "1";
432
+ input.value = String(step.waitMinutes);
433
+ input.style.setProperty("--wait-digits", String(waitBoxDigits(step.waitMinutes)));
434
+ let shown = input.value;
435
+ input.dataset["action"] = `order:wait:${key}`;
436
+ input.disabled = props.disabled;
437
+ input.setAttribute("aria-label", copy.orderWaitLabel(name));
438
+ input.addEventListener("input", () => {
439
+ const kept = typedWait(input.value, shown);
440
+ if (kept !== input.value)
441
+ input.value = kept;
442
+ shown = input.value;
443
+ on.setWait(index, input.value, false);
444
+ });
445
+ // Typing already updated the order. Only a value that has to be
446
+ // corrected (out of range, or not a number) rebuilds the list, and then
447
+ // after focus has moved on: rebuilding under a pressed button would
448
+ // swallow the click on Save, and under a Tab would lose the focus.
449
+ input.addEventListener("change", () => {
450
+ const minutes = normalizeWait(input.value, draft.limits);
451
+ if (minutes !== null && String(minutes) === input.value)
452
+ return;
453
+ setTimeout(() => {
454
+ on.setWait(index, input.value, true);
455
+ }, 0);
456
+ });
457
+ if (before.trim())
458
+ between.append(before.trim());
459
+ between.append(input);
460
+ if (after.trim())
461
+ between.append(after.trim());
462
+ item.append(between);
463
+ }
464
+ else {
465
+ const last = document.createElement("div");
466
+ last.className = "last";
467
+ last.textContent = copy.orderLastTry;
468
+ item.append(last);
469
+ }
470
+ list.append(item);
471
+ });
472
+ section.append(list);
473
+ if (steps.length === 0) {
474
+ const warning = document.createElement("div");
475
+ warning.className = "warning";
476
+ warning.setAttribute("role", "note");
477
+ warning.textContent = copy.orderEmpty;
478
+ section.append(warning);
479
+ }
480
+ const candidates = orderCandidates(draft, props.order);
481
+ if (atStepLimit(draft, props.order)) {
482
+ const limit = document.createElement("div");
483
+ limit.className = "last";
484
+ limit.textContent = copy.orderStepLimit(String(draft.limits.maxSteps));
485
+ section.append(limit);
486
+ }
487
+ if (candidates.length > 0) {
488
+ const notIn = document.createElement("div");
489
+ notIn.className = "not-in";
490
+ const label = document.createElement("div");
491
+ label.className = "label";
492
+ label.textContent = copy.orderNotIn;
493
+ notIn.append(label);
494
+ for (const candidate of candidates) {
495
+ const name = props.channelName(candidate.channel);
496
+ const row = document.createElement("div");
497
+ row.className = "candidate";
498
+ row.append(who(name, candidate.maskedAddress));
499
+ row.append(button(copy.orderAdd, `order:add:${candidate.bindingId}`, () => {
500
+ on.add(candidate);
501
+ }, {
502
+ ariaLabel: copy.orderAddChannel(name),
503
+ className: "secondary",
504
+ disabled: props.disabled,
505
+ }));
506
+ notIn.append(row);
507
+ }
508
+ section.append(notIn);
509
+ }
510
+ if (props.changed) {
511
+ const changes = document.createElement("div");
512
+ changes.className = "changes";
513
+ const preview = orderPreviewText(props);
514
+ if (preview) {
515
+ const line = document.createElement("div");
516
+ line.className = "preview";
517
+ const lead = document.createElement("strong");
518
+ lead.textContent = `${copy.orderPreview} `;
519
+ const text = document.createElement("span");
520
+ text.className = "preview-text";
521
+ text.textContent = preview;
522
+ line.append(lead, text);
523
+ changes.append(line);
524
+ }
525
+ const buttons = document.createElement("div");
526
+ buttons.className = "buttons";
527
+ const empty = savedSteps(draft, props.order).length === 0;
528
+ buttons.append(button(empty ? copy.orderSaveEmpty : copy.orderSave, "order:save", on.save, {
529
+ className: "save",
530
+ disabled: props.disabled,
531
+ }), button(copy.orderDiscard, "order:discard", on.discard, {
532
+ className: "secondary",
533
+ disabled: props.disabled,
534
+ }));
535
+ changes.append(buttons);
536
+ section.append(changes);
537
+ }
538
+ else if (props.order.source === "subscriber_override") {
539
+ section.append(button(copy.orderReset, "order:reset", on.reset, {
540
+ className: "link",
541
+ disabled: props.disabled,
542
+ }));
543
+ }
544
+ section.append(props.status);
545
+ return section;
546
+ }
547
+ //# sourceMappingURL=order-section.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-section.js","sourceRoot":"","sources":["../../src/recipient/order-section.ts"],"names":[],"mappings":"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"}