@arbidocs/blocks 0.4.87 → 0.4.89
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/agents/index.cjs +284 -284
- package/dist/agents/index.js +8 -8
- package/dist/chat/index.cjs +125 -125
- package/dist/chat/index.js +3 -3
- package/dist/{chunk-2EI7NCUA.cjs → chunk-2CFW2ELM.cjs} +8 -2
- package/dist/chunk-2CFW2ELM.cjs.map +1 -0
- package/dist/{chunk-2FBQSQDW.js → chunk-3D5MDCQ7.js} +299 -215
- package/dist/chunk-3D5MDCQ7.js.map +1 -0
- package/dist/{chunk-OR4CO743.cjs → chunk-5YXG342J.cjs} +3 -3
- package/dist/{chunk-OR4CO743.cjs.map → chunk-5YXG342J.cjs.map} +1 -1
- package/dist/{chunk-R26OHONI.js → chunk-6S5FLMWG.js} +83 -72
- package/dist/chunk-6S5FLMWG.js.map +1 -0
- package/dist/{chunk-X5K5PCRJ.cjs → chunk-CNI5QJ5B.cjs} +58 -58
- package/dist/{chunk-X5K5PCRJ.cjs.map → chunk-CNI5QJ5B.cjs.map} +1 -1
- package/dist/{chunk-P5ST47VY.js → chunk-DDF5GPIJ.js} +3 -3
- package/dist/{chunk-P5ST47VY.js.map → chunk-DDF5GPIJ.js.map} +1 -1
- package/dist/{chunk-PFA43QNX.js → chunk-EWSEQEPL.js} +3 -3
- package/dist/{chunk-PFA43QNX.js.map → chunk-EWSEQEPL.js.map} +1 -1
- package/dist/{chunk-YX466FWL.js → chunk-I44NX2ZB.js} +3 -3
- package/dist/{chunk-YX466FWL.js.map → chunk-I44NX2ZB.js.map} +1 -1
- package/dist/{chunk-LBE36YNZ.js → chunk-ICBAFX5B.js} +3 -3
- package/dist/{chunk-LBE36YNZ.js.map → chunk-ICBAFX5B.js.map} +1 -1
- package/dist/{chunk-C3DRLFU7.cjs → chunk-IF6VAYIA.cjs} +5 -5
- package/dist/{chunk-C3DRLFU7.cjs.map → chunk-IF6VAYIA.cjs.map} +1 -1
- package/dist/{chunk-5XZU64E2.cjs → chunk-MOJ5JQDN.cjs} +3 -3
- package/dist/{chunk-5XZU64E2.cjs.map → chunk-MOJ5JQDN.cjs.map} +1 -1
- package/dist/{chunk-O5NDG4EA.cjs → chunk-MP6FK43E.cjs} +3 -3
- package/dist/{chunk-O5NDG4EA.cjs.map → chunk-MP6FK43E.cjs.map} +1 -1
- package/dist/{chunk-AFSOUS5X.cjs → chunk-N26CXGXC.cjs} +83 -72
- package/dist/chunk-N26CXGXC.cjs.map +1 -0
- package/dist/{chunk-UJM7TG44.js → chunk-QLHW7JGN.js} +9 -9
- package/dist/{chunk-UJM7TG44.js.map → chunk-QLHW7JGN.js.map} +1 -1
- package/dist/{chunk-QOADH2YB.cjs → chunk-TF6YMDZL.cjs} +300 -216
- package/dist/chunk-TF6YMDZL.cjs.map +1 -0
- package/dist/{chunk-GFYGYME3.js → chunk-W7NZRZ54.js} +3 -3
- package/dist/{chunk-GFYGYME3.js.map → chunk-W7NZRZ54.js.map} +1 -1
- package/dist/{chunk-HUJLKDWX.cjs → chunk-XMBYDLZQ.cjs} +4 -4
- package/dist/{chunk-HUJLKDWX.cjs.map → chunk-XMBYDLZQ.cjs.map} +1 -1
- package/dist/{chunk-WDD255XQ.js → chunk-XQDM6T6C.js} +3 -3
- package/dist/{chunk-WDD255XQ.js.map → chunk-XQDM6T6C.js.map} +1 -1
- package/dist/{chunk-ZV3BKLFY.cjs → chunk-Z5VUZ6YD.cjs} +3 -3
- package/dist/{chunk-ZV3BKLFY.cjs.map → chunk-Z5VUZ6YD.cjs.map} +1 -1
- package/dist/{chunk-YU2KUMGE.js → chunk-ZX2VPMBJ.js} +8 -2
- package/dist/chunk-ZX2VPMBJ.js.map +1 -0
- package/dist/connect/index.cjs +116 -74
- package/dist/connect/index.cjs.map +1 -1
- package/dist/connect/index.js +61 -19
- package/dist/connect/index.js.map +1 -1
- package/dist/connection/WorkflowRunnerDialogs.d.ts +2 -0
- package/dist/facts/index.cjs +7 -7
- package/dist/facts/index.js +4 -4
- package/dist/files/index.cjs +4 -23
- package/dist/files/index.cjs.map +1 -1
- package/dist/files/index.js +4 -22
- package/dist/files/index.js.map +1 -1
- package/dist/files/views/TagFormParts.d.ts +0 -8
- package/dist/files/views/index.d.ts +1 -1
- package/dist/home/index.cjs +17 -17
- package/dist/home/index.js +3 -3
- package/dist/index.cjs +636 -544
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +116 -25
- package/dist/index.js.map +1 -1
- package/dist/retrieval/index.cjs +1 -1
- package/dist/retrieval/index.js +1 -1
- package/dist/settings/index.cjs +38 -38
- package/dist/settings/index.js +3 -3
- package/dist/shell/FilterInput.d.ts +3 -1
- package/dist/shell/index.cjs +5 -5
- package/dist/shell/index.js +2 -2
- package/dist/studio/index.cjs +4 -4
- package/dist/studio/index.js +3 -3
- package/dist/tags/TagDetail.d.ts +14 -2
- package/dist/tags/TagTable.d.ts +20 -11
- package/dist/tags/TagsNav.d.ts +28 -4
- package/dist/tags/index.d.ts +1 -1
- package/dist/tags/tagTableModel.d.ts +10 -2
- package/dist/workflow-canvas/index.cjs +51 -51
- package/dist/workflow-canvas/index.js +8 -8
- package/dist/workspaces/index.cjs +2 -2
- package/dist/workspaces/index.js +2 -2
- package/package.json +4 -4
- package/dist/chunk-2EI7NCUA.cjs.map +0 -1
- package/dist/chunk-2FBQSQDW.js.map +0 -1
- package/dist/chunk-AFSOUS5X.cjs.map +0 -1
- package/dist/chunk-QOADH2YB.cjs.map +0 -1
- package/dist/chunk-R26OHONI.js.map +0 -1
- package/dist/chunk-YU2KUMGE.js.map +0 -1
|
@@ -172,79 +172,90 @@ function TriStateFilterMenu({
|
|
|
172
172
|
});
|
|
173
173
|
};
|
|
174
174
|
const tone = isActive ? "text-primary" : "text-muted-foreground";
|
|
175
|
-
return /* @__PURE__ */ jsxs(
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
175
|
+
return /* @__PURE__ */ jsxs(
|
|
176
|
+
DropdownMenu,
|
|
177
|
+
{
|
|
178
|
+
modal: false,
|
|
179
|
+
open,
|
|
180
|
+
onOpenChange: (next) => {
|
|
181
|
+
if (!next) setIsClickOpen(false);
|
|
182
|
+
onOpenChange(next);
|
|
183
|
+
},
|
|
184
|
+
children: [
|
|
185
|
+
/* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
|
|
186
|
+
"span",
|
|
187
|
+
{
|
|
188
|
+
role: "button",
|
|
189
|
+
tabIndex: 0,
|
|
190
|
+
"data-slot": "tri-state-filter-trigger",
|
|
191
|
+
className: triggerClassName ?? "inline-flex cursor-pointer items-center gap-1 rounded-sm px-1.5 py-0.5 text-sm font-medium transition-colors hover:bg-foreground/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:h-11! pointer-coarse:min-w-11 pointer-coarse:justify-center",
|
|
192
|
+
"data-testid": testId,
|
|
193
|
+
onMouseEnter: handleMouseEnter,
|
|
194
|
+
onMouseLeave: handleMouseLeave,
|
|
195
|
+
onClick: handleTriggerClick,
|
|
196
|
+
children: [
|
|
197
|
+
/* @__PURE__ */ jsx(
|
|
198
|
+
Filter,
|
|
199
|
+
{
|
|
200
|
+
className: cn(
|
|
201
|
+
"size-3 transition-colors",
|
|
202
|
+
isActive ? "fill-primary text-primary" : tone
|
|
203
|
+
)
|
|
204
|
+
}
|
|
205
|
+
),
|
|
206
|
+
triggerLabel && /* @__PURE__ */ jsx("span", { className: tone, children: triggerLabel }),
|
|
207
|
+
renderChevron ? /* @__PURE__ */ jsx(ChevronDown, { className: cn("size-3 transition-colors", tone) }) : triggerLabel && /* @__PURE__ */ jsx(MoreVertical, { className: cn("size-3 transition-colors", tone) })
|
|
208
|
+
]
|
|
209
|
+
}
|
|
210
|
+
) }),
|
|
211
|
+
/* @__PURE__ */ jsxs(
|
|
212
|
+
DropdownMenuContent,
|
|
213
|
+
{
|
|
214
|
+
align,
|
|
215
|
+
className: "w-80 border-0 bg-muted",
|
|
216
|
+
onCloseAutoFocus: (e) => e.preventDefault(),
|
|
217
|
+
onMouseEnter: cancelPendingClose,
|
|
218
|
+
onMouseLeave: () => {
|
|
219
|
+
if (!isClickOpen) onOpenChange(false);
|
|
220
|
+
},
|
|
221
|
+
onPointerDownOutside: (e) => {
|
|
222
|
+
if (!isClickOpen) return;
|
|
223
|
+
if (!e.target.closest('[role="menu"]')) {
|
|
224
|
+
setIsClickOpen(false);
|
|
225
|
+
onOpenChange(false);
|
|
226
|
+
} else {
|
|
227
|
+
e.preventDefault();
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
children: [
|
|
231
|
+
(title || hasActiveFilters && !suppressTriggerActiveStyle && !showInlineClear) && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
232
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-2 py-1.5", children: [
|
|
233
|
+
title && /* @__PURE__ */ jsx(DropdownMenuLabel, { className: "p-0 text-primary", children: title }),
|
|
234
|
+
hasActiveFilters && !showInlineClear && clearButton
|
|
235
|
+
] }),
|
|
236
|
+
/* @__PURE__ */ jsx(DropdownMenuSeparator, {})
|
|
237
|
+
] }),
|
|
238
|
+
topContent && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
239
|
+
/* @__PURE__ */ jsx("div", { className: "px-2 py-1.5", children: topContent }),
|
|
240
|
+
/* @__PURE__ */ jsx(DropdownMenuSeparator, {})
|
|
241
|
+
] }),
|
|
242
|
+
folderContent && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
243
|
+
/* @__PURE__ */ jsx("div", { className: "px-1 py-0.5", children: folderContent }),
|
|
244
|
+
/* @__PURE__ */ jsx(DropdownMenuSeparator, {})
|
|
245
|
+
] }),
|
|
246
|
+
renderOptions(),
|
|
247
|
+
bottomContent && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
248
|
+
/* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
|
|
249
|
+
/* @__PURE__ */ jsx("div", { className: "px-2 py-1.5", children: bottomContent })
|
|
250
|
+
] })
|
|
251
|
+
]
|
|
219
252
|
}
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
title && /* @__PURE__ */ jsx(DropdownMenuLabel, { className: "p-0 text-primary", children: title }),
|
|
225
|
-
hasActiveFilters && !showInlineClear && clearButton
|
|
226
|
-
] }),
|
|
227
|
-
/* @__PURE__ */ jsx(DropdownMenuSeparator, {})
|
|
228
|
-
] }),
|
|
229
|
-
topContent && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
230
|
-
/* @__PURE__ */ jsx("div", { className: "px-2 py-1.5", children: topContent }),
|
|
231
|
-
/* @__PURE__ */ jsx(DropdownMenuSeparator, {})
|
|
232
|
-
] }),
|
|
233
|
-
folderContent && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
234
|
-
/* @__PURE__ */ jsx("div", { className: "px-1 py-0.5", children: folderContent }),
|
|
235
|
-
/* @__PURE__ */ jsx(DropdownMenuSeparator, {})
|
|
236
|
-
] }),
|
|
237
|
-
renderOptions(),
|
|
238
|
-
bottomContent && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
239
|
-
/* @__PURE__ */ jsx(DropdownMenuSeparator, {}),
|
|
240
|
-
/* @__PURE__ */ jsx("div", { className: "px-2 py-1.5", children: bottomContent })
|
|
241
|
-
] })
|
|
242
|
-
]
|
|
243
|
-
}
|
|
244
|
-
)
|
|
245
|
-
] });
|
|
253
|
+
)
|
|
254
|
+
]
|
|
255
|
+
}
|
|
256
|
+
);
|
|
246
257
|
}
|
|
247
258
|
|
|
248
259
|
export { DEFAULT_TRI_STATE_FILTER_MENU_LABELS, TriStateFilterMenu };
|
|
249
|
-
//# sourceMappingURL=chunk-
|
|
250
|
-
//# sourceMappingURL=chunk-
|
|
260
|
+
//# sourceMappingURL=chunk-6S5FLMWG.js.map
|
|
261
|
+
//# sourceMappingURL=chunk-6S5FLMWG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/settings/TriStateFilterMenu.tsx"],"names":["Fragment"],"mappings":"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","file":"chunk-6S5FLMWG.js","sourcesContent":["import {\n Fragment,\n useEffect,\n useMemo,\n useRef,\n useState,\n type MouseEvent,\n type ReactNode,\n} from 'react'\nimport { Ban, Check, ChevronDown, ChevronRight, Filter, FunnelX, MoreVertical } from 'lucide-react'\nimport {\n Badge,\n Button,\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuTrigger,\n cn,\n} from '@arbidocs/react/ui'\n\n/** include keeps matches, exclude drops them, null is indifferent. */\nexport type TriState = 'include' | 'exclude' | null\n\nexport interface TriStateOption<T extends string = string> {\n id: T\n label: string\n icon?: ReactNode\n count: number\n disabled?: boolean\n /** Indent level (nested options such as folders). */\n depth?: number\n}\n\nexport interface TriStateGroup<T extends string = string> {\n label: string\n options: T[]\n collapsible?: boolean\n}\n\n/** Every fixed string of the filter menu. */\nexport interface TriStateFilterMenuLabels {\n clear: string\n}\n\nexport const DEFAULT_TRI_STATE_FILTER_MENU_LABELS: TriStateFilterMenuLabels = { clear: 'Clear' }\n\nexport interface HoverHandlers {\n onMouseEnter: () => void\n onMouseLeave: () => void\n}\n\nexport interface TriStateFilterMenuProps<T extends string> {\n /** Test id of the trigger. */\n testId: string\n open: boolean\n onOpenChange: (open: boolean) => void\n title?: string\n filterStates: Map<T, TriState>\n onFiltersChange: (filters: Map<T, TriState>) => void\n options: TriStateOption<T>[]\n groups?: TriStateGroup<T>[]\n /** Between the header and the options (e.g. a toggle). */\n topContent?: ReactNode\n /** Before a group, keyed by the group's label. */\n groupTopContent?: Record<string, ReactNode>\n /** After `topContent` (e.g. a folder navigator). */\n folderContent?: ReactNode\n /** After every group (e.g. a source toggle). */\n bottomContent?: ReactNode\n /** Label next to the filter icon of the trigger. */\n triggerLabel?: string\n /** Shows the active styling even with no tri-state filter set. */\n hasExternalActiveState?: boolean\n /** Never show the active styling (chips carry the indication instead). */\n suppressTriggerActiveStyle?: boolean\n /** Replaces the default trigger styling (e.g. flush inside a unified widget). */\n triggerClassName?: string\n /** A chevron after the icon/label instead of the dots: the trigger reads as a dropdown segment. */\n renderChevron?: boolean\n /** Open only on an explicit click, never on hover (trigger embedded in another control). */\n disableHoverOpen?: boolean\n /** Which edge of the trigger the menu lines up with (default: centered on it). */\n align?: 'start' | 'center' | 'end'\n /** Exposes the hover handlers so a wider hover target (a tab header) can drive the menu. */\n onHoverHandlers?: (handlers: HoverHandlers) => void\n labels?: Partial<TriStateFilterMenuLabels>\n}\n\n/**\n * Tri-state filter dropdown. Opens on hover (pointer) or click (locks it open until clicked\n * away); the open state is controlled so a host can persist it. Options cycle\n * neutral, include, exclude.\n */\nexport function TriStateFilterMenu<T extends string>({\n testId,\n open,\n onOpenChange,\n title,\n filterStates,\n onFiltersChange,\n options,\n groups,\n topContent,\n groupTopContent,\n folderContent,\n bottomContent,\n triggerLabel,\n hasExternalActiveState = false,\n suppressTriggerActiveStyle = false,\n triggerClassName,\n renderChevron = false,\n disableHoverOpen = false,\n align = 'center',\n onHoverHandlers,\n labels,\n}: TriStateFilterMenuProps<T>) {\n const l = { ...DEFAULT_TRI_STATE_FILTER_MENU_LABELS, ...labels }\n const [collapsedGroups, setCollapsedGroups] = useState<Set<string>>(\n () => new Set((groups ?? []).filter((g) => g.collapsible).map((g) => g.label))\n )\n // Opened by click: stays open until clicked away.\n const [isClickOpen, setIsClickOpen] = useState(false)\n const hoverTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const cancelPendingClose = () => {\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current)\n hoverTimeoutRef.current = null\n }\n }\n\n const handleMouseEnter = () => {\n if (disableHoverOpen) return\n cancelPendingClose()\n if (!isClickOpen) onOpenChange(true)\n }\n\n const handleMouseLeave = () => {\n if (disableHoverOpen || isClickOpen) return\n // Delay so the pointer can travel to the content.\n hoverTimeoutRef.current = setTimeout(() => {\n if (!isClickOpen) onOpenChange(false)\n }, 150)\n }\n\n const handleTriggerClick = () => {\n setIsClickOpen(!isClickOpen)\n onOpenChange(!isClickOpen)\n }\n\n useEffect(() => {\n onHoverHandlers?.({ onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave })\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => cancelPendingClose, [])\n\n const optionMap = useMemo(() => new Map(options.map((o) => [o.id, o])), [options])\n\n // neutral -> include -> exclude -> neutral\n const handleFilterToggle = (filterId: T) => {\n const next = new Map(filterStates)\n const current = next.get(filterId) ?? null\n next.set(filterId, current === null ? 'include' : current === 'include' ? 'exclude' : null)\n onFiltersChange(next)\n }\n\n const handleClearFilters = (e: MouseEvent) => {\n e.stopPropagation()\n // Only option ids: other keys (e.g. folder filters) stay.\n const cleared = new Map(filterStates)\n options.forEach((opt) => cleared.set(opt.id, null))\n onFiltersChange(cleared)\n }\n\n const clearButton = (\n <Button\n variant=\"ghost\"\n size=\"default\"\n onClick={handleClearFilters}\n className=\"ml-auto h-8 px-3 text-sm text-primary hover:text-primary pointer-coarse:h-11\"\n >\n <FunnelX className=\"mr-1.5 h-4 w-4 text-primary\" />\n {l.clear}\n </Button>\n )\n\n const hasActiveFilters = useMemo(() => {\n const ids = new Set(options.map((o) => o.id))\n return (\n hasExternalActiveState ||\n Array.from(filterStates.entries()).some(([k, v]) => ids.has(k) && v !== null)\n )\n }, [filterStates, options, hasExternalActiveState])\n const isActive = !suppressTriggerActiveStyle && hasActiveFilters\n\n // Without a title the Clear button rides on the first group's label row.\n const showInlineClear =\n !title &&\n hasActiveFilters &&\n !suppressTriggerActiveStyle &&\n !!groups &&\n groups.length > 0 &&\n !groups[0].collapsible\n\n const renderTriStateItem = (option: TriStateOption<T>) => {\n const state = filterStates.get(option.id) ?? null\n const badgeClass =\n state === null\n ? 'bg-card border-border text-foreground hover:bg-muted'\n : state === 'include'\n ? 'bg-primary text-primary-foreground border-primary hover:bg-primary'\n : 'bg-card text-red-text border-red-text hover:bg-red-bg'\n const stateIcon =\n state === null ? (\n <div className=\"size-3.5 rounded-sm border-2 border-border bg-transparent\" />\n ) : state === 'include' ? (\n <Check className=\"size-3\" strokeWidth={3} />\n ) : (\n <Ban className=\"size-3 text-red-text\" strokeWidth={3} />\n )\n const depthPadding = option.depth ? option.depth * 16 : 0\n\n return (\n <DropdownMenuItem\n key={option.id}\n onClick={() => handleFilterToggle(option.id)}\n onSelect={(e) => e.preventDefault()}\n disabled={option.disabled}\n className=\"cursor-pointer p-1\"\n style={depthPadding ? { paddingLeft: `${depthPadding + 4}px` } : undefined}\n >\n <Badge\n variant=\"outline\"\n className={cn(\n 'flex w-full items-center gap-2 px-3 py-1.5 text-sm pointer-coarse:min-h-11',\n badgeClass\n )}\n >\n {stateIcon}\n {option.icon && <span className=\"[&>svg]:size-3.5\">{option.icon}</span>}\n <span className=\"font-medium\">{option.label}</span>\n <span className=\"ml-auto font-semibold\">{option.count}</span>\n </Badge>\n </DropdownMenuItem>\n )\n }\n\n const toggleGroupCollapse = (label: string) => {\n setCollapsedGroups((prev) => {\n const next = new Set(prev)\n if (!next.delete(label)) next.add(label)\n return next\n })\n }\n\n const renderOptions = () => {\n if (!groups || groups.length === 0) return options.map(renderTriStateItem)\n\n return groups.map((group, groupIndex) => {\n const isCollapsed = !!group.collapsible && collapsedGroups.has(group.label)\n const activeCount = group.collapsible\n ? group.options.filter((id) => filterStates.get(id) !== null).length\n : 0\n\n return (\n <Fragment key={group.label}>\n {groupIndex > 0 && <DropdownMenuSeparator />}\n {groupTopContent?.[group.label] && (\n <>\n <div className=\"px-2 py-1.5\">{groupTopContent[group.label]}</div>\n <DropdownMenuSeparator />\n </>\n )}\n {group.collapsible ? (\n <button\n type=\"button\"\n onClick={() => toggleGroupCollapse(group.label)}\n aria-expanded={!isCollapsed}\n className=\"flex w-full cursor-pointer items-center gap-1 rounded-sm px-2 py-1.5 text-sm font-semibold text-primary hover:bg-accent/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:min-h-11\"\n >\n {isCollapsed ? (\n <ChevronRight className=\"size-3.5\" />\n ) : (\n <ChevronDown className=\"size-3.5\" />\n )}\n <span>{group.label}</span>\n {isCollapsed && activeCount > 0 && (\n <Badge\n variant=\"outline\"\n className=\"ml-auto flex h-4 min-w-4 items-center justify-center rounded-md px-1 text-xs leading-none\"\n >\n {activeCount}\n </Badge>\n )}\n </button>\n ) : groupIndex === 0 && showInlineClear ? (\n <div className=\"flex items-center justify-between pr-1\">\n <DropdownMenuLabel className=\"text-primary\">{group.label}</DropdownMenuLabel>\n {clearButton}\n </div>\n ) : (\n <DropdownMenuLabel className=\"text-primary\">{group.label}</DropdownMenuLabel>\n )}\n {!isCollapsed &&\n group.options\n .map((id) => optionMap.get(id))\n .filter((opt): opt is TriStateOption<T> => opt !== undefined)\n .map(renderTriStateItem)}\n </Fragment>\n )\n })\n }\n\n const tone = isActive ? 'text-primary' : 'text-muted-foreground'\n\n return (\n <DropdownMenu\n modal={false}\n open={open}\n onOpenChange={(next) => {\n // Closed by the menu itself (Escape, choosing): the next click opens it again, rather than\n // toggling a stale click-open state shut as it opens.\n if (!next) setIsClickOpen(false)\n onOpenChange(next)\n }}\n >\n <DropdownMenuTrigger asChild>\n <span\n role=\"button\"\n tabIndex={0}\n data-slot=\"tri-state-filter-trigger\"\n className={\n triggerClassName ??\n 'inline-flex cursor-pointer items-center gap-1 rounded-sm px-1.5 py-0.5 text-sm font-medium transition-colors hover:bg-foreground/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring pointer-coarse:h-11! pointer-coarse:min-w-11 pointer-coarse:justify-center'\n }\n data-testid={testId}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onClick={handleTriggerClick}\n >\n <Filter\n className={cn(\n 'size-3 transition-colors',\n isActive ? 'fill-primary text-primary' : tone\n )}\n />\n {triggerLabel && <span className={tone}>{triggerLabel}</span>}\n {renderChevron ? (\n <ChevronDown className={cn('size-3 transition-colors', tone)} />\n ) : (\n triggerLabel && <MoreVertical className={cn('size-3 transition-colors', tone)} />\n )}\n </span>\n </DropdownMenuTrigger>\n <DropdownMenuContent\n align={align}\n className=\"w-80 border-0 bg-muted\"\n onCloseAutoFocus={(e) => e.preventDefault()}\n onMouseEnter={cancelPendingClose}\n onMouseLeave={() => {\n if (!isClickOpen) onOpenChange(false)\n }}\n onPointerDownOutside={(e) => {\n // Click-opened menus close only on a real outside click.\n if (!isClickOpen) return\n if (!(e.target as HTMLElement).closest('[role=\"menu\"]')) {\n setIsClickOpen(false)\n onOpenChange(false)\n } else {\n e.preventDefault()\n }\n }}\n >\n {(title || (hasActiveFilters && !suppressTriggerActiveStyle && !showInlineClear)) && (\n <>\n <div className=\"flex items-center justify-between px-2 py-1.5\">\n {title && <DropdownMenuLabel className=\"p-0 text-primary\">{title}</DropdownMenuLabel>}\n {hasActiveFilters && !showInlineClear && clearButton}\n </div>\n <DropdownMenuSeparator />\n </>\n )}\n {topContent && (\n <>\n <div className=\"px-2 py-1.5\">{topContent}</div>\n <DropdownMenuSeparator />\n </>\n )}\n {folderContent && (\n <>\n <div className=\"px-1 py-0.5\">{folderContent}</div>\n <DropdownMenuSeparator />\n </>\n )}\n {renderOptions()}\n {bottomContent && (\n <>\n <DropdownMenuSeparator />\n <div className=\"px-2 py-1.5\">{bottomContent}</div>\n </>\n )}\n </DropdownMenuContent>\n </DropdownMenu>\n )\n}\n"]}
|
|
@@ -3,24 +3,24 @@
|
|
|
3
3
|
|
|
4
4
|
var chunkS5HZBXZA_cjs = require('./chunk-S5HZBXZA.cjs');
|
|
5
5
|
var chunkZW6FPIFC_cjs = require('./chunk-ZW6FPIFC.cjs');
|
|
6
|
-
var
|
|
7
|
-
var
|
|
6
|
+
var chunkMOJ5JQDN_cjs = require('./chunk-MOJ5JQDN.cjs');
|
|
7
|
+
var chunkN26CXGXC_cjs = require('./chunk-N26CXGXC.cjs');
|
|
8
8
|
var chunk7RGLTF76_cjs = require('./chunk-7RGLTF76.cjs');
|
|
9
|
+
var chunkZ5VUZ6YD_cjs = require('./chunk-Z5VUZ6YD.cjs');
|
|
10
|
+
var chunk7D737FLE_cjs = require('./chunk-7D737FLE.cjs');
|
|
9
11
|
var chunk3AFWGEDJ_cjs = require('./chunk-3AFWGEDJ.cjs');
|
|
10
12
|
var chunkVFUWWH52_cjs = require('./chunk-VFUWWH52.cjs');
|
|
11
13
|
var chunkV4ISCZJ7_cjs = require('./chunk-V4ISCZJ7.cjs');
|
|
12
|
-
var
|
|
13
|
-
var chunkZV3BKLFY_cjs = require('./chunk-ZV3BKLFY.cjs');
|
|
14
|
-
var chunk7D737FLE_cjs = require('./chunk-7D737FLE.cjs');
|
|
14
|
+
var chunk2CFW2ELM_cjs = require('./chunk-2CFW2ELM.cjs');
|
|
15
15
|
var chunkOB5F4577_cjs = require('./chunk-OB5F4577.cjs');
|
|
16
16
|
var chunkB4SRYJLM_cjs = require('./chunk-B4SRYJLM.cjs');
|
|
17
17
|
var chunk7UTB4PHM_cjs = require('./chunk-7UTB4PHM.cjs');
|
|
18
|
+
var chunkC54XEN5T_cjs = require('./chunk-C54XEN5T.cjs');
|
|
19
|
+
var chunkKDG6FER6_cjs = require('./chunk-KDG6FER6.cjs');
|
|
18
20
|
var chunkULWRNGGE_cjs = require('./chunk-ULWRNGGE.cjs');
|
|
19
21
|
var chunkIXALYQT7_cjs = require('./chunk-IXALYQT7.cjs');
|
|
20
22
|
var chunkFX3K6LNZ_cjs = require('./chunk-FX3K6LNZ.cjs');
|
|
21
23
|
var chunkMHVNT4J3_cjs = require('./chunk-MHVNT4J3.cjs');
|
|
22
|
-
var chunkC54XEN5T_cjs = require('./chunk-C54XEN5T.cjs');
|
|
23
|
-
var chunkKDG6FER6_cjs = require('./chunk-KDG6FER6.cjs');
|
|
24
24
|
var react = require('react');
|
|
25
25
|
var ui = require('@arbidocs/react/ui');
|
|
26
26
|
var jsxRuntime = require('react/jsx-runtime');
|
|
@@ -146,7 +146,7 @@ function WorkflowConfigDialog({
|
|
|
146
146
|
}) {
|
|
147
147
|
const l = { ...DEFAULT_WORKFLOW_CONFIG_DIALOG_LABELS, ...labels };
|
|
148
148
|
const initialKey = JSON.stringify(initialInputs ?? {});
|
|
149
|
-
const seedKey = JSON.stringify({ ...
|
|
149
|
+
const seedKey = JSON.stringify({ ...chunkMOJ5JQDN_cjs.defaultInputs(workflow), ...JSON.parse(initialKey) });
|
|
150
150
|
const seed = react.useMemo(() => JSON.parse(seedKey), [seedKey]);
|
|
151
151
|
const [inputs, setInputs] = useControllableState(inputsProp, seed, onInputsChange);
|
|
152
152
|
const [agentId, setAgentId] = useControllableState(
|
|
@@ -158,7 +158,7 @@ function WorkflowConfigDialog({
|
|
|
158
158
|
if (open && inputsProp === void 0) setInputs(seed);
|
|
159
159
|
}, [open, seed]);
|
|
160
160
|
const setField = (name, value) => setInputs({ ...inputs, [name]: value });
|
|
161
|
-
const errors =
|
|
161
|
+
const errors = chunkMOJ5JQDN_cjs.validateInputs(workflow, inputs);
|
|
162
162
|
const valid = Object.keys(errors).length === 0;
|
|
163
163
|
const visibleErrors = Object.fromEntries(
|
|
164
164
|
Object.entries(errors).filter(([, e]) => e !== "required")
|
|
@@ -171,7 +171,7 @@ function WorkflowConfigDialog({
|
|
|
171
171
|
const blockedByScope = matchedCount !== null && matchedCount === 0 && Boolean(workflow.requiresFiles);
|
|
172
172
|
const showAgent = workflow.run.kind === "prompt" && workflow.options?.agent !== false && agents !== void 0 && agents.length > 0;
|
|
173
173
|
const launch = (values) => {
|
|
174
|
-
Promise.resolve(onLaunch(
|
|
174
|
+
Promise.resolve(onLaunch(chunkMOJ5JQDN_cjs.buildLaunch(workflow, values, agentId))).catch(() => {
|
|
175
175
|
});
|
|
176
176
|
};
|
|
177
177
|
const submit = () => {
|
|
@@ -190,7 +190,7 @@ function WorkflowConfigDialog({
|
|
|
190
190
|
const firstField = workflow.inputs.find((f) => !f.advanced);
|
|
191
191
|
const focusPromptFirst = firstField?.type === "text" || firstField?.type === "longtext";
|
|
192
192
|
const defaultScopeRender = scopeSource ? (_field, value, onChange) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
193
|
-
|
|
193
|
+
chunkZ5VUZ6YD_cjs.ScopePicker,
|
|
194
194
|
{
|
|
195
195
|
folders: scopeSource.folders,
|
|
196
196
|
unfiledCount: scopeSource.unfiledCount,
|
|
@@ -223,7 +223,7 @@ function WorkflowConfigDialog({
|
|
|
223
223
|
},
|
|
224
224
|
children: [
|
|
225
225
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
226
|
-
|
|
226
|
+
chunkZ5VUZ6YD_cjs.QuickActionDialogHeader,
|
|
227
227
|
{
|
|
228
228
|
icon: workflow.icon && renderIcon ? renderIcon(workflow.icon) : null,
|
|
229
229
|
title: workflow.title,
|
|
@@ -241,7 +241,7 @@ function WorkflowConfigDialog({
|
|
|
241
241
|
submit();
|
|
242
242
|
},
|
|
243
243
|
children: noFiles ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
244
|
-
|
|
244
|
+
chunkZ5VUZ6YD_cjs.AddFilesFirst,
|
|
245
245
|
{
|
|
246
246
|
reason: l.addFilesReason,
|
|
247
247
|
action: addFilesAction,
|
|
@@ -249,7 +249,7 @@ function WorkflowConfigDialog({
|
|
|
249
249
|
}
|
|
250
250
|
) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
251
251
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
252
|
-
|
|
252
|
+
chunkMOJ5JQDN_cjs.SchemaForm,
|
|
253
253
|
{
|
|
254
254
|
fields,
|
|
255
255
|
values: inputs,
|
|
@@ -308,7 +308,7 @@ function defaultScopeRenderer(scopeSource) {
|
|
|
308
308
|
if (!scopeSource) return void 0;
|
|
309
309
|
return function renderScope(_field, value, onChange) {
|
|
310
310
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
311
|
-
|
|
311
|
+
chunkZ5VUZ6YD_cjs.ScopePicker,
|
|
312
312
|
{
|
|
313
313
|
folders: scopeSource.folders,
|
|
314
314
|
unfiledCount: scopeSource.unfiledCount,
|
|
@@ -327,7 +327,7 @@ function resolveScopeInputs(workflow, inputs, scopeSource) {
|
|
|
327
327
|
for (const field of workflow.inputs) {
|
|
328
328
|
if (field.type !== "scope") continue;
|
|
329
329
|
const raw = inputs[field.name];
|
|
330
|
-
const scope =
|
|
330
|
+
const scope = chunkMOJ5JQDN_cjs.isWorkflowScope(raw) ? raw : { folders: [], labels: [] };
|
|
331
331
|
next[field.name] = { ...scope, documents: scopeSource.resolveDocuments(scope) };
|
|
332
332
|
}
|
|
333
333
|
return next;
|
|
@@ -369,9 +369,9 @@ function WorkflowLauncher({
|
|
|
369
369
|
};
|
|
370
370
|
const select = (workflow) => {
|
|
371
371
|
if (workflow.run.kind === "operation" && workflow.inputs.length === 0) {
|
|
372
|
-
const inputs =
|
|
373
|
-
if (Object.keys(
|
|
374
|
-
Promise.resolve(onLaunch(
|
|
372
|
+
const inputs = chunkMOJ5JQDN_cjs.defaultInputs(workflow);
|
|
373
|
+
if (Object.keys(chunkMOJ5JQDN_cjs.validateInputs(workflow, inputs)).length === 0) {
|
|
374
|
+
Promise.resolve(onLaunch(chunkMOJ5JQDN_cjs.buildLaunch(workflow, inputs, void 0))).catch(() => {
|
|
375
375
|
});
|
|
376
376
|
return;
|
|
377
377
|
}
|
|
@@ -393,7 +393,7 @@ function WorkflowLauncher({
|
|
|
393
393
|
});
|
|
394
394
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className, "data-slot": "workflow-launcher", children: [
|
|
395
395
|
showTiles && /* @__PURE__ */ jsxRuntime.jsx(
|
|
396
|
-
|
|
396
|
+
chunkZ5VUZ6YD_cjs.StartTiles,
|
|
397
397
|
{
|
|
398
398
|
items: [...tiles, ...extraTiles],
|
|
399
399
|
caption,
|
|
@@ -521,7 +521,7 @@ function workflowToSkillMarkdown(workflow) {
|
|
|
521
521
|
if (workflow.landing !== "chat") lines.push(`landing: ${workflow.landing}`);
|
|
522
522
|
if (workflow.requiresFiles) lines.push("requires_files: true");
|
|
523
523
|
if (workflow.inputs.length > 0) {
|
|
524
|
-
lines.push(`inputs: ${JSON.stringify(workflow.inputs.map(
|
|
524
|
+
lines.push(`inputs: ${JSON.stringify(workflow.inputs.map(chunkMOJ5JQDN_cjs.fieldToFrontmatter))}`);
|
|
525
525
|
}
|
|
526
526
|
lines.push("---", "", run.promptTemplate.trim(), "");
|
|
527
527
|
return lines.join("\n");
|
|
@@ -543,11 +543,11 @@ function workflowFromSkillMarkdown(id, text2) {
|
|
|
543
543
|
} else if (value === "true" || value === "false") frontmatter[key] = value === "true";
|
|
544
544
|
else frontmatter[key] = value;
|
|
545
545
|
}
|
|
546
|
-
return
|
|
546
|
+
return chunkMOJ5JQDN_cjs.workflowFromFrontmatter(id, frontmatter, body);
|
|
547
547
|
}
|
|
548
548
|
function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, resolveWorkflow, compose } = {}) {
|
|
549
|
-
const steps =
|
|
550
|
-
const [inputs, setInputs] = react.useState(() =>
|
|
549
|
+
const steps = chunkMOJ5JQDN_cjs.workflowSteps(workflow);
|
|
550
|
+
const [inputs, setInputs] = react.useState(() => chunkMOJ5JQDN_cjs.initialRunInputs(workflow));
|
|
551
551
|
const [states, setStates] = react.useState({});
|
|
552
552
|
const set = (id, state) => setStates((s) => ({ ...s, [id]: state }));
|
|
553
553
|
const timers = react.useRef(/* @__PURE__ */ new Map());
|
|
@@ -569,10 +569,10 @@ function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, reso
|
|
|
569
569
|
react.useEffect(() => {
|
|
570
570
|
if (Object.values(states).some((s) => s.status === "running")) return;
|
|
571
571
|
const next = steps.find(
|
|
572
|
-
(s) => (s.kind === "agent" || s.kind === "action") &&
|
|
572
|
+
(s) => (s.kind === "agent" || s.kind === "action") && chunkMOJ5JQDN_cjs.stepPhase(steps, states, s.id) === "ready"
|
|
573
573
|
);
|
|
574
574
|
if (!next || next.kind !== "agent" && next.kind !== "action") return;
|
|
575
|
-
const prompt = next.kind === "agent" ?
|
|
575
|
+
const prompt = next.kind === "agent" ? chunkMOJ5JQDN_cjs.composeStepPrompt(workflow, next, inputs, { resolveWorkflow, compose }) : "";
|
|
576
576
|
set(next.id, { status: "running", startedAt: (/* @__PURE__ */ new Date()).toISOString() });
|
|
577
577
|
timers.current.set(
|
|
578
578
|
next.id,
|
|
@@ -585,7 +585,7 @@ function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, reso
|
|
|
585
585
|
}, delayMs)
|
|
586
586
|
);
|
|
587
587
|
}, [states, steps, workflow]);
|
|
588
|
-
return
|
|
588
|
+
return chunkMOJ5JQDN_cjs.useWorkflowView({
|
|
589
589
|
steps,
|
|
590
590
|
states,
|
|
591
591
|
inputs,
|
|
@@ -4186,7 +4186,7 @@ function TaskInbox(p) {
|
|
|
4186
4186
|
onTabChange: () => {
|
|
4187
4187
|
},
|
|
4188
4188
|
firstTabContent: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4189
|
-
|
|
4189
|
+
chunk2CFW2ELM_cjs.FilterInput,
|
|
4190
4190
|
{
|
|
4191
4191
|
value: filterText,
|
|
4192
4192
|
onChange: p.onFilterTextChange ?? setLocalQuery,
|
|
@@ -4200,7 +4200,7 @@ function TaskInbox(p) {
|
|
|
4200
4200
|
fieldsButton: "tasks-filter-fields"
|
|
4201
4201
|
},
|
|
4202
4202
|
filter: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4203
|
-
|
|
4203
|
+
chunkN26CXGXC_cjs.TriStateFilterMenu,
|
|
4204
4204
|
{
|
|
4205
4205
|
testId: "tasks-status-filter",
|
|
4206
4206
|
open: filterOpen,
|
|
@@ -4570,7 +4570,7 @@ function ConversationListView(p) {
|
|
|
4570
4570
|
onTabChange: () => {
|
|
4571
4571
|
},
|
|
4572
4572
|
firstTabContent: /* @__PURE__ */ jsxRuntime.jsx(
|
|
4573
|
-
|
|
4573
|
+
chunk2CFW2ELM_cjs.FilterInput,
|
|
4574
4574
|
{
|
|
4575
4575
|
value: query,
|
|
4576
4576
|
hideFieldPicker: true,
|
|
@@ -4998,7 +4998,7 @@ function workflowTaskFields(workflow, inputs, name, context) {
|
|
|
4998
4998
|
}
|
|
4999
4999
|
const typed = name?.trim();
|
|
5000
5000
|
if (workflow.options?.agent === false) {
|
|
5001
|
-
const message =
|
|
5001
|
+
const message = chunkMOJ5JQDN_cjs.composeWorkflowPrompt(workflow, inputs, context);
|
|
5002
5002
|
return { name: typed || message, prompt: "", skill_ref: null, skill_inputs: null };
|
|
5003
5003
|
}
|
|
5004
5004
|
const derived = typed || deriveWorkflowName(workflow, inputs);
|
|
@@ -5012,7 +5012,7 @@ function workflowTaskFields(workflow, inputs, name, context) {
|
|
|
5012
5012
|
}
|
|
5013
5013
|
return {
|
|
5014
5014
|
name: derived,
|
|
5015
|
-
prompt:
|
|
5015
|
+
prompt: chunkMOJ5JQDN_cjs.composeWorkflowPrompt(workflow, inputs, context),
|
|
5016
5016
|
skill_ref: null,
|
|
5017
5017
|
// The files a run is bound to travel in the saved inputs, whatever the template: the server binds
|
|
5018
5018
|
// the run to the ids listed under any input's `documents`.
|
|
@@ -6059,7 +6059,7 @@ function WorkflowsTable(props) {
|
|
|
6059
6059
|
onTabChange: props.onTabChange ?? (() => {
|
|
6060
6060
|
}),
|
|
6061
6061
|
firstTabContent: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6062
|
-
|
|
6062
|
+
chunk2CFW2ELM_cjs.FilterInput,
|
|
6063
6063
|
{
|
|
6064
6064
|
value: query,
|
|
6065
6065
|
onChange: setQuery,
|
|
@@ -6070,7 +6070,7 @@ function WorkflowsTable(props) {
|
|
|
6070
6070
|
ariaLabel: l.searchLabel,
|
|
6071
6071
|
testIds: { input: "workflow-search" },
|
|
6072
6072
|
filter: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6073
|
-
|
|
6073
|
+
chunkN26CXGXC_cjs.TriStateFilterMenu,
|
|
6074
6074
|
{
|
|
6075
6075
|
testId: "automations-filter-button",
|
|
6076
6076
|
open: filterOpen,
|
|
@@ -6192,7 +6192,7 @@ function TaskActivityDialog({
|
|
|
6192
6192
|
testId,
|
|
6193
6193
|
...timeline
|
|
6194
6194
|
}) {
|
|
6195
|
-
const l = { ...
|
|
6195
|
+
const l = { ...chunkMOJ5JQDN_cjs.DEFAULT_TASK_ACTIVITY_LABELS, ...labels };
|
|
6196
6196
|
const id = chunkMHVNT4J3_cjs.testIdOr(testId, { testId: "task-activity" });
|
|
6197
6197
|
const count = events?.length ?? 0;
|
|
6198
6198
|
const scrollToEnd = react.useCallback(
|
|
@@ -6207,7 +6207,7 @@ function TaskActivityDialog({
|
|
|
6207
6207
|
/* @__PURE__ */ jsxRuntime.jsx(ui.DialogDescription, { className: "truncate", children: taskName })
|
|
6208
6208
|
] }),
|
|
6209
6209
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "max-h-[55dvh] overflow-y-auto pr-1", "data-testid": `${id}-scroll`, children: [
|
|
6210
|
-
isLoading && !events ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: l.loading }) : isError && !events ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-destructive", children: l.error }) : count === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: l.empty }) : /* @__PURE__ */ jsxRuntime.jsx(
|
|
6210
|
+
isLoading && !events ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: l.loading }) : isError && !events ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-destructive", children: l.error }) : count === 0 ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-muted-foreground", children: l.empty }) : /* @__PURE__ */ jsxRuntime.jsx(chunkMOJ5JQDN_cjs.TaskActivityTimeline, { events: events ?? [], labels, testId: id, ...timeline }),
|
|
6211
6211
|
/* @__PURE__ */ jsxRuntime.jsx("div", { ref: scrollToEnd })
|
|
6212
6212
|
] })
|
|
6213
6213
|
] }) });
|
|
@@ -6334,7 +6334,7 @@ function groupThreadActivity(steps, items) {
|
|
|
6334
6334
|
continue;
|
|
6335
6335
|
}
|
|
6336
6336
|
if (current === void 0) out.before.push(item);
|
|
6337
|
-
else if (
|
|
6337
|
+
else if (chunkMOJ5JQDN_cjs.isRunFinished(steps, states)) out.after.push(item);
|
|
6338
6338
|
else {
|
|
6339
6339
|
const status = states[current]?.status;
|
|
6340
6340
|
const at = status === "done" || status === "skipped" ? steps.find((s) => !["done", "skipped"].includes(states[s.id]?.status ?? ""))?.id ?? current : current;
|
|
@@ -6452,13 +6452,13 @@ function WorkflowThreadStrip({
|
|
|
6452
6452
|
const chevron = /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRight, { className: "size-3 shrink-0 text-muted-foreground" });
|
|
6453
6453
|
const [selected, setSelected] = react.useState(null);
|
|
6454
6454
|
const [open, setOpen] = react.useState(null);
|
|
6455
|
-
const phaseOf = (id) =>
|
|
6455
|
+
const phaseOf = (id) => chunkMOJ5JQDN_cjs.stepPhase(steps, states, id);
|
|
6456
6456
|
const iconOf = (step) => step.icon && renderIcon ? renderIcon(step.icon) : void 0;
|
|
6457
6457
|
const waitingOf = (id) => {
|
|
6458
6458
|
const step = steps.find((s) => s.id === id);
|
|
6459
6459
|
const phase = phaseOf(id);
|
|
6460
|
-
const documents =
|
|
6461
|
-
if (documents.length) return
|
|
6460
|
+
const documents = chunkMOJ5JQDN_cjs.waitingDocuments(states[id]);
|
|
6461
|
+
if (documents.length) return chunkMOJ5JQDN_cjs.waitingForDocumentsText(documents.length);
|
|
6462
6462
|
const name = step && (phase === "ready" || phase === "waiting") ? assigneeOf?.(step) : void 0;
|
|
6463
6463
|
return name ? l.waitingFor.replace("{name}", name) : void 0;
|
|
6464
6464
|
};
|
|
@@ -6473,14 +6473,14 @@ function WorkflowThreadStrip({
|
|
|
6473
6473
|
"button",
|
|
6474
6474
|
{
|
|
6475
6475
|
type: "button",
|
|
6476
|
-
className: ui.cn(
|
|
6476
|
+
className: ui.cn(chunkMOJ5JQDN_cjs.STEP_PILL, "py-0.5", chunkMOJ5JQDN_cjs.stepPillTone(phase, isCurrent)),
|
|
6477
6477
|
"aria-current": isCurrent ? "step" : void 0,
|
|
6478
6478
|
title: waiting ? `${step.title} \xB7 ${waiting}` : step.title,
|
|
6479
6479
|
"data-phase": phase,
|
|
6480
6480
|
"data-testid": `workflow-thread-step-${step.id}`,
|
|
6481
6481
|
children: [
|
|
6482
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
6483
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: isCurrent ?
|
|
6482
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkMOJ5JQDN_cjs.PhaseMark, { phase, icon: iconOf(step) }),
|
|
6483
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: isCurrent ? chunkMOJ5JQDN_cjs.STEP_LABEL_CURRENT : ui.cn(chunkMOJ5JQDN_cjs.STEP_LABEL, chunkMOJ5JQDN_cjs.STEP_LABEL_MAX), children: step.title }),
|
|
6484
6484
|
sentBack && /* @__PURE__ */ jsxRuntime.jsx(
|
|
6485
6485
|
lucideReact.CornerUpLeft,
|
|
6486
6486
|
{
|
|
@@ -6492,7 +6492,7 @@ function WorkflowThreadStrip({
|
|
|
6492
6492
|
assignee && isCurrent && !narrow && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
6493
6493
|
"span",
|
|
6494
6494
|
{
|
|
6495
|
-
className: ui.cn(
|
|
6495
|
+
className: ui.cn(chunkMOJ5JQDN_cjs.STEP_EXTRA, "flex max-w-[12rem] items-center gap-0.5"),
|
|
6496
6496
|
title: waiting,
|
|
6497
6497
|
"data-testid": `workflow-thread-step-${step.id}-assignee`,
|
|
6498
6498
|
children: [
|
|
@@ -6551,9 +6551,9 @@ function WorkflowThreadStrip({
|
|
|
6551
6551
|
strays.map((s) => /* @__PURE__ */ jsxRuntime.jsx("li", { className: "flex shrink-0 items-center gap-1", children: /* @__PURE__ */ jsxRuntime.jsx(SignalPill, { signal: s, l }) }, `${s.step}-${s.signal}`))
|
|
6552
6552
|
] }) : null;
|
|
6553
6553
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: ui.cn("min-w-0 flex-1", className), "data-testid": "workflow-thread-strip", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
6554
|
-
|
|
6554
|
+
chunkMOJ5JQDN_cjs.StepBarFrame,
|
|
6555
6555
|
{
|
|
6556
|
-
levels:
|
|
6556
|
+
levels: chunkMOJ5JQDN_cjs.stepLevels(steps),
|
|
6557
6557
|
phaseOf,
|
|
6558
6558
|
current: selected,
|
|
6559
6559
|
onSelect: (id) => {
|
|
@@ -6638,10 +6638,10 @@ function compactThreadActivity(events) {
|
|
|
6638
6638
|
const count = Math.max(1, entry.recipients.length);
|
|
6639
6639
|
entry.label = `Notified ${count} ${count === 1 ? "user" : "users"}`;
|
|
6640
6640
|
} else if (STEP_LABELS[event.kind]) {
|
|
6641
|
-
const documents =
|
|
6641
|
+
const documents = chunkMOJ5JQDN_cjs.eventWaitingDocuments(event.detail);
|
|
6642
6642
|
result.push({
|
|
6643
6643
|
event,
|
|
6644
|
-
label: documents ?
|
|
6644
|
+
label: documents ? chunkMOJ5JQDN_cjs.waitingForDocumentsText(documents.length) : STEP_LABELS[event.kind],
|
|
6645
6645
|
recipients: []
|
|
6646
6646
|
});
|
|
6647
6647
|
} else if (["artifact_created", "artifact_edited", "document_added", "document_removed"].includes(
|
|
@@ -7040,7 +7040,7 @@ function defaultTaskComposerValues(workflows, initial) {
|
|
|
7040
7040
|
return {
|
|
7041
7041
|
assignee: "me",
|
|
7042
7042
|
workflowId,
|
|
7043
|
-
inputs: workflow ? { ...
|
|
7043
|
+
inputs: workflow ? { ...chunkMOJ5JQDN_cjs.defaultInputs(workflow), ...initial?.inputs } : { ...initial?.inputs },
|
|
7044
7044
|
when: "manual",
|
|
7045
7045
|
runAt: "",
|
|
7046
7046
|
rrule: "",
|
|
@@ -7149,7 +7149,7 @@ function WorkflowComposer({
|
|
|
7149
7149
|
return !docs?.length;
|
|
7150
7150
|
})
|
|
7151
7151
|
);
|
|
7152
|
-
const whatMissing = !workflow || Object.keys(
|
|
7152
|
+
const whatMissing = !workflow || Object.keys(chunkMOJ5JQDN_cjs.validateInputs({ ...workflow, inputs: fields }, values.inputs)).length > 0;
|
|
7153
7153
|
const runAtPast = values.when === "once" && values.runAt !== "" && values.runAt !== initialValues?.runAt && new Date(values.runAt).getTime() <= Date.now();
|
|
7154
7154
|
const whenMissing = missingWhen(values, runAtPast);
|
|
7155
7155
|
const scheduled = values.when !== "now" && values.when !== "manual";
|
|
@@ -7161,7 +7161,7 @@ function WorkflowComposer({
|
|
|
7161
7161
|
setValues({
|
|
7162
7162
|
...values,
|
|
7163
7163
|
workflowId: next,
|
|
7164
|
-
inputs: def ?
|
|
7164
|
+
inputs: def ? chunkMOJ5JQDN_cjs.defaultInputs(def) : {},
|
|
7165
7165
|
...def?.documentAction ? { access: "standing" } : {}
|
|
7166
7166
|
});
|
|
7167
7167
|
};
|
|
@@ -7289,7 +7289,7 @@ function WorkflowComposer({
|
|
|
7289
7289
|
},
|
|
7290
7290
|
"data-testid": `${id}-dropzone`,
|
|
7291
7291
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
7292
|
-
|
|
7292
|
+
chunkZ5VUZ6YD_cjs.AddFilesFirst,
|
|
7293
7293
|
{
|
|
7294
7294
|
reason: l.addFilesReason,
|
|
7295
7295
|
action: addFilesAction,
|
|
@@ -7299,7 +7299,7 @@ function WorkflowComposer({
|
|
|
7299
7299
|
}
|
|
7300
7300
|
),
|
|
7301
7301
|
!noFiles && workflow && fields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
7302
|
-
|
|
7302
|
+
chunkMOJ5JQDN_cjs.SchemaForm,
|
|
7303
7303
|
{
|
|
7304
7304
|
fields,
|
|
7305
7305
|
values: values.inputs,
|
|
@@ -7738,7 +7738,7 @@ function WorkTaskComposer({
|
|
|
7738
7738
|
}, [open]);
|
|
7739
7739
|
const workflow = workflows.find((w) => w.id === values.workflowId);
|
|
7740
7740
|
const fields = workflow?.inputs ?? [];
|
|
7741
|
-
const errors = workflow ?
|
|
7741
|
+
const errors = workflow ? chunkMOJ5JQDN_cjs.validateInputs({ ...workflow, inputs: fields }, values.inputs) : {};
|
|
7742
7742
|
const hasWork = configOpen && Boolean(workflow) && Object.keys(errors).length === 0;
|
|
7743
7743
|
const unattended = hasWork && values.when !== "now" && values.when !== "manual";
|
|
7744
7744
|
const canConfigure = !isEdit || seed.assignee === "agent";
|
|
@@ -7746,7 +7746,7 @@ function WorkTaskComposer({
|
|
|
7746
7746
|
const set = (key, value) => setValues({ ...values, [key]: value });
|
|
7747
7747
|
const pickWorkflow = (id2) => {
|
|
7748
7748
|
const next = workflows.find((w) => w.id === id2);
|
|
7749
|
-
setValues({ ...values, workflowId: id2, inputs: next ?
|
|
7749
|
+
setValues({ ...values, workflowId: id2, inputs: next ? chunkMOJ5JQDN_cjs.defaultInputs(next) : {} });
|
|
7750
7750
|
};
|
|
7751
7751
|
const openConfigure = () => {
|
|
7752
7752
|
setConfigOpen(true);
|
|
@@ -7932,7 +7932,7 @@ function WorkTaskComposer({
|
|
|
7932
7932
|
)
|
|
7933
7933
|
] }),
|
|
7934
7934
|
workflow && fields.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
7935
|
-
|
|
7935
|
+
chunkMOJ5JQDN_cjs.SchemaForm,
|
|
7936
7936
|
{
|
|
7937
7937
|
fields,
|
|
7938
7938
|
values: values.inputs,
|
|
@@ -10113,5 +10113,5 @@ exports.workflowToComposerValues = workflowToComposerValues;
|
|
|
10113
10113
|
exports.workflowToSkillMarkdown = workflowToSkillMarkdown;
|
|
10114
10114
|
exports.workflowTriggerType = workflowTriggerType;
|
|
10115
10115
|
exports.workflowWhen = workflowWhen;
|
|
10116
|
-
//# sourceMappingURL=chunk-
|
|
10117
|
-
//# sourceMappingURL=chunk-
|
|
10116
|
+
//# sourceMappingURL=chunk-CNI5QJ5B.cjs.map
|
|
10117
|
+
//# sourceMappingURL=chunk-CNI5QJ5B.cjs.map
|