@burdenoff/fluidgrids-fe-sdk 2026.922.9 → 2026.922.10

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 (29) hide show
  1. package/dist/{ExecutionDetailPage-V3LXDOAT.js → ExecutionDetailPage-OSDL7NDT.js} +4 -4
  2. package/dist/{ExecutionDetailPage-V3LXDOAT.js.map → ExecutionDetailPage-OSDL7NDT.js.map} +1 -1
  3. package/dist/{WorkflowBuilder-DS4EK7JE.js → WorkflowBuilder-YV3J2D44.js} +5 -5
  4. package/dist/{WorkflowBuilder-DS4EK7JE.js.map → WorkflowBuilder-YV3J2D44.js.map} +1 -1
  5. package/dist/{WorkflowsList-DUCKDRKC.js → WorkflowsList-JHM7Q5HE.js} +4 -4
  6. package/dist/{WorkflowsList-DUCKDRKC.js.map → WorkflowsList-JHM7Q5HE.js.map} +1 -1
  7. package/dist/{chunk-5XUOENLH.js → chunk-3SZ2KA6G.js} +3 -3
  8. package/dist/{chunk-5XUOENLH.js.map → chunk-3SZ2KA6G.js.map} +1 -1
  9. package/dist/{chunk-C4HOB3JQ.js → chunk-5IAMVAGX.js} +3 -3
  10. package/dist/{chunk-C4HOB3JQ.js.map → chunk-5IAMVAGX.js.map} +1 -1
  11. package/dist/{chunk-NOOLXG62.js → chunk-C7DLBPWJ.js} +3 -3
  12. package/dist/{chunk-NOOLXG62.js.map → chunk-C7DLBPWJ.js.map} +1 -1
  13. package/dist/{chunk-YP6P5E6M.js → chunk-FKX2IOUQ.js} +3 -3
  14. package/dist/{chunk-YP6P5E6M.js.map → chunk-FKX2IOUQ.js.map} +1 -1
  15. package/dist/{chunk-XC7A7NLP.js → chunk-IPVHC2DM.js} +3 -3
  16. package/dist/{chunk-XC7A7NLP.js.map → chunk-IPVHC2DM.js.map} +1 -1
  17. package/dist/{chunk-KLWMUV2N.js → chunk-NOSLJG7N.js} +3 -3
  18. package/dist/{chunk-KLWMUV2N.js.map → chunk-NOSLJG7N.js.map} +1 -1
  19. package/dist/{chunk-UIY2HBWA.js → chunk-W23ZXNKU.js} +12 -2
  20. package/dist/chunk-W23ZXNKU.js.map +1 -0
  21. package/dist/executions.js +2 -2
  22. package/dist/index.d.ts +124 -1
  23. package/dist/index.js +897 -30
  24. package/dist/index.js.map +1 -1
  25. package/dist/templates.js +3 -3
  26. package/dist/workflow-builder.js +4 -4
  27. package/dist/workflows-list.js +2 -2
  28. package/package.json +1 -1
  29. package/dist/chunk-UIY2HBWA.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,17 +1,17 @@
1
1
  export { Label } from './chunk-6QCBKN3P.js';
2
2
  import './chunk-RXMBIJ5Z.js';
3
3
  export { ExecutionsListPage } from './chunk-R6JFXZXN.js';
4
- export { ExecutionDetailPage } from './chunk-C4HOB3JQ.js';
4
+ export { ExecutionDetailPage } from './chunk-5IAMVAGX.js';
5
5
  import './chunk-EUZZLC3N.js';
6
6
  export { HistoryPage } from './chunk-UNW4I442.js';
7
7
  export { NodesPage, fetchAllNodesWithManifests, useLazyNodeManifest, useNodeEndpoint, useNodeEndpoints, useNodeManifest } from './chunk-ISS73LG3.js';
8
8
  export { SettingsPage } from './chunk-PTGKDQ5K.js';
9
- import { ThemeProvider, extractTemplateGraph } from './chunk-YP6P5E6M.js';
10
- export { A2AMessagePriority, A2AMessageStatus, A2ATrustLevel, ActionExecutionStatus, ActionSourceType, ActionStatus, ActionStyle, ActionTriggerType, ActionType, ActivityCategory, ActivityType, ActorType, AgentVisibility, AiPromptCategory, AiPromptStatus, AlertSeverity, AnalyticsEntityType, AnalyticsEventSeverity, AnalyticsGranularity, AnalyticsInsightSeverity, AppCategory, AppInstallationState, AppPermission, AppStatus, AppType, AppVisibility, ApprovalStatus, ArtifactType, AssetBudgetStatus, AssetCondition, AssetStatus, AssignmentSource, AttendeeRole, AuthType, AuthorType, AutomationExecutionStatus, AutomationStatus, AutomationTriggerType, BackoffStrategy, BatchDownloadStatus, BigConsoleConflictResolution, BillingType, BoardColumnType, BoardType, BookingFormFieldType, BookingPageType, BookingStatus, BotAppStatus, BotAppType, BotAppVisibility, BotlitAgentCapability, BotlitAgentStatus, BotlitAgentType, BotlitHealthStatus, BotlitLlmProviderType, BudgetStatus, BulkConversationAction, CalendarEventStatus, CalendarExecutionStatus, CalendarExportFormat, CalendarPromptStatus, CalendarResourceType, CalendarType, CallParticipantChangeType, CallState, CallType, CatalogVisibility, ChangeRisk, ChangeStatus, ChannelMessageStatus, ChannelPlatform, ChannelStatus, ChannelType, ChatRole, CheckInStatus, ChunkingMethod, CircuitState, CohortType, CollaboratorRole, CollectionActivityType, CollectionItemSortField, CollectionSortField, CollectionType, CollectionVisibility, CommentExportFormat, CommentScheduleType, CommentStatus, CommentVisibility, ComparisonOperator, ComplianceStatus, ComponentLifecycle, ComponentType, ConfigScope, ConflictResolution, ConnectionCredentialSource, ConnectionQuality, ConnectionStatus, ContentSearchEngine, ContentSearchStatus, ContentType, ConversationPermission, ConversationSortField, ConversationState, ConversationType, ConversationVisibility, ConversationsExportFormat, CustomFieldType, DashboardCategory, DashboardLayout, DashboardSortField, DashboardStatus, DashboardStyleType, DashboardVisibility, DataSinkRefreshType, DataSinkSetupState, DataSinkSourceType, DataSinkStatus, DataSinkUpdateEventType, DataSourceTestStatus, DataSourceType, DayOfWeek, DeliveryChannelType, DependencyStatus, DependencyType, DiscoveryJobStatus, DlqStatus, DocumentStatus, DriverStatus, EncryptionAlgorithm, EnergyLevel, EntityStatus, ErrorType, EventStatus, EventType, EventValidationStatus, EventVisibility, EventfullymanagedConfigScope, EventfullymanagedSessionStatus, EventfullymanagedSessionType, EventfullymanagedVibeStatus, EventfullymanagedVibeType, ExecutionStatus, ExecutionType, ExecutorType, ExpenseOrderByField, ExpenseStatus, ExportArchiveFormat, ExportFormat, ExportJobStatus, ExportScope, ExportSortField, ExternalCalendarSyncDirection, ExternalCalendarSyncStatus, ExternalProviderType, FeatureRequestStatus, FieldMaskStrategy, FileEventType, FileMetadataSortField, FileShareAccessLevel, FileShareType, FileSortField, FileStatus, FileVisibility, FilterDataType, FilterOperator, FilterType, FluidGridsEventType, FluidGridsWorkflowStatus, FolderSortField, FolderStatus, FunnelStepOrder, GeneratedLayoutType, GenerationStatus, GeofenceEventType, GeofenceTrigger, GgnomadBookingStatus, GgnomadBookingType, GgnomadListingStatus, GitopsProviderType, GitopsSnapshotType, GraphMetadataOperator, GraphSearchMode, GraphSearchSortBy, GroupCompositionMode, GroupExportFormat, GroupScope, GroupSortField, GroupStatus, GroupType, GroupVisibility, GroupsExportFormat, HeadshotmarketingAdCampaignStatus, HeadshotmarketingAdCreativeStatus, HeadshotmarketingAdCreativeType, HeadshotmarketingAdPlatform, HeadshotmarketingAiToolCategory, HeadshotmarketingAiToolExecutionStatus, HeadshotmarketingAssetType, HeadshotmarketingCampaignStatus, HeadshotmarketingCampaignType, HeadshotmarketingContactStatus, HeadshotmarketingContentItemStatus, HeadshotmarketingContentItemType, HeadshotmarketingDateRangePreset, HeadshotmarketingDealStatus, HeadshotmarketingEventRegistrationStatus, HeadshotmarketingEventStatus, HeadshotmarketingEventType, HeadshotmarketingInfluencerCampaignStatus, HeadshotmarketingInfluencerRelationshipStatus, HeadshotmarketingInfluencerTier, HeadshotmarketingLandingPageSectionType, HeadshotmarketingLandingPageStatus, HeadshotmarketingLeadSource, HeadshotmarketingLeadStatus, HeadshotmarketingMetricType, HeadshotmarketingReportStatus, HeadshotmarketingReportType, HeadshotmarketingSeoAuditSeverity, HeadshotmarketingSeoAuditStatus, HeadshotmarketingSeoKeywordStatus, HeadshotmarketingSocialAccountStatus, HeadshotmarketingSocialPlatform, HeadshotmarketingSocialPostStatus, HeadshotmarketingWorkflowExecutionStatus, HeadshotmarketingWorkflowStatus, HeadshotmarketingWorkflowTriggerType, HttpMethod, IncidentStatus, IndexStatus, InstallMode, InventoryTransactionType, InvitationStatus, InviteStatus, InvoiceStatus, IssueTokenErrorCode, JobStatus, KadaikodiInvestmentStatus, KadaikodiOfferingKind, KadaikodiOrderStatus, KadaikodiPaymentStatus, KadaikodiProviderStatus, KadaikodiRiskLevel, KadaikodiServiceCategory, KeyStatus, KeyType, KnowledgeArticleStatus, LocationType, LockType, LogAction, LogLevel, McpConnectionStatus, McpResourceType, McpToolStatus, MeetingActionItemStatus, MeetingOrderByField, MeetingParticipantRole, MeetingParticipantStatus, MeetingProvider, MeetingType, MemberPresenceStatus, MembershipRole, MembershipSource, MembershipStatus, MembershipType, MentionType, MessageContentType, MessageReportResolutionAction, MessageReportStatus, MessageStatus, MessageType, MetadataValueType, MetricAggregation, MetricAggregationField, MetricType, MilestoneStatus, MisfirePolicy, Mood, NatsFilterType, NavigationMode, NodeConfigStatus, NodeStatus, NotificationLevel, OrderDirection, OrderPriority, OrderStatus, OrderType, OverrideType, PackageKind, PageLayout, ParserStatus, ParserType, ParticipantChangeType, ParticipantRole, PipelineExecutionStatus, PipelineStatus, PlanmagnetProjectStatus, PlanmagnetSyncDirection, PlanmagnetSyncProvider, PlanmagnetSyncStatus, PluginStatus, PolicyStatus, PolicyType, PomodoroGoalPeriod, PomodoroGoalType, PomodoroSessionOrderByField, PomodoroSessionType, PortfolioStatus, PresenceStatus, Priority, ProblemStatus, ProductType, ProjectMethodology, ProjectOrderField, ProjectStatus, PromptGenerationStatus, PromptPriority, PromptStatus, PropertyStatus, PropertyType, ProviderCategory, PublishType, QualityGateStatus, RbacChangeType, ReactionChangeType, RecordingMode, ReleaseStatus, ReminderChannel, ReminderType, ReportFormat, ReportScheduleStatus, ResourceBookingStatus, RetrievalMode, RiskSeverity, RiskStatus, RoadmapItemStatus, RoadmapType, RoleLevel, RouteStatus, RoutingStrategy, RsvpStatus, RuleActionType, RuleConditionOperator, RuleRunMode, RunLogLevel, RunLogStream, RunMode, RunStatus, SandboxChangeType, SandboxExportFormat, SandboxExportJobStatus, SandboxKind, SandboxMode, SandboxSource, SandboxStatus, SandboxTemplate, SchedulePriority, ScheduleType, ScorecardMetricStatus, ScorecardMetricType, ScorecardOwnerType, SecretStatus, SecretType, SecurityExportFormat, SecuritySeverity, SecuritySubscriptionEvent, SegmentVisibility, SessionSharePermission, SettingsCategory, SharePermission, ShareRecipientType, ShareSortField, ShareStatus, ShareTokenType, ShipmentStatus, SmartCollectionConditionField, SmartCollectionConditionOperator, SmartCollectionOperator, SortDirection, SortOrder, SprintStatus, StageErrorHandling, StageExecutionStatus, StorageMode, StrategicAlignment, StressLevel, SubmissionStatus, SuggestedDataSourceType, SyncDirection, SyncFromGlobalOperation, SyncProvider, SystemEventType, TagCardinality, TagDataType, TagFilterOperator, TagRelationType, TagScope, TagsExportFormat, TargetType, TaskOrderField, TaskPriority, TaskStatus, TemplateAuthorType, TemplateCategory, TemplateComplexity, TemplatePreview, TemplateStatus, TemplateVisibility, TemplatesPage, TimeBucket, TimeCampusChannelType, TimeCampusConfigScope, TimeCampusProjectStatus, TimeCampusSortDirection, TimeEntryOrderField, TimeEntryStatus, TimeGrain, TimeRange, TlsMode, ToolRiskLevel, TrackingEventType, TransactionStatus, TransactionType, TraversalDirection, TunnelDomainType, TunnelDomainVerificationStatus, TunnelEnvironment, TunnelProtocol, TunnelProviderKey, TunnelSessionStatus, TunnelShardStatus, TunnelStatus, UpdateScope, UploadStatus, UploadType, UsageStatus, ValidationMethod, VaultIncidentSeverity, VaultIncidentStatus, VaultMemberRole, VaultRotationStatus, VaultScope, VaultSecurityEventSeverity, VaultSecurityEventType, VaultStatus, VaultSyncStatus, VehicleStatus, VehicleType, VersionStatus, VibeAuditAction, VibeAuditExportFormat, VibeAuditResourceType, VibeAuditStatus, VibeCalendarExecutionStatus, VibeCalendarTaskStatus, VibeDeckButtonActionType, VibeDeckSharePermission, VibeDeckShareStatus, VibeDeckShareVisibility, VibeStatus, VibeType, VibecontrolsActionType, VibecontrolsDocsBuildImagePullPolicy, VibecontrolsDocsBuildImageScanStatus, VibecontrolsDocsBuildImageStatus, VibecontrolsDocsBuildRuntime, VibecontrolsDocsPageStatus, VibecontrolsDocsRevisionStatus, VibecontrolsDocsSiteOwnerType, VibecontrolsDocsSiteVisibility, VibecontrolsSessionStatus, VibecontrolsSessionType, VibecontrolsTemplateCategory, VibecontrolsTemplateStatus, Visibility, VisibilityType, VocabularyKind, VocabularyScope, WarehouseType, WebhookAuthType, WidgetConfidence, WidgetRenderer, WidgetType, WorkItemPriority, WorkItemStatus, WorkItemType, WorkOrderStatus, WorkOrderType, WorkPatternInsightType, WorkflowStatus, WorkspaceResourceStatus, WorkspaceResourceType, WorkspaceStatus, WorkspaceType, WorkspacesExportFormat } from './chunk-YP6P5E6M.js';
11
- export { WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect } from './chunk-KLWMUV2N.js';
12
- export { WorkflowBuilder as WorkflowBuilderPage } from './chunk-5XUOENLH.js';
13
- import { FluidGridsProvider, FlowBuilderPage } from './chunk-NOOLXG62.js';
14
- export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ConnectionFormDialog, ConnectionSelector, EntityTagPicker, FLUIDGRIDS_ENTITY_TYPES, FluidGridsProvider, ProviderPicker, SchemaConnectionForm, ScopePicker, listCustomBlocks, refetchStoreNodes, registerCustomBlock, resolveUiSpec, stripSubmitActions, tagLabel, useAvailableTags, useConnection, useConnectionDialog, useConnections, useConnectionsByProvider, useCreateConnection, useCreateTag, useDraftEntityTags, useEntityTags, useFluidGridsContext, useInitiateOAuth, useNodeExecution, useProviderByKey, useProviderCatalog, useProviders, useReplaceEntityTags, useSearchTags, useTagEntity, useUntagEntity } from './chunk-NOOLXG62.js';
9
+ import { ThemeProvider, extractTemplateGraph } from './chunk-FKX2IOUQ.js';
10
+ export { A2AMessagePriority, A2AMessageStatus, A2ATrustLevel, ActionExecutionStatus, ActionSourceType, ActionStatus, ActionStyle, ActionTriggerType, ActionType, ActivityCategory, ActivityType, ActorType, AgentVisibility, AiPromptCategory, AiPromptStatus, AlertSeverity, AnalyticsEntityType, AnalyticsEventSeverity, AnalyticsGranularity, AnalyticsInsightSeverity, AppCategory, AppInstallationState, AppPermission, AppStatus, AppType, AppVisibility, ApprovalStatus, ArtifactType, AssetBudgetStatus, AssetCondition, AssetStatus, AssignmentSource, AttendeeRole, AuthType, AuthorType, AutomationExecutionStatus, AutomationStatus, AutomationTriggerType, BackoffStrategy, BatchDownloadStatus, BigConsoleConflictResolution, BillingType, BoardColumnType, BoardType, BookingFormFieldType, BookingPageType, BookingStatus, BotAppStatus, BotAppType, BotAppVisibility, BotlitAgentCapability, BotlitAgentStatus, BotlitAgentType, BotlitHealthStatus, BotlitLlmProviderType, BudgetStatus, BulkConversationAction, CalendarEventStatus, CalendarExecutionStatus, CalendarExportFormat, CalendarPromptStatus, CalendarResourceType, CalendarType, CallParticipantChangeType, CallState, CallType, CatalogVisibility, ChangeRisk, ChangeStatus, ChannelMessageStatus, ChannelPlatform, ChannelStatus, ChannelType, ChatRole, CheckInStatus, ChunkingMethod, CircuitState, CohortType, CollaboratorRole, CollectionActivityType, CollectionItemSortField, CollectionSortField, CollectionType, CollectionVisibility, CommentExportFormat, CommentScheduleType, CommentStatus, CommentVisibility, ComparisonOperator, ComplianceStatus, ComponentLifecycle, ComponentType, ConfigScope, ConflictResolution, ConnectionCredentialSource, ConnectionQuality, ConnectionStatus, ContentSearchEngine, ContentSearchStatus, ContentType, ConversationPermission, ConversationSortField, ConversationState, ConversationType, ConversationVisibility, ConversationsExportFormat, CustomFieldType, DashboardCategory, DashboardLayout, DashboardSortField, DashboardStatus, DashboardStyleType, DashboardVisibility, DataSinkRefreshType, DataSinkSetupState, DataSinkSourceType, DataSinkStatus, DataSinkUpdateEventType, DataSourceTestStatus, DataSourceType, DayOfWeek, DeliveryChannelType, DependencyStatus, DependencyType, DiscoveryJobStatus, DlqStatus, DocumentStatus, DriverStatus, EncryptionAlgorithm, EnergyLevel, EntityStatus, ErrorType, EventStatus, EventType, EventValidationStatus, EventVisibility, EventfullymanagedConfigScope, EventfullymanagedSessionStatus, EventfullymanagedSessionType, EventfullymanagedVibeStatus, EventfullymanagedVibeType, ExecutionStatus, ExecutionType, ExecutorType, ExpenseOrderByField, ExpenseStatus, ExportArchiveFormat, ExportFormat, ExportJobStatus, ExportScope, ExportSortField, ExternalCalendarSyncDirection, ExternalCalendarSyncStatus, ExternalProviderType, FeatureRequestStatus, FieldMaskStrategy, FileEventType, FileMetadataSortField, FileShareAccessLevel, FileShareType, FileSortField, FileStatus, FileVisibility, FilterDataType, FilterOperator, FilterType, FluidGridsEventType, FluidGridsWorkflowStatus, FolderSortField, FolderStatus, FunnelStepOrder, GeneratedLayoutType, GenerationStatus, GeofenceEventType, GeofenceTrigger, GgnomadBookingStatus, GgnomadBookingType, GgnomadListingStatus, GitopsProviderType, GitopsSnapshotType, GraphMetadataOperator, GraphSearchMode, GraphSearchSortBy, GroupCompositionMode, GroupExportFormat, GroupScope, GroupSortField, GroupStatus, GroupType, GroupVisibility, GroupsExportFormat, HeadshotmarketingAdCampaignStatus, HeadshotmarketingAdCreativeStatus, HeadshotmarketingAdCreativeType, HeadshotmarketingAdPlatform, HeadshotmarketingAiToolCategory, HeadshotmarketingAiToolExecutionStatus, HeadshotmarketingAssetType, HeadshotmarketingCampaignStatus, HeadshotmarketingCampaignType, HeadshotmarketingContactStatus, HeadshotmarketingContentItemStatus, HeadshotmarketingContentItemType, HeadshotmarketingDateRangePreset, HeadshotmarketingDealStatus, HeadshotmarketingEventRegistrationStatus, HeadshotmarketingEventStatus, HeadshotmarketingEventType, HeadshotmarketingInfluencerCampaignStatus, HeadshotmarketingInfluencerRelationshipStatus, HeadshotmarketingInfluencerTier, HeadshotmarketingLandingPageSectionType, HeadshotmarketingLandingPageStatus, HeadshotmarketingLeadSource, HeadshotmarketingLeadStatus, HeadshotmarketingMetricType, HeadshotmarketingReportStatus, HeadshotmarketingReportType, HeadshotmarketingSeoAuditSeverity, HeadshotmarketingSeoAuditStatus, HeadshotmarketingSeoKeywordStatus, HeadshotmarketingSocialAccountStatus, HeadshotmarketingSocialPlatform, HeadshotmarketingSocialPostStatus, HeadshotmarketingWorkflowExecutionStatus, HeadshotmarketingWorkflowStatus, HeadshotmarketingWorkflowTriggerType, HttpMethod, IncidentStatus, IndexStatus, InstallMode, InventoryTransactionType, InvitationStatus, InviteStatus, InvoiceStatus, IssueTokenErrorCode, JobStatus, KadaikodiInvestmentStatus, KadaikodiOfferingKind, KadaikodiOrderStatus, KadaikodiPaymentStatus, KadaikodiProviderStatus, KadaikodiRiskLevel, KadaikodiServiceCategory, KeyStatus, KeyType, KnowledgeArticleStatus, LocationType, LockType, LogAction, LogLevel, McpConnectionStatus, McpResourceType, McpToolStatus, MeetingActionItemStatus, MeetingOrderByField, MeetingParticipantRole, MeetingParticipantStatus, MeetingProvider, MeetingType, MemberPresenceStatus, MembershipRole, MembershipSource, MembershipStatus, MembershipType, MentionType, MessageContentType, MessageReportResolutionAction, MessageReportStatus, MessageStatus, MessageType, MetadataValueType, MetricAggregation, MetricAggregationField, MetricType, MilestoneStatus, MisfirePolicy, Mood, NatsFilterType, NavigationMode, NodeConfigStatus, NodeStatus, NotificationLevel, OrderDirection, OrderPriority, OrderStatus, OrderType, OverrideType, PackageKind, PageLayout, ParserStatus, ParserType, ParticipantChangeType, ParticipantRole, PipelineExecutionStatus, PipelineStatus, PlanmagnetProjectStatus, PlanmagnetSyncDirection, PlanmagnetSyncProvider, PlanmagnetSyncStatus, PluginStatus, PolicyStatus, PolicyType, PomodoroGoalPeriod, PomodoroGoalType, PomodoroSessionOrderByField, PomodoroSessionType, PortfolioStatus, PresenceStatus, Priority, ProblemStatus, ProductType, ProjectMethodology, ProjectOrderField, ProjectStatus, PromptGenerationStatus, PromptPriority, PromptStatus, PropertyStatus, PropertyType, ProviderCategory, PublishType, QualityGateStatus, RbacChangeType, ReactionChangeType, RecordingMode, ReleaseStatus, ReminderChannel, ReminderType, ReportFormat, ReportScheduleStatus, ResourceBookingStatus, RetrievalMode, RiskSeverity, RiskStatus, RoadmapItemStatus, RoadmapType, RoleLevel, RouteStatus, RoutingStrategy, RsvpStatus, RuleActionType, RuleConditionOperator, RuleRunMode, RunLogLevel, RunLogStream, RunMode, RunStatus, SandboxChangeType, SandboxExportFormat, SandboxExportJobStatus, SandboxKind, SandboxMode, SandboxSource, SandboxStatus, SandboxTemplate, SchedulePriority, ScheduleType, ScorecardMetricStatus, ScorecardMetricType, ScorecardOwnerType, SecretStatus, SecretType, SecurityExportFormat, SecuritySeverity, SecuritySubscriptionEvent, SegmentVisibility, SessionSharePermission, SettingsCategory, SharePermission, ShareRecipientType, ShareSortField, ShareStatus, ShareTokenType, ShipmentStatus, SmartCollectionConditionField, SmartCollectionConditionOperator, SmartCollectionOperator, SortDirection, SortOrder, SprintStatus, StageErrorHandling, StageExecutionStatus, StorageMode, StrategicAlignment, StressLevel, SubmissionStatus, SuggestedDataSourceType, SyncDirection, SyncFromGlobalOperation, SyncProvider, SystemEventType, TagCardinality, TagDataType, TagFilterOperator, TagRelationType, TagScope, TagsExportFormat, TargetType, TaskOrderField, TaskPriority, TaskStatus, TemplateAuthorType, TemplateCategory, TemplateComplexity, TemplatePreview, TemplateStatus, TemplateVisibility, TemplatesPage, TimeBucket, TimeCampusChannelType, TimeCampusConfigScope, TimeCampusProjectStatus, TimeCampusSortDirection, TimeEntryOrderField, TimeEntryStatus, TimeGrain, TimeRange, TlsMode, ToolRiskLevel, TrackingEventType, TransactionStatus, TransactionType, TraversalDirection, TunnelDomainType, TunnelDomainVerificationStatus, TunnelEnvironment, TunnelProtocol, TunnelProviderKey, TunnelSessionStatus, TunnelShardStatus, TunnelStatus, UpdateScope, UploadStatus, UploadType, UsageStatus, ValidationMethod, VaultIncidentSeverity, VaultIncidentStatus, VaultMemberRole, VaultRotationStatus, VaultScope, VaultSecurityEventSeverity, VaultSecurityEventType, VaultStatus, VaultSyncStatus, VehicleStatus, VehicleType, VersionStatus, VibeAuditAction, VibeAuditExportFormat, VibeAuditResourceType, VibeAuditStatus, VibeCalendarExecutionStatus, VibeCalendarTaskStatus, VibeDeckButtonActionType, VibeDeckSharePermission, VibeDeckShareStatus, VibeDeckShareVisibility, VibeStatus, VibeType, VibecontrolsActionType, VibecontrolsDocsBuildImagePullPolicy, VibecontrolsDocsBuildImageScanStatus, VibecontrolsDocsBuildImageStatus, VibecontrolsDocsBuildRuntime, VibecontrolsDocsPageStatus, VibecontrolsDocsRevisionStatus, VibecontrolsDocsSiteOwnerType, VibecontrolsDocsSiteVisibility, VibecontrolsSessionStatus, VibecontrolsSessionType, VibecontrolsTemplateCategory, VibecontrolsTemplateStatus, Visibility, VisibilityType, VocabularyKind, VocabularyScope, WarehouseType, WebhookAuthType, WidgetConfidence, WidgetRenderer, WidgetType, WorkItemPriority, WorkItemStatus, WorkItemType, WorkOrderStatus, WorkOrderType, WorkPatternInsightType, WorkflowStatus, WorkspaceResourceStatus, WorkspaceResourceType, WorkspaceStatus, WorkspaceType, WorkspacesExportFormat } from './chunk-FKX2IOUQ.js';
11
+ export { WorkflowBuilder, WorkflowBuilderCore, WorkflowSearchRedirect } from './chunk-NOSLJG7N.js';
12
+ export { WorkflowBuilder as WorkflowBuilderPage } from './chunk-3SZ2KA6G.js';
13
+ import { FluidGridsProvider, FlowBuilderPage } from './chunk-C7DLBPWJ.js';
14
+ export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, ConnectionFormDialog, ConnectionSelector, EntityTagPicker, FLUIDGRIDS_ENTITY_TYPES, FluidGridsProvider, ProviderPicker, SchemaConnectionForm, ScopePicker, listCustomBlocks, refetchStoreNodes, registerCustomBlock, resolveUiSpec, stripSubmitActions, tagLabel, useAvailableTags, useConnection, useConnectionDialog, useConnections, useConnectionsByProvider, useCreateConnection, useCreateTag, useDraftEntityTags, useEntityTags, useFluidGridsContext, useInitiateOAuth, useNodeExecution, useProviderByKey, useProviderCatalog, useProviders, useReplaceEntityTags, useSearchTags, useTagEntity, useUntagEntity } from './chunk-C7DLBPWJ.js';
15
15
  export { Input } from './chunk-P5PKRQAO.js';
16
16
  export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger } from './chunk-NH5YCY37.js';
17
17
  export { Badge, Button, badgeVariants, buttonVariants } from './chunk-DBOMRIP5.js';
@@ -19,26 +19,32 @@ import { createGlobalStoreClient } from './chunk-BQXHJIER.js';
19
19
  export { createGlobalStoreClient, getGlobalStoreClient, resetGlobalStoreClient, setGlobalStoreClient } from './chunk-BQXHJIER.js';
20
20
  import './chunk-6LXMUIR3.js';
21
21
  import './chunk-XQP33UJR.js';
22
- export { WorkflowsList } from './chunk-XC7A7NLP.js';
22
+ export { WorkflowsList } from './chunk-IPVHC2DM.js';
23
23
  import './chunk-AANIWER2.js';
24
- export { ALLOW_ALL_PERMISSIONS, FLUIDGRIDS_PERMISSIONS, FluidGridsPermissionsProvider, SdkPermissionButton, SdkPermissionGate, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, evaluatePermissionCheck, useFluidGridsPermission } from './chunk-UIY2HBWA.js';
24
+ export { ALLOW_ALL_PERMISSIONS, FLUIDGRIDS_PERMISSIONS, FluidGridsPermissionsProvider, SdkPermissionButton, SdkPermissionGate, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, evaluatePermissionCheck, useFluidGridsPermission } from './chunk-W23ZXNKU.js';
25
25
  import { cn } from './chunk-3ZYUGTIT.js';
26
26
  export { cn } from './chunk-3ZYUGTIT.js';
27
27
  export { useActivateWorkflow, useCreateWorkflow, useCreateWorkflowVersion, useDashboardSummary, useDeactivateWorkflow, useDeleteWorkflow, useDuplicateWorkflow, useLazyWorkflowDefinition, useRestoreWorkflowVersion, useTriggerWorkflow, useUpdateWorkflow, useWorkflowDefinition, useWorkflowDefinitions, useWorkflowRun, useWorkflowRuns, useWorkflowVersions } from './chunk-CVVNQCFM.js';
28
+ import { throwIfResultError } from './chunk-LMO5ASOE.js';
28
29
  export { describeOperationError, throwIfResultError } from './chunk-LMO5ASOE.js';
29
30
  export { config, getFluidGridsConfig, getGraphQLEndpoint, resetFluidGridsConfig, setFluidGridsConfig } from './chunk-WWU2O2SR.js';
30
- import { createFluidGridsClient } from './chunk-5BDQNSP3.js';
31
+ import { getFluidGridsClient, createFluidGridsClient } from './chunk-5BDQNSP3.js';
31
32
  export { createFluidGridsClient, getFluidGridsClient, getFluidGridsClientSafe, isFluidGridsClientReady, resetFluidGridsClient, setFluidGridsClient, waitForFluidGridsClient } from './chunk-5BDQNSP3.js';
32
33
  export { useFlowStore } from './chunk-YMD3T6J2.js';
33
34
  export { ActivateWorkflowDefinitionDocument, ActiveExecutionsDocument, AvailableFluidgridsTagsDocument, CancelExecutionDocument, CreateFluidgridsTagDocument, CreateWorkflowDefinitionDocument, CreateWorkflowVersionDocument, DashboardSummaryDocument, DeactivateWorkflowDefinitionDocument, DeleteWorkflowDefinitionDocument, DuplicateWorkflowDocument, EventRegistrationsDocument, ExecutionDetailDocument, ExecutionLogsDocument, ExecutionStatsDocument, ExecutionsListDocument, FluidgridsAvailableTagFieldsFragmentDoc, FluidgridsEntityTagsDocument, FluidgridsTagAssignmentFieldsFragmentDoc, ImportWorkflowTemplateDocument, NodeEndpointConfigDocument, NodeEndpointConfigsDocument, NodeManifestDocument, NodeSchemaIntrospectionDocument, NodeStatesDocument, NodeUsageStatusDocument, PauseExecutionDocument, PinNodeDataDocument, RegisterNodeDocument, RemoveNodeFromWorkflowsDocument, ReplaceFluidgridsEntityTagsDocument, RestoreWorkflowVersionDocument, ResumeExecutionDocument, RetryNodeDocument, RunFromNodeDocument, RunLogAppendedDocument, RunLogLineFieldsFragmentDoc, RunLogsDocument, SearchFluidgridsTagsDocument, TagFluidgridsEntityDocument, TerminateExecutionDocument, TriggerWorkflowDocument, UnpinNodeDataDocument, UntagFluidgridsEntityDocument, UpdateWorkflowDefinitionDocument, UsageTimeSeriesDocument, WorkflowDefinitionDocument, WorkflowDefinitionsDocument, WorkflowDefinitionsTagsDocument, WorkflowPinnedDataDocument, WorkflowRunDocument, WorkflowRunsDocument, WorkflowVersionsDocument, useActivateWorkflowDefinitionMutation, useActiveExecutionsLazyQuery, useActiveExecutionsQuery, useActiveExecutionsSuspenseQuery, useAvailableFluidgridsTagsLazyQuery, useAvailableFluidgridsTagsQuery, useAvailableFluidgridsTagsSuspenseQuery, useCancelExecutionMutation, useCreateFluidgridsTagMutation, useCreateWorkflowDefinitionMutation, useCreateWorkflowVersionMutation, useDashboardSummaryLazyQuery, useDashboardSummaryQuery, useDashboardSummarySuspenseQuery, useDeactivateWorkflowDefinitionMutation, useDeleteWorkflowDefinitionMutation, useDuplicateWorkflowMutation, useEventRegistrationsLazyQuery, useEventRegistrationsQuery, useEventRegistrationsSuspenseQuery, useExecutionDetailLazyQuery, useExecutionDetailQuery, useExecutionDetailSuspenseQuery, useExecutionLogsLazyQuery, useExecutionLogsQuery, useExecutionLogsSuspenseQuery, useExecutionStatsLazyQuery, useExecutionStatsQuery, useExecutionStatsSuspenseQuery, useExecutionsListLazyQuery, useExecutionsListQuery, useExecutionsListSuspenseQuery, useFluidgridsEntityTagsLazyQuery, useFluidgridsEntityTagsQuery, useFluidgridsEntityTagsSuspenseQuery, useImportWorkflowTemplateMutation, useNodeEndpointConfigLazyQuery, useNodeEndpointConfigQuery, useNodeEndpointConfigSuspenseQuery, useNodeEndpointConfigsLazyQuery, useNodeEndpointConfigsQuery, useNodeEndpointConfigsSuspenseQuery, useNodeManifestLazyQuery, useNodeManifestQuery, useNodeManifestSuspenseQuery, useNodeSchemaIntrospectionLazyQuery, useNodeSchemaIntrospectionQuery, useNodeSchemaIntrospectionSuspenseQuery, useNodeStatesLazyQuery, useNodeStatesQuery, useNodeStatesSuspenseQuery, useNodeUsageStatusLazyQuery, useNodeUsageStatusQuery, useNodeUsageStatusSuspenseQuery, usePauseExecutionMutation, usePinNodeDataMutation, useRegisterNodeMutation, useRemoveNodeFromWorkflowsMutation, useReplaceFluidgridsEntityTagsMutation, useRestoreWorkflowVersionMutation, useResumeExecutionMutation, useRetryNodeMutation, useRunFromNodeMutation, useRunLogAppendedSubscription, useRunLogsLazyQuery, useRunLogsQuery, useRunLogsSuspenseQuery, useSearchFluidgridsTagsLazyQuery, useSearchFluidgridsTagsQuery, useSearchFluidgridsTagsSuspenseQuery, useTagFluidgridsEntityMutation, useTerminateExecutionMutation, useTriggerWorkflowMutation, useUnpinNodeDataMutation, useUntagFluidgridsEntityMutation, useUpdateWorkflowDefinitionMutation, useUsageTimeSeriesLazyQuery, useUsageTimeSeriesQuery, useUsageTimeSeriesSuspenseQuery, useWorkflowDefinitionLazyQuery, useWorkflowDefinitionQuery, useWorkflowDefinitionSuspenseQuery, useWorkflowDefinitionsLazyQuery, useWorkflowDefinitionsQuery, useWorkflowDefinitionsSuspenseQuery, useWorkflowDefinitionsTagsLazyQuery, useWorkflowDefinitionsTagsQuery, useWorkflowDefinitionsTagsSuspenseQuery, useWorkflowPinnedDataLazyQuery, useWorkflowPinnedDataQuery, useWorkflowPinnedDataSuspenseQuery, useWorkflowRunLazyQuery, useWorkflowRunQuery, useWorkflowRunSuspenseQuery, useWorkflowRunsLazyQuery, useWorkflowRunsQuery, useWorkflowRunsSuspenseQuery, useWorkflowVersionsLazyQuery, useWorkflowVersionsQuery, useWorkflowVersionsSuspenseQuery } from './chunk-BHITFSOK.js';
35
+ import { useTr } from './chunk-7YWBH2A5.js';
34
36
  export { ENGLISH_FALLBACK_TRANSLATOR, FluidGridsTranslationProvider, useTr } from './chunk-7YWBH2A5.js';
35
37
  import * as React4 from 'react';
36
- import { lazy, Suspense, useMemo, useState, useEffect } from 'react';
37
- import { Routes, Route, Navigate } from 'react-router';
38
+ import { lazy, Suspense, useMemo, useState, useEffect, useCallback } from 'react';
39
+ import { Routes, Route, Navigate, useNavigate } from 'react-router';
38
40
  import { jsx, jsxs } from 'react/jsx-runtime';
39
41
  import { Icon } from '@iconify/react';
40
42
  import { ErrorBoundary } from '@burdenoff/fe-libs/shared/components';
41
43
  import '@xyflow/react/dist/style.css';
44
+ import { Button } from '@burdenoff/fe-libs/button';
45
+ import { Tabs, TabsList, TabsTrigger, TabsContent, Card, Table, TableHeader, TableRow, TableHead, TableBody, TableCell, Badge, CardHeader, Label, Input, Switch, Dialog, DialogContent, DialogHeader, DialogTitle, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, DialogFooter } from '@burdenoff/fe-libs/ui';
46
+ import { toast } from 'sonner';
47
+ import { gql } from '@apollo/client';
42
48
  import * as TabsPrimitive from '@radix-ui/react-tabs';
43
49
  import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
44
50
  import * as SeparatorPrimitive from '@radix-ui/react-separator';
@@ -50,10 +56,10 @@ import * as SwitchPrimitives from '@radix-ui/react-switch';
50
56
  import * as PopoverPrimitive from '@radix-ui/react-popover';
51
57
 
52
58
  var WorkflowsList2 = lazy(
53
- () => import('./WorkflowsList-DUCKDRKC.js').then((m) => ({ default: m.WorkflowsList }))
59
+ () => import('./WorkflowsList-JHM7Q5HE.js').then((m) => ({ default: m.WorkflowsList }))
54
60
  );
55
61
  var WorkflowBuilder3 = lazy(
56
- () => import('./WorkflowBuilder-DS4EK7JE.js').then((m) => ({
62
+ () => import('./WorkflowBuilder-YV3J2D44.js').then((m) => ({
57
63
  default: m.WorkflowBuilder
58
64
  }))
59
65
  );
@@ -63,7 +69,7 @@ var ExecutionsListPage2 = lazy(
63
69
  }))
64
70
  );
65
71
  var ExecutionDetailPage2 = lazy(
66
- () => import('./ExecutionDetailPage-V3LXDOAT.js').then((m) => ({
72
+ () => import('./ExecutionDetailPage-OSDL7NDT.js').then((m) => ({
67
73
  default: m.ExecutionDetailPage
68
74
  }))
69
75
  );
@@ -306,6 +312,867 @@ function postToParent(payload) {
306
312
  if (window.parent === window) return;
307
313
  window.parent.postMessage(payload, "*");
308
314
  }
315
+ var VARIABLE_FIELDS = gql`
316
+ fragment WorkflowVariableFields on WorkflowVariable {
317
+ id
318
+ scope
319
+ workspaceId
320
+ projectId
321
+ key
322
+ description
323
+ isSecret
324
+ externalProvider
325
+ externalRef
326
+ value
327
+ createdAt
328
+ updatedAt
329
+ createdBy
330
+ updatedBy
331
+ }
332
+ `;
333
+ var GET_WORKFLOW_VARIABLES = gql`
334
+ ${VARIABLE_FIELDS}
335
+ query GetWorkflowVariables($scope: VariableScope, $projectId: ID) {
336
+ workflowVariables(scope: $scope, projectId: $projectId) {
337
+ variables {
338
+ ...WorkflowVariableFields
339
+ }
340
+ total
341
+ }
342
+ }
343
+ `;
344
+ var CREATE_WORKFLOW_VARIABLE = gql`
345
+ ${VARIABLE_FIELDS}
346
+ mutation CreateWorkflowVariable($input: CreateWorkflowVariableInput!) {
347
+ createWorkflowVariable(input: $input) {
348
+ success
349
+ message
350
+ variable {
351
+ ...WorkflowVariableFields
352
+ }
353
+ }
354
+ }
355
+ `;
356
+ var UPDATE_WORKFLOW_VARIABLE = gql`
357
+ ${VARIABLE_FIELDS}
358
+ mutation UpdateWorkflowVariable(
359
+ $id: ID!
360
+ $input: UpdateWorkflowVariableInput!
361
+ ) {
362
+ updateWorkflowVariable(id: $id, input: $input) {
363
+ success
364
+ message
365
+ variable {
366
+ ...WorkflowVariableFields
367
+ }
368
+ }
369
+ }
370
+ `;
371
+ var DELETE_WORKFLOW_VARIABLE = gql`
372
+ mutation DeleteWorkflowVariable($id: ID!) {
373
+ deleteWorkflowVariable(id: $id) {
374
+ success
375
+ message
376
+ }
377
+ }
378
+ `;
379
+ var REVEAL_WORKFLOW_VARIABLE_VALUE = gql`
380
+ mutation RevealWorkflowVariableValue($id: ID!) {
381
+ revealWorkflowVariableValue(id: $id) {
382
+ success
383
+ message
384
+ value
385
+ }
386
+ }
387
+ `;
388
+ var GET_SECRETS_PROVIDER_CONFIGS = gql`
389
+ query GetSecretsProviderConfigs {
390
+ secretsProviderConfigs {
391
+ id
392
+ workspaceId
393
+ provider
394
+ awsSecretsManagerPrefix
395
+ awsRegion
396
+ vaultAddress
397
+ vaultMountPath
398
+ azureKeyVaultUri
399
+ gcpProjectId
400
+ isEnabled
401
+ lastTestedAt
402
+ lastTestStatus
403
+ lastTestMessage
404
+ createdAt
405
+ updatedAt
406
+ }
407
+ }
408
+ `;
409
+ var SAVE_SECRETS_PROVIDER_CONFIG = gql`
410
+ mutation SaveSecretsProviderConfig($input: SaveSecretsProviderConfigInput!) {
411
+ saveSecretsProviderConfig(input: $input) {
412
+ success
413
+ message
414
+ config {
415
+ id
416
+ provider
417
+ awsSecretsManagerPrefix
418
+ awsRegion
419
+ isEnabled
420
+ lastTestedAt
421
+ lastTestStatus
422
+ lastTestMessage
423
+ }
424
+ }
425
+ }
426
+ `;
427
+ var TEST_SECRETS_PROVIDER_CONNECTION = gql`
428
+ mutation TestSecretsProviderConnection($provider: SecretProviderType!) {
429
+ testSecretsProviderConnection(provider: $provider) {
430
+ success
431
+ message
432
+ }
433
+ }
434
+ `;
435
+ function useVariables(filter) {
436
+ const [variables, setVariables] = useState([]);
437
+ const [total, setTotal] = useState(0);
438
+ const [loading, setLoading] = useState(true);
439
+ const [error, setError] = useState(null);
440
+ const scope = filter?.scope;
441
+ const projectId = filter?.projectId;
442
+ const fetchData = useCallback(async () => {
443
+ setLoading(true);
444
+ setError(null);
445
+ try {
446
+ const client = getFluidGridsClient();
447
+ const result = await client.query({
448
+ query: GET_WORKFLOW_VARIABLES,
449
+ variables: { scope, projectId },
450
+ fetchPolicy: "network-only"
451
+ });
452
+ setVariables(result.data?.workflowVariables?.variables ?? []);
453
+ setTotal(result.data?.workflowVariables?.total ?? 0);
454
+ } catch (err) {
455
+ setError(err);
456
+ } finally {
457
+ setLoading(false);
458
+ }
459
+ }, [scope, projectId]);
460
+ useEffect(() => {
461
+ fetchData();
462
+ }, [fetchData]);
463
+ return { variables, total, loading, error, refetch: fetchData };
464
+ }
465
+ function useCreateVariable() {
466
+ const [loading, setLoading] = useState(false);
467
+ const [error, setError] = useState(null);
468
+ const createVariable = useCallback(
469
+ async (input) => {
470
+ setLoading(true);
471
+ setError(null);
472
+ try {
473
+ const client = getFluidGridsClient();
474
+ const result = throwIfResultError(
475
+ await client.mutate({ mutation: CREATE_WORKFLOW_VARIABLE, variables: { input } })
476
+ );
477
+ const response = result.data?.createWorkflowVariable;
478
+ if (!response?.success)
479
+ throw new Error(response?.message ?? "Failed to create variable");
480
+ return response.variable;
481
+ } catch (err) {
482
+ setError(err);
483
+ throw err;
484
+ } finally {
485
+ setLoading(false);
486
+ }
487
+ },
488
+ []
489
+ );
490
+ return { createVariable, loading, error };
491
+ }
492
+ function useUpdateVariable() {
493
+ const [loading, setLoading] = useState(false);
494
+ const [error, setError] = useState(null);
495
+ const updateVariable = useCallback(
496
+ async (id, input) => {
497
+ setLoading(true);
498
+ setError(null);
499
+ try {
500
+ const client = getFluidGridsClient();
501
+ const result = throwIfResultError(
502
+ await client.mutate({ mutation: UPDATE_WORKFLOW_VARIABLE, variables: { id, input } })
503
+ );
504
+ const response = result.data?.updateWorkflowVariable;
505
+ if (!response?.success)
506
+ throw new Error(response?.message ?? "Failed to update variable");
507
+ return response.variable;
508
+ } catch (err) {
509
+ setError(err);
510
+ throw err;
511
+ } finally {
512
+ setLoading(false);
513
+ }
514
+ },
515
+ []
516
+ );
517
+ return { updateVariable, loading, error };
518
+ }
519
+ function useDeleteVariable() {
520
+ const [loading, setLoading] = useState(false);
521
+ const [error, setError] = useState(null);
522
+ const deleteVariable = useCallback(async (id) => {
523
+ setLoading(true);
524
+ setError(null);
525
+ try {
526
+ const client = getFluidGridsClient();
527
+ const result = throwIfResultError(
528
+ await client.mutate({
529
+ mutation: DELETE_WORKFLOW_VARIABLE,
530
+ variables: { id }
531
+ })
532
+ );
533
+ const response = result.data?.deleteWorkflowVariable;
534
+ if (!response?.success)
535
+ throw new Error(response?.message ?? "Failed to delete variable");
536
+ return true;
537
+ } catch (err) {
538
+ setError(err);
539
+ throw err;
540
+ } finally {
541
+ setLoading(false);
542
+ }
543
+ }, []);
544
+ return { deleteVariable, loading, error };
545
+ }
546
+ function useRevealVariableValue() {
547
+ const [loading, setLoading] = useState(false);
548
+ const [error, setError] = useState(null);
549
+ const revealValue = useCallback(async (id) => {
550
+ setLoading(true);
551
+ setError(null);
552
+ try {
553
+ const client = getFluidGridsClient();
554
+ const result = throwIfResultError(
555
+ await client.mutate({ mutation: REVEAL_WORKFLOW_VARIABLE_VALUE, variables: { id } })
556
+ );
557
+ const response = result.data?.revealWorkflowVariableValue;
558
+ if (!response?.success)
559
+ throw new Error(response?.message ?? "Failed to reveal value");
560
+ return response.value ?? "";
561
+ } catch (err) {
562
+ setError(err);
563
+ throw err;
564
+ } finally {
565
+ setLoading(false);
566
+ }
567
+ }, []);
568
+ return { revealValue, loading, error };
569
+ }
570
+ function useSecretsProviderConfigs() {
571
+ const [configs, setConfigs] = useState([]);
572
+ const [loading, setLoading] = useState(true);
573
+ const [error, setError] = useState(null);
574
+ const fetchData = useCallback(async () => {
575
+ setLoading(true);
576
+ setError(null);
577
+ try {
578
+ const client = getFluidGridsClient();
579
+ const result = await client.query({
580
+ query: GET_SECRETS_PROVIDER_CONFIGS,
581
+ fetchPolicy: "network-only"
582
+ });
583
+ setConfigs(result.data?.secretsProviderConfigs ?? []);
584
+ } catch (err) {
585
+ setError(err);
586
+ } finally {
587
+ setLoading(false);
588
+ }
589
+ }, []);
590
+ useEffect(() => {
591
+ fetchData();
592
+ }, [fetchData]);
593
+ return { configs, loading, error, refetch: fetchData };
594
+ }
595
+ function useSaveSecretsProviderConfig() {
596
+ const [loading, setLoading] = useState(false);
597
+ const [error, setError] = useState(null);
598
+ const saveConfig = useCallback(
599
+ async (input) => {
600
+ setLoading(true);
601
+ setError(null);
602
+ try {
603
+ const client = getFluidGridsClient();
604
+ const result = throwIfResultError(
605
+ await client.mutate({ mutation: SAVE_SECRETS_PROVIDER_CONFIG, variables: { input } })
606
+ );
607
+ const response = result.data?.saveSecretsProviderConfig;
608
+ if (!response?.success)
609
+ throw new Error(
610
+ response?.message ?? "Failed to save provider configuration"
611
+ );
612
+ return response.config;
613
+ } catch (err) {
614
+ setError(err);
615
+ throw err;
616
+ } finally {
617
+ setLoading(false);
618
+ }
619
+ },
620
+ []
621
+ );
622
+ return { saveConfig, loading, error };
623
+ }
624
+ function useTestSecretsProviderConnection() {
625
+ const [loading, setLoading] = useState(false);
626
+ const [error, setError] = useState(null);
627
+ const testConnection = useCallback(async (provider) => {
628
+ setLoading(true);
629
+ setError(null);
630
+ try {
631
+ const client = getFluidGridsClient();
632
+ const result = throwIfResultError(
633
+ await client.mutate({
634
+ mutation: TEST_SECRETS_PROVIDER_CONNECTION,
635
+ variables: { provider }
636
+ })
637
+ );
638
+ return result.data?.testSecretsProviderConnection ?? {
639
+ success: false,
640
+ message: "Unknown error"
641
+ };
642
+ } catch (err) {
643
+ setError(err);
644
+ throw err;
645
+ } finally {
646
+ setLoading(false);
647
+ }
648
+ }, []);
649
+ return { testConnection, loading, error };
650
+ }
651
+ function VariableValueCell({ variable }) {
652
+ const tr = useTr();
653
+ const { revealValue, loading } = useRevealVariableValue();
654
+ const [revealed, setRevealed] = useState(null);
655
+ const isMasked = variable.isSecret || variable.externalProvider !== "NONE";
656
+ const handleReveal = useCallback(async () => {
657
+ try {
658
+ const value = await revealValue(variable.id);
659
+ setRevealed(value);
660
+ setTimeout(() => setRevealed(null), 15e3);
661
+ } catch (err) {
662
+ toast.error(
663
+ err instanceof Error ? err.message : tr("fluidgrids.variables.revealFailed", "Failed to reveal value")
664
+ );
665
+ }
666
+ }, [revealValue, variable.id, tr]);
667
+ if (variable.externalProvider !== "NONE" && revealed === null) {
668
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
669
+ /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "font-mono text-xs", children: variable.externalProvider }),
670
+ variable.externalRef && /* @__PURE__ */ jsx(
671
+ "span",
672
+ {
673
+ className: "text-xs text-text-secondary truncate max-w-[160px]",
674
+ title: variable.externalRef,
675
+ children: variable.externalRef
676
+ }
677
+ ),
678
+ /* @__PURE__ */ jsx(
679
+ "button",
680
+ {
681
+ onClick: handleReveal,
682
+ disabled: loading,
683
+ className: "text-xs text-text-secondary hover:text-text-primary underline",
684
+ children: tr("fluidgrids.variables.reveal", "Reveal")
685
+ }
686
+ )
687
+ ] });
688
+ }
689
+ if (!isMasked) {
690
+ return /* @__PURE__ */ jsx("code", { className: "text-sm text-text-primary", children: variable.value ?? "" });
691
+ }
692
+ if (revealed !== null) {
693
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
694
+ /* @__PURE__ */ jsx("code", { className: "text-sm text-text-primary break-all", children: revealed }),
695
+ /* @__PURE__ */ jsx(
696
+ "button",
697
+ {
698
+ onClick: () => setRevealed(null),
699
+ className: "text-xs text-text-secondary hover:text-text-primary underline shrink-0",
700
+ children: tr("fluidgrids.variables.hide", "Hide")
701
+ }
702
+ )
703
+ ] });
704
+ }
705
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
706
+ /* @__PURE__ */ jsx("span", { className: "tracking-widest text-text-secondary select-none", children: "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022" }),
707
+ /* @__PURE__ */ jsx(
708
+ "button",
709
+ {
710
+ onClick: handleReveal,
711
+ disabled: loading,
712
+ className: "text-xs text-text-secondary hover:text-text-primary underline",
713
+ children: loading ? tr("fluidgrids.variables.revealing", "Revealing\u2026") : tr("fluidgrids.variables.reveal", "Reveal")
714
+ }
715
+ )
716
+ ] });
717
+ }
718
+ function VariableFormDialog({
719
+ open,
720
+ onOpenChange,
721
+ variable,
722
+ onSaved
723
+ }) {
724
+ const tr = useTr();
725
+ const { createVariable, loading: creating } = useCreateVariable();
726
+ const { updateVariable, loading: updating } = useUpdateVariable();
727
+ const isEdit = !!variable;
728
+ const [key, setKey] = useState(variable?.key ?? "");
729
+ const [description, setDescription] = useState(variable?.description ?? "");
730
+ const [isSecret, setIsSecret] = useState(variable?.isSecret ?? false);
731
+ const [value, setValue] = useState("");
732
+ const [scope, setScope] = useState(
733
+ variable?.scope ?? "WORKSPACE"
734
+ );
735
+ const resetForm = useCallback(() => {
736
+ setKey(variable?.key ?? "");
737
+ setDescription(variable?.description ?? "");
738
+ setIsSecret(variable?.isSecret ?? false);
739
+ setValue("");
740
+ setScope(variable?.scope ?? "WORKSPACE");
741
+ }, [variable]);
742
+ const handleSubmit = useCallback(async () => {
743
+ try {
744
+ if (isEdit && variable) {
745
+ await updateVariable(variable.id, {
746
+ description: description || void 0,
747
+ isSecret,
748
+ ...value ? { value } : {}
749
+ });
750
+ toast.success(tr("fluidgrids.variables.updated", "Variable updated"));
751
+ } else {
752
+ if (!key.trim()) {
753
+ toast.error(
754
+ tr("fluidgrids.variables.keyRequired", "Key is required")
755
+ );
756
+ return;
757
+ }
758
+ await createVariable({
759
+ key: key.trim(),
760
+ description: description || void 0,
761
+ isSecret,
762
+ value,
763
+ scope
764
+ });
765
+ toast.success(tr("fluidgrids.variables.created", "Variable created"));
766
+ }
767
+ onSaved();
768
+ onOpenChange(false);
769
+ } catch (err) {
770
+ toast.error(
771
+ err instanceof Error ? err.message : tr("fluidgrids.variables.saveFailed", "Failed to save variable")
772
+ );
773
+ }
774
+ }, [
775
+ isEdit,
776
+ variable,
777
+ key,
778
+ description,
779
+ isSecret,
780
+ value,
781
+ scope,
782
+ createVariable,
783
+ updateVariable,
784
+ onSaved,
785
+ onOpenChange,
786
+ tr
787
+ ]);
788
+ return /* @__PURE__ */ jsx(
789
+ Dialog,
790
+ {
791
+ open,
792
+ onOpenChange: (next) => {
793
+ if (next) resetForm();
794
+ onOpenChange(next);
795
+ },
796
+ children: /* @__PURE__ */ jsxs(DialogContent, { className: "max-w-md", children: [
797
+ /* @__PURE__ */ jsx(DialogHeader, { children: /* @__PURE__ */ jsx(DialogTitle, { children: isEdit ? tr("fluidgrids.variables.editTitle", "Edit variable") : tr("fluidgrids.variables.createTitle", "New variable") }) }),
798
+ /* @__PURE__ */ jsxs("div", { className: "space-y-4 py-2", children: [
799
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
800
+ /* @__PURE__ */ jsx(Label, { htmlFor: "variable-key", children: tr("fluidgrids.variables.keyLabel", "Key") }),
801
+ /* @__PURE__ */ jsx(
802
+ Input,
803
+ {
804
+ id: "variable-key",
805
+ value: key,
806
+ onChange: (e) => setKey(e.target.value),
807
+ disabled: isEdit,
808
+ placeholder: "API_URL"
809
+ }
810
+ ),
811
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-text-secondary", children: tr(
812
+ "fluidgrids.variables.keyHint",
813
+ "Use it in expressions as {{ $vars.KEY }} or ${vars.KEY}"
814
+ ) })
815
+ ] }),
816
+ !isEdit && /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
817
+ /* @__PURE__ */ jsx(Label, { htmlFor: "variable-scope", children: tr("fluidgrids.variables.scopeLabel", "Scope") }),
818
+ /* @__PURE__ */ jsxs(
819
+ Select,
820
+ {
821
+ value: scope,
822
+ onValueChange: (v) => setScope(v),
823
+ children: [
824
+ /* @__PURE__ */ jsx(SelectTrigger, { id: "variable-scope", children: /* @__PURE__ */ jsx(SelectValue, {}) }),
825
+ /* @__PURE__ */ jsxs(SelectContent, { children: [
826
+ /* @__PURE__ */ jsx(SelectItem, { value: "WORKSPACE", children: tr("fluidgrids.variables.scopeWorkspace", "Workspace") }),
827
+ /* @__PURE__ */ jsx(SelectItem, { value: "PROJECT", children: tr("fluidgrids.variables.scopeProject", "Project") })
828
+ ] })
829
+ ]
830
+ }
831
+ )
832
+ ] }),
833
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
834
+ /* @__PURE__ */ jsx(Label, { htmlFor: "variable-description", children: tr("fluidgrids.variables.descriptionLabel", "Description") }),
835
+ /* @__PURE__ */ jsx(
836
+ Input,
837
+ {
838
+ id: "variable-description",
839
+ value: description,
840
+ onChange: (e) => setDescription(e.target.value),
841
+ placeholder: tr(
842
+ "fluidgrids.variables.descriptionPlaceholder",
843
+ "Optional"
844
+ )
845
+ }
846
+ )
847
+ ] }),
848
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between py-1", children: [
849
+ /* @__PURE__ */ jsxs("div", { children: [
850
+ /* @__PURE__ */ jsx(Label, { htmlFor: "variable-secret", children: tr("fluidgrids.variables.secretLabel", "Secret value") }),
851
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-text-secondary", children: tr(
852
+ "fluidgrids.variables.secretHint",
853
+ "Masked in the UI and never printed to run logs"
854
+ ) })
855
+ ] }),
856
+ /* @__PURE__ */ jsx(
857
+ Switch,
858
+ {
859
+ id: "variable-secret",
860
+ checked: isSecret,
861
+ onCheckedChange: setIsSecret
862
+ }
863
+ )
864
+ ] }),
865
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
866
+ /* @__PURE__ */ jsx(Label, { htmlFor: "variable-value", children: tr("fluidgrids.variables.valueLabel", "Value") }),
867
+ /* @__PURE__ */ jsx(
868
+ Input,
869
+ {
870
+ id: "variable-value",
871
+ type: isSecret ? "password" : "text",
872
+ value,
873
+ onChange: (e) => setValue(e.target.value),
874
+ placeholder: isEdit ? tr(
875
+ "fluidgrids.variables.valueLeaveBlank",
876
+ "Leave blank to keep the current value"
877
+ ) : ""
878
+ }
879
+ )
880
+ ] })
881
+ ] }),
882
+ /* @__PURE__ */ jsxs(DialogFooter, { children: [
883
+ /* @__PURE__ */ jsx(Button, { variant: "outline", onClick: () => onOpenChange(false), children: tr("fluidgrids.variables.cancel", "Cancel") }),
884
+ /* @__PURE__ */ jsx(Button, { onClick: handleSubmit, disabled: creating || updating, children: creating || updating ? tr("fluidgrids.variables.saving", "Saving\u2026") : tr("fluidgrids.variables.save", "Save") })
885
+ ] })
886
+ ] })
887
+ }
888
+ );
889
+ }
890
+ function VariablesTab() {
891
+ const tr = useTr();
892
+ const { variables, loading, refetch } = useVariables();
893
+ const { deleteVariable } = useDeleteVariable();
894
+ const [dialogOpen, setDialogOpen] = useState(false);
895
+ const [editing, setEditing] = useState(null);
896
+ const handleCreate = useCallback(() => {
897
+ setEditing(null);
898
+ setDialogOpen(true);
899
+ }, []);
900
+ const handleEdit = useCallback((variable) => {
901
+ setEditing(variable);
902
+ setDialogOpen(true);
903
+ }, []);
904
+ const handleDelete = useCallback(
905
+ async (variable) => {
906
+ if (!window.confirm(
907
+ tr(
908
+ "fluidgrids.variables.confirmDelete",
909
+ `Delete variable "${variable.key}"?`
910
+ )
911
+ ))
912
+ return;
913
+ try {
914
+ await deleteVariable(variable.id);
915
+ toast.success(tr("fluidgrids.variables.deleted", "Variable deleted"));
916
+ refetch();
917
+ } catch (err) {
918
+ toast.error(
919
+ err instanceof Error ? err.message : tr(
920
+ "fluidgrids.variables.deleteFailed",
921
+ "Failed to delete variable"
922
+ )
923
+ );
924
+ }
925
+ },
926
+ [deleteVariable, refetch, tr]
927
+ );
928
+ return /* @__PURE__ */ jsxs("div", { children: [
929
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-4", children: [
930
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-text-secondary", children: tr(
931
+ "fluidgrids.variables.tabDescription",
932
+ "Reference these in any node parameter as {{ $vars.KEY }} (new expressions) or ${vars.KEY} (legacy)."
933
+ ) }),
934
+ /* @__PURE__ */ jsxs(Button, { onClick: handleCreate, size: "sm", children: [
935
+ /* @__PURE__ */ jsx(Icon, { icon: "mdi:plus", className: "mr-1.5", width: 16 }),
936
+ tr("fluidgrids.variables.newVariable", "New Variable")
937
+ ] })
938
+ ] }),
939
+ /* @__PURE__ */ jsx(Card, { className: "border border-border-secondary bg-background-secondary", children: /* @__PURE__ */ jsxs(Table, { children: [
940
+ /* @__PURE__ */ jsx(TableHeader, { children: /* @__PURE__ */ jsxs(TableRow, { children: [
941
+ /* @__PURE__ */ jsx(TableHead, { children: tr("fluidgrids.variables.colKey", "Key") }),
942
+ /* @__PURE__ */ jsx(TableHead, { children: tr("fluidgrids.variables.colScope", "Scope") }),
943
+ /* @__PURE__ */ jsx(TableHead, { children: tr("fluidgrids.variables.colValue", "Value") }),
944
+ /* @__PURE__ */ jsx(TableHead, { className: "text-right", children: tr("fluidgrids.variables.colActions", "Actions") })
945
+ ] }) }),
946
+ /* @__PURE__ */ jsxs(TableBody, { children: [
947
+ loading && /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(
948
+ TableCell,
949
+ {
950
+ colSpan: 4,
951
+ className: "text-center text-text-secondary py-8",
952
+ children: tr("fluidgrids.variables.loading", "Loading\u2026")
953
+ }
954
+ ) }),
955
+ !loading && variables.length === 0 && /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(
956
+ TableCell,
957
+ {
958
+ colSpan: 4,
959
+ className: "text-center text-text-secondary py-8",
960
+ children: tr("fluidgrids.variables.empty", "No variables yet")
961
+ }
962
+ ) }),
963
+ variables.map((variable) => /* @__PURE__ */ jsxs(TableRow, { children: [
964
+ /* @__PURE__ */ jsxs(TableCell, { children: [
965
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
966
+ /* @__PURE__ */ jsx("code", { className: "text-sm font-medium text-text-primary", children: variable.key }),
967
+ variable.isSecret && /* @__PURE__ */ jsx(Badge, { variant: "outline", className: "text-[10px]", children: tr("fluidgrids.variables.secretBadge", "SECRET") })
968
+ ] }),
969
+ variable.description && /* @__PURE__ */ jsx("p", { className: "text-xs text-text-secondary mt-0.5", children: variable.description })
970
+ ] }),
971
+ /* @__PURE__ */ jsx(TableCell, { className: "text-text-secondary text-sm", children: variable.scope }),
972
+ /* @__PURE__ */ jsx(TableCell, { children: /* @__PURE__ */ jsx(VariableValueCell, { variable }) }),
973
+ /* @__PURE__ */ jsx(TableCell, { className: "text-right", children: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-end gap-1", children: [
974
+ /* @__PURE__ */ jsx(
975
+ "button",
976
+ {
977
+ onClick: () => handleEdit(variable),
978
+ className: "p-1.5 rounded hover:bg-background-tertiary text-text-secondary hover:text-text-primary",
979
+ title: tr("fluidgrids.variables.edit", "Edit"),
980
+ children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:pencil-outline", width: 16 })
981
+ }
982
+ ),
983
+ /* @__PURE__ */ jsx(
984
+ "button",
985
+ {
986
+ onClick: () => handleDelete(variable),
987
+ className: "p-1.5 rounded hover:bg-background-tertiary text-text-secondary hover:text-red-400",
988
+ title: tr("fluidgrids.variables.delete", "Delete"),
989
+ children: /* @__PURE__ */ jsx(Icon, { icon: "mdi:trash-can-outline", width: 16 })
990
+ }
991
+ )
992
+ ] }) })
993
+ ] }, variable.id))
994
+ ] })
995
+ ] }) }),
996
+ /* @__PURE__ */ jsx(
997
+ VariableFormDialog,
998
+ {
999
+ open: dialogOpen,
1000
+ onOpenChange: setDialogOpen,
1001
+ variable: editing,
1002
+ onSaved: refetch
1003
+ }
1004
+ )
1005
+ ] });
1006
+ }
1007
+ function ExternalProvidersTab() {
1008
+ const tr = useTr();
1009
+ const { configs, loading, refetch } = useSecretsProviderConfigs();
1010
+ const { saveConfig, loading: saving } = useSaveSecretsProviderConfig();
1011
+ const { testConnection, loading: testing } = useTestSecretsProviderConnection();
1012
+ const awsConfig = configs.find((c) => c.provider === "AWS_SECRETS_MANAGER");
1013
+ const [prefix, setPrefix] = useState(
1014
+ awsConfig?.awsSecretsManagerPrefix ?? ""
1015
+ );
1016
+ const [region, setRegion] = useState(awsConfig?.awsRegion ?? "ap-south-1");
1017
+ const [enabled, setEnabled] = useState(awsConfig?.isEnabled ?? false);
1018
+ const [lastTest, setLastTest] = useState(
1019
+ awsConfig?.lastTestStatus ? {
1020
+ success: awsConfig.lastTestStatus === "SUCCESS",
1021
+ message: awsConfig.lastTestMessage ?? ""
1022
+ } : null
1023
+ );
1024
+ const handleSave = useCallback(async () => {
1025
+ try {
1026
+ await saveConfig({
1027
+ provider: "AWS_SECRETS_MANAGER",
1028
+ awsSecretsManagerPrefix: prefix || void 0,
1029
+ awsRegion: region || void 0,
1030
+ isEnabled: enabled
1031
+ });
1032
+ toast.success(
1033
+ tr(
1034
+ "fluidgrids.variables.providerSaved",
1035
+ "Provider configuration saved"
1036
+ )
1037
+ );
1038
+ refetch();
1039
+ } catch (err) {
1040
+ toast.error(
1041
+ err instanceof Error ? err.message : tr("fluidgrids.variables.providerSaveFailed", "Failed to save")
1042
+ );
1043
+ }
1044
+ }, [saveConfig, prefix, region, enabled, refetch, tr]);
1045
+ const handleTest = useCallback(async () => {
1046
+ try {
1047
+ const result = await testConnection(
1048
+ "AWS_SECRETS_MANAGER"
1049
+ );
1050
+ setLastTest(result);
1051
+ if (result.success) {
1052
+ toast.success(result.message);
1053
+ } else {
1054
+ toast.error(result.message);
1055
+ }
1056
+ } catch (err) {
1057
+ toast.error(
1058
+ err instanceof Error ? err.message : tr("fluidgrids.variables.testFailed", "Connection test failed")
1059
+ );
1060
+ }
1061
+ }, [testConnection, tr]);
1062
+ if (loading) {
1063
+ return /* @__PURE__ */ jsx("p", { className: "text-text-secondary text-sm", children: tr("fluidgrids.variables.loading", "Loading\u2026") });
1064
+ }
1065
+ return /* @__PURE__ */ jsxs("div", { className: "space-y-4 max-w-xl", children: [
1066
+ /* @__PURE__ */ jsx(Card, { className: "border border-border-secondary bg-background-secondary", children: /* @__PURE__ */ jsxs(CardHeader, { className: "pb-3 space-y-4", children: [
1067
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
1068
+ /* @__PURE__ */ jsx(Icon, { icon: "mdi:aws", width: 20, className: "text-text-secondary" }),
1069
+ /* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-text-primary", children: tr(
1070
+ "fluidgrids.variables.awsProviderTitle",
1071
+ "AWS Secrets Manager"
1072
+ ) })
1073
+ ] }),
1074
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-text-secondary", children: tr(
1075
+ "fluidgrids.variables.awsProviderDescription",
1076
+ "A variable can reference a secret stored in AWS Secrets Manager instead of storing its own value. Only secrets under the prefix below are reachable."
1077
+ ) }),
1078
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
1079
+ /* @__PURE__ */ jsx(Label, { htmlFor: "aws-prefix", children: tr(
1080
+ "fluidgrids.variables.awsPrefixLabel",
1081
+ "Secrets Manager prefix"
1082
+ ) }),
1083
+ /* @__PURE__ */ jsx(
1084
+ Input,
1085
+ {
1086
+ id: "aws-prefix",
1087
+ value: prefix,
1088
+ onChange: (e) => setPrefix(e.target.value),
1089
+ placeholder: "boff/prod/wspace/workflow/vars/"
1090
+ }
1091
+ )
1092
+ ] }),
1093
+ /* @__PURE__ */ jsxs("div", { className: "space-y-1.5", children: [
1094
+ /* @__PURE__ */ jsx(Label, { htmlFor: "aws-region", children: tr("fluidgrids.variables.awsRegionLabel", "Region") }),
1095
+ /* @__PURE__ */ jsx(
1096
+ Input,
1097
+ {
1098
+ id: "aws-region",
1099
+ value: region,
1100
+ onChange: (e) => setRegion(e.target.value)
1101
+ }
1102
+ )
1103
+ ] }),
1104
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
1105
+ /* @__PURE__ */ jsx(Label, { htmlFor: "aws-enabled", children: tr("fluidgrids.variables.awsEnabledLabel", "Enabled") }),
1106
+ /* @__PURE__ */ jsx(
1107
+ Switch,
1108
+ {
1109
+ id: "aws-enabled",
1110
+ checked: enabled,
1111
+ onCheckedChange: setEnabled
1112
+ }
1113
+ )
1114
+ ] }),
1115
+ lastTest && /* @__PURE__ */ jsx(
1116
+ "div",
1117
+ {
1118
+ className: `text-xs rounded-md px-3 py-2 border ${lastTest.success ? "border-emerald-500/30 bg-emerald-500/10 text-emerald-400" : "border-red-500/30 bg-red-500/10 text-red-400"}`,
1119
+ children: lastTest.message
1120
+ }
1121
+ ),
1122
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2 pt-1", children: [
1123
+ /* @__PURE__ */ jsx(Button, { onClick: handleSave, disabled: saving, size: "sm", children: saving ? tr("fluidgrids.variables.saving", "Saving\u2026") : tr("fluidgrids.variables.save", "Save") }),
1124
+ /* @__PURE__ */ jsx(
1125
+ Button,
1126
+ {
1127
+ onClick: handleTest,
1128
+ disabled: testing,
1129
+ variant: "outline",
1130
+ size: "sm",
1131
+ children: testing ? tr("fluidgrids.variables.testing", "Testing\u2026") : tr("fluidgrids.variables.testConnection", "Test connection")
1132
+ }
1133
+ )
1134
+ ] })
1135
+ ] }) }),
1136
+ /* @__PURE__ */ jsx("p", { className: "text-xs text-text-secondary", children: tr(
1137
+ "fluidgrids.variables.otherProvidersNote",
1138
+ "HashiCorp Vault, Azure Key Vault, and GCP Secret Manager are not available yet."
1139
+ ) })
1140
+ ] });
1141
+ }
1142
+ function VariablesPage() {
1143
+ const tr = useTr();
1144
+ const navigate = useNavigate();
1145
+ const [activeTab, setActiveTab] = useState("variables");
1146
+ return /* @__PURE__ */ jsxs("div", { className: "p-4 sm:p-6 bg-background-primary min-h-screen", children: [
1147
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6", children: [
1148
+ /* @__PURE__ */ jsxs("div", { children: [
1149
+ /* @__PURE__ */ jsx("h1", { className: "text-2xl sm:text-3xl font-bold text-text-primary", children: tr("fluidgrids.variables.pageTitle", "Variables") }),
1150
+ /* @__PURE__ */ jsx("p", { className: "text-text-secondary mt-1", children: tr(
1151
+ "fluidgrids.variables.pageSubtitle",
1152
+ "Reusable values workflows can reference as $vars"
1153
+ ) })
1154
+ ] }),
1155
+ /* @__PURE__ */ jsxs(Button, { variant: "outline", onClick: () => navigate("../list"), children: [
1156
+ /* @__PURE__ */ jsx(Icon, { icon: "mdi:arrow-left", className: "mr-2", width: 16 }),
1157
+ tr("fluidgrids.variables.backToWorkflows", "Back to Workflows")
1158
+ ] })
1159
+ ] }),
1160
+ /* @__PURE__ */ jsxs(Tabs, { value: activeTab, onValueChange: setActiveTab, className: "w-full", children: [
1161
+ /* @__PURE__ */ jsxs(TabsList, { className: "bg-background-secondary border border-border-secondary mb-6", children: [
1162
+ /* @__PURE__ */ jsxs(TabsTrigger, { value: "variables", className: "gap-1.5", children: [
1163
+ /* @__PURE__ */ jsx(Icon, { icon: "mdi:variable", width: 16 }),
1164
+ tr("fluidgrids.variables.variablesTab", "Variables")
1165
+ ] }),
1166
+ /* @__PURE__ */ jsxs(TabsTrigger, { value: "providers", className: "gap-1.5", children: [
1167
+ /* @__PURE__ */ jsx(Icon, { icon: "mdi:key-chain-variant", width: 16 }),
1168
+ tr("fluidgrids.variables.providersTab", "External Providers")
1169
+ ] })
1170
+ ] }),
1171
+ /* @__PURE__ */ jsx(TabsContent, { value: "variables", children: /* @__PURE__ */ jsx(VariablesTab, {}) }),
1172
+ /* @__PURE__ */ jsx(TabsContent, { value: "providers", children: /* @__PURE__ */ jsx(ExternalProvidersTab, {}) })
1173
+ ] })
1174
+ ] });
1175
+ }
309
1176
 
310
1177
  // src/graphql/client-helpers.ts
311
1178
  function createFluidGridsClients(config2) {
@@ -385,7 +1252,7 @@ var Textarea = React4.forwardRef(
385
1252
  }
386
1253
  );
387
1254
  Textarea.displayName = "Textarea";
388
- function Tabs({
1255
+ function Tabs2({
389
1256
  className,
390
1257
  ...props
391
1258
  }) {
@@ -398,7 +1265,7 @@ function Tabs({
398
1265
  }
399
1266
  );
400
1267
  }
401
- function TabsList({
1268
+ function TabsList2({
402
1269
  className,
403
1270
  ...props
404
1271
  }) {
@@ -414,7 +1281,7 @@ function TabsList({
414
1281
  }
415
1282
  );
416
1283
  }
417
- function TabsTrigger({
1284
+ function TabsTrigger2({
418
1285
  className,
419
1286
  ...props
420
1287
  }) {
@@ -430,7 +1297,7 @@ function TabsTrigger({
430
1297
  }
431
1298
  );
432
1299
  }
433
- function TabsContent({
1300
+ function TabsContent2({
434
1301
  className,
435
1302
  ...props
436
1303
  }) {
@@ -513,10 +1380,10 @@ var Separator = React4.forwardRef(
513
1380
  )
514
1381
  );
515
1382
  Separator.displayName = SeparatorPrimitive.Root.displayName;
516
- var Select = SelectPrimitive.Root;
1383
+ var Select2 = SelectPrimitive.Root;
517
1384
  var SelectGroup = SelectPrimitive.Group;
518
- var SelectValue = SelectPrimitive.Value;
519
- var SelectTrigger = React4.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1385
+ var SelectValue2 = SelectPrimitive.Value;
1386
+ var SelectTrigger2 = React4.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
520
1387
  SelectPrimitive.Trigger,
521
1388
  {
522
1389
  ref,
@@ -531,7 +1398,7 @@ var SelectTrigger = React4.forwardRef(({ className, children, ...props }, ref) =
531
1398
  ]
532
1399
  }
533
1400
  ));
534
- SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
1401
+ SelectTrigger2.displayName = SelectPrimitive.Trigger.displayName;
535
1402
  var SelectScrollUpButton = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
536
1403
  SelectPrimitive.ScrollUpButton,
537
1404
  {
@@ -558,7 +1425,7 @@ var SelectScrollDownButton = React4.forwardRef(({ className, ...props }, ref) =>
558
1425
  }
559
1426
  ));
560
1427
  SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
561
- var SelectContent = React4.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
1428
+ var SelectContent2 = React4.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx(SelectPrimitive.Portal, { children: /* @__PURE__ */ jsxs(
562
1429
  SelectPrimitive.Content,
563
1430
  {
564
1431
  ref,
@@ -585,7 +1452,7 @@ var SelectContent = React4.forwardRef(({ className, children, position = "popper
585
1452
  ]
586
1453
  }
587
1454
  ) }));
588
- SelectContent.displayName = SelectPrimitive.Content.displayName;
1455
+ SelectContent2.displayName = SelectPrimitive.Content.displayName;
589
1456
  var SelectLabel = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
590
1457
  SelectPrimitive.Label,
591
1458
  {
@@ -595,7 +1462,7 @@ var SelectLabel = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE
595
1462
  }
596
1463
  ));
597
1464
  SelectLabel.displayName = SelectPrimitive.Label.displayName;
598
- var SelectItem = React4.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
1465
+ var SelectItem2 = React4.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(
599
1466
  SelectPrimitive.Item,
600
1467
  {
601
1468
  ref,
@@ -610,7 +1477,7 @@ var SelectItem = React4.forwardRef(({ className, children, ...props }, ref) => /
610
1477
  ]
611
1478
  }
612
1479
  ));
613
- SelectItem.displayName = SelectPrimitive.Item.displayName;
1480
+ SelectItem2.displayName = SelectPrimitive.Item.displayName;
614
1481
  var SelectSeparator = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
615
1482
  SelectPrimitive.Separator,
616
1483
  {
@@ -768,7 +1635,7 @@ var Checkbox = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__
768
1635
  }
769
1636
  ));
770
1637
  Checkbox.displayName = CheckboxPrimitive.Root.displayName;
771
- var Switch = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
1638
+ var Switch2 = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
772
1639
  SwitchPrimitives.Root,
773
1640
  {
774
1641
  className: cn(
@@ -787,7 +1654,7 @@ var Switch = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */
787
1654
  )
788
1655
  }
789
1656
  ));
790
- Switch.displayName = SwitchPrimitives.Root.displayName;
1657
+ Switch2.displayName = SwitchPrimitives.Root.displayName;
791
1658
  var Popover = PopoverPrimitive.Root;
792
1659
  var PopoverTrigger = PopoverPrimitive.Trigger;
793
1660
  var PopoverContent = React4.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Portal, { children: /* @__PURE__ */ jsx(
@@ -805,6 +1672,6 @@ var PopoverContent = React4.forwardRef(({ className, align = "center", sideOffse
805
1672
  ) }));
806
1673
  PopoverContent.displayName = PopoverPrimitive.Content.displayName;
807
1674
 
808
- export { Checkbox, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, FluidGridsRoot, NODE_STATUS_CONFIG, Popover, PopoverContent, PopoverTrigger, RUN_STATUS_CONFIG, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, WorkflowEmbedPage, createFluidGridsClients };
1675
+ export { Checkbox, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, FluidGridsRoot, NODE_STATUS_CONFIG, Popover, PopoverContent, PopoverTrigger, RUN_STATUS_CONFIG, ScrollArea, ScrollBar, Select2 as Select, SelectContent2 as SelectContent, SelectGroup, SelectItem2 as SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger2 as SelectTrigger, SelectValue2 as SelectValue, Separator, Switch2 as Switch, Tabs2 as Tabs, TabsContent2 as TabsContent, TabsList2 as TabsList, TabsTrigger2 as TabsTrigger, Textarea, VariablesPage, WorkflowEmbedPage, createFluidGridsClients, useCreateVariable, useDeleteVariable, useRevealVariableValue, useSaveSecretsProviderConfig, useSecretsProviderConfigs, useTestSecretsProviderConnection, useUpdateVariable, useVariables };
809
1676
  //# sourceMappingURL=index.js.map
810
1677
  //# sourceMappingURL=index.js.map