@octaviaflow/core 3.1.0-beta.101 → 3.1.0-beta.102
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ExpressionField/ExpressionField.d.ts +44 -0
- package/dist/components/ExpressionField/ExpressionField.d.ts.map +1 -0
- package/dist/components/ExpressionField/index.d.ts +3 -0
- package/dist/components/ExpressionField/index.d.ts.map +1 -0
- package/dist/index.cjs +1102 -847
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +848 -591
- package/dist/index.js.map +1 -1
- package/dist/styles.css +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -34420,8 +34420,262 @@ var ToolCard = forwardRef96(
|
|
|
34420
34420
|
);
|
|
34421
34421
|
ToolCard.displayName = "ToolCard";
|
|
34422
34422
|
|
|
34423
|
-
// src/components/
|
|
34423
|
+
// src/components/ExpressionField/ExpressionField.tsx
|
|
34424
|
+
import {
|
|
34425
|
+
useCallback as useCallback50,
|
|
34426
|
+
useEffect as useEffect56,
|
|
34427
|
+
useId as useId61,
|
|
34428
|
+
useRef as useRef50
|
|
34429
|
+
} from "react";
|
|
34424
34430
|
import { jsx as jsx147, jsxs as jsxs141 } from "react/jsx-runtime";
|
|
34431
|
+
var REF_TOKEN = /(\{\{ods:\/\/[^}]+\}\}|\$\{[^}]+\})/g;
|
|
34432
|
+
var ANY_TOKEN = /(\{\{[^}]+\}\}|\$\{[^}]+\})/g;
|
|
34433
|
+
var CALL_TOKEN = /^\{\{\s*(?:[A-Z_][A-Z0-9_]*|user\.[A-Za-z_][A-Za-z0-9_]*)\s*\(/;
|
|
34434
|
+
var ZERO_WIDTH = "\u200B";
|
|
34435
|
+
function shortReferenceLabel(token) {
|
|
34436
|
+
if (token.startsWith("{{ods://")) {
|
|
34437
|
+
const path = token.slice(8, -2);
|
|
34438
|
+
const parts = path.split("/");
|
|
34439
|
+
if (parts[0] === "steps" && parts.length >= 4) return parts.slice(3).join(".");
|
|
34440
|
+
if (parts[0] === "flow") return `flow.${parts.slice(1).join(".")}`;
|
|
34441
|
+
return parts.join(".");
|
|
34442
|
+
}
|
|
34443
|
+
if (token.startsWith("${")) return token.slice(2, -1);
|
|
34444
|
+
if (token.startsWith("{{")) return token.slice(2, -2).trim();
|
|
34445
|
+
return token;
|
|
34446
|
+
}
|
|
34447
|
+
function serialize(el) {
|
|
34448
|
+
let out = "";
|
|
34449
|
+
el.childNodes.forEach((node) => {
|
|
34450
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
34451
|
+
out += (node.textContent || "").replace(//g, "");
|
|
34452
|
+
return;
|
|
34453
|
+
}
|
|
34454
|
+
if (node.nodeType !== Node.ELEMENT_NODE) return;
|
|
34455
|
+
const elem = node;
|
|
34456
|
+
if (elem.classList.contains("ods-expression-field__pill")) {
|
|
34457
|
+
out += elem.getAttribute("data-value") || "";
|
|
34458
|
+
} else if (elem.tagName === "BR") {
|
|
34459
|
+
out += "\n";
|
|
34460
|
+
} else if (elem.tagName === "DIV" || elem.tagName === "P") {
|
|
34461
|
+
out += `
|
|
34462
|
+
${serialize(elem)}`;
|
|
34463
|
+
} else {
|
|
34464
|
+
out += (elem.textContent || "").replace(//g, "");
|
|
34465
|
+
}
|
|
34466
|
+
});
|
|
34467
|
+
return out;
|
|
34468
|
+
}
|
|
34469
|
+
function insideCallArguments(textBeforeCaret) {
|
|
34470
|
+
let depth = 0;
|
|
34471
|
+
let quote = null;
|
|
34472
|
+
for (let i = 0; i < textBeforeCaret.length; i++) {
|
|
34473
|
+
const ch = textBeforeCaret[i];
|
|
34474
|
+
if (quote) {
|
|
34475
|
+
if (ch === quote) quote = null;
|
|
34476
|
+
continue;
|
|
34477
|
+
}
|
|
34478
|
+
if (ch === '"' || ch === "'") {
|
|
34479
|
+
quote = ch;
|
|
34480
|
+
continue;
|
|
34481
|
+
}
|
|
34482
|
+
if (ch === "(") depth++;
|
|
34483
|
+
else if (ch === ")") depth = Math.max(0, depth - 1);
|
|
34484
|
+
}
|
|
34485
|
+
return depth > 0;
|
|
34486
|
+
}
|
|
34487
|
+
function ExpressionField({
|
|
34488
|
+
value,
|
|
34489
|
+
onChange,
|
|
34490
|
+
label,
|
|
34491
|
+
placeholder,
|
|
34492
|
+
helperText,
|
|
34493
|
+
disabled = false,
|
|
34494
|
+
rows = 4,
|
|
34495
|
+
id,
|
|
34496
|
+
className,
|
|
34497
|
+
style,
|
|
34498
|
+
resolveLabel,
|
|
34499
|
+
pillEveryToken = false,
|
|
34500
|
+
"aria-label": ariaLabel
|
|
34501
|
+
}) {
|
|
34502
|
+
const fieldRef = useRef50(null);
|
|
34503
|
+
const fromSelf = useRef50(false);
|
|
34504
|
+
const generatedId = useId61();
|
|
34505
|
+
const fieldId = id ?? generatedId;
|
|
34506
|
+
const helperId = `${fieldId}-helper`;
|
|
34507
|
+
const splitPattern = pillEveryToken ? ANY_TOKEN : REF_TOKEN;
|
|
34508
|
+
const isPillToken = useCallback50(
|
|
34509
|
+
(part) => {
|
|
34510
|
+
if (CALL_TOKEN.test(part)) return false;
|
|
34511
|
+
return pillEveryToken ? /^(\{\{[^}]+\}\}|\$\{[^}]+\})$/.test(part) : /^(\{\{ods:\/\/[^}]+\}\}|\$\{[^}]+\})$/.test(part);
|
|
34512
|
+
},
|
|
34513
|
+
[pillEveryToken]
|
|
34514
|
+
);
|
|
34515
|
+
const labelFor = useCallback50(
|
|
34516
|
+
(token) => resolveLabel?.(token) ?? shortReferenceLabel(token),
|
|
34517
|
+
[resolveLabel]
|
|
34518
|
+
);
|
|
34519
|
+
const makePill = useCallback50(
|
|
34520
|
+
(token) => {
|
|
34521
|
+
const pill = document.createElement("span");
|
|
34522
|
+
pill.className = "ods-expression-field__pill";
|
|
34523
|
+
pill.contentEditable = "false";
|
|
34524
|
+
pill.setAttribute("data-value", token);
|
|
34525
|
+
pill.textContent = labelFor(token);
|
|
34526
|
+
return pill;
|
|
34527
|
+
},
|
|
34528
|
+
[labelFor]
|
|
34529
|
+
);
|
|
34530
|
+
const render = useCallback50(
|
|
34531
|
+
(raw) => {
|
|
34532
|
+
const el = fieldRef.current;
|
|
34533
|
+
if (!el) return;
|
|
34534
|
+
el.innerHTML = "";
|
|
34535
|
+
if (!raw) return;
|
|
34536
|
+
raw.split(new RegExp(splitPattern.source, "g")).forEach((part) => {
|
|
34537
|
+
if (!part) return;
|
|
34538
|
+
if (isPillToken(part)) {
|
|
34539
|
+
el.appendChild(makePill(part));
|
|
34540
|
+
el.appendChild(document.createTextNode(ZERO_WIDTH));
|
|
34541
|
+
} else {
|
|
34542
|
+
el.appendChild(document.createTextNode(part));
|
|
34543
|
+
}
|
|
34544
|
+
});
|
|
34545
|
+
},
|
|
34546
|
+
[splitPattern, isPillToken, makePill]
|
|
34547
|
+
);
|
|
34548
|
+
useEffect56(() => {
|
|
34549
|
+
if (fromSelf.current) {
|
|
34550
|
+
fromSelf.current = false;
|
|
34551
|
+
return;
|
|
34552
|
+
}
|
|
34553
|
+
render(value);
|
|
34554
|
+
}, [value, render]);
|
|
34555
|
+
const commit = useCallback50(() => {
|
|
34556
|
+
const el = fieldRef.current;
|
|
34557
|
+
if (!el) return;
|
|
34558
|
+
fromSelf.current = true;
|
|
34559
|
+
onChange(serialize(el));
|
|
34560
|
+
}, [onChange]);
|
|
34561
|
+
const textBeforeCaret = useCallback50(() => {
|
|
34562
|
+
const el = fieldRef.current;
|
|
34563
|
+
const sel = typeof window !== "undefined" ? window.getSelection() : null;
|
|
34564
|
+
if (!el || !sel || sel.rangeCount === 0 || !el.contains(sel.anchorNode)) return "";
|
|
34565
|
+
const range = sel.getRangeAt(0).cloneRange();
|
|
34566
|
+
range.setStart(el, 0);
|
|
34567
|
+
const fragment = range.cloneContents();
|
|
34568
|
+
const holder = document.createElement("div");
|
|
34569
|
+
holder.appendChild(fragment);
|
|
34570
|
+
return serialize(holder);
|
|
34571
|
+
}, []);
|
|
34572
|
+
const insert = useCallback50(
|
|
34573
|
+
({ value: raw, kind }) => {
|
|
34574
|
+
const el = fieldRef.current;
|
|
34575
|
+
if (!el || disabled) return;
|
|
34576
|
+
const sel = window.getSelection();
|
|
34577
|
+
const hasCaret = !!sel && sel.rangeCount > 0 && el.contains(sel.anchorNode);
|
|
34578
|
+
const asArgument = hasCaret && insideCallArguments(textBeforeCaret());
|
|
34579
|
+
const isCall = kind === "function" || /\(\s*\)?\s*$/.test(raw.trim());
|
|
34580
|
+
const text = isCall ? raw : asArgument ? raw : raw.startsWith("ods://") ? `{{${raw}}}` : raw;
|
|
34581
|
+
const node = !isCall && !asArgument && (text.startsWith("{{") || text.startsWith("${")) ? makePill(text) : document.createTextNode(text);
|
|
34582
|
+
const range = hasCaret && sel ? sel.getRangeAt(0) : (() => {
|
|
34583
|
+
const r = document.createRange();
|
|
34584
|
+
r.selectNodeContents(el);
|
|
34585
|
+
r.collapse(false);
|
|
34586
|
+
return r;
|
|
34587
|
+
})();
|
|
34588
|
+
range.deleteContents();
|
|
34589
|
+
range.insertNode(node);
|
|
34590
|
+
const after = document.createTextNode(ZERO_WIDTH);
|
|
34591
|
+
range.setStartAfter(node);
|
|
34592
|
+
range.insertNode(after);
|
|
34593
|
+
if (node.nodeType === Node.TEXT_NODE && isCall) {
|
|
34594
|
+
const open = text.lastIndexOf("(");
|
|
34595
|
+
const close = text.lastIndexOf(")");
|
|
34596
|
+
if (open !== -1 && close === open + 1) {
|
|
34597
|
+
range.setStart(node, open + 1);
|
|
34598
|
+
range.collapse(true);
|
|
34599
|
+
} else {
|
|
34600
|
+
range.setStartAfter(after);
|
|
34601
|
+
range.collapse(true);
|
|
34602
|
+
}
|
|
34603
|
+
} else {
|
|
34604
|
+
range.setStartAfter(after);
|
|
34605
|
+
range.collapse(true);
|
|
34606
|
+
}
|
|
34607
|
+
el.focus();
|
|
34608
|
+
const selection = window.getSelection();
|
|
34609
|
+
selection?.removeAllRanges();
|
|
34610
|
+
selection?.addRange(range);
|
|
34611
|
+
commit();
|
|
34612
|
+
},
|
|
34613
|
+
[commit, disabled, makePill, textBeforeCaret]
|
|
34614
|
+
);
|
|
34615
|
+
const handleDragOver = useCallback50(
|
|
34616
|
+
(e) => {
|
|
34617
|
+
if (disabled) return;
|
|
34618
|
+
if (e.dataTransfer.types.includes("application/x-fx-insert")) {
|
|
34619
|
+
e.preventDefault();
|
|
34620
|
+
e.dataTransfer.dropEffect = "copy";
|
|
34621
|
+
fieldRef.current?.classList.add("ods-expression-field__input--dragover");
|
|
34622
|
+
}
|
|
34623
|
+
},
|
|
34624
|
+
[disabled]
|
|
34625
|
+
);
|
|
34626
|
+
const handleDragLeave = useCallback50(() => {
|
|
34627
|
+
fieldRef.current?.classList.remove("ods-expression-field__input--dragover");
|
|
34628
|
+
}, []);
|
|
34629
|
+
const handleDrop = useCallback50(
|
|
34630
|
+
(e) => {
|
|
34631
|
+
const raw = e.dataTransfer.getData("application/x-fx-insert");
|
|
34632
|
+
if (!raw || disabled) return;
|
|
34633
|
+
e.preventDefault();
|
|
34634
|
+
fieldRef.current?.classList.remove("ods-expression-field__input--dragover");
|
|
34635
|
+
const kind = e.dataTransfer.getData("application/x-fx-type");
|
|
34636
|
+
insert({ value: raw, kind: kind === "function" ? "function" : "variable" });
|
|
34637
|
+
},
|
|
34638
|
+
[disabled, insert]
|
|
34639
|
+
);
|
|
34640
|
+
const handlePaste = useCallback50((e) => {
|
|
34641
|
+
e.preventDefault();
|
|
34642
|
+
const text = e.clipboardData.getData("text/plain");
|
|
34643
|
+
document.execCommand("insertText", false, text);
|
|
34644
|
+
}, []);
|
|
34645
|
+
return /* @__PURE__ */ jsxs141("div", { className: cn("ods-expression-field", className), style, children: [
|
|
34646
|
+
label && /* @__PURE__ */ jsx147("label", { className: "ods-expression-field__label", htmlFor: fieldId, children: label }),
|
|
34647
|
+
/* @__PURE__ */ jsx147(
|
|
34648
|
+
"div",
|
|
34649
|
+
{
|
|
34650
|
+
id: fieldId,
|
|
34651
|
+
ref: fieldRef,
|
|
34652
|
+
role: "textbox",
|
|
34653
|
+
"aria-multiline": "true",
|
|
34654
|
+
"aria-label": ariaLabel ?? (typeof label === "string" ? label : void 0),
|
|
34655
|
+
"aria-describedby": helperText ? helperId : void 0,
|
|
34656
|
+
"aria-disabled": disabled || void 0,
|
|
34657
|
+
contentEditable: !disabled,
|
|
34658
|
+
suppressContentEditableWarning: true,
|
|
34659
|
+
"data-placeholder": placeholder,
|
|
34660
|
+
className: cn(
|
|
34661
|
+
"ods-expression-field__input",
|
|
34662
|
+
disabled && "ods-expression-field__input--disabled"
|
|
34663
|
+
),
|
|
34664
|
+
style: { minHeight: `${Math.max(1, rows) * 1.5 + 1}rem` },
|
|
34665
|
+
onInput: commit,
|
|
34666
|
+
onBlur: commit,
|
|
34667
|
+
onDragOver: handleDragOver,
|
|
34668
|
+
onDragLeave: handleDragLeave,
|
|
34669
|
+
onDrop: handleDrop,
|
|
34670
|
+
onPaste: handlePaste
|
|
34671
|
+
}
|
|
34672
|
+
),
|
|
34673
|
+
helperText && /* @__PURE__ */ jsx147("span", { id: helperId, className: "ods-expression-field__helper", children: helperText })
|
|
34674
|
+
] });
|
|
34675
|
+
}
|
|
34676
|
+
|
|
34677
|
+
// src/components/TopBar/TopBar.tsx
|
|
34678
|
+
import { jsx as jsx148, jsxs as jsxs142 } from "react/jsx-runtime";
|
|
34425
34679
|
function TopBar({
|
|
34426
34680
|
brand,
|
|
34427
34681
|
workspaceSwitcher,
|
|
@@ -34441,32 +34695,32 @@ function TopBar({
|
|
|
34441
34695
|
const showDividerAfterBrand = hasBrandBlock && (hasWorkspace || hasCrumbs || hasTitle);
|
|
34442
34696
|
const showDividerAfterWorkspace = hasWorkspace && (hasCrumbs || hasTitle);
|
|
34443
34697
|
const BrandRoot = brand?.href ? "a" : "div";
|
|
34444
|
-
return /* @__PURE__ */
|
|
34445
|
-
/* @__PURE__ */
|
|
34446
|
-
brand && /* @__PURE__ */
|
|
34698
|
+
return /* @__PURE__ */ jsxs142("header", { ...props, className: cn("ods-topbar", className), children: [
|
|
34699
|
+
/* @__PURE__ */ jsxs142("div", { className: "ods-topbar__left", children: [
|
|
34700
|
+
brand && /* @__PURE__ */ jsxs142(
|
|
34447
34701
|
BrandRoot,
|
|
34448
34702
|
{
|
|
34449
34703
|
href: brand.href,
|
|
34450
34704
|
className: cn("ods-topbar__brand", brand.href && "ods-topbar__brand--link"),
|
|
34451
34705
|
children: [
|
|
34452
|
-
brand.logo && /* @__PURE__ */
|
|
34453
|
-
/* @__PURE__ */
|
|
34706
|
+
brand.logo && /* @__PURE__ */ jsx148("span", { className: "ods-topbar__brand-mark", children: brand.logo }),
|
|
34707
|
+
/* @__PURE__ */ jsx148("span", { className: "ods-topbar__brand-name", children: brand.name })
|
|
34454
34708
|
]
|
|
34455
34709
|
}
|
|
34456
34710
|
),
|
|
34457
|
-
showDividerAfterBrand && /* @__PURE__ */
|
|
34458
|
-
workspaceSwitcher && /* @__PURE__ */
|
|
34459
|
-
showDividerAfterWorkspace && /* @__PURE__ */
|
|
34460
|
-
hasCrumbs && /* @__PURE__ */
|
|
34461
|
-
idx > 0 && /* @__PURE__ */
|
|
34462
|
-
crumb.href ? /* @__PURE__ */
|
|
34711
|
+
showDividerAfterBrand && /* @__PURE__ */ jsx148("span", { className: "ods-topbar__divider", "aria-hidden": "true" }),
|
|
34712
|
+
workspaceSwitcher && /* @__PURE__ */ jsx148("div", { className: "ods-topbar__workspace", children: workspaceSwitcher }),
|
|
34713
|
+
showDividerAfterWorkspace && /* @__PURE__ */ jsx148("span", { className: "ods-topbar__divider", "aria-hidden": "true" }),
|
|
34714
|
+
hasCrumbs && /* @__PURE__ */ jsx148("nav", { className: "ods-topbar__breadcrumbs", "aria-label": "Breadcrumb", children: /* @__PURE__ */ jsx148("ol", { children: breadcrumbs.map((crumb, idx) => /* @__PURE__ */ jsxs142("li", { className: "ods-topbar__crumb", children: [
|
|
34715
|
+
idx > 0 && /* @__PURE__ */ jsx148("span", { className: "ods-topbar__separator", "aria-hidden": "true", children: "/" }),
|
|
34716
|
+
crumb.href ? /* @__PURE__ */ jsx148("a", { href: crumb.href, children: crumb.label }) : /* @__PURE__ */ jsx148("span", { "aria-current": idx === breadcrumbs.length - 1 ? "page" : void 0, children: crumb.label })
|
|
34463
34717
|
] }, idx)) }) }),
|
|
34464
|
-
hasTitle && /* @__PURE__ */
|
|
34718
|
+
hasTitle && /* @__PURE__ */ jsx148("h1", { className: "ods-topbar__title", children: title })
|
|
34465
34719
|
] }),
|
|
34466
|
-
children && /* @__PURE__ */
|
|
34467
|
-
/* @__PURE__ */
|
|
34468
|
-
onSearch && /* @__PURE__ */
|
|
34469
|
-
/* @__PURE__ */
|
|
34720
|
+
children && /* @__PURE__ */ jsx148("div", { className: "ods-topbar__center", children }),
|
|
34721
|
+
/* @__PURE__ */ jsxs142("div", { className: "ods-topbar__right", children: [
|
|
34722
|
+
onSearch && /* @__PURE__ */ jsxs142("div", { className: "ods-topbar__search", children: [
|
|
34723
|
+
/* @__PURE__ */ jsx148(
|
|
34470
34724
|
"svg",
|
|
34471
34725
|
{
|
|
34472
34726
|
className: "ods-topbar__search-icon",
|
|
@@ -34475,7 +34729,7 @@ function TopBar({
|
|
|
34475
34729
|
viewBox: "0 0 20 20",
|
|
34476
34730
|
fill: "currentColor",
|
|
34477
34731
|
"aria-hidden": "true",
|
|
34478
|
-
children: /* @__PURE__ */
|
|
34732
|
+
children: /* @__PURE__ */ jsx148(
|
|
34479
34733
|
"path",
|
|
34480
34734
|
{
|
|
34481
34735
|
fillRule: "evenodd",
|
|
@@ -34485,7 +34739,7 @@ function TopBar({
|
|
|
34485
34739
|
)
|
|
34486
34740
|
}
|
|
34487
34741
|
),
|
|
34488
|
-
/* @__PURE__ */
|
|
34742
|
+
/* @__PURE__ */ jsx148(
|
|
34489
34743
|
"input",
|
|
34490
34744
|
{
|
|
34491
34745
|
type: "search",
|
|
@@ -34496,7 +34750,7 @@ function TopBar({
|
|
|
34496
34750
|
}
|
|
34497
34751
|
)
|
|
34498
34752
|
] }),
|
|
34499
|
-
actions && /* @__PURE__ */
|
|
34753
|
+
actions && /* @__PURE__ */ jsx148("div", { className: "ods-topbar__actions", children: actions })
|
|
34500
34754
|
] })
|
|
34501
34755
|
] });
|
|
34502
34756
|
}
|
|
@@ -34505,8 +34759,8 @@ function TopBar({
|
|
|
34505
34759
|
import { AnimatePresence as AnimatePresence19, motion as motion29 } from "framer-motion";
|
|
34506
34760
|
import {
|
|
34507
34761
|
forwardRef as forwardRef97,
|
|
34508
|
-
useCallback as
|
|
34509
|
-
useId as
|
|
34762
|
+
useCallback as useCallback51,
|
|
34763
|
+
useId as useId62,
|
|
34510
34764
|
useState as useState71
|
|
34511
34765
|
} from "react";
|
|
34512
34766
|
import {
|
|
@@ -34518,13 +34772,13 @@ import {
|
|
|
34518
34772
|
IdeaIcon,
|
|
34519
34773
|
WarningAltIcon as WarningAltIcon2
|
|
34520
34774
|
} from "@octaviaflow/icons";
|
|
34521
|
-
import { jsx as
|
|
34775
|
+
import { jsx as jsx149, jsxs as jsxs143 } from "react/jsx-runtime";
|
|
34522
34776
|
var DEFAULT_KIND_GLYPH = {
|
|
34523
|
-
thought: /* @__PURE__ */
|
|
34524
|
-
tool: /* @__PURE__ */
|
|
34525
|
-
input: /* @__PURE__ */
|
|
34526
|
-
output: /* @__PURE__ */
|
|
34527
|
-
error: /* @__PURE__ */
|
|
34777
|
+
thought: /* @__PURE__ */ jsx149(IdeaIcon, { size: "xs" }),
|
|
34778
|
+
tool: /* @__PURE__ */ jsx149(BuildToolIcon, { size: "xs" }),
|
|
34779
|
+
input: /* @__PURE__ */ jsx149(ConnectionReceiveIcon, { size: "xs" }),
|
|
34780
|
+
output: /* @__PURE__ */ jsx149(ConnectionSendIcon, { size: "xs" }),
|
|
34781
|
+
error: /* @__PURE__ */ jsx149(WarningAltIcon2, { size: "xs" })
|
|
34528
34782
|
};
|
|
34529
34783
|
var FALLBACK_GLYPH = DEFAULT_KIND_GLYPH.thought;
|
|
34530
34784
|
var TraceStep = forwardRef97(
|
|
@@ -34549,7 +34803,7 @@ var TraceStep = forwardRef97(
|
|
|
34549
34803
|
className,
|
|
34550
34804
|
...rest
|
|
34551
34805
|
}, ref) {
|
|
34552
|
-
const reactId =
|
|
34806
|
+
const reactId = useId62();
|
|
34553
34807
|
const baseId = providedId ?? `ods-trace-step-${reactId}`;
|
|
34554
34808
|
const headId = `${baseId}-head`;
|
|
34555
34809
|
const contentId = `${baseId}-content`;
|
|
@@ -34557,14 +34811,14 @@ var TraceStep = forwardRef97(
|
|
|
34557
34811
|
const isControlled = controlledOpen !== void 0;
|
|
34558
34812
|
const open = isControlled ? controlledOpen : uncontrolledOpen;
|
|
34559
34813
|
const canExpand = !!children;
|
|
34560
|
-
const toggle =
|
|
34814
|
+
const toggle = useCallback51(() => {
|
|
34561
34815
|
if (!canExpand) return;
|
|
34562
34816
|
const next = !open;
|
|
34563
34817
|
if (!isControlled) setUncontrolledOpen(next);
|
|
34564
34818
|
onOpenChange?.(next);
|
|
34565
34819
|
}, [canExpand, open, isControlled, onOpenChange]);
|
|
34566
34820
|
const resolvedGlyph = icon ?? kindIcons?.[kind] ?? DEFAULT_KIND_GLYPH[kind] ?? FALLBACK_GLYPH;
|
|
34567
|
-
return /* @__PURE__ */
|
|
34821
|
+
return /* @__PURE__ */ jsxs143(
|
|
34568
34822
|
"div",
|
|
34569
34823
|
{
|
|
34570
34824
|
...rest,
|
|
@@ -34580,18 +34834,18 @@ var TraceStep = forwardRef97(
|
|
|
34580
34834
|
className
|
|
34581
34835
|
),
|
|
34582
34836
|
children: [
|
|
34583
|
-
/* @__PURE__ */
|
|
34584
|
-
/* @__PURE__ */
|
|
34837
|
+
/* @__PURE__ */ jsxs143("div", { className: "ods-trace-step__rail", "aria-hidden": "true", children: [
|
|
34838
|
+
/* @__PURE__ */ jsx149(
|
|
34585
34839
|
motion29.span,
|
|
34586
34840
|
{
|
|
34587
34841
|
className: "ods-trace-step__icon",
|
|
34588
34842
|
initial: disableAnimation ? false : { scale: 0.6, opacity: 0 },
|
|
34589
34843
|
animate: { scale: 1, opacity: 1 },
|
|
34590
34844
|
transition: { duration: 0.2, ease: [0.16, 1, 0.3, 1] },
|
|
34591
|
-
children: status === "running" ? /* @__PURE__ */
|
|
34845
|
+
children: status === "running" ? /* @__PURE__ */ jsx149("span", { className: "ods-trace-step__spin", children: /* @__PURE__ */ jsx149(CircleDashIcon, { size: "xs" }) }) : resolvedGlyph
|
|
34592
34846
|
}
|
|
34593
34847
|
),
|
|
34594
|
-
!isLast && /* @__PURE__ */
|
|
34848
|
+
!isLast && /* @__PURE__ */ jsx149(
|
|
34595
34849
|
motion29.span,
|
|
34596
34850
|
{
|
|
34597
34851
|
className: "ods-trace-step__line",
|
|
@@ -34601,8 +34855,8 @@ var TraceStep = forwardRef97(
|
|
|
34601
34855
|
}
|
|
34602
34856
|
)
|
|
34603
34857
|
] }),
|
|
34604
|
-
/* @__PURE__ */
|
|
34605
|
-
/* @__PURE__ */
|
|
34858
|
+
/* @__PURE__ */ jsxs143("div", { className: "ods-trace-step__body", children: [
|
|
34859
|
+
/* @__PURE__ */ jsxs143(
|
|
34606
34860
|
"button",
|
|
34607
34861
|
{
|
|
34608
34862
|
id: headId,
|
|
@@ -34613,7 +34867,7 @@ var TraceStep = forwardRef97(
|
|
|
34613
34867
|
"aria-controls": canExpand ? contentId : void 0,
|
|
34614
34868
|
disabled: !canExpand,
|
|
34615
34869
|
children: [
|
|
34616
|
-
index != null && /* @__PURE__ */
|
|
34870
|
+
index != null && /* @__PURE__ */ jsx149(
|
|
34617
34871
|
"span",
|
|
34618
34872
|
{
|
|
34619
34873
|
className: cn(
|
|
@@ -34623,32 +34877,32 @@ var TraceStep = forwardRef97(
|
|
|
34623
34877
|
children: index
|
|
34624
34878
|
}
|
|
34625
34879
|
),
|
|
34626
|
-
/* @__PURE__ */
|
|
34627
|
-
tool && /* @__PURE__ */
|
|
34880
|
+
/* @__PURE__ */ jsx149("span", { className: "ods-trace-step__title", children: title }),
|
|
34881
|
+
tool && /* @__PURE__ */ jsxs143(
|
|
34628
34882
|
"span",
|
|
34629
34883
|
{
|
|
34630
34884
|
className: "ods-trace-step__tool",
|
|
34631
34885
|
title: tool,
|
|
34632
34886
|
"aria-label": `Tool: ${tool}`,
|
|
34633
34887
|
children: [
|
|
34634
|
-
/* @__PURE__ */
|
|
34888
|
+
/* @__PURE__ */ jsx149("span", { className: "ods-trace-step__tool-icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx149(BuildToolIcon, { size: "xs" }) }),
|
|
34635
34889
|
tool
|
|
34636
34890
|
]
|
|
34637
34891
|
}
|
|
34638
34892
|
),
|
|
34639
|
-
/* @__PURE__ */
|
|
34640
|
-
tokens != null && /* @__PURE__ */
|
|
34893
|
+
/* @__PURE__ */ jsxs143("span", { className: "ods-trace-step__meta", children: [
|
|
34894
|
+
tokens != null && /* @__PURE__ */ jsxs143(
|
|
34641
34895
|
"span",
|
|
34642
34896
|
{
|
|
34643
34897
|
className: "ods-trace-step__tokens",
|
|
34644
34898
|
"aria-label": `${tokens} tokens`,
|
|
34645
34899
|
children: [
|
|
34646
|
-
/* @__PURE__ */
|
|
34900
|
+
/* @__PURE__ */ jsx149("span", { children: tokens.toLocaleString() }),
|
|
34647
34901
|
" tok"
|
|
34648
34902
|
]
|
|
34649
34903
|
}
|
|
34650
34904
|
),
|
|
34651
|
-
duration && /* @__PURE__ */
|
|
34905
|
+
duration && /* @__PURE__ */ jsx149(
|
|
34652
34906
|
"span",
|
|
34653
34907
|
{
|
|
34654
34908
|
className: "ods-trace-step__duration",
|
|
@@ -34657,20 +34911,20 @@ var TraceStep = forwardRef97(
|
|
|
34657
34911
|
}
|
|
34658
34912
|
)
|
|
34659
34913
|
] }),
|
|
34660
|
-
canExpand && /* @__PURE__ */
|
|
34914
|
+
canExpand && /* @__PURE__ */ jsx149(
|
|
34661
34915
|
motion29.span,
|
|
34662
34916
|
{
|
|
34663
34917
|
className: "ods-trace-step__chev",
|
|
34664
34918
|
"aria-hidden": "true",
|
|
34665
34919
|
animate: { rotate: open ? 180 : 0 },
|
|
34666
34920
|
transition: { duration: 0.18, ease: [0.16, 1, 0.3, 1] },
|
|
34667
|
-
children: /* @__PURE__ */
|
|
34921
|
+
children: /* @__PURE__ */ jsx149(CaretDownIcon5, { size: "xs" })
|
|
34668
34922
|
}
|
|
34669
34923
|
)
|
|
34670
34924
|
]
|
|
34671
34925
|
}
|
|
34672
34926
|
),
|
|
34673
|
-
/* @__PURE__ */
|
|
34927
|
+
/* @__PURE__ */ jsx149(AnimatePresence19, { initial: false, children: canExpand && open && /* @__PURE__ */ jsx149(
|
|
34674
34928
|
motion29.div,
|
|
34675
34929
|
{
|
|
34676
34930
|
id: contentId,
|
|
@@ -34682,7 +34936,7 @@ var TraceStep = forwardRef97(
|
|
|
34682
34936
|
exit: disableAnimation ? void 0 : { height: 0, opacity: 0 },
|
|
34683
34937
|
transition: { duration: 0.2, ease: [0.16, 1, 0.3, 1] },
|
|
34684
34938
|
style: { overflow: "hidden" },
|
|
34685
|
-
children: /* @__PURE__ */
|
|
34939
|
+
children: /* @__PURE__ */ jsx149("div", { className: "ods-trace-step__content-inner", children })
|
|
34686
34940
|
},
|
|
34687
34941
|
"content"
|
|
34688
34942
|
) })
|
|
@@ -34697,9 +34951,9 @@ TraceStep.displayName = "TraceStep";
|
|
|
34697
34951
|
// src/components/UsageMeter/UsageMeter.tsx
|
|
34698
34952
|
import {
|
|
34699
34953
|
forwardRef as forwardRef98,
|
|
34700
|
-
useId as
|
|
34954
|
+
useId as useId63
|
|
34701
34955
|
} from "react";
|
|
34702
|
-
import { jsx as
|
|
34956
|
+
import { jsx as jsx150, jsxs as jsxs144 } from "react/jsx-runtime";
|
|
34703
34957
|
var defaultFormat8 = (n) => n.toLocaleString();
|
|
34704
34958
|
var UsageMeter = forwardRef98(
|
|
34705
34959
|
function UsageMeter2({
|
|
@@ -34718,7 +34972,7 @@ var UsageMeter = forwardRef98(
|
|
|
34718
34972
|
"aria-label": ariaLabel,
|
|
34719
34973
|
...rest
|
|
34720
34974
|
}, ref) {
|
|
34721
|
-
const reactId =
|
|
34975
|
+
const reactId = useId63();
|
|
34722
34976
|
const baseId = providedId ?? `ods-usage-meter-${reactId}`;
|
|
34723
34977
|
const labelId = label ? `${baseId}-label` : void 0;
|
|
34724
34978
|
const captionId = caption ? `${baseId}-caption` : void 0;
|
|
@@ -34735,7 +34989,7 @@ var UsageMeter = forwardRef98(
|
|
|
34735
34989
|
const tone = exhausted ? "danger" : warned ? "warning" : "default";
|
|
34736
34990
|
const resolvedValueLabel = valueLabel ?? `${formatValue(clamped)} / ${formatValue(safeAllowance)}${safeBonus > 0 ? ` + ${formatValue(safeBonus)}` : ""}`;
|
|
34737
34991
|
const valueText = `${formatValue(clamped)} of ${formatValue(safeAllowance)} used` + (safeBonus > 0 ? `, plus ${formatValue(Math.max(0, safeBonus - inBonus))} add-on available` : "");
|
|
34738
|
-
return /* @__PURE__ */
|
|
34992
|
+
return /* @__PURE__ */ jsxs144(
|
|
34739
34993
|
"div",
|
|
34740
34994
|
{
|
|
34741
34995
|
...rest,
|
|
@@ -34748,9 +35002,9 @@ var UsageMeter = forwardRef98(
|
|
|
34748
35002
|
className
|
|
34749
35003
|
),
|
|
34750
35004
|
children: [
|
|
34751
|
-
(label || !hideValueLabel) && /* @__PURE__ */
|
|
34752
|
-
label && /* @__PURE__ */
|
|
34753
|
-
!hideValueLabel && /* @__PURE__ */
|
|
35005
|
+
(label || !hideValueLabel) && /* @__PURE__ */ jsxs144("div", { className: "ods-usage-meter__header", children: [
|
|
35006
|
+
label && /* @__PURE__ */ jsx150("span", { id: labelId, className: "ods-usage-meter__label", children: label }),
|
|
35007
|
+
!hideValueLabel && /* @__PURE__ */ jsx150(
|
|
34754
35008
|
"span",
|
|
34755
35009
|
{
|
|
34756
35010
|
className: "ods-usage-meter__value-label",
|
|
@@ -34759,7 +35013,7 @@ var UsageMeter = forwardRef98(
|
|
|
34759
35013
|
}
|
|
34760
35014
|
)
|
|
34761
35015
|
] }),
|
|
34762
|
-
/* @__PURE__ */
|
|
35016
|
+
/* @__PURE__ */ jsxs144(
|
|
34763
35017
|
"div",
|
|
34764
35018
|
{
|
|
34765
35019
|
className: "ods-usage-meter__track",
|
|
@@ -34772,12 +35026,12 @@ var UsageMeter = forwardRef98(
|
|
|
34772
35026
|
"aria-labelledby": labelId,
|
|
34773
35027
|
"aria-describedby": captionId,
|
|
34774
35028
|
children: [
|
|
34775
|
-
/* @__PURE__ */
|
|
35029
|
+
/* @__PURE__ */ jsx150(
|
|
34776
35030
|
"div",
|
|
34777
35031
|
{
|
|
34778
35032
|
className: "ods-usage-meter__segment ods-usage-meter__segment--allowance",
|
|
34779
35033
|
style: { flexGrow: safeAllowance || 1 },
|
|
34780
|
-
children: /* @__PURE__ */
|
|
35034
|
+
children: /* @__PURE__ */ jsx150(
|
|
34781
35035
|
"div",
|
|
34782
35036
|
{
|
|
34783
35037
|
className: "ods-usage-meter__fill",
|
|
@@ -34786,12 +35040,12 @@ var UsageMeter = forwardRef98(
|
|
|
34786
35040
|
)
|
|
34787
35041
|
}
|
|
34788
35042
|
),
|
|
34789
|
-
safeBonus > 0 && /* @__PURE__ */
|
|
35043
|
+
safeBonus > 0 && /* @__PURE__ */ jsx150(
|
|
34790
35044
|
"div",
|
|
34791
35045
|
{
|
|
34792
35046
|
className: "ods-usage-meter__segment ods-usage-meter__segment--bonus",
|
|
34793
35047
|
style: { flexGrow: safeBonus },
|
|
34794
|
-
children: /* @__PURE__ */
|
|
35048
|
+
children: /* @__PURE__ */ jsx150(
|
|
34795
35049
|
"div",
|
|
34796
35050
|
{
|
|
34797
35051
|
className: "ods-usage-meter__fill ods-usage-meter__fill--bonus",
|
|
@@ -34803,7 +35057,7 @@ var UsageMeter = forwardRef98(
|
|
|
34803
35057
|
]
|
|
34804
35058
|
}
|
|
34805
35059
|
),
|
|
34806
|
-
caption && /* @__PURE__ */
|
|
35060
|
+
caption && /* @__PURE__ */ jsx150("span", { id: captionId, className: "ods-usage-meter__caption", children: caption })
|
|
34807
35061
|
]
|
|
34808
35062
|
}
|
|
34809
35063
|
);
|
|
@@ -34814,9 +35068,9 @@ UsageMeter.displayName = "UsageMeter";
|
|
|
34814
35068
|
// src/components/UserCard/UserCard.tsx
|
|
34815
35069
|
import {
|
|
34816
35070
|
forwardRef as forwardRef99,
|
|
34817
|
-
useId as
|
|
35071
|
+
useId as useId64
|
|
34818
35072
|
} from "react";
|
|
34819
|
-
import { Fragment as Fragment62, jsx as
|
|
35073
|
+
import { Fragment as Fragment62, jsx as jsx151, jsxs as jsxs145 } from "react/jsx-runtime";
|
|
34820
35074
|
var UserCard = forwardRef99(function UserCard2({
|
|
34821
35075
|
name,
|
|
34822
35076
|
nameAs = "h3",
|
|
@@ -34837,16 +35091,16 @@ var UserCard = forwardRef99(function UserCard2({
|
|
|
34837
35091
|
className,
|
|
34838
35092
|
...rest
|
|
34839
35093
|
}, ref) {
|
|
34840
|
-
const reactId =
|
|
35094
|
+
const reactId = useId64();
|
|
34841
35095
|
const baseId = providedId ?? `ods-user-card-${reactId}`;
|
|
34842
35096
|
const nameId = `${baseId}-name`;
|
|
34843
35097
|
const isInteractive = Boolean(href || onClick) && !disabled;
|
|
34844
35098
|
const renderAvatar = () => {
|
|
34845
35099
|
if (avatarNode) {
|
|
34846
|
-
return /* @__PURE__ */
|
|
35100
|
+
return /* @__PURE__ */ jsx151("span", { className: "ods-user-card__avatar ods-user-card__avatar--legacy", "aria-hidden": "true", children: avatarNode });
|
|
34847
35101
|
}
|
|
34848
35102
|
const derivedInitials = avatar?.initials ?? (typeof initial === "string" ? initial : typeof name === "string" ? name.charAt(0).toUpperCase() : void 0);
|
|
34849
|
-
return /* @__PURE__ */
|
|
35103
|
+
return /* @__PURE__ */ jsx151(
|
|
34850
35104
|
Avatar,
|
|
34851
35105
|
{
|
|
34852
35106
|
size: orientation === "horizontal" ? "md" : "lg",
|
|
@@ -34860,18 +35114,18 @@ var UserCard = forwardRef99(function UserCard2({
|
|
|
34860
35114
|
}
|
|
34861
35115
|
);
|
|
34862
35116
|
};
|
|
34863
|
-
const body = /* @__PURE__ */
|
|
35117
|
+
const body = /* @__PURE__ */ jsxs145(Fragment62, { children: [
|
|
34864
35118
|
renderAvatar(),
|
|
34865
|
-
/* @__PURE__ */
|
|
34866
|
-
/* @__PURE__ */
|
|
34867
|
-
role && /* @__PURE__ */
|
|
34868
|
-
meta2 && /* @__PURE__ */
|
|
35119
|
+
/* @__PURE__ */ jsxs145("div", { className: "ods-user-card__body", children: [
|
|
35120
|
+
/* @__PURE__ */ jsx151(Card.Title, { as: nameAs, id: nameId, className: "ods-user-card__name", children: name }),
|
|
35121
|
+
role && /* @__PURE__ */ jsx151("div", { className: "ods-user-card__role", children: role }),
|
|
35122
|
+
meta2 && /* @__PURE__ */ jsx151("div", { className: "ods-user-card__meta", children: meta2 })
|
|
34869
35123
|
] }),
|
|
34870
|
-
stats && stats.length > 0 && /* @__PURE__ */
|
|
34871
|
-
/* @__PURE__ */
|
|
34872
|
-
/* @__PURE__ */
|
|
35124
|
+
stats && stats.length > 0 && /* @__PURE__ */ jsx151("div", { className: "ods-user-card__stats", children: stats.map((s, i) => /* @__PURE__ */ jsxs145("div", { className: "ods-user-card__stat", children: [
|
|
35125
|
+
/* @__PURE__ */ jsx151("div", { className: "ods-user-card__stat-value", children: s.value }),
|
|
35126
|
+
/* @__PURE__ */ jsx151("div", { className: "ods-user-card__stat-label", children: s.label })
|
|
34873
35127
|
] }, i)) }),
|
|
34874
|
-
action && /* @__PURE__ */
|
|
35128
|
+
action && /* @__PURE__ */ jsx151("div", { className: "ods-user-card__action", children: action })
|
|
34875
35129
|
] });
|
|
34876
35130
|
const sharedClass = cn(
|
|
34877
35131
|
"ods-user-card",
|
|
@@ -34881,7 +35135,7 @@ var UserCard = forwardRef99(function UserCard2({
|
|
|
34881
35135
|
className
|
|
34882
35136
|
);
|
|
34883
35137
|
if (href && !disabled) {
|
|
34884
|
-
return /* @__PURE__ */
|
|
35138
|
+
return /* @__PURE__ */ jsx151(Card, { asChild: true, radius, padding: "none", className: sharedClass, "aria-labelledby": nameId, children: /* @__PURE__ */ jsx151(
|
|
34885
35139
|
"a",
|
|
34886
35140
|
{
|
|
34887
35141
|
...rest,
|
|
@@ -34893,7 +35147,7 @@ var UserCard = forwardRef99(function UserCard2({
|
|
|
34893
35147
|
}
|
|
34894
35148
|
) });
|
|
34895
35149
|
}
|
|
34896
|
-
return /* @__PURE__ */
|
|
35150
|
+
return /* @__PURE__ */ jsx151(
|
|
34897
35151
|
Card,
|
|
34898
35152
|
{
|
|
34899
35153
|
...rest,
|
|
@@ -34912,10 +35166,10 @@ var UserCard = forwardRef99(function UserCard2({
|
|
|
34912
35166
|
UserCard.displayName = "UserCard";
|
|
34913
35167
|
|
|
34914
35168
|
// src/components/WorkflowEditor/WorkflowEditor.tsx
|
|
34915
|
-
import { useCallback as
|
|
35169
|
+
import { useCallback as useCallback53, useMemo as useMemo39, useState as useState72 } from "react";
|
|
34916
35170
|
|
|
34917
35171
|
// src/hooks/useWorkflow.ts
|
|
34918
|
-
import { useCallback as
|
|
35172
|
+
import { useCallback as useCallback52, useMemo as useMemo38, useReducer } from "react";
|
|
34919
35173
|
|
|
34920
35174
|
// src/workflow/types.ts
|
|
34921
35175
|
var types_exports = {};
|
|
@@ -35429,11 +35683,11 @@ function useWorkflow(options2 = {}) {
|
|
|
35429
35683
|
[]
|
|
35430
35684
|
);
|
|
35431
35685
|
const [workflow, dispatch] = useReducer(reducer, initial);
|
|
35432
|
-
const addNode =
|
|
35686
|
+
const addNode = useCallback52(
|
|
35433
35687
|
(node) => dispatch({ type: "ADD_NODE", payload: node }),
|
|
35434
35688
|
[]
|
|
35435
35689
|
);
|
|
35436
|
-
const createNode =
|
|
35690
|
+
const createNode = useCallback52(
|
|
35437
35691
|
(partial) => {
|
|
35438
35692
|
const id = partial.id ?? genId("node");
|
|
35439
35693
|
const ports = partial.ports ?? {
|
|
@@ -35482,27 +35736,27 @@ function useWorkflow(options2 = {}) {
|
|
|
35482
35736
|
},
|
|
35483
35737
|
[]
|
|
35484
35738
|
);
|
|
35485
|
-
const updateNode =
|
|
35739
|
+
const updateNode = useCallback52(
|
|
35486
35740
|
(id, updates) => dispatch({ type: "UPDATE_NODE", payload: { id, updates } }),
|
|
35487
35741
|
[]
|
|
35488
35742
|
);
|
|
35489
|
-
const deleteNode =
|
|
35743
|
+
const deleteNode = useCallback52(
|
|
35490
35744
|
(id) => dispatch({ type: "DELETE_NODE", payload: id }),
|
|
35491
35745
|
[]
|
|
35492
35746
|
);
|
|
35493
|
-
const deleteNodes =
|
|
35747
|
+
const deleteNodes = useCallback52(
|
|
35494
35748
|
(ids) => dispatch({ type: "DELETE_NODES", payload: ids }),
|
|
35495
35749
|
[]
|
|
35496
35750
|
);
|
|
35497
|
-
const replaceNodes =
|
|
35751
|
+
const replaceNodes = useCallback52(
|
|
35498
35752
|
(nodes) => dispatch({ type: "REPLACE_NODES", payload: nodes }),
|
|
35499
35753
|
[]
|
|
35500
35754
|
);
|
|
35501
|
-
const addEdge =
|
|
35755
|
+
const addEdge = useCallback52(
|
|
35502
35756
|
(edge) => dispatch({ type: "ADD_EDGE", payload: edge }),
|
|
35503
35757
|
[]
|
|
35504
35758
|
);
|
|
35505
|
-
const createEdge =
|
|
35759
|
+
const createEdge = useCallback52(
|
|
35506
35760
|
(source, sourcePort, target, targetPort) => {
|
|
35507
35761
|
const edge = {
|
|
35508
35762
|
id: genId("edge"),
|
|
@@ -35520,20 +35774,20 @@ function useWorkflow(options2 = {}) {
|
|
|
35520
35774
|
},
|
|
35521
35775
|
[]
|
|
35522
35776
|
);
|
|
35523
|
-
const deleteEdge =
|
|
35777
|
+
const deleteEdge = useCallback52(
|
|
35524
35778
|
(id) => dispatch({ type: "DELETE_EDGE", payload: id }),
|
|
35525
35779
|
[]
|
|
35526
35780
|
);
|
|
35527
|
-
const replaceEdges =
|
|
35781
|
+
const replaceEdges = useCallback52(
|
|
35528
35782
|
(edges) => dispatch({ type: "REPLACE_EDGES", payload: edges }),
|
|
35529
35783
|
[]
|
|
35530
35784
|
);
|
|
35531
|
-
const startConnecting =
|
|
35785
|
+
const startConnecting = useCallback52(
|
|
35532
35786
|
(nodeId, portId, portType) => dispatch({ type: "START_CONNECTING", payload: { nodeId, portId, portType } }),
|
|
35533
35787
|
[]
|
|
35534
35788
|
);
|
|
35535
|
-
const endConnecting =
|
|
35536
|
-
const selectNode =
|
|
35789
|
+
const endConnecting = useCallback52(() => dispatch({ type: "END_CONNECTING" }), []);
|
|
35790
|
+
const selectNode = useCallback52(
|
|
35537
35791
|
(id, multi = false) => {
|
|
35538
35792
|
if (multi) {
|
|
35539
35793
|
const current = workflow.canvas.selectedNodes;
|
|
@@ -35545,36 +35799,36 @@ function useWorkflow(options2 = {}) {
|
|
|
35545
35799
|
},
|
|
35546
35800
|
[workflow.canvas.selectedNodes]
|
|
35547
35801
|
);
|
|
35548
|
-
const selectNodes =
|
|
35802
|
+
const selectNodes = useCallback52(
|
|
35549
35803
|
(ids) => dispatch({ type: "SELECT_NODES", payload: ids }),
|
|
35550
35804
|
[]
|
|
35551
35805
|
);
|
|
35552
|
-
const selectEdge =
|
|
35806
|
+
const selectEdge = useCallback52(
|
|
35553
35807
|
(id) => dispatch({ type: "SELECT_EDGE", payload: id }),
|
|
35554
35808
|
[]
|
|
35555
35809
|
);
|
|
35556
|
-
const deselectAll =
|
|
35557
|
-
const zoomIn =
|
|
35810
|
+
const deselectAll = useCallback52(() => dispatch({ type: "DESELECT_ALL" }), []);
|
|
35811
|
+
const zoomIn = useCallback52(() => {
|
|
35558
35812
|
const z = Math.min(workflow.canvas.viewport.zoom * 1.2, 2);
|
|
35559
35813
|
dispatch({ type: "UPDATE_VIEWPORT", payload: { zoom: z } });
|
|
35560
35814
|
}, [workflow.canvas.viewport.zoom]);
|
|
35561
|
-
const zoomOut =
|
|
35815
|
+
const zoomOut = useCallback52(() => {
|
|
35562
35816
|
const z = Math.max(workflow.canvas.viewport.zoom / 1.2, 0.25);
|
|
35563
35817
|
dispatch({ type: "UPDATE_VIEWPORT", payload: { zoom: z } });
|
|
35564
35818
|
}, [workflow.canvas.viewport.zoom]);
|
|
35565
|
-
const resetViewport =
|
|
35819
|
+
const resetViewport = useCallback52(
|
|
35566
35820
|
() => dispatch({ type: "UPDATE_VIEWPORT", payload: { x: 0, y: 0, zoom: 1 } }),
|
|
35567
35821
|
[]
|
|
35568
35822
|
);
|
|
35569
|
-
const setViewport =
|
|
35823
|
+
const setViewport = useCallback52(
|
|
35570
35824
|
(viewport) => dispatch({ type: "UPDATE_VIEWPORT", payload: viewport }),
|
|
35571
35825
|
[]
|
|
35572
35826
|
);
|
|
35573
|
-
const undo =
|
|
35574
|
-
const redo =
|
|
35827
|
+
const undo = useCallback52(() => dispatch({ type: "UNDO" }), []);
|
|
35828
|
+
const redo = useCallback52(() => dispatch({ type: "REDO" }), []);
|
|
35575
35829
|
const canUndo = workflow.canvas.history.past.length > 0;
|
|
35576
35830
|
const canRedo = workflow.canvas.history.future.length > 0;
|
|
35577
|
-
const validate =
|
|
35831
|
+
const validate = useCallback52(() => workflow.validation, [workflow.validation]);
|
|
35578
35832
|
return {
|
|
35579
35833
|
workflow,
|
|
35580
35834
|
dispatch,
|
|
@@ -35607,7 +35861,7 @@ function useWorkflow(options2 = {}) {
|
|
|
35607
35861
|
}
|
|
35608
35862
|
|
|
35609
35863
|
// src/components/WorkflowEditor/WorkflowEditor.tsx
|
|
35610
|
-
import { jsx as
|
|
35864
|
+
import { jsx as jsx152, jsxs as jsxs146 } from "react/jsx-runtime";
|
|
35611
35865
|
var NODE_KIND_MAP = {
|
|
35612
35866
|
trigger: "trigger",
|
|
35613
35867
|
action: "action",
|
|
@@ -35652,7 +35906,7 @@ function WorkflowEditor({
|
|
|
35652
35906
|
drawer,
|
|
35653
35907
|
console: consoleSlot,
|
|
35654
35908
|
minimap,
|
|
35655
|
-
emptyState = /* @__PURE__ */
|
|
35909
|
+
emptyState = /* @__PURE__ */ jsx152(DefaultEmptyState, {}),
|
|
35656
35910
|
children,
|
|
35657
35911
|
background = "dots",
|
|
35658
35912
|
snapToGrid = true,
|
|
@@ -35688,27 +35942,27 @@ function WorkflowEditor({
|
|
|
35688
35942
|
const isDrawerOpen = controlledDrawerOpen ?? uncontrolledDrawer;
|
|
35689
35943
|
const isHistoryOpen = controlledHistoryOpen ?? uncontrolledHistory;
|
|
35690
35944
|
const isDebugOpen = controlledDebugOpen ?? uncontrolledDebug;
|
|
35691
|
-
const toggleLock =
|
|
35945
|
+
const toggleLock = useCallback53(() => {
|
|
35692
35946
|
const next = !isLockMode;
|
|
35693
35947
|
if (controlledLockMode === void 0) setUncontrolledLock(next);
|
|
35694
35948
|
onToggleLockMode?.(next);
|
|
35695
35949
|
}, [isLockMode, controlledLockMode, onToggleLockMode]);
|
|
35696
|
-
const toggleDrawer =
|
|
35950
|
+
const toggleDrawer = useCallback53(() => {
|
|
35697
35951
|
const next = !isDrawerOpen;
|
|
35698
35952
|
if (controlledDrawerOpen === void 0) setUncontrolledDrawer(next);
|
|
35699
35953
|
onToggleDrawer?.(next);
|
|
35700
35954
|
}, [isDrawerOpen, controlledDrawerOpen, onToggleDrawer]);
|
|
35701
|
-
const toggleHistory =
|
|
35955
|
+
const toggleHistory = useCallback53(() => {
|
|
35702
35956
|
const next = !isHistoryOpen;
|
|
35703
35957
|
if (controlledHistoryOpen === void 0) setUncontrolledHistory(next);
|
|
35704
35958
|
onToggleHistory?.(next);
|
|
35705
35959
|
}, [isHistoryOpen, controlledHistoryOpen, onToggleHistory]);
|
|
35706
|
-
const toggleDebug =
|
|
35960
|
+
const toggleDebug = useCallback53(() => {
|
|
35707
35961
|
const next = !isDebugOpen;
|
|
35708
35962
|
if (controlledDebugOpen === void 0) setUncontrolledDebug(next);
|
|
35709
35963
|
onToggleDebug?.(next);
|
|
35710
35964
|
}, [isDebugOpen, controlledDebugOpen, onToggleDebug]);
|
|
35711
|
-
const handleReset =
|
|
35965
|
+
const handleReset = useCallback53(() => {
|
|
35712
35966
|
if (onReset) onReset();
|
|
35713
35967
|
else dispatch({ type: "RESET" });
|
|
35714
35968
|
}, [onReset, dispatch]);
|
|
@@ -35717,7 +35971,7 @@ function WorkflowEditor({
|
|
|
35717
35971
|
[workflow.canvas.nodes]
|
|
35718
35972
|
);
|
|
35719
35973
|
const nextEdges = useMemo39(() => workflow.canvas.edges.map(toNextEdge), [workflow.canvas.edges]);
|
|
35720
|
-
const onNodesChange =
|
|
35974
|
+
const onNodesChange = useCallback53(
|
|
35721
35975
|
(changes) => {
|
|
35722
35976
|
const reduced = applyNodeChanges(
|
|
35723
35977
|
nextNodes,
|
|
@@ -35758,7 +36012,7 @@ function WorkflowEditor({
|
|
|
35758
36012
|
},
|
|
35759
36013
|
[nextNodes, workflow.canvas.nodes, wf, onNodeSelect]
|
|
35760
36014
|
);
|
|
35761
|
-
const onEdgesChange =
|
|
36015
|
+
const onEdgesChange = useCallback53(
|
|
35762
36016
|
(changes) => {
|
|
35763
36017
|
const reduced = applyEdgeChanges(nextEdges, changes);
|
|
35764
36018
|
const byId = new Map(reduced.map((e) => [e.id, e]));
|
|
@@ -35768,18 +36022,18 @@ function WorkflowEditor({
|
|
|
35768
36022
|
},
|
|
35769
36023
|
[nextEdges, workflow.canvas.edges, wf]
|
|
35770
36024
|
);
|
|
35771
|
-
const onConnect =
|
|
36025
|
+
const onConnect = useCallback53(
|
|
35772
36026
|
(c) => {
|
|
35773
36027
|
wf.createEdge(c.source, c.sourceHandle ?? "default", c.target, c.targetHandle ?? "default");
|
|
35774
36028
|
},
|
|
35775
36029
|
[wf]
|
|
35776
36030
|
);
|
|
35777
36031
|
const [canvasSize, setCanvasSize] = useState72({ w: 0, h: 0 });
|
|
35778
|
-
const handleCanvasRef =
|
|
36032
|
+
const handleCanvasRef = useCallback53((node) => {
|
|
35779
36033
|
if (!node) return;
|
|
35780
36034
|
setCanvasSize({ w: node.clientWidth, h: node.clientHeight });
|
|
35781
36035
|
}, []);
|
|
35782
|
-
const fitToView =
|
|
36036
|
+
const fitToView = useCallback53(() => {
|
|
35783
36037
|
const nodes = workflow.canvas.nodes;
|
|
35784
36038
|
if (nodes.length === 0) return;
|
|
35785
36039
|
let minX = Infinity;
|
|
@@ -35808,8 +36062,8 @@ function WorkflowEditor({
|
|
|
35808
36062
|
wf.setViewport({ x: cw / 2 - cx * zoom, y: ch / 2 - cy * zoom, zoom });
|
|
35809
36063
|
}, [workflow.canvas.nodes, canvasSize, wf]);
|
|
35810
36064
|
const defaultToolbar = useMemo39(
|
|
35811
|
-
() => /* @__PURE__ */
|
|
35812
|
-
onSave && /* @__PURE__ */
|
|
36065
|
+
() => /* @__PURE__ */ jsxs146(FlowToolbar, { placement: "left", children: [
|
|
36066
|
+
onSave && /* @__PURE__ */ jsx152(
|
|
35813
36067
|
FlowToolbarButton,
|
|
35814
36068
|
{
|
|
35815
36069
|
icon: FlowToolbarIcons.save,
|
|
@@ -35818,7 +36072,7 @@ function WorkflowEditor({
|
|
|
35818
36072
|
onClick: () => onSave(workflow)
|
|
35819
36073
|
}
|
|
35820
36074
|
),
|
|
35821
|
-
onRun && /* @__PURE__ */
|
|
36075
|
+
onRun && /* @__PURE__ */ jsx152(
|
|
35822
36076
|
FlowToolbarButton,
|
|
35823
36077
|
{
|
|
35824
36078
|
icon: isExecuting ? FlowToolbarIcons.stop : FlowToolbarIcons.run,
|
|
@@ -35829,7 +36083,7 @@ function WorkflowEditor({
|
|
|
35829
36083
|
onClick: isExecuting ? onStop : onRun
|
|
35830
36084
|
}
|
|
35831
36085
|
),
|
|
35832
|
-
/* @__PURE__ */
|
|
36086
|
+
/* @__PURE__ */ jsx152(
|
|
35833
36087
|
FlowToolbarButton,
|
|
35834
36088
|
{
|
|
35835
36089
|
icon: isLockMode ? FlowToolbarIcons.lock : FlowToolbarIcons.unlock,
|
|
@@ -35839,7 +36093,7 @@ function WorkflowEditor({
|
|
|
35839
36093
|
onClick: toggleLock
|
|
35840
36094
|
}
|
|
35841
36095
|
),
|
|
35842
|
-
/* @__PURE__ */
|
|
36096
|
+
/* @__PURE__ */ jsx152(
|
|
35843
36097
|
FlowToolbarButton,
|
|
35844
36098
|
{
|
|
35845
36099
|
icon: FlowToolbarIcons.reset,
|
|
@@ -35847,7 +36101,7 @@ function WorkflowEditor({
|
|
|
35847
36101
|
onClick: handleReset
|
|
35848
36102
|
}
|
|
35849
36103
|
),
|
|
35850
|
-
drawer && /* @__PURE__ */
|
|
36104
|
+
drawer && /* @__PURE__ */ jsx152(
|
|
35851
36105
|
FlowToolbarButton,
|
|
35852
36106
|
{
|
|
35853
36107
|
icon: isDrawerOpen ? FlowToolbarIcons.drawerClose : FlowToolbarIcons.drawerOpen,
|
|
@@ -35856,8 +36110,8 @@ function WorkflowEditor({
|
|
|
35856
36110
|
onClick: toggleDrawer
|
|
35857
36111
|
}
|
|
35858
36112
|
),
|
|
35859
|
-
/* @__PURE__ */
|
|
35860
|
-
onSettings && /* @__PURE__ */
|
|
36113
|
+
/* @__PURE__ */ jsx152(FlowToolbarDivider, {}),
|
|
36114
|
+
onSettings && /* @__PURE__ */ jsx152(
|
|
35861
36115
|
FlowToolbarButton,
|
|
35862
36116
|
{
|
|
35863
36117
|
icon: FlowToolbarIcons.settings,
|
|
@@ -35865,7 +36119,7 @@ function WorkflowEditor({
|
|
|
35865
36119
|
onClick: onSettings
|
|
35866
36120
|
}
|
|
35867
36121
|
),
|
|
35868
|
-
/* @__PURE__ */
|
|
36122
|
+
/* @__PURE__ */ jsx152(
|
|
35869
36123
|
FlowToolbarButton,
|
|
35870
36124
|
{
|
|
35871
36125
|
icon: FlowToolbarIcons.history,
|
|
@@ -35874,7 +36128,7 @@ function WorkflowEditor({
|
|
|
35874
36128
|
onClick: toggleHistory
|
|
35875
36129
|
}
|
|
35876
36130
|
),
|
|
35877
|
-
isDebugModeEnabled && /* @__PURE__ */
|
|
36131
|
+
isDebugModeEnabled && /* @__PURE__ */ jsx152(
|
|
35878
36132
|
FlowToolbarButton,
|
|
35879
36133
|
{
|
|
35880
36134
|
icon: FlowToolbarIcons.debug,
|
|
@@ -35883,8 +36137,8 @@ function WorkflowEditor({
|
|
|
35883
36137
|
onClick: toggleDebug
|
|
35884
36138
|
}
|
|
35885
36139
|
),
|
|
35886
|
-
/* @__PURE__ */
|
|
35887
|
-
/* @__PURE__ */
|
|
36140
|
+
/* @__PURE__ */ jsx152(FlowToolbarDivider, {}),
|
|
36141
|
+
/* @__PURE__ */ jsx152(
|
|
35888
36142
|
FlowToolbarButton,
|
|
35889
36143
|
{
|
|
35890
36144
|
icon: FlowToolbarIcons.undo,
|
|
@@ -35894,7 +36148,7 @@ function WorkflowEditor({
|
|
|
35894
36148
|
onClick: undo
|
|
35895
36149
|
}
|
|
35896
36150
|
),
|
|
35897
|
-
/* @__PURE__ */
|
|
36151
|
+
/* @__PURE__ */ jsx152(
|
|
35898
36152
|
FlowToolbarButton,
|
|
35899
36153
|
{
|
|
35900
36154
|
icon: FlowToolbarIcons.redo,
|
|
@@ -35904,8 +36158,8 @@ function WorkflowEditor({
|
|
|
35904
36158
|
onClick: redo
|
|
35905
36159
|
}
|
|
35906
36160
|
),
|
|
35907
|
-
/* @__PURE__ */
|
|
35908
|
-
/* @__PURE__ */
|
|
36161
|
+
/* @__PURE__ */ jsx152(FlowToolbarDivider, {}),
|
|
36162
|
+
/* @__PURE__ */ jsx152(
|
|
35909
36163
|
FlowToolbarZoom,
|
|
35910
36164
|
{
|
|
35911
36165
|
zoom: workflow.canvas.viewport.zoom,
|
|
@@ -35944,21 +36198,21 @@ function WorkflowEditor({
|
|
|
35944
36198
|
);
|
|
35945
36199
|
const resolvedToolbar = toolbar === "default" ? defaultToolbar : toolbar === null ? null : toolbar;
|
|
35946
36200
|
const isEmpty = workflow.canvas.nodes.length === 0 && workflow.canvas.edges.length === 0;
|
|
35947
|
-
return /* @__PURE__ */
|
|
36201
|
+
return /* @__PURE__ */ jsxs146(
|
|
35948
36202
|
"div",
|
|
35949
36203
|
{
|
|
35950
36204
|
className: cn("ods-workflow-editor", className),
|
|
35951
36205
|
style: { width, height, position: "relative", display: "flex", overflow: "hidden" },
|
|
35952
36206
|
children: [
|
|
35953
|
-
drawer && isDrawerOpen && /* @__PURE__ */
|
|
35954
|
-
/* @__PURE__ */
|
|
36207
|
+
drawer && isDrawerOpen && /* @__PURE__ */ jsx152("div", { className: "ods-workflow-editor__drawer", children: drawer }),
|
|
36208
|
+
/* @__PURE__ */ jsxs146(
|
|
35955
36209
|
"div",
|
|
35956
36210
|
{
|
|
35957
36211
|
ref: handleCanvasRef,
|
|
35958
36212
|
className: "ods-workflow-editor__canvas-wrapper",
|
|
35959
36213
|
style: { position: "relative", flex: 1, minWidth: 0 },
|
|
35960
36214
|
children: [
|
|
35961
|
-
/* @__PURE__ */
|
|
36215
|
+
/* @__PURE__ */ jsx152(
|
|
35962
36216
|
FlowCanvas,
|
|
35963
36217
|
{
|
|
35964
36218
|
nodes: nextNodes,
|
|
@@ -35972,9 +36226,9 @@ function WorkflowEditor({
|
|
|
35972
36226
|
children: resolvedToolbar
|
|
35973
36227
|
}
|
|
35974
36228
|
),
|
|
35975
|
-
minimap && /* @__PURE__ */
|
|
35976
|
-
consoleSlot && /* @__PURE__ */
|
|
35977
|
-
isEmpty && emptyState && /* @__PURE__ */
|
|
36229
|
+
minimap && /* @__PURE__ */ jsx152("div", { className: "ods-workflow-editor__minimap", children: minimap }),
|
|
36230
|
+
consoleSlot && /* @__PURE__ */ jsx152("div", { className: "ods-workflow-editor__console", children: consoleSlot }),
|
|
36231
|
+
isEmpty && emptyState && /* @__PURE__ */ jsx152("div", { className: "ods-workflow-editor__empty", children: emptyState }),
|
|
35978
36232
|
children
|
|
35979
36233
|
]
|
|
35980
36234
|
}
|
|
@@ -35984,7 +36238,7 @@ function WorkflowEditor({
|
|
|
35984
36238
|
);
|
|
35985
36239
|
}
|
|
35986
36240
|
function DefaultEmptyState() {
|
|
35987
|
-
return /* @__PURE__ */
|
|
36241
|
+
return /* @__PURE__ */ jsxs146(
|
|
35988
36242
|
"div",
|
|
35989
36243
|
{
|
|
35990
36244
|
style: {
|
|
@@ -35999,14 +36253,14 @@ function DefaultEmptyState() {
|
|
|
35999
36253
|
pointerEvents: "none"
|
|
36000
36254
|
},
|
|
36001
36255
|
children: [
|
|
36002
|
-
/* @__PURE__ */
|
|
36256
|
+
/* @__PURE__ */ jsx152(
|
|
36003
36257
|
"div",
|
|
36004
36258
|
{
|
|
36005
36259
|
style: { fontSize: 14, fontWeight: 600, color: "var(--ods-text-primary)", marginBottom: 4 },
|
|
36006
36260
|
children: "Start with a trigger"
|
|
36007
36261
|
}
|
|
36008
36262
|
),
|
|
36009
|
-
/* @__PURE__ */
|
|
36263
|
+
/* @__PURE__ */ jsx152("div", { style: { fontSize: 12 }, children: "Drop an action here, or use the drawer to add your first node." })
|
|
36010
36264
|
]
|
|
36011
36265
|
}
|
|
36012
36266
|
);
|
|
@@ -36024,7 +36278,7 @@ import {
|
|
|
36024
36278
|
} from "@octaviaflow/icons";
|
|
36025
36279
|
|
|
36026
36280
|
// src/hooks/useWorkflowRuntime.ts
|
|
36027
|
-
import { useEffect as
|
|
36281
|
+
import { useEffect as useEffect57, useState as useState73 } from "react";
|
|
36028
36282
|
function toMs2(t) {
|
|
36029
36283
|
if (t == null) return null;
|
|
36030
36284
|
return typeof t === "number" ? t : t.getTime();
|
|
@@ -36039,7 +36293,7 @@ function formatWorkflowRuntime(ms) {
|
|
|
36039
36293
|
}
|
|
36040
36294
|
function useWorkflowRuntime(startedAt, active) {
|
|
36041
36295
|
const [, force] = useState73(0);
|
|
36042
|
-
|
|
36296
|
+
useEffect57(() => {
|
|
36043
36297
|
if (!active || startedAt == null) return;
|
|
36044
36298
|
if (typeof window === "undefined") return;
|
|
36045
36299
|
const id = window.setInterval(() => force((n) => n + 1), 1e3);
|
|
@@ -36051,7 +36305,7 @@ function useWorkflowRuntime(startedAt, active) {
|
|
|
36051
36305
|
}
|
|
36052
36306
|
|
|
36053
36307
|
// src/components/WorkflowHeader/WorkflowHeader.tsx
|
|
36054
|
-
import { Fragment as Fragment63, jsx as
|
|
36308
|
+
import { Fragment as Fragment63, jsx as jsx153, jsxs as jsxs147 } from "react/jsx-runtime";
|
|
36055
36309
|
function WorkflowHeader({
|
|
36056
36310
|
name,
|
|
36057
36311
|
statusTone,
|
|
@@ -36090,21 +36344,21 @@ function WorkflowHeader({
|
|
|
36090
36344
|
})();
|
|
36091
36345
|
const rootCls = cn("ods-workflow-header", `ods-workflow-header--${size}`, className);
|
|
36092
36346
|
if (loading) {
|
|
36093
|
-
return /* @__PURE__ */
|
|
36094
|
-
/* @__PURE__ */
|
|
36095
|
-
/* @__PURE__ */
|
|
36096
|
-
/* @__PURE__ */
|
|
36347
|
+
return /* @__PURE__ */ jsxs147("header", { className: rootCls, "data-loading": "true", children: [
|
|
36348
|
+
/* @__PURE__ */ jsxs147("div", { className: "ods-workflow-header__left", children: [
|
|
36349
|
+
/* @__PURE__ */ jsx153(Skeleton, { variant: "text", width: "120px" }),
|
|
36350
|
+
/* @__PURE__ */ jsx153(Skeleton, { variant: "text", width: "180px" })
|
|
36097
36351
|
] }),
|
|
36098
|
-
/* @__PURE__ */
|
|
36099
|
-
/* @__PURE__ */
|
|
36100
|
-
/* @__PURE__ */
|
|
36352
|
+
/* @__PURE__ */ jsxs147("div", { className: "ods-workflow-header__right", children: [
|
|
36353
|
+
/* @__PURE__ */ jsx153(Skeleton, { variant: "circular", width: "28px", height: "28px" }),
|
|
36354
|
+
/* @__PURE__ */ jsx153(Skeleton, { variant: "circular", width: "28px", height: "28px" })
|
|
36101
36355
|
] })
|
|
36102
36356
|
] });
|
|
36103
36357
|
}
|
|
36104
36358
|
const envAccentStyle = environment?.accent ? { borderLeftColor: environment.accent } : void 0;
|
|
36105
|
-
return /* @__PURE__ */
|
|
36106
|
-
/* @__PURE__ */
|
|
36107
|
-
onBack && /* @__PURE__ */
|
|
36359
|
+
return /* @__PURE__ */ jsxs147("header", { className: rootCls, "data-running": isRunning ? "true" : void 0, children: [
|
|
36360
|
+
/* @__PURE__ */ jsxs147("div", { className: "ods-workflow-header__left", children: [
|
|
36361
|
+
onBack && /* @__PURE__ */ jsxs147(
|
|
36108
36362
|
"button",
|
|
36109
36363
|
{
|
|
36110
36364
|
type: "button",
|
|
@@ -36112,13 +36366,13 @@ function WorkflowHeader({
|
|
|
36112
36366
|
onClick: onBack,
|
|
36113
36367
|
"aria-label": `Back to ${typeof parentLabel === "string" ? parentLabel : "previous"}`,
|
|
36114
36368
|
children: [
|
|
36115
|
-
/* @__PURE__ */
|
|
36116
|
-
/* @__PURE__ */
|
|
36117
|
-
/* @__PURE__ */
|
|
36369
|
+
/* @__PURE__ */ jsx153(ChevronLeftIcon3, { size: "sm" }),
|
|
36370
|
+
/* @__PURE__ */ jsx153("span", { className: "ods-workflow-header__back-label", children: parentLabel }),
|
|
36371
|
+
/* @__PURE__ */ jsx153("span", { className: "ods-workflow-header__back-separator", "aria-hidden": "true", children: "/" })
|
|
36118
36372
|
]
|
|
36119
36373
|
}
|
|
36120
36374
|
),
|
|
36121
|
-
/* @__PURE__ */
|
|
36375
|
+
/* @__PURE__ */ jsx153(
|
|
36122
36376
|
"span",
|
|
36123
36377
|
{
|
|
36124
36378
|
className: cn(
|
|
@@ -36129,7 +36383,7 @@ function WorkflowHeader({
|
|
|
36129
36383
|
role: "img"
|
|
36130
36384
|
}
|
|
36131
36385
|
),
|
|
36132
|
-
/* @__PURE__ */
|
|
36386
|
+
/* @__PURE__ */ jsx153(
|
|
36133
36387
|
"h1",
|
|
36134
36388
|
{
|
|
36135
36389
|
className: "ods-workflow-header__title",
|
|
@@ -36137,9 +36391,9 @@ function WorkflowHeader({
|
|
|
36137
36391
|
children: name
|
|
36138
36392
|
}
|
|
36139
36393
|
),
|
|
36140
|
-
saveIndicator && /* @__PURE__ */
|
|
36141
|
-
/* @__PURE__ */
|
|
36142
|
-
/* @__PURE__ */
|
|
36394
|
+
saveIndicator && /* @__PURE__ */ jsxs147(Fragment63, { children: [
|
|
36395
|
+
/* @__PURE__ */ jsx153("span", { className: "ods-workflow-header__sep", "aria-hidden": "true" }),
|
|
36396
|
+
/* @__PURE__ */ jsxs147(
|
|
36143
36397
|
"span",
|
|
36144
36398
|
{
|
|
36145
36399
|
className: cn(
|
|
@@ -36150,14 +36404,14 @@ function WorkflowHeader({
|
|
|
36150
36404
|
"aria-live": "polite",
|
|
36151
36405
|
title: saveState === "error" ? saveError ?? void 0 : void 0,
|
|
36152
36406
|
children: [
|
|
36153
|
-
saveState === "saving" ? /* @__PURE__ */
|
|
36407
|
+
saveState === "saving" ? /* @__PURE__ */ jsx153("span", { className: "ods-workflow-header__save-spinner", "aria-hidden": "true" }) : saveState === "error" ? /* @__PURE__ */ jsx153(
|
|
36154
36408
|
WarningAltIcon3,
|
|
36155
36409
|
{
|
|
36156
36410
|
size: "sm",
|
|
36157
36411
|
className: "ods-workflow-header__save-icon",
|
|
36158
36412
|
"aria-hidden": "true"
|
|
36159
36413
|
}
|
|
36160
|
-
) : /* @__PURE__ */
|
|
36414
|
+
) : /* @__PURE__ */ jsx153(
|
|
36161
36415
|
CheckmarkIcon15,
|
|
36162
36416
|
{
|
|
36163
36417
|
size: "sm",
|
|
@@ -36172,11 +36426,11 @@ function WorkflowHeader({
|
|
|
36172
36426
|
] }),
|
|
36173
36427
|
leftSlot
|
|
36174
36428
|
] }),
|
|
36175
|
-
/* @__PURE__ */
|
|
36429
|
+
/* @__PURE__ */ jsxs147("div", { className: "ods-workflow-header__right", children: [
|
|
36176
36430
|
rightSlot,
|
|
36177
36431
|
environment && // Consumer-driven env chip. Accent (left border colour) comes
|
|
36178
36432
|
// from the consumer — we don't bake in environment names.
|
|
36179
|
-
/* @__PURE__ */
|
|
36433
|
+
/* @__PURE__ */ jsx153(
|
|
36180
36434
|
Chip,
|
|
36181
36435
|
{
|
|
36182
36436
|
size: "sm",
|
|
@@ -36192,59 +36446,59 @@ function WorkflowHeader({
|
|
|
36192
36446
|
children: environment.label
|
|
36193
36447
|
}
|
|
36194
36448
|
),
|
|
36195
|
-
onToggleConsole && (isRunning || consoleHasLogs) && /* @__PURE__ */
|
|
36449
|
+
onToggleConsole && (isRunning || consoleHasLogs) && /* @__PURE__ */ jsx153(
|
|
36196
36450
|
Button,
|
|
36197
36451
|
{
|
|
36198
36452
|
variant: "ghost",
|
|
36199
36453
|
size: "sm",
|
|
36200
36454
|
pressed: !!isConsoleOpen,
|
|
36201
36455
|
"aria-label": isConsoleOpen ? "Hide execution console" : "Show execution console",
|
|
36202
|
-
leftIcon: /* @__PURE__ */
|
|
36456
|
+
leftIcon: /* @__PURE__ */ jsx153(TerminalIcon, { size: "sm" }),
|
|
36203
36457
|
onClick: onToggleConsole,
|
|
36204
36458
|
children: "Console"
|
|
36205
36459
|
}
|
|
36206
36460
|
),
|
|
36207
|
-
(environment || onToggleConsole && (isRunning || consoleHasLogs)) && (isRunning || onRun || menuItems && menuItems.length > 0) && /* @__PURE__ */
|
|
36208
|
-
isRunning ? onStop && /* @__PURE__ */
|
|
36461
|
+
(environment || onToggleConsole && (isRunning || consoleHasLogs)) && (isRunning || onRun || menuItems && menuItems.length > 0) && /* @__PURE__ */ jsx153("span", { className: "ods-workflow-header__micro-divider", "aria-hidden": "true" }),
|
|
36462
|
+
isRunning ? onStop && /* @__PURE__ */ jsx153(
|
|
36209
36463
|
Button,
|
|
36210
36464
|
{
|
|
36211
36465
|
variant: "ghost",
|
|
36212
36466
|
size: "sm",
|
|
36213
36467
|
"aria-label": runtime ? `Stop execution (running ${runtime})` : "Stop execution",
|
|
36214
|
-
leftIcon: /* @__PURE__ */
|
|
36468
|
+
leftIcon: /* @__PURE__ */ jsx153(StopFilledAltIcon2, { size: "sm", className: "ods-workflow-header__stop-glyph" }),
|
|
36215
36469
|
onClick: onStop,
|
|
36216
|
-
children: /* @__PURE__ */
|
|
36217
|
-
/* @__PURE__ */
|
|
36218
|
-
runtime && /* @__PURE__ */
|
|
36219
|
-
/* @__PURE__ */
|
|
36220
|
-
/* @__PURE__ */
|
|
36470
|
+
children: /* @__PURE__ */ jsxs147("span", { className: "ods-workflow-header__stop-label", children: [
|
|
36471
|
+
/* @__PURE__ */ jsx153("span", { children: "Stop" }),
|
|
36472
|
+
runtime && /* @__PURE__ */ jsxs147(Fragment63, { children: [
|
|
36473
|
+
/* @__PURE__ */ jsx153("span", { className: "ods-workflow-header__stop-dot", "aria-hidden": "true", children: "\xB7" }),
|
|
36474
|
+
/* @__PURE__ */ jsx153("span", { className: "ods-workflow-header__runtime", children: runtime })
|
|
36221
36475
|
] })
|
|
36222
36476
|
] })
|
|
36223
36477
|
}
|
|
36224
|
-
) : onRun && /* @__PURE__ */
|
|
36478
|
+
) : onRun && /* @__PURE__ */ jsx153(
|
|
36225
36479
|
Button,
|
|
36226
36480
|
{
|
|
36227
36481
|
variant: "primary",
|
|
36228
36482
|
size: "sm",
|
|
36229
36483
|
"aria-label": "Run workflow",
|
|
36230
|
-
leftIcon: /* @__PURE__ */
|
|
36484
|
+
leftIcon: /* @__PURE__ */ jsx153(PlayFilledAltIcon2, { size: "sm" }),
|
|
36231
36485
|
onClick: onRun,
|
|
36232
36486
|
children: "Run"
|
|
36233
36487
|
}
|
|
36234
36488
|
),
|
|
36235
|
-
menu ?? (menuItems && menuItems.length > 0 && /* @__PURE__ */
|
|
36489
|
+
menu ?? (menuItems && menuItems.length > 0 && /* @__PURE__ */ jsx153(
|
|
36236
36490
|
DropdownMenu,
|
|
36237
36491
|
{
|
|
36238
36492
|
"aria-label": menuLabel,
|
|
36239
36493
|
align: "end",
|
|
36240
36494
|
triggerClassName: "ods-workflow-header__menu-trigger",
|
|
36241
36495
|
...menuProps,
|
|
36242
|
-
trigger: menuTrigger ?? /* @__PURE__ */
|
|
36496
|
+
trigger: menuTrigger ?? /* @__PURE__ */ jsx153("span", { "aria-hidden": "true", className: "ods-workflow-header__menu-icon", children: /* @__PURE__ */ jsx153(OverflowMenuVerticalIcon, { size: "sm" }) }),
|
|
36243
36497
|
items: menuItems
|
|
36244
36498
|
}
|
|
36245
36499
|
))
|
|
36246
36500
|
] }),
|
|
36247
|
-
/* @__PURE__ */
|
|
36501
|
+
/* @__PURE__ */ jsx153("span", { className: "ods-workflow-header__progress", "aria-hidden": "true" })
|
|
36248
36502
|
] });
|
|
36249
36503
|
}
|
|
36250
36504
|
|
|
@@ -36256,7 +36510,7 @@ import {
|
|
|
36256
36510
|
StopFilledAltIcon as StopFilledAltIcon3,
|
|
36257
36511
|
TerminalIcon as TerminalIcon2
|
|
36258
36512
|
} from "@octaviaflow/icons";
|
|
36259
|
-
import { Fragment as Fragment64, jsx as
|
|
36513
|
+
import { Fragment as Fragment64, jsx as jsx154, jsxs as jsxs148 } from "react/jsx-runtime";
|
|
36260
36514
|
function WorkflowHeaderExpanded({
|
|
36261
36515
|
name,
|
|
36262
36516
|
statusTone = "draft",
|
|
@@ -36284,15 +36538,15 @@ function WorkflowHeaderExpanded({
|
|
|
36284
36538
|
const tickedRuntime = useWorkflowRuntime(runStartedAt, !!isRunning);
|
|
36285
36539
|
const runtime = runtimeOverride ?? tickedRuntime ?? void 0;
|
|
36286
36540
|
const effectiveTone = statusTone === "draft" && isRunning ? "running" : statusTone;
|
|
36287
|
-
return /* @__PURE__ */
|
|
36541
|
+
return /* @__PURE__ */ jsxs148(
|
|
36288
36542
|
"header",
|
|
36289
36543
|
{
|
|
36290
36544
|
className: cn("ods-workflow-header-expanded", className),
|
|
36291
36545
|
"data-running": isRunning ? "true" : void 0,
|
|
36292
36546
|
children: [
|
|
36293
|
-
/* @__PURE__ */
|
|
36294
|
-
/* @__PURE__ */
|
|
36295
|
-
onBack && /* @__PURE__ */
|
|
36547
|
+
/* @__PURE__ */ jsxs148("div", { className: "ods-workflow-header-expanded__row ods-workflow-header-expanded__row--top", children: [
|
|
36548
|
+
/* @__PURE__ */ jsxs148("div", { className: "ods-workflow-header-expanded__left", children: [
|
|
36549
|
+
onBack && /* @__PURE__ */ jsxs148(
|
|
36296
36550
|
"button",
|
|
36297
36551
|
{
|
|
36298
36552
|
type: "button",
|
|
@@ -36300,13 +36554,13 @@ function WorkflowHeaderExpanded({
|
|
|
36300
36554
|
onClick: onBack,
|
|
36301
36555
|
"aria-label": `Back to ${typeof parentLabel === "string" ? parentLabel : "previous"}`,
|
|
36302
36556
|
children: [
|
|
36303
|
-
/* @__PURE__ */
|
|
36304
|
-
/* @__PURE__ */
|
|
36305
|
-
/* @__PURE__ */
|
|
36557
|
+
/* @__PURE__ */ jsx154(ChevronLeftIcon4, { size: "sm" }),
|
|
36558
|
+
/* @__PURE__ */ jsx154("span", { children: parentLabel }),
|
|
36559
|
+
/* @__PURE__ */ jsx154("span", { "aria-hidden": "true", className: "ods-workflow-header-expanded__back-sep", children: "/" })
|
|
36306
36560
|
]
|
|
36307
36561
|
}
|
|
36308
36562
|
),
|
|
36309
|
-
/* @__PURE__ */
|
|
36563
|
+
/* @__PURE__ */ jsx154(
|
|
36310
36564
|
"span",
|
|
36311
36565
|
{
|
|
36312
36566
|
className: cn(
|
|
@@ -36317,10 +36571,10 @@ function WorkflowHeaderExpanded({
|
|
|
36317
36571
|
role: "img"
|
|
36318
36572
|
}
|
|
36319
36573
|
),
|
|
36320
|
-
/* @__PURE__ */
|
|
36574
|
+
/* @__PURE__ */ jsx154("h1", { className: "ods-workflow-header-expanded__title", children: name })
|
|
36321
36575
|
] }),
|
|
36322
|
-
/* @__PURE__ */
|
|
36323
|
-
environment && /* @__PURE__ */
|
|
36576
|
+
/* @__PURE__ */ jsxs148("div", { className: "ods-workflow-header-expanded__right", children: [
|
|
36577
|
+
environment && /* @__PURE__ */ jsx154(
|
|
36324
36578
|
Chip,
|
|
36325
36579
|
{
|
|
36326
36580
|
size: "sm",
|
|
@@ -36332,26 +36586,26 @@ function WorkflowHeaderExpanded({
|
|
|
36332
36586
|
children: environment.label
|
|
36333
36587
|
}
|
|
36334
36588
|
),
|
|
36335
|
-
onToggleConsole && (isRunning || consoleHasLogs) && /* @__PURE__ */
|
|
36589
|
+
onToggleConsole && (isRunning || consoleHasLogs) && /* @__PURE__ */ jsx154(
|
|
36336
36590
|
Button,
|
|
36337
36591
|
{
|
|
36338
36592
|
variant: "ghost",
|
|
36339
36593
|
size: "sm",
|
|
36340
36594
|
pressed: !!isConsoleOpen,
|
|
36341
36595
|
"aria-label": isConsoleOpen ? "Hide execution console" : "Show execution console",
|
|
36342
|
-
leftIcon: /* @__PURE__ */
|
|
36596
|
+
leftIcon: /* @__PURE__ */ jsx154(TerminalIcon2, { size: "sm" }),
|
|
36343
36597
|
onClick: onToggleConsole,
|
|
36344
36598
|
children: "Console"
|
|
36345
36599
|
}
|
|
36346
36600
|
),
|
|
36347
|
-
(environment || onToggleConsole && (isRunning || consoleHasLogs)) && (isRunning || onRun || menuItems && menuItems.length > 0) && /* @__PURE__ */
|
|
36348
|
-
isRunning ? onStop && /* @__PURE__ */
|
|
36601
|
+
(environment || onToggleConsole && (isRunning || consoleHasLogs)) && (isRunning || onRun || menuItems && menuItems.length > 0) && /* @__PURE__ */ jsx154("span", { className: "ods-workflow-header-expanded__micro-divider", "aria-hidden": "true" }),
|
|
36602
|
+
isRunning ? onStop && /* @__PURE__ */ jsx154(
|
|
36349
36603
|
Button,
|
|
36350
36604
|
{
|
|
36351
36605
|
variant: "ghost",
|
|
36352
36606
|
size: "sm",
|
|
36353
36607
|
"aria-label": runtime ? `Stop execution (running ${runtime})` : "Stop execution",
|
|
36354
|
-
leftIcon: /* @__PURE__ */
|
|
36608
|
+
leftIcon: /* @__PURE__ */ jsx154(
|
|
36355
36609
|
StopFilledAltIcon3,
|
|
36356
36610
|
{
|
|
36357
36611
|
size: "sm",
|
|
@@ -36359,37 +36613,37 @@ function WorkflowHeaderExpanded({
|
|
|
36359
36613
|
}
|
|
36360
36614
|
),
|
|
36361
36615
|
onClick: onStop,
|
|
36362
|
-
children: /* @__PURE__ */
|
|
36363
|
-
/* @__PURE__ */
|
|
36364
|
-
runtime && /* @__PURE__ */
|
|
36365
|
-
/* @__PURE__ */
|
|
36366
|
-
/* @__PURE__ */
|
|
36616
|
+
children: /* @__PURE__ */ jsxs148("span", { style: { display: "inline-flex", gap: 4, alignItems: "center" }, children: [
|
|
36617
|
+
/* @__PURE__ */ jsx154("span", { children: "Stop" }),
|
|
36618
|
+
runtime && /* @__PURE__ */ jsxs148(Fragment64, { children: [
|
|
36619
|
+
/* @__PURE__ */ jsx154("span", { "aria-hidden": "true", style: { opacity: 0.6 }, children: "\xB7" }),
|
|
36620
|
+
/* @__PURE__ */ jsx154("span", { className: "ods-workflow-header-expanded__runtime", children: runtime })
|
|
36367
36621
|
] })
|
|
36368
36622
|
] })
|
|
36369
36623
|
}
|
|
36370
|
-
) : onRun && /* @__PURE__ */
|
|
36624
|
+
) : onRun && /* @__PURE__ */ jsx154(
|
|
36371
36625
|
Button,
|
|
36372
36626
|
{
|
|
36373
36627
|
variant: "primary",
|
|
36374
36628
|
size: "sm",
|
|
36375
36629
|
"aria-label": "Run workflow",
|
|
36376
|
-
leftIcon: /* @__PURE__ */
|
|
36630
|
+
leftIcon: /* @__PURE__ */ jsx154(PlayFilledAltIcon3, { size: "sm" }),
|
|
36377
36631
|
onClick: onRun,
|
|
36378
36632
|
children: "Run"
|
|
36379
36633
|
}
|
|
36380
36634
|
),
|
|
36381
|
-
menu ?? (menuItems && menuItems.length > 0 && /* @__PURE__ */
|
|
36635
|
+
menu ?? (menuItems && menuItems.length > 0 && /* @__PURE__ */ jsx154(
|
|
36382
36636
|
DropdownMenu,
|
|
36383
36637
|
{
|
|
36384
36638
|
"aria-label": menuLabel,
|
|
36385
36639
|
align: "end",
|
|
36386
36640
|
...menuProps,
|
|
36387
|
-
trigger: menuTrigger ?? /* @__PURE__ */
|
|
36641
|
+
trigger: menuTrigger ?? /* @__PURE__ */ jsx154(
|
|
36388
36642
|
Button,
|
|
36389
36643
|
{
|
|
36390
36644
|
variant: "ghost",
|
|
36391
36645
|
size: "sm",
|
|
36392
|
-
leftIcon: /* @__PURE__ */
|
|
36646
|
+
leftIcon: /* @__PURE__ */ jsx154(OverflowMenuVerticalIcon2, { size: "sm" })
|
|
36393
36647
|
}
|
|
36394
36648
|
),
|
|
36395
36649
|
items: menuItems
|
|
@@ -36397,10 +36651,10 @@ function WorkflowHeaderExpanded({
|
|
|
36397
36651
|
))
|
|
36398
36652
|
] })
|
|
36399
36653
|
] }),
|
|
36400
|
-
(meta2 || saveLabel) && /* @__PURE__ */
|
|
36654
|
+
(meta2 || saveLabel) && /* @__PURE__ */ jsx154("div", { className: "ods-workflow-header-expanded__row ods-workflow-header-expanded__row--bottom", children: /* @__PURE__ */ jsxs148("span", { className: "ods-workflow-header-expanded__meta", children: [
|
|
36401
36655
|
meta2,
|
|
36402
|
-
meta2 && saveLabel && /* @__PURE__ */
|
|
36403
|
-
saveLabel && /* @__PURE__ */
|
|
36656
|
+
meta2 && saveLabel && /* @__PURE__ */ jsx154("span", { "aria-hidden": "true", style: { margin: "0 6px", opacity: 0.4 }, children: "\xB7" }),
|
|
36657
|
+
saveLabel && /* @__PURE__ */ jsx154(
|
|
36404
36658
|
"span",
|
|
36405
36659
|
{
|
|
36406
36660
|
className: cn(
|
|
@@ -36412,36 +36666,36 @@ function WorkflowHeaderExpanded({
|
|
|
36412
36666
|
}
|
|
36413
36667
|
)
|
|
36414
36668
|
] }) }),
|
|
36415
|
-
/* @__PURE__ */
|
|
36669
|
+
/* @__PURE__ */ jsx154("span", { className: "ods-workflow-header-expanded__progress", "aria-hidden": "true" })
|
|
36416
36670
|
]
|
|
36417
36671
|
}
|
|
36418
36672
|
);
|
|
36419
36673
|
}
|
|
36420
36674
|
|
|
36421
36675
|
// src/hooks/useBanner.ts
|
|
36422
|
-
import { useCallback as
|
|
36676
|
+
import { useCallback as useCallback54, useEffect as useEffect58, useRef as useRef51, useState as useState74 } from "react";
|
|
36423
36677
|
function useBanner(options2 = {}) {
|
|
36424
36678
|
const { defaultOpen = false, autoDismissAfter, onDismiss } = options2;
|
|
36425
36679
|
const [open, setOpen] = useState74(defaultOpen);
|
|
36426
|
-
const timerRef =
|
|
36427
|
-
const onDismissRef =
|
|
36428
|
-
|
|
36680
|
+
const timerRef = useRef51(null);
|
|
36681
|
+
const onDismissRef = useRef51(onDismiss);
|
|
36682
|
+
useEffect58(() => {
|
|
36429
36683
|
onDismissRef.current = onDismiss;
|
|
36430
36684
|
}, [onDismiss]);
|
|
36431
|
-
const clearTimer =
|
|
36685
|
+
const clearTimer = useCallback54(() => {
|
|
36432
36686
|
if (timerRef.current !== null) {
|
|
36433
36687
|
clearTimeout(timerRef.current);
|
|
36434
36688
|
timerRef.current = null;
|
|
36435
36689
|
}
|
|
36436
36690
|
}, []);
|
|
36437
|
-
const hide =
|
|
36691
|
+
const hide = useCallback54(() => {
|
|
36438
36692
|
clearTimer();
|
|
36439
36693
|
setOpen((wasOpen) => {
|
|
36440
36694
|
if (wasOpen) onDismissRef.current?.();
|
|
36441
36695
|
return false;
|
|
36442
36696
|
});
|
|
36443
36697
|
}, [clearTimer]);
|
|
36444
|
-
const show =
|
|
36698
|
+
const show = useCallback54(() => {
|
|
36445
36699
|
clearTimer();
|
|
36446
36700
|
setOpen(true);
|
|
36447
36701
|
if (typeof autoDismissAfter === "number" && Number.isFinite(autoDismissAfter) && autoDismissAfter > 0) {
|
|
@@ -36452,11 +36706,11 @@ function useBanner(options2 = {}) {
|
|
|
36452
36706
|
}, autoDismissAfter);
|
|
36453
36707
|
}
|
|
36454
36708
|
}, [autoDismissAfter, clearTimer]);
|
|
36455
|
-
const toggle =
|
|
36709
|
+
const toggle = useCallback54(() => {
|
|
36456
36710
|
if (open) hide();
|
|
36457
36711
|
else show();
|
|
36458
36712
|
}, [open, show, hide]);
|
|
36459
|
-
|
|
36713
|
+
useEffect58(() => () => clearTimer(), [clearTimer]);
|
|
36460
36714
|
return {
|
|
36461
36715
|
open,
|
|
36462
36716
|
show,
|
|
@@ -36467,7 +36721,7 @@ function useBanner(options2 = {}) {
|
|
|
36467
36721
|
}
|
|
36468
36722
|
|
|
36469
36723
|
// src/hooks/useCallout.ts
|
|
36470
|
-
import { useCallback as
|
|
36724
|
+
import { useCallback as useCallback55, useEffect as useEffect59, useState as useState75 } from "react";
|
|
36471
36725
|
var STORAGE_PREFIX = "ods:callout:dismissed:";
|
|
36472
36726
|
function readPersisted(key) {
|
|
36473
36727
|
if (!key || typeof window === "undefined") return false;
|
|
@@ -36491,12 +36745,12 @@ function writePersisted(key, value) {
|
|
|
36491
36745
|
function useCallout(options2 = {}) {
|
|
36492
36746
|
const { defaultOpen = true, persistKey, onDismiss } = options2;
|
|
36493
36747
|
const [open, setOpen] = useState75(defaultOpen);
|
|
36494
|
-
|
|
36748
|
+
useEffect59(() => {
|
|
36495
36749
|
if (persistKey && readPersisted(persistKey)) {
|
|
36496
36750
|
setOpen(false);
|
|
36497
36751
|
}
|
|
36498
36752
|
}, []);
|
|
36499
|
-
const dismiss =
|
|
36753
|
+
const dismiss = useCallback55(() => {
|
|
36500
36754
|
setOpen((wasOpen) => {
|
|
36501
36755
|
if (wasOpen) {
|
|
36502
36756
|
writePersisted(persistKey, true);
|
|
@@ -36505,10 +36759,10 @@ function useCallout(options2 = {}) {
|
|
|
36505
36759
|
return false;
|
|
36506
36760
|
});
|
|
36507
36761
|
}, [persistKey, onDismiss]);
|
|
36508
|
-
const show =
|
|
36762
|
+
const show = useCallback55(() => {
|
|
36509
36763
|
setOpen(true);
|
|
36510
36764
|
}, []);
|
|
36511
|
-
const toggle =
|
|
36765
|
+
const toggle = useCallback55(() => {
|
|
36512
36766
|
setOpen((prev) => {
|
|
36513
36767
|
const next = !prev;
|
|
36514
36768
|
if (!next) {
|
|
@@ -36518,7 +36772,7 @@ function useCallout(options2 = {}) {
|
|
|
36518
36772
|
return next;
|
|
36519
36773
|
});
|
|
36520
36774
|
}, [persistKey, onDismiss]);
|
|
36521
|
-
const reset =
|
|
36775
|
+
const reset = useCallback55(() => {
|
|
36522
36776
|
writePersisted(persistKey, false);
|
|
36523
36777
|
setOpen(true);
|
|
36524
36778
|
}, [persistKey]);
|
|
@@ -36591,7 +36845,7 @@ function breakpointMinWidth(name) {
|
|
|
36591
36845
|
}
|
|
36592
36846
|
|
|
36593
36847
|
// src/hooks/useRating.ts
|
|
36594
|
-
import { useCallback as
|
|
36848
|
+
import { useCallback as useCallback56, useState as useState76 } from "react";
|
|
36595
36849
|
function useRating({
|
|
36596
36850
|
value: controlled,
|
|
36597
36851
|
defaultValue = 0,
|
|
@@ -36602,11 +36856,11 @@ function useRating({
|
|
|
36602
36856
|
const [internal, setInternal] = useState76(defaultValue);
|
|
36603
36857
|
const value = controlled ?? internal;
|
|
36604
36858
|
const isControlled = controlled !== void 0;
|
|
36605
|
-
const clamp2 =
|
|
36859
|
+
const clamp2 = useCallback56(
|
|
36606
36860
|
(v) => Math.max(0, Math.min(max, v)),
|
|
36607
36861
|
[max]
|
|
36608
36862
|
);
|
|
36609
|
-
const set =
|
|
36863
|
+
const set = useCallback56(
|
|
36610
36864
|
(next) => {
|
|
36611
36865
|
const clamped = clamp2(next);
|
|
36612
36866
|
if (!isControlled) setInternal(clamped);
|
|
@@ -36631,7 +36885,7 @@ function useBinaryRating({
|
|
|
36631
36885
|
const [internal, setInternal] = useState76(defaultValue);
|
|
36632
36886
|
const value = controlled ?? internal;
|
|
36633
36887
|
const isControlled = controlled !== void 0;
|
|
36634
|
-
const set =
|
|
36888
|
+
const set = useCallback56(
|
|
36635
36889
|
(next) => {
|
|
36636
36890
|
if (!isControlled) setInternal(next);
|
|
36637
36891
|
onChange?.(next);
|
|
@@ -36650,7 +36904,7 @@ function useBinaryRating({
|
|
|
36650
36904
|
}
|
|
36651
36905
|
|
|
36652
36906
|
// src/hooks/useTimeline.ts
|
|
36653
|
-
import { useCallback as
|
|
36907
|
+
import { useCallback as useCallback57, useState as useState77 } from "react";
|
|
36654
36908
|
function useTimeline({
|
|
36655
36909
|
items: controlled,
|
|
36656
36910
|
defaultItems = [],
|
|
@@ -36659,21 +36913,21 @@ function useTimeline({
|
|
|
36659
36913
|
const [internal, setInternal] = useState77(defaultItems);
|
|
36660
36914
|
const items = controlled ?? internal;
|
|
36661
36915
|
const isControlled = controlled !== void 0;
|
|
36662
|
-
const commit =
|
|
36916
|
+
const commit = useCallback57(
|
|
36663
36917
|
(next) => {
|
|
36664
36918
|
if (!isControlled) setInternal(next);
|
|
36665
36919
|
onChange?.(next);
|
|
36666
36920
|
},
|
|
36667
36921
|
[isControlled, onChange]
|
|
36668
36922
|
);
|
|
36669
|
-
const add =
|
|
36923
|
+
const add = useCallback57(
|
|
36670
36924
|
(item) => {
|
|
36671
36925
|
if (items.some((i) => i.id === item.id)) return;
|
|
36672
36926
|
commit([...items, item]);
|
|
36673
36927
|
},
|
|
36674
36928
|
[items, commit]
|
|
36675
36929
|
);
|
|
36676
|
-
const insert =
|
|
36930
|
+
const insert = useCallback57(
|
|
36677
36931
|
(index, item) => {
|
|
36678
36932
|
if (items.some((i) => i.id === item.id)) return;
|
|
36679
36933
|
const at = Math.max(0, Math.min(items.length, index));
|
|
@@ -36683,7 +36937,7 @@ function useTimeline({
|
|
|
36683
36937
|
},
|
|
36684
36938
|
[items, commit]
|
|
36685
36939
|
);
|
|
36686
|
-
const remove =
|
|
36940
|
+
const remove = useCallback57(
|
|
36687
36941
|
(id) => {
|
|
36688
36942
|
const next = items.filter((i) => i.id !== id);
|
|
36689
36943
|
if (next.length === items.length) return;
|
|
@@ -36691,7 +36945,7 @@ function useTimeline({
|
|
|
36691
36945
|
},
|
|
36692
36946
|
[items, commit]
|
|
36693
36947
|
);
|
|
36694
|
-
const update =
|
|
36948
|
+
const update = useCallback57(
|
|
36695
36949
|
(id, patch) => {
|
|
36696
36950
|
let changed = false;
|
|
36697
36951
|
const next = items.map((i) => {
|
|
@@ -36716,7 +36970,7 @@ function useTimeline({
|
|
|
36716
36970
|
}
|
|
36717
36971
|
|
|
36718
36972
|
// src/hooks/useTraceTimeline.ts
|
|
36719
|
-
import { useCallback as
|
|
36973
|
+
import { useCallback as useCallback58, useRef as useRef52, useState as useState78 } from "react";
|
|
36720
36974
|
var GLOBAL_SEQ = 0;
|
|
36721
36975
|
var generateId = () => `ods-trace-${Date.now().toString(36)}-${(GLOBAL_SEQ++).toString(36)}`;
|
|
36722
36976
|
function useTraceTimeline({
|
|
@@ -36727,9 +36981,9 @@ function useTraceTimeline({
|
|
|
36727
36981
|
const [internal, setInternal] = useState78(defaultSteps);
|
|
36728
36982
|
const steps = controlled ?? internal;
|
|
36729
36983
|
const isControlled = controlled !== void 0;
|
|
36730
|
-
const stepsRef =
|
|
36984
|
+
const stepsRef = useRef52(steps);
|
|
36731
36985
|
stepsRef.current = steps;
|
|
36732
|
-
const commit =
|
|
36986
|
+
const commit = useCallback58(
|
|
36733
36987
|
(next) => {
|
|
36734
36988
|
stepsRef.current = next;
|
|
36735
36989
|
if (!isControlled) setInternal(next);
|
|
@@ -36737,7 +36991,7 @@ function useTraceTimeline({
|
|
|
36737
36991
|
},
|
|
36738
36992
|
[isControlled, onChange]
|
|
36739
36993
|
);
|
|
36740
|
-
const start =
|
|
36994
|
+
const start = useCallback58(
|
|
36741
36995
|
(input) => {
|
|
36742
36996
|
const id = input.id ?? generateId();
|
|
36743
36997
|
const record = {
|
|
@@ -36757,7 +37011,7 @@ function useTraceTimeline({
|
|
|
36757
37011
|
},
|
|
36758
37012
|
[commit]
|
|
36759
37013
|
);
|
|
36760
|
-
const update =
|
|
37014
|
+
const update = useCallback58(
|
|
36761
37015
|
(id, patch) => {
|
|
36762
37016
|
let changed = false;
|
|
36763
37017
|
const next = stepsRef.current.map((s) => {
|
|
@@ -36769,19 +37023,19 @@ function useTraceTimeline({
|
|
|
36769
37023
|
},
|
|
36770
37024
|
[commit]
|
|
36771
37025
|
);
|
|
36772
|
-
const complete =
|
|
37026
|
+
const complete = useCallback58(
|
|
36773
37027
|
(id, patch = {}) => {
|
|
36774
37028
|
update(id, { ...patch, status: "success" });
|
|
36775
37029
|
},
|
|
36776
37030
|
[update]
|
|
36777
37031
|
);
|
|
36778
|
-
const fail =
|
|
37032
|
+
const fail = useCallback58(
|
|
36779
37033
|
(id, patch = {}) => {
|
|
36780
37034
|
update(id, { ...patch, status: "failed" });
|
|
36781
37035
|
},
|
|
36782
37036
|
[update]
|
|
36783
37037
|
);
|
|
36784
|
-
const remove =
|
|
37038
|
+
const remove = useCallback58(
|
|
36785
37039
|
(id) => {
|
|
36786
37040
|
const next = stepsRef.current.filter((s) => s.id !== id);
|
|
36787
37041
|
if (next.length === stepsRef.current.length) return;
|
|
@@ -36807,13 +37061,13 @@ function useTraceTimeline({
|
|
|
36807
37061
|
|
|
36808
37062
|
// src/provider/OdsProvider.tsx
|
|
36809
37063
|
import { generateCssVars, resolveConfig } from "@octaviaflow/config";
|
|
36810
|
-
import { createContext as createContext4, useContext as useContext5, useEffect as
|
|
37064
|
+
import { createContext as createContext4, useContext as useContext5, useEffect as useEffect60, useMemo as useMemo40 } from "react";
|
|
36811
37065
|
import { OverlayProvider as OverlayProvider3 } from "react-aria";
|
|
36812
|
-
import { jsx as
|
|
37066
|
+
import { jsx as jsx155 } from "react/jsx-runtime";
|
|
36813
37067
|
var OdsContext = createContext4(null);
|
|
36814
37068
|
function OdsProvider({ config: userConfig, children }) {
|
|
36815
37069
|
const resolved = useMemo40(() => resolveConfig(userConfig), [userConfig]);
|
|
36816
|
-
|
|
37070
|
+
useEffect60(() => {
|
|
36817
37071
|
const cssVarsBlock = generateCssVars(resolved);
|
|
36818
37072
|
const match = cssVarsBlock.match(/:root\s*\{([\s\S]*)\}/);
|
|
36819
37073
|
if (match) {
|
|
@@ -36830,7 +37084,7 @@ function OdsProvider({ config: userConfig, children }) {
|
|
|
36830
37084
|
}
|
|
36831
37085
|
}, [resolved]);
|
|
36832
37086
|
const contextValue = useMemo40(() => ({ config: resolved }), [resolved]);
|
|
36833
|
-
return /* @__PURE__ */
|
|
37087
|
+
return /* @__PURE__ */ jsx155(OdsContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx155(OverlayProvider3, { children }) });
|
|
36834
37088
|
}
|
|
36835
37089
|
function useOds() {
|
|
36836
37090
|
const ctx = useContext5(OdsContext);
|
|
@@ -37141,7 +37395,7 @@ function applyVerticalLayout(nodes, edges) {
|
|
|
37141
37395
|
}
|
|
37142
37396
|
|
|
37143
37397
|
// src/notifications/components/AlertConditionComposer/AlertConditionComposer.tsx
|
|
37144
|
-
import { useId as
|
|
37398
|
+
import { useId as useId65 } from "react";
|
|
37145
37399
|
|
|
37146
37400
|
// src/notifications/engine/catalog.ts
|
|
37147
37401
|
var DEFAULT_NOTIFICATION_CATALOG = [
|
|
@@ -37637,7 +37891,7 @@ function describeRule(rule, catalog, channels) {
|
|
|
37637
37891
|
}
|
|
37638
37892
|
|
|
37639
37893
|
// src/notifications/components/AlertConditionComposer/AlertConditionComposer.tsx
|
|
37640
|
-
import { Fragment as Fragment65, jsx as
|
|
37894
|
+
import { Fragment as Fragment65, jsx as jsx156, jsxs as jsxs149 } from "react/jsx-runtime";
|
|
37641
37895
|
var KIND_LABELS = {
|
|
37642
37896
|
every: "every time it happens",
|
|
37643
37897
|
state_change: "only when its status changes",
|
|
@@ -37663,7 +37917,7 @@ function AlertConditionComposer({
|
|
|
37663
37917
|
className,
|
|
37664
37918
|
id
|
|
37665
37919
|
}) {
|
|
37666
|
-
const reactId =
|
|
37920
|
+
const reactId = useId65();
|
|
37667
37921
|
const baseId = id ?? `${reactId}-condition`;
|
|
37668
37922
|
const helperId = `${baseId}-helper`;
|
|
37669
37923
|
const kinds = allowThreshold ? ["every", "state_change", "consecutive", "count"] : ["every", "state_change"];
|
|
@@ -37689,7 +37943,7 @@ function AlertConditionComposer({
|
|
|
37689
37943
|
onChange({ kind: "every" });
|
|
37690
37944
|
}
|
|
37691
37945
|
};
|
|
37692
|
-
return /* @__PURE__ */
|
|
37946
|
+
return /* @__PURE__ */ jsxs149(
|
|
37693
37947
|
"div",
|
|
37694
37948
|
{
|
|
37695
37949
|
className: cn("ods-alert-condition", className),
|
|
@@ -37699,10 +37953,10 @@ function AlertConditionComposer({
|
|
|
37699
37953
|
"aria-describedby": helperText ? helperId : void 0,
|
|
37700
37954
|
"data-size": size,
|
|
37701
37955
|
children: [
|
|
37702
|
-
label && /* @__PURE__ */
|
|
37703
|
-
/* @__PURE__ */
|
|
37704
|
-
/* @__PURE__ */
|
|
37705
|
-
/* @__PURE__ */
|
|
37956
|
+
label && /* @__PURE__ */ jsx156("div", { className: "ods-alert-condition__label", children: label }),
|
|
37957
|
+
/* @__PURE__ */ jsxs149("div", { className: "ods-alert-condition__sentence", children: [
|
|
37958
|
+
/* @__PURE__ */ jsx156("span", { className: "ods-alert-condition__word", children: "Notify" }),
|
|
37959
|
+
/* @__PURE__ */ jsx156(
|
|
37706
37960
|
Select,
|
|
37707
37961
|
{
|
|
37708
37962
|
"aria-label": "Condition kind",
|
|
@@ -37715,8 +37969,8 @@ function AlertConditionComposer({
|
|
|
37715
37969
|
dropdownMinWidth: 280
|
|
37716
37970
|
}
|
|
37717
37971
|
),
|
|
37718
|
-
value.kind === "consecutive" && /* @__PURE__ */
|
|
37719
|
-
/* @__PURE__ */
|
|
37972
|
+
value.kind === "consecutive" && /* @__PURE__ */ jsxs149(Fragment65, { children: [
|
|
37973
|
+
/* @__PURE__ */ jsx156(
|
|
37720
37974
|
NumberInput,
|
|
37721
37975
|
{
|
|
37722
37976
|
"aria-label": "Consecutive failures",
|
|
@@ -37730,13 +37984,13 @@ function AlertConditionComposer({
|
|
|
37730
37984
|
align: "center"
|
|
37731
37985
|
}
|
|
37732
37986
|
),
|
|
37733
|
-
/* @__PURE__ */
|
|
37987
|
+
/* @__PURE__ */ jsxs149("span", { className: "ods-alert-condition__word", children: [
|
|
37734
37988
|
"failures in a row for the same ",
|
|
37735
37989
|
subjectNoun
|
|
37736
37990
|
] })
|
|
37737
37991
|
] }),
|
|
37738
|
-
value.kind === "count" && /* @__PURE__ */
|
|
37739
|
-
/* @__PURE__ */
|
|
37992
|
+
value.kind === "count" && /* @__PURE__ */ jsxs149(Fragment65, { children: [
|
|
37993
|
+
/* @__PURE__ */ jsx156(
|
|
37740
37994
|
NumberInput,
|
|
37741
37995
|
{
|
|
37742
37996
|
"aria-label": "Occurrences",
|
|
@@ -37750,8 +38004,8 @@ function AlertConditionComposer({
|
|
|
37750
38004
|
align: "center"
|
|
37751
38005
|
}
|
|
37752
38006
|
),
|
|
37753
|
-
/* @__PURE__ */
|
|
37754
|
-
/* @__PURE__ */
|
|
38007
|
+
/* @__PURE__ */ jsx156("span", { className: "ods-alert-condition__word", children: "times in" }),
|
|
38008
|
+
/* @__PURE__ */ jsx156(
|
|
37755
38009
|
Select,
|
|
37756
38010
|
{
|
|
37757
38011
|
"aria-label": "Window",
|
|
@@ -37763,14 +38017,14 @@ function AlertConditionComposer({
|
|
|
37763
38017
|
className: "ods-alert-condition__window"
|
|
37764
38018
|
}
|
|
37765
38019
|
),
|
|
37766
|
-
/* @__PURE__ */
|
|
38020
|
+
/* @__PURE__ */ jsxs149("span", { className: "ods-alert-condition__word", children: [
|
|
37767
38021
|
"for the same ",
|
|
37768
38022
|
subjectNoun
|
|
37769
38023
|
] })
|
|
37770
38024
|
] })
|
|
37771
38025
|
] }),
|
|
37772
|
-
/* @__PURE__ */
|
|
37773
|
-
helperText && /* @__PURE__ */
|
|
38026
|
+
/* @__PURE__ */ jsx156("div", { className: "ods-alert-condition__summary", "aria-live": "polite", children: value.kind === "every" ? `Every occurrence is sent (still de-duplicated per ${subjectNoun}).` : `Sends${describeCondition(value, subjectNoun)}.` }),
|
|
38027
|
+
helperText && /* @__PURE__ */ jsx156("div", { id: helperId, className: "ods-alert-condition__helper", children: helperText })
|
|
37774
38028
|
]
|
|
37775
38029
|
}
|
|
37776
38030
|
);
|
|
@@ -37778,8 +38032,8 @@ function AlertConditionComposer({
|
|
|
37778
38032
|
AlertConditionComposer.displayName = "AlertConditionComposer";
|
|
37779
38033
|
|
|
37780
38034
|
// src/notifications/components/DeliveryFrequencyControl/DeliveryFrequencyControl.tsx
|
|
37781
|
-
import { useId as
|
|
37782
|
-
import { jsx as
|
|
38035
|
+
import { useId as useId66 } from "react";
|
|
38036
|
+
import { jsx as jsx157, jsxs as jsxs150 } from "react/jsx-runtime";
|
|
37783
38037
|
var MODE_LABELS = {
|
|
37784
38038
|
immediate: "Immediately",
|
|
37785
38039
|
batched: "Batched",
|
|
@@ -37806,7 +38060,7 @@ function DeliveryFrequencyControl({
|
|
|
37806
38060
|
className,
|
|
37807
38061
|
id
|
|
37808
38062
|
}) {
|
|
37809
|
-
const reactId =
|
|
38063
|
+
const reactId = useId66();
|
|
37810
38064
|
const baseId = id ?? `${reactId}-delivery`;
|
|
37811
38065
|
const patch = (next) => onChange({ ...value, ...next });
|
|
37812
38066
|
const windowOptions = batchWindows.map((m) => ({
|
|
@@ -37820,7 +38074,7 @@ function DeliveryFrequencyControl({
|
|
|
37820
38074
|
if (mode === "digest" && !next.schedule) next.schedule = DEFAULT_SCHEDULE;
|
|
37821
38075
|
onChange(next);
|
|
37822
38076
|
};
|
|
37823
|
-
return /* @__PURE__ */
|
|
38077
|
+
return /* @__PURE__ */ jsxs150(
|
|
37824
38078
|
"div",
|
|
37825
38079
|
{
|
|
37826
38080
|
className: cn("ods-delivery-freq", className),
|
|
@@ -37828,8 +38082,8 @@ function DeliveryFrequencyControl({
|
|
|
37828
38082
|
role: "group",
|
|
37829
38083
|
"aria-label": typeof label === "string" ? label : "Delivery",
|
|
37830
38084
|
children: [
|
|
37831
|
-
label && /* @__PURE__ */
|
|
37832
|
-
/* @__PURE__ */
|
|
38085
|
+
label && /* @__PURE__ */ jsx157("div", { className: "ods-delivery-freq__label", children: label }),
|
|
38086
|
+
/* @__PURE__ */ jsx157(
|
|
37833
38087
|
SegmentedControl,
|
|
37834
38088
|
{
|
|
37835
38089
|
"aria-label": "Delivery mode",
|
|
@@ -37840,10 +38094,10 @@ function DeliveryFrequencyControl({
|
|
|
37840
38094
|
disabled
|
|
37841
38095
|
}
|
|
37842
38096
|
),
|
|
37843
|
-
/* @__PURE__ */
|
|
37844
|
-
value.mode === "batched" && /* @__PURE__ */
|
|
37845
|
-
/* @__PURE__ */
|
|
37846
|
-
/* @__PURE__ */
|
|
38097
|
+
/* @__PURE__ */ jsx157("div", { className: "ods-delivery-freq__hint", children: MODE_HINTS[value.mode] }),
|
|
38098
|
+
value.mode === "batched" && /* @__PURE__ */ jsx157("div", { className: "ods-delivery-freq__fields", children: /* @__PURE__ */ jsxs150("div", { className: "ods-delivery-freq__row", children: [
|
|
38099
|
+
/* @__PURE__ */ jsx157("span", { className: "ods-delivery-freq__word", children: "Send at most one message every" }),
|
|
38100
|
+
/* @__PURE__ */ jsx157(
|
|
37847
38101
|
Select,
|
|
37848
38102
|
{
|
|
37849
38103
|
"aria-label": "Batch window",
|
|
@@ -37856,8 +38110,8 @@ function DeliveryFrequencyControl({
|
|
|
37856
38110
|
}
|
|
37857
38111
|
)
|
|
37858
38112
|
] }) }),
|
|
37859
|
-
value.mode === "digest" && /* @__PURE__ */
|
|
37860
|
-
/* @__PURE__ */
|
|
38113
|
+
value.mode === "digest" && /* @__PURE__ */ jsxs150("div", { className: "ods-delivery-freq__fields", children: [
|
|
38114
|
+
/* @__PURE__ */ jsx157(
|
|
37861
38115
|
ScheduleBuilder,
|
|
37862
38116
|
{
|
|
37863
38117
|
value: value.schedule ?? DEFAULT_SCHEDULE,
|
|
@@ -37867,7 +38121,7 @@ function DeliveryFrequencyControl({
|
|
|
37867
38121
|
disabled
|
|
37868
38122
|
}
|
|
37869
38123
|
),
|
|
37870
|
-
/* @__PURE__ */
|
|
38124
|
+
/* @__PURE__ */ jsx157(
|
|
37871
38125
|
Switch,
|
|
37872
38126
|
{
|
|
37873
38127
|
size: "sm",
|
|
@@ -37887,7 +38141,7 @@ DeliveryFrequencyControl.displayName = "DeliveryFrequencyControl";
|
|
|
37887
38141
|
|
|
37888
38142
|
// src/notifications/components/EventCatalogPicker/EventCatalogPicker.tsx
|
|
37889
38143
|
import { SearchIcon as SearchIcon16 } from "@octaviaflow/icons";
|
|
37890
|
-
import { useId as
|
|
38144
|
+
import { useId as useId67, useMemo as useMemo41, useState as useState79 } from "react";
|
|
37891
38145
|
|
|
37892
38146
|
// src/notifications/components/meta.tsx
|
|
37893
38147
|
import {
|
|
@@ -37902,55 +38156,55 @@ import {
|
|
|
37902
38156
|
WarningFilledIcon as WarningFilledIcon3,
|
|
37903
38157
|
WebhookIcon
|
|
37904
38158
|
} from "@octaviaflow/icons";
|
|
37905
|
-
import { jsx as
|
|
38159
|
+
import { jsx as jsx158 } from "react/jsx-runtime";
|
|
37906
38160
|
var CHANNEL_TYPE_META = {
|
|
37907
38161
|
in_app: {
|
|
37908
38162
|
label: "In-app",
|
|
37909
38163
|
hint: "The bell in the top bar. Always on.",
|
|
37910
38164
|
connected: false,
|
|
37911
|
-
icon: /* @__PURE__ */
|
|
38165
|
+
icon: /* @__PURE__ */ jsx158(NotificationIcon, { size: "sm", "aria-hidden": "true" })
|
|
37912
38166
|
},
|
|
37913
38167
|
email: {
|
|
37914
38168
|
label: "Email",
|
|
37915
38169
|
hint: "One or more addresses.",
|
|
37916
38170
|
connected: false,
|
|
37917
|
-
icon: /* @__PURE__ */
|
|
38171
|
+
icon: /* @__PURE__ */ jsx158(EmailIcon, { size: "sm", "aria-hidden": "true" })
|
|
37918
38172
|
},
|
|
37919
38173
|
slack: {
|
|
37920
38174
|
label: "Slack",
|
|
37921
38175
|
hint: "A channel in a connected workspace.",
|
|
37922
38176
|
connected: true,
|
|
37923
|
-
icon: /* @__PURE__ */
|
|
38177
|
+
icon: /* @__PURE__ */ jsx158(LogoSlackIcon, { size: "sm", "aria-hidden": "true" })
|
|
37924
38178
|
},
|
|
37925
38179
|
teams: {
|
|
37926
38180
|
label: "Microsoft Teams",
|
|
37927
38181
|
hint: "A channel in a connected team.",
|
|
37928
38182
|
connected: true,
|
|
37929
|
-
icon: /* @__PURE__ */
|
|
38183
|
+
icon: /* @__PURE__ */ jsx158(ChatOperationalIcon, { size: "sm", "aria-hidden": "true" })
|
|
37930
38184
|
},
|
|
37931
38185
|
google_chat: {
|
|
37932
38186
|
label: "Google Chat",
|
|
37933
38187
|
hint: "A space in a connected account.",
|
|
37934
38188
|
connected: true,
|
|
37935
|
-
icon: /* @__PURE__ */
|
|
38189
|
+
icon: /* @__PURE__ */ jsx158(ChatIcon2, { size: "sm", "aria-hidden": "true" })
|
|
37936
38190
|
},
|
|
37937
38191
|
whatsapp: {
|
|
37938
38192
|
label: "WhatsApp",
|
|
37939
38193
|
hint: "Template messages to a phone number.",
|
|
37940
38194
|
connected: false,
|
|
37941
|
-
icon: /* @__PURE__ */
|
|
38195
|
+
icon: /* @__PURE__ */ jsx158(ChatLaunchIcon, { size: "sm", "aria-hidden": "true" })
|
|
37942
38196
|
},
|
|
37943
38197
|
webhook: {
|
|
37944
38198
|
label: "Webhook",
|
|
37945
38199
|
hint: "Signed JSON to a URL you own.",
|
|
37946
38200
|
connected: false,
|
|
37947
|
-
icon: /* @__PURE__ */
|
|
38201
|
+
icon: /* @__PURE__ */ jsx158(WebhookIcon, { size: "sm", "aria-hidden": "true" })
|
|
37948
38202
|
}
|
|
37949
38203
|
};
|
|
37950
38204
|
var PERSONAL_CHANNEL_META = {
|
|
37951
|
-
in_app: { label: "In-app", icon: /* @__PURE__ */
|
|
37952
|
-
email: { label: "Email", icon: /* @__PURE__ */
|
|
37953
|
-
slack_dm: { label: "Slack DM", icon: /* @__PURE__ */
|
|
38205
|
+
in_app: { label: "In-app", icon: /* @__PURE__ */ jsx158(NotificationIcon, { size: "sm", "aria-hidden": "true" }) },
|
|
38206
|
+
email: { label: "Email", icon: /* @__PURE__ */ jsx158(EmailIcon, { size: "sm", "aria-hidden": "true" }) },
|
|
38207
|
+
slack_dm: { label: "Slack DM", icon: /* @__PURE__ */ jsx158(LogoSlackIcon, { size: "sm", "aria-hidden": "true" }) }
|
|
37954
38208
|
};
|
|
37955
38209
|
var CHANNEL_STATUS_META = {
|
|
37956
38210
|
verified: { label: "Verified", variant: "success" },
|
|
@@ -37962,22 +38216,22 @@ var SEVERITY_META = {
|
|
|
37962
38216
|
info: {
|
|
37963
38217
|
label: "Info",
|
|
37964
38218
|
variant: "info",
|
|
37965
|
-
icon: /* @__PURE__ */
|
|
38219
|
+
icon: /* @__PURE__ */ jsx158(InformationFilledIcon, { size: "sm", "aria-hidden": "true" })
|
|
37966
38220
|
},
|
|
37967
38221
|
warning: {
|
|
37968
38222
|
label: "Warning",
|
|
37969
38223
|
variant: "warning",
|
|
37970
|
-
icon: /* @__PURE__ */
|
|
38224
|
+
icon: /* @__PURE__ */ jsx158(WarningFilledIcon3, { size: "sm", "aria-hidden": "true" })
|
|
37971
38225
|
},
|
|
37972
38226
|
error: {
|
|
37973
38227
|
label: "Error",
|
|
37974
38228
|
variant: "error",
|
|
37975
|
-
icon: /* @__PURE__ */
|
|
38229
|
+
icon: /* @__PURE__ */ jsx158(ErrorFilledIcon2, { size: "sm", "aria-hidden": "true" })
|
|
37976
38230
|
}
|
|
37977
38231
|
};
|
|
37978
38232
|
|
|
37979
38233
|
// src/notifications/components/EventCatalogPicker/EventCatalogPicker.tsx
|
|
37980
|
-
import { jsx as
|
|
38234
|
+
import { jsx as jsx159, jsxs as jsxs151 } from "react/jsx-runtime";
|
|
37981
38235
|
function EventCatalogPicker({
|
|
37982
38236
|
catalog,
|
|
37983
38237
|
value,
|
|
@@ -37991,7 +38245,7 @@ function EventCatalogPicker({
|
|
|
37991
38245
|
className,
|
|
37992
38246
|
id
|
|
37993
38247
|
}) {
|
|
37994
|
-
const reactId =
|
|
38248
|
+
const reactId = useId67();
|
|
37995
38249
|
const baseId = id ?? `${reactId}-events`;
|
|
37996
38250
|
const [query, setQuery] = useState79("");
|
|
37997
38251
|
const [collapsed, setCollapsed] = useState79({});
|
|
@@ -38030,7 +38284,7 @@ function EventCatalogPicker({
|
|
|
38030
38284
|
if (explicit != null) return explicit;
|
|
38031
38285
|
return !category.events.some((e) => selected.has(e.key));
|
|
38032
38286
|
};
|
|
38033
|
-
return /* @__PURE__ */
|
|
38287
|
+
return /* @__PURE__ */ jsxs151(
|
|
38034
38288
|
"div",
|
|
38035
38289
|
{
|
|
38036
38290
|
className: cn("ods-event-picker", className),
|
|
@@ -38038,16 +38292,16 @@ function EventCatalogPicker({
|
|
|
38038
38292
|
role: "group",
|
|
38039
38293
|
"aria-label": typeof label === "string" ? label : "Events",
|
|
38040
38294
|
children: [
|
|
38041
|
-
(label || searchable) && /* @__PURE__ */
|
|
38042
|
-
label && /* @__PURE__ */
|
|
38043
|
-
searchable && /* @__PURE__ */
|
|
38295
|
+
(label || searchable) && /* @__PURE__ */ jsxs151("div", { className: "ods-event-picker__head", children: [
|
|
38296
|
+
label && /* @__PURE__ */ jsx159("div", { className: "ods-event-picker__label", children: label }),
|
|
38297
|
+
searchable && /* @__PURE__ */ jsx159(
|
|
38044
38298
|
Input,
|
|
38045
38299
|
{
|
|
38046
38300
|
size: "sm",
|
|
38047
38301
|
type: "search",
|
|
38048
38302
|
"aria-label": "Search events",
|
|
38049
38303
|
placeholder: "Search events",
|
|
38050
|
-
leftIcon: /* @__PURE__ */
|
|
38304
|
+
leftIcon: /* @__PURE__ */ jsx159(SearchIcon16, { size: "sm", "aria-hidden": "true" }),
|
|
38051
38305
|
value: query,
|
|
38052
38306
|
onChange: (e) => setQuery(e.target.value),
|
|
38053
38307
|
clearable: true,
|
|
@@ -38056,18 +38310,18 @@ function EventCatalogPicker({
|
|
|
38056
38310
|
className: "ods-event-picker__search"
|
|
38057
38311
|
}
|
|
38058
38312
|
),
|
|
38059
|
-
/* @__PURE__ */
|
|
38313
|
+
/* @__PURE__ */ jsxs151("span", { className: "ods-event-picker__count", "aria-live": "polite", children: [
|
|
38060
38314
|
value.length,
|
|
38061
38315
|
" selected"
|
|
38062
38316
|
] })
|
|
38063
38317
|
] }),
|
|
38064
|
-
filtered.length === 0 ? /* @__PURE__ */
|
|
38318
|
+
filtered.length === 0 ? /* @__PURE__ */ jsx159("div", { className: "ods-event-picker__empty", children: emptyLabel }) : /* @__PURE__ */ jsx159("div", { className: "ods-event-picker__groups", children: filtered.map((category) => {
|
|
38065
38319
|
const total = category.events.length;
|
|
38066
38320
|
const picked = category.events.filter((e) => selected.has(e.key)).length;
|
|
38067
38321
|
const all = picked === total;
|
|
38068
38322
|
const some = picked > 0 && !all;
|
|
38069
38323
|
const open = !isCollapsed(category);
|
|
38070
|
-
return /* @__PURE__ */
|
|
38324
|
+
return /* @__PURE__ */ jsxs151(
|
|
38071
38325
|
"section",
|
|
38072
38326
|
{
|
|
38073
38327
|
className: cn(
|
|
@@ -38075,8 +38329,8 @@ function EventCatalogPicker({
|
|
|
38075
38329
|
!open && "ods-event-picker__group--collapsed"
|
|
38076
38330
|
),
|
|
38077
38331
|
children: [
|
|
38078
|
-
/* @__PURE__ */
|
|
38079
|
-
/* @__PURE__ */
|
|
38332
|
+
/* @__PURE__ */ jsxs151("header", { className: "ods-event-picker__group-head", children: [
|
|
38333
|
+
/* @__PURE__ */ jsx159(
|
|
38080
38334
|
Checkbox,
|
|
38081
38335
|
{
|
|
38082
38336
|
size: "sm",
|
|
@@ -38085,9 +38339,9 @@ function EventCatalogPicker({
|
|
|
38085
38339
|
disabled,
|
|
38086
38340
|
onChange: (on) => toggleCategory(category, on),
|
|
38087
38341
|
"aria-label": `${category.label} (all ${total} events)`,
|
|
38088
|
-
label: /* @__PURE__ */
|
|
38342
|
+
label: /* @__PURE__ */ jsxs151("span", { className: "ods-event-picker__group-title", children: [
|
|
38089
38343
|
category.label,
|
|
38090
|
-
/* @__PURE__ */
|
|
38344
|
+
/* @__PURE__ */ jsxs151("span", { className: "ods-event-picker__group-count", children: [
|
|
38091
38345
|
picked,
|
|
38092
38346
|
"/",
|
|
38093
38347
|
total
|
|
@@ -38096,7 +38350,7 @@ function EventCatalogPicker({
|
|
|
38096
38350
|
description: open ? category.description : void 0
|
|
38097
38351
|
}
|
|
38098
38352
|
),
|
|
38099
|
-
collapsible && !query && /* @__PURE__ */
|
|
38353
|
+
collapsible && !query && /* @__PURE__ */ jsx159(
|
|
38100
38354
|
"button",
|
|
38101
38355
|
{
|
|
38102
38356
|
type: "button",
|
|
@@ -38107,10 +38361,10 @@ function EventCatalogPicker({
|
|
|
38107
38361
|
}
|
|
38108
38362
|
)
|
|
38109
38363
|
] }),
|
|
38110
|
-
open && /* @__PURE__ */
|
|
38364
|
+
open && /* @__PURE__ */ jsx159("ul", { className: "ods-event-picker__rows", children: category.events.map((event) => {
|
|
38111
38365
|
const sev = SEVERITY_META[event.severity];
|
|
38112
|
-
return /* @__PURE__ */
|
|
38113
|
-
/* @__PURE__ */
|
|
38366
|
+
return /* @__PURE__ */ jsxs151("li", { className: "ods-event-picker__row", children: [
|
|
38367
|
+
/* @__PURE__ */ jsx159(
|
|
38114
38368
|
Checkbox,
|
|
38115
38369
|
{
|
|
38116
38370
|
size: "sm",
|
|
@@ -38121,9 +38375,9 @@ function EventCatalogPicker({
|
|
|
38121
38375
|
description: event.description
|
|
38122
38376
|
}
|
|
38123
38377
|
),
|
|
38124
|
-
/* @__PURE__ */
|
|
38125
|
-
event.threshold && /* @__PURE__ */
|
|
38126
|
-
showSeverity && /* @__PURE__ */
|
|
38378
|
+
/* @__PURE__ */ jsxs151("span", { className: "ods-event-picker__badges", children: [
|
|
38379
|
+
event.threshold && /* @__PURE__ */ jsx159(Badge, { size: "sm", variant: "neutral", outlined: true, children: "Threshold" }),
|
|
38380
|
+
showSeverity && /* @__PURE__ */ jsx159(Badge, { size: "sm", variant: sev.variant, dot: true, children: sev.label })
|
|
38127
38381
|
] })
|
|
38128
38382
|
] }, event.key);
|
|
38129
38383
|
}) })
|
|
@@ -38140,7 +38394,7 @@ EventCatalogPicker.displayName = "EventCatalogPicker";
|
|
|
38140
38394
|
|
|
38141
38395
|
// src/notifications/components/NotificationBell/NotificationBell.tsx
|
|
38142
38396
|
import { NotificationIcon as NotificationIcon2 } from "@octaviaflow/icons";
|
|
38143
|
-
import { useCallback as
|
|
38397
|
+
import { useCallback as useCallback59, useState as useState81 } from "react";
|
|
38144
38398
|
|
|
38145
38399
|
// src/notifications/engine/inbox.ts
|
|
38146
38400
|
function resolveInboxAction(item, catalog) {
|
|
@@ -38211,7 +38465,7 @@ function groupInboxByDay(items, now2 = Date.now()) {
|
|
|
38211
38465
|
|
|
38212
38466
|
// src/notifications/components/NotificationDetailDialog/NotificationDetailDialog.tsx
|
|
38213
38467
|
import { ArchiveIcon as ArchiveIcon2, LaunchIcon } from "@octaviaflow/icons";
|
|
38214
|
-
import { jsx as
|
|
38468
|
+
import { jsx as jsx160, jsxs as jsxs152 } from "react/jsx-runtime";
|
|
38215
38469
|
function NotificationDetailDialog({
|
|
38216
38470
|
item,
|
|
38217
38471
|
open,
|
|
@@ -38228,7 +38482,7 @@ function NotificationDetailDialog({
|
|
|
38228
38482
|
const sev = SEVERITY_META[item.severity];
|
|
38229
38483
|
const when = formatRelativeTime(new Date(item.createdAt), now2);
|
|
38230
38484
|
const fullDate = new Date(item.createdAt).toLocaleString();
|
|
38231
|
-
return /* @__PURE__ */
|
|
38485
|
+
return /* @__PURE__ */ jsxs152(
|
|
38232
38486
|
Dialog,
|
|
38233
38487
|
{
|
|
38234
38488
|
open,
|
|
@@ -38236,12 +38490,12 @@ function NotificationDetailDialog({
|
|
|
38236
38490
|
size: "md",
|
|
38237
38491
|
className: cn("ods-notif-detail", className),
|
|
38238
38492
|
title: item.title,
|
|
38239
|
-
footer: /* @__PURE__ */
|
|
38240
|
-
onArchive && !item.archivedAt && /* @__PURE__ */
|
|
38493
|
+
footer: /* @__PURE__ */ jsxs152("div", { className: "ods-notif-detail__footer", children: [
|
|
38494
|
+
onArchive && !item.archivedAt && /* @__PURE__ */ jsx160(
|
|
38241
38495
|
Button,
|
|
38242
38496
|
{
|
|
38243
38497
|
variant: "ghost",
|
|
38244
|
-
leftIcon: /* @__PURE__ */
|
|
38498
|
+
leftIcon: /* @__PURE__ */ jsx160(ArchiveIcon2, { size: "sm", "aria-hidden": "true" }),
|
|
38245
38499
|
onClick: () => {
|
|
38246
38500
|
onArchive(item);
|
|
38247
38501
|
onClose();
|
|
@@ -38249,11 +38503,11 @@ function NotificationDetailDialog({
|
|
|
38249
38503
|
children: "Archive"
|
|
38250
38504
|
}
|
|
38251
38505
|
),
|
|
38252
|
-
/* @__PURE__ */
|
|
38253
|
-
/* @__PURE__ */
|
|
38506
|
+
/* @__PURE__ */ jsx160("span", { className: "ods-notif-detail__spacer" }),
|
|
38507
|
+
/* @__PURE__ */ jsx160(Button, { variant: "ghost", onClick: onClose, children: "Close" }),
|
|
38254
38508
|
resolved.href && // asChild projects the button chrome onto the anchor and skips the
|
|
38255
38509
|
// icon slots, so the glyph is placed inline.
|
|
38256
|
-
/* @__PURE__ */
|
|
38510
|
+
/* @__PURE__ */ jsx160(Button, { variant: "primary", asChild: true, children: /* @__PURE__ */ jsxs152(
|
|
38257
38511
|
"a",
|
|
38258
38512
|
{
|
|
38259
38513
|
href: resolved.href,
|
|
@@ -38266,20 +38520,20 @@ function NotificationDetailDialog({
|
|
|
38266
38520
|
},
|
|
38267
38521
|
children: [
|
|
38268
38522
|
resolved.label ?? "Open",
|
|
38269
|
-
/* @__PURE__ */
|
|
38523
|
+
/* @__PURE__ */ jsx160(LaunchIcon, { size: "sm", "aria-hidden": "true" })
|
|
38270
38524
|
]
|
|
38271
38525
|
}
|
|
38272
38526
|
) })
|
|
38273
38527
|
] }),
|
|
38274
38528
|
children: [
|
|
38275
|
-
/* @__PURE__ */
|
|
38276
|
-
/* @__PURE__ */
|
|
38277
|
-
item.source && /* @__PURE__ */
|
|
38278
|
-
item.subject && /* @__PURE__ */
|
|
38279
|
-
/* @__PURE__ */
|
|
38529
|
+
/* @__PURE__ */ jsxs152("div", { className: "ods-notif-detail__meta", children: [
|
|
38530
|
+
/* @__PURE__ */ jsx160(Badge, { size: "sm", variant: sev.variant, dot: true, children: sev.label }),
|
|
38531
|
+
item.source && /* @__PURE__ */ jsx160("span", { children: item.source }),
|
|
38532
|
+
item.subject && /* @__PURE__ */ jsx160("span", { children: item.subject.label }),
|
|
38533
|
+
/* @__PURE__ */ jsx160("time", { dateTime: new Date(item.createdAt).toISOString(), title: fullDate, children: when ?? fullDate })
|
|
38280
38534
|
] }),
|
|
38281
|
-
item.body && /* @__PURE__ */
|
|
38282
|
-
item.details && item.details.length > 0 && /* @__PURE__ */
|
|
38535
|
+
item.body && /* @__PURE__ */ jsx160("p", { className: "ods-notif-detail__body", children: item.body }),
|
|
38536
|
+
item.details && item.details.length > 0 && /* @__PURE__ */ jsx160(
|
|
38283
38537
|
DescriptionList,
|
|
38284
38538
|
{
|
|
38285
38539
|
items: item.details.map((d) => ({ label: d.label, value: d.value })),
|
|
@@ -38296,7 +38550,7 @@ NotificationDetailDialog.displayName = "NotificationDetailDialog";
|
|
|
38296
38550
|
// src/notifications/components/NotificationInbox/NotificationInbox.tsx
|
|
38297
38551
|
import { ArchiveIcon as ArchiveIcon3, CheckmarkIcon as CheckmarkIcon16, NotificationOffIcon } from "@octaviaflow/icons";
|
|
38298
38552
|
import { useMemo as useMemo42, useState as useState80 } from "react";
|
|
38299
|
-
import { Fragment as Fragment66, jsx as
|
|
38553
|
+
import { Fragment as Fragment66, jsx as jsx161, jsxs as jsxs153 } from "react/jsx-runtime";
|
|
38300
38554
|
var FILTER_OPTIONS = [
|
|
38301
38555
|
{ value: "all", label: "All" },
|
|
38302
38556
|
{ value: "unread", label: "Unread" },
|
|
@@ -38348,20 +38602,20 @@ function NotificationInbox({
|
|
|
38348
38602
|
const action = resolveInboxAction(item, catalog);
|
|
38349
38603
|
const interactive = action.kind !== "none" && Boolean(onOpen || onMarkRead || detailDialog);
|
|
38350
38604
|
const ariaLabel = `${unreadRow ? "Unread: " : ""}${item.title}`;
|
|
38351
|
-
const inner = /* @__PURE__ */
|
|
38352
|
-
/* @__PURE__ */
|
|
38353
|
-
/* @__PURE__ */
|
|
38354
|
-
/* @__PURE__ */
|
|
38355
|
-
item.body && /* @__PURE__ */
|
|
38356
|
-
/* @__PURE__ */
|
|
38357
|
-
item.source && /* @__PURE__ */
|
|
38358
|
-
item.subject && /* @__PURE__ */
|
|
38359
|
-
when && /* @__PURE__ */
|
|
38605
|
+
const inner = /* @__PURE__ */ jsxs153(Fragment66, { children: [
|
|
38606
|
+
/* @__PURE__ */ jsx161("span", { className: "ods-inbox__glyph", "aria-hidden": "true", children: sev.icon }),
|
|
38607
|
+
/* @__PURE__ */ jsxs153("span", { className: "ods-inbox__text", children: [
|
|
38608
|
+
/* @__PURE__ */ jsx161("span", { className: "ods-inbox__title", children: item.title }),
|
|
38609
|
+
item.body && /* @__PURE__ */ jsx161("span", { className: "ods-inbox__body", children: item.body }),
|
|
38610
|
+
/* @__PURE__ */ jsxs153("span", { className: "ods-inbox__meta", children: [
|
|
38611
|
+
item.source && /* @__PURE__ */ jsx161("span", { children: item.source }),
|
|
38612
|
+
item.subject && /* @__PURE__ */ jsx161("span", { children: item.subject.label }),
|
|
38613
|
+
when && /* @__PURE__ */ jsx161("time", { dateTime: new Date(item.createdAt).toISOString(), children: when })
|
|
38360
38614
|
] })
|
|
38361
38615
|
] }),
|
|
38362
|
-
unreadRow && /* @__PURE__ */
|
|
38616
|
+
unreadRow && /* @__PURE__ */ jsx161("span", { className: "ods-inbox__dot", "aria-hidden": "true" })
|
|
38363
38617
|
] });
|
|
38364
|
-
return /* @__PURE__ */
|
|
38618
|
+
return /* @__PURE__ */ jsxs153(
|
|
38365
38619
|
"li",
|
|
38366
38620
|
{
|
|
38367
38621
|
className: cn(
|
|
@@ -38374,7 +38628,7 @@ function NotificationInbox({
|
|
|
38374
38628
|
children: [
|
|
38375
38629
|
action.kind === "link" && action.href ? (
|
|
38376
38630
|
// A real anchor: middle-click, copy link and keyboard all work.
|
|
38377
|
-
/* @__PURE__ */
|
|
38631
|
+
/* @__PURE__ */ jsx161(
|
|
38378
38632
|
"a",
|
|
38379
38633
|
{
|
|
38380
38634
|
className: "ods-inbox__main",
|
|
@@ -38389,7 +38643,7 @@ function NotificationInbox({
|
|
|
38389
38643
|
children: inner
|
|
38390
38644
|
}
|
|
38391
38645
|
)
|
|
38392
|
-
) : /* @__PURE__ */
|
|
38646
|
+
) : /* @__PURE__ */ jsx161(
|
|
38393
38647
|
"button",
|
|
38394
38648
|
{
|
|
38395
38649
|
type: "button",
|
|
@@ -38401,25 +38655,25 @@ function NotificationInbox({
|
|
|
38401
38655
|
children: inner
|
|
38402
38656
|
}
|
|
38403
38657
|
),
|
|
38404
|
-
!compact && (onMarkRead || onArchive) && !item.archivedAt && /* @__PURE__ */
|
|
38405
|
-
onMarkRead && unreadRow && /* @__PURE__ */
|
|
38658
|
+
!compact && (onMarkRead || onArchive) && !item.archivedAt && /* @__PURE__ */ jsxs153("span", { className: "ods-inbox__actions", children: [
|
|
38659
|
+
onMarkRead && unreadRow && /* @__PURE__ */ jsx161(
|
|
38406
38660
|
Button,
|
|
38407
38661
|
{
|
|
38408
38662
|
size: "sm",
|
|
38409
38663
|
variant: "ghost",
|
|
38410
38664
|
"aria-label": "Mark as read",
|
|
38411
38665
|
onClick: () => onMarkRead([item.id]),
|
|
38412
|
-
children: /* @__PURE__ */
|
|
38666
|
+
children: /* @__PURE__ */ jsx161(CheckmarkIcon16, { size: "sm", "aria-hidden": "true" })
|
|
38413
38667
|
}
|
|
38414
38668
|
),
|
|
38415
|
-
onArchive && /* @__PURE__ */
|
|
38669
|
+
onArchive && /* @__PURE__ */ jsx161(
|
|
38416
38670
|
Button,
|
|
38417
38671
|
{
|
|
38418
38672
|
size: "sm",
|
|
38419
38673
|
variant: "ghost",
|
|
38420
38674
|
"aria-label": "Archive",
|
|
38421
38675
|
onClick: () => onArchive([item.id]),
|
|
38422
|
-
children: /* @__PURE__ */
|
|
38676
|
+
children: /* @__PURE__ */ jsx161(ArchiveIcon3, { size: "sm", "aria-hidden": "true" })
|
|
38423
38677
|
}
|
|
38424
38678
|
)
|
|
38425
38679
|
] })
|
|
@@ -38428,9 +38682,9 @@ function NotificationInbox({
|
|
|
38428
38682
|
item.id
|
|
38429
38683
|
);
|
|
38430
38684
|
};
|
|
38431
|
-
return /* @__PURE__ */
|
|
38432
|
-
!compact && /* @__PURE__ */
|
|
38433
|
-
/* @__PURE__ */
|
|
38685
|
+
return /* @__PURE__ */ jsxs153("div", { className: cn("ods-inbox", compact && "ods-inbox--compact", className), children: [
|
|
38686
|
+
!compact && /* @__PURE__ */ jsxs153("div", { className: "ods-inbox__toolbar", children: [
|
|
38687
|
+
/* @__PURE__ */ jsx161(
|
|
38434
38688
|
SegmentedControl,
|
|
38435
38689
|
{
|
|
38436
38690
|
"aria-label": "Filter",
|
|
@@ -38440,22 +38694,22 @@ function NotificationInbox({
|
|
|
38440
38694
|
onChange: (v) => setFilter(v)
|
|
38441
38695
|
}
|
|
38442
38696
|
),
|
|
38443
|
-
/* @__PURE__ */
|
|
38444
|
-
onMarkAllRead && unread > 0 && /* @__PURE__ */
|
|
38697
|
+
/* @__PURE__ */ jsx161("span", { className: "ods-inbox__unread", "aria-live": "polite", children: unread === 0 ? "All caught up" : `${unread} unread` }),
|
|
38698
|
+
onMarkAllRead && unread > 0 && /* @__PURE__ */ jsx161(Button, { size: "sm", variant: "ghost", onClick: onMarkAllRead, children: "Mark all read" })
|
|
38445
38699
|
] }),
|
|
38446
|
-
visible.length === 0 ? /* @__PURE__ */
|
|
38700
|
+
visible.length === 0 ? /* @__PURE__ */ jsx161(
|
|
38447
38701
|
EmptyState,
|
|
38448
38702
|
{
|
|
38449
38703
|
size: compact ? "sm" : "md",
|
|
38450
|
-
icon: /* @__PURE__ */
|
|
38704
|
+
icon: /* @__PURE__ */ jsx161(NotificationOffIcon, { "aria-hidden": "true" }),
|
|
38451
38705
|
title: emptyTitle ?? (activeFilter === "unread" ? "You're all caught up" : activeFilter === "archived" ? "Nothing archived" : "No notifications yet"),
|
|
38452
38706
|
description: emptyDescription ?? (activeFilter === "all" ? "Run failures, apps that need re-authentication and account activity will show up here." : void 0)
|
|
38453
38707
|
}
|
|
38454
|
-
) : showDays ? /* @__PURE__ */
|
|
38455
|
-
/* @__PURE__ */
|
|
38456
|
-
/* @__PURE__ */
|
|
38457
|
-
] }, group.key)) }) : /* @__PURE__ */
|
|
38458
|
-
detailDialog && /* @__PURE__ */
|
|
38708
|
+
) : showDays ? /* @__PURE__ */ jsx161("div", { className: "ods-inbox__groups", children: groups.map((group) => /* @__PURE__ */ jsxs153("section", { className: "ods-inbox__group", "aria-label": group.label, children: [
|
|
38709
|
+
/* @__PURE__ */ jsx161("h4", { className: "ods-inbox__day", children: group.label }),
|
|
38710
|
+
/* @__PURE__ */ jsx161("ul", { className: "ods-inbox__rows", children: group.items.map(renderRow) })
|
|
38711
|
+
] }, group.key)) }) : /* @__PURE__ */ jsx161("ul", { className: "ods-inbox__rows", children: visible.map(renderRow) }),
|
|
38712
|
+
detailDialog && /* @__PURE__ */ jsx161(
|
|
38459
38713
|
NotificationDetailDialog,
|
|
38460
38714
|
{
|
|
38461
38715
|
item: detailItem,
|
|
@@ -38472,7 +38726,7 @@ function NotificationInbox({
|
|
|
38472
38726
|
NotificationInbox.displayName = "NotificationInbox";
|
|
38473
38727
|
|
|
38474
38728
|
// src/notifications/components/NotificationBell/NotificationBell.tsx
|
|
38475
|
-
import { Fragment as Fragment67, jsx as
|
|
38729
|
+
import { Fragment as Fragment67, jsx as jsx162, jsxs as jsxs154 } from "react/jsx-runtime";
|
|
38476
38730
|
function NotificationBell({
|
|
38477
38731
|
items,
|
|
38478
38732
|
unreadCount,
|
|
@@ -38497,7 +38751,7 @@ function NotificationBell({
|
|
|
38497
38751
|
const countLabel = unread > 99 ? "99+" : String(unread);
|
|
38498
38752
|
const [internalOpen, setInternalOpen] = useState81(false);
|
|
38499
38753
|
const isOpen = open ?? internalOpen;
|
|
38500
|
-
const setOpen =
|
|
38754
|
+
const setOpen = useCallback59(
|
|
38501
38755
|
(next) => {
|
|
38502
38756
|
if (open === void 0) setInternalOpen(next);
|
|
38503
38757
|
onOpenChange?.(next);
|
|
@@ -38510,8 +38764,8 @@ function NotificationBell({
|
|
|
38510
38764
|
if (action.kind === "modal") setDetailItem(item);
|
|
38511
38765
|
onOpenItem?.(item, action);
|
|
38512
38766
|
};
|
|
38513
|
-
return /* @__PURE__ */
|
|
38514
|
-
/* @__PURE__ */
|
|
38767
|
+
return /* @__PURE__ */ jsxs154(Fragment67, { children: [
|
|
38768
|
+
/* @__PURE__ */ jsx162(
|
|
38515
38769
|
Popover,
|
|
38516
38770
|
{
|
|
38517
38771
|
open: isOpen,
|
|
@@ -38520,14 +38774,14 @@ function NotificationBell({
|
|
|
38520
38774
|
align,
|
|
38521
38775
|
"aria-label": label,
|
|
38522
38776
|
className: cn("ods-notif-bell__popover", className),
|
|
38523
|
-
content: /* @__PURE__ */
|
|
38524
|
-
/* @__PURE__ */
|
|
38525
|
-
/* @__PURE__ */
|
|
38526
|
-
/* @__PURE__ */
|
|
38777
|
+
content: /* @__PURE__ */ jsxs154("div", { className: "ods-notif-bell__panel", children: [
|
|
38778
|
+
/* @__PURE__ */ jsxs154("div", { className: "ods-notif-bell__head", children: [
|
|
38779
|
+
/* @__PURE__ */ jsx162("h3", { className: "ods-notif-bell__title", children: label }),
|
|
38780
|
+
/* @__PURE__ */ jsx162("span", { className: "ods-notif-bell__spacer" }),
|
|
38527
38781
|
onMarkAllRead && // Always offered so the control is discoverable; disabled (not
|
|
38528
38782
|
// hidden) when there's nothing unread, so it never appears to
|
|
38529
38783
|
// vanish between visits.
|
|
38530
|
-
/* @__PURE__ */
|
|
38784
|
+
/* @__PURE__ */ jsx162(
|
|
38531
38785
|
Button,
|
|
38532
38786
|
{
|
|
38533
38787
|
size: "sm",
|
|
@@ -38538,7 +38792,7 @@ function NotificationBell({
|
|
|
38538
38792
|
}
|
|
38539
38793
|
)
|
|
38540
38794
|
] }),
|
|
38541
|
-
/* @__PURE__ */
|
|
38795
|
+
/* @__PURE__ */ jsx162("div", { className: "ods-notif-bell__body", children: /* @__PURE__ */ jsx162(
|
|
38542
38796
|
NotificationInbox,
|
|
38543
38797
|
{
|
|
38544
38798
|
items,
|
|
@@ -38554,7 +38808,7 @@ function NotificationBell({
|
|
|
38554
38808
|
emptyDescription: void 0
|
|
38555
38809
|
}
|
|
38556
38810
|
) }),
|
|
38557
|
-
onViewAll && /* @__PURE__ */
|
|
38811
|
+
onViewAll && /* @__PURE__ */ jsx162("div", { className: "ods-notif-bell__foot", children: /* @__PURE__ */ jsx162(
|
|
38558
38812
|
Button,
|
|
38559
38813
|
{
|
|
38560
38814
|
size: "sm",
|
|
@@ -38567,22 +38821,22 @@ function NotificationBell({
|
|
|
38567
38821
|
}
|
|
38568
38822
|
) })
|
|
38569
38823
|
] }),
|
|
38570
|
-
children: /* @__PURE__ */
|
|
38571
|
-
/* @__PURE__ */
|
|
38824
|
+
children: /* @__PURE__ */ jsxs154("span", { className: cn("ods-notif-bell", hasUnread && "ods-notif-bell--unread"), children: [
|
|
38825
|
+
/* @__PURE__ */ jsx162(
|
|
38572
38826
|
Button,
|
|
38573
38827
|
{
|
|
38574
38828
|
variant: "icon",
|
|
38575
38829
|
size: "md",
|
|
38576
38830
|
className: "ods-notif-bell__trigger",
|
|
38577
38831
|
"aria-label": hasUnread ? `${label}, ${countLabel} unread` : label,
|
|
38578
|
-
children: /* @__PURE__ */
|
|
38832
|
+
children: /* @__PURE__ */ jsx162(NotificationIcon2, { size: "sm", "aria-hidden": "true" })
|
|
38579
38833
|
}
|
|
38580
38834
|
),
|
|
38581
|
-
hasUnread && /* @__PURE__ */
|
|
38835
|
+
hasUnread && /* @__PURE__ */ jsx162("span", { className: "ods-notif-bell__count", "aria-hidden": "true", children: countLabel })
|
|
38582
38836
|
] })
|
|
38583
38837
|
}
|
|
38584
38838
|
),
|
|
38585
|
-
/* @__PURE__ */
|
|
38839
|
+
/* @__PURE__ */ jsx162(
|
|
38586
38840
|
NotificationDetailDialog,
|
|
38587
38841
|
{
|
|
38588
38842
|
item: detailItem,
|
|
@@ -38600,7 +38854,7 @@ NotificationBell.displayName = "NotificationBell";
|
|
|
38600
38854
|
|
|
38601
38855
|
// src/notifications/components/NotificationChannelCard/NotificationChannelCard.tsx
|
|
38602
38856
|
import { EditIcon, SendIcon, TrashCanIcon as TrashCanIcon3 } from "@octaviaflow/icons";
|
|
38603
|
-
import { jsx as
|
|
38857
|
+
import { jsx as jsx163, jsxs as jsxs155 } from "react/jsx-runtime";
|
|
38604
38858
|
function NotificationChannelCard({
|
|
38605
38859
|
channel,
|
|
38606
38860
|
onTest,
|
|
@@ -38621,7 +38875,7 @@ function NotificationChannelCard({
|
|
|
38621
38875
|
now2
|
|
38622
38876
|
);
|
|
38623
38877
|
const inApp = channel.type === "in_app";
|
|
38624
|
-
return /* @__PURE__ */
|
|
38878
|
+
return /* @__PURE__ */ jsxs155(
|
|
38625
38879
|
"article",
|
|
38626
38880
|
{
|
|
38627
38881
|
className: cn(
|
|
@@ -38633,30 +38887,30 @@ function NotificationChannelCard({
|
|
|
38633
38887
|
"data-status": channel.enabled ? channel.status : "disabled",
|
|
38634
38888
|
"aria-label": `${channel.label} (${type.label})`,
|
|
38635
38889
|
children: [
|
|
38636
|
-
/* @__PURE__ */
|
|
38637
|
-
/* @__PURE__ */
|
|
38638
|
-
/* @__PURE__ */
|
|
38639
|
-
/* @__PURE__ */
|
|
38640
|
-
/* @__PURE__ */
|
|
38890
|
+
/* @__PURE__ */ jsxs155("header", { className: "ods-notif-channel__head", children: [
|
|
38891
|
+
/* @__PURE__ */ jsx163("span", { className: "ods-notif-channel__icon", "aria-hidden": "true", children: icon ?? type.icon }),
|
|
38892
|
+
/* @__PURE__ */ jsxs155("span", { className: "ods-notif-channel__titles", children: [
|
|
38893
|
+
/* @__PURE__ */ jsx163("span", { className: "ods-notif-channel__label", children: channel.label }),
|
|
38894
|
+
/* @__PURE__ */ jsxs155("span", { className: "ods-notif-channel__type", children: [
|
|
38641
38895
|
type.label,
|
|
38642
38896
|
channel.instanceLabel ? ` \xB7 ${channel.instanceLabel}` : ""
|
|
38643
38897
|
] })
|
|
38644
38898
|
] }),
|
|
38645
|
-
/* @__PURE__ */
|
|
38899
|
+
/* @__PURE__ */ jsx163(Badge, { size: "sm", variant: status.variant, dot: true, children: status.label })
|
|
38646
38900
|
] }),
|
|
38647
|
-
(channel.target || inApp) && /* @__PURE__ */
|
|
38648
|
-
/* @__PURE__ */
|
|
38901
|
+
(channel.target || inApp) && /* @__PURE__ */ jsx163("div", { className: "ods-notif-channel__target", title: channel.target, children: inApp ? "Every member's bell and inbox" : channel.target }),
|
|
38902
|
+
/* @__PURE__ */ jsx163("div", { className: "ods-notif-channel__meta", children: channel.status === "failing" && channel.lastError ? /* @__PURE__ */ jsx163("span", { className: "ods-notif-channel__error", title: channel.lastError, children: channel.lastError }) : last ? /* @__PURE__ */ jsxs155("span", { children: [
|
|
38649
38903
|
"Last delivery ",
|
|
38650
38904
|
last
|
|
38651
|
-
] }) : /* @__PURE__ */
|
|
38652
|
-
testResult && /* @__PURE__ */
|
|
38653
|
-
!readOnly && !inApp && /* @__PURE__ */
|
|
38654
|
-
onTest && /* @__PURE__ */
|
|
38905
|
+
] }) : /* @__PURE__ */ jsx163("span", { children: "No deliveries yet" }) }),
|
|
38906
|
+
testResult && /* @__PURE__ */ jsx163(InlineMessage, { tone: testResult.ok ? "success" : "danger", size: "sm", live: "polite", children: testResult.message ?? (testResult.ok ? "Test message delivered." : "Test failed.") }),
|
|
38907
|
+
!readOnly && !inApp && /* @__PURE__ */ jsxs155("footer", { className: "ods-notif-channel__actions", children: [
|
|
38908
|
+
onTest && /* @__PURE__ */ jsx163(
|
|
38655
38909
|
Button,
|
|
38656
38910
|
{
|
|
38657
38911
|
size: "sm",
|
|
38658
38912
|
variant: "secondary",
|
|
38659
|
-
leftIcon: /* @__PURE__ */
|
|
38913
|
+
leftIcon: /* @__PURE__ */ jsx163(SendIcon, { size: "sm", "aria-hidden": "true" }),
|
|
38660
38914
|
loading: testing,
|
|
38661
38915
|
loadingText: "Sending\u2026",
|
|
38662
38916
|
disabled: !channel.enabled,
|
|
@@ -38664,18 +38918,18 @@ function NotificationChannelCard({
|
|
|
38664
38918
|
children: "Send test"
|
|
38665
38919
|
}
|
|
38666
38920
|
),
|
|
38667
|
-
/* @__PURE__ */
|
|
38668
|
-
onEdit && /* @__PURE__ */
|
|
38921
|
+
/* @__PURE__ */ jsx163("span", { className: "ods-notif-channel__spacer" }),
|
|
38922
|
+
onEdit && /* @__PURE__ */ jsx163(
|
|
38669
38923
|
Button,
|
|
38670
38924
|
{
|
|
38671
38925
|
size: "sm",
|
|
38672
38926
|
variant: "ghost",
|
|
38673
38927
|
"aria-label": `Edit ${channel.label}`,
|
|
38674
38928
|
onClick: () => onEdit(channel),
|
|
38675
|
-
children: /* @__PURE__ */
|
|
38929
|
+
children: /* @__PURE__ */ jsx163(EditIcon, { size: "sm", "aria-hidden": "true" })
|
|
38676
38930
|
}
|
|
38677
38931
|
),
|
|
38678
|
-
onRemove && /* @__PURE__ */
|
|
38932
|
+
onRemove && /* @__PURE__ */ jsx163(
|
|
38679
38933
|
Button,
|
|
38680
38934
|
{
|
|
38681
38935
|
size: "sm",
|
|
@@ -38683,10 +38937,10 @@ function NotificationChannelCard({
|
|
|
38683
38937
|
"aria-label": `Remove ${channel.label}`,
|
|
38684
38938
|
className: "ods-notif-channel__remove",
|
|
38685
38939
|
onClick: () => onRemove(channel),
|
|
38686
|
-
children: /* @__PURE__ */
|
|
38940
|
+
children: /* @__PURE__ */ jsx163(TrashCanIcon3, { size: "sm", "aria-hidden": "true" })
|
|
38687
38941
|
}
|
|
38688
38942
|
),
|
|
38689
|
-
onToggle && /* @__PURE__ */
|
|
38943
|
+
onToggle && /* @__PURE__ */ jsx163(
|
|
38690
38944
|
Switch,
|
|
38691
38945
|
{
|
|
38692
38946
|
size: "sm",
|
|
@@ -38704,7 +38958,7 @@ NotificationChannelCard.displayName = "NotificationChannelCard";
|
|
|
38704
38958
|
|
|
38705
38959
|
// src/notifications/components/NotificationChannelDialog/NotificationChannelDialog.tsx
|
|
38706
38960
|
import { SendIcon as SendIcon2 } from "@octaviaflow/icons";
|
|
38707
|
-
import { useEffect as
|
|
38961
|
+
import { useEffect as useEffect61, useMemo as useMemo43, useState as useState83 } from "react";
|
|
38708
38962
|
|
|
38709
38963
|
// src/notifications/engine/channels.ts
|
|
38710
38964
|
var CONNECTED_CHANNEL_TYPES = [
|
|
@@ -38810,8 +39064,8 @@ function draftFromChannel(channel, fallbackType = "slack") {
|
|
|
38810
39064
|
|
|
38811
39065
|
// src/notifications/components/NotificationChannelForm/NotificationChannelForm.tsx
|
|
38812
39066
|
import { AddIcon as AddIcon6, CheckmarkFilledIcon as CheckmarkFilledIcon3, LaunchIcon as LaunchIcon2 } from "@octaviaflow/icons";
|
|
38813
|
-
import { useId as
|
|
38814
|
-
import { jsx as
|
|
39067
|
+
import { useId as useId68, useState as useState82 } from "react";
|
|
39068
|
+
import { jsx as jsx164, jsxs as jsxs156 } from "react/jsx-runtime";
|
|
38815
39069
|
var DEFAULT_TYPES = [
|
|
38816
39070
|
"slack",
|
|
38817
39071
|
"email",
|
|
@@ -38850,7 +39104,7 @@ function NotificationChannelForm({
|
|
|
38850
39104
|
className,
|
|
38851
39105
|
id
|
|
38852
39106
|
}) {
|
|
38853
|
-
const reactId =
|
|
39107
|
+
const reactId = useId68();
|
|
38854
39108
|
const baseId = id ?? `${reactId}-channel`;
|
|
38855
39109
|
const typeMeta = CHANNEL_TYPE_META[value.type];
|
|
38856
39110
|
const patch = (next) => onChange({ ...value, ...next });
|
|
@@ -38894,20 +39148,20 @@ function NotificationChannelForm({
|
|
|
38894
39148
|
onChange({ type, label: value.label, id: value.id });
|
|
38895
39149
|
setTouched({});
|
|
38896
39150
|
};
|
|
38897
|
-
const stepTitle = (n, title, hint) => /* @__PURE__ */
|
|
38898
|
-
numbered && /* @__PURE__ */
|
|
38899
|
-
/* @__PURE__ */
|
|
38900
|
-
hint && /* @__PURE__ */
|
|
39151
|
+
const stepTitle = (n, title, hint) => /* @__PURE__ */ jsxs156("legend", { className: "ods-notif-channel-form__legend", children: [
|
|
39152
|
+
numbered && /* @__PURE__ */ jsx164("span", { className: "ods-notif-channel-form__step-num", children: n }),
|
|
39153
|
+
/* @__PURE__ */ jsx164("span", { className: "ods-notif-channel-form__step-title", children: title }),
|
|
39154
|
+
hint && /* @__PURE__ */ jsx164("span", { className: "ods-notif-channel-form__step-hint", children: hint })
|
|
38901
39155
|
] });
|
|
38902
39156
|
const destinationHint = typeMeta.connected ? "Pick a connected app, then where it should post." : value.type === "email" ? "Who should receive these emails?" : "Where should we send the signed JSON?";
|
|
38903
|
-
return /* @__PURE__ */
|
|
38904
|
-
/* @__PURE__ */
|
|
39157
|
+
return /* @__PURE__ */ jsxs156("div", { className: cn("ods-notif-channel-form", className), "data-size": size, id: baseId, children: [
|
|
39158
|
+
/* @__PURE__ */ jsxs156("fieldset", { className: "ods-notif-channel-form__section", children: [
|
|
38905
39159
|
stepTitle(1, "Type", lockType ? "Type cannot change after creation." : void 0),
|
|
38906
|
-
/* @__PURE__ */
|
|
39160
|
+
/* @__PURE__ */ jsx164("div", { className: "ods-notif-channel-form__types", role: "radiogroup", "aria-label": "Channel type", children: types.map((type) => {
|
|
38907
39161
|
const meta2 = CHANNEL_TYPE_META[type];
|
|
38908
39162
|
const selected = type === value.type;
|
|
38909
39163
|
const hasApp = !meta2.connected || instances.some((i) => i.type === type);
|
|
38910
|
-
return /* @__PURE__ */
|
|
39164
|
+
return /* @__PURE__ */ jsxs156(
|
|
38911
39165
|
"button",
|
|
38912
39166
|
{
|
|
38913
39167
|
type: "button",
|
|
@@ -38920,28 +39174,28 @@ function NotificationChannelForm({
|
|
|
38920
39174
|
disabled: readOnly || lockType && !selected,
|
|
38921
39175
|
onClick: () => selectType(type),
|
|
38922
39176
|
children: [
|
|
38923
|
-
/* @__PURE__ */
|
|
38924
|
-
/* @__PURE__ */
|
|
38925
|
-
/* @__PURE__ */
|
|
38926
|
-
/* @__PURE__ */
|
|
39177
|
+
/* @__PURE__ */ jsx164("span", { className: "ods-notif-channel-form__type-icon", "aria-hidden": "true", children: meta2.icon }),
|
|
39178
|
+
/* @__PURE__ */ jsxs156("span", { className: "ods-notif-channel-form__type-text", children: [
|
|
39179
|
+
/* @__PURE__ */ jsx164("span", { className: "ods-notif-channel-form__type-label", children: meta2.label }),
|
|
39180
|
+
/* @__PURE__ */ jsx164("span", { className: "ods-notif-channel-form__type-hint", children: meta2.connected && hasApp ? "Connected" : meta2.hint })
|
|
38927
39181
|
] }),
|
|
38928
|
-
selected && /* @__PURE__ */
|
|
39182
|
+
selected && /* @__PURE__ */ jsx164("span", { className: "ods-notif-channel-form__type-check", "aria-hidden": "true", children: /* @__PURE__ */ jsx164(CheckmarkFilledIcon3, { size: "sm" }) })
|
|
38929
39183
|
]
|
|
38930
39184
|
},
|
|
38931
39185
|
type
|
|
38932
39186
|
);
|
|
38933
39187
|
}) })
|
|
38934
39188
|
] }),
|
|
38935
|
-
/* @__PURE__ */
|
|
39189
|
+
/* @__PURE__ */ jsxs156("fieldset", { className: "ods-notif-channel-form__section", children: [
|
|
38936
39190
|
stepTitle(2, "Destination", destinationHint),
|
|
38937
|
-
typeMeta.connected && (forType.length === 0 ? /* @__PURE__ */
|
|
38938
|
-
/* @__PURE__ */
|
|
38939
|
-
onConnectNew && !readOnly && /* @__PURE__ */
|
|
39191
|
+
typeMeta.connected && (forType.length === 0 ? /* @__PURE__ */ jsxs156(Callout, { variant: "info", size: "sm", title: `No ${typeMeta.label} app connected yet`, children: [
|
|
39192
|
+
/* @__PURE__ */ jsx164("p", { className: "ods-notif-channel-form__p", children: "Connect one first \u2014 it takes a minute, and flows can use the same connection." }),
|
|
39193
|
+
onConnectNew && !readOnly && /* @__PURE__ */ jsxs156(
|
|
38940
39194
|
Button,
|
|
38941
39195
|
{
|
|
38942
39196
|
size: "sm",
|
|
38943
39197
|
variant: "primary",
|
|
38944
|
-
leftIcon: /* @__PURE__ */
|
|
39198
|
+
leftIcon: /* @__PURE__ */ jsx164(LaunchIcon2, { size: "sm", "aria-hidden": "true" }),
|
|
38945
39199
|
onClick: () => onConnectNew(value.type),
|
|
38946
39200
|
children: [
|
|
38947
39201
|
"Connect ",
|
|
@@ -38949,9 +39203,9 @@ function NotificationChannelForm({
|
|
|
38949
39203
|
]
|
|
38950
39204
|
}
|
|
38951
39205
|
)
|
|
38952
|
-
] }) : /* @__PURE__ */
|
|
38953
|
-
/* @__PURE__ */
|
|
38954
|
-
/* @__PURE__ */
|
|
39206
|
+
] }) : /* @__PURE__ */ jsxs156("div", { className: "ods-notif-channel-form__grid", children: [
|
|
39207
|
+
/* @__PURE__ */ jsxs156("div", { className: "ods-notif-channel-form__row", children: [
|
|
39208
|
+
/* @__PURE__ */ jsx164(
|
|
38955
39209
|
Select,
|
|
38956
39210
|
{
|
|
38957
39211
|
id: `${baseId}-instance`,
|
|
@@ -38970,12 +39224,12 @@ function NotificationChannelForm({
|
|
|
38970
39224
|
className: "ods-notif-channel-form__grow"
|
|
38971
39225
|
}
|
|
38972
39226
|
),
|
|
38973
|
-
onConnectNew && !readOnly && /* @__PURE__ */
|
|
39227
|
+
onConnectNew && !readOnly && /* @__PURE__ */ jsx164(
|
|
38974
39228
|
Button,
|
|
38975
39229
|
{
|
|
38976
39230
|
size,
|
|
38977
39231
|
variant: "ghost",
|
|
38978
|
-
leftIcon: /* @__PURE__ */
|
|
39232
|
+
leftIcon: /* @__PURE__ */ jsx164(AddIcon6, { size: "sm", "aria-hidden": "true" }),
|
|
38979
39233
|
onClick: () => onConnectNew(value.type),
|
|
38980
39234
|
className: "ods-notif-channel-form__connect",
|
|
38981
39235
|
children: "Connect new"
|
|
@@ -38987,7 +39241,7 @@ function NotificationChannelForm({
|
|
|
38987
39241
|
// modal whose focus scope would pull focus straight back
|
|
38988
39242
|
// out of a portaled search box. The Combobox input stays
|
|
38989
39243
|
// inside the dialog; only its list is portaled.
|
|
38990
|
-
/* @__PURE__ */
|
|
39244
|
+
/* @__PURE__ */ jsx164(
|
|
38991
39245
|
Combobox,
|
|
38992
39246
|
{
|
|
38993
39247
|
id: `${baseId}-target`,
|
|
@@ -39005,7 +39259,7 @@ function NotificationChannelForm({
|
|
|
39005
39259
|
size
|
|
39006
39260
|
}
|
|
39007
39261
|
)
|
|
39008
|
-
) : /* @__PURE__ */
|
|
39262
|
+
) : /* @__PURE__ */ jsx164(
|
|
39009
39263
|
Input,
|
|
39010
39264
|
{
|
|
39011
39265
|
id: `${baseId}-target`,
|
|
@@ -39021,9 +39275,9 @@ function NotificationChannelForm({
|
|
|
39021
39275
|
}
|
|
39022
39276
|
))
|
|
39023
39277
|
] })),
|
|
39024
|
-
value.type === "email" && /* @__PURE__ */
|
|
39025
|
-
/* @__PURE__ */
|
|
39026
|
-
/* @__PURE__ */
|
|
39278
|
+
value.type === "email" && /* @__PURE__ */ jsxs156("div", { className: "ods-notif-channel-form__field", children: [
|
|
39279
|
+
/* @__PURE__ */ jsx164("label", { className: "ods-notif-channel-form__label", htmlFor: `${baseId}-recipient`, children: "Recipients" }),
|
|
39280
|
+
/* @__PURE__ */ jsxs156(
|
|
39027
39281
|
"div",
|
|
39028
39282
|
{
|
|
39029
39283
|
className: cn(
|
|
@@ -39031,7 +39285,7 @@ function NotificationChannelForm({
|
|
|
39031
39285
|
errorFor("recipients") && "ods-notif-channel-form__recipients--error"
|
|
39032
39286
|
),
|
|
39033
39287
|
children: [
|
|
39034
|
-
recipients.map((r) => /* @__PURE__ */
|
|
39288
|
+
recipients.map((r) => /* @__PURE__ */ jsx164(
|
|
39035
39289
|
Chip,
|
|
39036
39290
|
{
|
|
39037
39291
|
size: "sm",
|
|
@@ -39042,7 +39296,7 @@ function NotificationChannelForm({
|
|
|
39042
39296
|
},
|
|
39043
39297
|
r
|
|
39044
39298
|
)),
|
|
39045
|
-
/* @__PURE__ */
|
|
39299
|
+
/* @__PURE__ */ jsx164(
|
|
39046
39300
|
"input",
|
|
39047
39301
|
{
|
|
39048
39302
|
id: `${baseId}-recipient`,
|
|
@@ -39060,7 +39314,7 @@ function NotificationChannelForm({
|
|
|
39060
39314
|
]
|
|
39061
39315
|
}
|
|
39062
39316
|
),
|
|
39063
|
-
/* @__PURE__ */
|
|
39317
|
+
/* @__PURE__ */ jsx164(
|
|
39064
39318
|
"div",
|
|
39065
39319
|
{
|
|
39066
39320
|
className: cn(
|
|
@@ -39071,7 +39325,7 @@ function NotificationChannelForm({
|
|
|
39071
39325
|
}
|
|
39072
39326
|
)
|
|
39073
39327
|
] }),
|
|
39074
|
-
value.type === "webhook" && /* @__PURE__ */
|
|
39328
|
+
value.type === "webhook" && /* @__PURE__ */ jsx164(
|
|
39075
39329
|
Input,
|
|
39076
39330
|
{
|
|
39077
39331
|
id: `${baseId}-url`,
|
|
@@ -39088,7 +39342,7 @@ function NotificationChannelForm({
|
|
|
39088
39342
|
size
|
|
39089
39343
|
}
|
|
39090
39344
|
),
|
|
39091
|
-
value.type === "whatsapp" && /* @__PURE__ */
|
|
39345
|
+
value.type === "whatsapp" && /* @__PURE__ */ jsx164(
|
|
39092
39346
|
Input,
|
|
39093
39347
|
{
|
|
39094
39348
|
id: `${baseId}-target`,
|
|
@@ -39106,9 +39360,9 @@ function NotificationChannelForm({
|
|
|
39106
39360
|
}
|
|
39107
39361
|
)
|
|
39108
39362
|
] }),
|
|
39109
|
-
/* @__PURE__ */
|
|
39363
|
+
/* @__PURE__ */ jsxs156("fieldset", { className: "ods-notif-channel-form__section", children: [
|
|
39110
39364
|
stepTitle(3, "Name", "How this channel appears in rules and the activity log."),
|
|
39111
|
-
/* @__PURE__ */
|
|
39365
|
+
/* @__PURE__ */ jsx164(
|
|
39112
39366
|
Input,
|
|
39113
39367
|
{
|
|
39114
39368
|
id: `${baseId}-label`,
|
|
@@ -39125,16 +39379,16 @@ function NotificationChannelForm({
|
|
|
39125
39379
|
}
|
|
39126
39380
|
)
|
|
39127
39381
|
] }),
|
|
39128
|
-
showSummary && summary && /* @__PURE__ */
|
|
39129
|
-
/* @__PURE__ */
|
|
39130
|
-
/* @__PURE__ */
|
|
39382
|
+
showSummary && summary && /* @__PURE__ */ jsxs156("div", { className: "ods-notif-channel-form__summary", "aria-live": "polite", children: [
|
|
39383
|
+
/* @__PURE__ */ jsx164(CheckmarkFilledIcon3, { size: "sm", "aria-hidden": "true" }),
|
|
39384
|
+
/* @__PURE__ */ jsx164("span", { children: summary })
|
|
39131
39385
|
] })
|
|
39132
39386
|
] });
|
|
39133
39387
|
}
|
|
39134
39388
|
NotificationChannelForm.displayName = "NotificationChannelForm";
|
|
39135
39389
|
|
|
39136
39390
|
// src/notifications/components/NotificationChannelDialog/NotificationChannelDialog.tsx
|
|
39137
|
-
import { jsx as
|
|
39391
|
+
import { jsx as jsx165, jsxs as jsxs157 } from "react/jsx-runtime";
|
|
39138
39392
|
function NotificationChannelDialog({
|
|
39139
39393
|
open,
|
|
39140
39394
|
onClose,
|
|
@@ -39162,7 +39416,7 @@ function NotificationChannelDialog({
|
|
|
39162
39416
|
const [testing, setTesting] = useState83(false);
|
|
39163
39417
|
const [testResult, setTestResult] = useState83(null);
|
|
39164
39418
|
const [submitError, setSubmitError] = useState83(null);
|
|
39165
|
-
|
|
39419
|
+
useEffect61(() => {
|
|
39166
39420
|
if (!open) return;
|
|
39167
39421
|
setDraft(draftFromChannel(channel, initialType));
|
|
39168
39422
|
setSubmitted(false);
|
|
@@ -39205,7 +39459,7 @@ function NotificationChannelDialog({
|
|
|
39205
39459
|
setTesting(false);
|
|
39206
39460
|
}
|
|
39207
39461
|
};
|
|
39208
|
-
return /* @__PURE__ */
|
|
39462
|
+
return /* @__PURE__ */ jsxs157(
|
|
39209
39463
|
Dialog,
|
|
39210
39464
|
{
|
|
39211
39465
|
open,
|
|
@@ -39215,12 +39469,12 @@ function NotificationChannelDialog({
|
|
|
39215
39469
|
title: title ?? (editing ? "Edit channel" : "Add channel"),
|
|
39216
39470
|
description: description ?? (editing ? "Change where this channel posts or what it is called." : "Where should notifications go besides the in-app inbox?"),
|
|
39217
39471
|
closeOnOverlayClick: false,
|
|
39218
|
-
footer: /* @__PURE__ */
|
|
39219
|
-
onTest && /* @__PURE__ */
|
|
39472
|
+
footer: /* @__PURE__ */ jsxs157("div", { className: "ods-notif-channel-dialog__footer", children: [
|
|
39473
|
+
onTest && /* @__PURE__ */ jsx165(
|
|
39220
39474
|
Button,
|
|
39221
39475
|
{
|
|
39222
39476
|
variant: "secondary",
|
|
39223
|
-
leftIcon: /* @__PURE__ */
|
|
39477
|
+
leftIcon: /* @__PURE__ */ jsx165(SendIcon2, { size: "sm", "aria-hidden": "true" }),
|
|
39224
39478
|
loading: testing,
|
|
39225
39479
|
loadingText: "Sending\u2026",
|
|
39226
39480
|
disabled: !complete || saving,
|
|
@@ -39228,9 +39482,9 @@ function NotificationChannelDialog({
|
|
|
39228
39482
|
children: "Send test"
|
|
39229
39483
|
}
|
|
39230
39484
|
),
|
|
39231
|
-
/* @__PURE__ */
|
|
39232
|
-
/* @__PURE__ */
|
|
39233
|
-
/* @__PURE__ */
|
|
39485
|
+
/* @__PURE__ */ jsx165("span", { className: "ods-notif-channel-dialog__spacer" }),
|
|
39486
|
+
/* @__PURE__ */ jsx165(Button, { variant: "ghost", onClick: onClose, disabled: saving, children: "Cancel" }),
|
|
39487
|
+
/* @__PURE__ */ jsx165(
|
|
39234
39488
|
Button,
|
|
39235
39489
|
{
|
|
39236
39490
|
variant: "primary",
|
|
@@ -39242,7 +39496,7 @@ function NotificationChannelDialog({
|
|
|
39242
39496
|
)
|
|
39243
39497
|
] }),
|
|
39244
39498
|
children: [
|
|
39245
|
-
/* @__PURE__ */
|
|
39499
|
+
/* @__PURE__ */ jsx165(
|
|
39246
39500
|
NotificationChannelForm,
|
|
39247
39501
|
{
|
|
39248
39502
|
value: draft,
|
|
@@ -39257,7 +39511,7 @@ function NotificationChannelDialog({
|
|
|
39257
39511
|
showAllErrors: submitted
|
|
39258
39512
|
}
|
|
39259
39513
|
),
|
|
39260
|
-
(testResult || submitError) && /* @__PURE__ */
|
|
39514
|
+
(testResult || submitError) && /* @__PURE__ */ jsx165("div", { className: "ods-notif-channel-dialog__test", children: submitError ? /* @__PURE__ */ jsx165(InlineMessage, { tone: "danger", size: "sm", live: "assertive", children: submitError }) : testResult ? /* @__PURE__ */ jsx165(InlineMessage, { tone: testResult.ok ? "success" : "danger", size: "sm", live: "polite", children: testResult.message ?? (testResult.ok ? "Test message delivered." : "Test failed \u2014 check the destination.") }) : null })
|
|
39261
39515
|
]
|
|
39262
39516
|
}
|
|
39263
39517
|
);
|
|
@@ -39266,7 +39520,7 @@ NotificationChannelDialog.displayName = "NotificationChannelDialog";
|
|
|
39266
39520
|
|
|
39267
39521
|
// src/notifications/components/NotificationChannelList/NotificationChannelList.tsx
|
|
39268
39522
|
import { AddIcon as AddIcon7, ConnectIcon } from "@octaviaflow/icons";
|
|
39269
|
-
import { jsx as
|
|
39523
|
+
import { jsx as jsx166, jsxs as jsxs158 } from "react/jsx-runtime";
|
|
39270
39524
|
function NotificationChannelList({
|
|
39271
39525
|
channels,
|
|
39272
39526
|
title = "Channels",
|
|
@@ -39283,41 +39537,41 @@ function NotificationChannelList({
|
|
|
39283
39537
|
className
|
|
39284
39538
|
}) {
|
|
39285
39539
|
const canAdd = Boolean(onAdd) && !readOnly;
|
|
39286
|
-
return /* @__PURE__ */
|
|
39287
|
-
/* @__PURE__ */
|
|
39288
|
-
/* @__PURE__ */
|
|
39540
|
+
return /* @__PURE__ */ jsxs158("section", { className: cn("ods-notif-channels", className), "aria-label": "Notification channels", children: [
|
|
39541
|
+
/* @__PURE__ */ jsxs158("header", { className: "ods-notif-channels__head", children: [
|
|
39542
|
+
/* @__PURE__ */ jsxs158("h3", { className: "ods-notif-channels__title", children: [
|
|
39289
39543
|
title,
|
|
39290
|
-
/* @__PURE__ */
|
|
39544
|
+
/* @__PURE__ */ jsx166("span", { className: "ods-notif-channels__count", children: channels.length })
|
|
39291
39545
|
] }),
|
|
39292
|
-
canAdd && channels.length > 0 && /* @__PURE__ */
|
|
39546
|
+
canAdd && channels.length > 0 && /* @__PURE__ */ jsx166(
|
|
39293
39547
|
Button,
|
|
39294
39548
|
{
|
|
39295
39549
|
size: "sm",
|
|
39296
39550
|
variant: "secondary",
|
|
39297
|
-
leftIcon: /* @__PURE__ */
|
|
39551
|
+
leftIcon: /* @__PURE__ */ jsx166(AddIcon7, { size: "sm", "aria-hidden": "true" }),
|
|
39298
39552
|
onClick: onAdd,
|
|
39299
39553
|
children: "Add channel"
|
|
39300
39554
|
}
|
|
39301
39555
|
)
|
|
39302
39556
|
] }),
|
|
39303
|
-
channels.length === 0 ? /* @__PURE__ */
|
|
39557
|
+
channels.length === 0 ? /* @__PURE__ */ jsx166(
|
|
39304
39558
|
EmptyState,
|
|
39305
39559
|
{
|
|
39306
|
-
icon: /* @__PURE__ */
|
|
39560
|
+
icon: /* @__PURE__ */ jsx166(ConnectIcon, { "aria-hidden": "true" }),
|
|
39307
39561
|
title: "No channels yet",
|
|
39308
39562
|
description: "A channel is somewhere alerts go besides the in-app inbox \u2014 a Slack channel, an email address, a webhook. Add one, then point rules at it.",
|
|
39309
|
-
action: canAdd ? /* @__PURE__ */
|
|
39563
|
+
action: canAdd ? /* @__PURE__ */ jsx166(
|
|
39310
39564
|
Button,
|
|
39311
39565
|
{
|
|
39312
39566
|
variant: "primary",
|
|
39313
|
-
leftIcon: /* @__PURE__ */
|
|
39567
|
+
leftIcon: /* @__PURE__ */ jsx166(AddIcon7, { size: "sm", "aria-hidden": "true" }),
|
|
39314
39568
|
onClick: onAdd,
|
|
39315
39569
|
children: "Add channel"
|
|
39316
39570
|
}
|
|
39317
39571
|
) : void 0
|
|
39318
39572
|
}
|
|
39319
|
-
) : /* @__PURE__ */
|
|
39320
|
-
channels.map((channel) => /* @__PURE__ */
|
|
39573
|
+
) : /* @__PURE__ */ jsxs158("div", { className: "ods-notif-channels__grid", children: [
|
|
39574
|
+
channels.map((channel) => /* @__PURE__ */ jsx166(
|
|
39321
39575
|
NotificationChannelCard,
|
|
39322
39576
|
{
|
|
39323
39577
|
channel,
|
|
@@ -39333,8 +39587,8 @@ function NotificationChannelList({
|
|
|
39333
39587
|
},
|
|
39334
39588
|
channel.id
|
|
39335
39589
|
)),
|
|
39336
|
-
canAdd && /* @__PURE__ */
|
|
39337
|
-
/* @__PURE__ */
|
|
39590
|
+
canAdd && /* @__PURE__ */ jsxs158("button", { type: "button", className: "ods-notif-channels__add", onClick: onAdd, children: [
|
|
39591
|
+
/* @__PURE__ */ jsx166("span", { className: "ods-notif-channels__add-icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx166(AddIcon7, { size: "sm" }) }),
|
|
39338
39592
|
"Add channel"
|
|
39339
39593
|
] })
|
|
39340
39594
|
] })
|
|
@@ -39344,7 +39598,7 @@ NotificationChannelList.displayName = "NotificationChannelList";
|
|
|
39344
39598
|
|
|
39345
39599
|
// src/notifications/components/NotificationPreferenceMatrix/NotificationPreferenceMatrix.tsx
|
|
39346
39600
|
import { LockedIcon as LockedIcon2 } from "@octaviaflow/icons";
|
|
39347
|
-
import { useId as
|
|
39601
|
+
import { useId as useId69, useMemo as useMemo44, useState as useState84 } from "react";
|
|
39348
39602
|
|
|
39349
39603
|
// src/notifications/engine/preferences.ts
|
|
39350
39604
|
var CRITICAL_CHANNELS = ["in_app", "email"];
|
|
@@ -39413,7 +39667,7 @@ function countEnabled(prefs, catalog, channel) {
|
|
|
39413
39667
|
}
|
|
39414
39668
|
|
|
39415
39669
|
// src/notifications/components/NotificationPreferenceMatrix/NotificationPreferenceMatrix.tsx
|
|
39416
|
-
import { jsx as
|
|
39670
|
+
import { jsx as jsx167, jsxs as jsxs159 } from "react/jsx-runtime";
|
|
39417
39671
|
var DEFAULT_COLUMNS = [{ id: "in_app" }, { id: "email" }];
|
|
39418
39672
|
var FREQUENCY_OPTIONS = [
|
|
39419
39673
|
{ value: "immediate", label: "Immediately" },
|
|
@@ -39432,7 +39686,7 @@ function NotificationPreferenceMatrix({
|
|
|
39432
39686
|
className,
|
|
39433
39687
|
id
|
|
39434
39688
|
}) {
|
|
39435
|
-
const reactId =
|
|
39689
|
+
const reactId = useId69();
|
|
39436
39690
|
const baseId = id ?? `${reactId}-prefs`;
|
|
39437
39691
|
const visible = useMemo44(
|
|
39438
39692
|
() => filterCatalog(catalog, personalAudiences(isAdmin)),
|
|
@@ -39455,13 +39709,13 @@ function NotificationPreferenceMatrix({
|
|
|
39455
39709
|
);
|
|
39456
39710
|
onChange(r.next);
|
|
39457
39711
|
};
|
|
39458
|
-
return /* @__PURE__ */
|
|
39459
|
-
showEmailFrequency && /* @__PURE__ */
|
|
39460
|
-
/* @__PURE__ */
|
|
39712
|
+
return /* @__PURE__ */ jsxs159("div", { className: cn("ods-pref-matrix", className), id: baseId, children: [
|
|
39713
|
+
showEmailFrequency && /* @__PURE__ */ jsxs159("div", { className: "ods-pref-matrix__frequency", children: [
|
|
39714
|
+
/* @__PURE__ */ jsxs159("div", { className: "ods-pref-matrix__frequency-label", children: [
|
|
39461
39715
|
"Email frequency",
|
|
39462
|
-
/* @__PURE__ */
|
|
39716
|
+
/* @__PURE__ */ jsx167("span", { className: "ods-pref-matrix__frequency-hint", children: "Critical alerts are always sent immediately." })
|
|
39463
39717
|
] }),
|
|
39464
|
-
/* @__PURE__ */
|
|
39718
|
+
/* @__PURE__ */ jsx167(
|
|
39465
39719
|
SegmentedControl,
|
|
39466
39720
|
{
|
|
39467
39721
|
"aria-label": "Email frequency",
|
|
@@ -39472,8 +39726,8 @@ function NotificationPreferenceMatrix({
|
|
|
39472
39726
|
disabled: readOnly
|
|
39473
39727
|
}
|
|
39474
39728
|
),
|
|
39475
|
-
value.emailFrequency === "daily" && /* @__PURE__ */
|
|
39476
|
-
/* @__PURE__ */
|
|
39729
|
+
value.emailFrequency === "daily" && /* @__PURE__ */ jsxs159("div", { className: "ods-pref-matrix__digest", children: [
|
|
39730
|
+
/* @__PURE__ */ jsx167(
|
|
39477
39731
|
TimePicker,
|
|
39478
39732
|
{
|
|
39479
39733
|
label: "At",
|
|
@@ -39484,7 +39738,7 @@ function NotificationPreferenceMatrix({
|
|
|
39484
39738
|
disabled: readOnly
|
|
39485
39739
|
}
|
|
39486
39740
|
),
|
|
39487
|
-
/* @__PURE__ */
|
|
39741
|
+
/* @__PURE__ */ jsx167(
|
|
39488
39742
|
TimezonePicker,
|
|
39489
39743
|
{
|
|
39490
39744
|
label: "Timezone",
|
|
@@ -39496,8 +39750,8 @@ function NotificationPreferenceMatrix({
|
|
|
39496
39750
|
)
|
|
39497
39751
|
] })
|
|
39498
39752
|
] }),
|
|
39499
|
-
notice && /* @__PURE__ */
|
|
39500
|
-
/* @__PURE__ */
|
|
39753
|
+
notice && /* @__PURE__ */ jsx167(InlineMessage, { tone: "warning", size: "sm", live: "polite", children: notice }),
|
|
39754
|
+
/* @__PURE__ */ jsxs159(
|
|
39501
39755
|
"div",
|
|
39502
39756
|
{
|
|
39503
39757
|
className: "ods-pref-matrix__table",
|
|
@@ -39505,17 +39759,17 @@ function NotificationPreferenceMatrix({
|
|
|
39505
39759
|
"aria-label": "Notification preferences",
|
|
39506
39760
|
style: { "--ods-pref-columns": channels.length },
|
|
39507
39761
|
children: [
|
|
39508
|
-
/* @__PURE__ */
|
|
39509
|
-
/* @__PURE__ */
|
|
39762
|
+
/* @__PURE__ */ jsxs159("div", { className: "ods-pref-matrix__row ods-pref-matrix__row--head", role: "row", children: [
|
|
39763
|
+
/* @__PURE__ */ jsx167("div", { className: "ods-pref-matrix__cell ods-pref-matrix__cell--label", role: "columnheader", children: "Event" }),
|
|
39510
39764
|
channels.map((col) => {
|
|
39511
39765
|
const meta2 = PERSONAL_CHANNEL_META[col.id];
|
|
39512
|
-
return /* @__PURE__ */
|
|
39766
|
+
return /* @__PURE__ */ jsxs159(
|
|
39513
39767
|
"div",
|
|
39514
39768
|
{
|
|
39515
39769
|
className: "ods-pref-matrix__cell ods-pref-matrix__cell--col",
|
|
39516
39770
|
role: "columnheader",
|
|
39517
39771
|
children: [
|
|
39518
|
-
/* @__PURE__ */
|
|
39772
|
+
/* @__PURE__ */ jsx167("span", { className: "ods-pref-matrix__col-icon", "aria-hidden": "true", children: col.icon ?? meta2.icon }),
|
|
39519
39773
|
col.label ?? meta2.label
|
|
39520
39774
|
]
|
|
39521
39775
|
},
|
|
@@ -39523,20 +39777,20 @@ function NotificationPreferenceMatrix({
|
|
|
39523
39777
|
);
|
|
39524
39778
|
})
|
|
39525
39779
|
] }),
|
|
39526
|
-
visible.map((category) => /* @__PURE__ */
|
|
39527
|
-
/* @__PURE__ */
|
|
39528
|
-
/* @__PURE__ */
|
|
39529
|
-
/* @__PURE__ */
|
|
39530
|
-
category.description && /* @__PURE__ */
|
|
39780
|
+
visible.map((category) => /* @__PURE__ */ jsxs159("div", { className: "ods-pref-matrix__group", role: "rowgroup", children: [
|
|
39781
|
+
/* @__PURE__ */ jsxs159("div", { className: "ods-pref-matrix__row ods-pref-matrix__row--group", role: "row", children: [
|
|
39782
|
+
/* @__PURE__ */ jsxs159("div", { className: "ods-pref-matrix__cell ods-pref-matrix__cell--label", role: "rowheader", children: [
|
|
39783
|
+
/* @__PURE__ */ jsx167("span", { className: "ods-pref-matrix__group-title", children: category.label }),
|
|
39784
|
+
category.description && /* @__PURE__ */ jsx167("span", { className: "ods-pref-matrix__group-desc", children: category.description })
|
|
39531
39785
|
] }),
|
|
39532
39786
|
channels.map((col) => {
|
|
39533
39787
|
const state = categoryColumnState(value, category, col.id);
|
|
39534
|
-
return /* @__PURE__ */
|
|
39788
|
+
return /* @__PURE__ */ jsx167(
|
|
39535
39789
|
"div",
|
|
39536
39790
|
{
|
|
39537
39791
|
className: "ods-pref-matrix__cell ods-pref-matrix__cell--col",
|
|
39538
39792
|
role: "cell",
|
|
39539
|
-
children: /* @__PURE__ */
|
|
39793
|
+
children: /* @__PURE__ */ jsx167(
|
|
39540
39794
|
Checkbox,
|
|
39541
39795
|
{
|
|
39542
39796
|
size: "sm",
|
|
@@ -39554,19 +39808,19 @@ function NotificationPreferenceMatrix({
|
|
|
39554
39808
|
] }),
|
|
39555
39809
|
category.events.map((event) => {
|
|
39556
39810
|
const sev = SEVERITY_META[event.severity];
|
|
39557
|
-
return /* @__PURE__ */
|
|
39558
|
-
/* @__PURE__ */
|
|
39811
|
+
return /* @__PURE__ */ jsxs159("div", { className: "ods-pref-matrix__row", role: "row", children: [
|
|
39812
|
+
/* @__PURE__ */ jsxs159(
|
|
39559
39813
|
"div",
|
|
39560
39814
|
{
|
|
39561
39815
|
className: "ods-pref-matrix__cell ods-pref-matrix__cell--label",
|
|
39562
39816
|
role: "rowheader",
|
|
39563
39817
|
children: [
|
|
39564
|
-
/* @__PURE__ */
|
|
39565
|
-
/* @__PURE__ */
|
|
39566
|
-
/* @__PURE__ */
|
|
39567
|
-
event.critical && /* @__PURE__ */
|
|
39818
|
+
/* @__PURE__ */ jsxs159("span", { className: "ods-pref-matrix__event", children: [
|
|
39819
|
+
/* @__PURE__ */ jsx167("span", { className: "ods-pref-matrix__event-label", children: event.label }),
|
|
39820
|
+
/* @__PURE__ */ jsx167(Badge, { size: "sm", variant: sev.variant, dot: true, children: sev.label }),
|
|
39821
|
+
event.critical && /* @__PURE__ */ jsx167(Badge, { size: "sm", variant: "neutral", outlined: true, children: "Critical" })
|
|
39568
39822
|
] }),
|
|
39569
|
-
event.description && /* @__PURE__ */
|
|
39823
|
+
event.description && /* @__PURE__ */ jsx167("span", { className: "ods-pref-matrix__event-desc", children: event.description })
|
|
39570
39824
|
]
|
|
39571
39825
|
}
|
|
39572
39826
|
),
|
|
@@ -39574,8 +39828,8 @@ function NotificationPreferenceMatrix({
|
|
|
39574
39828
|
const on = isPreferenceEnabled(value, event, col.id);
|
|
39575
39829
|
const locked = isPreferenceLocked(value, event, col.id);
|
|
39576
39830
|
const colLabel = typeof col.label === "string" ? col.label : PERSONAL_CHANNEL_META[col.id].label;
|
|
39577
|
-
const control = /* @__PURE__ */
|
|
39578
|
-
/* @__PURE__ */
|
|
39831
|
+
const control = /* @__PURE__ */ jsxs159("span", { className: "ods-pref-matrix__control", children: [
|
|
39832
|
+
/* @__PURE__ */ jsx167(
|
|
39579
39833
|
Switch,
|
|
39580
39834
|
{
|
|
39581
39835
|
size: "sm",
|
|
@@ -39585,14 +39839,14 @@ function NotificationPreferenceMatrix({
|
|
|
39585
39839
|
"aria-label": `${event.label} via ${colLabel}`
|
|
39586
39840
|
}
|
|
39587
39841
|
),
|
|
39588
|
-
locked && /* @__PURE__ */
|
|
39842
|
+
locked && /* @__PURE__ */ jsx167("span", { className: "ods-pref-matrix__lock", "aria-hidden": "true", children: /* @__PURE__ */ jsx167(LockedIcon2, { size: "sm" }) })
|
|
39589
39843
|
] });
|
|
39590
|
-
return /* @__PURE__ */
|
|
39844
|
+
return /* @__PURE__ */ jsx167(
|
|
39591
39845
|
"div",
|
|
39592
39846
|
{
|
|
39593
39847
|
className: "ods-pref-matrix__cell ods-pref-matrix__cell--col",
|
|
39594
39848
|
role: "cell",
|
|
39595
|
-
children: /* @__PURE__ */
|
|
39849
|
+
children: /* @__PURE__ */ jsx167(
|
|
39596
39850
|
Tooltip,
|
|
39597
39851
|
{
|
|
39598
39852
|
content: locked ? LOCK_MESSAGE : col.disabledReason ?? "",
|
|
@@ -39617,8 +39871,8 @@ NotificationPreferenceMatrix.displayName = "NotificationPreferenceMatrix";
|
|
|
39617
39871
|
|
|
39618
39872
|
// src/notifications/components/NotificationRuleEditor/NotificationRuleEditor.tsx
|
|
39619
39873
|
import { AddIcon as AddIcon8, RuleIcon } from "@octaviaflow/icons";
|
|
39620
|
-
import { useId as
|
|
39621
|
-
import { Fragment as Fragment68, jsx as
|
|
39874
|
+
import { useId as useId70, useMemo as useMemo45 } from "react";
|
|
39875
|
+
import { Fragment as Fragment68, jsx as jsx168, jsxs as jsxs160 } from "react/jsx-runtime";
|
|
39622
39876
|
var COOLDOWN_OPTIONS = [
|
|
39623
39877
|
{ value: "0", label: "No limit" },
|
|
39624
39878
|
{ value: "15", label: "Once every 15 minutes" },
|
|
@@ -39681,7 +39935,7 @@ function NotificationRuleEditor({
|
|
|
39681
39935
|
className,
|
|
39682
39936
|
id
|
|
39683
39937
|
}) {
|
|
39684
|
-
const reactId =
|
|
39938
|
+
const reactId = useId70();
|
|
39685
39939
|
const baseId = id ?? `${reactId}-rule`;
|
|
39686
39940
|
const patch = (next) => onChange({ ...value, ...next });
|
|
39687
39941
|
const ruleCatalog = useMemo45(() => filterCatalog(catalog, RULE_AUDIENCES), [catalog]);
|
|
@@ -39700,12 +39954,12 @@ function NotificationRuleEditor({
|
|
|
39700
39954
|
const setQuiet = (next) => patch({ quietHours: { ...quiet, ...next } });
|
|
39701
39955
|
const showFooter = Boolean(onSave || onCancel);
|
|
39702
39956
|
const canSave = value.events.length > 0 && value.channelIds.length > 0 && !saving && !readOnly;
|
|
39703
|
-
return /* @__PURE__ */
|
|
39704
|
-
/* @__PURE__ */
|
|
39705
|
-
/* @__PURE__ */
|
|
39706
|
-
/* @__PURE__ */
|
|
39957
|
+
return /* @__PURE__ */ jsxs160("div", { className: cn("ods-rule-editor", className), id: baseId, children: [
|
|
39958
|
+
/* @__PURE__ */ jsxs160("div", { className: "ods-rule-editor__summary", "aria-live": "polite", children: [
|
|
39959
|
+
/* @__PURE__ */ jsx168("span", { className: "ods-rule-editor__summary-icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx168(RuleIcon, { size: "sm" }) }),
|
|
39960
|
+
/* @__PURE__ */ jsx168("span", { children: sentence })
|
|
39707
39961
|
] }),
|
|
39708
|
-
/* @__PURE__ */
|
|
39962
|
+
/* @__PURE__ */ jsx168(
|
|
39709
39963
|
Input,
|
|
39710
39964
|
{
|
|
39711
39965
|
id: `${baseId}-name`,
|
|
@@ -39718,13 +39972,13 @@ function NotificationRuleEditor({
|
|
|
39718
39972
|
disabled: readOnly
|
|
39719
39973
|
}
|
|
39720
39974
|
),
|
|
39721
|
-
/* @__PURE__ */
|
|
39722
|
-
/* @__PURE__ */
|
|
39723
|
-
/* @__PURE__ */
|
|
39975
|
+
/* @__PURE__ */ jsxs160("section", { className: "ods-rule-editor__step", "aria-labelledby": `${baseId}-what`, children: [
|
|
39976
|
+
/* @__PURE__ */ jsxs160("h4", { id: `${baseId}-what`, className: "ods-rule-editor__step-title", children: [
|
|
39977
|
+
/* @__PURE__ */ jsx168("span", { className: "ods-rule-editor__step-num", children: "1" }),
|
|
39724
39978
|
"What",
|
|
39725
|
-
/* @__PURE__ */
|
|
39979
|
+
/* @__PURE__ */ jsx168("span", { className: "ods-rule-editor__step-hint", children: "Which events should trigger this rule?" })
|
|
39726
39980
|
] }),
|
|
39727
|
-
/* @__PURE__ */
|
|
39981
|
+
/* @__PURE__ */ jsx168(
|
|
39728
39982
|
EventCatalogPicker,
|
|
39729
39983
|
{
|
|
39730
39984
|
catalog: ruleCatalog,
|
|
@@ -39734,20 +39988,20 @@ function NotificationRuleEditor({
|
|
|
39734
39988
|
collapsible: true
|
|
39735
39989
|
}
|
|
39736
39990
|
),
|
|
39737
|
-
errors?.events && /* @__PURE__ */
|
|
39991
|
+
errors?.events && /* @__PURE__ */ jsx168("div", { className: "ods-rule-editor__error", children: errors.events })
|
|
39738
39992
|
] }),
|
|
39739
|
-
/* @__PURE__ */
|
|
39740
|
-
/* @__PURE__ */
|
|
39741
|
-
/* @__PURE__ */
|
|
39993
|
+
/* @__PURE__ */ jsxs160("section", { className: "ods-rule-editor__step", "aria-labelledby": `${baseId}-where`, children: [
|
|
39994
|
+
/* @__PURE__ */ jsxs160("h4", { id: `${baseId}-where`, className: "ods-rule-editor__step-title", children: [
|
|
39995
|
+
/* @__PURE__ */ jsx168("span", { className: "ods-rule-editor__step-num", children: "2" }),
|
|
39742
39996
|
"Where",
|
|
39743
|
-
/* @__PURE__ */
|
|
39997
|
+
/* @__PURE__ */ jsx168("span", { className: "ods-rule-editor__step-hint", children: "Pick one or more channels." })
|
|
39744
39998
|
] }),
|
|
39745
|
-
/* @__PURE__ */
|
|
39746
|
-
channels.length === 0 && /* @__PURE__ */
|
|
39999
|
+
/* @__PURE__ */ jsxs160("div", { className: "ods-rule-editor__channels", role: "group", "aria-label": "Channels", children: [
|
|
40000
|
+
channels.length === 0 && /* @__PURE__ */ jsx168("span", { className: "ods-rule-editor__muted", children: "No channels yet." }),
|
|
39747
40001
|
channels.map((channel) => {
|
|
39748
40002
|
const on = value.channelIds.includes(channel.id);
|
|
39749
40003
|
const meta2 = CHANNEL_TYPE_META[channel.type];
|
|
39750
|
-
return /* @__PURE__ */
|
|
40004
|
+
return /* @__PURE__ */ jsx168(
|
|
39751
40005
|
Chip,
|
|
39752
40006
|
{
|
|
39753
40007
|
size: "md",
|
|
@@ -39762,26 +40016,26 @@ function NotificationRuleEditor({
|
|
|
39762
40016
|
channel.id
|
|
39763
40017
|
);
|
|
39764
40018
|
}),
|
|
39765
|
-
onAddChannel && !readOnly && /* @__PURE__ */
|
|
40019
|
+
onAddChannel && !readOnly && /* @__PURE__ */ jsx168(
|
|
39766
40020
|
Button,
|
|
39767
40021
|
{
|
|
39768
40022
|
size: "sm",
|
|
39769
40023
|
variant: "ghost",
|
|
39770
|
-
leftIcon: /* @__PURE__ */
|
|
40024
|
+
leftIcon: /* @__PURE__ */ jsx168(AddIcon8, { size: "sm", "aria-hidden": "true" }),
|
|
39771
40025
|
onClick: onAddChannel,
|
|
39772
40026
|
children: "Add channel"
|
|
39773
40027
|
}
|
|
39774
40028
|
)
|
|
39775
40029
|
] }),
|
|
39776
|
-
errors?.channelIds && /* @__PURE__ */
|
|
40030
|
+
errors?.channelIds && /* @__PURE__ */ jsx168("div", { className: "ods-rule-editor__error", children: errors.channelIds })
|
|
39777
40031
|
] }),
|
|
39778
|
-
/* @__PURE__ */
|
|
39779
|
-
/* @__PURE__ */
|
|
39780
|
-
/* @__PURE__ */
|
|
40032
|
+
/* @__PURE__ */ jsxs160("section", { className: "ods-rule-editor__step", "aria-labelledby": `${baseId}-when`, children: [
|
|
40033
|
+
/* @__PURE__ */ jsxs160("h4", { id: `${baseId}-when`, className: "ods-rule-editor__step-title", children: [
|
|
40034
|
+
/* @__PURE__ */ jsx168("span", { className: "ods-rule-editor__step-num", children: "3" }),
|
|
39781
40035
|
"When",
|
|
39782
|
-
/* @__PURE__ */
|
|
40036
|
+
/* @__PURE__ */ jsx168("span", { className: "ods-rule-editor__step-hint", children: "How quickly should it go out?" })
|
|
39783
40037
|
] }),
|
|
39784
|
-
/* @__PURE__ */
|
|
40038
|
+
/* @__PURE__ */ jsx168(
|
|
39785
40039
|
DeliveryFrequencyControl,
|
|
39786
40040
|
{
|
|
39787
40041
|
label: null,
|
|
@@ -39791,7 +40045,7 @@ function NotificationRuleEditor({
|
|
|
39791
40045
|
}
|
|
39792
40046
|
)
|
|
39793
40047
|
] }),
|
|
39794
|
-
/* @__PURE__ */
|
|
40048
|
+
/* @__PURE__ */ jsx168(
|
|
39795
40049
|
Disclosure,
|
|
39796
40050
|
{
|
|
39797
40051
|
title: "Advanced options",
|
|
@@ -39799,9 +40053,9 @@ function NotificationRuleEditor({
|
|
|
39799
40053
|
defaultOpen: openAdvanced,
|
|
39800
40054
|
size: "sm",
|
|
39801
40055
|
className: "ods-rule-editor__advanced",
|
|
39802
|
-
children: /* @__PURE__ */
|
|
39803
|
-
/* @__PURE__ */
|
|
39804
|
-
/* @__PURE__ */
|
|
40056
|
+
children: /* @__PURE__ */ jsxs160("div", { className: "ods-rule-editor__advanced-body", children: [
|
|
40057
|
+
/* @__PURE__ */ jsx168("div", { className: "ods-rule-editor__subhead", children: "Condition" }),
|
|
40058
|
+
/* @__PURE__ */ jsx168(
|
|
39805
40059
|
AlertConditionComposer,
|
|
39806
40060
|
{
|
|
39807
40061
|
label: null,
|
|
@@ -39813,10 +40067,10 @@ function NotificationRuleEditor({
|
|
|
39813
40067
|
disabled: readOnly
|
|
39814
40068
|
}
|
|
39815
40069
|
),
|
|
39816
|
-
(scopeOptions?.flows || scopeOptions?.connectors) && /* @__PURE__ */
|
|
39817
|
-
/* @__PURE__ */
|
|
39818
|
-
/* @__PURE__ */
|
|
39819
|
-
scopeOptions.flows && /* @__PURE__ */
|
|
40070
|
+
(scopeOptions?.flows || scopeOptions?.connectors) && /* @__PURE__ */ jsxs160(Fragment68, { children: [
|
|
40071
|
+
/* @__PURE__ */ jsx168("div", { className: "ods-rule-editor__subhead", children: "Scope" }),
|
|
40072
|
+
/* @__PURE__ */ jsxs160("div", { className: "ods-rule-editor__grid", children: [
|
|
40073
|
+
scopeOptions.flows && /* @__PURE__ */ jsx168(
|
|
39820
40074
|
MultiSelect,
|
|
39821
40075
|
{
|
|
39822
40076
|
label: "Only these flows",
|
|
@@ -39828,7 +40082,7 @@ function NotificationRuleEditor({
|
|
|
39828
40082
|
disabled: readOnly
|
|
39829
40083
|
}
|
|
39830
40084
|
),
|
|
39831
|
-
scopeOptions.connectors && /* @__PURE__ */
|
|
40085
|
+
scopeOptions.connectors && /* @__PURE__ */ jsx168(
|
|
39832
40086
|
MultiSelect,
|
|
39833
40087
|
{
|
|
39834
40088
|
label: "Only these apps",
|
|
@@ -39842,9 +40096,9 @@ function NotificationRuleEditor({
|
|
|
39842
40096
|
)
|
|
39843
40097
|
] })
|
|
39844
40098
|
] }),
|
|
39845
|
-
/* @__PURE__ */
|
|
39846
|
-
/* @__PURE__ */
|
|
39847
|
-
/* @__PURE__ */
|
|
40099
|
+
/* @__PURE__ */ jsx168("div", { className: "ods-rule-editor__subhead", children: "Repeat & cooldown" }),
|
|
40100
|
+
/* @__PURE__ */ jsxs160("div", { className: "ods-rule-editor__grid", children: [
|
|
40101
|
+
/* @__PURE__ */ jsx168(
|
|
39848
40102
|
Select,
|
|
39849
40103
|
{
|
|
39850
40104
|
label: `Limit per ${subjectNoun}`,
|
|
@@ -39855,7 +40109,7 @@ function NotificationRuleEditor({
|
|
|
39855
40109
|
disabled: readOnly
|
|
39856
40110
|
}
|
|
39857
40111
|
),
|
|
39858
|
-
/* @__PURE__ */
|
|
40112
|
+
/* @__PURE__ */ jsx168(
|
|
39859
40113
|
Select,
|
|
39860
40114
|
{
|
|
39861
40115
|
label: "While it keeps failing",
|
|
@@ -39867,8 +40121,8 @@ function NotificationRuleEditor({
|
|
|
39867
40121
|
}
|
|
39868
40122
|
)
|
|
39869
40123
|
] }),
|
|
39870
|
-
/* @__PURE__ */
|
|
39871
|
-
/* @__PURE__ */
|
|
40124
|
+
/* @__PURE__ */ jsx168("div", { className: "ods-rule-editor__subhead", children: "Quiet hours" }),
|
|
40125
|
+
/* @__PURE__ */ jsx168(
|
|
39872
40126
|
Switch,
|
|
39873
40127
|
{
|
|
39874
40128
|
size: "sm",
|
|
@@ -39879,8 +40133,8 @@ function NotificationRuleEditor({
|
|
|
39879
40133
|
disabled: readOnly
|
|
39880
40134
|
}
|
|
39881
40135
|
),
|
|
39882
|
-
quiet.enabled && /* @__PURE__ */
|
|
39883
|
-
/* @__PURE__ */
|
|
40136
|
+
quiet.enabled && /* @__PURE__ */ jsxs160("div", { className: "ods-rule-editor__quiet", children: [
|
|
40137
|
+
/* @__PURE__ */ jsx168(
|
|
39884
40138
|
TimePicker,
|
|
39885
40139
|
{
|
|
39886
40140
|
label: "From",
|
|
@@ -39891,7 +40145,7 @@ function NotificationRuleEditor({
|
|
|
39891
40145
|
disabled: readOnly
|
|
39892
40146
|
}
|
|
39893
40147
|
),
|
|
39894
|
-
/* @__PURE__ */
|
|
40148
|
+
/* @__PURE__ */ jsx168(
|
|
39895
40149
|
TimePicker,
|
|
39896
40150
|
{
|
|
39897
40151
|
label: "Until",
|
|
@@ -39902,7 +40156,7 @@ function NotificationRuleEditor({
|
|
|
39902
40156
|
disabled: readOnly
|
|
39903
40157
|
}
|
|
39904
40158
|
),
|
|
39905
|
-
/* @__PURE__ */
|
|
40159
|
+
/* @__PURE__ */ jsx168(
|
|
39906
40160
|
TimezonePicker,
|
|
39907
40161
|
{
|
|
39908
40162
|
label: "Timezone",
|
|
@@ -39912,7 +40166,7 @@ function NotificationRuleEditor({
|
|
|
39912
40166
|
disabled: readOnly
|
|
39913
40167
|
}
|
|
39914
40168
|
),
|
|
39915
|
-
/* @__PURE__ */
|
|
40169
|
+
/* @__PURE__ */ jsx168(
|
|
39916
40170
|
MultiSelect,
|
|
39917
40171
|
{
|
|
39918
40172
|
label: "Days",
|
|
@@ -39926,8 +40180,8 @@ function NotificationRuleEditor({
|
|
|
39926
40180
|
}
|
|
39927
40181
|
)
|
|
39928
40182
|
] }),
|
|
39929
|
-
/* @__PURE__ */
|
|
39930
|
-
/* @__PURE__ */
|
|
40183
|
+
/* @__PURE__ */ jsx168("div", { className: "ods-rule-editor__subhead", children: "Minimum severity" }),
|
|
40184
|
+
/* @__PURE__ */ jsx168(
|
|
39931
40185
|
SegmentedControl,
|
|
39932
40186
|
{
|
|
39933
40187
|
"aria-label": "Minimum severity",
|
|
@@ -39941,8 +40195,8 @@ function NotificationRuleEditor({
|
|
|
39941
40195
|
] })
|
|
39942
40196
|
}
|
|
39943
40197
|
),
|
|
39944
|
-
showFooter && /* @__PURE__ */
|
|
39945
|
-
/* @__PURE__ */
|
|
40198
|
+
showFooter && /* @__PURE__ */ jsxs160("footer", { className: "ods-rule-editor__footer", children: [
|
|
40199
|
+
/* @__PURE__ */ jsx168(
|
|
39946
40200
|
Switch,
|
|
39947
40201
|
{
|
|
39948
40202
|
size: "sm",
|
|
@@ -39952,9 +40206,9 @@ function NotificationRuleEditor({
|
|
|
39952
40206
|
disabled: readOnly
|
|
39953
40207
|
}
|
|
39954
40208
|
),
|
|
39955
|
-
/* @__PURE__ */
|
|
39956
|
-
onCancel && /* @__PURE__ */
|
|
39957
|
-
onSave && /* @__PURE__ */
|
|
40209
|
+
/* @__PURE__ */ jsx168("span", { className: "ods-rule-editor__spacer" }),
|
|
40210
|
+
onCancel && /* @__PURE__ */ jsx168(Button, { variant: "ghost", onClick: onCancel, disabled: saving, children: "Cancel" }),
|
|
40211
|
+
onSave && /* @__PURE__ */ jsx168(Button, { variant: "primary", onClick: onSave, loading: saving, disabled: !canSave, children: value.id ? "Save rule" : "Create rule" })
|
|
39958
40212
|
] })
|
|
39959
40213
|
] });
|
|
39960
40214
|
}
|
|
@@ -39962,7 +40216,7 @@ NotificationRuleEditor.displayName = "NotificationRuleEditor";
|
|
|
39962
40216
|
|
|
39963
40217
|
// src/notifications/components/NotificationRuleList/NotificationRuleList.tsx
|
|
39964
40218
|
import { AddIcon as AddIcon9, CopyIcon as CopyIcon6, EditIcon as EditIcon2, RuleIcon as RuleIcon2, TrashCanIcon as TrashCanIcon4 } from "@octaviaflow/icons";
|
|
39965
|
-
import { Fragment as Fragment69, jsx as
|
|
40219
|
+
import { Fragment as Fragment69, jsx as jsx169, jsxs as jsxs161 } from "react/jsx-runtime";
|
|
39966
40220
|
function NotificationRuleList({
|
|
39967
40221
|
rules,
|
|
39968
40222
|
catalog,
|
|
@@ -39980,61 +40234,61 @@ function NotificationRuleList({
|
|
|
39980
40234
|
className
|
|
39981
40235
|
}) {
|
|
39982
40236
|
const canCreate = Boolean(onCreate) && !readOnly;
|
|
39983
|
-
return /* @__PURE__ */
|
|
39984
|
-
/* @__PURE__ */
|
|
39985
|
-
/* @__PURE__ */
|
|
40237
|
+
return /* @__PURE__ */ jsxs161("section", { className: cn("ods-rule-list", className), "aria-label": "Notification rules", children: [
|
|
40238
|
+
/* @__PURE__ */ jsxs161("header", { className: "ods-rule-list__head", children: [
|
|
40239
|
+
/* @__PURE__ */ jsxs161("h3", { className: "ods-rule-list__title", children: [
|
|
39986
40240
|
title,
|
|
39987
|
-
/* @__PURE__ */
|
|
40241
|
+
/* @__PURE__ */ jsx169("span", { className: "ods-rule-list__count", children: rules.length })
|
|
39988
40242
|
] }),
|
|
39989
|
-
canCreate && rules.length > 0 && /* @__PURE__ */
|
|
40243
|
+
canCreate && rules.length > 0 && /* @__PURE__ */ jsx169(
|
|
39990
40244
|
Button,
|
|
39991
40245
|
{
|
|
39992
40246
|
size: "sm",
|
|
39993
40247
|
variant: "secondary",
|
|
39994
|
-
leftIcon: /* @__PURE__ */
|
|
40248
|
+
leftIcon: /* @__PURE__ */ jsx169(AddIcon9, { size: "sm", "aria-hidden": "true" }),
|
|
39995
40249
|
onClick: onCreate,
|
|
39996
40250
|
children: "New rule"
|
|
39997
40251
|
}
|
|
39998
40252
|
)
|
|
39999
40253
|
] }),
|
|
40000
|
-
rules.length === 0 ? /* @__PURE__ */
|
|
40001
|
-
/* @__PURE__ */
|
|
40254
|
+
rules.length === 0 ? /* @__PURE__ */ jsxs161(Fragment69, { children: [
|
|
40255
|
+
/* @__PURE__ */ jsx169(
|
|
40002
40256
|
EmptyState,
|
|
40003
40257
|
{
|
|
40004
|
-
icon: /* @__PURE__ */
|
|
40258
|
+
icon: /* @__PURE__ */ jsx169(RuleIcon2, { "aria-hidden": "true" }),
|
|
40005
40259
|
title: "No rules yet",
|
|
40006
40260
|
description: "Rules route events to shared channels \u2014 a Slack channel, an ops mailbox, a webhook \u2014 with thresholds and timing you choose. Everyone still gets their personal inbox and email without a rule.",
|
|
40007
|
-
action: canCreate ? /* @__PURE__ */
|
|
40261
|
+
action: canCreate ? /* @__PURE__ */ jsx169(
|
|
40008
40262
|
Button,
|
|
40009
40263
|
{
|
|
40010
40264
|
variant: "primary",
|
|
40011
|
-
leftIcon: /* @__PURE__ */
|
|
40265
|
+
leftIcon: /* @__PURE__ */ jsx169(AddIcon9, { size: "sm", "aria-hidden": "true" }),
|
|
40012
40266
|
onClick: onCreate,
|
|
40013
40267
|
children: "New rule"
|
|
40014
40268
|
}
|
|
40015
40269
|
) : void 0
|
|
40016
40270
|
}
|
|
40017
40271
|
),
|
|
40018
|
-
starters && starters.length > 0 && !readOnly && onStarter && /* @__PURE__ */
|
|
40272
|
+
starters && starters.length > 0 && !readOnly && onStarter && /* @__PURE__ */ jsx169("div", { className: "ods-rule-list__starters", children: starters.map((s) => /* @__PURE__ */ jsxs161(
|
|
40019
40273
|
"button",
|
|
40020
40274
|
{
|
|
40021
40275
|
type: "button",
|
|
40022
40276
|
className: "ods-rule-list__starter",
|
|
40023
40277
|
onClick: () => onStarter(s),
|
|
40024
40278
|
children: [
|
|
40025
|
-
/* @__PURE__ */
|
|
40026
|
-
s.description && /* @__PURE__ */
|
|
40279
|
+
/* @__PURE__ */ jsx169("span", { className: "ods-rule-list__starter-title", children: s.title }),
|
|
40280
|
+
s.description && /* @__PURE__ */ jsx169("span", { className: "ods-rule-list__starter-desc", children: s.description })
|
|
40027
40281
|
]
|
|
40028
40282
|
},
|
|
40029
40283
|
s.id
|
|
40030
40284
|
)) })
|
|
40031
|
-
] }) : /* @__PURE__ */
|
|
40285
|
+
] }) : /* @__PURE__ */ jsx169("ul", { className: "ods-rule-list__rows", children: rules.map((rule) => {
|
|
40032
40286
|
const last = formatRelativeTime(
|
|
40033
40287
|
rule.lastFiredAt ? new Date(rule.lastFiredAt) : null,
|
|
40034
40288
|
now2
|
|
40035
40289
|
);
|
|
40036
40290
|
const ruleChannels = rule.channelIds.map((id) => channels.find((c) => c.id === id)).filter((c) => Boolean(c));
|
|
40037
|
-
return /* @__PURE__ */
|
|
40291
|
+
return /* @__PURE__ */ jsxs161(
|
|
40038
40292
|
"li",
|
|
40039
40293
|
{
|
|
40040
40294
|
className: cn(
|
|
@@ -40042,7 +40296,7 @@ function NotificationRuleList({
|
|
|
40042
40296
|
!rule.enabled && "ods-rule-list__row--disabled"
|
|
40043
40297
|
),
|
|
40044
40298
|
children: [
|
|
40045
|
-
/* @__PURE__ */
|
|
40299
|
+
/* @__PURE__ */ jsx169("div", { className: "ods-rule-list__switch", children: /* @__PURE__ */ jsx169(
|
|
40046
40300
|
Switch,
|
|
40047
40301
|
{
|
|
40048
40302
|
size: "sm",
|
|
@@ -40052,43 +40306,43 @@ function NotificationRuleList({
|
|
|
40052
40306
|
"aria-label": `${rule.enabled ? "Disable" : "Enable"} ${rule.name || "rule"}`
|
|
40053
40307
|
}
|
|
40054
40308
|
) }),
|
|
40055
|
-
/* @__PURE__ */
|
|
40056
|
-
/* @__PURE__ */
|
|
40057
|
-
/* @__PURE__ */
|
|
40058
|
-
/* @__PURE__ */
|
|
40059
|
-
ruleChannels.map((c) => /* @__PURE__ */
|
|
40060
|
-
/* @__PURE__ */
|
|
40309
|
+
/* @__PURE__ */ jsxs161("div", { className: "ods-rule-list__body", children: [
|
|
40310
|
+
/* @__PURE__ */ jsx169("div", { className: "ods-rule-list__name", children: rule.name || "Untitled rule" }),
|
|
40311
|
+
/* @__PURE__ */ jsx169("div", { className: "ods-rule-list__sentence", children: describeRule(rule, catalog, channels) }),
|
|
40312
|
+
/* @__PURE__ */ jsxs161("div", { className: "ods-rule-list__meta", children: [
|
|
40313
|
+
ruleChannels.map((c) => /* @__PURE__ */ jsx169(Chip, { size: "sm", icon: CHANNEL_TYPE_META[c.type].icon, children: c.label }, c.id)),
|
|
40314
|
+
/* @__PURE__ */ jsx169("span", { children: last ? `Last fired ${last}` : "Never fired" })
|
|
40061
40315
|
] })
|
|
40062
40316
|
] }),
|
|
40063
|
-
!readOnly && /* @__PURE__ */
|
|
40064
|
-
onEdit && /* @__PURE__ */
|
|
40317
|
+
!readOnly && /* @__PURE__ */ jsxs161("div", { className: "ods-rule-list__actions", children: [
|
|
40318
|
+
onEdit && /* @__PURE__ */ jsx169(
|
|
40065
40319
|
Button,
|
|
40066
40320
|
{
|
|
40067
40321
|
size: "sm",
|
|
40068
40322
|
variant: "ghost",
|
|
40069
40323
|
"aria-label": `Edit ${rule.name || "rule"}`,
|
|
40070
40324
|
onClick: () => onEdit(rule),
|
|
40071
|
-
children: /* @__PURE__ */
|
|
40325
|
+
children: /* @__PURE__ */ jsx169(EditIcon2, { size: "sm", "aria-hidden": "true" })
|
|
40072
40326
|
}
|
|
40073
40327
|
),
|
|
40074
|
-
onDuplicate && /* @__PURE__ */
|
|
40328
|
+
onDuplicate && /* @__PURE__ */ jsx169(
|
|
40075
40329
|
Button,
|
|
40076
40330
|
{
|
|
40077
40331
|
size: "sm",
|
|
40078
40332
|
variant: "ghost",
|
|
40079
40333
|
"aria-label": `Duplicate ${rule.name || "rule"}`,
|
|
40080
40334
|
onClick: () => onDuplicate(rule),
|
|
40081
|
-
children: /* @__PURE__ */
|
|
40335
|
+
children: /* @__PURE__ */ jsx169(CopyIcon6, { size: "sm", "aria-hidden": "true" })
|
|
40082
40336
|
}
|
|
40083
40337
|
),
|
|
40084
|
-
onDelete && /* @__PURE__ */
|
|
40338
|
+
onDelete && /* @__PURE__ */ jsx169(
|
|
40085
40339
|
Button,
|
|
40086
40340
|
{
|
|
40087
40341
|
size: "sm",
|
|
40088
40342
|
variant: "ghost",
|
|
40089
40343
|
"aria-label": `Delete ${rule.name || "rule"}`,
|
|
40090
40344
|
onClick: () => onDelete(rule),
|
|
40091
|
-
children: /* @__PURE__ */
|
|
40345
|
+
children: /* @__PURE__ */ jsx169(TrashCanIcon4, { size: "sm", "aria-hidden": "true" })
|
|
40092
40346
|
}
|
|
40093
40347
|
)
|
|
40094
40348
|
] })
|
|
@@ -40188,6 +40442,7 @@ export {
|
|
|
40188
40442
|
EmptyState,
|
|
40189
40443
|
EventCatalogPicker,
|
|
40190
40444
|
ExecutionConsole,
|
|
40445
|
+
ExpressionField,
|
|
40191
40446
|
FeatureCard,
|
|
40192
40447
|
FieldPicker,
|
|
40193
40448
|
FileBrowser,
|
|
@@ -40395,6 +40650,7 @@ export {
|
|
|
40395
40650
|
googleChatAdapter,
|
|
40396
40651
|
gradient,
|
|
40397
40652
|
groupInboxByDay,
|
|
40653
|
+
insideCallArguments,
|
|
40398
40654
|
isArchived,
|
|
40399
40655
|
isChannelDraftComplete,
|
|
40400
40656
|
isPreferenceEnabled,
|
|
@@ -40412,6 +40668,7 @@ export {
|
|
|
40412
40668
|
sanitizeImageUrl,
|
|
40413
40669
|
setCategoryPreference,
|
|
40414
40670
|
setPreference,
|
|
40671
|
+
shortReferenceLabel,
|
|
40415
40672
|
slackAdapter,
|
|
40416
40673
|
suggestChannelLabel,
|
|
40417
40674
|
teamsAdapter,
|