@arbidocs/blocks 0.4.90 → 0.4.92

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 (65) hide show
  1. package/dist/agents/index.cjs +280 -279
  2. package/dist/agents/index.js +4 -3
  3. package/dist/agents/workflows/types.d.ts +6 -0
  4. package/dist/{chunk-ZPERNIMP.cjs → chunk-2WLXQGWC.cjs} +8 -3
  5. package/dist/chunk-2WLXQGWC.cjs.map +1 -0
  6. package/dist/chunk-32HW2Q33.cjs +59 -0
  7. package/dist/chunk-32HW2Q33.cjs.map +1 -0
  8. package/dist/{chunk-5XZU64E2.cjs → chunk-3US5OIDQ.cjs} +68 -33
  9. package/dist/chunk-3US5OIDQ.cjs.map +1 -0
  10. package/dist/{chunk-DPLRHEJZ.js → chunk-5LXQPP2K.js} +4 -33
  11. package/dist/chunk-5LXQPP2K.js.map +1 -0
  12. package/dist/{chunk-NQS7NFGM.js → chunk-5NQIBJPP.js} +4 -4
  13. package/dist/{chunk-NQS7NFGM.js.map → chunk-5NQIBJPP.js.map} +1 -1
  14. package/dist/{chunk-NXWKMKZY.js → chunk-5RQOVALO.js} +3 -3
  15. package/dist/{chunk-NXWKMKZY.js.map → chunk-5RQOVALO.js.map} +1 -1
  16. package/dist/chunk-AUS3KBHJ.js +52 -0
  17. package/dist/chunk-AUS3KBHJ.js.map +1 -0
  18. package/dist/{chunk-TMKJACMP.cjs → chunk-DDYXFALG.cjs} +44 -44
  19. package/dist/{chunk-TMKJACMP.cjs.map → chunk-DDYXFALG.cjs.map} +1 -1
  20. package/dist/chunk-DVUZTGVL.cjs +52 -0
  21. package/dist/chunk-DVUZTGVL.cjs.map +1 -0
  22. package/dist/{chunk-UCAYNE44.cjs → chunk-EHF63UYP.cjs} +5 -5
  23. package/dist/{chunk-UCAYNE44.cjs.map → chunk-EHF63UYP.cjs.map} +1 -1
  24. package/dist/{chunk-IC2VHFWR.js → chunk-JJA6GQKH.js} +8 -3
  25. package/dist/chunk-JJA6GQKH.js.map +1 -0
  26. package/dist/{chunk-YX466FWL.js → chunk-PGDL26TQ.js} +68 -33
  27. package/dist/chunk-PGDL26TQ.js.map +1 -0
  28. package/dist/components/tones.d.ts +5 -0
  29. package/dist/connect/index.cjs +24 -23
  30. package/dist/connect/index.cjs.map +1 -1
  31. package/dist/connect/index.js +4 -3
  32. package/dist/connect/index.js.map +1 -1
  33. package/dist/facts/index.cjs +2 -2
  34. package/dist/facts/index.js +1 -1
  35. package/dist/files/ViewToggle.d.ts +6 -1
  36. package/dist/files/index.cjs +8 -7
  37. package/dist/files/index.cjs.map +1 -1
  38. package/dist/files/index.js +3 -2
  39. package/dist/files/index.js.map +1 -1
  40. package/dist/index.cjs +320 -311
  41. package/dist/index.cjs.map +1 -1
  42. package/dist/index.d.ts +1 -0
  43. package/dist/index.js +6 -5
  44. package/dist/index.js.map +1 -1
  45. package/dist/settings/index.cjs +6 -5
  46. package/dist/settings/index.cjs.map +1 -1
  47. package/dist/settings/index.js +2 -1
  48. package/dist/settings/index.js.map +1 -1
  49. package/dist/site/index.cjs +4 -3
  50. package/dist/site/index.js +2 -1
  51. package/dist/workflow-canvas/FieldOptionsEditor.d.ts +25 -0
  52. package/dist/workflow-canvas/StepInspector.d.ts +6 -2
  53. package/dist/workflow-canvas/index.cjs +176 -47
  54. package/dist/workflow-canvas/index.cjs.map +1 -1
  55. package/dist/workflow-canvas/index.d.ts +1 -0
  56. package/dist/workflow-canvas/index.js +133 -6
  57. package/dist/workflow-canvas/index.js.map +1 -1
  58. package/package.json +4 -4
  59. package/dist/chunk-5XZU64E2.cjs.map +0 -1
  60. package/dist/chunk-DPLRHEJZ.js.map +0 -1
  61. package/dist/chunk-IC2VHFWR.js.map +0 -1
  62. package/dist/chunk-VFUWWH52.cjs +0 -83
  63. package/dist/chunk-VFUWWH52.cjs.map +0 -1
  64. package/dist/chunk-YX466FWL.js.map +0 -1
  65. package/dist/chunk-ZPERNIMP.cjs.map +0 -1
@@ -53,6 +53,10 @@ function ViewToggleItem({
53
53
  )
54
54
  );
55
55
  }
56
+ var CONTAINER_LABEL_CLASS = {
57
+ "32rem": "hidden @lg:inline text-sm",
58
+ "40rem": "hidden @[40rem]:inline text-sm"
59
+ };
56
60
  function ViewToggle({
57
61
  options,
58
62
  value,
@@ -62,9 +66,10 @@ function ViewToggle({
62
66
  hideTooltips = false,
63
67
  size = "default",
64
68
  containerCollapse = false,
69
+ labelsFrom = "32rem",
65
70
  className
66
71
  }) {
67
- const labelClassName = containerCollapse ? "hidden @lg:inline text-sm" : "hidden md:inline text-sm";
72
+ const labelClassName = containerCollapse ? CONTAINER_LABEL_CLASS[labelsFrom] : "hidden md:inline text-sm";
68
73
  return /* @__PURE__ */ jsx(
69
74
  ToggleGroup,
70
75
  {
@@ -154,5 +159,5 @@ function DocumentViewToggle({
154
159
  }
155
160
 
156
161
  export { DEFAULT_DOCUMENT_VIEW_TOGGLE_LABELS, DocumentViewToggle, ViewToggle };
157
- //# sourceMappingURL=chunk-IC2VHFWR.js.map
158
- //# sourceMappingURL=chunk-IC2VHFWR.js.map
162
+ //# sourceMappingURL=chunk-JJA6GQKH.js.map
163
+ //# sourceMappingURL=chunk-JJA6GQKH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/files/ViewToggle.tsx"],"names":[],"mappings":"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","file":"chunk-JJA6GQKH.js","sourcesContent":["import { useRef, useState, type ReactNode } from 'react'\nimport { BookOpen, FileImage, Search, Table2 } from 'lucide-react'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n ToggleGroup,\n ToggleGroupItem,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n cn,\n} from '@arbidocs/react/ui'\nimport { testIdOr } from '../chat/test-id'\n\n/** Names of the four document view modes. Pass a partial `labels` to translate or reword. */\nexport interface DocumentViewToggleLabels {\n gallery: string\n table: string\n review: string\n smartSearch: string\n}\n\nexport const DEFAULT_DOCUMENT_VIEW_TOGGLE_LABELS: DocumentViewToggleLabels = {\n gallery: 'Gallery',\n table: 'Table',\n review: 'Review',\n smartSearch: 'Smart Search',\n}\n\nexport interface ViewToggleOption {\n value: string\n icon: ReactNode\n label: string\n /** Overrides this item's test id (default `${testIdPrefix}-${value}-button`). */\n testId?: string\n}\n\nexport interface ViewToggleProps {\n options: ViewToggleOption[]\n value: string\n onChange: (value: string) => void\n /** Item test ids are `${testIdPrefix}-${value}-button` unless an option sets its own `testId`. */\n testIdPrefix?: string\n showLabels?: boolean\n hideTooltips?: boolean\n size?: 'default' | 'sm'\n /**\n * Collapse labels to icons by the width of the nearest `@container` ancestor instead of the\n * viewport. The consumer must mark that region `@container`.\n */\n containerCollapse?: boolean\n /**\n * With `containerCollapse`: the container width from which labels show (default `32rem`). More\n * options need a wider container before their labels fit.\n */\n labelsFrom?: '32rem' | '40rem'\n className?: string\n}\n\ninterface ViewToggleItemProps {\n option: ViewToggleOption\n size: 'default' | 'sm'\n testIdPrefix: string\n showLabel: boolean\n labelClassName: string\n hideTooltip: boolean\n}\n\nfunction ViewToggleItem({\n option,\n size,\n testIdPrefix,\n showLabel,\n labelClassName,\n hideTooltip,\n}: ViewToggleItemProps) {\n const labelRef = useRef<HTMLSpanElement>(null)\n const [isTipNeeded, setIsTipNeeded] = useState(true)\n // A control that shows its own text needs no tooltip repeating it; when the container is too\n // narrow and the label collapses to the icon, the tooltip is the label.\n const isLabelShown = () => !!labelRef.current && labelRef.current.offsetParent !== null\n const content = (\n <span\n className=\"flex items-center gap-1.5\"\n onPointerEnter={() => setIsTipNeeded(!isLabelShown())}\n onFocus={() => setIsTipNeeded(!isLabelShown())}\n >\n {option.icon}\n {showLabel && (\n <span ref={labelRef} className={labelClassName}>\n {option.label}\n </span>\n )}\n </span>\n )\n return (\n // The tooltip lives INSIDE the item: wrapping the ToggleGroupItem would make Radix\n // Tooltip's data-state collide with the toggle's on/off state.\n <ToggleGroupItem\n value={option.value}\n aria-label={option.label}\n size={size}\n className=\"rounded-[5px] border-0 bg-transparent text-muted-foreground pointer-coarse:min-h-11 data-[state=off]:hover:bg-background/60 data-[state=off]:hover:text-foreground data-[state=on]:bg-accent data-[state=on]:text-accent-foreground data-[state=on]:hover:bg-accent data-[state=on]:hover:text-accent-foreground\"\n data-testid={option.testId ?? `${testIdPrefix}-${option.value}-button`}\n >\n {hideTooltip ? (\n content\n ) : (\n <Tooltip>\n <TooltipTrigger asChild>{content}</TooltipTrigger>\n {isTipNeeded && <TooltipContent>{option.label}</TooltipContent>}\n </Tooltip>\n )}\n </ToggleGroupItem>\n )\n}\n\n/** Labels shown from a container width on (spelled out so Tailwind sees each class). */\nconst CONTAINER_LABEL_CLASS = {\n '32rem': 'hidden @lg:inline text-sm',\n '40rem': 'hidden @[40rem]:inline text-sm',\n} as const\n\n/** Segmented view switch: selected = accent tint, tone-only hover, 44px targets on touch. */\nexport function ViewToggle({\n options,\n value,\n onChange,\n testIdPrefix = 'view',\n showLabels = false,\n hideTooltips = false,\n size = 'default',\n containerCollapse = false,\n labelsFrom = '32rem',\n className,\n}: ViewToggleProps) {\n const labelClassName = containerCollapse\n ? CONTAINER_LABEL_CLASS[labelsFrom]\n : 'hidden md:inline text-sm'\n return (\n <ToggleGroup\n variant=\"default\"\n type=\"single\"\n value={value}\n onValueChange={(next) => next && onChange(next)}\n className={cn('gap-0.5 rounded-md bg-muted p-0.5', className)}\n >\n {options.map((option) => (\n <ViewToggleItem\n key={option.value}\n option={option}\n size={size}\n testIdPrefix={testIdPrefix}\n showLabel={showLabels}\n labelClassName={labelClassName}\n hideTooltip={hideTooltips}\n />\n ))}\n </ToggleGroup>\n )\n}\n\nexport type DocumentViewMode = 'grid' | 'explorer' | 'navigator' | 'search'\n\nfunction documentViewOptions(l: DocumentViewToggleLabels): ViewToggleOption[] {\n return [\n // \"Gallery\" (page-preview grid) reads more conventionally than \"Tiles\".\n { value: 'explorer', icon: <FileImage className=\"size-3.5\" />, label: l.gallery },\n { value: 'grid', icon: <Table2 className=\"size-3.5\" />, label: l.table },\n { value: 'navigator', icon: <BookOpen className=\"size-3.5\" />, label: l.review },\n { value: 'search', icon: <Search className=\"size-3.5\" />, label: l.smartSearch },\n ]\n}\n\nexport interface DocumentViewToggleProps {\n viewMode: DocumentViewMode\n onChange: (mode: DocumentViewMode) => void\n /** Collapse the four modes into one select trigger (narrow viewports). */\n compact?: boolean\n labels?: Partial<DocumentViewToggleLabels>\n /** Overrides the segmented items' prefix (default `documents-layout`: `<prefix>-<mode>-button`). */\n testIdPrefix?: string\n /** Per-mode item ids, for hosts that keep their own (e.g. `documents-view-gallery`). */\n testIds?: Partial<Record<DocumentViewMode, string>>\n /** Overrides the compact select test ids (defaults keep the current ids). */\n compactTestIds?: Partial<{ select: string; option: (mode: DocumentViewMode) => string }>\n}\n\n/** The Documents page's Gallery / Table / Review / Smart Search switch. */\nexport function DocumentViewToggle({\n viewMode,\n onChange,\n compact,\n labels,\n testIdPrefix,\n testIds,\n compactTestIds,\n}: DocumentViewToggleProps) {\n const options = documentViewOptions({ ...DEFAULT_DOCUMENT_VIEW_TOGGLE_LABELS, ...labels }).map(\n (o) => ({ ...o, testId: testIds?.[o.value as DocumentViewMode] })\n )\n if (compact) {\n const current = options.find((o) => o.value === viewMode) ?? options[0]\n return (\n <Select value={viewMode} onValueChange={(v) => onChange(v as DocumentViewMode)}>\n <SelectTrigger\n className=\"h-7 w-10 justify-center gap-0 border-input p-0 pointer-coarse:h-11! pointer-coarse:w-11! shrink-0 [&>svg]:hidden\"\n aria-label={current.label}\n data-testid={testIdOr(compactTestIds?.select, {\n testId: 'documents-layout-compact-select',\n })}\n >\n <SelectValue>{current.icon}</SelectValue>\n </SelectTrigger>\n <SelectContent align=\"center\">\n {options.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n data-testid={testIdOr(compactTestIds?.option?.(option.value as DocumentViewMode), {\n testId: `documents-layout-compact-${option.value}-option`,\n })}\n >\n <span className=\"flex items-center gap-2\">\n {option.icon}\n {option.label}\n </span>\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n )\n }\n return (\n <ViewToggle\n options={options}\n value={viewMode}\n onChange={(v) => onChange(v as DocumentViewMode)}\n testIdPrefix={testIdPrefix ?? 'documents-layout'}\n showLabels\n containerCollapse\n size=\"sm\"\n />\n )\n}\n"]}
@@ -1,12 +1,13 @@
1
1
  "use client";
2
2
  import { UploadDropzone } from './chunk-EVUEIBNU.js';
3
+ import { isTone, TONE_DOT, TONE_SURFACE, TONE_SOLID_BORDER, TONE_BORDER } from './chunk-AUS3KBHJ.js';
3
4
  import { FoldSection } from './chunk-XD2M6LIG.js';
4
5
  import { useElementSize } from './chunk-HOXKR26S.js';
5
6
  import { testIdOr, prefixedTestId } from './chunk-7F6CBP3Z.js';
6
7
  import { useState, useRef, useEffect, useCallback, useMemo } from 'react';
8
+ import { Check, Loader2, Hourglass, AlertTriangle, MinusCircle, UserRound, CornerUpLeft, ShieldCheck, MessageSquare, Clock, PenLine, X, ExternalLink, Mail, Table2, CheckCircle2, ArrowLeft, ArrowRight, RotateCw, GitBranch, ChevronLeft, ChevronRight, FileText, ArrowUpRight, BellRing, Flag, RotateCcw, Play, UserRoundCog, Sparkles, MessageSquareReply, Square, KeyRound, Lock } from 'lucide-react';
7
9
  import { cn, Popover, PopoverTrigger, PopoverContent, Button, Textarea, Card, Label, Input, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Switch } from '@arbidocs/react/ui';
8
10
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
9
- import { Check, Loader2, Hourglass, AlertTriangle, MinusCircle, UserRound, CornerUpLeft, ShieldCheck, MessageSquare, Clock, PenLine, X, ExternalLink, Mail, Table2, CheckCircle2, ArrowLeft, ArrowRight, RotateCw, GitBranch, ChevronLeft, ChevronRight, FileText, ArrowUpRight, BellRing, Flag, RotateCcw, Play, UserRoundCog, Sparkles, MessageSquareReply, Square, KeyRound, Lock } from 'lucide-react';
10
11
 
11
12
  // src/agents/workflows/types.ts
12
13
  var EMPTY_WORKFLOW_SCOPE = { folders: [], labels: [] };
@@ -199,7 +200,8 @@ function fieldFromFrontmatter(raw) {
199
200
  label,
200
201
  description: str(ro.description),
201
202
  text: str(ro.text),
202
- icon: str(ro.icon)
203
+ icon: str(ro.icon),
204
+ tone: isTone(ro.tone) ? ro.tone : void 0
203
205
  }
204
206
  ] : [];
205
207
  }) : void 0;
@@ -254,7 +256,8 @@ function fieldToFrontmatter(field) {
254
256
  label: o.label,
255
257
  description: o.description,
256
258
  text: o.text,
257
- icon: o.icon
259
+ icon: o.icon,
260
+ tone: o.tone
258
261
  })
259
262
  ),
260
263
  min: field.min,
@@ -373,40 +376,28 @@ function FieldControl({
373
376
  case "select": {
374
377
  const options = field.options ?? [];
375
378
  if (options.length > 0 && options.length <= TILE_MAX) {
379
+ const compact3 = options.every((o) => !o.icon && !o.description);
376
380
  return /* @__PURE__ */ jsx(
377
381
  "div",
378
382
  {
379
383
  role: "radiogroup",
380
384
  "aria-label": field.label,
381
- className: "grid grid-cols-2 gap-2 sm:grid-cols-4",
385
+ className: "flex flex-wrap gap-2",
382
386
  "data-testid": testId,
383
- children: options.map((option) => {
384
- const selected = value === option.value;
385
- return /* @__PURE__ */ jsxs(
386
- "button",
387
- {
388
- type: "button",
389
- role: "radio",
390
- "aria-checked": selected,
391
- "data-testid": prefixedTestId(testId, option.value, {
392
- testId: `workflow-field-${field.name}-${option.value}`
393
- }),
394
- onClick: () => {
395
- onChange(option.value);
396
- },
397
- className: cn(
398
- "flex min-h-24 flex-col items-center justify-center gap-1.5 rounded-lg border p-3 text-center transition-colors pointer-coarse:min-h-28 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
399
- selected ? "border-primary bg-primary/10" : "border-border bg-card [&:hover]:border-primary [&:hover]:bg-muted"
400
- ),
401
- children: [
402
- option.icon && renderIcon && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: renderIcon(option.icon) }),
403
- /* @__PURE__ */ jsx("span", { className: "text-sm font-medium text-foreground", children: option.label }),
404
- option.description && /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: option.description })
405
- ]
406
- },
407
- option.value
408
- );
409
- })
387
+ children: options.map((option) => /* @__PURE__ */ jsx(
388
+ ChoiceTile,
389
+ {
390
+ option,
391
+ selected: value === option.value,
392
+ compact: compact3,
393
+ renderIcon,
394
+ testId: prefixedTestId(testId, option.value, {
395
+ testId: `workflow-field-${field.name}-${option.value}`
396
+ }),
397
+ onSelect: () => onChange(option.value)
398
+ },
399
+ option.value
400
+ ))
410
401
  }
411
402
  );
412
403
  }
@@ -453,6 +444,50 @@ function FieldControl({
453
444
  );
454
445
  }
455
446
  }
447
+ function ChoiceTile({
448
+ option,
449
+ selected,
450
+ compact: compact3,
451
+ renderIcon,
452
+ testId,
453
+ onSelect
454
+ }) {
455
+ const tone = option.tone;
456
+ return /* @__PURE__ */ jsxs(
457
+ "button",
458
+ {
459
+ type: "button",
460
+ role: "radio",
461
+ "aria-checked": selected,
462
+ "data-testid": testId,
463
+ "data-tone": tone,
464
+ onClick: onSelect,
465
+ className: cn(
466
+ // Sized to its label (flex-basis auto), growing to share the row, never wider than it.
467
+ "flex max-w-full min-w-[min(4rem,100%)] flex-auto flex-col items-center justify-center gap-1.5 rounded-lg border text-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
468
+ compact3 ? "min-h-9 px-3 py-1.5 pointer-coarse:min-h-11" : "min-h-24 p-3 pointer-coarse:min-h-28",
469
+ tone ? selected ? cn(TONE_SURFACE[tone], TONE_SOLID_BORDER[tone]) : cn(TONE_BORDER[tone], "bg-card [&:hover]:bg-muted") : selected ? "border-primary bg-primary/10" : "border-border bg-card [&:hover]:border-primary [&:hover]:bg-muted"
470
+ ),
471
+ children: [
472
+ option.icon && renderIcon && /* @__PURE__ */ jsx("span", { className: "text-muted-foreground", children: renderIcon(option.icon) }),
473
+ /* @__PURE__ */ jsxs(
474
+ "span",
475
+ {
476
+ className: cn(
477
+ "flex max-w-full items-center gap-1.5 text-sm font-medium",
478
+ tone && selected ? void 0 : "text-foreground"
479
+ ),
480
+ children: [
481
+ selected ? /* @__PURE__ */ jsx(Check, { className: "size-3.5 shrink-0", "aria-hidden": true }) : tone && /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: cn("size-2 shrink-0 rounded-full", TONE_DOT[tone]) }),
482
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 break-words", children: option.label })
483
+ ]
484
+ }
485
+ ),
486
+ option.description && /* @__PURE__ */ jsx("span", { className: "max-w-full text-xs break-words text-muted-foreground", children: option.description })
487
+ ]
488
+ }
489
+ );
490
+ }
456
491
  function FormField(props) {
457
492
  const { field, error, l, idFor } = props;
458
493
  const isBoolean = field.type === "boolean";
@@ -3091,5 +3126,5 @@ function TaskActivityTimeline({
3091
3126
  }
3092
3127
 
3093
3128
  export { ActionStepBody, ApprovalEvidence, AssigneeLine, DEFAULT_ASSIGNEE_WORDING, DEFAULT_SCHEMA_FORM_LABELS, DEFAULT_STEP_BAR_LABELS, DEFAULT_TASK_ACTIVITY_LABELS, DEFAULT_WORKFLOW_RUNNER_LABELS, DEFAULT_WORKFLOW_STEP_PARTS_LABELS, EMPTY_WORKFLOW_SCOPE, PhaseMark, SKILL_PROMPT_FALLBACK_PLACEHOLDER, SKILL_PROMPT_LABEL, STEP_EXTRA, STEP_LABEL, STEP_LABEL_CURRENT, STEP_LABEL_MAX, STEP_PILL, SchemaForm, SendBackControl, StepBarFrame, TaskActivityTimeline, WorkflowRunner, WorkflowStepBar, activeStepId, assigneeName, buildLaunch, canAssign, composeStepPrompt, composeWorkflowPrompt, defaultInputs, dependsOn, eventWaitingDocuments, fieldToFrontmatter, fillRunText, fillStepInputs, fromPlanAssignee, fromPlanDocumentRef, fromPlanSteps, initialRunInputs, inputsFromContext, isEmptyWorkflowScope, isIncompleteSignal, isPersonAction, isPersonStep, isRunFinished, isSteppedWorkflow, isWorkflowScope, layoutFromPlanSteps, nextAction, orderSteps, promptFieldName, reviewInstructions, runFields, runFieldsOf, runThreadTitle, sendBackTargets, skillToWorkflow, splitDocRef, stepConfigProblems, stepDependencies, stepFields, stepLevels, stepPhase, stepPillTone, stepStatesFromActivity, stepWindow, taskActivityHeadline, toPlanAssignee, toPlanDocumentRef, toPlanSteps, upstreamSteps, useWorkflowView, validateInputs, validateStep, validateWorkflowGraph, waitingDocuments, waitingForDocumentsText, workflowAccepts, workflowFromFrontmatter, workflowSteps, workflowsAccepting, workflowsForHost };
3094
- //# sourceMappingURL=chunk-YX466FWL.js.map
3095
- //# sourceMappingURL=chunk-YX466FWL.js.map
3129
+ //# sourceMappingURL=chunk-PGDL26TQ.js.map
3130
+ //# sourceMappingURL=chunk-PGDL26TQ.js.map