ai-design-system 0.1.37 → 0.1.39

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/index.css CHANGED
@@ -24,8 +24,13 @@
24
24
  --color-blue-400: oklch(70.7% 0.165 254.624);
25
25
  --color-blue-500: oklch(62.3% 0.214 259.815);
26
26
  --color-blue-600: oklch(54.6% 0.245 262.881);
27
+ --color-purple-50: oklch(97.7% 0.014 308.299);
28
+ --color-purple-200: oklch(90.2% 0.063 306.703);
29
+ --color-purple-400: oklch(71.4% 0.203 305.504);
27
30
  --color-purple-500: oklch(62.7% 0.265 303.9);
28
31
  --color-purple-600: oklch(55.8% 0.288 302.321);
32
+ --color-purple-800: oklch(43.8% 0.218 303.724);
33
+ --color-purple-950: oklch(29.1% 0.149 302.717);
29
34
  --color-gray-300: oklch(87.2% 0.01 258.338);
30
35
  --color-gray-400: oklch(70.7% 0.022 261.325);
31
36
  --color-gray-500: oklch(55.1% 0.027 264.364);
@@ -1622,6 +1627,9 @@
1622
1627
  .border-primary {
1623
1628
  border-color: var(--primary);
1624
1629
  }
1630
+ .border-purple-200 {
1631
+ border-color: var(--color-purple-200);
1632
+ }
1625
1633
  .border-red-400\/40 {
1626
1634
  border-color: color-mix(in srgb, oklch(70.4% 0.191 22.216) 40%, transparent);
1627
1635
  @supports (color: color-mix(in lab, red, red)) {
@@ -1820,6 +1828,9 @@
1820
1828
  background-color: color-mix(in oklab, var(--primary) 20%, transparent);
1821
1829
  }
1822
1830
  }
1831
+ .bg-purple-50 {
1832
+ background-color: var(--color-purple-50);
1833
+ }
1823
1834
  .bg-purple-500 {
1824
1835
  background-color: var(--color-purple-500);
1825
1836
  }
@@ -4378,6 +4389,11 @@
4378
4389
  border-color: var(--color-orange-600);
4379
4390
  }
4380
4391
  }
4392
+ .dark\:border-purple-800 {
4393
+ @media (prefers-color-scheme: dark) {
4394
+ border-color: var(--color-purple-800);
4395
+ }
4396
+ }
4381
4397
  .dark\:border-white\/\[\.145\] {
4382
4398
  @media (prefers-color-scheme: dark) {
4383
4399
  border-color: color-mix(in srgb, #fff 14.499999999999998%, transparent);
@@ -4407,6 +4423,14 @@
4407
4423
  }
4408
4424
  }
4409
4425
  }
4426
+ .dark\:bg-purple-950\/30 {
4427
+ @media (prefers-color-scheme: dark) {
4428
+ background-color: color-mix(in srgb, oklch(29.1% 0.149 302.717) 30%, transparent);
4429
+ @supports (color: color-mix(in lab, red, red)) {
4430
+ background-color: color-mix(in oklab, var(--color-purple-950) 30%, transparent);
4431
+ }
4432
+ }
4433
+ }
4410
4434
  .dark\:bg-transparent {
4411
4435
  @media (prefers-color-scheme: dark) {
4412
4436
  background-color: transparent;
@@ -4442,6 +4466,11 @@
4442
4466
  color: var(--color-orange-500);
4443
4467
  }
4444
4468
  }
4469
+ .dark\:text-purple-400 {
4470
+ @media (prefers-color-scheme: dark) {
4471
+ color: var(--color-purple-400);
4472
+ }
4473
+ }
4445
4474
  .dark\:text-purple-500 {
4446
4475
  @media (prefers-color-scheme: dark) {
4447
4476
  color: var(--color-purple-500);
package/dist/index.d.ts CHANGED
@@ -805,9 +805,6 @@ export const WorkflowBuilder: React.FC<WorkflowBuilderProps>;
805
805
  // From components/features/WorkflowObservabilityFeature/WorkflowObservabilityFeature.tsx
806
806
  export const WorkflowObservabilityFeature: React.FC<WorkflowObservabilityFeatureProps>;
807
807
 
808
- export const WorkflowToolbarActions: React.FC<any>;
809
- export const WorkflowToolbar: React.FC<any>;
810
-
811
808
  // From components/composites/WorkflowRunObservabilityPanel/WorkflowRunObservabilityPanel.tsx
812
809
  export interface WorkflowRunSummary {
813
810
  runId: string
@@ -909,6 +906,9 @@ export const WorkflowRunObservabilityTracePanel: React.FC<WorkflowRunObservabili
909
906
  export const WorkflowRunObservabilityDetailsPanel: React.FC<WorkflowRunObservabilityDetailsPanelProps>;
910
907
  export const WorkflowRunObservabilityPanel: React.FC<WorkflowRunObservabilityPanelProps>;
911
908
 
909
+ export const WorkflowToolbarActions: React.FC<any>;
910
+ export const WorkflowToolbar: React.FC<any>;
911
+
912
912
  // From components/composites/UserMessage/UserMessage.tsx
913
913
  export interface UserMessageData {
914
914
  id: string
@@ -930,6 +930,17 @@ export interface UserMessageProps {
930
930
 
931
931
  export const UserMessage: React.FC<UserMessageProps>;
932
932
 
933
+ // From components/composites/TriggerNode/TriggerNode.tsx
934
+ export type TriggerNodeData = {
935
+ label: string;
936
+ description?: string;
937
+ type: "trigger";
938
+ status?: "idle" | "running" | "success" | "error";
939
+ enabled?: boolean;
940
+ };
941
+
942
+ export const TriggerNode: React.FC<any>;
943
+
933
944
  // From components/composites/TransitionNode/TransitionNode.tsx
934
945
  export type TransitionNodeConfig = {
935
946
  /** For conditional transitions: form field comparison e.g. "{{record.orderValue}} > {{record.acceptedRange}}" */
@@ -1040,19 +1051,6 @@ export interface TablePaginationProps {
1040
1051
 
1041
1052
  export const TablePagination: React.FC<TablePaginationProps>;
1042
1053
 
1043
- // From components/composites/StateNode/StateNode.tsx
1044
- export type StateNodeData = {
1045
- label: string;
1046
- description?: string;
1047
- type: "state";
1048
- /** True for terminal states — marks workflow completion, no outgoing transitions */
1049
- isTerminal?: boolean;
1050
- status?: "idle" | "running" | "success" | "error";
1051
- enabled?: boolean;
1052
- };
1053
-
1054
- export const StateNode: React.FC<any>;
1055
-
1056
1054
  // From components/composites/StatsCard/StatsCard.tsx
1057
1055
  export interface StatsCardProps {
1058
1056
  /**
@@ -1085,6 +1083,19 @@ export interface StatsCardProps {
1085
1083
 
1086
1084
  export const StatsCard: React.FC<StatsCardProps>;
1087
1085
 
1086
+ // From components/composites/StateNode/StateNode.tsx
1087
+ export type StateNodeData = {
1088
+ label: string;
1089
+ description?: string;
1090
+ type: "state";
1091
+ /** True for terminal states — marks workflow completion, no outgoing transitions */
1092
+ isTerminal?: boolean;
1093
+ status?: "idle" | "running" | "success" | "error";
1094
+ enabled?: boolean;
1095
+ };
1096
+
1097
+ export const StateNode: React.FC<any>;
1098
+
1088
1099
  // From components/composites/SpecialistMessage/SpecialistMessage.tsx
1089
1100
  export interface SpecialistMessageData {
1090
1101
  id: string
@@ -1338,18 +1349,6 @@ export interface FormReportsDrawerFormProps {
1338
1349
 
1339
1350
  export const FormReportsDrawerForm: React.FC<FormReportsDrawerFormProps>;
1340
1351
 
1341
- // From components/composites/FileQueue/FileStatusBadge.tsx
1342
- export type FileStatus = "pending" | "modified" | "created" | "deleted";
1343
-
1344
- export interface FileStatusBadgeProps {
1345
- status: FileStatus;
1346
- className?: string;
1347
- }
1348
-
1349
- export const FileStatusBadge: React.FC<FileStatusBadgeProps>;
1350
-
1351
- export const FileQueue: React.FC<any>;
1352
-
1353
1352
  // From components/composites/FilePreviewDialog/FilePreviewDialog.tsx
1354
1353
  export interface FilePreviewDialogProps {
1355
1354
  open: boolean;
@@ -1363,6 +1362,18 @@ export interface FilePreviewDialogProps {
1363
1362
 
1364
1363
  export const FilePreviewDialog: React.FC<FilePreviewDialogProps>;
1365
1364
 
1365
+ // From components/composites/FileQueue/FileStatusBadge.tsx
1366
+ export type FileStatus = "pending" | "modified" | "created" | "deleted";
1367
+
1368
+ export interface FileStatusBadgeProps {
1369
+ status: FileStatus;
1370
+ className?: string;
1371
+ }
1372
+
1373
+ export const FileStatusBadge: React.FC<FileStatusBadgeProps>;
1374
+
1375
+ export const FileQueue: React.FC<any>;
1376
+
1366
1377
  // From components/composites/DocumentTabBar/DocumentTabBar.tsx
1367
1378
  export interface DocumentTabBarProps {
1368
1379
  /**
@@ -1508,8 +1519,6 @@ export const Confirmation: React.FC<ConfirmationProps>;
1508
1519
 
1509
1520
  export const CommentBox: React.FC<any>;
1510
1521
 
1511
- export const AppHeader: React.FC<any>;
1512
-
1513
1522
  // From components/composites/AgentIndicator/AgentIndicator.tsx
1514
1523
  export interface SubAgent {
1515
1524
  id: string
@@ -1537,6 +1546,8 @@ export interface AgentIndicatorProps {
1537
1546
 
1538
1547
  export const AgentIndicator: React.FC<AgentIndicatorProps>;
1539
1548
 
1549
+ export const AppHeader: React.FC<any>;
1550
+
1540
1551
  // From components/composites/AdjustableLayout/AdjustableLayout.tsx
1541
1552
  export interface AdjustableLayoutSection {
1542
1553
  id: string
@@ -1564,6 +1575,7 @@ export const AdjustableLayout: React.FC<AdjustableLayoutProps>;
1564
1575
  // ============================================================================
1565
1576
 
1566
1577
  export { ModeSwitcher } from './composites';
1578
+ export { getLayoutedElements } from './blocks';
1567
1579
  export { ReactFlowProvider, applyNodeChanges, applyEdgeChanges, addEdge } from '@xyflow/react';
1568
1580
  export type { NodeChange, EdgeChange, Connection } from '@xyflow/react';
1569
1581
  export { cn } from '@/lib/utils';
package/dist/index.js CHANGED
@@ -9,7 +9,7 @@ import * as SeparatorPrimitive from '@radix-ui/react-separator';
9
9
  import * as TooltipPrimitive from '@radix-ui/react-tooltip';
10
10
  import * as AvatarPrimitive from '@radix-ui/react-avatar';
11
11
  import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
12
- import { Send, Circle, X, EyeOff, Zap, Check, XCircle, GitBranch, Plus, WrenchIcon, ChevronDownIcon, ChevronsUpDownIcon, ArrowDownIcon, CheckIcon, XIcon, ArrowLeft, ArrowRight, SearchIcon, ChevronUpIcon, MoreVertical, Columns3, ChevronDown, ChevronsLeft, ChevronLeft, ChevronRight, ChevronsRight, XCircleIcon, CheckCircleIcon, ClockIcon, CircleIcon, SendIcon, GripVertical, Loader2Icon, SquareIcon, Undo2, Redo2, Save, Loader2 } from 'lucide-react';
12
+ import { Send, Circle, X, EyeOff, Zap, Check, XCircle, GitBranch, Play, Plus, WrenchIcon, ChevronDownIcon, ChevronsUpDownIcon, ArrowDownIcon, CheckIcon, XIcon, ArrowLeft, ArrowRight, SearchIcon, ChevronUpIcon, MoreVertical, Columns3, ChevronDown, ChevronsLeft, ChevronLeft, ChevronRight, ChevronsRight, XCircleIcon, CheckCircleIcon, ClockIcon, CircleIcon, SendIcon, GripVertical, Loader2Icon, SquareIcon, Undo2, Redo2, Save, Loader2 } from 'lucide-react';
13
13
  import * as TabsPrimitive from '@radix-ui/react-tabs';
14
14
  import { motion } from 'motion/react';
15
15
  import { StickToBottom, useStickToBottomContext } from 'use-stick-to-bottom';
@@ -46,9 +46,10 @@ import { CSS } from '@dnd-kit/utilities';
46
46
  import 'sonner';
47
47
  import { z } from 'zod';
48
48
  import { dynamicTableSchema, DYNAMIC_TABLE_SCHEMA_VERSION, FORM_SCHEMA_VERSION } from 'ui-schema-contracts';
49
- import { Handle, Position, ReactFlowProvider, useReactFlow, ConnectionMode, MiniMap, ReactFlow, Background, getSimpleBezierPath, BaseEdge, getSmoothStepPath, Panel as Panel$1, Controls as Controls$1 } from '@xyflow/react';
49
+ import { Handle, Position, ReactFlowProvider, useReactFlow, ConnectionMode, ReactFlow, Background, getSimpleBezierPath, BaseEdge, getSmoothStepPath, Panel as Panel$1, Controls as Controls$1 } from '@xyflow/react';
50
50
  export { ReactFlowProvider, addEdge, applyEdgeChanges, applyNodeChanges } from '@xyflow/react';
51
51
  import '@xyflow/react/dist/style.css';
52
+ import ELK from 'elkjs';
52
53
  import { formSchema } from 'design-schema/schemas/form';
53
54
 
54
55
  var __defProp = Object.defineProperty;
@@ -8328,6 +8329,34 @@ var TransitionNode = memo(
8328
8329
  }
8329
8330
  );
8330
8331
  TransitionNode.displayName = "TransitionNode";
8332
+ var TriggerNode = memo(({ data, selected, id }) => {
8333
+ if (!data) {
8334
+ return null;
8335
+ }
8336
+ const displayTitle = data.label || "Trigger";
8337
+ const displayDescription = data.description;
8338
+ const status = data.status;
8339
+ return /* @__PURE__ */ jsx(
8340
+ Node2,
8341
+ {
8342
+ className: cn(
8343
+ "relative flex flex-col items-center justify-center bg-purple-50 dark:bg-purple-950/30 border border-purple-200 dark:border-purple-800 shadow-none transition-all duration-150 ease-out",
8344
+ selected && "border-primary border-2"
8345
+ ),
8346
+ "data-testid": `trigger-node-${id}`,
8347
+ handles: { target: false, source: true },
8348
+ status,
8349
+ children: /* @__PURE__ */ jsxs("div", { className: "flex h-full w-full items-center justify-center gap-1.5 px-3 py-2", children: [
8350
+ /* @__PURE__ */ jsx(Play, { className: "size-3 shrink-0 text-purple-600 dark:text-purple-400", strokeWidth: 1.5 }),
8351
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1 text-center", children: [
8352
+ /* @__PURE__ */ jsx(NodeTitle, { className: "line-clamp-2 text-center text-xs font-medium leading-tight", title: displayTitle, children: displayTitle }),
8353
+ displayDescription && /* @__PURE__ */ jsx(NodeDescription, { className: "mt-0.5 line-clamp-2 text-center text-[10px] leading-tight", title: displayDescription, children: displayDescription })
8354
+ ] })
8355
+ ] })
8356
+ }
8357
+ );
8358
+ });
8359
+ TriggerNode.displayName = "TriggerNode";
8331
8360
  function WorkflowToolbarActions({
8332
8361
  actionGroups = [],
8333
8362
  className
@@ -9299,7 +9328,8 @@ var edgeTypes = {
9299
9328
  };
9300
9329
  var nodeTypes = {
9301
9330
  state: StateNode,
9302
- transition: TransitionNode
9331
+ transition: TransitionNode,
9332
+ trigger: TriggerNode
9303
9333
  };
9304
9334
  function WorkflowCanvasInner({
9305
9335
  nodes,
@@ -9312,7 +9342,6 @@ function WorkflowCanvasInner({
9312
9342
  onPaneClick,
9313
9343
  onNodeClick,
9314
9344
  onEdgeClick,
9315
- showMinimap = false,
9316
9345
  interactive = false,
9317
9346
  topLeft,
9318
9347
  topRight,
@@ -9405,8 +9434,7 @@ function WorkflowCanvasInner({
9405
9434
  position: "bottom-left",
9406
9435
  children: /* @__PURE__ */ jsx(Controls, {})
9407
9436
  }
9408
- ),
9409
- showMinimap && /* @__PURE__ */ jsx(MiniMap, { bgColor: "var(--sidebar)", nodeStrokeColor: "var(--border)" })
9437
+ )
9410
9438
  ]
9411
9439
  }
9412
9440
  )
@@ -9416,6 +9444,50 @@ function WorkflowCanvasInner({
9416
9444
  function WorkflowCanvas(props) {
9417
9445
  return /* @__PURE__ */ jsx(ReactFlowProvider, { children: /* @__PURE__ */ jsx(WorkflowCanvasInner, __spreadValues({}, props)) });
9418
9446
  }
9447
+ var NODE_WIDTH = 180;
9448
+ var NODE_HEIGHT = 52;
9449
+ var elk = new ELK();
9450
+ async function getLayoutedElements(nodes, edges) {
9451
+ const graph = {
9452
+ id: "root",
9453
+ layoutOptions: {
9454
+ "elk.algorithm": "layered",
9455
+ "elk.direction": "DOWN",
9456
+ "elk.layered.spacing.nodeNodeBetweenLayers": "60",
9457
+ "elk.spacing.nodeNode": "40",
9458
+ "elk.layered.nodePlacement.strategy": "BRANDES_KOEPF",
9459
+ "elk.layered.nodePlacement.bk.fixedAlignment": "BALANCED",
9460
+ "elk.layered.considerModelOrder": "true",
9461
+ "elk.hierarchyHandling": "INCLUDE_CHILDREN"
9462
+ },
9463
+ children: nodes.map((n) => ({
9464
+ id: n.id,
9465
+ width: NODE_WIDTH,
9466
+ height: NODE_HEIGHT
9467
+ })),
9468
+ edges: edges.map((e) => {
9469
+ return {
9470
+ id: e.id,
9471
+ sources: [e.source],
9472
+ targets: [e.target]
9473
+ };
9474
+ })
9475
+ };
9476
+ const layout = await elk.layout(graph);
9477
+ const layoutedNodes = nodes.map((n) => {
9478
+ var _a;
9479
+ const elkNode = ((_a = layout.children) != null ? _a : []).find((c) => c.id === n.id);
9480
+ if (!elkNode || elkNode.x == null || elkNode.y == null) return n;
9481
+ return __spreadProps(__spreadValues({}, n), {
9482
+ position: { x: elkNode.x, y: elkNode.y }
9483
+ });
9484
+ });
9485
+ const layoutedEdges = edges.map((e) => __spreadProps(__spreadValues({}, e), {
9486
+ sourceHandle: "source-bottom",
9487
+ targetHandle: "target-top"
9488
+ }));
9489
+ return { nodes: layoutedNodes, edges: layoutedEdges };
9490
+ }
9419
9491
  function WorkflowBuilder({
9420
9492
  workflowName,
9421
9493
  versions,
@@ -10430,7 +10502,14 @@ var selectedWorkflowRunMock = {
10430
10502
  suspensionReason: "-"
10431
10503
  })
10432
10504
  });
10505
+ var DashboardHeader = React3.memo(({ ctaLabel = "Quick Create" }) => {
10506
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
10507
+ /* @__PURE__ */ jsx(Button2, { variant: "outline", size: "sm", className: "hidden sm:flex", children: ctaLabel }),
10508
+ /* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground", children: "GitHub" })
10509
+ ] });
10510
+ });
10511
+ DashboardHeader.displayName = "DashboardHeader";
10433
10512
 
10434
- export { AIDocEditor, DashboardFeature, FormReportsFeature, ModeSwitcher, PageLayout, RefinementPanel, SpecNavigator, WorkflowBuilder, WorkflowObservabilityFeature, cn };
10513
+ export { AIDocEditor, DashboardFeature, FormReportsFeature, ModeSwitcher, PageLayout, RefinementPanel, SpecNavigator, WorkflowBuilder, WorkflowObservabilityFeature, cn, getLayoutedElements };
10435
10514
  //# sourceMappingURL=index.js.map
10436
10515
  //# sourceMappingURL=index.js.map