@datatechsolutions/ui 2.11.78 → 2.11.80
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/astrlabe/index.d.mts +38 -3
- package/dist/astrlabe/index.d.ts +38 -3
- package/dist/astrlabe/index.js +414 -111
- package/dist/astrlabe/index.js.map +1 -1
- package/dist/astrlabe/index.mjs +309 -7
- package/dist/astrlabe/index.mjs.map +1 -1
- package/dist/astrlabe/workflow-canvas.js +2 -2
- package/dist/astrlabe/workflow-canvas.mjs +1 -1
- package/dist/{chunk-3VHSRL3N.mjs → chunk-J3OYJ44D.mjs} +10 -4
- package/dist/chunk-J3OYJ44D.mjs.map +1 -0
- package/dist/{chunk-BCE3FQVS.js → chunk-M7P2TQ6X.js} +10 -4
- package/dist/chunk-M7P2TQ6X.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-3VHSRL3N.mjs.map +0 -1
- package/dist/chunk-BCE3FQVS.js.map +0 -1
package/dist/astrlabe/index.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import '../chunk-JB6RNAD2.mjs';
|
|
3
3
|
export { topologicalSortAgents, validateGraphNodeConfigs, validateNodeConfig, validateWorkflowGraph } from '../chunk-53SRKVKQ.mjs';
|
|
4
|
-
import { Workspace, useModalStore, CATEGORY_COLORS, CATEGORY_PILL_COLORS, ICON_MAP, WorkflowCanvas, getEntityIcon, getEntityGradient, useWorkflowStore, LOGIC_ICON_MAP, LOGIC_NODE_GRADIENTS, getFrameworkMeta, getCompatibleModels, isModelCompatibleWithFramework, FRAMEWORK_META, isFrameworkCompatibleWithProviders } from '../chunk-
|
|
5
|
-
export { AgentFlowNode, AgentToolFlowNode, AnswerFlowNode, AnthropicIcon, CodeFlowNode, CrewAIIcon, DocumentExtractorFlowNode, EndFlowNode, EntityFlowNode, FRAMEWORK_META, GoogleADKIcon, GroupFlowNode, HttpRequestFlowNode, IfElseFlowNode, IterationFlowNode, IterationStartFlowNode, KnowledgeBaseFlowNode, LOGIC_ICON_MAP, LOGIC_NODE_BADGE_COLORS, LOGIC_NODE_GRADIENTS, LOGIC_NODE_HANDLE_COLORS, LangChainIcon, ListOperatorFlowNode, LogicNodeModal, MINIMAP_NODE_COLORS, ModelProviderFlowNode, NODE_EXECUTION_ACCENT_COLORS, NodeCard, NodeContextMenu, NoteFlowNode, OpenAIIcon, PanelContextMenu, ParameterExtractorFlowNode, QuestionClassifierFlowNode, RuleFlowNode, SelectionContextMenu, StartFlowNode, StrandsIcon, TemplateTransformFlowNode, ToolFlowNode, VariableAggregatorFlowNode, VariableAssignerFlowNode, WorkflowBuilderProvider, Workspace, getCompatibleModels, getDefaultFrameworkForModel, getEntityBadgeColor, getEntityGradient, getEntityHandleColor, getEntityIcon, getEntityMinimapColor, getFrameworkMeta, getNodeExecutionAccent, getNodeExecutionAccentRgb, isModelCompatibleWithFramework, useModalStore, useWorkflowBuilderClient, useWorkflowBuilderClientOptional, useWorkflowStore } from '../chunk-
|
|
4
|
+
import { Workspace, useModalStore, CATEGORY_COLORS, CATEGORY_PILL_COLORS, ICON_MAP, WorkflowCanvas, getEntityIcon, getEntityGradient, useWorkflowStore, LOGIC_ICON_MAP, LOGIC_NODE_GRADIENTS, getFrameworkMeta, getCompatibleModels, isModelCompatibleWithFramework, FRAMEWORK_META, isFrameworkCompatibleWithProviders } from '../chunk-J3OYJ44D.mjs';
|
|
5
|
+
export { AgentFlowNode, AgentToolFlowNode, AnswerFlowNode, AnthropicIcon, CodeFlowNode, CrewAIIcon, DocumentExtractorFlowNode, EndFlowNode, EntityFlowNode, FRAMEWORK_META, GoogleADKIcon, GroupFlowNode, HttpRequestFlowNode, IfElseFlowNode, IterationFlowNode, IterationStartFlowNode, KnowledgeBaseFlowNode, LOGIC_ICON_MAP, LOGIC_NODE_BADGE_COLORS, LOGIC_NODE_GRADIENTS, LOGIC_NODE_HANDLE_COLORS, LangChainIcon, ListOperatorFlowNode, LogicNodeModal, MINIMAP_NODE_COLORS, ModelProviderFlowNode, NODE_EXECUTION_ACCENT_COLORS, NodeCard, NodeContextMenu, NoteFlowNode, OpenAIIcon, PanelContextMenu, ParameterExtractorFlowNode, QuestionClassifierFlowNode, RuleFlowNode, SelectionContextMenu, StartFlowNode, StrandsIcon, TemplateTransformFlowNode, ToolFlowNode, VariableAggregatorFlowNode, VariableAssignerFlowNode, WorkflowBuilderProvider, Workspace, getCompatibleModels, getDefaultFrameworkForModel, getEntityBadgeColor, getEntityGradient, getEntityHandleColor, getEntityIcon, getEntityMinimapColor, getFrameworkMeta, getNodeExecutionAccent, getNodeExecutionAccentRgb, isModelCompatibleWithFramework, useModalStore, useWorkflowBuilderClient, useWorkflowBuilderClientOptional, useWorkflowStore } from '../chunk-J3OYJ44D.mjs';
|
|
6
6
|
import { GlassModal, Button, FormInput, FormTextarea, FormSelect, FormGrid, Badge, ToggleSwitch, Input, DynamicIslandConfirm } from '../chunk-LLFU42KC.mjs';
|
|
7
7
|
import { useTranslations } from '../chunk-7VJ7CMMT.mjs';
|
|
8
8
|
import '../chunk-QWG2FMUN.mjs';
|
|
@@ -11,7 +11,7 @@ export { GraphNodeBadge, GraphNodeHeader, GraphNodeIconBubble, GraphNodeMeta } f
|
|
|
11
11
|
import { getAgentTier, createDefaultLogicNodeConfig } from '../chunk-WNCPAWLC.mjs';
|
|
12
12
|
export { applyDagreLayout, createDefaultLogicNodeConfig, getAgentTier } from '../chunk-WNCPAWLC.mjs';
|
|
13
13
|
import { memo, useCallback, useState, useEffect, useMemo, useRef, Children } from 'react';
|
|
14
|
-
import { UserCircleIcon, Cog6ToothIcon, SparklesIcon, CommandLineIcon, KeyIcon, PlayCircleIcon, CpuChipIcon, ArrowPathRoundedSquareIcon, ArrowsPointingOutIcon, ArrowsPointingInIcon, BoltIcon, ClockIcon, CheckIcon, AdjustmentsHorizontalIcon, CircleStackIcon, TrashIcon, PlusIcon, XMarkIcon, EyeIcon,
|
|
14
|
+
import { UserCircleIcon, Cog6ToothIcon, SparklesIcon, CommandLineIcon, KeyIcon, PlayCircleIcon, CpuChipIcon, ArrowPathRoundedSquareIcon, ArrowsPointingOutIcon, ArrowsPointingInIcon, BoltIcon, ClockIcon, CheckIcon, ArrowPathIcon, AdjustmentsHorizontalIcon, CircleStackIcon, TrashIcon, PlusIcon, XMarkIcon, EyeIcon, PlayIcon, StopIcon, XCircleIcon, CheckCircleIcon, VariableIcon, ChevronDownIcon, ChevronRightIcon, ExclamationCircleIcon, ClipboardDocumentIcon, ArrowDownTrayIcon, ArrowUpTrayIcon, ExclamationTriangleIcon } from '@heroicons/react/24/outline';
|
|
15
15
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
16
16
|
import { create } from 'zustand';
|
|
17
17
|
|
|
@@ -1396,20 +1396,47 @@ function PipelineSettingsModal({ onSave }) {
|
|
|
1396
1396
|
const open = activeModal === "pipeline-settings";
|
|
1397
1397
|
const [nameValue, setNameValue] = useState("");
|
|
1398
1398
|
const [descriptionValue, setDescriptionValue] = useState("");
|
|
1399
|
+
const [slugValue, setSlugValue] = useState("");
|
|
1400
|
+
const [isDraft, setIsDraft] = useState(true);
|
|
1401
|
+
const [isActive, setIsActive] = useState(true);
|
|
1399
1402
|
const [isSaving, setIsSaving] = useState(false);
|
|
1403
|
+
const lifecycleAvailable = useMemo(() => {
|
|
1404
|
+
if (!data) return false;
|
|
1405
|
+
return data.isDraft !== void 0 || data.isActive !== void 0 || data.slug !== void 0;
|
|
1406
|
+
}, [data]);
|
|
1400
1407
|
useEffect(() => {
|
|
1401
1408
|
if (data) {
|
|
1402
1409
|
setNameValue(data.name);
|
|
1403
1410
|
setDescriptionValue(data.description);
|
|
1411
|
+
setSlugValue(data.slug ?? "");
|
|
1412
|
+
setIsDraft(data.isDraft ?? true);
|
|
1413
|
+
setIsActive(data.isActive ?? true);
|
|
1404
1414
|
}
|
|
1405
1415
|
}, [data]);
|
|
1406
1416
|
const handleSubmit = async (event) => {
|
|
1407
1417
|
event.preventDefault();
|
|
1408
1418
|
const trimmedName = nameValue.trim();
|
|
1409
1419
|
if (!trimmedName) return;
|
|
1420
|
+
const trimmedDescription = descriptionValue.trim();
|
|
1421
|
+
const trimmedSlug = slugValue.trim();
|
|
1422
|
+
const changes = {
|
|
1423
|
+
name: trimmedName,
|
|
1424
|
+
description: trimmedDescription
|
|
1425
|
+
};
|
|
1426
|
+
if (data) {
|
|
1427
|
+
if (trimmedSlug !== (data.slug ?? "")) {
|
|
1428
|
+
changes.slug = trimmedSlug.length > 0 ? trimmedSlug : null;
|
|
1429
|
+
}
|
|
1430
|
+
if (data.isDraft !== void 0 && isDraft !== data.isDraft) {
|
|
1431
|
+
changes.isDraft = isDraft;
|
|
1432
|
+
}
|
|
1433
|
+
if (data.isActive !== void 0 && isActive !== data.isActive) {
|
|
1434
|
+
changes.isActive = isActive;
|
|
1435
|
+
}
|
|
1436
|
+
}
|
|
1410
1437
|
setIsSaving(true);
|
|
1411
1438
|
try {
|
|
1412
|
-
await onSave(
|
|
1439
|
+
await onSave(changes);
|
|
1413
1440
|
closeModal();
|
|
1414
1441
|
} catch {
|
|
1415
1442
|
} finally {
|
|
@@ -1454,7 +1481,7 @@ function PipelineSettingsModal({ onSave }) {
|
|
|
1454
1481
|
maxWidth: "md",
|
|
1455
1482
|
footer,
|
|
1456
1483
|
onSubmit: handleSubmit,
|
|
1457
|
-
children: /* @__PURE__ */ jsxs("form", { id: "pipeline-settings-form", onSubmit: handleSubmit, className: "space-y-
|
|
1484
|
+
children: /* @__PURE__ */ jsxs("form", { id: "pipeline-settings-form", onSubmit: handleSubmit, className: "space-y-5", children: [
|
|
1458
1485
|
/* @__PURE__ */ jsx(
|
|
1459
1486
|
FormInput,
|
|
1460
1487
|
{
|
|
@@ -1474,11 +1501,286 @@ function PipelineSettingsModal({ onSave }) {
|
|
|
1474
1501
|
placeholder: t("pipelineDescriptionPlaceholder"),
|
|
1475
1502
|
rows: 4
|
|
1476
1503
|
}
|
|
1477
|
-
)
|
|
1504
|
+
),
|
|
1505
|
+
lifecycleAvailable && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1506
|
+
/* @__PURE__ */ jsx(
|
|
1507
|
+
FormInput,
|
|
1508
|
+
{
|
|
1509
|
+
label: t("pipelineSlug", { _: "Slug" }),
|
|
1510
|
+
value: slugValue,
|
|
1511
|
+
onValueChange: setSlugValue,
|
|
1512
|
+
placeholder: "fuel-pricing",
|
|
1513
|
+
hint: t("pipelineSlugHint", {
|
|
1514
|
+
_: "URL-friendly identifier. Leave blank to use the auto-generated one."
|
|
1515
|
+
})
|
|
1516
|
+
}
|
|
1517
|
+
),
|
|
1518
|
+
/* @__PURE__ */ jsxs("fieldset", { className: "space-y-2 rounded-xl border border-gray-200/60 bg-gray-50/60 p-3 dark:border-white/10 dark:bg-white/5", children: [
|
|
1519
|
+
/* @__PURE__ */ jsx("legend", { className: "px-1 text-xs font-medium text-gray-600 dark:text-gray-300", children: t("pipelineLifecycle", { _: "Lifecycle" }) }),
|
|
1520
|
+
/* @__PURE__ */ jsxs("label", { className: "flex items-center justify-between gap-3 text-sm text-gray-700 dark:text-gray-200", children: [
|
|
1521
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
1522
|
+
t("pipelineIsDraft", { _: "Draft mode" }),
|
|
1523
|
+
/* @__PURE__ */ jsx("span", { className: "ml-2 text-[11px] text-gray-400", children: isDraft ? t("pipelineIsDraftOn", { _: "Editable \u2014 changes do not affect runs." }) : t("pipelineIsDraftOff", { _: "Published \u2014 edits require a new version." }) })
|
|
1524
|
+
] }),
|
|
1525
|
+
/* @__PURE__ */ jsx(
|
|
1526
|
+
"input",
|
|
1527
|
+
{
|
|
1528
|
+
type: "checkbox",
|
|
1529
|
+
checked: isDraft,
|
|
1530
|
+
onChange: (event) => setIsDraft(event.target.checked),
|
|
1531
|
+
className: "h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500"
|
|
1532
|
+
}
|
|
1533
|
+
)
|
|
1534
|
+
] }),
|
|
1535
|
+
/* @__PURE__ */ jsxs("label", { className: "flex items-center justify-between gap-3 text-sm text-gray-700 dark:text-gray-200", children: [
|
|
1536
|
+
/* @__PURE__ */ jsxs("span", { children: [
|
|
1537
|
+
t("pipelineIsActive", { _: "Active" }),
|
|
1538
|
+
/* @__PURE__ */ jsx("span", { className: "ml-2 text-[11px] text-gray-400", children: isActive ? t("pipelineIsActiveOn", { _: "Visible in listings and runnable." }) : t("pipelineIsActiveOff", { _: "Archived \u2014 hidden from the default listing." }) })
|
|
1539
|
+
] }),
|
|
1540
|
+
/* @__PURE__ */ jsx(
|
|
1541
|
+
"input",
|
|
1542
|
+
{
|
|
1543
|
+
type: "checkbox",
|
|
1544
|
+
checked: isActive,
|
|
1545
|
+
onChange: (event) => setIsActive(event.target.checked),
|
|
1546
|
+
className: "h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-500"
|
|
1547
|
+
}
|
|
1548
|
+
)
|
|
1549
|
+
] })
|
|
1550
|
+
] })
|
|
1551
|
+
] })
|
|
1478
1552
|
] })
|
|
1479
1553
|
}
|
|
1480
1554
|
);
|
|
1481
1555
|
}
|
|
1556
|
+
function RunReplayModal({
|
|
1557
|
+
open,
|
|
1558
|
+
onClose,
|
|
1559
|
+
runId,
|
|
1560
|
+
workflowId,
|
|
1561
|
+
originalInputs,
|
|
1562
|
+
onReplay
|
|
1563
|
+
}) {
|
|
1564
|
+
const t = useTranslations("agents.workflow");
|
|
1565
|
+
const [rows, setRows] = useState([]);
|
|
1566
|
+
const [submitting, setSubmitting] = useState(false);
|
|
1567
|
+
const [error, setError] = useState(null);
|
|
1568
|
+
useEffect(() => {
|
|
1569
|
+
if (!open) return;
|
|
1570
|
+
setRows(Object.entries(originalInputs).map(([key, value]) => toRow(key, value)));
|
|
1571
|
+
setError(null);
|
|
1572
|
+
}, [open, originalInputs]);
|
|
1573
|
+
const overrides = useMemo(() => {
|
|
1574
|
+
const out = {};
|
|
1575
|
+
for (const row of rows) {
|
|
1576
|
+
if (!row.touched) continue;
|
|
1577
|
+
try {
|
|
1578
|
+
out[row.key] = parseRow(row);
|
|
1579
|
+
} catch (e) {
|
|
1580
|
+
out[`__error__${row.key}`] = e.message;
|
|
1581
|
+
}
|
|
1582
|
+
}
|
|
1583
|
+
return out;
|
|
1584
|
+
}, [rows]);
|
|
1585
|
+
const hasParseError = Object.keys(overrides).some((k) => k.startsWith("__error__"));
|
|
1586
|
+
const updateRow = (index, patch) => {
|
|
1587
|
+
setRows((current) => current.map((r, i) => i === index ? { ...r, ...patch, touched: true } : r));
|
|
1588
|
+
};
|
|
1589
|
+
const resetRow = (index) => {
|
|
1590
|
+
setRows((current) => current.map((r, i) => {
|
|
1591
|
+
if (i !== index) return r;
|
|
1592
|
+
return toRow(r.key, r.original);
|
|
1593
|
+
}));
|
|
1594
|
+
};
|
|
1595
|
+
const handleSubmit = async () => {
|
|
1596
|
+
setError(null);
|
|
1597
|
+
if (hasParseError) {
|
|
1598
|
+
setError(t("replayParseError", { _: "One or more values do not match their declared type." }));
|
|
1599
|
+
return;
|
|
1600
|
+
}
|
|
1601
|
+
setSubmitting(true);
|
|
1602
|
+
try {
|
|
1603
|
+
const cleaned = {};
|
|
1604
|
+
for (const row of rows) {
|
|
1605
|
+
if (!row.touched) continue;
|
|
1606
|
+
cleaned[row.key] = parseRow(row);
|
|
1607
|
+
}
|
|
1608
|
+
await onReplay(cleaned);
|
|
1609
|
+
onClose();
|
|
1610
|
+
} catch (e) {
|
|
1611
|
+
setError(e.message);
|
|
1612
|
+
} finally {
|
|
1613
|
+
setSubmitting(false);
|
|
1614
|
+
}
|
|
1615
|
+
};
|
|
1616
|
+
const footer = /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
1617
|
+
/* @__PURE__ */ jsxs("span", { className: "text-[11px] text-gray-400", children: [
|
|
1618
|
+
"run ",
|
|
1619
|
+
/* @__PURE__ */ jsx("code", { children: runId.slice(0, 8) }),
|
|
1620
|
+
" \xB7 wf ",
|
|
1621
|
+
/* @__PURE__ */ jsx("code", { children: workflowId.slice(0, 8) })
|
|
1622
|
+
] }),
|
|
1623
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1624
|
+
/* @__PURE__ */ jsx(
|
|
1625
|
+
"button",
|
|
1626
|
+
{
|
|
1627
|
+
type: "button",
|
|
1628
|
+
onClick: onClose,
|
|
1629
|
+
className: "rounded-lg border border-gray-200/50 px-4 py-2 text-xs font-medium text-gray-600 transition-colors hover:bg-gray-100/50 dark:border-white/10 dark:text-gray-300 dark:hover:bg-white/5",
|
|
1630
|
+
children: t("cancel")
|
|
1631
|
+
}
|
|
1632
|
+
),
|
|
1633
|
+
/* @__PURE__ */ jsxs(
|
|
1634
|
+
Button,
|
|
1635
|
+
{
|
|
1636
|
+
type: "submit",
|
|
1637
|
+
form: "run-replay-form",
|
|
1638
|
+
color: "ios-glass-blue",
|
|
1639
|
+
loading: submitting,
|
|
1640
|
+
children: [
|
|
1641
|
+
/* @__PURE__ */ jsx(ArrowPathIcon, { className: "h-4 w-4" }),
|
|
1642
|
+
t("replay", { _: "Replay" })
|
|
1643
|
+
]
|
|
1644
|
+
}
|
|
1645
|
+
)
|
|
1646
|
+
] })
|
|
1647
|
+
] });
|
|
1648
|
+
return /* @__PURE__ */ jsx(
|
|
1649
|
+
GlassModal,
|
|
1650
|
+
{
|
|
1651
|
+
open,
|
|
1652
|
+
onClose,
|
|
1653
|
+
title: t("replayTitle", { _: "Replay run" }),
|
|
1654
|
+
subtitle: t("replaySubtitle", { _: "Tweak any input below and re-execute. Untouched keys keep their original value." }),
|
|
1655
|
+
icon: /* @__PURE__ */ jsx(ArrowPathIcon, { className: "h-5 w-5 text-white" }),
|
|
1656
|
+
gradient: "from-sky-500 to-indigo-600",
|
|
1657
|
+
maxWidth: "lg",
|
|
1658
|
+
footer,
|
|
1659
|
+
onSubmit: (event) => {
|
|
1660
|
+
event.preventDefault();
|
|
1661
|
+
void handleSubmit();
|
|
1662
|
+
},
|
|
1663
|
+
children: /* @__PURE__ */ jsxs(
|
|
1664
|
+
"form",
|
|
1665
|
+
{
|
|
1666
|
+
id: "run-replay-form",
|
|
1667
|
+
onSubmit: (event) => {
|
|
1668
|
+
event.preventDefault();
|
|
1669
|
+
void handleSubmit();
|
|
1670
|
+
},
|
|
1671
|
+
className: "space-y-3",
|
|
1672
|
+
children: [
|
|
1673
|
+
rows.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-xs text-gray-500 dark:text-gray-400", children: t("replayNoInputs", { _: "This run had no input variables \u2014 replaying will execute the workflow as-is." }) }) : rows.map((row, index) => /* @__PURE__ */ jsx(
|
|
1674
|
+
RowEditor,
|
|
1675
|
+
{
|
|
1676
|
+
row,
|
|
1677
|
+
onChange: (patch) => updateRow(index, patch),
|
|
1678
|
+
onReset: () => resetRow(index)
|
|
1679
|
+
},
|
|
1680
|
+
row.key
|
|
1681
|
+
)),
|
|
1682
|
+
error && /* @__PURE__ */ jsx("p", { className: "rounded-lg border border-red-400/40 bg-red-500/10 p-2 text-xs text-red-600 dark:text-red-300", children: error })
|
|
1683
|
+
]
|
|
1684
|
+
}
|
|
1685
|
+
)
|
|
1686
|
+
}
|
|
1687
|
+
);
|
|
1688
|
+
}
|
|
1689
|
+
function RowEditor({
|
|
1690
|
+
row,
|
|
1691
|
+
onChange,
|
|
1692
|
+
onReset
|
|
1693
|
+
}) {
|
|
1694
|
+
const isJson = row.kind === "json";
|
|
1695
|
+
return /* @__PURE__ */ jsxs("div", { className: "rounded-xl border border-gray-200/60 bg-gray-50/60 p-3 dark:border-white/10 dark:bg-white/5", children: [
|
|
1696
|
+
/* @__PURE__ */ jsxs("div", { className: "mb-2 flex items-center justify-between gap-2", children: [
|
|
1697
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-xs text-gray-700 dark:text-gray-200", children: row.key }),
|
|
1698
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
1699
|
+
/* @__PURE__ */ jsx("span", { className: "rounded-full bg-gray-200/60 px-2 py-0.5 text-[10px] uppercase tracking-wider text-gray-600 dark:bg-white/10 dark:text-gray-300", children: row.kind }),
|
|
1700
|
+
row.touched && /* @__PURE__ */ jsx(
|
|
1701
|
+
"button",
|
|
1702
|
+
{
|
|
1703
|
+
type: "button",
|
|
1704
|
+
onClick: onReset,
|
|
1705
|
+
className: "text-[11px] text-indigo-600 hover:text-indigo-500 dark:text-indigo-400",
|
|
1706
|
+
children: "reset"
|
|
1707
|
+
}
|
|
1708
|
+
)
|
|
1709
|
+
] })
|
|
1710
|
+
] }),
|
|
1711
|
+
row.kind === "boolean" ? /* @__PURE__ */ jsxs(
|
|
1712
|
+
"select",
|
|
1713
|
+
{
|
|
1714
|
+
value: row.value,
|
|
1715
|
+
onChange: (event) => onChange({ value: event.target.value }),
|
|
1716
|
+
className: "w-full rounded-lg border border-gray-200/50 bg-white/70 px-3 py-2 text-sm text-gray-900 dark:border-white/10 dark:bg-gray-800/70 dark:text-gray-100",
|
|
1717
|
+
children: [
|
|
1718
|
+
/* @__PURE__ */ jsx("option", { value: "true", children: "true" }),
|
|
1719
|
+
/* @__PURE__ */ jsx("option", { value: "false", children: "false" })
|
|
1720
|
+
]
|
|
1721
|
+
}
|
|
1722
|
+
) : isJson ? /* @__PURE__ */ jsx(
|
|
1723
|
+
FormTextarea,
|
|
1724
|
+
{
|
|
1725
|
+
value: row.value,
|
|
1726
|
+
onValueChange: (v) => onChange({ value: v }),
|
|
1727
|
+
rows: 4,
|
|
1728
|
+
className: "font-mono"
|
|
1729
|
+
}
|
|
1730
|
+
) : /* @__PURE__ */ jsx(
|
|
1731
|
+
FormInput,
|
|
1732
|
+
{
|
|
1733
|
+
type: row.kind === "number" ? "number" : "text",
|
|
1734
|
+
value: row.value,
|
|
1735
|
+
onValueChange: (v) => onChange({ value: v })
|
|
1736
|
+
}
|
|
1737
|
+
)
|
|
1738
|
+
] });
|
|
1739
|
+
}
|
|
1740
|
+
function toRow(key, value) {
|
|
1741
|
+
if (value === null || value === void 0) {
|
|
1742
|
+
return { key, value: "", kind: "string", touched: false, original: value };
|
|
1743
|
+
}
|
|
1744
|
+
if (typeof value === "boolean") {
|
|
1745
|
+
return { key, value: value ? "true" : "false", kind: "boolean", touched: false, original: value };
|
|
1746
|
+
}
|
|
1747
|
+
if (typeof value === "number") {
|
|
1748
|
+
return { key, value: String(value), kind: "number", touched: false, original: value };
|
|
1749
|
+
}
|
|
1750
|
+
if (typeof value === "string") {
|
|
1751
|
+
return { key, value, kind: "string", touched: false, original: value };
|
|
1752
|
+
}
|
|
1753
|
+
return {
|
|
1754
|
+
key,
|
|
1755
|
+
value: JSON.stringify(value, null, 2),
|
|
1756
|
+
kind: "json",
|
|
1757
|
+
touched: false,
|
|
1758
|
+
original: value
|
|
1759
|
+
};
|
|
1760
|
+
}
|
|
1761
|
+
function parseRow(row) {
|
|
1762
|
+
switch (row.kind) {
|
|
1763
|
+
case "string":
|
|
1764
|
+
return row.value;
|
|
1765
|
+
case "number": {
|
|
1766
|
+
const n = Number(row.value);
|
|
1767
|
+
if (!Number.isFinite(n)) {
|
|
1768
|
+
throw new Error(`'${row.key}' must be a number, got '${row.value}'`);
|
|
1769
|
+
}
|
|
1770
|
+
return n;
|
|
1771
|
+
}
|
|
1772
|
+
case "boolean":
|
|
1773
|
+
return row.value === "true";
|
|
1774
|
+
case "json": {
|
|
1775
|
+
if (row.value.trim().length === 0) return null;
|
|
1776
|
+
try {
|
|
1777
|
+
return JSON.parse(row.value);
|
|
1778
|
+
} catch (e) {
|
|
1779
|
+
throw new Error(`'${row.key}' is not valid JSON: ${e.message}`);
|
|
1780
|
+
}
|
|
1781
|
+
}
|
|
1782
|
+
}
|
|
1783
|
+
}
|
|
1482
1784
|
|
|
1483
1785
|
// src/astrlabe/components/rules/types.ts
|
|
1484
1786
|
var RULE_STATUS_OPTIONS = ["draft", "active", "archived"];
|
|
@@ -4238,6 +4540,6 @@ function useHelpLines() {
|
|
|
4238
4540
|
};
|
|
4239
4541
|
}
|
|
4240
4542
|
|
|
4241
|
-
export { AgentModal, AmazonNovaIcon, AnthropicModelIcon, AutoSaveWorkspace, DslExportModal, DslImportModal, DynamicIslandConfirm2 as DynamicIslandConfirm, MetaLlamaIcon, NodePalette, PipelineSettingsModal, PreviewPanel, RULE_STATUS_OPTIONS, RuleActionBuilder, RuleConditionBuilder, RuleForm, RunInputDialog, RunPanel, SaveStatusBadge, SubworkflowModal, TIMEZONE_OPTIONS, VariableInspector, VersionHistoryPanel, WorkflowListBar, defaultRuleAction, defaultRuleCondition, defaultRuleForm, getModelIcon, useCanRedo, useCanUndo, useCanvasShortcuts, useClipboard, useContextMenu, useEditingNodeId, useHasCopied, useHelpLines, useIsRunning, useNodeResults, useSelectedNodeCount, useSubworkflowStore, useUndoRedo };
|
|
4543
|
+
export { AgentModal, AmazonNovaIcon, AnthropicModelIcon, AutoSaveWorkspace, DslExportModal, DslImportModal, DynamicIslandConfirm2 as DynamicIslandConfirm, MetaLlamaIcon, NodePalette, PipelineSettingsModal, PreviewPanel, RULE_STATUS_OPTIONS, RuleActionBuilder, RuleConditionBuilder, RuleForm, RunInputDialog, RunPanel, RunReplayModal, SaveStatusBadge, SubworkflowModal, TIMEZONE_OPTIONS, VariableInspector, VersionHistoryPanel, WorkflowListBar, defaultRuleAction, defaultRuleCondition, defaultRuleForm, getModelIcon, useCanRedo, useCanUndo, useCanvasShortcuts, useClipboard, useContextMenu, useEditingNodeId, useHasCopied, useHelpLines, useIsRunning, useNodeResults, useSelectedNodeCount, useSubworkflowStore, useUndoRedo };
|
|
4242
4544
|
//# sourceMappingURL=index.mjs.map
|
|
4243
4545
|
//# sourceMappingURL=index.mjs.map
|