@octaviaflow/core 3.1.0-beta.107 → 3.1.0-beta.109

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/index.cjs CHANGED
@@ -5887,14 +5887,32 @@ var import_react_aria3 = require("react-aria");
5887
5887
  var import_jsx_runtime18 = require("react/jsx-runtime");
5888
5888
  function BreadcrumbItem({ item, isCurrent }) {
5889
5889
  const ref = (0, import_react37.useRef)(null);
5890
+ const interactive = !isCurrent && (!!item.href || !!item.onClick);
5890
5891
  const { itemProps } = (0, import_react_aria3.useBreadcrumbItem)(
5891
- { children: item.label, isCurrent, elementType: item.href ? "a" : "span" },
5892
+ {
5893
+ children: item.label,
5894
+ isCurrent,
5895
+ elementType: item.href ? "a" : item.onClick && !isCurrent ? "button" : "span"
5896
+ },
5892
5897
  ref
5893
5898
  );
5894
5899
  const content = /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [
5895
5900
  item.icon && /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "ods-breadcrumb__icon", children: item.icon }),
5896
5901
  /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { children: item.label })
5897
5902
  ] });
5903
+ if (item.onClick && !item.href && interactive) {
5904
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
5905
+ "button",
5906
+ {
5907
+ ...itemProps,
5908
+ ref,
5909
+ type: "button",
5910
+ onClick: item.onClick,
5911
+ className: cn("ods-breadcrumb__link", "ods-breadcrumb__link--button"),
5912
+ children: content
5913
+ }
5914
+ );
5915
+ }
5898
5916
  if (item.href && !isCurrent) {
5899
5917
  return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
5900
5918
  "a",
@@ -41339,6 +41357,8 @@ ToolCard.displayName = "ToolCard";
41339
41357
 
41340
41358
  // src/components/ExpressionField/ExpressionField.tsx
41341
41359
  var import_react188 = require("react");
41360
+ var import_react_dom23 = require("react-dom");
41361
+ var import_icons68 = require("@octaviaflow/icons");
41342
41362
 
41343
41363
  // src/components/ExpressionField/parseExpression.ts
41344
41364
  var CALL_NAME_SOURCE = "(?:[A-Z_][A-Z0-9_]*|user\\.[A-Za-z_][A-Za-z0-9_]*)";
@@ -41558,6 +41578,16 @@ function insideCallArguments(textBeforeCaret) {
41558
41578
  }
41559
41579
  return depth > 0;
41560
41580
  }
41581
+ function anchorRect(el) {
41582
+ const box = el.getBoundingClientRect();
41583
+ const width = Math.max(300, box.width);
41584
+ return {
41585
+ top: box.bottom + 4,
41586
+ // Keep it on screen when the chip sits near the right edge.
41587
+ left: Math.max(8, Math.min(box.left, window.innerWidth - width - 8)),
41588
+ width
41589
+ };
41590
+ }
41561
41591
  function argSummary(arg, nameOf, depth = 2) {
41562
41592
  const trimmed = arg.trim();
41563
41593
  const call = parseCall(trimmed);
@@ -41746,17 +41776,7 @@ function ExpressionField({
41746
41776
  const openEditor = (0, import_react188.useCallback)((chip) => {
41747
41777
  const raw = chip.getAttribute("data-value") ?? "";
41748
41778
  if (!parseCall(raw)) return;
41749
- const box = chip.getBoundingClientRect();
41750
- const host = fieldRef.current?.getBoundingClientRect();
41751
- setEditing({
41752
- el: chip,
41753
- raw,
41754
- rect: {
41755
- top: box.bottom - (host?.top ?? 0) + 4,
41756
- left: Math.max(0, box.left - (host?.left ?? 0)),
41757
- width: Math.max(300, box.width)
41758
- }
41759
- });
41779
+ setEditing({ el: chip, raw, rect: anchorRect(chip) });
41760
41780
  }, []);
41761
41781
  const applyEditor = (0, import_react188.useCallback)(
41762
41782
  (raw) => {
@@ -41982,156 +42002,173 @@ function CallEditor({
41982
42002
  setDraft((d) => replaceArgument(d, [...path, index], bare));
41983
42003
  if (kind === "function" || parseCall(bare)) setPath((pth) => [...pth, index]);
41984
42004
  };
41985
- return /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)(
41986
- "div",
41987
- {
41988
- ref: panelRef,
41989
- className: "ods-expression-field__editor",
41990
- style: { top: rect.top, left: rect.left, width: rect.width },
41991
- role: "dialog",
41992
- "aria-label": `Edit ${crumbs[0]?.label ?? "function"}`,
41993
- children: [
41994
- /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)("div", { className: "ods-expression-field__editor-head", children: [
41995
- /* @__PURE__ */ (0, import_jsx_runtime174.jsx)("nav", { className: "ods-expression-field__editor-crumbs", "aria-label": "Nested functions", children: crumbs.map((crumb, i) => /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)("span", { children: [
41996
- i > 0 && /* @__PURE__ */ (0, import_jsx_runtime174.jsx)("span", { "aria-hidden": "true", children: " \u203A " }),
42005
+ const [pos, setPos] = (0, import_react188.useState)(rect);
42006
+ (0, import_react188.useEffect)(() => {
42007
+ const follow = () => setPos(anchorRect(anchor));
42008
+ window.addEventListener("scroll", follow, true);
42009
+ window.addEventListener("resize", follow);
42010
+ return () => {
42011
+ window.removeEventListener("scroll", follow, true);
42012
+ window.removeEventListener("resize", follow);
42013
+ };
42014
+ }, [anchor]);
42015
+ if (typeof document === "undefined") return null;
42016
+ return (0, import_react_dom23.createPortal)(
42017
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)(
42018
+ "div",
42019
+ {
42020
+ ref: panelRef,
42021
+ "data-ods-floating": "",
42022
+ className: "ods-expression-field__editor",
42023
+ style: { top: pos.top, left: pos.left, width: pos.width },
42024
+ role: "dialog",
42025
+ "aria-label": `Edit ${crumbs[0]?.label ?? "function"}`,
42026
+ children: [
42027
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)("div", { className: "ods-expression-field__editor-head", children: [
41997
42028
  /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
41998
- "button",
42029
+ Breadcrumb,
41999
42030
  {
42000
- type: "button",
42001
- disabled: i === crumbs.length - 1,
42002
- onClick: () => setPath(crumb.path),
42003
- children: crumb.label
42031
+ className: "ods-expression-field__editor-crumbs",
42032
+ items: crumbs.map((crumb) => ({
42033
+ label: crumb.label,
42034
+ onClick: () => setPath(crumb.path)
42035
+ }))
42004
42036
  }
42005
- )
42006
- ] }, crumb.path.join(".") || "root")) }),
42007
- /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
42008
- "button",
42037
+ ),
42038
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(Button, { variant: "ghost", size: "sm", onClick: () => setRawMode((r) => !r), children: rawMode ? "Back to fields" : "Edit as text" })
42039
+ ] }),
42040
+ rawMode ? /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
42041
+ "textarea",
42009
42042
  {
42010
- type: "button",
42011
- className: "ods-expression-field__editor-link",
42012
- onClick: () => setRawMode((r) => !r),
42013
- children: rawMode ? "Back to fields" : "Edit as text"
42043
+ className: "ods-expression-field__editor-raw",
42044
+ value: draft,
42045
+ rows: 3,
42046
+ "aria-label": "Expression",
42047
+ onChange: (e) => setDraft(e.target.value)
42014
42048
  }
42015
- )
42016
- ] }),
42017
- rawMode ? /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
42018
- "textarea",
42019
- {
42020
- className: "ods-expression-field__editor-raw",
42021
- value: draft,
42022
- rows: 3,
42023
- "aria-label": "Expression",
42024
- onChange: (e) => setDraft(e.target.value)
42025
- }
42026
- ) : /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)("div", { className: "ods-expression-field__editor-rows", children: [
42027
- args.map((arg, index) => {
42028
- const kind = argumentKind(arg);
42029
- const rowLabel = names[index] ?? `argument ${index + 1}`;
42030
- const nested = kind === "call" ? parseCall(arg) : void 0;
42031
- return (
42032
- // eslint-disable-next-line react/no-array-index-key
42033
- /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)("div", { className: "ods-expression-field__editor-row", children: [
42034
- /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)("span", { className: "ods-expression-field__editor-row-head", children: [
42035
- /* @__PURE__ */ (0, import_jsx_runtime174.jsx)("span", { id: `arg-${index}-label`, children: rowLabel }),
42036
- /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
42037
- "button",
42038
- {
42039
- type: "button",
42040
- className: "ods-expression-field__editor-remove",
42041
- "aria-label": `Remove ${rowLabel}`,
42042
- title: "Remove this argument",
42043
- onClick: () => removeArg(index),
42044
- children: "\u2715"
42045
- }
42046
- )
42047
- ] }),
42048
- nested ? /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)(
42049
- "div",
42050
- {
42051
- className: "ods-expression-field__editor-nested",
42052
- onDragOver: (e) => {
42053
- if (e.dataTransfer.types.includes("application/x-fx-insert")) e.preventDefault();
42054
- },
42055
- onDrop: dropInto(index),
42056
- children: [
42057
- /* @__PURE__ */ (0, import_jsx_runtime174.jsx)("code", { children: argSummary(arg, nameOf) }),
42058
- /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)("span", { children: [
42059
- /* @__PURE__ */ (0, import_jsx_runtime174.jsx)("button", { type: "button", onClick: () => setPath([...path, index]), children: "Open" }),
42060
- /* @__PURE__ */ (0, import_jsx_runtime174.jsx)("button", { type: "button", onClick: () => setArg(index, ""), "aria-label": `Clear ${rowLabel}`, children: "Clear" })
42061
- ] })
42062
- ]
42063
- }
42064
- ) : kind === "reference" ? (
42065
- // A reference is a value from somewhere else — named, never
42066
- // its raw `ods://…` path, here as much as in the field.
42067
- /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)(
42049
+ ) : /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)("div", { className: "ods-expression-field__editor-rows", children: [
42050
+ args.map((arg, index) => {
42051
+ const kind = argumentKind(arg);
42052
+ const rowLabel = names[index] ?? `argument ${index + 1}`;
42053
+ const nested = kind === "call" ? parseCall(arg) : void 0;
42054
+ return (
42055
+ // eslint-disable-next-line react/no-array-index-key
42056
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)("div", { className: "ods-expression-field__editor-row", children: [
42057
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)("span", { className: "ods-expression-field__editor-row-head", children: [
42058
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsx)("span", { className: "ods-expression-field__editor-row-name", id: `arg-${index}-label`, children: rowLabel }),
42059
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
42060
+ Button,
42061
+ {
42062
+ variant: "icon",
42063
+ size: "sm",
42064
+ "aria-label": `Remove ${rowLabel}`,
42065
+ title: "Remove this argument",
42066
+ onClick: () => removeArg(index),
42067
+ children: /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(import_icons68.CloseIcon, { size: "sm" })
42068
+ }
42069
+ )
42070
+ ] }),
42071
+ nested ? /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)(
42068
42072
  "div",
42069
42073
  {
42070
- className: "ods-expression-field__editor-ref",
42074
+ className: "ods-expression-field__editor-nested",
42071
42075
  onDragOver: (e) => {
42072
42076
  if (e.dataTransfer.types.includes("application/x-fx-insert")) e.preventDefault();
42073
42077
  },
42074
42078
  onDrop: dropInto(index),
42075
42079
  children: [
42076
- /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
42077
- "span",
42078
- {
42079
- className: "ods-expression-field__pill",
42080
- title: arg,
42081
- "aria-labelledby": `arg-${index}-label`,
42082
- children: labelFor(arg.startsWith("ods://") ? `{{${arg}}}` : arg)
42083
- }
42084
- ),
42085
- /* @__PURE__ */ (0, import_jsx_runtime174.jsx)("button", { type: "button", onClick: () => setArg(index, ""), "aria-label": `Clear ${rowLabel}`, children: "Clear" })
42080
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsx)("code", { children: argSummary(arg, nameOf) }),
42081
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)("span", { children: [
42082
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(Button, { variant: "secondary", size: "sm", onClick: () => setPath([...path, index]), children: "Open" }),
42083
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
42084
+ Button,
42085
+ {
42086
+ variant: "ghost",
42087
+ size: "sm",
42088
+ "aria-label": `Clear ${rowLabel}`,
42089
+ onClick: () => setArg(index, ""),
42090
+ children: "Clear"
42091
+ }
42092
+ )
42093
+ ] })
42086
42094
  ]
42087
42095
  }
42096
+ ) : kind === "reference" ? (
42097
+ // A reference is a value from somewhere else — named, never
42098
+ // its raw `ods://…` path, here as much as in the field.
42099
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)(
42100
+ "div",
42101
+ {
42102
+ className: "ods-expression-field__editor-ref",
42103
+ onDragOver: (e) => {
42104
+ if (e.dataTransfer.types.includes("application/x-fx-insert")) e.preventDefault();
42105
+ },
42106
+ onDrop: dropInto(index),
42107
+ children: [
42108
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
42109
+ "span",
42110
+ {
42111
+ className: "ods-expression-field__pill",
42112
+ title: arg,
42113
+ "aria-labelledby": `arg-${index}-label`,
42114
+ children: labelFor(arg.startsWith("ods://") ? `{{${arg}}}` : arg)
42115
+ }
42116
+ ),
42117
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
42118
+ Button,
42119
+ {
42120
+ variant: "ghost",
42121
+ size: "sm",
42122
+ "aria-label": `Clear ${rowLabel}`,
42123
+ onClick: () => setArg(index, ""),
42124
+ children: "Clear"
42125
+ }
42126
+ )
42127
+ ]
42128
+ }
42129
+ )
42130
+ ) : /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
42131
+ "input",
42132
+ {
42133
+ "aria-labelledby": `arg-${index}-label`,
42134
+ value: arg,
42135
+ placeholder: 'a value, "text", or drag one in',
42136
+ "data-kind": kind,
42137
+ onChange: (e) => setArg(index, e.target.value),
42138
+ onDragOver: (e) => {
42139
+ if (e.dataTransfer.types.includes("application/x-fx-insert")) e.preventDefault();
42140
+ },
42141
+ onDrop: dropInto(index)
42142
+ }
42088
42143
  )
42089
- ) : /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
42090
- "input",
42091
- {
42092
- "aria-labelledby": `arg-${index}-label`,
42093
- value: arg,
42094
- placeholder: 'a value, "text", or drag one in',
42095
- "data-kind": kind,
42096
- onChange: (e) => setArg(index, e.target.value),
42097
- onDragOver: (e) => {
42098
- if (e.dataTransfer.types.includes("application/x-fx-insert")) e.preventDefault();
42099
- },
42100
- onDrop: dropInto(index)
42101
- }
42102
- )
42103
- ] }, index)
42104
- );
42105
- }),
42106
- /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
42107
- "button",
42108
- {
42109
- type: "button",
42110
- className: "ods-expression-field__editor-add",
42111
- onClick: () => setDraft((d) => {
42112
- const at = callAt(d, path);
42113
- if (!at) return d;
42114
- const next = [...at.args, '""'];
42115
- return path.length === 0 ? formatCall(at.name, next) : replaceArgument(d, path, `${at.name}(${next.join(", ")})`);
42116
- }),
42117
- children: "+ Add argument"
42118
- }
42119
- )
42120
- ] }),
42121
- /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)("div", { className: "ods-expression-field__editor-foot", children: [
42122
- /* @__PURE__ */ (0, import_jsx_runtime174.jsx)("button", { type: "button", onClick: onCancel, children: "Cancel" }),
42123
- /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
42124
- "button",
42125
- {
42126
- type: "button",
42127
- className: "ods-expression-field__editor-primary",
42128
- onClick: () => onApply(draft),
42129
- children: "Apply"
42130
- }
42131
- )
42132
- ] })
42133
- ]
42134
- }
42144
+ ] }, index)
42145
+ );
42146
+ }),
42147
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
42148
+ Button,
42149
+ {
42150
+ variant: "ghost",
42151
+ size: "sm",
42152
+ fullWidth: true,
42153
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(import_icons68.AddIcon, { size: "sm" }),
42154
+ onClick: () => setDraft((d) => {
42155
+ const at = callAt(d, path);
42156
+ if (!at) return d;
42157
+ const next = [...at.args, '""'];
42158
+ return path.length === 0 ? formatCall(at.name, next) : replaceArgument(d, path, `${at.name}(${next.join(", ")})`);
42159
+ }),
42160
+ children: "Add argument"
42161
+ }
42162
+ )
42163
+ ] }),
42164
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)("div", { className: "ods-expression-field__editor-foot", children: [
42165
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(Button, { variant: "secondary", size: "sm", onClick: onCancel, children: "Cancel" }),
42166
+ /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(Button, { variant: "primary", size: "sm", onClick: () => onApply(draft), children: "Apply" })
42167
+ ] })
42168
+ ]
42169
+ }
42170
+ ),
42171
+ document.body
42135
42172
  );
42136
42173
  }
42137
42174
 
@@ -42219,14 +42256,14 @@ function TopBar({
42219
42256
  // src/components/TraceStep/TraceStep.tsx
42220
42257
  var import_framer_motion38 = require("framer-motion");
42221
42258
  var import_react189 = require("react");
42222
- var import_icons68 = require("@octaviaflow/icons");
42259
+ var import_icons69 = require("@octaviaflow/icons");
42223
42260
  var import_jsx_runtime176 = require("react/jsx-runtime");
42224
42261
  var DEFAULT_KIND_GLYPH = {
42225
- thought: /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(import_icons68.IdeaIcon, { size: "xs" }),
42226
- tool: /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(import_icons68.BuildToolIcon, { size: "xs" }),
42227
- input: /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(import_icons68.ConnectionReceiveIcon, { size: "xs" }),
42228
- output: /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(import_icons68.ConnectionSendIcon, { size: "xs" }),
42229
- error: /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(import_icons68.WarningAltIcon, { size: "xs" })
42262
+ thought: /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(import_icons69.IdeaIcon, { size: "xs" }),
42263
+ tool: /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(import_icons69.BuildToolIcon, { size: "xs" }),
42264
+ input: /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(import_icons69.ConnectionReceiveIcon, { size: "xs" }),
42265
+ output: /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(import_icons69.ConnectionSendIcon, { size: "xs" }),
42266
+ error: /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(import_icons69.WarningAltIcon, { size: "xs" })
42230
42267
  };
42231
42268
  var FALLBACK_GLYPH = DEFAULT_KIND_GLYPH.thought;
42232
42269
  var TraceStep = (0, import_react189.forwardRef)(
@@ -42290,7 +42327,7 @@ var TraceStep = (0, import_react189.forwardRef)(
42290
42327
  initial: disableAnimation ? false : { scale: 0.6, opacity: 0 },
42291
42328
  animate: { scale: 1, opacity: 1 },
42292
42329
  transition: { duration: 0.2, ease: [0.16, 1, 0.3, 1] },
42293
- children: status === "running" ? /* @__PURE__ */ (0, import_jsx_runtime176.jsx)("span", { className: "ods-trace-step__spin", children: /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(import_icons68.CircleDashIcon, { size: "xs" }) }) : resolvedGlyph
42330
+ children: status === "running" ? /* @__PURE__ */ (0, import_jsx_runtime176.jsx)("span", { className: "ods-trace-step__spin", children: /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(import_icons69.CircleDashIcon, { size: "xs" }) }) : resolvedGlyph
42294
42331
  }
42295
42332
  ),
42296
42333
  !isLast && /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(
@@ -42333,7 +42370,7 @@ var TraceStep = (0, import_react189.forwardRef)(
42333
42370
  title: tool,
42334
42371
  "aria-label": `Tool: ${tool}`,
42335
42372
  children: [
42336
- /* @__PURE__ */ (0, import_jsx_runtime176.jsx)("span", { className: "ods-trace-step__tool-icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(import_icons68.BuildToolIcon, { size: "xs" }) }),
42373
+ /* @__PURE__ */ (0, import_jsx_runtime176.jsx)("span", { className: "ods-trace-step__tool-icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(import_icons69.BuildToolIcon, { size: "xs" }) }),
42337
42374
  tool
42338
42375
  ]
42339
42376
  }
@@ -42366,7 +42403,7 @@ var TraceStep = (0, import_react189.forwardRef)(
42366
42403
  "aria-hidden": "true",
42367
42404
  animate: { rotate: open ? 180 : 0 },
42368
42405
  transition: { duration: 0.18, ease: [0.16, 1, 0.3, 1] },
42369
- children: /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(import_icons68.CaretDownIcon, { size: "xs" })
42406
+ children: /* @__PURE__ */ (0, import_jsx_runtime176.jsx)(import_icons69.CaretDownIcon, { size: "xs" })
42370
42407
  }
42371
42408
  )
42372
42409
  ]
@@ -44267,7 +44304,7 @@ function cursorFor(corner) {
44267
44304
  }
44268
44305
 
44269
44306
  // src/workflow/components/kinds/BaseNode.tsx
44270
- var import_icons69 = require("@octaviaflow/icons");
44307
+ var import_icons70 = require("@octaviaflow/icons");
44271
44308
  var import_react199 = require("react");
44272
44309
  var import_jsx_runtime183 = require("react/jsx-runtime");
44273
44310
  function BaseNode({
@@ -44334,7 +44371,7 @@ function BaseNode({
44334
44371
  "aria-label": "Delete node",
44335
44372
  "data-flow-no-drag": "true",
44336
44373
  title: "Delete node",
44337
- children: /* @__PURE__ */ (0, import_jsx_runtime183.jsx)(import_icons69.TrashCanIcon, { size: 16, "aria-hidden": true })
44374
+ children: /* @__PURE__ */ (0, import_jsx_runtime183.jsx)(import_icons70.TrashCanIcon, { size: 16, "aria-hidden": true })
44338
44375
  }
44339
44376
  )
44340
44377
  ] }),
@@ -46253,7 +46290,7 @@ function DefaultEmptyState() {
46253
46290
  }
46254
46291
 
46255
46292
  // src/components/WorkflowHeader/WorkflowHeader.tsx
46256
- var import_icons70 = require("@octaviaflow/icons");
46293
+ var import_icons71 = require("@octaviaflow/icons");
46257
46294
 
46258
46295
  // src/hooks/useWorkflowRuntime.ts
46259
46296
  var import_react202 = require("react");
@@ -46344,7 +46381,7 @@ function WorkflowHeader({
46344
46381
  onClick: onBack,
46345
46382
  "aria-label": `Back to ${typeof parentLabel === "string" ? parentLabel : "previous"}`,
46346
46383
  children: [
46347
- /* @__PURE__ */ (0, import_jsx_runtime187.jsx)(import_icons70.ChevronLeftIcon, { size: "sm" }),
46384
+ /* @__PURE__ */ (0, import_jsx_runtime187.jsx)(import_icons71.ChevronLeftIcon, { size: "sm" }),
46348
46385
  /* @__PURE__ */ (0, import_jsx_runtime187.jsx)("span", { className: "ods-workflow-header__back-label", children: parentLabel }),
46349
46386
  /* @__PURE__ */ (0, import_jsx_runtime187.jsx)("span", { className: "ods-workflow-header__back-separator", "aria-hidden": "true", children: "/" })
46350
46387
  ]
@@ -46383,14 +46420,14 @@ function WorkflowHeader({
46383
46420
  title: saveState === "error" ? saveError ?? void 0 : void 0,
46384
46421
  children: [
46385
46422
  saveState === "saving" ? /* @__PURE__ */ (0, import_jsx_runtime187.jsx)("span", { className: "ods-workflow-header__save-spinner", "aria-hidden": "true" }) : saveState === "error" ? /* @__PURE__ */ (0, import_jsx_runtime187.jsx)(
46386
- import_icons70.WarningAltIcon,
46423
+ import_icons71.WarningAltIcon,
46387
46424
  {
46388
46425
  size: "sm",
46389
46426
  className: "ods-workflow-header__save-icon",
46390
46427
  "aria-hidden": "true"
46391
46428
  }
46392
46429
  ) : /* @__PURE__ */ (0, import_jsx_runtime187.jsx)(
46393
- import_icons70.CheckmarkIcon,
46430
+ import_icons71.CheckmarkIcon,
46394
46431
  {
46395
46432
  size: "sm",
46396
46433
  className: "ods-workflow-header__save-icon",
@@ -46431,7 +46468,7 @@ function WorkflowHeader({
46431
46468
  size: "sm",
46432
46469
  pressed: !!isConsoleOpen,
46433
46470
  "aria-label": isConsoleOpen ? "Hide execution console" : "Show execution console",
46434
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime187.jsx)(import_icons70.TerminalIcon, { size: "sm" }),
46471
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime187.jsx)(import_icons71.TerminalIcon, { size: "sm" }),
46435
46472
  onClick: onToggleConsole,
46436
46473
  children: "Console"
46437
46474
  }
@@ -46443,7 +46480,7 @@ function WorkflowHeader({
46443
46480
  variant: "ghost",
46444
46481
  size: "sm",
46445
46482
  "aria-label": runtime ? `Stop execution (running ${runtime})` : "Stop execution",
46446
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime187.jsx)(import_icons70.StopFilledAltIcon, { size: "sm", className: "ods-workflow-header__stop-glyph" }),
46483
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime187.jsx)(import_icons71.StopFilledAltIcon, { size: "sm", className: "ods-workflow-header__stop-glyph" }),
46447
46484
  onClick: onStop,
46448
46485
  children: /* @__PURE__ */ (0, import_jsx_runtime187.jsxs)("span", { className: "ods-workflow-header__stop-label", children: [
46449
46486
  /* @__PURE__ */ (0, import_jsx_runtime187.jsx)("span", { children: "Stop" }),
@@ -46459,7 +46496,7 @@ function WorkflowHeader({
46459
46496
  variant: "primary",
46460
46497
  size: "sm",
46461
46498
  "aria-label": "Run workflow",
46462
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime187.jsx)(import_icons70.PlayFilledAltIcon, { size: "sm" }),
46499
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime187.jsx)(import_icons71.PlayFilledAltIcon, { size: "sm" }),
46463
46500
  onClick: onRun,
46464
46501
  children: "Run"
46465
46502
  }
@@ -46471,7 +46508,7 @@ function WorkflowHeader({
46471
46508
  align: "end",
46472
46509
  triggerClassName: "ods-workflow-header__menu-trigger",
46473
46510
  ...menuProps,
46474
- trigger: menuTrigger ?? /* @__PURE__ */ (0, import_jsx_runtime187.jsx)("span", { "aria-hidden": "true", className: "ods-workflow-header__menu-icon", children: /* @__PURE__ */ (0, import_jsx_runtime187.jsx)(import_icons70.OverflowMenuVerticalIcon, { size: "sm" }) }),
46511
+ trigger: menuTrigger ?? /* @__PURE__ */ (0, import_jsx_runtime187.jsx)("span", { "aria-hidden": "true", className: "ods-workflow-header__menu-icon", children: /* @__PURE__ */ (0, import_jsx_runtime187.jsx)(import_icons71.OverflowMenuVerticalIcon, { size: "sm" }) }),
46475
46512
  items: menuItems
46476
46513
  }
46477
46514
  ))
@@ -46481,7 +46518,7 @@ function WorkflowHeader({
46481
46518
  }
46482
46519
 
46483
46520
  // src/components/WorkflowHeader/WorkflowHeaderExpanded.tsx
46484
- var import_icons71 = require("@octaviaflow/icons");
46521
+ var import_icons72 = require("@octaviaflow/icons");
46485
46522
  var import_jsx_runtime188 = require("react/jsx-runtime");
46486
46523
  function WorkflowHeaderExpanded({
46487
46524
  name,
@@ -46526,7 +46563,7 @@ function WorkflowHeaderExpanded({
46526
46563
  onClick: onBack,
46527
46564
  "aria-label": `Back to ${typeof parentLabel === "string" ? parentLabel : "previous"}`,
46528
46565
  children: [
46529
- /* @__PURE__ */ (0, import_jsx_runtime188.jsx)(import_icons71.ChevronLeftIcon, { size: "sm" }),
46566
+ /* @__PURE__ */ (0, import_jsx_runtime188.jsx)(import_icons72.ChevronLeftIcon, { size: "sm" }),
46530
46567
  /* @__PURE__ */ (0, import_jsx_runtime188.jsx)("span", { children: parentLabel }),
46531
46568
  /* @__PURE__ */ (0, import_jsx_runtime188.jsx)("span", { "aria-hidden": "true", className: "ods-workflow-header-expanded__back-sep", children: "/" })
46532
46569
  ]
@@ -46565,7 +46602,7 @@ function WorkflowHeaderExpanded({
46565
46602
  size: "sm",
46566
46603
  pressed: !!isConsoleOpen,
46567
46604
  "aria-label": isConsoleOpen ? "Hide execution console" : "Show execution console",
46568
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime188.jsx)(import_icons71.TerminalIcon, { size: "sm" }),
46605
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime188.jsx)(import_icons72.TerminalIcon, { size: "sm" }),
46569
46606
  onClick: onToggleConsole,
46570
46607
  children: "Console"
46571
46608
  }
@@ -46578,7 +46615,7 @@ function WorkflowHeaderExpanded({
46578
46615
  size: "sm",
46579
46616
  "aria-label": runtime ? `Stop execution (running ${runtime})` : "Stop execution",
46580
46617
  leftIcon: /* @__PURE__ */ (0, import_jsx_runtime188.jsx)(
46581
- import_icons71.StopFilledAltIcon,
46618
+ import_icons72.StopFilledAltIcon,
46582
46619
  {
46583
46620
  size: "sm",
46584
46621
  className: "ods-workflow-header-expanded__stop-glyph"
@@ -46599,7 +46636,7 @@ function WorkflowHeaderExpanded({
46599
46636
  variant: "primary",
46600
46637
  size: "sm",
46601
46638
  "aria-label": "Run workflow",
46602
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime188.jsx)(import_icons71.PlayFilledAltIcon, { size: "sm" }),
46639
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime188.jsx)(import_icons72.PlayFilledAltIcon, { size: "sm" }),
46603
46640
  onClick: onRun,
46604
46641
  children: "Run"
46605
46642
  }
@@ -46615,7 +46652,7 @@ function WorkflowHeaderExpanded({
46615
46652
  {
46616
46653
  variant: "ghost",
46617
46654
  size: "sm",
46618
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime188.jsx)(import_icons71.OverflowMenuVerticalIcon, { size: "sm" })
46655
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime188.jsx)(import_icons72.OverflowMenuVerticalIcon, { size: "sm" })
46619
46656
  }
46620
46657
  ),
46621
46658
  items: menuItems
@@ -48112,60 +48149,60 @@ function DeliveryFrequencyControl({
48112
48149
  DeliveryFrequencyControl.displayName = "DeliveryFrequencyControl";
48113
48150
 
48114
48151
  // src/notifications/components/EventCatalogPicker/EventCatalogPicker.tsx
48115
- var import_icons73 = require("@octaviaflow/icons");
48152
+ var import_icons74 = require("@octaviaflow/icons");
48116
48153
  var import_react212 = require("react");
48117
48154
 
48118
48155
  // src/notifications/components/meta.tsx
48119
- var import_icons72 = require("@octaviaflow/icons");
48156
+ var import_icons73 = require("@octaviaflow/icons");
48120
48157
  var import_jsx_runtime192 = require("react/jsx-runtime");
48121
48158
  var CHANNEL_TYPE_META = {
48122
48159
  in_app: {
48123
48160
  label: "In-app",
48124
48161
  hint: "The bell in the top bar. Always on.",
48125
48162
  connected: false,
48126
- icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons72.NotificationIcon, { size: "sm", "aria-hidden": "true" })
48163
+ icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons73.NotificationIcon, { size: "sm", "aria-hidden": "true" })
48127
48164
  },
48128
48165
  email: {
48129
48166
  label: "Email",
48130
48167
  hint: "One or more addresses.",
48131
48168
  connected: false,
48132
- icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons72.EmailIcon, { size: "sm", "aria-hidden": "true" })
48169
+ icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons73.EmailIcon, { size: "sm", "aria-hidden": "true" })
48133
48170
  },
48134
48171
  slack: {
48135
48172
  label: "Slack",
48136
48173
  hint: "A channel in a connected workspace.",
48137
48174
  connected: true,
48138
- icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons72.LogoSlackIcon, { size: "sm", "aria-hidden": "true" })
48175
+ icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons73.LogoSlackIcon, { size: "sm", "aria-hidden": "true" })
48139
48176
  },
48140
48177
  teams: {
48141
48178
  label: "Microsoft Teams",
48142
48179
  hint: "A channel in a connected team.",
48143
48180
  connected: true,
48144
- icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons72.ChatOperationalIcon, { size: "sm", "aria-hidden": "true" })
48181
+ icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons73.ChatOperationalIcon, { size: "sm", "aria-hidden": "true" })
48145
48182
  },
48146
48183
  google_chat: {
48147
48184
  label: "Google Chat",
48148
48185
  hint: "A space in a connected account.",
48149
48186
  connected: true,
48150
- icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons72.ChatIcon, { size: "sm", "aria-hidden": "true" })
48187
+ icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons73.ChatIcon, { size: "sm", "aria-hidden": "true" })
48151
48188
  },
48152
48189
  whatsapp: {
48153
48190
  label: "WhatsApp",
48154
48191
  hint: "Template messages to a phone number.",
48155
48192
  connected: false,
48156
- icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons72.ChatLaunchIcon, { size: "sm", "aria-hidden": "true" })
48193
+ icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons73.ChatLaunchIcon, { size: "sm", "aria-hidden": "true" })
48157
48194
  },
48158
48195
  webhook: {
48159
48196
  label: "Webhook",
48160
48197
  hint: "Signed JSON to a URL you own.",
48161
48198
  connected: false,
48162
- icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons72.WebhookIcon, { size: "sm", "aria-hidden": "true" })
48199
+ icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons73.WebhookIcon, { size: "sm", "aria-hidden": "true" })
48163
48200
  }
48164
48201
  };
48165
48202
  var PERSONAL_CHANNEL_META = {
48166
- in_app: { label: "In-app", icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons72.NotificationIcon, { size: "sm", "aria-hidden": "true" }) },
48167
- email: { label: "Email", icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons72.EmailIcon, { size: "sm", "aria-hidden": "true" }) },
48168
- slack_dm: { label: "Slack DM", icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons72.LogoSlackIcon, { size: "sm", "aria-hidden": "true" }) }
48203
+ in_app: { label: "In-app", icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons73.NotificationIcon, { size: "sm", "aria-hidden": "true" }) },
48204
+ email: { label: "Email", icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons73.EmailIcon, { size: "sm", "aria-hidden": "true" }) },
48205
+ slack_dm: { label: "Slack DM", icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons73.LogoSlackIcon, { size: "sm", "aria-hidden": "true" }) }
48169
48206
  };
48170
48207
  var CHANNEL_STATUS_META = {
48171
48208
  verified: { label: "Verified", variant: "success" },
@@ -48177,17 +48214,17 @@ var SEVERITY_META = {
48177
48214
  info: {
48178
48215
  label: "Info",
48179
48216
  variant: "info",
48180
- icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons72.InformationFilledIcon, { size: "sm", "aria-hidden": "true" })
48217
+ icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons73.InformationFilledIcon, { size: "sm", "aria-hidden": "true" })
48181
48218
  },
48182
48219
  warning: {
48183
48220
  label: "Warning",
48184
48221
  variant: "warning",
48185
- icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons72.WarningFilledIcon, { size: "sm", "aria-hidden": "true" })
48222
+ icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons73.WarningFilledIcon, { size: "sm", "aria-hidden": "true" })
48186
48223
  },
48187
48224
  error: {
48188
48225
  label: "Error",
48189
48226
  variant: "error",
48190
- icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons72.ErrorFilledIcon, { size: "sm", "aria-hidden": "true" })
48227
+ icon: /* @__PURE__ */ (0, import_jsx_runtime192.jsx)(import_icons73.ErrorFilledIcon, { size: "sm", "aria-hidden": "true" })
48191
48228
  }
48192
48229
  };
48193
48230
 
@@ -48262,7 +48299,7 @@ function EventCatalogPicker({
48262
48299
  type: "search",
48263
48300
  "aria-label": "Search events",
48264
48301
  placeholder: "Search events",
48265
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime193.jsx)(import_icons73.SearchIcon, { size: "sm", "aria-hidden": "true" }),
48302
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime193.jsx)(import_icons74.SearchIcon, { size: "sm", "aria-hidden": "true" }),
48266
48303
  value: query,
48267
48304
  onChange: (e) => setQuery(e.target.value),
48268
48305
  clearable: true,
@@ -48354,7 +48391,7 @@ function EventCatalogPicker({
48354
48391
  EventCatalogPicker.displayName = "EventCatalogPicker";
48355
48392
 
48356
48393
  // src/notifications/components/NotificationBell/NotificationBell.tsx
48357
- var import_icons76 = require("@octaviaflow/icons");
48394
+ var import_icons77 = require("@octaviaflow/icons");
48358
48395
  var import_react214 = require("react");
48359
48396
 
48360
48397
  // src/notifications/engine/inbox.ts
@@ -48425,7 +48462,7 @@ function groupInboxByDay(items, now2 = Date.now()) {
48425
48462
  }
48426
48463
 
48427
48464
  // src/notifications/components/NotificationDetailDialog/NotificationDetailDialog.tsx
48428
- var import_icons74 = require("@octaviaflow/icons");
48465
+ var import_icons75 = require("@octaviaflow/icons");
48429
48466
  var import_jsx_runtime194 = require("react/jsx-runtime");
48430
48467
  function NotificationDetailDialog({
48431
48468
  item,
@@ -48456,7 +48493,7 @@ function NotificationDetailDialog({
48456
48493
  Button,
48457
48494
  {
48458
48495
  variant: "ghost",
48459
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime194.jsx)(import_icons74.ArchiveIcon, { size: "sm", "aria-hidden": "true" }),
48496
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime194.jsx)(import_icons75.ArchiveIcon, { size: "sm", "aria-hidden": "true" }),
48460
48497
  onClick: () => {
48461
48498
  onArchive(item);
48462
48499
  onClose();
@@ -48481,7 +48518,7 @@ function NotificationDetailDialog({
48481
48518
  },
48482
48519
  children: [
48483
48520
  resolved.label ?? "Open",
48484
- /* @__PURE__ */ (0, import_jsx_runtime194.jsx)(import_icons74.LaunchIcon, { size: "sm", "aria-hidden": "true" })
48521
+ /* @__PURE__ */ (0, import_jsx_runtime194.jsx)(import_icons75.LaunchIcon, { size: "sm", "aria-hidden": "true" })
48485
48522
  ]
48486
48523
  }
48487
48524
  ) })
@@ -48509,7 +48546,7 @@ function NotificationDetailDialog({
48509
48546
  NotificationDetailDialog.displayName = "NotificationDetailDialog";
48510
48547
 
48511
48548
  // src/notifications/components/NotificationInbox/NotificationInbox.tsx
48512
- var import_icons75 = require("@octaviaflow/icons");
48549
+ var import_icons76 = require("@octaviaflow/icons");
48513
48550
  var import_react213 = require("react");
48514
48551
  var import_jsx_runtime195 = require("react/jsx-runtime");
48515
48552
  var FILTER_OPTIONS = [
@@ -48624,7 +48661,7 @@ function NotificationInbox({
48624
48661
  variant: "ghost",
48625
48662
  "aria-label": "Mark as read",
48626
48663
  onClick: () => onMarkRead([item.id]),
48627
- children: /* @__PURE__ */ (0, import_jsx_runtime195.jsx)(import_icons75.CheckmarkIcon, { size: "sm", "aria-hidden": "true" })
48664
+ children: /* @__PURE__ */ (0, import_jsx_runtime195.jsx)(import_icons76.CheckmarkIcon, { size: "sm", "aria-hidden": "true" })
48628
48665
  }
48629
48666
  ),
48630
48667
  onArchive && /* @__PURE__ */ (0, import_jsx_runtime195.jsx)(
@@ -48634,7 +48671,7 @@ function NotificationInbox({
48634
48671
  variant: "ghost",
48635
48672
  "aria-label": "Archive",
48636
48673
  onClick: () => onArchive([item.id]),
48637
- children: /* @__PURE__ */ (0, import_jsx_runtime195.jsx)(import_icons75.ArchiveIcon, { size: "sm", "aria-hidden": "true" })
48674
+ children: /* @__PURE__ */ (0, import_jsx_runtime195.jsx)(import_icons76.ArchiveIcon, { size: "sm", "aria-hidden": "true" })
48638
48675
  }
48639
48676
  )
48640
48677
  ] })
@@ -48662,7 +48699,7 @@ function NotificationInbox({
48662
48699
  EmptyState,
48663
48700
  {
48664
48701
  size: compact ? "sm" : "md",
48665
- icon: /* @__PURE__ */ (0, import_jsx_runtime195.jsx)(import_icons75.NotificationOffIcon, { "aria-hidden": "true" }),
48702
+ icon: /* @__PURE__ */ (0, import_jsx_runtime195.jsx)(import_icons76.NotificationOffIcon, { "aria-hidden": "true" }),
48666
48703
  title: emptyTitle ?? (activeFilter === "unread" ? "You're all caught up" : activeFilter === "archived" ? "Nothing archived" : "No notifications yet"),
48667
48704
  description: emptyDescription ?? (activeFilter === "all" ? "Run failures, apps that need re-authentication and account activity will show up here." : void 0)
48668
48705
  }
@@ -48790,7 +48827,7 @@ function NotificationBell({
48790
48827
  size: "md",
48791
48828
  className: "ods-notif-bell__trigger",
48792
48829
  "aria-label": hasUnread ? `${label}, ${countLabel} unread` : label,
48793
- children: /* @__PURE__ */ (0, import_jsx_runtime196.jsx)(import_icons76.NotificationIcon, { size: "sm", "aria-hidden": "true" })
48830
+ children: /* @__PURE__ */ (0, import_jsx_runtime196.jsx)(import_icons77.NotificationIcon, { size: "sm", "aria-hidden": "true" })
48794
48831
  }
48795
48832
  ),
48796
48833
  hasUnread && /* @__PURE__ */ (0, import_jsx_runtime196.jsx)("span", { className: "ods-notif-bell__count", "aria-hidden": "true", children: countLabel })
@@ -48814,7 +48851,7 @@ function NotificationBell({
48814
48851
  NotificationBell.displayName = "NotificationBell";
48815
48852
 
48816
48853
  // src/notifications/components/NotificationChannelCard/NotificationChannelCard.tsx
48817
- var import_icons77 = require("@octaviaflow/icons");
48854
+ var import_icons78 = require("@octaviaflow/icons");
48818
48855
  var import_jsx_runtime197 = require("react/jsx-runtime");
48819
48856
  function NotificationChannelCard({
48820
48857
  channel,
@@ -48871,7 +48908,7 @@ function NotificationChannelCard({
48871
48908
  {
48872
48909
  size: "sm",
48873
48910
  variant: "secondary",
48874
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(import_icons77.SendIcon, { size: "sm", "aria-hidden": "true" }),
48911
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(import_icons78.SendIcon, { size: "sm", "aria-hidden": "true" }),
48875
48912
  loading: testing,
48876
48913
  loadingText: "Sending\u2026",
48877
48914
  disabled: !channel.enabled,
@@ -48887,7 +48924,7 @@ function NotificationChannelCard({
48887
48924
  variant: "ghost",
48888
48925
  "aria-label": `Edit ${channel.label}`,
48889
48926
  onClick: () => onEdit(channel),
48890
- children: /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(import_icons77.EditIcon, { size: "sm", "aria-hidden": "true" })
48927
+ children: /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(import_icons78.EditIcon, { size: "sm", "aria-hidden": "true" })
48891
48928
  }
48892
48929
  ),
48893
48930
  onRemove && /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(
@@ -48898,7 +48935,7 @@ function NotificationChannelCard({
48898
48935
  "aria-label": `Remove ${channel.label}`,
48899
48936
  className: "ods-notif-channel__remove",
48900
48937
  onClick: () => onRemove(channel),
48901
- children: /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(import_icons77.TrashCanIcon, { size: "sm", "aria-hidden": "true" })
48938
+ children: /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(import_icons78.TrashCanIcon, { size: "sm", "aria-hidden": "true" })
48902
48939
  }
48903
48940
  ),
48904
48941
  onToggle && /* @__PURE__ */ (0, import_jsx_runtime197.jsx)(
@@ -48918,7 +48955,7 @@ function NotificationChannelCard({
48918
48955
  NotificationChannelCard.displayName = "NotificationChannelCard";
48919
48956
 
48920
48957
  // src/notifications/components/NotificationChannelDialog/NotificationChannelDialog.tsx
48921
- var import_icons79 = require("@octaviaflow/icons");
48958
+ var import_icons80 = require("@octaviaflow/icons");
48922
48959
  var import_react216 = require("react");
48923
48960
 
48924
48961
  // src/notifications/engine/channels.ts
@@ -49024,7 +49061,7 @@ function draftFromChannel(channel, fallbackType = "slack") {
49024
49061
  }
49025
49062
 
49026
49063
  // src/notifications/components/NotificationChannelForm/NotificationChannelForm.tsx
49027
- var import_icons78 = require("@octaviaflow/icons");
49064
+ var import_icons79 = require("@octaviaflow/icons");
49028
49065
  var import_react215 = require("react");
49029
49066
  var import_jsx_runtime198 = require("react/jsx-runtime");
49030
49067
  var DEFAULT_TYPES = [
@@ -49140,7 +49177,7 @@ function NotificationChannelForm({
49140
49177
  /* @__PURE__ */ (0, import_jsx_runtime198.jsx)("span", { className: "ods-notif-channel-form__type-label", children: meta2.label }),
49141
49178
  /* @__PURE__ */ (0, import_jsx_runtime198.jsx)("span", { className: "ods-notif-channel-form__type-hint", children: meta2.connected && hasApp ? "Connected" : meta2.hint })
49142
49179
  ] }),
49143
- selected && /* @__PURE__ */ (0, import_jsx_runtime198.jsx)("span", { className: "ods-notif-channel-form__type-check", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime198.jsx)(import_icons78.CheckmarkFilledIcon, { size: "sm" }) })
49180
+ selected && /* @__PURE__ */ (0, import_jsx_runtime198.jsx)("span", { className: "ods-notif-channel-form__type-check", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime198.jsx)(import_icons79.CheckmarkFilledIcon, { size: "sm" }) })
49144
49181
  ]
49145
49182
  },
49146
49183
  type
@@ -49156,7 +49193,7 @@ function NotificationChannelForm({
49156
49193
  {
49157
49194
  size: "sm",
49158
49195
  variant: "primary",
49159
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime198.jsx)(import_icons78.LaunchIcon, { size: "sm", "aria-hidden": "true" }),
49196
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime198.jsx)(import_icons79.LaunchIcon, { size: "sm", "aria-hidden": "true" }),
49160
49197
  onClick: () => onConnectNew(value.type),
49161
49198
  children: [
49162
49199
  "Connect ",
@@ -49190,7 +49227,7 @@ function NotificationChannelForm({
49190
49227
  {
49191
49228
  size,
49192
49229
  variant: "ghost",
49193
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime198.jsx)(import_icons78.AddIcon, { size: "sm", "aria-hidden": "true" }),
49230
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime198.jsx)(import_icons79.AddIcon, { size: "sm", "aria-hidden": "true" }),
49194
49231
  onClick: () => onConnectNew(value.type),
49195
49232
  className: "ods-notif-channel-form__connect",
49196
49233
  children: "Connect new"
@@ -49341,7 +49378,7 @@ function NotificationChannelForm({
49341
49378
  )
49342
49379
  ] }),
49343
49380
  showSummary && summary && /* @__PURE__ */ (0, import_jsx_runtime198.jsxs)("div", { className: "ods-notif-channel-form__summary", "aria-live": "polite", children: [
49344
- /* @__PURE__ */ (0, import_jsx_runtime198.jsx)(import_icons78.CheckmarkFilledIcon, { size: "sm", "aria-hidden": "true" }),
49381
+ /* @__PURE__ */ (0, import_jsx_runtime198.jsx)(import_icons79.CheckmarkFilledIcon, { size: "sm", "aria-hidden": "true" }),
49345
49382
  /* @__PURE__ */ (0, import_jsx_runtime198.jsx)("span", { children: summary })
49346
49383
  ] })
49347
49384
  ] });
@@ -49435,7 +49472,7 @@ function NotificationChannelDialog({
49435
49472
  Button,
49436
49473
  {
49437
49474
  variant: "secondary",
49438
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime199.jsx)(import_icons79.SendIcon, { size: "sm", "aria-hidden": "true" }),
49475
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime199.jsx)(import_icons80.SendIcon, { size: "sm", "aria-hidden": "true" }),
49439
49476
  loading: testing,
49440
49477
  loadingText: "Sending\u2026",
49441
49478
  disabled: !complete || saving,
@@ -49480,7 +49517,7 @@ function NotificationChannelDialog({
49480
49517
  NotificationChannelDialog.displayName = "NotificationChannelDialog";
49481
49518
 
49482
49519
  // src/notifications/components/NotificationChannelList/NotificationChannelList.tsx
49483
- var import_icons80 = require("@octaviaflow/icons");
49520
+ var import_icons81 = require("@octaviaflow/icons");
49484
49521
  var import_jsx_runtime200 = require("react/jsx-runtime");
49485
49522
  function NotificationChannelList({
49486
49523
  channels,
@@ -49509,7 +49546,7 @@ function NotificationChannelList({
49509
49546
  {
49510
49547
  size: "sm",
49511
49548
  variant: "secondary",
49512
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(import_icons80.AddIcon, { size: "sm", "aria-hidden": "true" }),
49549
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(import_icons81.AddIcon, { size: "sm", "aria-hidden": "true" }),
49513
49550
  onClick: onAdd,
49514
49551
  children: "Add channel"
49515
49552
  }
@@ -49518,14 +49555,14 @@ function NotificationChannelList({
49518
49555
  channels.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(
49519
49556
  EmptyState,
49520
49557
  {
49521
- icon: /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(import_icons80.ConnectIcon, { "aria-hidden": "true" }),
49558
+ icon: /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(import_icons81.ConnectIcon, { "aria-hidden": "true" }),
49522
49559
  title: "No channels yet",
49523
49560
  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.",
49524
49561
  action: canAdd ? /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(
49525
49562
  Button,
49526
49563
  {
49527
49564
  variant: "primary",
49528
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(import_icons80.AddIcon, { size: "sm", "aria-hidden": "true" }),
49565
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(import_icons81.AddIcon, { size: "sm", "aria-hidden": "true" }),
49529
49566
  onClick: onAdd,
49530
49567
  children: "Add channel"
49531
49568
  }
@@ -49549,7 +49586,7 @@ function NotificationChannelList({
49549
49586
  channel.id
49550
49587
  )),
49551
49588
  canAdd && /* @__PURE__ */ (0, import_jsx_runtime200.jsxs)("button", { type: "button", className: "ods-notif-channels__add", onClick: onAdd, children: [
49552
- /* @__PURE__ */ (0, import_jsx_runtime200.jsx)("span", { className: "ods-notif-channels__add-icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(import_icons80.AddIcon, { size: "sm" }) }),
49589
+ /* @__PURE__ */ (0, import_jsx_runtime200.jsx)("span", { className: "ods-notif-channels__add-icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime200.jsx)(import_icons81.AddIcon, { size: "sm" }) }),
49553
49590
  "Add channel"
49554
49591
  ] })
49555
49592
  ] })
@@ -49558,7 +49595,7 @@ function NotificationChannelList({
49558
49595
  NotificationChannelList.displayName = "NotificationChannelList";
49559
49596
 
49560
49597
  // src/notifications/components/NotificationPreferenceMatrix/NotificationPreferenceMatrix.tsx
49561
- var import_icons81 = require("@octaviaflow/icons");
49598
+ var import_icons82 = require("@octaviaflow/icons");
49562
49599
  var import_react217 = require("react");
49563
49600
 
49564
49601
  // src/notifications/engine/preferences.ts
@@ -49800,7 +49837,7 @@ function NotificationPreferenceMatrix({
49800
49837
  "aria-label": `${event.label} via ${colLabel}`
49801
49838
  }
49802
49839
  ),
49803
- locked && /* @__PURE__ */ (0, import_jsx_runtime201.jsx)("span", { className: "ods-pref-matrix__lock", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime201.jsx)(import_icons81.LockedIcon, { size: "sm" }) })
49840
+ locked && /* @__PURE__ */ (0, import_jsx_runtime201.jsx)("span", { className: "ods-pref-matrix__lock", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime201.jsx)(import_icons82.LockedIcon, { size: "sm" }) })
49804
49841
  ] });
49805
49842
  return /* @__PURE__ */ (0, import_jsx_runtime201.jsx)(
49806
49843
  "div",
@@ -49831,7 +49868,7 @@ function NotificationPreferenceMatrix({
49831
49868
  NotificationPreferenceMatrix.displayName = "NotificationPreferenceMatrix";
49832
49869
 
49833
49870
  // src/notifications/components/NotificationRuleEditor/NotificationRuleEditor.tsx
49834
- var import_icons82 = require("@octaviaflow/icons");
49871
+ var import_icons83 = require("@octaviaflow/icons");
49835
49872
  var import_react218 = require("react");
49836
49873
  var import_jsx_runtime202 = require("react/jsx-runtime");
49837
49874
  var COOLDOWN_OPTIONS = [
@@ -49917,7 +49954,7 @@ function NotificationRuleEditor({
49917
49954
  const canSave = value.events.length > 0 && value.channelIds.length > 0 && !saving && !readOnly;
49918
49955
  return /* @__PURE__ */ (0, import_jsx_runtime202.jsxs)("div", { className: cn("ods-rule-editor", className), id: baseId, children: [
49919
49956
  /* @__PURE__ */ (0, import_jsx_runtime202.jsxs)("div", { className: "ods-rule-editor__summary", "aria-live": "polite", children: [
49920
- /* @__PURE__ */ (0, import_jsx_runtime202.jsx)("span", { className: "ods-rule-editor__summary-icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime202.jsx)(import_icons82.RuleIcon, { size: "sm" }) }),
49957
+ /* @__PURE__ */ (0, import_jsx_runtime202.jsx)("span", { className: "ods-rule-editor__summary-icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime202.jsx)(import_icons83.RuleIcon, { size: "sm" }) }),
49921
49958
  /* @__PURE__ */ (0, import_jsx_runtime202.jsx)("span", { children: sentence })
49922
49959
  ] }),
49923
49960
  /* @__PURE__ */ (0, import_jsx_runtime202.jsx)(
@@ -49982,7 +50019,7 @@ function NotificationRuleEditor({
49982
50019
  {
49983
50020
  size: "sm",
49984
50021
  variant: "ghost",
49985
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime202.jsx)(import_icons82.AddIcon, { size: "sm", "aria-hidden": "true" }),
50022
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime202.jsx)(import_icons83.AddIcon, { size: "sm", "aria-hidden": "true" }),
49986
50023
  onClick: onAddChannel,
49987
50024
  children: "Add channel"
49988
50025
  }
@@ -50176,7 +50213,7 @@ function NotificationRuleEditor({
50176
50213
  NotificationRuleEditor.displayName = "NotificationRuleEditor";
50177
50214
 
50178
50215
  // src/notifications/components/NotificationRuleList/NotificationRuleList.tsx
50179
- var import_icons83 = require("@octaviaflow/icons");
50216
+ var import_icons84 = require("@octaviaflow/icons");
50180
50217
  var import_jsx_runtime203 = require("react/jsx-runtime");
50181
50218
  function NotificationRuleList({
50182
50219
  rules,
@@ -50206,7 +50243,7 @@ function NotificationRuleList({
50206
50243
  {
50207
50244
  size: "sm",
50208
50245
  variant: "secondary",
50209
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(import_icons83.AddIcon, { size: "sm", "aria-hidden": "true" }),
50246
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(import_icons84.AddIcon, { size: "sm", "aria-hidden": "true" }),
50210
50247
  onClick: onCreate,
50211
50248
  children: "New rule"
50212
50249
  }
@@ -50216,14 +50253,14 @@ function NotificationRuleList({
50216
50253
  /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(
50217
50254
  EmptyState,
50218
50255
  {
50219
- icon: /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(import_icons83.RuleIcon, { "aria-hidden": "true" }),
50256
+ icon: /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(import_icons84.RuleIcon, { "aria-hidden": "true" }),
50220
50257
  title: "No rules yet",
50221
50258
  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.",
50222
50259
  action: canCreate ? /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(
50223
50260
  Button,
50224
50261
  {
50225
50262
  variant: "primary",
50226
- leftIcon: /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(import_icons83.AddIcon, { size: "sm", "aria-hidden": "true" }),
50263
+ leftIcon: /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(import_icons84.AddIcon, { size: "sm", "aria-hidden": "true" }),
50227
50264
  onClick: onCreate,
50228
50265
  children: "New rule"
50229
50266
  }
@@ -50283,7 +50320,7 @@ function NotificationRuleList({
50283
50320
  variant: "ghost",
50284
50321
  "aria-label": `Edit ${rule.name || "rule"}`,
50285
50322
  onClick: () => onEdit(rule),
50286
- children: /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(import_icons83.EditIcon, { size: "sm", "aria-hidden": "true" })
50323
+ children: /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(import_icons84.EditIcon, { size: "sm", "aria-hidden": "true" })
50287
50324
  }
50288
50325
  ),
50289
50326
  onDuplicate && /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(
@@ -50293,7 +50330,7 @@ function NotificationRuleList({
50293
50330
  variant: "ghost",
50294
50331
  "aria-label": `Duplicate ${rule.name || "rule"}`,
50295
50332
  onClick: () => onDuplicate(rule),
50296
- children: /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(import_icons83.CopyIcon, { size: "sm", "aria-hidden": "true" })
50333
+ children: /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(import_icons84.CopyIcon, { size: "sm", "aria-hidden": "true" })
50297
50334
  }
50298
50335
  ),
50299
50336
  onDelete && /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(
@@ -50303,7 +50340,7 @@ function NotificationRuleList({
50303
50340
  variant: "ghost",
50304
50341
  "aria-label": `Delete ${rule.name || "rule"}`,
50305
50342
  onClick: () => onDelete(rule),
50306
- children: /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(import_icons83.TrashCanIcon, { size: "sm", "aria-hidden": "true" })
50343
+ children: /* @__PURE__ */ (0, import_jsx_runtime203.jsx)(import_icons84.TrashCanIcon, { size: "sm", "aria-hidden": "true" })
50307
50344
  }
50308
50345
  )
50309
50346
  ] })