@octaviaflow/core 3.1.0-beta.111 → 3.1.0-beta.113
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/CommandPalette/CommandPalette.d.ts +34 -2
- package/dist/components/CommandPalette/CommandPalette.d.ts.map +1 -1
- package/dist/components/ExpressionField/ExpressionField.d.ts.map +1 -1
- package/dist/components/SlideoutPanel/SlideoutPanel.d.ts +2 -0
- package/dist/components/SlideoutPanel/SlideoutPanel.d.ts.map +1 -1
- package/dist/components/Toast/Toast.d.ts +6 -0
- package/dist/components/Toast/Toast.d.ts.map +1 -1
- package/dist/components/VersionHistory/VersionHistory.d.ts.map +1 -1
- package/dist/index.cjs +237 -116
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +252 -129
- package/dist/index.js.map +1 -1
- package/dist/notifications/engine/catalog.d.ts.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/workflow/components/FxPanel/FxPanel.d.ts.map +1 -1
- package/dist/workflow.cjs +3 -2
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.js +3 -2
- package/dist/workflow.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -10236,13 +10236,18 @@ var CommandPalette = (0, import_react63.forwardRef)(
|
|
|
10236
10236
|
open,
|
|
10237
10237
|
onClose,
|
|
10238
10238
|
groups,
|
|
10239
|
-
placeholder = "Search
|
|
10239
|
+
placeholder = "Search\u2026",
|
|
10240
10240
|
onSelect,
|
|
10241
10241
|
emptyState,
|
|
10242
10242
|
footer,
|
|
10243
10243
|
filter = defaultFilter2,
|
|
10244
10244
|
container,
|
|
10245
10245
|
disableAnimation = false,
|
|
10246
|
+
query: controlledQuery,
|
|
10247
|
+
onQueryChange,
|
|
10248
|
+
shouldFilter = true,
|
|
10249
|
+
loading = false,
|
|
10250
|
+
loadingLabel = "Searching\u2026",
|
|
10246
10251
|
id: providedId,
|
|
10247
10252
|
className,
|
|
10248
10253
|
...rest
|
|
@@ -10252,14 +10257,16 @@ var CommandPalette = (0, import_react63.forwardRef)(
|
|
|
10252
10257
|
const reducedMotion = (0, import_framer_motion13.useReducedMotion)();
|
|
10253
10258
|
const inputRef = (0, import_react63.useRef)(null);
|
|
10254
10259
|
const listRef = (0, import_react63.useRef)(null);
|
|
10255
|
-
const
|
|
10260
|
+
const isQueryControlled = controlledQuery !== void 0;
|
|
10261
|
+
const [internalQuery, setInternalQuery] = (0, import_react63.useState)("");
|
|
10262
|
+
const query = isQueryControlled ? controlledQuery : internalQuery;
|
|
10256
10263
|
const [activeIndex, setActiveIndex] = (0, import_react63.useState)(0);
|
|
10257
10264
|
const filteredGroups = (0, import_react63.useMemo)(() => {
|
|
10258
10265
|
return groups.map((g) => ({
|
|
10259
10266
|
...g,
|
|
10260
|
-
items: g.items.filter((it) => filter(it, query, g.heading))
|
|
10267
|
+
items: g.shouldFilter ?? shouldFilter ? g.items.filter((it) => filter(it, query, g.heading)) : g.items
|
|
10261
10268
|
})).filter((g) => g.items.length > 0);
|
|
10262
|
-
}, [groups, query, filter]);
|
|
10269
|
+
}, [groups, query, filter, shouldFilter]);
|
|
10263
10270
|
const flatItems = (0, import_react63.useMemo)(
|
|
10264
10271
|
() => filteredGroups.flatMap((g) => g.items),
|
|
10265
10272
|
[filteredGroups]
|
|
@@ -10271,7 +10278,7 @@ var CommandPalette = (0, import_react63.forwardRef)(
|
|
|
10271
10278
|
}, [flatItems.length, activeIndex]);
|
|
10272
10279
|
(0, import_react63.useEffect)(() => {
|
|
10273
10280
|
if (open) {
|
|
10274
|
-
|
|
10281
|
+
if (!isQueryControlled) setInternalQuery("");
|
|
10275
10282
|
setActiveIndex(0);
|
|
10276
10283
|
requestAnimationFrame(() => inputRef.current?.focus());
|
|
10277
10284
|
}
|
|
@@ -10350,76 +10357,85 @@ var CommandPalette = (0, import_react63.forwardRef)(
|
|
|
10350
10357
|
placeholder,
|
|
10351
10358
|
value: query,
|
|
10352
10359
|
onChange: (e) => {
|
|
10353
|
-
|
|
10360
|
+
const next = e.target.value;
|
|
10361
|
+
if (!isQueryControlled) setInternalQuery(next);
|
|
10362
|
+
onQueryChange?.(next);
|
|
10354
10363
|
setActiveIndex(0);
|
|
10355
10364
|
}
|
|
10356
10365
|
}
|
|
10357
10366
|
),
|
|
10358
10367
|
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("kbd", { className: "ods-cmdk__esc-hint", "aria-hidden": "true", children: "Esc" })
|
|
10359
10368
|
] }),
|
|
10360
|
-
/* @__PURE__ */ (0, import_jsx_runtime45.
|
|
10369
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
|
|
10361
10370
|
"div",
|
|
10362
10371
|
{
|
|
10363
10372
|
ref: listRef,
|
|
10364
10373
|
id: `${baseId}-list`,
|
|
10365
10374
|
role: "listbox",
|
|
10366
10375
|
className: "ods-cmdk__list",
|
|
10367
|
-
|
|
10368
|
-
|
|
10369
|
-
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("
|
|
10370
|
-
|
|
10371
|
-
|
|
10372
|
-
|
|
10373
|
-
|
|
10374
|
-
|
|
10375
|
-
|
|
10376
|
-
|
|
10377
|
-
|
|
10378
|
-
|
|
10379
|
-
|
|
10380
|
-
|
|
10381
|
-
|
|
10382
|
-
|
|
10383
|
-
|
|
10384
|
-
|
|
10385
|
-
|
|
10386
|
-
|
|
10387
|
-
|
|
10388
|
-
|
|
10389
|
-
|
|
10390
|
-
|
|
10391
|
-
|
|
10392
|
-
"
|
|
10393
|
-
|
|
10394
|
-
|
|
10395
|
-
|
|
10396
|
-
|
|
10397
|
-
|
|
10398
|
-
onClick: () => handleItemClick(item),
|
|
10399
|
-
children: [
|
|
10400
|
-
item.icon && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
10401
|
-
"span",
|
|
10402
|
-
{
|
|
10403
|
-
className: "ods-cmdk__option-icon",
|
|
10404
|
-
"aria-hidden": "true",
|
|
10405
|
-
children: item.icon
|
|
10406
|
-
}
|
|
10376
|
+
"aria-busy": loading || void 0,
|
|
10377
|
+
children: [
|
|
10378
|
+
filteredGroups.length === 0 ? loading ? null : /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "ods-cmdk__empty", children: emptyState ?? /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_jsx_runtime45.Fragment, { children: [
|
|
10379
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { className: "ods-cmdk__empty-title", children: "No results" }),
|
|
10380
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { className: "ods-cmdk__empty-hint", children: "Try a different keyword." })
|
|
10381
|
+
] }) }) : (() => {
|
|
10382
|
+
let flatIdx = -1;
|
|
10383
|
+
return filteredGroups.map((g, gi) => /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
|
|
10384
|
+
"div",
|
|
10385
|
+
{
|
|
10386
|
+
className: "ods-cmdk__group",
|
|
10387
|
+
role: "group",
|
|
10388
|
+
"aria-label": typeof g.heading === "string" ? g.heading : void 0,
|
|
10389
|
+
children: [
|
|
10390
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "ods-cmdk__group-heading", children: g.heading }),
|
|
10391
|
+
g.items.map((item) => {
|
|
10392
|
+
flatIdx += 1;
|
|
10393
|
+
const idx = flatIdx;
|
|
10394
|
+
const isActive2 = idx === activeIndex;
|
|
10395
|
+
return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
|
|
10396
|
+
"div",
|
|
10397
|
+
{
|
|
10398
|
+
id: `${baseId}-opt-${idx}`,
|
|
10399
|
+
role: "option",
|
|
10400
|
+
"aria-selected": isActive2,
|
|
10401
|
+
"aria-disabled": item.disabled || void 0,
|
|
10402
|
+
className: cn(
|
|
10403
|
+
"ods-cmdk__option",
|
|
10404
|
+
isActive2 && "ods-cmdk__option--active",
|
|
10405
|
+
item.danger && "ods-cmdk__option--danger",
|
|
10406
|
+
item.disabled && "ods-cmdk__option--disabled"
|
|
10407
10407
|
),
|
|
10408
|
-
|
|
10409
|
-
|
|
10410
|
-
|
|
10411
|
-
|
|
10412
|
-
|
|
10413
|
-
|
|
10414
|
-
|
|
10415
|
-
|
|
10416
|
-
|
|
10417
|
-
|
|
10418
|
-
|
|
10419
|
-
|
|
10420
|
-
|
|
10421
|
-
|
|
10422
|
-
|
|
10408
|
+
onMouseEnter: () => setActiveIndex(idx),
|
|
10409
|
+
onClick: () => handleItemClick(item),
|
|
10410
|
+
children: [
|
|
10411
|
+
item.icon && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
10412
|
+
"span",
|
|
10413
|
+
{
|
|
10414
|
+
className: "ods-cmdk__option-icon",
|
|
10415
|
+
"aria-hidden": "true",
|
|
10416
|
+
children: item.icon
|
|
10417
|
+
}
|
|
10418
|
+
),
|
|
10419
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("span", { className: "ods-cmdk__option-body", children: [
|
|
10420
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "ods-cmdk__option-label", children: item.label }),
|
|
10421
|
+
item.description && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "ods-cmdk__option-desc", children: item.description })
|
|
10422
|
+
] }),
|
|
10423
|
+
item.shortcut && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("kbd", { className: "ods-cmdk__option-shortcut", children: item.shortcut })
|
|
10424
|
+
]
|
|
10425
|
+
},
|
|
10426
|
+
item.id
|
|
10427
|
+
);
|
|
10428
|
+
})
|
|
10429
|
+
]
|
|
10430
|
+
},
|
|
10431
|
+
gi
|
|
10432
|
+
));
|
|
10433
|
+
})(),
|
|
10434
|
+
loading && /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "ods-cmdk__loading", role: "status", "aria-live": "polite", children: [
|
|
10435
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Spinner, { size: "sm", tone: "muted", "aria-hidden": "true" }),
|
|
10436
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { children: loadingLabel })
|
|
10437
|
+
] })
|
|
10438
|
+
]
|
|
10423
10439
|
}
|
|
10424
10440
|
),
|
|
10425
10441
|
footer && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "ods-cmdk__footer", children: footer })
|
|
@@ -16859,7 +16875,10 @@ function shortReferenceLabel(token) {
|
|
|
16859
16875
|
if (token.startsWith("{{ods://")) {
|
|
16860
16876
|
const path = token.slice(8, -2);
|
|
16861
16877
|
const parts = path.split("/");
|
|
16862
|
-
if (parts[0] === "steps"
|
|
16878
|
+
if (parts[0] === "steps") {
|
|
16879
|
+
if (parts.length >= 4) return parts.slice(3).join(".");
|
|
16880
|
+
return parts[2] ?? "output";
|
|
16881
|
+
}
|
|
16863
16882
|
if (parts[0] === "flow") return `flow.${parts.slice(1).join(".")}`;
|
|
16864
16883
|
return parts.join(".");
|
|
16865
16884
|
}
|
|
@@ -40069,6 +40088,7 @@ function SlideoutContent({
|
|
|
40069
40088
|
title,
|
|
40070
40089
|
children,
|
|
40071
40090
|
footer,
|
|
40091
|
+
headerActions,
|
|
40072
40092
|
className,
|
|
40073
40093
|
offsetTop = 0,
|
|
40074
40094
|
offsetBottom = 0
|
|
@@ -40154,16 +40174,19 @@ function SlideoutContent({
|
|
|
40154
40174
|
children: [
|
|
40155
40175
|
title && /* @__PURE__ */ (0, import_jsx_runtime161.jsxs)("div", { className: "ods-slideout__header", children: [
|
|
40156
40176
|
/* @__PURE__ */ (0, import_jsx_runtime161.jsx)("h2", { ...titleProps, className: "ods-slideout__title", children: title }),
|
|
40157
|
-
/* @__PURE__ */ (0, import_jsx_runtime161.
|
|
40158
|
-
|
|
40159
|
-
|
|
40160
|
-
|
|
40161
|
-
|
|
40162
|
-
|
|
40163
|
-
|
|
40164
|
-
|
|
40165
|
-
|
|
40166
|
-
|
|
40177
|
+
/* @__PURE__ */ (0, import_jsx_runtime161.jsxs)("div", { className: "ods-slideout__header-actions", children: [
|
|
40178
|
+
headerActions,
|
|
40179
|
+
/* @__PURE__ */ (0, import_jsx_runtime161.jsx)(
|
|
40180
|
+
"button",
|
|
40181
|
+
{
|
|
40182
|
+
className: "ods-slideout__close",
|
|
40183
|
+
onClick: onClose,
|
|
40184
|
+
"aria-label": "Close panel",
|
|
40185
|
+
type: "button",
|
|
40186
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime161.jsx)("svg", { width: "20", height: "20", viewBox: "0 0 20 20", fill: "currentColor", children: /* @__PURE__ */ (0, import_jsx_runtime161.jsx)("path", { d: "M6.28 5.22a.75.75 0 00-1.06 1.06L8.94 10l-3.72 3.72a.75.75 0 101.06 1.06L10 11.06l3.72 3.72a.75.75 0 101.06-1.06L11.06 10l3.72-3.72a.75.75 0 00-1.06-1.06L10 8.94 6.28 5.22z" }) })
|
|
40187
|
+
}
|
|
40188
|
+
)
|
|
40189
|
+
] })
|
|
40167
40190
|
] }),
|
|
40168
40191
|
/* @__PURE__ */ (0, import_jsx_runtime161.jsx)("div", { className: "ods-slideout__body", children }),
|
|
40169
40192
|
footer && /* @__PURE__ */ (0, import_jsx_runtime161.jsx)("div", { className: "ods-slideout__footer", children: footer })
|
|
@@ -41676,15 +41699,57 @@ var defaultIcons = {
|
|
|
41676
41699
|
] })
|
|
41677
41700
|
};
|
|
41678
41701
|
var ToastContext = (0, import_react188.createContext)(null);
|
|
41679
|
-
function ToastBody({ item, onDismiss }) {
|
|
41702
|
+
function ToastBody({ item, stacked, onDismiss }) {
|
|
41680
41703
|
const dismiss = () => onDismiss(item.id);
|
|
41704
|
+
const [expanded, setExpanded] = (0, import_react188.useState)(false);
|
|
41705
|
+
const [overflowing, setOverflowing] = (0, import_react188.useState)(false);
|
|
41706
|
+
const descRef = (0, import_react188.useRef)(null);
|
|
41707
|
+
const cut = item.clampLines > 0 && !expanded;
|
|
41708
|
+
(0, import_react188.useLayoutEffect)(() => {
|
|
41709
|
+
if (!cut) return;
|
|
41710
|
+
const el = descRef.current;
|
|
41711
|
+
if (el) setOverflowing(el.scrollHeight > el.clientHeight + 1);
|
|
41712
|
+
}, [cut, item.description]);
|
|
41681
41713
|
if (item.render) return /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(import_jsx_runtime174.Fragment, { children: item.render({ id: item.id, dismiss }) });
|
|
41682
41714
|
const title = item.title ?? item.message;
|
|
41715
|
+
const toggles = overflowing && !stacked;
|
|
41716
|
+
const toggle = () => setExpanded((v) => !v);
|
|
41717
|
+
const onTextClick = (e) => {
|
|
41718
|
+
if (!toggles) return;
|
|
41719
|
+
if (window.getSelection()?.toString()) return;
|
|
41720
|
+
e.stopPropagation();
|
|
41721
|
+
toggle();
|
|
41722
|
+
};
|
|
41683
41723
|
return /* @__PURE__ */ (0, import_jsx_runtime174.jsxs)(import_jsx_runtime174.Fragment, { children: [
|
|
41684
41724
|
/* @__PURE__ */ (0, import_jsx_runtime174.jsx)("span", { className: "ods-toast__icon", "aria-hidden": "true", children: item.icon ?? defaultIcons[item.variant] }),
|
|
41685
|
-
/* @__PURE__ */ (0, import_jsx_runtime174.jsxs)("div", { className: "ods-toast__body", children: [
|
|
41725
|
+
/* @__PURE__ */ (0, import_jsx_runtime174.jsxs)("div", { className: "ods-toast__body", onClick: onTextClick, children: [
|
|
41686
41726
|
title && /* @__PURE__ */ (0, import_jsx_runtime174.jsx)("div", { className: "ods-toast__title", children: title }),
|
|
41687
|
-
item.description && /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
|
|
41727
|
+
item.description && /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
|
|
41728
|
+
"div",
|
|
41729
|
+
{
|
|
41730
|
+
ref: descRef,
|
|
41731
|
+
className: cn(
|
|
41732
|
+
"ods-toast__desc",
|
|
41733
|
+
cut && "ods-toast__desc--cut",
|
|
41734
|
+
toggles && "ods-toast__desc--toggles"
|
|
41735
|
+
),
|
|
41736
|
+
style: cut ? { "--ods-toast-clamp": item.clampLines } : void 0,
|
|
41737
|
+
children: item.description
|
|
41738
|
+
}
|
|
41739
|
+
),
|
|
41740
|
+
toggles && /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
|
|
41741
|
+
"button",
|
|
41742
|
+
{
|
|
41743
|
+
type: "button",
|
|
41744
|
+
className: "ods-toast__more",
|
|
41745
|
+
"aria-expanded": expanded,
|
|
41746
|
+
onClick: (e) => {
|
|
41747
|
+
e.stopPropagation();
|
|
41748
|
+
toggle();
|
|
41749
|
+
},
|
|
41750
|
+
children: expanded ? "Less" : "More"
|
|
41751
|
+
}
|
|
41752
|
+
)
|
|
41688
41753
|
] }),
|
|
41689
41754
|
(item.actionLabel || item.action) && /* @__PURE__ */ (0, import_jsx_runtime174.jsx)("div", { className: "ods-toast__action", children: item.actionLabel ? (
|
|
41690
41755
|
// First-class action chip — consistent styling, auto-dismiss
|
|
@@ -41732,10 +41797,17 @@ function ToastBody({ item, onDismiss }) {
|
|
|
41732
41797
|
)
|
|
41733
41798
|
] });
|
|
41734
41799
|
}
|
|
41735
|
-
function PositionStack({ items, position, onDismiss, maxStack }) {
|
|
41800
|
+
function PositionStack({ items, position, onDismiss, onHold, onRelease, maxStack }) {
|
|
41736
41801
|
const [hovered, setHovered] = (0, import_react188.useState)(false);
|
|
41802
|
+
const [focused, setFocused] = (0, import_react188.useState)(false);
|
|
41737
41803
|
const [pinned, setPinned] = (0, import_react188.useState)(false);
|
|
41738
41804
|
const expanded = hovered || pinned;
|
|
41805
|
+
const held = hovered || focused;
|
|
41806
|
+
const ids = (0, import_react188.useMemo)(() => items.map((t) => t.id), [items]);
|
|
41807
|
+
(0, import_react188.useEffect)(() => {
|
|
41808
|
+
if (held) onHold(ids);
|
|
41809
|
+
else onRelease(ids);
|
|
41810
|
+
}, [held, ids, onHold, onRelease]);
|
|
41739
41811
|
const ordered = (0, import_react188.useMemo)(() => [...items].reverse(), [items]);
|
|
41740
41812
|
const isBottom = position.startsWith("bottom");
|
|
41741
41813
|
const dir = isBottom ? -1 : 1;
|
|
@@ -41763,6 +41835,10 @@ function PositionStack({ items, position, onDismiss, maxStack }) {
|
|
|
41763
41835
|
),
|
|
41764
41836
|
onMouseEnter: () => setHovered(true),
|
|
41765
41837
|
onMouseLeave: () => setHovered(false),
|
|
41838
|
+
onFocus: () => setFocused(true),
|
|
41839
|
+
onBlur: (e) => {
|
|
41840
|
+
if (!e.currentTarget.contains(e.relatedTarget)) setFocused(false);
|
|
41841
|
+
},
|
|
41766
41842
|
"aria-live": "polite",
|
|
41767
41843
|
children: [
|
|
41768
41844
|
/* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
|
|
@@ -41800,7 +41876,14 @@ function PositionStack({ items, position, onDismiss, maxStack }) {
|
|
|
41800
41876
|
setPinned(true);
|
|
41801
41877
|
}
|
|
41802
41878
|
},
|
|
41803
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
|
|
41879
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime174.jsx)(
|
|
41880
|
+
ToastBody,
|
|
41881
|
+
{
|
|
41882
|
+
item,
|
|
41883
|
+
stacked: !expanded && items.length > 1,
|
|
41884
|
+
onDismiss
|
|
41885
|
+
}
|
|
41886
|
+
)
|
|
41804
41887
|
},
|
|
41805
41888
|
item.id
|
|
41806
41889
|
);
|
|
@@ -41837,29 +41920,51 @@ function ToastProvider({
|
|
|
41837
41920
|
const [toasts, setToasts] = (0, import_react188.useState)([]);
|
|
41838
41921
|
const timers = (0, import_react188.useRef)(/* @__PURE__ */ new Map());
|
|
41839
41922
|
const idCounter2 = (0, import_react188.useRef)(0);
|
|
41840
|
-
const
|
|
41841
|
-
|
|
41842
|
-
|
|
41843
|
-
|
|
41844
|
-
clearTimeout(timer);
|
|
41845
|
-
timers.current.delete(id);
|
|
41846
|
-
}
|
|
41923
|
+
const forget = (0, import_react188.useCallback)((id) => {
|
|
41924
|
+
const c = timers.current.get(id);
|
|
41925
|
+
if (c?.handle) clearTimeout(c.handle);
|
|
41926
|
+
timers.current.delete(id);
|
|
41847
41927
|
}, []);
|
|
41848
|
-
const
|
|
41849
|
-
|
|
41850
|
-
|
|
41851
|
-
|
|
41852
|
-
|
|
41853
|
-
|
|
41854
|
-
|
|
41855
|
-
|
|
41856
|
-
|
|
41857
|
-
|
|
41928
|
+
const dismiss = (0, import_react188.useCallback)(
|
|
41929
|
+
(id) => {
|
|
41930
|
+
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
41931
|
+
forget(id);
|
|
41932
|
+
},
|
|
41933
|
+
[forget]
|
|
41934
|
+
);
|
|
41935
|
+
const dismissAll = (0, import_react188.useCallback)(
|
|
41936
|
+
(position) => {
|
|
41937
|
+
setToasts((prev) => {
|
|
41938
|
+
const remaining = position ? prev.filter((t) => t.position !== position) : [];
|
|
41939
|
+
for (const t of prev) {
|
|
41940
|
+
if (!remaining.find((r) => r.id === t.id)) forget(t.id);
|
|
41858
41941
|
}
|
|
41859
|
-
|
|
41860
|
-
|
|
41861
|
-
}
|
|
41942
|
+
return remaining;
|
|
41943
|
+
});
|
|
41944
|
+
},
|
|
41945
|
+
[forget]
|
|
41946
|
+
);
|
|
41947
|
+
const hold = (0, import_react188.useCallback)((ids) => {
|
|
41948
|
+
const now2 = Date.now();
|
|
41949
|
+
for (const id of ids) {
|
|
41950
|
+
const c = timers.current.get(id);
|
|
41951
|
+
if (!c || c.handle === null) continue;
|
|
41952
|
+
clearTimeout(c.handle);
|
|
41953
|
+
c.handle = null;
|
|
41954
|
+
c.remaining = Math.max(0, c.remaining - (now2 - c.since));
|
|
41955
|
+
}
|
|
41862
41956
|
}, []);
|
|
41957
|
+
const release = (0, import_react188.useCallback)(
|
|
41958
|
+
(ids) => {
|
|
41959
|
+
for (const id of ids) {
|
|
41960
|
+
const c = timers.current.get(id);
|
|
41961
|
+
if (!c || c.handle !== null) continue;
|
|
41962
|
+
c.since = Date.now();
|
|
41963
|
+
c.handle = setTimeout(() => dismiss(id), c.remaining);
|
|
41964
|
+
}
|
|
41965
|
+
},
|
|
41966
|
+
[dismiss]
|
|
41967
|
+
);
|
|
41863
41968
|
const toast = (0, import_react188.useCallback)(
|
|
41864
41969
|
(options2) => {
|
|
41865
41970
|
const id = `toast-${++idCounter2.current}`;
|
|
@@ -41876,12 +41981,16 @@ function ToastProvider({
|
|
|
41876
41981
|
render: options2.render,
|
|
41877
41982
|
duration: options2.duration ?? 5e3,
|
|
41878
41983
|
closeable: options2.closeable ?? true,
|
|
41879
|
-
position: options2.position ?? defaultPosition
|
|
41984
|
+
position: options2.position ?? defaultPosition,
|
|
41985
|
+
clampLines: options2.clampLines ?? 2
|
|
41880
41986
|
};
|
|
41881
41987
|
setToasts((prev) => [...prev, item]);
|
|
41882
41988
|
if (item.duration > 0) {
|
|
41883
|
-
|
|
41884
|
-
|
|
41989
|
+
timers.current.set(id, {
|
|
41990
|
+
handle: setTimeout(() => dismiss(id), item.duration),
|
|
41991
|
+
remaining: item.duration,
|
|
41992
|
+
since: Date.now()
|
|
41993
|
+
});
|
|
41885
41994
|
}
|
|
41886
41995
|
return id;
|
|
41887
41996
|
},
|
|
@@ -41909,7 +42018,9 @@ function ToastProvider({
|
|
|
41909
42018
|
items: list,
|
|
41910
42019
|
position: pos,
|
|
41911
42020
|
maxStack,
|
|
41912
|
-
onDismiss: dismiss
|
|
42021
|
+
onDismiss: dismiss,
|
|
42022
|
+
onHold: hold,
|
|
42023
|
+
onRelease: release
|
|
41913
42024
|
},
|
|
41914
42025
|
pos
|
|
41915
42026
|
);
|
|
@@ -42810,7 +42921,20 @@ function VersionHistory({
|
|
|
42810
42921
|
}) {
|
|
42811
42922
|
const [expandedId, setExpandedId] = (0, import_react195.useState)(defaultExpandedId);
|
|
42812
42923
|
const baseId = (0, import_react195.useId)();
|
|
42813
|
-
const showToolbar = Boolean(tabs && tabs.length > 0
|
|
42924
|
+
const showToolbar = Boolean(tabs && tabs.length > 0);
|
|
42925
|
+
const refreshButton = onRefresh ? /* @__PURE__ */ (0, import_jsx_runtime182.jsx)(
|
|
42926
|
+
"button",
|
|
42927
|
+
{
|
|
42928
|
+
type: "button",
|
|
42929
|
+
className: "ods-version-history__refresh",
|
|
42930
|
+
onClick: onRefresh,
|
|
42931
|
+
disabled: refreshing,
|
|
42932
|
+
"aria-label": "Refresh history",
|
|
42933
|
+
title: "Refresh",
|
|
42934
|
+
"data-spinning": refreshing || void 0,
|
|
42935
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime182.jsx)(RefreshGlyph, {})
|
|
42936
|
+
}
|
|
42937
|
+
) : null;
|
|
42814
42938
|
return /* @__PURE__ */ (0, import_jsx_runtime182.jsxs)(
|
|
42815
42939
|
SlideoutPanel,
|
|
42816
42940
|
{
|
|
@@ -42819,6 +42943,7 @@ function VersionHistory({
|
|
|
42819
42943
|
position,
|
|
42820
42944
|
width,
|
|
42821
42945
|
title,
|
|
42946
|
+
headerActions: showToolbar ? void 0 : refreshButton,
|
|
42822
42947
|
offsetTop,
|
|
42823
42948
|
offsetBottom,
|
|
42824
42949
|
className: cn("ods-version-history", className),
|
|
@@ -42846,19 +42971,7 @@ function VersionHistory({
|
|
|
42846
42971
|
tab.id
|
|
42847
42972
|
);
|
|
42848
42973
|
}) }) : /* @__PURE__ */ (0, import_jsx_runtime182.jsx)("span", {}),
|
|
42849
|
-
|
|
42850
|
-
"button",
|
|
42851
|
-
{
|
|
42852
|
-
type: "button",
|
|
42853
|
-
className: "ods-version-history__refresh",
|
|
42854
|
-
onClick: onRefresh,
|
|
42855
|
-
disabled: refreshing,
|
|
42856
|
-
"aria-label": "Refresh history",
|
|
42857
|
-
title: "Refresh",
|
|
42858
|
-
"data-spinning": refreshing || void 0,
|
|
42859
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime182.jsx)(RefreshGlyph, {})
|
|
42860
|
-
}
|
|
42861
|
-
)
|
|
42974
|
+
refreshButton
|
|
42862
42975
|
] }),
|
|
42863
42976
|
error && /* @__PURE__ */ (0, import_jsx_runtime182.jsx)("div", { className: "ods-version-history__banner", children: /* @__PURE__ */ (0, import_jsx_runtime182.jsx)(Banner, { variant: "error", appearance: "subtle", title: "Couldn't load history", description: error }) }),
|
|
42864
42977
|
/* @__PURE__ */ (0, import_jsx_runtime182.jsx)("div", { className: "ods-version-history__body", role: "tabpanel", children: loading ? /* @__PURE__ */ (0, import_jsx_runtime182.jsxs)("div", { className: "ods-version-history__status", role: "status", "aria-live": "polite", children: [
|
|
@@ -47655,6 +47768,14 @@ var DEFAULT_NOTIFICATION_CATALOG = [
|
|
|
47655
47768
|
subjectNoun: "app",
|
|
47656
47769
|
defaultEmail: false
|
|
47657
47770
|
},
|
|
47771
|
+
{
|
|
47772
|
+
key: "connector.expiring_soon",
|
|
47773
|
+
label: "App sign-in expires soon",
|
|
47774
|
+
phrase: "an app's sign-in is about to expire",
|
|
47775
|
+
severity: "warning",
|
|
47776
|
+
audience: "org",
|
|
47777
|
+
subjectNoun: "app"
|
|
47778
|
+
},
|
|
47658
47779
|
{
|
|
47659
47780
|
key: "connector.test_failed",
|
|
47660
47781
|
label: "Connection test failed",
|