@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.
Files changed (88) hide show
  1. package/dist/agents/index.cjs +284 -284
  2. package/dist/agents/index.js +8 -8
  3. package/dist/chat/index.cjs +125 -125
  4. package/dist/chat/index.js +3 -3
  5. package/dist/{chunk-2EI7NCUA.cjs → chunk-2CFW2ELM.cjs} +8 -2
  6. package/dist/chunk-2CFW2ELM.cjs.map +1 -0
  7. package/dist/{chunk-2FBQSQDW.js → chunk-3D5MDCQ7.js} +299 -215
  8. package/dist/chunk-3D5MDCQ7.js.map +1 -0
  9. package/dist/{chunk-OR4CO743.cjs → chunk-5YXG342J.cjs} +3 -3
  10. package/dist/{chunk-OR4CO743.cjs.map → chunk-5YXG342J.cjs.map} +1 -1
  11. package/dist/{chunk-R26OHONI.js → chunk-6S5FLMWG.js} +83 -72
  12. package/dist/chunk-6S5FLMWG.js.map +1 -0
  13. package/dist/{chunk-X5K5PCRJ.cjs → chunk-CNI5QJ5B.cjs} +58 -58
  14. package/dist/{chunk-X5K5PCRJ.cjs.map → chunk-CNI5QJ5B.cjs.map} +1 -1
  15. package/dist/{chunk-P5ST47VY.js → chunk-DDF5GPIJ.js} +3 -3
  16. package/dist/{chunk-P5ST47VY.js.map → chunk-DDF5GPIJ.js.map} +1 -1
  17. package/dist/{chunk-PFA43QNX.js → chunk-EWSEQEPL.js} +3 -3
  18. package/dist/{chunk-PFA43QNX.js.map → chunk-EWSEQEPL.js.map} +1 -1
  19. package/dist/{chunk-YX466FWL.js → chunk-I44NX2ZB.js} +3 -3
  20. package/dist/{chunk-YX466FWL.js.map → chunk-I44NX2ZB.js.map} +1 -1
  21. package/dist/{chunk-LBE36YNZ.js → chunk-ICBAFX5B.js} +3 -3
  22. package/dist/{chunk-LBE36YNZ.js.map → chunk-ICBAFX5B.js.map} +1 -1
  23. package/dist/{chunk-C3DRLFU7.cjs → chunk-IF6VAYIA.cjs} +5 -5
  24. package/dist/{chunk-C3DRLFU7.cjs.map → chunk-IF6VAYIA.cjs.map} +1 -1
  25. package/dist/{chunk-5XZU64E2.cjs → chunk-MOJ5JQDN.cjs} +3 -3
  26. package/dist/{chunk-5XZU64E2.cjs.map → chunk-MOJ5JQDN.cjs.map} +1 -1
  27. package/dist/{chunk-O5NDG4EA.cjs → chunk-MP6FK43E.cjs} +3 -3
  28. package/dist/{chunk-O5NDG4EA.cjs.map → chunk-MP6FK43E.cjs.map} +1 -1
  29. package/dist/{chunk-AFSOUS5X.cjs → chunk-N26CXGXC.cjs} +83 -72
  30. package/dist/chunk-N26CXGXC.cjs.map +1 -0
  31. package/dist/{chunk-UJM7TG44.js → chunk-QLHW7JGN.js} +9 -9
  32. package/dist/{chunk-UJM7TG44.js.map → chunk-QLHW7JGN.js.map} +1 -1
  33. package/dist/{chunk-QOADH2YB.cjs → chunk-TF6YMDZL.cjs} +300 -216
  34. package/dist/chunk-TF6YMDZL.cjs.map +1 -0
  35. package/dist/{chunk-GFYGYME3.js → chunk-W7NZRZ54.js} +3 -3
  36. package/dist/{chunk-GFYGYME3.js.map → chunk-W7NZRZ54.js.map} +1 -1
  37. package/dist/{chunk-HUJLKDWX.cjs → chunk-XMBYDLZQ.cjs} +4 -4
  38. package/dist/{chunk-HUJLKDWX.cjs.map → chunk-XMBYDLZQ.cjs.map} +1 -1
  39. package/dist/{chunk-WDD255XQ.js → chunk-XQDM6T6C.js} +3 -3
  40. package/dist/{chunk-WDD255XQ.js.map → chunk-XQDM6T6C.js.map} +1 -1
  41. package/dist/{chunk-ZV3BKLFY.cjs → chunk-Z5VUZ6YD.cjs} +3 -3
  42. package/dist/{chunk-ZV3BKLFY.cjs.map → chunk-Z5VUZ6YD.cjs.map} +1 -1
  43. package/dist/{chunk-YU2KUMGE.js → chunk-ZX2VPMBJ.js} +8 -2
  44. package/dist/chunk-ZX2VPMBJ.js.map +1 -0
  45. package/dist/connect/index.cjs +116 -74
  46. package/dist/connect/index.cjs.map +1 -1
  47. package/dist/connect/index.js +61 -19
  48. package/dist/connect/index.js.map +1 -1
  49. package/dist/connection/WorkflowRunnerDialogs.d.ts +2 -0
  50. package/dist/facts/index.cjs +7 -7
  51. package/dist/facts/index.js +4 -4
  52. package/dist/files/index.cjs +4 -23
  53. package/dist/files/index.cjs.map +1 -1
  54. package/dist/files/index.js +4 -22
  55. package/dist/files/index.js.map +1 -1
  56. package/dist/files/views/TagFormParts.d.ts +0 -8
  57. package/dist/files/views/index.d.ts +1 -1
  58. package/dist/home/index.cjs +17 -17
  59. package/dist/home/index.js +3 -3
  60. package/dist/index.cjs +636 -544
  61. package/dist/index.cjs.map +1 -1
  62. package/dist/index.js +116 -25
  63. package/dist/index.js.map +1 -1
  64. package/dist/retrieval/index.cjs +1 -1
  65. package/dist/retrieval/index.js +1 -1
  66. package/dist/settings/index.cjs +38 -38
  67. package/dist/settings/index.js +3 -3
  68. package/dist/shell/FilterInput.d.ts +3 -1
  69. package/dist/shell/index.cjs +5 -5
  70. package/dist/shell/index.js +2 -2
  71. package/dist/studio/index.cjs +4 -4
  72. package/dist/studio/index.js +3 -3
  73. package/dist/tags/TagDetail.d.ts +14 -2
  74. package/dist/tags/TagTable.d.ts +20 -11
  75. package/dist/tags/TagsNav.d.ts +28 -4
  76. package/dist/tags/index.d.ts +1 -1
  77. package/dist/tags/tagTableModel.d.ts +10 -2
  78. package/dist/workflow-canvas/index.cjs +51 -51
  79. package/dist/workflow-canvas/index.js +8 -8
  80. package/dist/workspaces/index.cjs +2 -2
  81. package/dist/workspaces/index.js +2 -2
  82. package/package.json +4 -4
  83. package/dist/chunk-2EI7NCUA.cjs.map +0 -1
  84. package/dist/chunk-2FBQSQDW.js.map +0 -1
  85. package/dist/chunk-AFSOUS5X.cjs.map +0 -1
  86. package/dist/chunk-QOADH2YB.cjs.map +0 -1
  87. package/dist/chunk-R26OHONI.js.map +0 -1
  88. 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(DropdownMenu, { modal: false, open, onOpenChange, children: [
176
- /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, children: /* @__PURE__ */ jsxs(
177
- "span",
178
- {
179
- role: "button",
180
- tabIndex: 0,
181
- "data-slot": "tri-state-filter-trigger",
182
- 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",
183
- "data-testid": testId,
184
- onMouseEnter: handleMouseEnter,
185
- onMouseLeave: handleMouseLeave,
186
- onClick: handleTriggerClick,
187
- children: [
188
- /* @__PURE__ */ jsx(
189
- Filter,
190
- {
191
- className: cn(
192
- "size-3 transition-colors",
193
- isActive ? "fill-primary text-primary" : tone
194
- )
195
- }
196
- ),
197
- triggerLabel && /* @__PURE__ */ jsx("span", { className: tone, children: triggerLabel }),
198
- renderChevron ? /* @__PURE__ */ jsx(ChevronDown, { className: cn("size-3 transition-colors", tone) }) : triggerLabel && /* @__PURE__ */ jsx(MoreVertical, { className: cn("size-3 transition-colors", tone) })
199
- ]
200
- }
201
- ) }),
202
- /* @__PURE__ */ jsxs(
203
- DropdownMenuContent,
204
- {
205
- align,
206
- className: "w-80 border-0 bg-muted",
207
- onCloseAutoFocus: (e) => e.preventDefault(),
208
- onMouseEnter: cancelPendingClose,
209
- onMouseLeave: () => {
210
- if (!isClickOpen) onOpenChange(false);
211
- },
212
- onPointerDownOutside: (e) => {
213
- if (!isClickOpen) return;
214
- if (!e.target.closest('[role="menu"]')) {
215
- setIsClickOpen(false);
216
- onOpenChange(false);
217
- } else {
218
- e.preventDefault();
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
- children: [
222
- (title || hasActiveFilters && !suppressTriggerActiveStyle && !showInlineClear) && /* @__PURE__ */ jsxs(Fragment, { children: [
223
- /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-2 py-1.5", children: [
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-R26OHONI.js.map
250
- //# sourceMappingURL=chunk-R26OHONI.js.map
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 chunk5XZU64E2_cjs = require('./chunk-5XZU64E2.cjs');
7
- var chunkAFSOUS5X_cjs = require('./chunk-AFSOUS5X.cjs');
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 chunk2EI7NCUA_cjs = require('./chunk-2EI7NCUA.cjs');
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({ ...chunk5XZU64E2_cjs.defaultInputs(workflow), ...JSON.parse(initialKey) });
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 = chunk5XZU64E2_cjs.validateInputs(workflow, inputs);
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(chunk5XZU64E2_cjs.buildLaunch(workflow, values, agentId))).catch(() => {
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
- chunkZV3BKLFY_cjs.ScopePicker,
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
- chunkZV3BKLFY_cjs.QuickActionDialogHeader,
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
- chunkZV3BKLFY_cjs.AddFilesFirst,
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
- chunk5XZU64E2_cjs.SchemaForm,
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
- chunkZV3BKLFY_cjs.ScopePicker,
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 = chunk5XZU64E2_cjs.isWorkflowScope(raw) ? raw : { folders: [], labels: [] };
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 = chunk5XZU64E2_cjs.defaultInputs(workflow);
373
- if (Object.keys(chunk5XZU64E2_cjs.validateInputs(workflow, inputs)).length === 0) {
374
- Promise.resolve(onLaunch(chunk5XZU64E2_cjs.buildLaunch(workflow, inputs, void 0))).catch(() => {
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
- chunkZV3BKLFY_cjs.StartTiles,
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(chunk5XZU64E2_cjs.fieldToFrontmatter))}`);
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 chunk5XZU64E2_cjs.workflowFromFrontmatter(id, frontmatter, body);
546
+ return chunkMOJ5JQDN_cjs.workflowFromFrontmatter(id, frontmatter, body);
547
547
  }
548
548
  function useWorkflowPreview(workflow, { answer = "{prompt}", delayMs = 400, resolveWorkflow, compose } = {}) {
549
- const steps = chunk5XZU64E2_cjs.workflowSteps(workflow);
550
- const [inputs, setInputs] = react.useState(() => chunk5XZU64E2_cjs.initialRunInputs(workflow));
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") && chunk5XZU64E2_cjs.stepPhase(steps, states, s.id) === "ready"
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" ? chunk5XZU64E2_cjs.composeStepPrompt(workflow, next, inputs, { resolveWorkflow, compose }) : "";
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 chunk5XZU64E2_cjs.useWorkflowView({
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
- chunk2EI7NCUA_cjs.FilterInput,
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
- chunkAFSOUS5X_cjs.TriStateFilterMenu,
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
- chunk2EI7NCUA_cjs.FilterInput,
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 = chunk5XZU64E2_cjs.composeWorkflowPrompt(workflow, inputs, context);
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: chunk5XZU64E2_cjs.composeWorkflowPrompt(workflow, inputs, context),
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
- chunk2EI7NCUA_cjs.FilterInput,
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
- chunkAFSOUS5X_cjs.TriStateFilterMenu,
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 = { ...chunk5XZU64E2_cjs.DEFAULT_TASK_ACTIVITY_LABELS, ...labels };
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(chunk5XZU64E2_cjs.TaskActivityTimeline, { events: events ?? [], labels, testId: id, ...timeline }),
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 (chunk5XZU64E2_cjs.isRunFinished(steps, states)) out.after.push(item);
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) => chunk5XZU64E2_cjs.stepPhase(steps, states, 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 = chunk5XZU64E2_cjs.waitingDocuments(states[id]);
6461
- if (documents.length) return chunk5XZU64E2_cjs.waitingForDocumentsText(documents.length);
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(chunk5XZU64E2_cjs.STEP_PILL, "py-0.5", chunk5XZU64E2_cjs.stepPillTone(phase, isCurrent)),
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(chunk5XZU64E2_cjs.PhaseMark, { phase, icon: iconOf(step) }),
6483
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: isCurrent ? chunk5XZU64E2_cjs.STEP_LABEL_CURRENT : ui.cn(chunk5XZU64E2_cjs.STEP_LABEL, chunk5XZU64E2_cjs.STEP_LABEL_MAX), children: step.title }),
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(chunk5XZU64E2_cjs.STEP_EXTRA, "flex max-w-[12rem] items-center gap-0.5"),
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
- chunk5XZU64E2_cjs.StepBarFrame,
6554
+ chunkMOJ5JQDN_cjs.StepBarFrame,
6555
6555
  {
6556
- levels: chunk5XZU64E2_cjs.stepLevels(steps),
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 = chunk5XZU64E2_cjs.eventWaitingDocuments(event.detail);
6641
+ const documents = chunkMOJ5JQDN_cjs.eventWaitingDocuments(event.detail);
6642
6642
  result.push({
6643
6643
  event,
6644
- label: documents ? chunk5XZU64E2_cjs.waitingForDocumentsText(documents.length) : STEP_LABELS[event.kind],
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 ? { ...chunk5XZU64E2_cjs.defaultInputs(workflow), ...initial?.inputs } : { ...initial?.inputs },
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(chunk5XZU64E2_cjs.validateInputs({ ...workflow, inputs: fields }, values.inputs)).length > 0;
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 ? chunk5XZU64E2_cjs.defaultInputs(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
- chunkZV3BKLFY_cjs.AddFilesFirst,
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
- chunk5XZU64E2_cjs.SchemaForm,
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 ? chunk5XZU64E2_cjs.validateInputs({ ...workflow, inputs: fields }, values.inputs) : {};
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 ? chunk5XZU64E2_cjs.defaultInputs(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
- chunk5XZU64E2_cjs.SchemaForm,
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-X5K5PCRJ.cjs.map
10117
- //# sourceMappingURL=chunk-X5K5PCRJ.cjs.map
10116
+ //# sourceMappingURL=chunk-CNI5QJ5B.cjs.map
10117
+ //# sourceMappingURL=chunk-CNI5QJ5B.cjs.map