@burdenoff/microfe-vibecontrols 2026.1008.2 → 2026.1010.2
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/VibeControlsRoot.js +0 -2
- package/dist/VibeControlsRoutes.js +0 -2
- package/dist/components/actions/ActionCard.js +0 -2
- package/dist/components/actions/ActionForm.js +0 -2
- package/dist/components/actions/ActionSchedulesList.js +0 -2
- package/dist/components/actions/ActionTypeBadge.js +0 -2
- package/dist/components/actions/ActionWebhookEndpoint.js +0 -2
- package/dist/components/actions/ExecutionHistory.js +0 -2
- package/dist/components/actions/RemoteExecutionEnableNotice.js +0 -2
- package/dist/components/agent-manager/AgentManagerAdminBar.js +0 -2
- package/dist/components/agent-manager/AgentManagerBookmarksDrawer.js +0 -2
- package/dist/components/agent-manager/AgentManagerBulkActions.js +0 -2
- package/dist/components/agent-manager/AgentManagerCenter.js +0 -2
- package/dist/components/agent-manager/AgentManagerChatPane.js +0 -2
- package/dist/components/agent-manager/AgentManagerDetailPanel.js +0 -2
- package/dist/components/agent-manager/AgentManagerInputArea.js +0 -2
- package/dist/components/agent-manager/AgentManagerLayout.js +0 -2
- package/dist/components/agent-manager/AgentManagerMessageItem.js +0 -2
- package/dist/components/agent-manager/AgentManagerMessageList.js +0 -2
- package/dist/components/agent-manager/AgentManagerSessionItem.js +0 -2
- package/dist/components/agent-manager/AgentManagerSessionList.js +0 -2
- package/dist/components/agent-manager/AgentManagerSidebar.js +0 -2
- package/dist/components/agent-manager/AgentManagerStreamingIndicator.js +0 -2
- package/dist/components/agent-manager/AgentManagerTab.js +0 -2
- package/dist/components/agent-manager/AgentManagerTabBar.js +0 -2
- package/dist/components/agent-manager/BridleConfigPanel.js +0 -2
- package/dist/components/agent-manager/ChatInsertPicker.js +0 -2
- package/dist/components/agent-manager/FilePickerModal.js +0 -2
- package/dist/components/agent-manager/PluginInstallModal.js +0 -2
- package/dist/components/agent-manager/ProfilesPanel.js +0 -2
- package/dist/components/agent-manager/controls/AutonomySelector.js +0 -2
- package/dist/components/agent-manager/controls/ContextLevelToggle.js +0 -2
- package/dist/components/agent-manager/controls/FileAttachButton.js +0 -2
- package/dist/components/agent-manager/controls/McpServerSelector.js +0 -2
- package/dist/components/agent-manager/controls/ModelSelector.js +0 -2
- package/dist/components/agent-manager/controls/SdkSelector.js +0 -2
- package/dist/components/agent-manager/controls/VoiceToggle.js +0 -2
- package/dist/components/agent-manager/controls/createDropHandlers.js +0 -2
- package/dist/components/agent-manager/detail/SessionConfigPanel.js +0 -2
- package/dist/components/agent-manager/detail/SessionLogsPanel.js +0 -2
- package/dist/components/agent-manager/detail/SessionStatsPanel.js +0 -2
- package/dist/components/agent-manager/detail/SessionToolsPanel.js +0 -2
- package/dist/components/agent-manager/dialogs/ExportSessionDialog.js +0 -2
- package/dist/components/agent-manager/dialogs/NewSessionDialog.js +0 -2
- package/dist/components/agent-manager/dialogs/RenameSessionDialog.js +0 -2
- package/dist/components/agent-manager/dialogs/SessionSearchDialog.js +0 -2
- package/dist/components/agent-manager/modelDefaults.js +0 -2
- package/dist/components/agents/AgentCard.js +0 -2
- package/dist/components/agents/AgentConnectionRecovery.js +0 -2
- package/dist/components/agents/AgentForm.js +0 -2
- package/dist/components/agents/AgentList.js +0 -2
- package/dist/components/agents/AgentMaintenanceTab.js +0 -2
- package/dist/components/agents/AgentStatusBadge.js +0 -2
- package/dist/components/agents/AgentStorageConfig.js +0 -2
- package/dist/components/agents/AgentVisibilityCard.js +0 -2
- package/dist/components/agents/ConfigureAgentDialog.js +0 -2
- package/dist/components/agents/ConnectionLogPanel.js +0 -2
- package/dist/components/agents/CreateSessionDialog.js +0 -2
- package/dist/components/agents/GatewayAuthCard.js +0 -2
- package/dist/components/agents/OpenInBrowserEditorButton.js +0 -2
- package/dist/components/agents/OpenInEditorMenu.js +0 -2
- package/dist/components/agents/PluginUIPanel.js +0 -2
- package/dist/components/agents/RemoteTaskPermissionsCard.js +0 -2
- package/dist/components/agents/VibeOpenInEditorMenu.js +0 -2
- package/dist/components/agents/agentStatus.js +0 -2
- package/dist/components/agents/backup/AgentBackupTab.js +0 -2
- package/dist/components/agents/idePresets.js +0 -2
- package/dist/components/ai/AIContextsTab.js +0 -2
- package/dist/components/ai/AIKeysTab.js +0 -2
- package/dist/components/ai/AIModeToggle.js +0 -2
- package/dist/components/ai/AIOverviewTab.js +0 -2
- package/dist/components/ai/AIPlanPanel.js +0 -2
- package/dist/components/ai/AIPlaygroundTab.js +0 -2
- package/dist/components/ai/AIPromptsTab.js +0 -2
- package/dist/components/ai/AIProviderCredentialsCard.js +0 -2
- package/dist/components/ai/AIQueueTab.js +0 -2
- package/dist/components/ai/AISessionsTab.js +0 -2
- package/dist/components/ai/AIStatsTab.js +0 -2
- package/dist/components/ai/AITasksTab.js +0 -2
- package/dist/components/ai/AITemplatesTab.js +0 -2
- package/dist/components/ai/AiSectionTabs.js +0 -2
- package/dist/components/ai/BridleTab.js +0 -2
- package/dist/components/ai/ClaudeCredentialsCard.js +0 -2
- package/dist/components/ai/InstructionFilesManager.js +0 -2
- package/dist/components/ai/PluginHarnessPicker.js +0 -2
- package/dist/components/ai/aiProviderCredentials.js +0 -2
- package/dist/components/aliases/AliasManager.js +0 -2
- package/dist/components/aliases/aliasReservedNames.js +0 -2
- package/dist/components/analytics/AnalyticsBreakdownChart.js +0 -2
- package/dist/components/analytics/AnalyticsBreakdownTable.js +0 -2
- package/dist/components/analytics/AnalyticsEntityTabs.js +0 -2
- package/dist/components/analytics/AnalyticsFilterBar.js +0 -2
- package/dist/components/analytics/AnalyticsKpiGrid.js +0 -2
- package/dist/components/analytics/AnalyticsTimeSeriesChart.js +0 -2
- package/dist/components/analytics/SandboxAnalyticsSection.js +0 -2
- package/dist/components/analytics/types.js +0 -2
- package/dist/components/assistant/AIAssistantPanel.js +0 -2
- package/dist/components/assistant/AiCreditsMeter.js +0 -2
- package/dist/components/assistant/ProductMarkdown.js +0 -2
- package/dist/components/assistant/assistantProduct.js +0 -2
- package/dist/components/assistant/recordAdapters.js +0 -2
- package/dist/components/audit/AuditExportButton.js +0 -2
- package/dist/components/audit/AuditLogDetail.js +0 -2
- package/dist/components/audit/AuditLogFilters.js +0 -2
- package/dist/components/audit/AuditLogStats.js +0 -2
- package/dist/components/audit/AuditLogTable.js +0 -2
- package/dist/components/catalog/CatalogCard.js +0 -2
- package/dist/components/catalog/CatalogForm.js +0 -2
- package/dist/components/common/ActionAgentTargetNotice.js +0 -2
- package/dist/components/common/CommandEditor.js +0 -2
- package/dist/components/common/actionAgentTarget.js +0 -2
- package/dist/components/common/commandHighlight.js +0 -2
- package/dist/components/components/ComponentHealthCell.js +0 -2
- package/dist/components/components/ComponentTierBadge.js +0 -2
- package/dist/components/components/ComponentsTable.js +0 -2
- package/dist/components/docs/DocsCompileStatus.js +0 -2
- package/dist/components/docs/DocsEditPanel.js +0 -2
- package/dist/components/docs/DocsEmptyState.js +0 -2
- package/dist/components/docs/DocsFullScreenViewer.js +0 -2
- package/dist/components/docs/DocsPageEditor.js +0 -2
- package/dist/components/docs/DocsPageTree.js +0 -2
- package/dist/components/docs/DocsPreviewPanel.js +0 -2
- package/dist/components/docs/DocsRevisionHistory.js +0 -2
- package/dist/components/docs/DocsSettingsPanel.js +0 -2
- package/dist/components/docs/DocsTabPanel.js +0 -2
- package/dist/components/docs/previewHtml.js +0 -2
- package/dist/components/docs/types.js +0 -2
- package/dist/components/gitops/CIDurationChart.js +0 -2
- package/dist/components/gitops/CIFailedRuns.js +0 -2
- package/dist/components/gitops/CIPipelineRunsTable.js +0 -2
- package/dist/components/gitops/CISuccessRateChart.js +0 -2
- package/dist/components/gitops/CITab.js +0 -2
- package/dist/components/gitops/CIWorkflowList.js +0 -2
- package/dist/components/gitops/GitOpsProviderPicker.js +0 -2
- package/dist/components/gitops/GitOpsSetup.js +0 -2
- package/dist/components/gitops/GitOpsSkeleton.js +0 -2
- package/dist/components/gitops/GitOpsStatusBadge.js +0 -2
- package/dist/components/gitops/ProviderIcon.js +0 -2
- package/dist/components/gitops/RepoActivityCard.js +0 -2
- package/dist/components/gitops/RepoIssuesCard.js +0 -2
- package/dist/components/gitops/RepoLanguagesCard.js +0 -2
- package/dist/components/gitops/RepoOverviewCard.js +0 -2
- package/dist/components/gitops/RepoPullRequestsCard.js +0 -2
- package/dist/components/gitops/RepoSecurityCard.js +0 -2
- package/dist/components/gitops/RepoStatsTab.js +0 -2
- package/dist/components/gitops/VibeGitOpsTab.js +0 -2
- package/dist/components/gitops/types.js +0 -2
- package/dist/components/graph/ConnectionPermissionsDialog.js +0 -2
- package/dist/components/graph/MeshAgentNode.js +0 -2
- package/dist/components/graph/MeshDeployWizard.js +0 -2
- package/dist/components/graph/MeshGraphView.js +0 -2
- package/dist/components/graph/MeshNodeActions.js +0 -2
- package/dist/components/graph/MeshRequestPanel.js +0 -2
- package/dist/components/graph/meshTypes.js +0 -2
- package/dist/components/graph/nodeIcons.js +0 -2
- package/dist/components/idp-components/ComponentCard.js +0 -2
- package/dist/components/idp-components/ComponentForm.js +0 -2
- package/dist/components/idp-components/DependencyGraphTab.js +0 -2
- package/dist/components/logs/LogViewer.js +0 -2
- package/dist/components/notes/NoteCard.js +0 -2
- package/dist/components/notes/NoteEditor.js +0 -2
- package/dist/components/notes/NoteList.js +0 -2
- package/dist/components/notes/NotesTabPanel.js +0 -2
- package/dist/components/overview/FleetActivityAreaChart.js +0 -2
- package/dist/components/overview/FleetActivityChart.js +0 -2
- package/dist/components/overview/FleetHealthCard.js +0 -2
- package/dist/components/overview/QuickActionsCard.js +0 -2
- package/dist/components/overview/useFleetAnalytics.js +0 -2
- package/dist/components/plugins/AddTabDialog.js +0 -2
- package/dist/components/plugins/FleetRolloutDialog.js +0 -2
- package/dist/components/plugins/PluginIframeMount.js +0 -2
- package/dist/components/plugins/useFleetPluginMatrix.js +0 -2
- package/dist/components/scorecard/MetricTrend.js +0 -2
- package/dist/components/scorecard/ScorecardEmptyState.js +0 -2
- package/dist/components/scorecard/ScorecardPanel.js +0 -2
- package/dist/components/scorecard/ScorecardsOverviewPanel.js +0 -2
- package/dist/components/scorecard/scorecardConstants.js +0 -2
- package/dist/components/security/SecurityRunButton.js +0 -2
- package/dist/components/security/SecurityScanList.js +0 -2
- package/dist/components/security/SecurityTabPanel.js +0 -2
- package/dist/components/security/agentClient.js +0 -2
- package/dist/components/security/hooks.js +0 -2
- package/dist/components/security/types.js +0 -2
- package/dist/components/sessions/CollaboratorsList.js +0 -2
- package/dist/components/sessions/ControlStatusBar.js +0 -2
- package/dist/components/sessions/EntityInfoPopover.js +0 -2
- package/dist/components/sessions/SessionCard.js +0 -2
- package/dist/components/sessions/SessionGroup.js +0 -2
- package/dist/components/sessions/SessionInfoPanel.js +0 -2
- package/dist/components/sessions/SessionList.js +0 -2
- package/dist/components/sessions/SessionPublicLinkPanel.js +0 -2
- package/dist/components/sessions/SessionShareDialog.js +0 -2
- package/dist/components/sessions/SessionStatusBadge.js +0 -2
- package/dist/components/sessions/SessionWorkbenchDrawer.js +0 -2
- package/dist/components/sessions/SessionsCommandPalette.js +0 -2
- package/dist/components/sessions/SharedTerminalPanel.js +0 -2
- package/dist/components/sessions/ShortcutCheatsheet.js +0 -2
- package/dist/components/sessions/TerminalIframe.js +0 -2
- package/dist/components/sessions/TerminalPanel.js +0 -2
- package/dist/components/sessions/groupSessions.js +0 -2
- package/dist/components/sessions/sessionShortcuts.js +0 -2
- package/dist/components/settings/AdvancedSection.js +0 -2
- package/dist/components/settings/IdePreferencesSection.js +0 -2
- package/dist/components/settings/NotificationsSection.js +0 -2
- package/dist/components/settings/SettingsForm.js +0 -2
- package/dist/components/settings/WorkspaceDefaultsSection.js +0 -2
- package/dist/components/shared/ActionMenu.js +0 -2
- package/dist/components/shared/AgentEventsConnector.js +0 -2
- package/dist/components/shared/AgentSelector.js +0 -2
- package/dist/components/shared/AgentSetupBanner.js +0 -2
- package/dist/components/shared/Card.js +0 -2
- package/dist/components/shared/ConfirmDialog.js +0 -2
- package/dist/components/shared/EmptyState.js +0 -2
- package/dist/components/shared/EnableRemoteTaskDialog.js +0 -2
- package/dist/components/shared/EntityTagPicker.js +0 -2
- package/dist/components/shared/EntityVibeLinkControl.js +0 -2
- package/dist/components/shared/ErrorState.js +0 -2
- package/dist/components/shared/FilterDropdown.js +0 -2
- package/dist/components/shared/GetHelpButton.js +0 -2
- package/dist/components/shared/InstallTabs.js +0 -2
- package/dist/components/shared/LinkToVibePanel.js +0 -2
- package/dist/components/shared/LoadingState.js +0 -2
- package/dist/components/shared/MotionTabPanel.js +0 -2
- package/dist/components/shared/NotificationToast.js +0 -2
- package/dist/components/shared/PageHeader.js +0 -2
- package/dist/components/shared/PageSkeleton.js +0 -2
- package/dist/components/shared/PlatformIcon.js +0 -2
- package/dist/components/shared/PluginGate.js +0 -2
- package/dist/components/shared/PromptDialog.js +0 -2
- package/dist/components/shared/QuotaExhaustedDialog.js +0 -2
- package/dist/components/shared/RequireAgentReachable.js +0 -2
- package/dist/components/shared/SearchInput.js +0 -2
- package/dist/components/shared/SearchableSelect.js +0 -2
- package/dist/components/shared/SelectionCheckbox.js +0 -2
- package/dist/components/shared/SessionNotificationBanner.js +0 -2
- package/dist/components/shared/StatCard.js +0 -2
- package/dist/components/shared/StatusBadge.js +0 -2
- package/dist/components/shared/TagFilter.js +0 -2
- package/dist/components/shared/cardMotion.js +0 -2
- package/dist/components/shared/platformIconPaths.js +0 -2
- package/dist/components/sharing/EntityShareButton.js +0 -2
- package/dist/components/sharing/NoteShareDialog.js +0 -2
- package/dist/components/sharing/SharedWithMePanel.js +0 -2
- package/dist/components/sharing/VibeShareButton.js +0 -2
- package/dist/components/sharing/entityShareOps.js +0 -2
- package/dist/components/sharing/shareControllerTypes.js +0 -2
- package/dist/components/sharing/shareRegistry.js +0 -2
- package/dist/components/sharing/useEntityShareController.js +0 -2
- package/dist/components/sharing/useNoteShareController.js +0 -2
- package/dist/components/sharing/useVibeShareController.js +0 -2
- package/dist/components/targets/TargetCard.js +0 -2
- package/dist/components/templates/PublishTemplateForm.js +0 -2
- package/dist/components/templates/TemplateCard.js +0 -2
- package/dist/components/templates/TemplateVariableEditor.js +0 -2
- package/dist/components/templates/TemplateWizard.js +0 -2
- package/dist/components/tunnels/DomainVerificationBadge.js +0 -2
- package/dist/components/tunnels/ProviderBadge.js +0 -2
- package/dist/components/tunnels/TunnelCard.js +0 -2
- package/dist/components/tunnels/TunnelConnectionCard.js +0 -2
- package/dist/components/tunnels/TunnelCopyButton.js +0 -2
- package/dist/components/tunnels/TunnelCreateWizard.js +0 -2
- package/dist/components/tunnels/TunnelMetricTiles.js +0 -2
- package/dist/components/tunnels/TunnelPublicAccessPanel.js +0 -2
- package/dist/components/tunnels/TunnelSparkline.js +0 -2
- package/dist/components/tunnels/TunnelStatusBadge.js +0 -2
- package/dist/components/tunnels/tunnelEndpoints.js +0 -2
- package/dist/components/tunnels/tunnelMetrics.js +0 -2
- package/dist/components/vibe/VibeAgentEmptyState.js +0 -2
- package/dist/components/vibe/VibeAgentSwitcher.js +0 -2
- package/dist/components/vibe/VibeEnvVarsPanel.js +0 -2
- package/dist/components/vibe/VibeLinkedEntitiesPanel.js +0 -2
- package/dist/components/vibe/VibeLlmContextAdminPanel.js +0 -2
- package/dist/components/vibe/VibeLlmContextTabPanel.js +0 -2
- package/dist/components/vibecalendar/LogsDrawer.js +0 -2
- package/dist/components/vibecalendar/ScheduleTaskModal.js +0 -2
- package/dist/components/vibecalendar/VibeCalAgendaView.js +0 -2
- package/dist/components/vibecalendar/VibeCalDayView.js +0 -2
- package/dist/components/vibecalendar/VibeCalMonthView.js +0 -2
- package/dist/components/vibecalendar/VibeCalWeekView.js +0 -2
- package/dist/components/vibecalendar/VibeCalendarHeader.js +0 -2
- package/dist/components/vibecalendar/VibeTaskBlock.js +0 -2
- package/dist/components/vibecalendar/expandOccurrences.js +0 -2
- package/dist/components/vibecalendar/types.js +0 -2
- package/dist/components/vibedeck/VibeDeckButtonForm.js +0 -2
- package/dist/components/vibedeck/VibeDeckButtonTile.js +0 -2
- package/dist/components/vibedeck/VibeDeckExecutionLog.js +0 -2
- package/dist/components/vibedeck/VibeDeckForm.js +0 -2
- package/dist/components/vibedeck/VibeDeckGrid.js +0 -2
- package/dist/components/vibedeck/VibeDeckPublicLinkPanel.js +0 -2
- package/dist/components/vibedeck/VibeDeckShareDialog.js +0 -2
- package/dist/components/vibedeck/VibeDeckSwitcher.js +0 -2
- package/dist/components/vibes/DeleteVibeDialog.js +0 -2
- package/dist/components/vibes/VibeCard.js +0 -2
- package/dist/components/vibes/VibeList.js +0 -2
- package/dist/components/vibes/icons.js +0 -2
- package/dist/components/webhooks/types.js +0 -2
- package/dist/config/assistantUsecases.js +0 -2
- package/dist/config/index.js +0 -2
- package/dist/constants/aiTabs.js +0 -2
- package/dist/constants/permissions.js +0 -2
- package/dist/constants/pluginCatalog.js +0 -2
- package/dist/generated/wspace-operations.js +0 -2
- package/dist/generated/wspace-types.js +0 -2
- package/dist/hooks/useActiveAgentProfile.js +0 -2
- package/dist/hooks/useAgentConnectivity.js +0 -2
- package/dist/hooks/useAgentEvents.js +0 -2
- package/dist/hooks/useAgentManagerKeyboard.js +0 -2
- package/dist/hooks/useAgentManagerStreaming.js +0 -2
- package/dist/hooks/useAiCreditsQuota.js +0 -2
- package/dist/hooks/useCachedInitialData.js +0 -2
- package/dist/hooks/useDraftEntityTags.js +0 -2
- package/dist/hooks/useEntityTags.js +0 -2
- package/dist/hooks/useGitops.js +0 -2
- package/dist/hooks/useInitialDataLoader.js +0 -2
- package/dist/hooks/useOfferedAssistantMode.js +0 -2
- package/dist/hooks/useOpenAssistantHelp.js +0 -2
- package/dist/hooks/usePluginAvailability.js +0 -2
- package/dist/hooks/useQueryBackedTab.js +0 -2
- package/dist/hooks/useTenantContext.js +0 -2
- package/dist/hooks/useTerminalCapabilityUrl.js +0 -2
- package/dist/hooks/useToggleAgentBookmark.js +0 -2
- package/dist/hooks/useVoiceMode.js +0 -2
- package/dist/hooks/useWorkspaceWriteAccess.js +0 -2
- package/dist/lib/apolloCache.js +0 -2
- package/dist/lib/toast.js +0 -2
- package/dist/lib/vibeFeatures.js +0 -2
- package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js +0 -2
- package/dist/node_modules/@apollo/client/errors/ServerError.js +0 -2
- package/dist/node_modules/@apollo/client/errors/ServerParseError.js +0 -2
- package/dist/node_modules/@apollo/client/errors/utils.js +0 -2
- package/dist/node_modules/@apollo/client/link/batch/batchLink.js +0 -2
- package/dist/node_modules/@apollo/client/link/batch/batching.js +0 -2
- package/dist/node_modules/@apollo/client/link/batch-http/BaseBatchHttpLink.js +0 -2
- package/dist/node_modules/@apollo/client/link/batch-http/batchHttpLink.js +0 -2
- package/dist/node_modules/@apollo/client/link/client-awareness/ClientAwarenessLink.js +0 -2
- package/dist/node_modules/@apollo/client/link/core/ApolloLink.js +0 -2
- package/dist/node_modules/@apollo/client/link/http/checkFetcher.js +0 -2
- package/dist/node_modules/@apollo/client/link/http/parseAndCheckHttpResponse.js +0 -2
- package/dist/node_modules/@apollo/client/link/http/selectHttpOptionsAndBody.js +0 -2
- package/dist/node_modules/@apollo/client/link/http/selectURI.js +0 -2
- package/dist/node_modules/@apollo/client/link/utils/createOperation.js +0 -2
- package/dist/node_modules/@apollo/client/link/utils/filterOperationVariables.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/caching/sizes.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/graphql/print.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/caches.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/checkDocument.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/compact.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/getMainDefinition.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationDefinition.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationName.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/globals/global.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/globals/maybe.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/makeUniqueId.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/memoize.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/internal/stringifyForDisplay.js +0 -2
- package/dist/node_modules/@apollo/client/utilities/invariant/index.js +0 -2
- package/dist/node_modules/@apollo/client/version.js +0 -2
- package/dist/node_modules/@wry/caches/lib/weak.js +0 -2
- package/dist/node_modules/@wry/trie/lib/index.js +0 -2
- package/dist/node_modules/clsx/dist/clsx.js +0 -2
- package/dist/node_modules/d3-array/src/ascending.js +0 -2
- package/dist/node_modules/d3-array/src/bisect.js +0 -2
- package/dist/node_modules/d3-array/src/bisector.js +0 -2
- package/dist/node_modules/d3-array/src/descending.js +0 -2
- package/dist/node_modules/d3-array/src/max.js +0 -2
- package/dist/node_modules/d3-array/src/min.js +0 -2
- package/dist/node_modules/d3-array/src/number.js +0 -2
- package/dist/node_modules/d3-array/src/quantile.js +0 -2
- package/dist/node_modules/d3-array/src/quickselect.js +0 -2
- package/dist/node_modules/d3-array/src/range.js +0 -2
- package/dist/node_modules/d3-array/src/sort.js +0 -2
- package/dist/node_modules/d3-array/src/ticks.js +0 -2
- package/dist/node_modules/d3-color/src/color.js +0 -2
- package/dist/node_modules/d3-color/src/define.js +0 -2
- package/dist/node_modules/d3-format/src/defaultLocale.js +0 -2
- package/dist/node_modules/d3-format/src/exponent.js +0 -2
- package/dist/node_modules/d3-format/src/formatDecimal.js +0 -2
- package/dist/node_modules/d3-format/src/formatGroup.js +0 -2
- package/dist/node_modules/d3-format/src/formatNumerals.js +0 -2
- package/dist/node_modules/d3-format/src/formatPrefixAuto.js +0 -2
- package/dist/node_modules/d3-format/src/formatRounded.js +0 -2
- package/dist/node_modules/d3-format/src/formatSpecifier.js +0 -2
- package/dist/node_modules/d3-format/src/formatTrim.js +0 -2
- package/dist/node_modules/d3-format/src/formatTypes.js +0 -2
- package/dist/node_modules/d3-format/src/identity.js +0 -2
- package/dist/node_modules/d3-format/src/locale.js +0 -2
- package/dist/node_modules/d3-format/src/precisionFixed.js +0 -2
- package/dist/node_modules/d3-format/src/precisionPrefix.js +0 -2
- package/dist/node_modules/d3-format/src/precisionRound.js +0 -2
- package/dist/node_modules/d3-interpolate/src/array.js +0 -2
- package/dist/node_modules/d3-interpolate/src/basis.js +0 -2
- package/dist/node_modules/d3-interpolate/src/basisClosed.js +0 -2
- package/dist/node_modules/d3-interpolate/src/color.js +0 -2
- package/dist/node_modules/d3-interpolate/src/constant.js +0 -2
- package/dist/node_modules/d3-interpolate/src/date.js +0 -2
- package/dist/node_modules/d3-interpolate/src/number.js +0 -2
- package/dist/node_modules/d3-interpolate/src/numberArray.js +0 -2
- package/dist/node_modules/d3-interpolate/src/object.js +0 -2
- package/dist/node_modules/d3-interpolate/src/piecewise.js +0 -2
- package/dist/node_modules/d3-interpolate/src/rgb.js +0 -2
- package/dist/node_modules/d3-interpolate/src/round.js +0 -2
- package/dist/node_modules/d3-interpolate/src/string.js +0 -2
- package/dist/node_modules/d3-interpolate/src/value.js +0 -2
- package/dist/node_modules/d3-path/src/path.js +0 -2
- package/dist/node_modules/d3-scale/src/band.js +0 -2
- package/dist/node_modules/d3-scale/src/constant.js +0 -2
- package/dist/node_modules/d3-scale/src/continuous.js +0 -2
- package/dist/node_modules/d3-scale/src/diverging.js +0 -2
- package/dist/node_modules/d3-scale/src/identity.js +0 -2
- package/dist/node_modules/d3-scale/src/init.js +0 -2
- package/dist/node_modules/d3-scale/src/linear.js +0 -2
- package/dist/node_modules/d3-scale/src/log.js +0 -2
- package/dist/node_modules/d3-scale/src/nice.js +0 -2
- package/dist/node_modules/d3-scale/src/number.js +0 -2
- package/dist/node_modules/d3-scale/src/ordinal.js +0 -2
- package/dist/node_modules/d3-scale/src/pow.js +0 -2
- package/dist/node_modules/d3-scale/src/quantile.js +0 -2
- package/dist/node_modules/d3-scale/src/quantize.js +0 -2
- package/dist/node_modules/d3-scale/src/radial.js +0 -2
- package/dist/node_modules/d3-scale/src/sequential.js +0 -2
- package/dist/node_modules/d3-scale/src/sequentialQuantile.js +0 -2
- package/dist/node_modules/d3-scale/src/symlog.js +0 -2
- package/dist/node_modules/d3-scale/src/threshold.js +0 -2
- package/dist/node_modules/d3-scale/src/tickFormat.js +0 -2
- package/dist/node_modules/d3-scale/src/time.js +0 -2
- package/dist/node_modules/d3-scale/src/utcTime.js +0 -2
- package/dist/node_modules/d3-shape/src/area.js +0 -2
- package/dist/node_modules/d3-shape/src/array.js +0 -2
- package/dist/node_modules/d3-shape/src/constant.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/basis.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/basisClosed.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/basisOpen.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/bump.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/linear.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/linearClosed.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/monotone.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/natural.js +0 -2
- package/dist/node_modules/d3-shape/src/curve/step.js +0 -2
- package/dist/node_modules/d3-shape/src/line.js +0 -2
- package/dist/node_modules/d3-shape/src/math.js +0 -2
- package/dist/node_modules/d3-shape/src/noop.js +0 -2
- package/dist/node_modules/d3-shape/src/offset/expand.js +0 -2
- package/dist/node_modules/d3-shape/src/offset/none.js +0 -2
- package/dist/node_modules/d3-shape/src/offset/silhouette.js +0 -2
- package/dist/node_modules/d3-shape/src/offset/wiggle.js +0 -2
- package/dist/node_modules/d3-shape/src/order/none.js +0 -2
- package/dist/node_modules/d3-shape/src/path.js +0 -2
- package/dist/node_modules/d3-shape/src/point.js +0 -2
- package/dist/node_modules/d3-shape/src/stack.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/circle.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/cross.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/diamond.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/square.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/star.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/triangle.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol/wye.js +0 -2
- package/dist/node_modules/d3-shape/src/symbol.js +0 -2
- package/dist/node_modules/d3-time/src/day.js +0 -2
- package/dist/node_modules/d3-time/src/duration.js +0 -2
- package/dist/node_modules/d3-time/src/hour.js +0 -2
- package/dist/node_modules/d3-time/src/interval.js +0 -2
- package/dist/node_modules/d3-time/src/millisecond.js +0 -2
- package/dist/node_modules/d3-time/src/minute.js +0 -2
- package/dist/node_modules/d3-time/src/month.js +0 -2
- package/dist/node_modules/d3-time/src/second.js +0 -2
- package/dist/node_modules/d3-time/src/ticks.js +0 -2
- package/dist/node_modules/d3-time/src/week.js +0 -2
- package/dist/node_modules/d3-time/src/year.js +0 -2
- package/dist/node_modules/d3-time-format/src/defaultLocale.js +0 -2
- package/dist/node_modules/d3-time-format/src/locale.js +0 -2
- package/dist/node_modules/dagre/index.js +0 -2
- package/dist/node_modules/dagre/lib/acyclic.js +0 -2
- package/dist/node_modules/dagre/lib/add-border-segments.js +0 -2
- package/dist/node_modules/dagre/lib/coordinate-system.js +0 -2
- package/dist/node_modules/dagre/lib/data/list.js +0 -2
- package/dist/node_modules/dagre/lib/debug.js +0 -2
- package/dist/node_modules/dagre/lib/graphlib.js +0 -2
- package/dist/node_modules/dagre/lib/greedy-fas.js +0 -2
- package/dist/node_modules/dagre/lib/layout.js +0 -2
- package/dist/node_modules/dagre/lib/lodash.js +0 -2
- package/dist/node_modules/dagre/lib/nesting-graph.js +0 -2
- package/dist/node_modules/dagre/lib/normalize.js +0 -2
- package/dist/node_modules/dagre/lib/order/add-subgraph-constraints.js +0 -2
- package/dist/node_modules/dagre/lib/order/barycenter.js +0 -2
- package/dist/node_modules/dagre/lib/order/build-layer-graph.js +0 -2
- package/dist/node_modules/dagre/lib/order/cross-count.js +0 -2
- package/dist/node_modules/dagre/lib/order/index.js +0 -2
- package/dist/node_modules/dagre/lib/order/init-order.js +0 -2
- package/dist/node_modules/dagre/lib/order/resolve-conflicts.js +0 -2
- package/dist/node_modules/dagre/lib/order/sort-subgraph.js +0 -2
- package/dist/node_modules/dagre/lib/order/sort.js +0 -2
- package/dist/node_modules/dagre/lib/parent-dummy-chains.js +0 -2
- package/dist/node_modules/dagre/lib/position/bk.js +0 -2
- package/dist/node_modules/dagre/lib/position/index.js +0 -2
- package/dist/node_modules/dagre/lib/rank/feasible-tree.js +0 -2
- package/dist/node_modules/dagre/lib/rank/index.js +0 -2
- package/dist/node_modules/dagre/lib/rank/network-simplex.js +0 -2
- package/dist/node_modules/dagre/lib/rank/util.js +0 -2
- package/dist/node_modules/dagre/lib/util.js +0 -2
- package/dist/node_modules/dagre/lib/version.js +0 -2
- package/dist/node_modules/decimal.js-light/decimal.js +0 -2
- package/dist/node_modules/eventemitter3/index.js +0 -2
- package/dist/node_modules/fast-equals/dist/es/index.js +0 -2
- package/dist/node_modules/graphlib/index.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/components.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/dfs.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/dijkstra-all.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/dijkstra.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/find-cycles.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/floyd-warshall.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/index.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/is-acyclic.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/postorder.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/preorder.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/prim.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/tarjan.js +0 -2
- package/dist/node_modules/graphlib/lib/alg/topsort.js +0 -2
- package/dist/node_modules/graphlib/lib/data/priority-queue.js +0 -2
- package/dist/node_modules/graphlib/lib/graph.js +0 -2
- package/dist/node_modules/graphlib/lib/index.js +0 -2
- package/dist/node_modules/graphlib/lib/json.js +0 -2
- package/dist/node_modules/graphlib/lib/lodash.js +0 -2
- package/dist/node_modules/graphlib/lib/version.js +0 -2
- package/dist/node_modules/internmap/src/index.js +0 -2
- package/dist/node_modules/lodash/_DataView.js +0 -2
- package/dist/node_modules/lodash/_Hash.js +0 -2
- package/dist/node_modules/lodash/_ListCache.js +0 -2
- package/dist/node_modules/lodash/_Map.js +0 -2
- package/dist/node_modules/lodash/_MapCache.js +0 -2
- package/dist/node_modules/lodash/_Promise.js +0 -2
- package/dist/node_modules/lodash/_Set.js +0 -2
- package/dist/node_modules/lodash/_SetCache.js +0 -2
- package/dist/node_modules/lodash/_Stack.js +0 -2
- package/dist/node_modules/lodash/_Symbol.js +0 -2
- package/dist/node_modules/lodash/_Uint8Array.js +0 -2
- package/dist/node_modules/lodash/_WeakMap.js +0 -2
- package/dist/node_modules/lodash/_apply.js +0 -2
- package/dist/node_modules/lodash/_arrayEach.js +0 -2
- package/dist/node_modules/lodash/_arrayEvery.js +0 -2
- package/dist/node_modules/lodash/_arrayFilter.js +0 -2
- package/dist/node_modules/lodash/_arrayIncludes.js +0 -2
- package/dist/node_modules/lodash/_arrayIncludesWith.js +0 -2
- package/dist/node_modules/lodash/_arrayLikeKeys.js +0 -2
- package/dist/node_modules/lodash/_arrayMap.js +0 -2
- package/dist/node_modules/lodash/_arrayPush.js +0 -2
- package/dist/node_modules/lodash/_arrayReduce.js +0 -2
- package/dist/node_modules/lodash/_arraySome.js +0 -2
- package/dist/node_modules/lodash/_asciiSize.js +0 -2
- package/dist/node_modules/lodash/_asciiToArray.js +0 -2
- package/dist/node_modules/lodash/_assignMergeValue.js +0 -2
- package/dist/node_modules/lodash/_assignValue.js +0 -2
- package/dist/node_modules/lodash/_assocIndexOf.js +0 -2
- package/dist/node_modules/lodash/_baseAssign.js +0 -2
- package/dist/node_modules/lodash/_baseAssignIn.js +0 -2
- package/dist/node_modules/lodash/_baseAssignValue.js +0 -2
- package/dist/node_modules/lodash/_baseClone.js +0 -2
- package/dist/node_modules/lodash/_baseCreate.js +0 -2
- package/dist/node_modules/lodash/_baseEach.js +0 -2
- package/dist/node_modules/lodash/_baseEvery.js +0 -2
- package/dist/node_modules/lodash/_baseExtremum.js +0 -2
- package/dist/node_modules/lodash/_baseFilter.js +0 -2
- package/dist/node_modules/lodash/_baseFindIndex.js +0 -2
- package/dist/node_modules/lodash/_baseFlatten.js +0 -2
- package/dist/node_modules/lodash/_baseFor.js +0 -2
- package/dist/node_modules/lodash/_baseForOwn.js +0 -2
- package/dist/node_modules/lodash/_baseGet.js +0 -2
- package/dist/node_modules/lodash/_baseGetAllKeys.js +0 -2
- package/dist/node_modules/lodash/_baseGetTag.js +0 -2
- package/dist/node_modules/lodash/_baseGt.js +0 -2
- package/dist/node_modules/lodash/_baseHas.js +0 -2
- package/dist/node_modules/lodash/_baseHasIn.js +0 -2
- package/dist/node_modules/lodash/_baseIndexOf.js +0 -2
- package/dist/node_modules/lodash/_baseIsArguments.js +0 -2
- package/dist/node_modules/lodash/_baseIsEqual.js +0 -2
- package/dist/node_modules/lodash/_baseIsEqualDeep.js +0 -2
- package/dist/node_modules/lodash/_baseIsMap.js +0 -2
- package/dist/node_modules/lodash/_baseIsMatch.js +0 -2
- package/dist/node_modules/lodash/_baseIsNaN.js +0 -2
- package/dist/node_modules/lodash/_baseIsNative.js +0 -2
- package/dist/node_modules/lodash/_baseIsSet.js +0 -2
- package/dist/node_modules/lodash/_baseIsTypedArray.js +0 -2
- package/dist/node_modules/lodash/_baseIteratee.js +0 -2
- package/dist/node_modules/lodash/_baseKeys.js +0 -2
- package/dist/node_modules/lodash/_baseKeysIn.js +0 -2
- package/dist/node_modules/lodash/_baseLt.js +0 -2
- package/dist/node_modules/lodash/_baseMap.js +0 -2
- package/dist/node_modules/lodash/_baseMatches.js +0 -2
- package/dist/node_modules/lodash/_baseMatchesProperty.js +0 -2
- package/dist/node_modules/lodash/_baseMerge.js +0 -2
- package/dist/node_modules/lodash/_baseMergeDeep.js +0 -2
- package/dist/node_modules/lodash/_baseOrderBy.js +0 -2
- package/dist/node_modules/lodash/_basePick.js +0 -2
- package/dist/node_modules/lodash/_basePickBy.js +0 -2
- package/dist/node_modules/lodash/_baseProperty.js +0 -2
- package/dist/node_modules/lodash/_basePropertyDeep.js +0 -2
- package/dist/node_modules/lodash/_baseRange.js +0 -2
- package/dist/node_modules/lodash/_baseReduce.js +0 -2
- package/dist/node_modules/lodash/_baseRest.js +0 -2
- package/dist/node_modules/lodash/_baseSet.js +0 -2
- package/dist/node_modules/lodash/_baseSetToString.js +0 -2
- package/dist/node_modules/lodash/_baseSlice.js +0 -2
- package/dist/node_modules/lodash/_baseSome.js +0 -2
- package/dist/node_modules/lodash/_baseSortBy.js +0 -2
- package/dist/node_modules/lodash/_baseTimes.js +0 -2
- package/dist/node_modules/lodash/_baseToString.js +0 -2
- package/dist/node_modules/lodash/_baseTrim.js +0 -2
- package/dist/node_modules/lodash/_baseUnary.js +0 -2
- package/dist/node_modules/lodash/_baseUniq.js +0 -2
- package/dist/node_modules/lodash/_baseValues.js +0 -2
- package/dist/node_modules/lodash/_baseZipObject.js +0 -2
- package/dist/node_modules/lodash/_cacheHas.js +0 -2
- package/dist/node_modules/lodash/_castFunction.js +0 -2
- package/dist/node_modules/lodash/_castPath.js +0 -2
- package/dist/node_modules/lodash/_castSlice.js +0 -2
- package/dist/node_modules/lodash/_cloneArrayBuffer.js +0 -2
- package/dist/node_modules/lodash/_cloneBuffer.js +0 -2
- package/dist/node_modules/lodash/_cloneDataView.js +0 -2
- package/dist/node_modules/lodash/_cloneRegExp.js +0 -2
- package/dist/node_modules/lodash/_cloneSymbol.js +0 -2
- package/dist/node_modules/lodash/_cloneTypedArray.js +0 -2
- package/dist/node_modules/lodash/_compareAscending.js +0 -2
- package/dist/node_modules/lodash/_compareMultiple.js +0 -2
- package/dist/node_modules/lodash/_copyArray.js +0 -2
- package/dist/node_modules/lodash/_copyObject.js +0 -2
- package/dist/node_modules/lodash/_copySymbols.js +0 -2
- package/dist/node_modules/lodash/_copySymbolsIn.js +0 -2
- package/dist/node_modules/lodash/_coreJsData.js +0 -2
- package/dist/node_modules/lodash/_createAssigner.js +0 -2
- package/dist/node_modules/lodash/_createBaseEach.js +0 -2
- package/dist/node_modules/lodash/_createBaseFor.js +0 -2
- package/dist/node_modules/lodash/_createCaseFirst.js +0 -2
- package/dist/node_modules/lodash/_createFind.js +0 -2
- package/dist/node_modules/lodash/_createRange.js +0 -2
- package/dist/node_modules/lodash/_createSet.js +0 -2
- package/dist/node_modules/lodash/_defineProperty.js +0 -2
- package/dist/node_modules/lodash/_equalArrays.js +0 -2
- package/dist/node_modules/lodash/_equalByTag.js +0 -2
- package/dist/node_modules/lodash/_equalObjects.js +0 -2
- package/dist/node_modules/lodash/_flatRest.js +0 -2
- package/dist/node_modules/lodash/_freeGlobal.js +0 -2
- package/dist/node_modules/lodash/_getAllKeys.js +0 -2
- package/dist/node_modules/lodash/_getAllKeysIn.js +0 -2
- package/dist/node_modules/lodash/_getMapData.js +0 -2
- package/dist/node_modules/lodash/_getMatchData.js +0 -2
- package/dist/node_modules/lodash/_getNative.js +0 -2
- package/dist/node_modules/lodash/_getPrototype.js +0 -2
- package/dist/node_modules/lodash/_getRawTag.js +0 -2
- package/dist/node_modules/lodash/_getSymbols.js +0 -2
- package/dist/node_modules/lodash/_getSymbolsIn.js +0 -2
- package/dist/node_modules/lodash/_getTag.js +0 -2
- package/dist/node_modules/lodash/_getValue.js +0 -2
- package/dist/node_modules/lodash/_hasPath.js +0 -2
- package/dist/node_modules/lodash/_hasUnicode.js +0 -2
- package/dist/node_modules/lodash/_hashClear.js +0 -2
- package/dist/node_modules/lodash/_hashDelete.js +0 -2
- package/dist/node_modules/lodash/_hashGet.js +0 -2
- package/dist/node_modules/lodash/_hashHas.js +0 -2
- package/dist/node_modules/lodash/_hashSet.js +0 -2
- package/dist/node_modules/lodash/_initCloneArray.js +0 -2
- package/dist/node_modules/lodash/_initCloneByTag.js +0 -2
- package/dist/node_modules/lodash/_initCloneObject.js +0 -2
- package/dist/node_modules/lodash/_isFlattenable.js +0 -2
- package/dist/node_modules/lodash/_isIndex.js +0 -2
- package/dist/node_modules/lodash/_isIterateeCall.js +0 -2
- package/dist/node_modules/lodash/_isKey.js +0 -2
- package/dist/node_modules/lodash/_isKeyable.js +0 -2
- package/dist/node_modules/lodash/_isMasked.js +0 -2
- package/dist/node_modules/lodash/_isPrototype.js +0 -2
- package/dist/node_modules/lodash/_isStrictComparable.js +0 -2
- package/dist/node_modules/lodash/_listCacheClear.js +0 -2
- package/dist/node_modules/lodash/_listCacheDelete.js +0 -2
- package/dist/node_modules/lodash/_listCacheGet.js +0 -2
- package/dist/node_modules/lodash/_listCacheHas.js +0 -2
- package/dist/node_modules/lodash/_listCacheSet.js +0 -2
- package/dist/node_modules/lodash/_mapCacheClear.js +0 -2
- package/dist/node_modules/lodash/_mapCacheDelete.js +0 -2
- package/dist/node_modules/lodash/_mapCacheGet.js +0 -2
- package/dist/node_modules/lodash/_mapCacheHas.js +0 -2
- package/dist/node_modules/lodash/_mapCacheSet.js +0 -2
- package/dist/node_modules/lodash/_mapToArray.js +0 -2
- package/dist/node_modules/lodash/_matchesStrictComparable.js +0 -2
- package/dist/node_modules/lodash/_memoizeCapped.js +0 -2
- package/dist/node_modules/lodash/_nativeCreate.js +0 -2
- package/dist/node_modules/lodash/_nativeKeys.js +0 -2
- package/dist/node_modules/lodash/_nativeKeysIn.js +0 -2
- package/dist/node_modules/lodash/_nodeUtil.js +0 -2
- package/dist/node_modules/lodash/_objectToString.js +0 -2
- package/dist/node_modules/lodash/_overArg.js +0 -2
- package/dist/node_modules/lodash/_overRest.js +0 -2
- package/dist/node_modules/lodash/_root.js +0 -2
- package/dist/node_modules/lodash/_safeGet.js +0 -2
- package/dist/node_modules/lodash/_setCacheAdd.js +0 -2
- package/dist/node_modules/lodash/_setCacheHas.js +0 -2
- package/dist/node_modules/lodash/_setToArray.js +0 -2
- package/dist/node_modules/lodash/_setToString.js +0 -2
- package/dist/node_modules/lodash/_shortOut.js +0 -2
- package/dist/node_modules/lodash/_stackClear.js +0 -2
- package/dist/node_modules/lodash/_stackDelete.js +0 -2
- package/dist/node_modules/lodash/_stackGet.js +0 -2
- package/dist/node_modules/lodash/_stackHas.js +0 -2
- package/dist/node_modules/lodash/_stackSet.js +0 -2
- package/dist/node_modules/lodash/_strictIndexOf.js +0 -2
- package/dist/node_modules/lodash/_stringSize.js +0 -2
- package/dist/node_modules/lodash/_stringToArray.js +0 -2
- package/dist/node_modules/lodash/_stringToPath.js +0 -2
- package/dist/node_modules/lodash/_toKey.js +0 -2
- package/dist/node_modules/lodash/_toSource.js +0 -2
- package/dist/node_modules/lodash/_trimmedEndIndex.js +0 -2
- package/dist/node_modules/lodash/_unicodeSize.js +0 -2
- package/dist/node_modules/lodash/_unicodeToArray.js +0 -2
- package/dist/node_modules/lodash/clone.js +0 -2
- package/dist/node_modules/lodash/cloneDeep.js +0 -2
- package/dist/node_modules/lodash/constant.js +0 -2
- package/dist/node_modules/lodash/debounce.js +0 -2
- package/dist/node_modules/lodash/defaults.js +0 -2
- package/dist/node_modules/lodash/each.js +0 -2
- package/dist/node_modules/lodash/eq.js +0 -2
- package/dist/node_modules/lodash/every.js +0 -2
- package/dist/node_modules/lodash/filter.js +0 -2
- package/dist/node_modules/lodash/find.js +0 -2
- package/dist/node_modules/lodash/findIndex.js +0 -2
- package/dist/node_modules/lodash/flatMap.js +0 -2
- package/dist/node_modules/lodash/flatten.js +0 -2
- package/dist/node_modules/lodash/forEach.js +0 -2
- package/dist/node_modules/lodash/forIn.js +0 -2
- package/dist/node_modules/lodash/get.js +0 -2
- package/dist/node_modules/lodash/has.js +0 -2
- package/dist/node_modules/lodash/hasIn.js +0 -2
- package/dist/node_modules/lodash/identity.js +0 -2
- package/dist/node_modules/lodash/isArguments.js +0 -2
- package/dist/node_modules/lodash/isArray.js +0 -2
- package/dist/node_modules/lodash/isArrayLike.js +0 -2
- package/dist/node_modules/lodash/isArrayLikeObject.js +0 -2
- package/dist/node_modules/lodash/isBoolean.js +0 -2
- package/dist/node_modules/lodash/isBuffer.js +0 -2
- package/dist/node_modules/lodash/isEmpty.js +0 -2
- package/dist/node_modules/lodash/isEqual.js +0 -2
- package/dist/node_modules/lodash/isFunction.js +0 -2
- package/dist/node_modules/lodash/isLength.js +0 -2
- package/dist/node_modules/lodash/isMap.js +0 -2
- package/dist/node_modules/lodash/isNaN.js +0 -2
- package/dist/node_modules/lodash/isNil.js +0 -2
- package/dist/node_modules/lodash/isNumber.js +0 -2
- package/dist/node_modules/lodash/isObject.js +0 -2
- package/dist/node_modules/lodash/isObjectLike.js +0 -2
- package/dist/node_modules/lodash/isPlainObject.js +0 -2
- package/dist/node_modules/lodash/isSet.js +0 -2
- package/dist/node_modules/lodash/isString.js +0 -2
- package/dist/node_modules/lodash/isSymbol.js +0 -2
- package/dist/node_modules/lodash/isTypedArray.js +0 -2
- package/dist/node_modules/lodash/isUndefined.js +0 -2
- package/dist/node_modules/lodash/keys.js +0 -2
- package/dist/node_modules/lodash/keysIn.js +0 -2
- package/dist/node_modules/lodash/last.js +0 -2
- package/dist/node_modules/lodash/map.js +0 -2
- package/dist/node_modules/lodash/mapValues.js +0 -2
- package/dist/node_modules/lodash/max.js +0 -2
- package/dist/node_modules/lodash/maxBy.js +0 -2
- package/dist/node_modules/lodash/memoize.js +0 -2
- package/dist/node_modules/lodash/merge.js +0 -2
- package/dist/node_modules/lodash/min.js +0 -2
- package/dist/node_modules/lodash/minBy.js +0 -2
- package/dist/node_modules/lodash/noop.js +0 -2
- package/dist/node_modules/lodash/now.js +0 -2
- package/dist/node_modules/lodash/pick.js +0 -2
- package/dist/node_modules/lodash/property.js +0 -2
- package/dist/node_modules/lodash/range.js +0 -2
- package/dist/node_modules/lodash/reduce.js +0 -2
- package/dist/node_modules/lodash/size.js +0 -2
- package/dist/node_modules/lodash/some.js +0 -2
- package/dist/node_modules/lodash/sortBy.js +0 -2
- package/dist/node_modules/lodash/stubArray.js +0 -2
- package/dist/node_modules/lodash/stubFalse.js +0 -2
- package/dist/node_modules/lodash/throttle.js +0 -2
- package/dist/node_modules/lodash/toFinite.js +0 -2
- package/dist/node_modules/lodash/toInteger.js +0 -2
- package/dist/node_modules/lodash/toNumber.js +0 -2
- package/dist/node_modules/lodash/toPlainObject.js +0 -2
- package/dist/node_modules/lodash/toString.js +0 -2
- package/dist/node_modules/lodash/transform.js +0 -2
- package/dist/node_modules/lodash/union.js +0 -2
- package/dist/node_modules/lodash/uniqBy.js +0 -2
- package/dist/node_modules/lodash/uniqueId.js +0 -2
- package/dist/node_modules/lodash/upperFirst.js +0 -2
- package/dist/node_modules/lodash/values.js +0 -2
- package/dist/node_modules/lodash/zipObject.js +0 -2
- package/dist/node_modules/object-assign/index.js +0 -2
- package/dist/node_modules/prop-types/checkPropTypes.js +0 -2
- package/dist/node_modules/prop-types/factoryWithThrowingShims.js +0 -2
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +0 -2
- package/dist/node_modules/prop-types/index.js +0 -2
- package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js +0 -2
- package/dist/node_modules/prop-types/lib/has.js +0 -2
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +0 -2
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +0 -2
- package/dist/node_modules/prop-types/node_modules/react-is/index.js +0 -2
- package/dist/node_modules/react-is/cjs/react-is.development.js +0 -2
- package/dist/node_modules/react-is/cjs/react-is.production.min.js +0 -2
- package/dist/node_modules/react-is/index.js +0 -2
- package/dist/node_modules/react-smooth/es6/Animate.js +0 -2
- package/dist/node_modules/react-smooth/es6/AnimateManager.js +0 -2
- package/dist/node_modules/react-smooth/es6/configUpdate.js +0 -2
- package/dist/node_modules/react-smooth/es6/easing.js +0 -2
- package/dist/node_modules/react-smooth/es6/index.js +0 -2
- package/dist/node_modules/react-smooth/es6/setRafTimeout.js +0 -2
- package/dist/node_modules/react-smooth/es6/util.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/Area.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/Bar.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/Brush.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/CartesianGrid.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/XAxis.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/YAxis.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js +0 -2
- package/dist/node_modules/recharts/es6/cartesian/getTicks.js +0 -2
- package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js +0 -2
- package/dist/node_modules/recharts/es6/chart/AreaChart.js +0 -2
- package/dist/node_modules/recharts/es6/chart/PieChart.js +0 -2
- package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js +0 -2
- package/dist/node_modules/recharts/es6/component/Cell.js +0 -2
- package/dist/node_modules/recharts/es6/component/Cursor.js +0 -2
- package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js +0 -2
- package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js +0 -2
- package/dist/node_modules/recharts/es6/component/Label.js +0 -2
- package/dist/node_modules/recharts/es6/component/LabelList.js +0 -2
- package/dist/node_modules/recharts/es6/component/Legend.js +0 -2
- package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js +0 -2
- package/dist/node_modules/recharts/es6/component/Text.js +0 -2
- package/dist/node_modules/recharts/es6/component/Tooltip.js +0 -2
- package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js +0 -2
- package/dist/node_modules/recharts/es6/container/Layer.js +0 -2
- package/dist/node_modules/recharts/es6/container/Surface.js +0 -2
- package/dist/node_modules/recharts/es6/context/chartLayoutContext.js +0 -2
- package/dist/node_modules/recharts/es6/polar/Pie.js +0 -2
- package/dist/node_modules/recharts/es6/polar/PolarAngleAxis.js +0 -2
- package/dist/node_modules/recharts/es6/polar/PolarRadiusAxis.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Cross.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Curve.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Dot.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Polygon.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Rectangle.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Sector.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Symbols.js +0 -2
- package/dist/node_modules/recharts/es6/shape/Trapezoid.js +0 -2
- package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/BarUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/CartesianUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/ChartUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/DOMUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/DataUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js +0 -2
- package/dist/node_modules/recharts/es6/util/Events.js +0 -2
- package/dist/node_modules/recharts/es6/util/Global.js +0 -2
- package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js +0 -2
- package/dist/node_modules/recharts/es6/util/LogUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/PolarUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/ReactUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js +0 -2
- package/dist/node_modules/recharts/es6/util/ShallowEqual.js +0 -2
- package/dist/node_modules/recharts/es6/util/TickUtils.js +0 -2
- package/dist/node_modules/recharts/es6/util/calculateViewBox.js +0 -2
- package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js +0 -2
- package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js +0 -2
- package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js +0 -2
- package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js +0 -2
- package/dist/node_modules/recharts/es6/util/getLegendProps.js +0 -2
- package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js +0 -2
- package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js +0 -2
- package/dist/node_modules/recharts/es6/util/tooltip/translate.js +0 -2
- package/dist/node_modules/recharts/es6/util/types.js +0 -2
- package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js +0 -2
- package/dist/node_modules/recharts-scale/es6/util/arithmetic.js +0 -2
- package/dist/node_modules/recharts-scale/es6/util/utils.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/Observable.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscriber.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscription.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/config.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/observable/empty.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/observable/throwError.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/symbol/observable.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/errorContext.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/identity.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/isFunction.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/noop.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/pipe.js +0 -2
- package/dist/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js +0 -2
- package/dist/node_modules/rxjs/node_modules/tslib/tslib.es6.js +0 -2
- package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js +0 -2
- package/dist/node_modules/victory-vendor/es/d3-scale.js +0 -2
- package/dist/pages/ActionsPage.js +0 -2
- package/dist/pages/AgentDetailsPage.js +0 -2
- package/dist/pages/AgentGraphPage.js +0 -2
- package/dist/pages/AgentsLandingPage.js +0 -2
- package/dist/pages/AgentsPage.js +0 -2
- package/dist/pages/AnalyticsPage.js +0 -2
- package/dist/pages/CatalogDetailPage.js +0 -2
- package/dist/pages/CatalogDocsPage.js +0 -2
- package/dist/pages/CatalogPage.js +0 -2
- package/dist/pages/ComponentDetailPage.js +0 -2
- package/dist/pages/ComponentDocsPage.js +0 -2
- package/dist/pages/ComponentsPage.js +0 -2
- package/dist/pages/EnvTopologyPage.js +0 -2
- package/dist/pages/GettingStartedPage.js +0 -2
- package/dist/pages/HealthPage.js +0 -2
- package/dist/pages/LogsPage.js +0 -2
- package/dist/pages/NoteDetailsPage.js +0 -2
- package/dist/pages/OverviewPage.js +0 -2
- package/dist/pages/PluginDetailPage.js +0 -2
- package/dist/pages/PluginsCatalogPage.js +0 -2
- package/dist/pages/ScheduledJobDetailPage.js +0 -2
- package/dist/pages/SessionDetailsPage.js +0 -2
- package/dist/pages/SessionsPage.js +0 -2
- package/dist/pages/SettingsPage.js +0 -2
- package/dist/pages/SharedSessionPage.js +0 -2
- package/dist/pages/SharedVibeDeckPage.js +0 -2
- package/dist/pages/TargetDetailsPage.js +0 -2
- package/dist/pages/TargetsPage.js +0 -2
- package/dist/pages/TemplateDetailPage.js +0 -2
- package/dist/pages/TemplatesPage.js +0 -2
- package/dist/pages/TunnelsLandingPage.js +0 -2
- package/dist/pages/VibeAuditPage.js +0 -2
- package/dist/pages/VibeCalendarPage.js +0 -2
- package/dist/pages/VibeDeckPage.js +0 -2
- package/dist/pages/VibeDetailsPage.js +0 -2
- package/dist/pages/VibeDocsPage.js +0 -2
- package/dist/pages/VibeTaskDetailPage.js +0 -2
- package/dist/pages/VibesPage.js +0 -2
- package/dist/pages/WebhooksPage.js +0 -2
- package/dist/pages/ai/AIBookmarksPage.js +0 -2
- package/dist/pages/ai/AIBuilderPage.js +0 -2
- package/dist/pages/ai/AIPage.js +0 -2
- package/dist/pages/ai/AISessionDetailPage.js +0 -2
- package/dist/pages/ai/AgentManagerPage.js +0 -2
- package/dist/pages/tunnels/AuditTab.js +0 -2
- package/dist/pages/tunnels/DomainsTab.js +0 -2
- package/dist/pages/tunnels/ProvidersTab.js +0 -2
- package/dist/pages/tunnels/SessionsTab.js +0 -2
- package/dist/pages/tunnels/TunnelDetailsPage.js +0 -2
- package/dist/pages/tunnels/TunnelsTab.js +0 -2
- package/dist/pages/tunnels/UsageTab.js +0 -2
- package/dist/pages/tunnels/tabs/TunnelAuditTab.js +0 -2
- package/dist/pages/tunnels/tabs/TunnelCliTab.js +0 -2
- package/dist/pages/tunnels/tabs/TunnelDomainsTab.js +0 -2
- package/dist/pages/tunnels/tabs/TunnelEndpointsTab.js +0 -2
- package/dist/pages/tunnels/tabs/TunnelOverviewTab.js +0 -2
- package/dist/pages/tunnels/tabs/TunnelSessionsTab.js +0 -2
- package/dist/pages/tunnels/tabs/TunnelSettingsTab.js +0 -2
- package/dist/pages/tunnels/tabs/TunnelUsageTab.js +0 -2
- package/dist/plugin.js +0 -2
- package/dist/providers/AgentEventsProvider.js +0 -2
- package/dist/providers/QuotaExhaustedProvider.js +0 -2
- package/dist/providers/VibeControlsProvider.js +0 -2
- package/dist/services/agentRemoteTaskGates.js +0 -2
- package/dist/services/aiApi.js +0 -2
- package/dist/services/assistantApi.js +0 -2
- package/dist/services/createSandboxAssistantTransport.js +0 -2
- package/dist/services/gitopsApi.js +0 -2
- package/dist/services/iframeToken.js +0 -2
- package/dist/services/planApi.js +0 -2
- package/dist/services/schedulerApi.js +0 -2
- package/dist/shared/hooks/useField.js +0 -2
- package/dist/shared/hooks/useTr.js +0 -2
- package/dist/store/agentManagerStore.js +0 -2
- package/dist/store/vibeControlsStore.js +0 -2
- package/dist/translations/en.js +0 -2
- package/dist/types/assistant.js +0 -2
- package/dist/utils/agentApiPath.js +0 -2
- package/dist/utils/agentHealth.js +0 -2
- package/dist/utils/agentStatus.js +0 -2
- package/dist/utils/agentVisibility.js +0 -2
- package/dist/utils/aiCredits.js +0 -2
- package/dist/utils/aiCreditsLedger.js +0 -2
- package/dist/utils/aiSessionNotFound.js +0 -2
- package/dist/utils/assistantPrompt.js +0 -2
- package/dist/utils/onboardingUtils.js +0 -2
- package/dist/utils/pageContext.js +0 -2
- package/dist/utils/quotaUtils.js +0 -2
- package/dist/utils/randomSessionName.js +0 -2
- package/dist/utils/relativeTime.js +0 -2
- package/dist/utils/shareUrl.js +0 -2
- package/package.json +4 -3
- package/dist/VibeControlsRoot.js.map +0 -1
- package/dist/VibeControlsRoutes.js.map +0 -1
- package/dist/components/actions/ActionCard.js.map +0 -1
- package/dist/components/actions/ActionForm.js.map +0 -1
- package/dist/components/actions/ActionSchedulesList.js.map +0 -1
- package/dist/components/actions/ActionTypeBadge.js.map +0 -1
- package/dist/components/actions/ActionWebhookEndpoint.js.map +0 -1
- package/dist/components/actions/ExecutionHistory.js.map +0 -1
- package/dist/components/actions/RemoteExecutionEnableNotice.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerAdminBar.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerBookmarksDrawer.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerBulkActions.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerCenter.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerChatPane.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerDetailPanel.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerInputArea.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerLayout.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerMessageItem.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerMessageList.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerSessionItem.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerSessionList.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerSidebar.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerStreamingIndicator.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerTab.js.map +0 -1
- package/dist/components/agent-manager/AgentManagerTabBar.js.map +0 -1
- package/dist/components/agent-manager/BridleConfigPanel.js.map +0 -1
- package/dist/components/agent-manager/ChatInsertPicker.js.map +0 -1
- package/dist/components/agent-manager/FilePickerModal.js.map +0 -1
- package/dist/components/agent-manager/PluginInstallModal.js.map +0 -1
- package/dist/components/agent-manager/ProfilesPanel.js.map +0 -1
- package/dist/components/agent-manager/controls/AutonomySelector.js.map +0 -1
- package/dist/components/agent-manager/controls/ContextLevelToggle.js.map +0 -1
- package/dist/components/agent-manager/controls/FileAttachButton.js.map +0 -1
- package/dist/components/agent-manager/controls/McpServerSelector.js.map +0 -1
- package/dist/components/agent-manager/controls/ModelSelector.js.map +0 -1
- package/dist/components/agent-manager/controls/SdkSelector.js.map +0 -1
- package/dist/components/agent-manager/controls/VoiceToggle.js.map +0 -1
- package/dist/components/agent-manager/controls/createDropHandlers.js.map +0 -1
- package/dist/components/agent-manager/detail/SessionConfigPanel.js.map +0 -1
- package/dist/components/agent-manager/detail/SessionLogsPanel.js.map +0 -1
- package/dist/components/agent-manager/detail/SessionStatsPanel.js.map +0 -1
- package/dist/components/agent-manager/detail/SessionToolsPanel.js.map +0 -1
- package/dist/components/agent-manager/dialogs/ExportSessionDialog.js.map +0 -1
- package/dist/components/agent-manager/dialogs/NewSessionDialog.js.map +0 -1
- package/dist/components/agent-manager/dialogs/RenameSessionDialog.js.map +0 -1
- package/dist/components/agent-manager/dialogs/SessionSearchDialog.js.map +0 -1
- package/dist/components/agent-manager/modelDefaults.js.map +0 -1
- package/dist/components/agents/AgentCard.js.map +0 -1
- package/dist/components/agents/AgentConnectionRecovery.js.map +0 -1
- package/dist/components/agents/AgentForm.js.map +0 -1
- package/dist/components/agents/AgentList.js.map +0 -1
- package/dist/components/agents/AgentMaintenanceTab.js.map +0 -1
- package/dist/components/agents/AgentStatusBadge.js.map +0 -1
- package/dist/components/agents/AgentStorageConfig.js.map +0 -1
- package/dist/components/agents/AgentVisibilityCard.js.map +0 -1
- package/dist/components/agents/ConfigureAgentDialog.js.map +0 -1
- package/dist/components/agents/ConnectionLogPanel.js.map +0 -1
- package/dist/components/agents/CreateSessionDialog.js.map +0 -1
- package/dist/components/agents/GatewayAuthCard.js.map +0 -1
- package/dist/components/agents/OpenInBrowserEditorButton.js.map +0 -1
- package/dist/components/agents/OpenInEditorMenu.js.map +0 -1
- package/dist/components/agents/PluginUIPanel.js.map +0 -1
- package/dist/components/agents/RemoteTaskPermissionsCard.js.map +0 -1
- package/dist/components/agents/VibeOpenInEditorMenu.js.map +0 -1
- package/dist/components/agents/agentStatus.js.map +0 -1
- package/dist/components/agents/backup/AgentBackupTab.js.map +0 -1
- package/dist/components/agents/idePresets.js.map +0 -1
- package/dist/components/ai/AIContextsTab.js.map +0 -1
- package/dist/components/ai/AIKeysTab.js.map +0 -1
- package/dist/components/ai/AIModeToggle.js.map +0 -1
- package/dist/components/ai/AIOverviewTab.js.map +0 -1
- package/dist/components/ai/AIPlanPanel.js.map +0 -1
- package/dist/components/ai/AIPlaygroundTab.js.map +0 -1
- package/dist/components/ai/AIPromptsTab.js.map +0 -1
- package/dist/components/ai/AIProviderCredentialsCard.js.map +0 -1
- package/dist/components/ai/AIQueueTab.js.map +0 -1
- package/dist/components/ai/AISessionsTab.js.map +0 -1
- package/dist/components/ai/AIStatsTab.js.map +0 -1
- package/dist/components/ai/AITasksTab.js.map +0 -1
- package/dist/components/ai/AITemplatesTab.js.map +0 -1
- package/dist/components/ai/AiSectionTabs.js.map +0 -1
- package/dist/components/ai/BridleTab.js.map +0 -1
- package/dist/components/ai/ClaudeCredentialsCard.js.map +0 -1
- package/dist/components/ai/InstructionFilesManager.js.map +0 -1
- package/dist/components/ai/PluginHarnessPicker.js.map +0 -1
- package/dist/components/ai/aiProviderCredentials.js.map +0 -1
- package/dist/components/aliases/AliasManager.js.map +0 -1
- package/dist/components/aliases/aliasReservedNames.js.map +0 -1
- package/dist/components/analytics/AnalyticsBreakdownChart.js.map +0 -1
- package/dist/components/analytics/AnalyticsBreakdownTable.js.map +0 -1
- package/dist/components/analytics/AnalyticsEntityTabs.js.map +0 -1
- package/dist/components/analytics/AnalyticsFilterBar.js.map +0 -1
- package/dist/components/analytics/AnalyticsKpiGrid.js.map +0 -1
- package/dist/components/analytics/AnalyticsTimeSeriesChart.js.map +0 -1
- package/dist/components/analytics/SandboxAnalyticsSection.js.map +0 -1
- package/dist/components/analytics/types.js.map +0 -1
- package/dist/components/assistant/AIAssistantPanel.js.map +0 -1
- package/dist/components/assistant/AiCreditsMeter.js.map +0 -1
- package/dist/components/assistant/ProductMarkdown.js.map +0 -1
- package/dist/components/assistant/assistantProduct.js.map +0 -1
- package/dist/components/assistant/recordAdapters.js.map +0 -1
- package/dist/components/audit/AuditExportButton.js.map +0 -1
- package/dist/components/audit/AuditLogDetail.js.map +0 -1
- package/dist/components/audit/AuditLogFilters.js.map +0 -1
- package/dist/components/audit/AuditLogStats.js.map +0 -1
- package/dist/components/audit/AuditLogTable.js.map +0 -1
- package/dist/components/catalog/CatalogCard.js.map +0 -1
- package/dist/components/catalog/CatalogForm.js.map +0 -1
- package/dist/components/common/ActionAgentTargetNotice.js.map +0 -1
- package/dist/components/common/CommandEditor.js.map +0 -1
- package/dist/components/common/actionAgentTarget.js.map +0 -1
- package/dist/components/common/commandHighlight.js.map +0 -1
- package/dist/components/components/ComponentHealthCell.js.map +0 -1
- package/dist/components/components/ComponentTierBadge.js.map +0 -1
- package/dist/components/components/ComponentsTable.js.map +0 -1
- package/dist/components/docs/DocsCompileStatus.js.map +0 -1
- package/dist/components/docs/DocsEditPanel.js.map +0 -1
- package/dist/components/docs/DocsEmptyState.js.map +0 -1
- package/dist/components/docs/DocsFullScreenViewer.js.map +0 -1
- package/dist/components/docs/DocsPageEditor.js.map +0 -1
- package/dist/components/docs/DocsPageTree.js.map +0 -1
- package/dist/components/docs/DocsPreviewPanel.js.map +0 -1
- package/dist/components/docs/DocsRevisionHistory.js.map +0 -1
- package/dist/components/docs/DocsSettingsPanel.js.map +0 -1
- package/dist/components/docs/DocsTabPanel.js.map +0 -1
- package/dist/components/docs/previewHtml.js.map +0 -1
- package/dist/components/docs/types.js.map +0 -1
- package/dist/components/gitops/CIDurationChart.js.map +0 -1
- package/dist/components/gitops/CIFailedRuns.js.map +0 -1
- package/dist/components/gitops/CIPipelineRunsTable.js.map +0 -1
- package/dist/components/gitops/CISuccessRateChart.js.map +0 -1
- package/dist/components/gitops/CITab.js.map +0 -1
- package/dist/components/gitops/CIWorkflowList.js.map +0 -1
- package/dist/components/gitops/GitOpsProviderPicker.js.map +0 -1
- package/dist/components/gitops/GitOpsSetup.js.map +0 -1
- package/dist/components/gitops/GitOpsSkeleton.js.map +0 -1
- package/dist/components/gitops/GitOpsStatusBadge.js.map +0 -1
- package/dist/components/gitops/ProviderIcon.js.map +0 -1
- package/dist/components/gitops/RepoActivityCard.js.map +0 -1
- package/dist/components/gitops/RepoIssuesCard.js.map +0 -1
- package/dist/components/gitops/RepoLanguagesCard.js.map +0 -1
- package/dist/components/gitops/RepoOverviewCard.js.map +0 -1
- package/dist/components/gitops/RepoPullRequestsCard.js.map +0 -1
- package/dist/components/gitops/RepoSecurityCard.js.map +0 -1
- package/dist/components/gitops/RepoStatsTab.js.map +0 -1
- package/dist/components/gitops/VibeGitOpsTab.js.map +0 -1
- package/dist/components/gitops/types.js.map +0 -1
- package/dist/components/graph/ConnectionPermissionsDialog.js.map +0 -1
- package/dist/components/graph/MeshAgentNode.js.map +0 -1
- package/dist/components/graph/MeshDeployWizard.js.map +0 -1
- package/dist/components/graph/MeshGraphView.js.map +0 -1
- package/dist/components/graph/MeshNodeActions.js.map +0 -1
- package/dist/components/graph/MeshRequestPanel.js.map +0 -1
- package/dist/components/graph/meshTypes.js.map +0 -1
- package/dist/components/graph/nodeIcons.js.map +0 -1
- package/dist/components/idp-components/ComponentCard.js.map +0 -1
- package/dist/components/idp-components/ComponentForm.js.map +0 -1
- package/dist/components/idp-components/DependencyGraphTab.js.map +0 -1
- package/dist/components/logs/LogViewer.js.map +0 -1
- package/dist/components/notes/NoteCard.js.map +0 -1
- package/dist/components/notes/NoteEditor.js.map +0 -1
- package/dist/components/notes/NoteList.js.map +0 -1
- package/dist/components/notes/NotesTabPanel.js.map +0 -1
- package/dist/components/overview/FleetActivityAreaChart.js.map +0 -1
- package/dist/components/overview/FleetActivityChart.js.map +0 -1
- package/dist/components/overview/FleetHealthCard.js.map +0 -1
- package/dist/components/overview/QuickActionsCard.js.map +0 -1
- package/dist/components/overview/useFleetAnalytics.js.map +0 -1
- package/dist/components/plugins/AddTabDialog.js.map +0 -1
- package/dist/components/plugins/FleetRolloutDialog.js.map +0 -1
- package/dist/components/plugins/PluginIframeMount.js.map +0 -1
- package/dist/components/plugins/useFleetPluginMatrix.js.map +0 -1
- package/dist/components/scorecard/MetricTrend.js.map +0 -1
- package/dist/components/scorecard/ScorecardEmptyState.js.map +0 -1
- package/dist/components/scorecard/ScorecardPanel.js.map +0 -1
- package/dist/components/scorecard/ScorecardsOverviewPanel.js.map +0 -1
- package/dist/components/scorecard/scorecardConstants.js.map +0 -1
- package/dist/components/security/SecurityRunButton.js.map +0 -1
- package/dist/components/security/SecurityScanList.js.map +0 -1
- package/dist/components/security/SecurityTabPanel.js.map +0 -1
- package/dist/components/security/agentClient.js.map +0 -1
- package/dist/components/security/hooks.js.map +0 -1
- package/dist/components/security/types.js.map +0 -1
- package/dist/components/sessions/CollaboratorsList.js.map +0 -1
- package/dist/components/sessions/ControlStatusBar.js.map +0 -1
- package/dist/components/sessions/EntityInfoPopover.js.map +0 -1
- package/dist/components/sessions/SessionCard.js.map +0 -1
- package/dist/components/sessions/SessionGroup.js.map +0 -1
- package/dist/components/sessions/SessionInfoPanel.js.map +0 -1
- package/dist/components/sessions/SessionList.js.map +0 -1
- package/dist/components/sessions/SessionPublicLinkPanel.js.map +0 -1
- package/dist/components/sessions/SessionShareDialog.js.map +0 -1
- package/dist/components/sessions/SessionStatusBadge.js.map +0 -1
- package/dist/components/sessions/SessionWorkbenchDrawer.js.map +0 -1
- package/dist/components/sessions/SessionsCommandPalette.js.map +0 -1
- package/dist/components/sessions/SharedTerminalPanel.js.map +0 -1
- package/dist/components/sessions/ShortcutCheatsheet.js.map +0 -1
- package/dist/components/sessions/TerminalIframe.js.map +0 -1
- package/dist/components/sessions/TerminalPanel.js.map +0 -1
- package/dist/components/sessions/groupSessions.js.map +0 -1
- package/dist/components/sessions/sessionShortcuts.js.map +0 -1
- package/dist/components/settings/AdvancedSection.js.map +0 -1
- package/dist/components/settings/IdePreferencesSection.js.map +0 -1
- package/dist/components/settings/NotificationsSection.js.map +0 -1
- package/dist/components/settings/SettingsForm.js.map +0 -1
- package/dist/components/settings/WorkspaceDefaultsSection.js.map +0 -1
- package/dist/components/shared/ActionMenu.js.map +0 -1
- package/dist/components/shared/AgentEventsConnector.js.map +0 -1
- package/dist/components/shared/AgentSelector.js.map +0 -1
- package/dist/components/shared/AgentSetupBanner.js.map +0 -1
- package/dist/components/shared/Card.js.map +0 -1
- package/dist/components/shared/ConfirmDialog.js.map +0 -1
- package/dist/components/shared/EmptyState.js.map +0 -1
- package/dist/components/shared/EnableRemoteTaskDialog.js.map +0 -1
- package/dist/components/shared/EntityTagPicker.js.map +0 -1
- package/dist/components/shared/EntityVibeLinkControl.js.map +0 -1
- package/dist/components/shared/ErrorState.js.map +0 -1
- package/dist/components/shared/FilterDropdown.js.map +0 -1
- package/dist/components/shared/GetHelpButton.js.map +0 -1
- package/dist/components/shared/InstallTabs.js.map +0 -1
- package/dist/components/shared/LinkToVibePanel.js.map +0 -1
- package/dist/components/shared/LoadingState.js.map +0 -1
- package/dist/components/shared/MotionTabPanel.js.map +0 -1
- package/dist/components/shared/NotificationToast.js.map +0 -1
- package/dist/components/shared/PageHeader.js.map +0 -1
- package/dist/components/shared/PageSkeleton.js.map +0 -1
- package/dist/components/shared/PlatformIcon.js.map +0 -1
- package/dist/components/shared/PluginGate.js.map +0 -1
- package/dist/components/shared/PromptDialog.js.map +0 -1
- package/dist/components/shared/QuotaExhaustedDialog.js.map +0 -1
- package/dist/components/shared/RequireAgentReachable.js.map +0 -1
- package/dist/components/shared/SearchInput.js.map +0 -1
- package/dist/components/shared/SearchableSelect.js.map +0 -1
- package/dist/components/shared/SelectionCheckbox.js.map +0 -1
- package/dist/components/shared/SessionNotificationBanner.js.map +0 -1
- package/dist/components/shared/StatCard.js.map +0 -1
- package/dist/components/shared/StatusBadge.js.map +0 -1
- package/dist/components/shared/TagFilter.js.map +0 -1
- package/dist/components/shared/cardMotion.js.map +0 -1
- package/dist/components/shared/platformIconPaths.js.map +0 -1
- package/dist/components/sharing/EntityShareButton.js.map +0 -1
- package/dist/components/sharing/NoteShareDialog.js.map +0 -1
- package/dist/components/sharing/SharedWithMePanel.js.map +0 -1
- package/dist/components/sharing/VibeShareButton.js.map +0 -1
- package/dist/components/sharing/entityShareOps.js.map +0 -1
- package/dist/components/sharing/shareControllerTypes.js.map +0 -1
- package/dist/components/sharing/shareRegistry.js.map +0 -1
- package/dist/components/sharing/useEntityShareController.js.map +0 -1
- package/dist/components/sharing/useNoteShareController.js.map +0 -1
- package/dist/components/sharing/useVibeShareController.js.map +0 -1
- package/dist/components/targets/TargetCard.js.map +0 -1
- package/dist/components/templates/PublishTemplateForm.js.map +0 -1
- package/dist/components/templates/TemplateCard.js.map +0 -1
- package/dist/components/templates/TemplateVariableEditor.js.map +0 -1
- package/dist/components/templates/TemplateWizard.js.map +0 -1
- package/dist/components/tunnels/DomainVerificationBadge.js.map +0 -1
- package/dist/components/tunnels/ProviderBadge.js.map +0 -1
- package/dist/components/tunnels/TunnelCard.js.map +0 -1
- package/dist/components/tunnels/TunnelConnectionCard.js.map +0 -1
- package/dist/components/tunnels/TunnelCopyButton.js.map +0 -1
- package/dist/components/tunnels/TunnelCreateWizard.js.map +0 -1
- package/dist/components/tunnels/TunnelMetricTiles.js.map +0 -1
- package/dist/components/tunnels/TunnelPublicAccessPanel.js.map +0 -1
- package/dist/components/tunnels/TunnelSparkline.js.map +0 -1
- package/dist/components/tunnels/TunnelStatusBadge.js.map +0 -1
- package/dist/components/tunnels/tunnelEndpoints.js.map +0 -1
- package/dist/components/tunnels/tunnelMetrics.js.map +0 -1
- package/dist/components/vibe/VibeAgentEmptyState.js.map +0 -1
- package/dist/components/vibe/VibeAgentSwitcher.js.map +0 -1
- package/dist/components/vibe/VibeEnvVarsPanel.js.map +0 -1
- package/dist/components/vibe/VibeLinkedEntitiesPanel.js.map +0 -1
- package/dist/components/vibe/VibeLlmContextAdminPanel.js.map +0 -1
- package/dist/components/vibe/VibeLlmContextTabPanel.js.map +0 -1
- package/dist/components/vibecalendar/LogsDrawer.js.map +0 -1
- package/dist/components/vibecalendar/ScheduleTaskModal.js.map +0 -1
- package/dist/components/vibecalendar/VibeCalAgendaView.js.map +0 -1
- package/dist/components/vibecalendar/VibeCalDayView.js.map +0 -1
- package/dist/components/vibecalendar/VibeCalMonthView.js.map +0 -1
- package/dist/components/vibecalendar/VibeCalWeekView.js.map +0 -1
- package/dist/components/vibecalendar/VibeCalendarHeader.js.map +0 -1
- package/dist/components/vibecalendar/VibeTaskBlock.js.map +0 -1
- package/dist/components/vibecalendar/expandOccurrences.js.map +0 -1
- package/dist/components/vibecalendar/types.js.map +0 -1
- package/dist/components/vibedeck/VibeDeckButtonForm.js.map +0 -1
- package/dist/components/vibedeck/VibeDeckButtonTile.js.map +0 -1
- package/dist/components/vibedeck/VibeDeckExecutionLog.js.map +0 -1
- package/dist/components/vibedeck/VibeDeckForm.js.map +0 -1
- package/dist/components/vibedeck/VibeDeckGrid.js.map +0 -1
- package/dist/components/vibedeck/VibeDeckPublicLinkPanel.js.map +0 -1
- package/dist/components/vibedeck/VibeDeckShareDialog.js.map +0 -1
- package/dist/components/vibedeck/VibeDeckSwitcher.js.map +0 -1
- package/dist/components/vibes/DeleteVibeDialog.js.map +0 -1
- package/dist/components/vibes/VibeCard.js.map +0 -1
- package/dist/components/vibes/VibeList.js.map +0 -1
- package/dist/components/vibes/icons.js.map +0 -1
- package/dist/components/webhooks/types.js.map +0 -1
- package/dist/config/assistantUsecases.js.map +0 -1
- package/dist/config/index.js.map +0 -1
- package/dist/constants/aiTabs.js.map +0 -1
- package/dist/constants/permissions.js.map +0 -1
- package/dist/constants/pluginCatalog.js.map +0 -1
- package/dist/generated/wspace-operations.js.map +0 -1
- package/dist/generated/wspace-types.js.map +0 -1
- package/dist/hooks/useActiveAgentProfile.js.map +0 -1
- package/dist/hooks/useAgentConnectivity.js.map +0 -1
- package/dist/hooks/useAgentEvents.js.map +0 -1
- package/dist/hooks/useAgentManagerKeyboard.js.map +0 -1
- package/dist/hooks/useAgentManagerStreaming.js.map +0 -1
- package/dist/hooks/useAiCreditsQuota.js.map +0 -1
- package/dist/hooks/useCachedInitialData.js.map +0 -1
- package/dist/hooks/useDraftEntityTags.js.map +0 -1
- package/dist/hooks/useEntityTags.js.map +0 -1
- package/dist/hooks/useGitops.js.map +0 -1
- package/dist/hooks/useInitialDataLoader.js.map +0 -1
- package/dist/hooks/useOfferedAssistantMode.js.map +0 -1
- package/dist/hooks/useOpenAssistantHelp.js.map +0 -1
- package/dist/hooks/usePluginAvailability.js.map +0 -1
- package/dist/hooks/useQueryBackedTab.js.map +0 -1
- package/dist/hooks/useTenantContext.js.map +0 -1
- package/dist/hooks/useTerminalCapabilityUrl.js.map +0 -1
- package/dist/hooks/useToggleAgentBookmark.js.map +0 -1
- package/dist/hooks/useVoiceMode.js.map +0 -1
- package/dist/hooks/useWorkspaceWriteAccess.js.map +0 -1
- package/dist/lib/apolloCache.js.map +0 -1
- package/dist/lib/toast.js.map +0 -1
- package/dist/lib/vibeFeatures.js.map +0 -1
- package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js.map +0 -1
- package/dist/node_modules/@apollo/client/errors/ServerError.js.map +0 -1
- package/dist/node_modules/@apollo/client/errors/ServerParseError.js.map +0 -1
- package/dist/node_modules/@apollo/client/errors/utils.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/batch/batchLink.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/batch/batching.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/batch-http/BaseBatchHttpLink.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/batch-http/batchHttpLink.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/client-awareness/ClientAwarenessLink.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/core/ApolloLink.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/http/checkFetcher.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/http/parseAndCheckHttpResponse.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/http/selectHttpOptionsAndBody.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/http/selectURI.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/utils/createOperation.js.map +0 -1
- package/dist/node_modules/@apollo/client/link/utils/filterOperationVariables.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/caching/sizes.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/graphql/print.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/caches.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/checkDocument.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/compact.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/getMainDefinition.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/getMemoryInternals.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationDefinition.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/getOperationName.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/globals/global.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/globals/maybe.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/makeUniqueId.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/memoize.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/internal/stringifyForDisplay.js.map +0 -1
- package/dist/node_modules/@apollo/client/utilities/invariant/index.js.map +0 -1
- package/dist/node_modules/@apollo/client/version.js.map +0 -1
- package/dist/node_modules/@wry/caches/lib/weak.js.map +0 -1
- package/dist/node_modules/@wry/trie/lib/index.js.map +0 -1
- package/dist/node_modules/clsx/dist/clsx.js.map +0 -1
- package/dist/node_modules/d3-array/src/ascending.js.map +0 -1
- package/dist/node_modules/d3-array/src/bisect.js.map +0 -1
- package/dist/node_modules/d3-array/src/bisector.js.map +0 -1
- package/dist/node_modules/d3-array/src/descending.js.map +0 -1
- package/dist/node_modules/d3-array/src/max.js.map +0 -1
- package/dist/node_modules/d3-array/src/min.js.map +0 -1
- package/dist/node_modules/d3-array/src/number.js.map +0 -1
- package/dist/node_modules/d3-array/src/quantile.js.map +0 -1
- package/dist/node_modules/d3-array/src/quickselect.js.map +0 -1
- package/dist/node_modules/d3-array/src/range.js.map +0 -1
- package/dist/node_modules/d3-array/src/sort.js.map +0 -1
- package/dist/node_modules/d3-array/src/ticks.js.map +0 -1
- package/dist/node_modules/d3-color/src/color.js.map +0 -1
- package/dist/node_modules/d3-color/src/define.js.map +0 -1
- package/dist/node_modules/d3-format/src/defaultLocale.js.map +0 -1
- package/dist/node_modules/d3-format/src/exponent.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatDecimal.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatGroup.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatNumerals.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatPrefixAuto.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatRounded.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatSpecifier.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatTrim.js.map +0 -1
- package/dist/node_modules/d3-format/src/formatTypes.js.map +0 -1
- package/dist/node_modules/d3-format/src/identity.js.map +0 -1
- package/dist/node_modules/d3-format/src/locale.js.map +0 -1
- package/dist/node_modules/d3-format/src/precisionFixed.js.map +0 -1
- package/dist/node_modules/d3-format/src/precisionPrefix.js.map +0 -1
- package/dist/node_modules/d3-format/src/precisionRound.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/array.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/basis.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/basisClosed.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/color.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/constant.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/date.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/number.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/numberArray.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/object.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/piecewise.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/rgb.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/round.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/string.js.map +0 -1
- package/dist/node_modules/d3-interpolate/src/value.js.map +0 -1
- package/dist/node_modules/d3-path/src/path.js.map +0 -1
- package/dist/node_modules/d3-scale/src/band.js.map +0 -1
- package/dist/node_modules/d3-scale/src/constant.js.map +0 -1
- package/dist/node_modules/d3-scale/src/continuous.js.map +0 -1
- package/dist/node_modules/d3-scale/src/diverging.js.map +0 -1
- package/dist/node_modules/d3-scale/src/identity.js.map +0 -1
- package/dist/node_modules/d3-scale/src/init.js.map +0 -1
- package/dist/node_modules/d3-scale/src/linear.js.map +0 -1
- package/dist/node_modules/d3-scale/src/log.js.map +0 -1
- package/dist/node_modules/d3-scale/src/nice.js.map +0 -1
- package/dist/node_modules/d3-scale/src/number.js.map +0 -1
- package/dist/node_modules/d3-scale/src/ordinal.js.map +0 -1
- package/dist/node_modules/d3-scale/src/pow.js.map +0 -1
- package/dist/node_modules/d3-scale/src/quantile.js.map +0 -1
- package/dist/node_modules/d3-scale/src/quantize.js.map +0 -1
- package/dist/node_modules/d3-scale/src/radial.js.map +0 -1
- package/dist/node_modules/d3-scale/src/sequential.js.map +0 -1
- package/dist/node_modules/d3-scale/src/sequentialQuantile.js.map +0 -1
- package/dist/node_modules/d3-scale/src/symlog.js.map +0 -1
- package/dist/node_modules/d3-scale/src/threshold.js.map +0 -1
- package/dist/node_modules/d3-scale/src/tickFormat.js.map +0 -1
- package/dist/node_modules/d3-scale/src/time.js.map +0 -1
- package/dist/node_modules/d3-scale/src/utcTime.js.map +0 -1
- package/dist/node_modules/d3-shape/src/area.js.map +0 -1
- package/dist/node_modules/d3-shape/src/array.js.map +0 -1
- package/dist/node_modules/d3-shape/src/constant.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/basis.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/basisClosed.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/basisOpen.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/bump.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/linear.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/linearClosed.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/monotone.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/natural.js.map +0 -1
- package/dist/node_modules/d3-shape/src/curve/step.js.map +0 -1
- package/dist/node_modules/d3-shape/src/line.js.map +0 -1
- package/dist/node_modules/d3-shape/src/math.js.map +0 -1
- package/dist/node_modules/d3-shape/src/noop.js.map +0 -1
- package/dist/node_modules/d3-shape/src/offset/expand.js.map +0 -1
- package/dist/node_modules/d3-shape/src/offset/none.js.map +0 -1
- package/dist/node_modules/d3-shape/src/offset/silhouette.js.map +0 -1
- package/dist/node_modules/d3-shape/src/offset/wiggle.js.map +0 -1
- package/dist/node_modules/d3-shape/src/order/none.js.map +0 -1
- package/dist/node_modules/d3-shape/src/path.js.map +0 -1
- package/dist/node_modules/d3-shape/src/point.js.map +0 -1
- package/dist/node_modules/d3-shape/src/stack.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/circle.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/cross.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/diamond.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/square.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/star.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/triangle.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol/wye.js.map +0 -1
- package/dist/node_modules/d3-shape/src/symbol.js.map +0 -1
- package/dist/node_modules/d3-time/src/day.js.map +0 -1
- package/dist/node_modules/d3-time/src/duration.js.map +0 -1
- package/dist/node_modules/d3-time/src/hour.js.map +0 -1
- package/dist/node_modules/d3-time/src/interval.js.map +0 -1
- package/dist/node_modules/d3-time/src/millisecond.js.map +0 -1
- package/dist/node_modules/d3-time/src/minute.js.map +0 -1
- package/dist/node_modules/d3-time/src/month.js.map +0 -1
- package/dist/node_modules/d3-time/src/second.js.map +0 -1
- package/dist/node_modules/d3-time/src/ticks.js.map +0 -1
- package/dist/node_modules/d3-time/src/week.js.map +0 -1
- package/dist/node_modules/d3-time/src/year.js.map +0 -1
- package/dist/node_modules/d3-time-format/src/defaultLocale.js.map +0 -1
- package/dist/node_modules/d3-time-format/src/locale.js.map +0 -1
- package/dist/node_modules/dagre/index.js.map +0 -1
- package/dist/node_modules/dagre/lib/acyclic.js.map +0 -1
- package/dist/node_modules/dagre/lib/add-border-segments.js.map +0 -1
- package/dist/node_modules/dagre/lib/coordinate-system.js.map +0 -1
- package/dist/node_modules/dagre/lib/data/list.js.map +0 -1
- package/dist/node_modules/dagre/lib/debug.js.map +0 -1
- package/dist/node_modules/dagre/lib/graphlib.js.map +0 -1
- package/dist/node_modules/dagre/lib/greedy-fas.js.map +0 -1
- package/dist/node_modules/dagre/lib/layout.js.map +0 -1
- package/dist/node_modules/dagre/lib/lodash.js.map +0 -1
- package/dist/node_modules/dagre/lib/nesting-graph.js.map +0 -1
- package/dist/node_modules/dagre/lib/normalize.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/add-subgraph-constraints.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/barycenter.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/build-layer-graph.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/cross-count.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/index.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/init-order.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/resolve-conflicts.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/sort-subgraph.js.map +0 -1
- package/dist/node_modules/dagre/lib/order/sort.js.map +0 -1
- package/dist/node_modules/dagre/lib/parent-dummy-chains.js.map +0 -1
- package/dist/node_modules/dagre/lib/position/bk.js.map +0 -1
- package/dist/node_modules/dagre/lib/position/index.js.map +0 -1
- package/dist/node_modules/dagre/lib/rank/feasible-tree.js.map +0 -1
- package/dist/node_modules/dagre/lib/rank/index.js.map +0 -1
- package/dist/node_modules/dagre/lib/rank/network-simplex.js.map +0 -1
- package/dist/node_modules/dagre/lib/rank/util.js.map +0 -1
- package/dist/node_modules/dagre/lib/util.js.map +0 -1
- package/dist/node_modules/dagre/lib/version.js.map +0 -1
- package/dist/node_modules/decimal.js-light/decimal.js.map +0 -1
- package/dist/node_modules/eventemitter3/index.js.map +0 -1
- package/dist/node_modules/fast-equals/dist/es/index.js.map +0 -1
- package/dist/node_modules/graphlib/index.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/components.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/dfs.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/dijkstra-all.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/dijkstra.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/find-cycles.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/floyd-warshall.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/index.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/is-acyclic.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/postorder.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/preorder.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/prim.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/tarjan.js.map +0 -1
- package/dist/node_modules/graphlib/lib/alg/topsort.js.map +0 -1
- package/dist/node_modules/graphlib/lib/data/priority-queue.js.map +0 -1
- package/dist/node_modules/graphlib/lib/graph.js.map +0 -1
- package/dist/node_modules/graphlib/lib/index.js.map +0 -1
- package/dist/node_modules/graphlib/lib/json.js.map +0 -1
- package/dist/node_modules/graphlib/lib/lodash.js.map +0 -1
- package/dist/node_modules/graphlib/lib/version.js.map +0 -1
- package/dist/node_modules/internmap/src/index.js.map +0 -1
- package/dist/node_modules/lodash/_DataView.js.map +0 -1
- package/dist/node_modules/lodash/_Hash.js.map +0 -1
- package/dist/node_modules/lodash/_ListCache.js.map +0 -1
- package/dist/node_modules/lodash/_Map.js.map +0 -1
- package/dist/node_modules/lodash/_MapCache.js.map +0 -1
- package/dist/node_modules/lodash/_Promise.js.map +0 -1
- package/dist/node_modules/lodash/_Set.js.map +0 -1
- package/dist/node_modules/lodash/_SetCache.js.map +0 -1
- package/dist/node_modules/lodash/_Stack.js.map +0 -1
- package/dist/node_modules/lodash/_Symbol.js.map +0 -1
- package/dist/node_modules/lodash/_Uint8Array.js.map +0 -1
- package/dist/node_modules/lodash/_WeakMap.js.map +0 -1
- package/dist/node_modules/lodash/_apply.js.map +0 -1
- package/dist/node_modules/lodash/_arrayEach.js.map +0 -1
- package/dist/node_modules/lodash/_arrayEvery.js.map +0 -1
- package/dist/node_modules/lodash/_arrayFilter.js.map +0 -1
- package/dist/node_modules/lodash/_arrayIncludes.js.map +0 -1
- package/dist/node_modules/lodash/_arrayIncludesWith.js.map +0 -1
- package/dist/node_modules/lodash/_arrayLikeKeys.js.map +0 -1
- package/dist/node_modules/lodash/_arrayMap.js.map +0 -1
- package/dist/node_modules/lodash/_arrayPush.js.map +0 -1
- package/dist/node_modules/lodash/_arrayReduce.js.map +0 -1
- package/dist/node_modules/lodash/_arraySome.js.map +0 -1
- package/dist/node_modules/lodash/_asciiSize.js.map +0 -1
- package/dist/node_modules/lodash/_asciiToArray.js.map +0 -1
- package/dist/node_modules/lodash/_assignMergeValue.js.map +0 -1
- package/dist/node_modules/lodash/_assignValue.js.map +0 -1
- package/dist/node_modules/lodash/_assocIndexOf.js.map +0 -1
- package/dist/node_modules/lodash/_baseAssign.js.map +0 -1
- package/dist/node_modules/lodash/_baseAssignIn.js.map +0 -1
- package/dist/node_modules/lodash/_baseAssignValue.js.map +0 -1
- package/dist/node_modules/lodash/_baseClone.js.map +0 -1
- package/dist/node_modules/lodash/_baseCreate.js.map +0 -1
- package/dist/node_modules/lodash/_baseEach.js.map +0 -1
- package/dist/node_modules/lodash/_baseEvery.js.map +0 -1
- package/dist/node_modules/lodash/_baseExtremum.js.map +0 -1
- package/dist/node_modules/lodash/_baseFilter.js.map +0 -1
- package/dist/node_modules/lodash/_baseFindIndex.js.map +0 -1
- package/dist/node_modules/lodash/_baseFlatten.js.map +0 -1
- package/dist/node_modules/lodash/_baseFor.js.map +0 -1
- package/dist/node_modules/lodash/_baseForOwn.js.map +0 -1
- package/dist/node_modules/lodash/_baseGet.js.map +0 -1
- package/dist/node_modules/lodash/_baseGetAllKeys.js.map +0 -1
- package/dist/node_modules/lodash/_baseGetTag.js.map +0 -1
- package/dist/node_modules/lodash/_baseGt.js.map +0 -1
- package/dist/node_modules/lodash/_baseHas.js.map +0 -1
- package/dist/node_modules/lodash/_baseHasIn.js.map +0 -1
- package/dist/node_modules/lodash/_baseIndexOf.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsArguments.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsEqual.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsEqualDeep.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsMap.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsMatch.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsNaN.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsNative.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsSet.js.map +0 -1
- package/dist/node_modules/lodash/_baseIsTypedArray.js.map +0 -1
- package/dist/node_modules/lodash/_baseIteratee.js.map +0 -1
- package/dist/node_modules/lodash/_baseKeys.js.map +0 -1
- package/dist/node_modules/lodash/_baseKeysIn.js.map +0 -1
- package/dist/node_modules/lodash/_baseLt.js.map +0 -1
- package/dist/node_modules/lodash/_baseMap.js.map +0 -1
- package/dist/node_modules/lodash/_baseMatches.js.map +0 -1
- package/dist/node_modules/lodash/_baseMatchesProperty.js.map +0 -1
- package/dist/node_modules/lodash/_baseMerge.js.map +0 -1
- package/dist/node_modules/lodash/_baseMergeDeep.js.map +0 -1
- package/dist/node_modules/lodash/_baseOrderBy.js.map +0 -1
- package/dist/node_modules/lodash/_basePick.js.map +0 -1
- package/dist/node_modules/lodash/_basePickBy.js.map +0 -1
- package/dist/node_modules/lodash/_baseProperty.js.map +0 -1
- package/dist/node_modules/lodash/_basePropertyDeep.js.map +0 -1
- package/dist/node_modules/lodash/_baseRange.js.map +0 -1
- package/dist/node_modules/lodash/_baseReduce.js.map +0 -1
- package/dist/node_modules/lodash/_baseRest.js.map +0 -1
- package/dist/node_modules/lodash/_baseSet.js.map +0 -1
- package/dist/node_modules/lodash/_baseSetToString.js.map +0 -1
- package/dist/node_modules/lodash/_baseSlice.js.map +0 -1
- package/dist/node_modules/lodash/_baseSome.js.map +0 -1
- package/dist/node_modules/lodash/_baseSortBy.js.map +0 -1
- package/dist/node_modules/lodash/_baseTimes.js.map +0 -1
- package/dist/node_modules/lodash/_baseToString.js.map +0 -1
- package/dist/node_modules/lodash/_baseTrim.js.map +0 -1
- package/dist/node_modules/lodash/_baseUnary.js.map +0 -1
- package/dist/node_modules/lodash/_baseUniq.js.map +0 -1
- package/dist/node_modules/lodash/_baseValues.js.map +0 -1
- package/dist/node_modules/lodash/_baseZipObject.js.map +0 -1
- package/dist/node_modules/lodash/_cacheHas.js.map +0 -1
- package/dist/node_modules/lodash/_castFunction.js.map +0 -1
- package/dist/node_modules/lodash/_castPath.js.map +0 -1
- package/dist/node_modules/lodash/_castSlice.js.map +0 -1
- package/dist/node_modules/lodash/_cloneArrayBuffer.js.map +0 -1
- package/dist/node_modules/lodash/_cloneBuffer.js.map +0 -1
- package/dist/node_modules/lodash/_cloneDataView.js.map +0 -1
- package/dist/node_modules/lodash/_cloneRegExp.js.map +0 -1
- package/dist/node_modules/lodash/_cloneSymbol.js.map +0 -1
- package/dist/node_modules/lodash/_cloneTypedArray.js.map +0 -1
- package/dist/node_modules/lodash/_compareAscending.js.map +0 -1
- package/dist/node_modules/lodash/_compareMultiple.js.map +0 -1
- package/dist/node_modules/lodash/_copyArray.js.map +0 -1
- package/dist/node_modules/lodash/_copyObject.js.map +0 -1
- package/dist/node_modules/lodash/_copySymbols.js.map +0 -1
- package/dist/node_modules/lodash/_copySymbolsIn.js.map +0 -1
- package/dist/node_modules/lodash/_coreJsData.js.map +0 -1
- package/dist/node_modules/lodash/_createAssigner.js.map +0 -1
- package/dist/node_modules/lodash/_createBaseEach.js.map +0 -1
- package/dist/node_modules/lodash/_createBaseFor.js.map +0 -1
- package/dist/node_modules/lodash/_createCaseFirst.js.map +0 -1
- package/dist/node_modules/lodash/_createFind.js.map +0 -1
- package/dist/node_modules/lodash/_createRange.js.map +0 -1
- package/dist/node_modules/lodash/_createSet.js.map +0 -1
- package/dist/node_modules/lodash/_defineProperty.js.map +0 -1
- package/dist/node_modules/lodash/_equalArrays.js.map +0 -1
- package/dist/node_modules/lodash/_equalByTag.js.map +0 -1
- package/dist/node_modules/lodash/_equalObjects.js.map +0 -1
- package/dist/node_modules/lodash/_flatRest.js.map +0 -1
- package/dist/node_modules/lodash/_freeGlobal.js.map +0 -1
- package/dist/node_modules/lodash/_getAllKeys.js.map +0 -1
- package/dist/node_modules/lodash/_getAllKeysIn.js.map +0 -1
- package/dist/node_modules/lodash/_getMapData.js.map +0 -1
- package/dist/node_modules/lodash/_getMatchData.js.map +0 -1
- package/dist/node_modules/lodash/_getNative.js.map +0 -1
- package/dist/node_modules/lodash/_getPrototype.js.map +0 -1
- package/dist/node_modules/lodash/_getRawTag.js.map +0 -1
- package/dist/node_modules/lodash/_getSymbols.js.map +0 -1
- package/dist/node_modules/lodash/_getSymbolsIn.js.map +0 -1
- package/dist/node_modules/lodash/_getTag.js.map +0 -1
- package/dist/node_modules/lodash/_getValue.js.map +0 -1
- package/dist/node_modules/lodash/_hasPath.js.map +0 -1
- package/dist/node_modules/lodash/_hasUnicode.js.map +0 -1
- package/dist/node_modules/lodash/_hashClear.js.map +0 -1
- package/dist/node_modules/lodash/_hashDelete.js.map +0 -1
- package/dist/node_modules/lodash/_hashGet.js.map +0 -1
- package/dist/node_modules/lodash/_hashHas.js.map +0 -1
- package/dist/node_modules/lodash/_hashSet.js.map +0 -1
- package/dist/node_modules/lodash/_initCloneArray.js.map +0 -1
- package/dist/node_modules/lodash/_initCloneByTag.js.map +0 -1
- package/dist/node_modules/lodash/_initCloneObject.js.map +0 -1
- package/dist/node_modules/lodash/_isFlattenable.js.map +0 -1
- package/dist/node_modules/lodash/_isIndex.js.map +0 -1
- package/dist/node_modules/lodash/_isIterateeCall.js.map +0 -1
- package/dist/node_modules/lodash/_isKey.js.map +0 -1
- package/dist/node_modules/lodash/_isKeyable.js.map +0 -1
- package/dist/node_modules/lodash/_isMasked.js.map +0 -1
- package/dist/node_modules/lodash/_isPrototype.js.map +0 -1
- package/dist/node_modules/lodash/_isStrictComparable.js.map +0 -1
- package/dist/node_modules/lodash/_listCacheClear.js.map +0 -1
- package/dist/node_modules/lodash/_listCacheDelete.js.map +0 -1
- package/dist/node_modules/lodash/_listCacheGet.js.map +0 -1
- package/dist/node_modules/lodash/_listCacheHas.js.map +0 -1
- package/dist/node_modules/lodash/_listCacheSet.js.map +0 -1
- package/dist/node_modules/lodash/_mapCacheClear.js.map +0 -1
- package/dist/node_modules/lodash/_mapCacheDelete.js.map +0 -1
- package/dist/node_modules/lodash/_mapCacheGet.js.map +0 -1
- package/dist/node_modules/lodash/_mapCacheHas.js.map +0 -1
- package/dist/node_modules/lodash/_mapCacheSet.js.map +0 -1
- package/dist/node_modules/lodash/_mapToArray.js.map +0 -1
- package/dist/node_modules/lodash/_matchesStrictComparable.js.map +0 -1
- package/dist/node_modules/lodash/_memoizeCapped.js.map +0 -1
- package/dist/node_modules/lodash/_nativeCreate.js.map +0 -1
- package/dist/node_modules/lodash/_nativeKeys.js.map +0 -1
- package/dist/node_modules/lodash/_nativeKeysIn.js.map +0 -1
- package/dist/node_modules/lodash/_nodeUtil.js.map +0 -1
- package/dist/node_modules/lodash/_objectToString.js.map +0 -1
- package/dist/node_modules/lodash/_overArg.js.map +0 -1
- package/dist/node_modules/lodash/_overRest.js.map +0 -1
- package/dist/node_modules/lodash/_root.js.map +0 -1
- package/dist/node_modules/lodash/_safeGet.js.map +0 -1
- package/dist/node_modules/lodash/_setCacheAdd.js.map +0 -1
- package/dist/node_modules/lodash/_setCacheHas.js.map +0 -1
- package/dist/node_modules/lodash/_setToArray.js.map +0 -1
- package/dist/node_modules/lodash/_setToString.js.map +0 -1
- package/dist/node_modules/lodash/_shortOut.js.map +0 -1
- package/dist/node_modules/lodash/_stackClear.js.map +0 -1
- package/dist/node_modules/lodash/_stackDelete.js.map +0 -1
- package/dist/node_modules/lodash/_stackGet.js.map +0 -1
- package/dist/node_modules/lodash/_stackHas.js.map +0 -1
- package/dist/node_modules/lodash/_stackSet.js.map +0 -1
- package/dist/node_modules/lodash/_strictIndexOf.js.map +0 -1
- package/dist/node_modules/lodash/_stringSize.js.map +0 -1
- package/dist/node_modules/lodash/_stringToArray.js.map +0 -1
- package/dist/node_modules/lodash/_stringToPath.js.map +0 -1
- package/dist/node_modules/lodash/_toKey.js.map +0 -1
- package/dist/node_modules/lodash/_toSource.js.map +0 -1
- package/dist/node_modules/lodash/_trimmedEndIndex.js.map +0 -1
- package/dist/node_modules/lodash/_unicodeSize.js.map +0 -1
- package/dist/node_modules/lodash/_unicodeToArray.js.map +0 -1
- package/dist/node_modules/lodash/clone.js.map +0 -1
- package/dist/node_modules/lodash/cloneDeep.js.map +0 -1
- package/dist/node_modules/lodash/constant.js.map +0 -1
- package/dist/node_modules/lodash/debounce.js.map +0 -1
- package/dist/node_modules/lodash/defaults.js.map +0 -1
- package/dist/node_modules/lodash/each.js.map +0 -1
- package/dist/node_modules/lodash/eq.js.map +0 -1
- package/dist/node_modules/lodash/every.js.map +0 -1
- package/dist/node_modules/lodash/filter.js.map +0 -1
- package/dist/node_modules/lodash/find.js.map +0 -1
- package/dist/node_modules/lodash/findIndex.js.map +0 -1
- package/dist/node_modules/lodash/flatMap.js.map +0 -1
- package/dist/node_modules/lodash/flatten.js.map +0 -1
- package/dist/node_modules/lodash/forEach.js.map +0 -1
- package/dist/node_modules/lodash/forIn.js.map +0 -1
- package/dist/node_modules/lodash/get.js.map +0 -1
- package/dist/node_modules/lodash/has.js.map +0 -1
- package/dist/node_modules/lodash/hasIn.js.map +0 -1
- package/dist/node_modules/lodash/identity.js.map +0 -1
- package/dist/node_modules/lodash/isArguments.js.map +0 -1
- package/dist/node_modules/lodash/isArray.js.map +0 -1
- package/dist/node_modules/lodash/isArrayLike.js.map +0 -1
- package/dist/node_modules/lodash/isArrayLikeObject.js.map +0 -1
- package/dist/node_modules/lodash/isBoolean.js.map +0 -1
- package/dist/node_modules/lodash/isBuffer.js.map +0 -1
- package/dist/node_modules/lodash/isEmpty.js.map +0 -1
- package/dist/node_modules/lodash/isEqual.js.map +0 -1
- package/dist/node_modules/lodash/isFunction.js.map +0 -1
- package/dist/node_modules/lodash/isLength.js.map +0 -1
- package/dist/node_modules/lodash/isMap.js.map +0 -1
- package/dist/node_modules/lodash/isNaN.js.map +0 -1
- package/dist/node_modules/lodash/isNil.js.map +0 -1
- package/dist/node_modules/lodash/isNumber.js.map +0 -1
- package/dist/node_modules/lodash/isObject.js.map +0 -1
- package/dist/node_modules/lodash/isObjectLike.js.map +0 -1
- package/dist/node_modules/lodash/isPlainObject.js.map +0 -1
- package/dist/node_modules/lodash/isSet.js.map +0 -1
- package/dist/node_modules/lodash/isString.js.map +0 -1
- package/dist/node_modules/lodash/isSymbol.js.map +0 -1
- package/dist/node_modules/lodash/isTypedArray.js.map +0 -1
- package/dist/node_modules/lodash/isUndefined.js.map +0 -1
- package/dist/node_modules/lodash/keys.js.map +0 -1
- package/dist/node_modules/lodash/keysIn.js.map +0 -1
- package/dist/node_modules/lodash/last.js.map +0 -1
- package/dist/node_modules/lodash/map.js.map +0 -1
- package/dist/node_modules/lodash/mapValues.js.map +0 -1
- package/dist/node_modules/lodash/max.js.map +0 -1
- package/dist/node_modules/lodash/maxBy.js.map +0 -1
- package/dist/node_modules/lodash/memoize.js.map +0 -1
- package/dist/node_modules/lodash/merge.js.map +0 -1
- package/dist/node_modules/lodash/min.js.map +0 -1
- package/dist/node_modules/lodash/minBy.js.map +0 -1
- package/dist/node_modules/lodash/noop.js.map +0 -1
- package/dist/node_modules/lodash/now.js.map +0 -1
- package/dist/node_modules/lodash/pick.js.map +0 -1
- package/dist/node_modules/lodash/property.js.map +0 -1
- package/dist/node_modules/lodash/range.js.map +0 -1
- package/dist/node_modules/lodash/reduce.js.map +0 -1
- package/dist/node_modules/lodash/size.js.map +0 -1
- package/dist/node_modules/lodash/some.js.map +0 -1
- package/dist/node_modules/lodash/sortBy.js.map +0 -1
- package/dist/node_modules/lodash/stubArray.js.map +0 -1
- package/dist/node_modules/lodash/stubFalse.js.map +0 -1
- package/dist/node_modules/lodash/throttle.js.map +0 -1
- package/dist/node_modules/lodash/toFinite.js.map +0 -1
- package/dist/node_modules/lodash/toInteger.js.map +0 -1
- package/dist/node_modules/lodash/toNumber.js.map +0 -1
- package/dist/node_modules/lodash/toPlainObject.js.map +0 -1
- package/dist/node_modules/lodash/toString.js.map +0 -1
- package/dist/node_modules/lodash/transform.js.map +0 -1
- package/dist/node_modules/lodash/union.js.map +0 -1
- package/dist/node_modules/lodash/uniqBy.js.map +0 -1
- package/dist/node_modules/lodash/uniqueId.js.map +0 -1
- package/dist/node_modules/lodash/upperFirst.js.map +0 -1
- package/dist/node_modules/lodash/values.js.map +0 -1
- package/dist/node_modules/lodash/zipObject.js.map +0 -1
- package/dist/node_modules/object-assign/index.js.map +0 -1
- package/dist/node_modules/prop-types/checkPropTypes.js.map +0 -1
- package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +0 -1
- package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +0 -1
- package/dist/node_modules/prop-types/index.js.map +0 -1
- package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +0 -1
- package/dist/node_modules/prop-types/lib/has.js.map +0 -1
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +0 -1
- package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +0 -1
- package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +0 -1
- package/dist/node_modules/react-is/cjs/react-is.development.js.map +0 -1
- package/dist/node_modules/react-is/cjs/react-is.production.min.js.map +0 -1
- package/dist/node_modules/react-is/index.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/Animate.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/AnimateManager.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/configUpdate.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/easing.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/index.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/setRafTimeout.js.map +0 -1
- package/dist/node_modules/react-smooth/es6/util.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/Area.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/Bar.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/Brush.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/CartesianGrid.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/XAxis.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/YAxis.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js.map +0 -1
- package/dist/node_modules/recharts/es6/cartesian/getTicks.js.map +0 -1
- package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js.map +0 -1
- package/dist/node_modules/recharts/es6/chart/AreaChart.js.map +0 -1
- package/dist/node_modules/recharts/es6/chart/PieChart.js.map +0 -1
- package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Cell.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Cursor.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Label.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/LabelList.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Legend.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Text.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/Tooltip.js.map +0 -1
- package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js.map +0 -1
- package/dist/node_modules/recharts/es6/container/Layer.js.map +0 -1
- package/dist/node_modules/recharts/es6/container/Surface.js.map +0 -1
- package/dist/node_modules/recharts/es6/context/chartLayoutContext.js.map +0 -1
- package/dist/node_modules/recharts/es6/polar/Pie.js.map +0 -1
- package/dist/node_modules/recharts/es6/polar/PolarAngleAxis.js.map +0 -1
- package/dist/node_modules/recharts/es6/polar/PolarRadiusAxis.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Cross.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Curve.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Dot.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Polygon.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Rectangle.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Sector.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Symbols.js.map +0 -1
- package/dist/node_modules/recharts/es6/shape/Trapezoid.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/BarUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/CartesianUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/ChartUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/DOMUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/DataUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/Events.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/Global.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/LogUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/PolarUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/ReactUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/ShallowEqual.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/TickUtils.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/calculateViewBox.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/getLegendProps.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/tooltip/translate.js.map +0 -1
- package/dist/node_modules/recharts/es6/util/types.js.map +0 -1
- package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js.map +0 -1
- package/dist/node_modules/recharts-scale/es6/util/arithmetic.js.map +0 -1
- package/dist/node_modules/recharts-scale/es6/util/utils.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/NotificationFactories.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/Observable.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscriber.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/Subscription.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/config.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/observable/empty.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/observable/throwError.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/scheduler/timeoutProvider.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/symbol/observable.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/UnsubscriptionError.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/arrRemove.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/createErrorClass.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/errorContext.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/identity.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/isFunction.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/noop.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/pipe.js.map +0 -1
- package/dist/node_modules/rxjs/dist/esm5/internal/util/reportUnhandledError.js.map +0 -1
- package/dist/node_modules/rxjs/node_modules/tslib/tslib.es6.js.map +0 -1
- package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js.map +0 -1
- package/dist/node_modules/victory-vendor/es/d3-scale.js.map +0 -1
- package/dist/pages/ActionsPage.js.map +0 -1
- package/dist/pages/AgentDetailsPage.js.map +0 -1
- package/dist/pages/AgentGraphPage.js.map +0 -1
- package/dist/pages/AgentsLandingPage.js.map +0 -1
- package/dist/pages/AgentsPage.js.map +0 -1
- package/dist/pages/AnalyticsPage.js.map +0 -1
- package/dist/pages/CatalogDetailPage.js.map +0 -1
- package/dist/pages/CatalogDocsPage.js.map +0 -1
- package/dist/pages/CatalogPage.js.map +0 -1
- package/dist/pages/ComponentDetailPage.js.map +0 -1
- package/dist/pages/ComponentDocsPage.js.map +0 -1
- package/dist/pages/ComponentsPage.js.map +0 -1
- package/dist/pages/EnvTopologyPage.js.map +0 -1
- package/dist/pages/GettingStartedPage.js.map +0 -1
- package/dist/pages/HealthPage.js.map +0 -1
- package/dist/pages/LogsPage.js.map +0 -1
- package/dist/pages/NoteDetailsPage.js.map +0 -1
- package/dist/pages/OverviewPage.js.map +0 -1
- package/dist/pages/PluginDetailPage.js.map +0 -1
- package/dist/pages/PluginsCatalogPage.js.map +0 -1
- package/dist/pages/ScheduledJobDetailPage.js.map +0 -1
- package/dist/pages/SessionDetailsPage.js.map +0 -1
- package/dist/pages/SessionsPage.js.map +0 -1
- package/dist/pages/SettingsPage.js.map +0 -1
- package/dist/pages/SharedSessionPage.js.map +0 -1
- package/dist/pages/SharedVibeDeckPage.js.map +0 -1
- package/dist/pages/TargetDetailsPage.js.map +0 -1
- package/dist/pages/TargetsPage.js.map +0 -1
- package/dist/pages/TemplateDetailPage.js.map +0 -1
- package/dist/pages/TemplatesPage.js.map +0 -1
- package/dist/pages/TunnelsLandingPage.js.map +0 -1
- package/dist/pages/VibeAuditPage.js.map +0 -1
- package/dist/pages/VibeCalendarPage.js.map +0 -1
- package/dist/pages/VibeDeckPage.js.map +0 -1
- package/dist/pages/VibeDetailsPage.js.map +0 -1
- package/dist/pages/VibeDocsPage.js.map +0 -1
- package/dist/pages/VibeTaskDetailPage.js.map +0 -1
- package/dist/pages/VibesPage.js.map +0 -1
- package/dist/pages/WebhooksPage.js.map +0 -1
- package/dist/pages/ai/AIBookmarksPage.js.map +0 -1
- package/dist/pages/ai/AIBuilderPage.js.map +0 -1
- package/dist/pages/ai/AIPage.js.map +0 -1
- package/dist/pages/ai/AISessionDetailPage.js.map +0 -1
- package/dist/pages/ai/AgentManagerPage.js.map +0 -1
- package/dist/pages/tunnels/AuditTab.js.map +0 -1
- package/dist/pages/tunnels/DomainsTab.js.map +0 -1
- package/dist/pages/tunnels/ProvidersTab.js.map +0 -1
- package/dist/pages/tunnels/SessionsTab.js.map +0 -1
- package/dist/pages/tunnels/TunnelDetailsPage.js.map +0 -1
- package/dist/pages/tunnels/TunnelsTab.js.map +0 -1
- package/dist/pages/tunnels/UsageTab.js.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelAuditTab.js.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelCliTab.js.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelDomainsTab.js.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelEndpointsTab.js.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelOverviewTab.js.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelSessionsTab.js.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelSettingsTab.js.map +0 -1
- package/dist/pages/tunnels/tabs/TunnelUsageTab.js.map +0 -1
- package/dist/plugin.js.map +0 -1
- package/dist/providers/AgentEventsProvider.js.map +0 -1
- package/dist/providers/QuotaExhaustedProvider.js.map +0 -1
- package/dist/providers/VibeControlsProvider.js.map +0 -1
- package/dist/services/agentRemoteTaskGates.js.map +0 -1
- package/dist/services/aiApi.js.map +0 -1
- package/dist/services/assistantApi.js.map +0 -1
- package/dist/services/createSandboxAssistantTransport.js.map +0 -1
- package/dist/services/gitopsApi.js.map +0 -1
- package/dist/services/iframeToken.js.map +0 -1
- package/dist/services/planApi.js.map +0 -1
- package/dist/services/schedulerApi.js.map +0 -1
- package/dist/shared/hooks/useField.js.map +0 -1
- package/dist/shared/hooks/useTr.js.map +0 -1
- package/dist/store/agentManagerStore.js.map +0 -1
- package/dist/store/vibeControlsStore.js.map +0 -1
- package/dist/translations/en.js.map +0 -1
- package/dist/types/assistant.js.map +0 -1
- package/dist/utils/agentApiPath.js.map +0 -1
- package/dist/utils/agentHealth.js.map +0 -1
- package/dist/utils/agentStatus.js.map +0 -1
- package/dist/utils/agentVisibility.js.map +0 -1
- package/dist/utils/aiCredits.js.map +0 -1
- package/dist/utils/aiCreditsLedger.js.map +0 -1
- package/dist/utils/aiSessionNotFound.js.map +0 -1
- package/dist/utils/assistantPrompt.js.map +0 -1
- package/dist/utils/onboardingUtils.js.map +0 -1
- package/dist/utils/pageContext.js.map +0 -1
- package/dist/utils/quotaUtils.js.map +0 -1
- package/dist/utils/randomSessionName.js.map +0 -1
- package/dist/utils/relativeTime.js.map +0 -1
- package/dist/utils/shareUrl.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ComponentForm.js","names":[],"sources":["../../../src/components/idp-components/ComponentForm.tsx"],"sourcesContent":["import { useRef, useState } from 'react';\nimport type { FC, ReactNode } from 'react';\nimport { X, ChevronDown, ChevronRight, Github } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\n\nexport interface ComponentFormData {\n name: string;\n description: string;\n type:\n | 'SERVICE'\n | 'FRONTEND'\n | 'LIBRARY'\n | 'API'\n | 'MOBILE'\n | 'DATABASE'\n | 'INFRASTRUCTURE'\n | 'CUSTOM';\n lifecycle: 'EXPERIMENTAL' | 'ACTIVE' | 'DEPRECATED' | 'END_OF_LIFE';\n language: string;\n framework: string;\n version: string;\n ownerName: string;\n tags: string[];\n repositoryUrl?: string;\n documentationUrl?: string;\n dependencies?: Array<{ name: string; version?: string; type?: string }> | null;\n sbomData?: Record<string, unknown> | null;\n}\n\nexport interface ComponentFormProps {\n isOpen: boolean;\n onClose: () => void;\n onSubmit: (data: ComponentFormData) => Promise<void>;\n initialData?: Partial<ComponentFormData>;\n title?: string;\n /** Optional extra content (e.g. a draft EntityTagPicker) rendered above the footer. */\n extraSection?: ReactNode;\n}\n\nexport const ComponentForm: FC<ComponentFormProps> = ({\n isOpen,\n onClose,\n onSubmit,\n initialData,\n title,\n extraSection,\n}) => {\n const { t } = useI18n();\n const tr = (key: string, fallback: string) => {\n const v = t(key);\n return v === key ? fallback : v;\n };\n\n const nameRef = useRef<HTMLInputElement>(null);\n const descriptionRef = useRef<HTMLTextAreaElement>(null);\n const typeRef = useRef<HTMLSelectElement>(null);\n const lifecycleRef = useRef<HTMLSelectElement>(null);\n const languageRef = useRef<HTMLInputElement>(null);\n const frameworkRef = useRef<HTMLInputElement>(null);\n const versionRef = useRef<HTMLInputElement>(null);\n const ownerNameRef = useRef<HTMLInputElement>(null);\n const tagsRef = useRef<HTMLInputElement>(null);\n const repositoryUrlRef = useRef<HTMLInputElement>(null);\n const documentationUrlRef = useRef<HTMLInputElement>(null);\n const dependenciesRef = useRef<HTMLTextAreaElement>(null);\n const sbomDataRef = useRef<HTMLTextAreaElement>(null);\n\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [fieldErrors, setFieldErrors] = useState<{\n name?: string;\n repositoryUrl?: string;\n dependencies?: string;\n sbomData?: string;\n }>({});\n const [showAdvanced, setShowAdvanced] = useState(false);\n\n if (!isOpen) return null;\n\n const handleSubmit = async () => {\n const name = nameRef.current?.value?.trim();\n if (!name) {\n setFieldErrors({ name: tr('component.nameRequired', 'Name is required') });\n setError(tr('component.fillRequired', 'Please fill in all required fields'));\n return;\n }\n\n const repoUrl = repositoryUrlRef.current?.value?.trim();\n if (!repoUrl) {\n setFieldErrors({\n repositoryUrl: tr('component.repositoryUrlRequired', 'Repository URL is required'),\n });\n setError(tr('component.fillRequired', 'Please fill in all required fields'));\n return;\n }\n if (!/^https?:\\/\\/.+\\/.+/.test(repoUrl)) {\n setFieldErrors({\n repositoryUrl: tr(\n 'component.repositoryUrlInvalid',\n 'Enter a valid repository URL (e.g. https://github.com/org/repo)'\n ),\n });\n setError(tr('component.fillRequired', 'Please fix the errors above'));\n return;\n }\n\n const newFieldErrors: {\n name?: string;\n repositoryUrl?: string;\n dependencies?: string;\n sbomData?: string;\n } = {};\n\n let parsedDependencies: ComponentFormData['dependencies'] = null;\n const depsRaw = dependenciesRef.current?.value?.trim();\n if (depsRaw) {\n try {\n parsedDependencies = JSON.parse(depsRaw);\n if (!Array.isArray(parsedDependencies)) throw new Error('Must be a JSON array');\n } catch {\n newFieldErrors.dependencies =\n 'Invalid JSON — must be an array like [{\"name\":\"react\",\"version\":\"19.0.0\"}]';\n }\n }\n\n let parsedSbom: ComponentFormData['sbomData'] = null;\n const sbomRaw = sbomDataRef.current?.value?.trim();\n if (sbomRaw) {\n try {\n parsedSbom = JSON.parse(sbomRaw);\n } catch {\n newFieldErrors.sbomData = 'Invalid JSON — paste a valid CycloneDX or SPDX document';\n }\n }\n\n if (Object.keys(newFieldErrors).length > 0) {\n setFieldErrors(newFieldErrors);\n setError(tr('component.fillRequired', 'Please fix the errors above'));\n return;\n }\n\n setFieldErrors({});\n\n const data: ComponentFormData = {\n name,\n description: descriptionRef.current?.value?.trim() || '',\n type: (typeRef.current?.value as ComponentFormData['type']) || 'SERVICE',\n lifecycle: (lifecycleRef.current?.value as ComponentFormData['lifecycle']) || 'EXPERIMENTAL',\n language: languageRef.current?.value?.trim() || '',\n framework: frameworkRef.current?.value?.trim() || '',\n version: versionRef.current?.value?.trim() || '',\n ownerName: ownerNameRef.current?.value?.trim() || '',\n tags: tagsRef.current?.value\n ? tagsRef.current.value\n .split(',')\n .map((s) => s.trim())\n .filter(Boolean)\n : [],\n repositoryUrl: repositoryUrlRef.current?.value?.trim() || undefined,\n documentationUrl: documentationUrlRef.current?.value?.trim() || undefined,\n dependencies: parsedDependencies,\n sbomData: parsedSbom,\n };\n\n setLoading(true);\n setError(null);\n try {\n await onSubmit(data);\n onClose();\n } catch (err) {\n setError(\n err instanceof Error ? err.message : tr('component.failedSave', 'Failed to save component')\n );\n } finally {\n setLoading(false);\n }\n };\n\n return (\n <div\n className=\"fixed inset-0 flex items-center justify-center z-50 p-4\"\n style={{ backgroundColor: 'rgba(0,0,0,0.55)' }}\n >\n <div className=\"bg-bg-surface rounded-lg p-6 w-full max-w-lg max-h-[90vh] overflow-y-auto\">\n <div className=\"flex items-center justify-between mb-4\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {title || tr('component.createComponent', 'Create Component')}\n </h2>\n <button\n type=\"button\"\n onClick={onClose}\n className=\"p-1 rounded hover:bg-bg-sunken transition-colors text-text-secondary\"\n >\n <X className=\"size-5\" />\n </button>\n </div>\n <div className=\"space-y-4\">\n {error && (\n <div className=\"p-3 bg-status-error-bg-subtle text-status-error-text text-sm rounded-md\">\n {error}\n </div>\n )}\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('component.nameLabel', 'Name *')}\n </label>\n <input\n aria-label=\"control\"\n ref={nameRef}\n type=\"text\"\n defaultValue={initialData?.name || ''}\n placeholder={tr('component.namePlaceholder', 'my-service')}\n onChange={() =>\n fieldErrors.name && setFieldErrors((e) => ({ ...e, name: undefined }))\n }\n className={`w-full px-3 py-2 bg-bg-sunken border rounded-md text-text-primary placeholder:text-text-placeholder ${fieldErrors.name ? 'border-status-error-border' : 'border-border-default'}`}\n />\n {fieldErrors.name && (\n <p className=\"mt-1 text-xs text-status-error-text\">{fieldErrors.name}</p>\n )}\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('component.descriptionLabel', 'Description')}\n </label>\n <textarea\n aria-label=\"control\"\n ref={descriptionRef}\n defaultValue={initialData?.description || ''}\n placeholder={tr('component.descriptionPlaceholder', 'Describe this component...')}\n rows={3}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder resize-none\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n <span className=\"flex items-center gap-1.5\">\n <Github className=\"size-3.5\" />\n {tr('component.repositoryUrl', 'Repository URL')}{' '}\n <span className=\"text-status-error-text\">*</span>\n </span>\n </label>\n <input\n aria-label=\"https://github.com/org/repo\"\n ref={repositoryUrlRef}\n type=\"url\"\n defaultValue={initialData?.repositoryUrl || ''}\n placeholder=\"https://github.com/org/repo\"\n onChange={() =>\n fieldErrors.repositoryUrl &&\n setFieldErrors((e) => ({ ...e, repositoryUrl: undefined }))\n }\n className={`w-full px-3 py-2 bg-bg-sunken border rounded-md text-text-primary placeholder:text-text-placeholder text-sm ${fieldErrors.repositoryUrl ? 'border-status-error-border' : 'border-border-default'}`}\n />\n {fieldErrors.repositoryUrl && (\n <p className=\"mt-1 text-xs text-status-error-text\">{fieldErrors.repositoryUrl}</p>\n )}\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('component.typeLabel', 'Type')}\n </label>\n <select\n ref={typeRef}\n defaultValue={initialData?.type || 'SERVICE'}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary\"\n >\n <option value=\"SERVICE\">{tr('component.typeService', 'Service')}</option>\n <option value=\"FRONTEND\">{tr('component.typeFrontend', 'Frontend')}</option>\n <option value=\"LIBRARY\">{tr('component.typeLibrary', 'Library')}</option>\n <option value=\"API\">{tr('component.typeApi', 'API')}</option>\n <option value=\"MOBILE\">{tr('component.typeMobile', 'Mobile')}</option>\n <option value=\"DATABASE\">{tr('component.typeDatabase', 'Database')}</option>\n <option value=\"INFRASTRUCTURE\">\n {tr('component.typeInfrastructure', 'Infrastructure')}\n </option>\n <option value=\"CUSTOM\">{tr('component.typeCustom', 'Custom')}</option>\n </select>\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('component.lifecycleLabel', 'Lifecycle')}\n </label>\n <select\n ref={lifecycleRef}\n defaultValue={initialData?.lifecycle || 'EXPERIMENTAL'}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary\"\n >\n <option value=\"EXPERIMENTAL\">\n {tr('component.lifecycleExperimental', 'Experimental')}\n </option>\n <option value=\"ACTIVE\">{tr('component.lifecycleActive', 'Active')}</option>\n <option value=\"DEPRECATED\">\n {tr('component.lifecycleDeprecated', 'Deprecated')}\n </option>\n <option value=\"END_OF_LIFE\">\n {tr('component.lifecycleEndOfLife', 'End of Life')}\n </option>\n </select>\n </div>\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('component.languageLabel', 'Language')}\n </label>\n <input\n aria-label=\"control\"\n ref={languageRef}\n type=\"text\"\n defaultValue={initialData?.language || ''}\n placeholder={tr('component.languagePlaceholder', 'TypeScript')}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('component.frameworkLabel', 'Framework')}\n </label>\n <input\n aria-label=\"control\"\n ref={frameworkRef}\n type=\"text\"\n defaultValue={initialData?.framework || ''}\n placeholder={tr('component.frameworkPlaceholder', 'React')}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder\"\n />\n </div>\n </div>\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('component.versionLabel', 'Version')}\n </label>\n <input\n aria-label=\"control\"\n ref={versionRef}\n type=\"text\"\n defaultValue={initialData?.version || ''}\n placeholder={tr('component.versionPlaceholder', '1.0.0')}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('component.ownerLabel', 'Owner')}\n </label>\n <input\n aria-label=\"control\"\n ref={ownerNameRef}\n type=\"text\"\n defaultValue={initialData?.ownerName || ''}\n placeholder={tr('component.ownerPlaceholder', 'team-name')}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder\"\n />\n </div>\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('component.tagsLabel', 'Tags (comma-separated)')}\n </label>\n <input\n aria-label=\"control\"\n ref={tagsRef}\n type=\"text\"\n defaultValue={initialData?.tags?.join(', ') || ''}\n placeholder={tr('component.tagsPlaceholder', 'backend, api, graphql')}\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder\"\n />\n </div>\n\n {/* Advanced section */}\n <div className=\"border border-border-default rounded-md overflow-hidden\">\n <button\n type=\"button\"\n onClick={() => setShowAdvanced((v) => !v)}\n className=\"w-full flex items-center justify-between px-3 py-2 bg-bg-sunken hover:bg-bg-sunken/80 transition-colors text-sm font-medium text-text-secondary\"\n >\n <span>{tr('component.advancedSection', 'Advanced (Docs, Dependencies, SBOM)')}</span>\n {showAdvanced ? (\n <ChevronDown className=\"size-4\" />\n ) : (\n <ChevronRight className=\"size-4\" />\n )}\n </button>\n {showAdvanced && (\n <div className=\"p-3 space-y-4 border-t border-border-default\">\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('component.documentationUrl', 'Documentation URL')}\n </label>\n <input\n aria-label=\"https://docs.example.com\"\n ref={documentationUrlRef}\n type=\"url\"\n defaultValue={initialData?.documentationUrl || ''}\n placeholder=\"https://docs.example.com\"\n className=\"w-full px-3 py-2 bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder text-sm\"\n />\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('component.dependencies', 'Dependencies (JSON array)')}\n </label>\n <textarea\n aria-label=\"control\"\n ref={dependenciesRef}\n rows={4}\n defaultValue={\n initialData?.dependencies\n ? JSON.stringify(initialData.dependencies, null, 2)\n : ''\n }\n placeholder={\n '[\\n {\"name\": \"react\", \"version\": \"19.0.0\", \"type\": \"runtime\"},\\n {\"name\": \"typescript\", \"version\": \"5.9.0\", \"type\": \"dev\"}\\n]'\n }\n className={`w-full px-3 py-2 bg-bg-sunken border rounded-md text-text-primary placeholder:text-text-muted font-mono text-xs resize-y ${fieldErrors.dependencies ? 'border-status-error-border' : 'border-border-default'}`}\n />\n {fieldErrors.dependencies && (\n <p className=\"mt-1 text-xs text-status-error-text\">\n {fieldErrors.dependencies}\n </p>\n )}\n <p className=\"mt-1 text-xs text-text-muted\">\n {tr(\n 'component.dependenciesHint',\n 'Used to build the Dependency Graph in Catalogs. Each entry: {name, version, type}.'\n )}\n </p>\n </div>\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('component.sbomData', 'SBOM Data (CycloneDX / SPDX JSON)')}\n </label>\n <textarea\n aria-label=\"control\"\n ref={sbomDataRef}\n rows={5}\n defaultValue={\n initialData?.sbomData ? JSON.stringify(initialData.sbomData, null, 2) : ''\n }\n placeholder={\n '{\\n \"bomFormat\": \"CycloneDX\",\\n \"specVersion\": \"1.4\",\\n \"components\": [...]\\n}'\n }\n className={`w-full px-3 py-2 bg-bg-sunken border rounded-md text-text-primary placeholder:text-text-muted font-mono text-xs resize-y ${fieldErrors.sbomData ? 'border-status-error-border' : 'border-border-default'}`}\n />\n {fieldErrors.sbomData && (\n <p className=\"mt-1 text-xs text-status-error-text\">{fieldErrors.sbomData}</p>\n )}\n <p className=\"mt-1 text-xs text-text-muted\">\n {tr(\n 'component.sbomDataHint',\n 'Paste output from syft, trivy, or npm sbom. Aggregated per-catalog in the SBOM tab.'\n )}\n </p>\n </div>\n </div>\n )}\n </div>\n </div>\n {extraSection && (\n <div className=\"mt-4 border-t border-border-default pt-4\">{extraSection}</div>\n )}\n <div className=\"flex flex-col sm:flex-row justify-end gap-3 mt-6\">\n <button\n type=\"button\"\n onClick={onClose}\n disabled={loading}\n className=\"px-4 py-2 text-text-primary hover:bg-bg-sunken rounded-md transition-colors disabled:opacity-50\"\n >\n {tr('common.cancel', 'Cancel')}\n </button>\n <button\n type=\"button\"\n onClick={handleSubmit}\n disabled={loading}\n className=\"px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50\"\n >\n {loading\n ? tr('common.saving', 'Saving...')\n : initialData?.name\n ? tr('common.save', 'Save')\n : tr('component.createComponent', 'Create Component')}\n </button>\n </div>\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DependencyGraphTab.js","names":[],"sources":["../../../src/components/idp-components/DependencyGraphTab.tsx"],"sourcesContent":["/**\n * DependencyGraphTab — React Flow visualization of a component's dependency graph.\n *\n * Root component node sits on the RIGHT; dependency nodes stack on the LEFT.\n * Edges flow LEFT → RIGHT with type-specific styling.\n * A compact table below the canvas lists all dependencies.\n */\n\nimport { useMemo } from 'react';\nimport { PackageOpen } from 'lucide-react';\nimport '@xyflow/react/dist/style.css';\nimport {\n ReactFlow,\n Background,\n Controls,\n useNodesState,\n useEdgesState,\n type Node,\n type Edge,\n MarkerType,\n BackgroundVariant,\n} from '@xyflow/react';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface DependencyGraphTabProps {\n componentName: string;\n componentType: string;\n dependencies: Array<{ name: string; version?: string | null; type?: string | null }> | null;\n}\n\ntype DepType = 'runtime' | 'dev' | 'peer' | 'optional' | null;\n\nconst MAX_GRAPH_DEPS = 40;\n\n// ---------------------------------------------------------------------------\n// Inline style helpers (React Flow nodes render in a portal — no Tailwind)\n// ---------------------------------------------------------------------------\n\nfunction depNodeStyle(type: DepType): React.CSSProperties {\n switch (type) {\n case 'peer':\n return {\n backgroundColor: 'var(--color-status-info-bg)',\n border: '1px solid var(--color-status-info-border)',\n color: 'var(--color-text-primary)',\n };\n case 'dev':\n return {\n backgroundColor: 'var(--color-bg-sunken)',\n border: '1px dashed var(--color-border-default)',\n color: 'var(--color-text-secondary)',\n };\n case 'optional':\n return {\n backgroundColor: 'var(--color-bg-sunken)',\n border: '1px solid var(--color-border-default)',\n color: 'var(--color-text-primary)',\n opacity: 0.7,\n };\n default:\n // runtime or null\n return {\n backgroundColor: 'var(--color-bg-sunken)',\n border: '1px solid var(--color-border-default)',\n color: 'var(--color-text-primary)',\n };\n }\n}\n\nfunction depTypeBadgeStyle(type: DepType): React.CSSProperties {\n const base: React.CSSProperties = {\n display: 'inline-block',\n fontSize: 10,\n fontWeight: 600,\n borderRadius: 4,\n padding: '1px 5px',\n marginLeft: 4,\n textTransform: 'uppercase',\n letterSpacing: '0.04em',\n };\n switch (type) {\n case 'peer':\n return {\n ...base,\n backgroundColor: 'var(--color-status-info-border)',\n color: 'var(--color-text-inverse)',\n };\n case 'dev':\n return {\n ...base,\n backgroundColor: 'var(--color-border-strong)',\n color: 'var(--color-text-inverse)',\n };\n case 'optional':\n return {\n ...base,\n backgroundColor: 'var(--color-border-default)',\n color: 'var(--color-text-secondary)',\n };\n default:\n return {\n ...base,\n backgroundColor: 'var(--color-action-primary-bg)',\n color: 'var(--color-action-primary-text)',\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Label renderers (ReactNode — React Flow default node accepts ReactNode label)\n// ---------------------------------------------------------------------------\n\nfunction makeDepLabel(dep: {\n name: string;\n version?: string | null;\n type?: string | null;\n}): React.ReactNode {\n const depType = (dep.type ?? null) as DepType;\n return (\n <div style={{ lineHeight: 1.4 }}>\n <div\n style={{\n fontWeight: 600,\n maxWidth: 180,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }}\n >\n {dep.name}\n {depType && <span style={depTypeBadgeStyle(depType)}>{depType}</span>}\n </div>\n {dep.version && (\n <div style={{ fontSize: 10, color: 'var(--color-text-muted)', marginTop: 2 }}>\n {dep.version}\n </div>\n )}\n </div>\n );\n}\n\nfunction makeRootLabel(componentName: string, componentType: string): React.ReactNode {\n return (\n <div style={{ lineHeight: 1.4, textAlign: 'center' }}>\n <div style={{ fontWeight: 700, fontSize: 13 }}>{componentName}</div>\n <div\n style={{\n fontSize: 10,\n marginTop: 3,\n backgroundColor: 'var(--color-accent-soft)',\n borderRadius: 4,\n padding: '1px 6px',\n display: 'inline-block',\n letterSpacing: '0.05em',\n textTransform: 'uppercase',\n }}\n >\n {componentType}\n </div>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Graph element builder\n// ---------------------------------------------------------------------------\n\nfunction buildGraphElements(\n componentName: string,\n componentType: string,\n deps: Array<{ name: string; version?: string | null; type?: string | null }>\n): { nodes: Node[]; edges: Edge[] } {\n const visible = deps.slice(0, MAX_GRAPH_DEPS);\n const totalHeight = Math.max(visible.length * 80, 80);\n const rootY = totalHeight / 2 - 24;\n\n const nodes: Node[] = [];\n const edges: Edge[] = [];\n\n // Root node\n nodes.push({\n id: 'root',\n position: { x: 520, y: rootY },\n data: { label: makeRootLabel(componentName, componentType) },\n style: {\n backgroundColor: 'var(--color-action-primary-bg)',\n color: 'var(--color-action-primary-text)',\n borderRadius: 10,\n padding: '10px 16px',\n width: 160,\n fontWeight: 700,\n fontSize: 13,\n boxShadow: 'var(--shadow-elevation-2)',\n border: 'none',\n textAlign: 'center',\n },\n });\n\n // Dependency nodes and edges\n visible.forEach((dep, i) => {\n const depType = (dep.type ?? null) as DepType;\n const nodeId = `dep-${i}`;\n const isRuntime = !depType || depType === 'runtime';\n const isDev = depType === 'dev';\n\n nodes.push({\n id: nodeId,\n position: { x: 40, y: 20 + i * 80 },\n data: { label: makeDepLabel(dep) },\n style: {\n ...depNodeStyle(depType),\n borderRadius: 8,\n padding: '8px 12px',\n width: 220,\n fontSize: 12,\n },\n });\n\n edges.push({\n id: `edge-${i}`,\n source: nodeId,\n target: 'root',\n animated: isRuntime,\n markerEnd: { type: MarkerType.ArrowClosed },\n style: {\n stroke: 'var(--color-border-strong)',\n strokeWidth: 1.5,\n ...(isDev ? { strokeDasharray: '4 2' } : {}),\n },\n });\n });\n\n return { nodes, edges };\n}\n\n// ---------------------------------------------------------------------------\n// Inner React Flow component (needs its own hook calls — can't be conditional)\n// ---------------------------------------------------------------------------\n\ninterface DependencyFlowProps {\n componentName: string;\n componentType: string;\n deps: Array<{ name: string; version?: string | null; type?: string | null }>;\n canvasHeight: number;\n}\n\nfunction DependencyFlow({ componentName, componentType, deps, canvasHeight }: DependencyFlowProps) {\n const { nodes: initialNodes, edges: initialEdges } = useMemo(\n () => buildGraphElements(componentName, componentType, deps),\n [componentName, componentType, deps]\n );\n\n const [nodes, , onNodesChange] = useNodesState(initialNodes);\n const [edges, , onEdgesChange] = useEdgesState(initialEdges);\n\n return (\n <div\n className=\"w-full rounded-lg border border-border-default overflow-hidden bg-bg-surface\"\n style={{ height: canvasHeight }}\n >\n <ReactFlow\n nodes={nodes}\n edges={edges}\n onNodesChange={onNodesChange}\n onEdgesChange={onEdgesChange}\n nodesDraggable={false}\n fitView\n fitViewOptions={{ padding: 0.15 }}\n minZoom={0.2}\n maxZoom={2}\n panOnDrag\n proOptions={{ hideAttribution: true }}\n >\n <Background\n variant={BackgroundVariant.Dots}\n gap={20}\n size={1}\n className=\"!fill-text-tertiary/10\"\n />\n <Controls\n showInteractive={false}\n style={{\n background: 'var(--color-bg-primary)',\n border: '1px solid var(--color-border-default)',\n borderRadius: 8,\n boxShadow: '0 1px 4px var(--color-border-default)',\n }}\n className=\"[&_button]:!bg-[var(--color-bg-primary)] [&_button]:!border-[var(--color-border-default)] [&_button]:!fill-[var(--color-text-secondary)] [&_button:hover]:!bg-[var(--color-bg-sunken)]\"\n />\n </ReactFlow>\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Main export\n// ---------------------------------------------------------------------------\n\nexport function DependencyGraphTab({\n componentName,\n componentType,\n dependencies,\n}: DependencyGraphTabProps) {\n const deps = dependencies ?? [];\n const visibleCount = Math.min(deps.length, MAX_GRAPH_DEPS);\n const hiddenCount = deps.length - visibleCount;\n const canvasHeight = Math.max(400, Math.min(deps.length * 80 + 100, 600));\n\n if (deps.length === 0) {\n return (\n <div className=\"flex flex-col items-center justify-center py-20 text-center gap-4\">\n <PackageOpen className=\"size-10 text-text-muted\" />\n <p className=\"text-sm text-text-secondary max-w-xs\">\n No dependencies recorded. Add them via Settings.\n </p>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-6\">\n {/* Graph canvas */}\n <div>\n {hiddenCount > 0 && (\n <p className=\"text-xs text-text-muted mb-2 text-right\">\n Showing {visibleCount} of {deps.length} dependencies (+{hiddenCount} more in table\n below)\n </p>\n )}\n <DependencyFlow\n componentName={componentName}\n componentType={componentType}\n deps={deps}\n canvasHeight={canvasHeight}\n />\n </div>\n\n {/* All-dependencies table */}\n <div>\n <h3 className=\"text-sm font-semibold text-text-primary mb-3\">\n All Dependencies ({deps.length})\n </h3>\n <div className=\"overflow-x-auto rounded-lg border border-border-default\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"bg-bg-sunken border-b border-border-default\">\n <th className=\"px-4 py-2.5 text-left font-medium text-text-secondary\">Name</th>\n <th className=\"px-4 py-2.5 text-left font-medium text-text-secondary\">Version</th>\n <th className=\"px-4 py-2.5 text-left font-medium text-text-secondary\">Type</th>\n </tr>\n </thead>\n <tbody>\n {deps.map((dep, i) => (\n <tr\n key={`${dep.name}-${i}`}\n className=\"border-b border-border-default last:border-0 hover:bg-bg-sunken/50 transition-colors\"\n >\n <td className=\"px-4 py-2.5 font-mono text-xs text-text-primary\">{dep.name}</td>\n <td className=\"px-4 py-2.5 text-text-secondary\">{dep.version ?? '—'}</td>\n <td className=\"px-4 py-2.5\">\n {dep.type ? (\n <span className=\"inline-flex items-center px-2 py-0.5 text-xs font-medium rounded bg-bg-sunken text-text-secondary\">\n {dep.type}\n </span>\n ) : (\n <span className=\"text-text-muted\">runtime</span>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LogViewer.js","names":[],"sources":["../../../src/components/logs/LogViewer.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState, type FC } from 'react';\nimport { Download, Pause, Play, RefreshCw, Search, Trash2 } from 'lucide-react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useVibecontrolsAgentLogStreamSubscription } from '@/generated/wspace-operations';\n\ninterface LogEntry {\n timestamp: string;\n level: 'debug' | 'info' | 'warn' | 'error';\n source: string;\n message: string;\n metadata?: Record<string, unknown>;\n}\n\ninterface LogViewerProps {\n agentId: string;\n /** Canonical CLI profile name on the remote agent. */\n profile: string;\n level?: 'debug' | 'info' | 'warn' | 'error';\n source?: string;\n maxEntries?: number;\n className?: string;\n compact?: boolean;\n}\n\nfunction getEntryKey(entry: LogEntry): string {\n return `${entry.timestamp}:${entry.level}:${entry.source}:${entry.message}`;\n}\n\nconst LEVEL_COLORS: Record<string, string> = {\n debug: 'text-text-tertiary',\n info: 'text-status-info-text',\n warn: 'text-status-warning-text',\n error: 'text-status-error-text',\n};\n\nconst LEVEL_BG: Record<string, string> = {\n debug: 'bg-bg-sunken',\n info: 'bg-status-info-bg-subtle',\n warn: 'bg-status-warning-bg-subtle',\n error: 'bg-status-error-bg-subtle',\n};\n\nexport const LogViewer: FC<LogViewerProps> = ({\n agentId,\n profile,\n level: initialLevel = 'info',\n source: initialSource,\n maxEntries = 1000,\n className = '',\n compact = false,\n}) => {\n const { t } = useI18n();\n const [entries, setEntries] = useState<LogEntry[]>([]);\n const [paused, setPaused] = useState(false);\n const [level, setLevel] = useState(initialLevel);\n const [searchQuery, setSearchQuery] = useState('');\n const [errorMessage, setErrorMessage] = useState<string | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const autoScrollRef = useRef(true);\n\n // GraphQL subscription — the svc polls the agent server-side every\n // ~2s and pushes only new entries here. Replaces the previous client\n // setInterval + fetch, which was firing infinitely because\n // `tr` recreated on every render mutated fetchLogs' identity, which\n // re-ran the useEffect, which re-armed the interval, which called\n // fetchLogs immediately. The subscription has no client polling at\n // all — Apollo opens one WS, the svc owns the cadence.\n const {\n data: streamData,\n error: subscriptionError,\n loading: streamLoading,\n } = useVibecontrolsAgentLogStreamSubscription({\n variables: {\n agentId,\n profile,\n level,\n source: initialSource,\n },\n skip: !agentId || paused,\n shouldResubscribe: true,\n });\n\n const tr = (key: string, fallback: string) => {\n const value = t(key);\n return value === key ? fallback : value;\n };\n\n const handleScroll = useCallback(() => {\n if (!containerRef.current) {\n return;\n }\n\n const element = containerRef.current;\n autoScrollRef.current = element.scrollHeight - element.scrollTop - element.clientHeight < 50;\n }, []);\n\n const scrollToBottom = useCallback(() => {\n if (containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight;\n }\n }, []);\n\n // Drain incoming subscription batches into the entries list. Each\n // payload is the NEW entries since the last server-side tick; merge\n // by key so re-deliveries (e.g. on reconnect backfill) don't dupe.\n useEffect(() => {\n const batch = streamData?.vibecontrolsAgentLogStream;\n if (!batch || batch.length === 0) return;\n const incoming: LogEntry[] = batch.map(\n (row: {\n timestamp: string;\n level: string;\n source?: string | null;\n message: string;\n metadataJson?: string | null;\n }) => {\n let metadata: Record<string, unknown> | undefined;\n if (row.metadataJson) {\n try {\n metadata = JSON.parse(row.metadataJson) as Record<string, unknown>;\n } catch {\n metadata = undefined;\n }\n }\n return {\n timestamp: row.timestamp,\n level: (row.level as LogEntry['level']) ?? 'info',\n source: row.source ?? '',\n message: row.message,\n metadata,\n };\n }\n );\n setEntries((current) => {\n const merged = new Map<string, LogEntry>();\n for (const entry of current) merged.set(getEntryKey(entry), entry);\n for (const entry of incoming) merged.set(getEntryKey(entry), entry);\n return Array.from(merged.values())\n .sort((a, b) => new Date(a.timestamp).getTime() - new Date(b.timestamp).getTime())\n .slice(-maxEntries);\n });\n setErrorMessage(null);\n if (autoScrollRef.current) {\n requestAnimationFrame(() => {\n if (containerRef.current) {\n containerRef.current.scrollTop = containerRef.current.scrollHeight;\n }\n });\n }\n }, [streamData, maxEntries]);\n\n useEffect(() => {\n if (subscriptionError) {\n setErrorMessage(subscriptionError.message);\n }\n }, [subscriptionError]);\n\n const connected = !subscriptionError && !streamLoading;\n const isRefreshing = streamLoading;\n\n // Reset the entries list when the agent / filter set actually changes.\n useEffect(() => {\n setEntries([]);\n setErrorMessage(null);\n }, [agentId, profile, level, initialSource]);\n\n // Manual refresh: no-op since the subscription pushes continuously.\n // Kept as a callback so the existing \"Refresh\" button doesn't have to\n // be conditionally hidden. Wraps in setEntries([]) so the operator's\n // intent of \"give me a fresh window\" is honoured — the next push\n // backfills.\n const fetchLogs = useCallback(() => {\n setEntries([]);\n }, []);\n\n const filteredEntries = searchQuery\n ? entries.filter(\n (entry) =>\n entry.message.toLowerCase().includes(searchQuery.toLowerCase()) ||\n entry.source.toLowerCase().includes(searchQuery.toLowerCase())\n )\n : entries;\n\n const handleClear = () => setEntries([]);\n\n const handleExport = () => {\n const blob = new Blob([filteredEntries.map((entry) => JSON.stringify(entry)).join('\\n')], {\n type: 'application/x-ndjson',\n });\n const url = URL.createObjectURL(blob);\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = `agent-logs-${new Date().toISOString().slice(0, 19).replace(/:/g, '-')}.jsonl`;\n anchor.click();\n URL.revokeObjectURL(url);\n };\n\n const formatTime = (timestamp: string) => {\n try {\n const date = new Date(timestamp);\n return (\n date.toLocaleTimeString('en-US', {\n hour12: false,\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n }) +\n '.' +\n String(date.getMilliseconds()).padStart(3, '0')\n );\n } catch {\n return timestamp;\n }\n };\n\n return (\n <div\n className={`flex flex-col overflow-hidden rounded-lg border border-border-default bg-bg-elevated ${className}`}\n >\n <div className=\"flex flex-wrap items-center gap-2 border-b border-border-default bg-bg-sunken px-3 py-2\">\n <div className=\"mr-2 flex items-center gap-1.5\">\n <div\n className={`size-2 rounded-full ${connected ? 'animate-pulse bg-status-success-bg' : 'bg-status-error-bg'}`}\n />\n <span className=\"text-xs text-text-tertiary\">\n {connected ? tr('logs.live', 'Live') : tr('logs.disconnected', 'Disconnected')}\n </span>\n </div>\n\n <select\n value={level}\n onChange={(event) => setLevel(event.target.value as LogEntry['level'])}\n className=\"rounded border border-border-subtle bg-bg-sunken px-2 py-1 text-xs text-text-primary\"\n aria-label={tr('logs.levelFilter', 'Log level filter')}\n >\n <option value=\"debug\">DEBUG+</option>\n <option value=\"info\">INFO+</option>\n <option value=\"warn\">WARN+</option>\n <option value=\"error\">ERROR</option>\n </select>\n\n <div className=\"relative min-w-[120px] max-w-xs flex-1\">\n <Search\n size={12}\n className=\"absolute left-2 top-1/2 -translate-y-1/2 text-text-tertiary\"\n />\n <input\n aria-label=\"control\"\n type=\"text\"\n placeholder={tr('logs.filterLogs', 'Filter logs...')}\n value={searchQuery}\n onChange={(event) => setSearchQuery(event.target.value)}\n className=\"w-full rounded border border-border-subtle bg-bg-sunken py-1 pl-6 pr-2 text-xs text-text-primary placeholder:text-text-tertiary\"\n />\n </div>\n\n <div className=\"ml-auto flex items-center gap-1\">\n <span className=\"text-xs text-text-tertiary\">\n {filteredEntries.length} {tr('logs.entries', 'entries')}\n </span>\n <button\n type=\"button\"\n onClick={() => void fetchLogs()}\n disabled={isRefreshing}\n className=\"rounded p-1 text-text-tertiary transition-colors hover:bg-bg-sunken disabled:opacity-50\"\n title={tr('common.refresh', 'Refresh')}\n >\n <RefreshCw size={14} className={isRefreshing ? 'animate-spin' : ''} />\n </button>\n <button\n type=\"button\"\n onClick={() => setPaused((current) => !current)}\n className={`rounded p-1 transition-colors hover:bg-bg-sunken ${paused ? 'text-status-warning-text' : 'text-text-tertiary'}`}\n title={paused ? tr('logs.resume', 'Resume') : tr('logs.pause', 'Pause')}\n >\n {paused ? <Play size={14} /> : <Pause size={14} />}\n </button>\n <button\n type=\"button\"\n onClick={handleClear}\n className=\"rounded p-1 text-text-tertiary transition-colors hover:bg-bg-sunken\"\n title={tr('logs.clear', 'Clear')}\n >\n <Trash2 size={14} />\n </button>\n <button\n type=\"button\"\n onClick={handleExport}\n className=\"rounded p-1 text-text-tertiary transition-colors hover:bg-bg-sunken\"\n title={tr('logs.export', 'Export')}\n >\n <Download size={14} />\n </button>\n </div>\n </div>\n\n {errorMessage ? (\n <div\n role=\"alert\"\n className=\"border-b border-border-default bg-status-error-bg-subtle px-3 py-2 text-xs text-status-error-text\"\n >\n {errorMessage}\n </div>\n ) : null}\n\n <div\n ref={containerRef}\n onScroll={handleScroll}\n className={`overflow-y-auto font-mono text-xs leading-relaxed ${compact ? 'max-h-[300px]' : 'min-h-[400px] flex-1'}`}\n style={{ maxHeight: compact ? '300px' : undefined }}\n >\n {filteredEntries.length === 0 ? (\n <div className=\"flex h-full min-h-[200px] items-center justify-center text-text-tertiary\">\n {!agentId\n ? tr('logs.connectToAgent', 'Connect to an agent to view logs')\n : errorMessage\n ? `${tr('logs.subscriptionError', 'Log stream error')}: ${errorMessage}`\n : streamLoading\n ? tr('logs.connecting', 'Connecting to log stream…')\n : tr('logs.waitingForEntries', 'Waiting for log entries…')}\n </div>\n ) : (\n filteredEntries.map((entry, index) => (\n <div\n key={`${entry.timestamp}-${entry.source}-${index}`}\n className={`flex gap-2 border-b border-border-default/30 px-3 py-0.5 hover:bg-bg-sunken ${LEVEL_BG[entry.level] ?? ''}`}\n >\n <span className=\"w-[85px] shrink-0 text-text-tertiary\">\n {formatTime(entry.timestamp)}\n </span>\n <span\n className={`w-[42px] shrink-0 uppercase font-semibold ${LEVEL_COLORS[entry.level] ?? 'text-text-primary'}`}\n >\n {entry.level}\n </span>\n <span\n className=\"w-[100px] shrink-0 truncate text-text-secondary\"\n title={entry.source}\n >\n [{entry.source}]\n </span>\n <span className=\"flex-1 break-all text-text-primary\">\n {entry.message}\n {entry.metadata && Object.keys(entry.metadata).length > 0 ? (\n <span className=\"ml-2 text-text-tertiary\">{JSON.stringify(entry.metadata)}</span>\n ) : null}\n </span>\n </div>\n ))\n )}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NoteCard.js","names":[],"sources":["../../../src/components/notes/NoteCard.tsx"],"sourcesContent":["import { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport {\n FileText,\n Pin,\n Tag,\n MoreVertical,\n Edit,\n Trash2,\n PinOff,\n Lock,\n Globe,\n Share2,\n} from 'lucide-react';\nimport { useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport type { Note } from './types';\n\ninterface NoteCardProps {\n note: Note;\n onOpen?: (note: Note) => void;\n onEdit?: (note: Note) => void;\n onDelete?: (note: Note) => void;\n onPin?: (note: Note) => void;\n onUnpin?: (note: Note) => void;\n /**\n * Generic-sharing entry point: opens the full Share dialog (users / link /\n * vibe). Provided only when the caller has share permission + the\n * `vibecontrols.sharing.note` flag is on.\n *\n * This supersedes the old PRIVATE↔WORKSPACE visibility toggle — see\n * `vibecontrols-specs/business/production/visibility-feature-audit-boff-3036.md`.\n * Visibility on a note is now exclusively modelled through share grants; the\n * legacy binary toggle has been removed to avoid two parallel sharing models.\n */\n onShareAccess?: (note: Note) => void;\n}\n\nexport function NoteCard({\n note,\n onOpen,\n onEdit,\n onDelete,\n onPin,\n onUnpin,\n onShareAccess,\n}: NoteCardProps) {\n const { t } = useI18n();\n const tr = (key: string, fallback: string) => {\n const v = t(key);\n return v === key ? fallback : v;\n };\n const [showMenu, setShowMenu] = useState(false);\n\n const formatDate = (dateStr: string) => {\n return new Date(dateStr).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n };\n\n const getPreview = (content: string) => {\n // Remove markdown headers and get first 100 chars\n const text = content\n .replace(/^#+\\s+/gm, '')\n .replace(/\\n/g, ' ')\n .trim();\n return text.length > 100 ? text.slice(0, 100) + '...' : text;\n };\n\n return (\n <motion.div\n whileHover={{ transition: { duration: 0.15, ease: [0.4, 0, 0.2, 1] } }}\n whileTap={{ scale: 0.98 }}\n className=\"bg-bg-surface border border-border-default rounded-lg p-4 hover:border-border-strong hover:shadow-md transition-all cursor-pointer\"\n onClick={() => onOpen?.(note)}\n >\n <div className=\"flex items-start justify-between gap-3\">\n <div className=\"flex items-start gap-3 min-w-0\">\n <div className=\"flex-shrink-0 size-10 rounded-lg bg-status-warning-bg flex items-center justify-center\">\n <FileText className=\"size-5 text-status-warning-text\" />\n </div>\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-2\">\n <h3 className=\"font-semibold text-text-primary truncate\">{note.title}</h3>\n {note.isPinned && <Pin className=\"size-4 text-status-warning-text flex-shrink-0\" />}\n {note.visibility === 'PRIVATE' ? (\n <span title=\"Private note\">\n <Lock className=\"size-3.5 text-text-muted flex-shrink-0\" />\n </span>\n ) : (\n <span title=\"Workspace note\">\n <Globe className=\"size-3.5 text-text-muted flex-shrink-0\" />\n </span>\n )}\n </div>\n <p className=\"text-xs text-text-secondary\">{formatDate(note.updatedAt)}</p>\n </div>\n </div>\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n setShowMenu(!showMenu);\n }}\n className=\"p-1 rounded hover:bg-bg-sunken transition-colors\"\n >\n <MoreVertical className=\"size-4 text-text-secondary\" />\n </button>\n <AnimatePresence>\n {showMenu && (\n <motion.div\n initial={{ opacity: 0, scale: 0.95, y: -4 }}\n animate={{ opacity: 1, scale: 1, y: 0 }}\n exit={{ opacity: 0, scale: 0.95, y: -4 }}\n transition={{ duration: 0.15 }}\n className=\"absolute right-0 mt-1 w-36 bg-bg-surface border border-border-default rounded-lg shadow-lg z-10\"\n >\n {onEdit && (\n <motion.button\n whileTap={{ scale: 0.97 }}\n onClick={(e) => {\n e.stopPropagation();\n onEdit(note);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken rounded-t-lg\"\n >\n <Edit className=\"size-4\" />\n Edit\n </motion.button>\n )}\n {onShareAccess && (\n <motion.button\n whileTap={{ scale: 0.97 }}\n data-testid=\"note-share-access\"\n onClick={(e) => {\n e.stopPropagation();\n onShareAccess(note);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken\"\n >\n <Share2 className=\"size-4\" />\n Share access…\n </motion.button>\n )}\n {note.isPinned && onUnpin && (\n <motion.button\n whileTap={{ scale: 0.97 }}\n onClick={(e) => {\n e.stopPropagation();\n onUnpin(note);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken\"\n >\n <PinOff className=\"size-4\" />\n Unpin\n </motion.button>\n )}\n {!note.isPinned && onPin && (\n <motion.button\n whileTap={{ scale: 0.97 }}\n onClick={(e) => {\n e.stopPropagation();\n onPin(note);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken\"\n >\n <Pin className=\"size-4\" />\n Pin\n </motion.button>\n )}\n {onDelete && (\n <motion.button\n whileTap={{ scale: 0.97 }}\n onClick={(e) => {\n e.stopPropagation();\n onDelete(note);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-status-error-text hover:bg-bg-sunken rounded-b-lg\"\n >\n <Trash2 className=\"size-4\" />\n Delete\n </motion.button>\n )}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </div>\n\n <p className=\"mt-3 text-sm text-text-secondary line-clamp-2\">{getPreview(note.content)}</p>\n\n {/* Render tagAssignments if available, otherwise fall back to legacy string tags */}\n {note.tagAssignments && note.tagAssignments.length > 0 ? (\n <div className=\"mt-3 flex flex-wrap gap-1\">\n {note.tagAssignments.slice(0, 3).map((assignment) => (\n <span\n key={assignment.id}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 text-xs bg-[var(--color-accent-soft)] text-text-primary rounded\"\n style={\n assignment.tag?.color\n ? { borderLeft: `3px solid ${assignment.tag.color}` }\n : undefined\n }\n >\n <Tag className=\"size-3\" />\n {assignment.tag?.label ?? assignment.tagId.slice(0, 8)}\n </span>\n ))}\n {note.tagAssignments.length > 3 && (\n <span className=\"px-2 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded\">\n +{note.tagAssignments.length - 3}\n </span>\n )}\n </div>\n ) : note.tags && note.tags.length > 0 ? (\n <div className=\"mt-3 flex flex-wrap gap-1\">\n {note.tags.slice(0, 3).map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded\"\n >\n <Tag className=\"size-3\" />\n {tag}\n </span>\n ))}\n {note.tags.length > 3 && (\n <span className=\"px-2 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded\">\n +{note.tags.length - 3}\n </span>\n )}\n </div>\n ) : null}\n </motion.div>\n );\n}\n"],"mappings":";;;;;;AAqCA,SAAgB,EAAS,EACvB,SACA,WACA,WACA,aACA,UACA,YACA,oBACgB;CAChB,IAAM,EAAE,SAAM,GAAS,EAKjB,CAAC,GAAU,KAAe,EAAS,GAAM;AAmB/C,QACE,kBAAC,EAAO,KAAR;EACE,YAAY,EAAE,YAAY;GAAE,UAAU;GAAM,MAAM;IAAC;IAAK;IAAG;IAAK;IAAE;GAAE,EAAE;EACtE,UAAU,EAAE,OAAO,KAAM;EACzB,WAAU;EACV,eAAe,IAAS,EAAK;YAJ/B;GAME,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,GAAD,EAAU,WAAU,mCAAoC,CAAA;MACpD,CAAA,EACN,kBAAC,OAAD;MAAK,WAAU;gBAAf,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf;QACE,kBAAC,MAAD;SAAI,WAAU;mBAA4C,EAAK;SAAW,CAAA;QACzE,EAAK,YAAY,kBAAC,GAAD,EAAK,WAAU,iDAAkD,CAAA;QAClF,EAAK,eAAe,YACnB,kBAAC,QAAD;SAAM,OAAM;mBACV,kBAAC,GAAD,EAAM,WAAU,0CAA2C,CAAA;SACtD,CAAA,GAEP,kBAAC,QAAD;SAAM,OAAM;mBACV,kBAAC,GAAD,EAAO,WAAU,0CAA2C,CAAA;SACvD,CAAA;QAEL;UACN,kBAAC,KAAD;OAAG,WAAU;mBA3CH,MACX,IAAI,KAAK,EAAQ,CAAC,mBAAmB,SAAS;QACnD,OAAO;QACP,KAAK;QACL,MAAM;QACP,CAAC,EAsC6D,EAAK,UAAU;OAAK,CAAA,CACvE;QACF;QACN,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,UAAD;MACE,MAAK;MACL,UAAU,MAAM;AAEd,OADA,EAAE,iBAAiB,EACnB,EAAY,CAAC,EAAS;;MAExB,WAAU;gBAEV,kBAAC,GAAD,EAAc,WAAU,8BAA+B,CAAA;MAChD,CAAA,EACT,kBAAC,GAAD,EAAA,UACG,KACC,kBAAC,EAAO,KAAR;MACE,SAAS;OAAE,SAAS;OAAG,OAAO;OAAM,GAAG;OAAI;MAC3C,SAAS;OAAE,SAAS;OAAG,OAAO;OAAG,GAAG;OAAG;MACvC,MAAM;OAAE,SAAS;OAAG,OAAO;OAAM,GAAG;OAAI;MACxC,YAAY,EAAE,UAAU,KAAM;MAC9B,WAAU;gBALZ;OAOG,KACC,kBAAC,EAAO,QAAR;QACE,UAAU,EAAE,OAAO,KAAM;QACzB,UAAU,MAAM;AAGd,SAFA,EAAE,iBAAiB,EACnB,EAAO,EAAK,EACZ,EAAY,GAAM;;QAEpB,WAAU;kBAPZ,CASE,kBAAC,GAAD,EAAM,WAAU,UAAW,CAAA,EAAA,OAEb;;OAEjB,KACC,kBAAC,EAAO,QAAR;QACE,UAAU,EAAE,OAAO,KAAM;QACzB,eAAY;QACZ,UAAU,MAAM;AAGd,SAFA,EAAE,iBAAiB,EACnB,EAAc,EAAK,EACnB,EAAY,GAAM;;QAEpB,WAAU;kBARZ,CAUE,kBAAC,GAAD,EAAQ,WAAU,UAAW,CAAA,EAAA,gBAEf;;OAEjB,EAAK,YAAY,KAChB,kBAAC,EAAO,QAAR;QACE,UAAU,EAAE,OAAO,KAAM;QACzB,UAAU,MAAM;AAGd,SAFA,EAAE,iBAAiB,EACnB,EAAQ,EAAK,EACb,EAAY,GAAM;;QAEpB,WAAU;kBAPZ,CASE,kBAAC,GAAD,EAAQ,WAAU,UAAW,CAAA,EAAA,QAEf;;OAEjB,CAAC,EAAK,YAAY,KACjB,kBAAC,EAAO,QAAR;QACE,UAAU,EAAE,OAAO,KAAM;QACzB,UAAU,MAAM;AAGd,SAFA,EAAE,iBAAiB,EACnB,EAAM,EAAK,EACX,EAAY,GAAM;;QAEpB,WAAU;kBAPZ,CASE,kBAAC,GAAD,EAAK,WAAU,UAAW,CAAA,EAAA,MAEZ;;OAEjB,KACC,kBAAC,EAAO,QAAR;QACE,UAAU,EAAE,OAAO,KAAM;QACzB,UAAU,MAAM;AAGd,SAFA,EAAE,iBAAiB,EACnB,EAAS,EAAK,EACd,EAAY,GAAM;;QAEpB,WAAU;kBAPZ,CASE,kBAAC,GAAD,EAAQ,WAAU,UAAW,CAAA,EAAA,SAEf;;OAEP;SAEC,CAAA,CACd;OACF;;GAEN,kBAAC,KAAD;IAAG,WAAU;gBAvIG,MAAoB;KAEtC,IAAM,IAAO,EACV,QAAQ,YAAY,GAAG,CACvB,QAAQ,OAAO,IAAI,CACnB,MAAM;AACT,YAAO,EAAK,SAAS,MAAM,EAAK,MAAM,GAAG,IAAI,GAAG,QAAQ;OAiImB,EAAK,QAAQ;IAAK,CAAA;GAG1F,EAAK,kBAAkB,EAAK,eAAe,SAAS,IACnD,kBAAC,OAAD;IAAK,WAAU;cAAf,CACG,EAAK,eAAe,MAAM,GAAG,EAAE,CAAC,KAAK,MACpC,kBAAC,QAAD;KAEE,WAAU;KACV,OACE,EAAW,KAAK,QACZ,EAAE,YAAY,aAAa,EAAW,IAAI,SAAS,GACnD,KAAA;eANR,CASE,kBAAC,GAAD,EAAK,WAAU,UAAW,CAAA,EACzB,EAAW,KAAK,SAAS,EAAW,MAAM,MAAM,GAAG,EAAE,CACjD;OAVA,EAAW,GAUX,CACP,EACD,EAAK,eAAe,SAAS,KAC5B,kBAAC,QAAD;KAAM,WAAU;eAAhB,CAA+E,KAC3E,EAAK,eAAe,SAAS,EAC1B;OAEL;QACJ,EAAK,QAAQ,EAAK,KAAK,SAAS,IAClC,kBAAC,OAAD;IAAK,WAAU;cAAf,CACG,EAAK,KAAK,MAAM,GAAG,EAAE,CAAC,KAAK,MAC1B,kBAAC,QAAD;KAEE,WAAU;eAFZ,CAIE,kBAAC,GAAD,EAAK,WAAU,UAAW,CAAA,EACzB,EACI;OALA,EAKA,CACP,EACD,EAAK,KAAK,SAAS,KAClB,kBAAC,QAAD;KAAM,WAAU;eAAhB,CAA+E,KAC3E,EAAK,KAAK,SAAS,EAChB;OAEL;QACJ;GACO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NoteEditor.js","names":[],"sources":["../../../src/components/notes/NoteEditor.tsx"],"sourcesContent":["import { useState, useEffect } from 'react';\nimport { X, Save, Eye, Edit, Tag, Check, Plus, Lock, Globe } from 'lucide-react';\nimport type { CreateNoteInput, Note, NoteTagAssignment, NoteVisibility } from './types';\nimport { useAvailableNoteTagsQuery, useCreateNoteTagMutation } from '@/generated/wspace-operations';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { useVibeControls } from '../../providers/VibeControlsProvider';\n\n/** Tag selected in the editor */\nexport interface SelectedTag {\n id: string;\n key: string;\n label: string;\n color: string | null;\n}\n\n/** Note data submitted from the editor — includes `id` and selected tag IDs */\nexport type NoteEditorSubmitData = CreateNoteInput & {\n id?: string;\n selectedTagIds?: string[];\n visibility?: NoteVisibility;\n};\n\nconst TAG_COLORS = [\n 'var(--color-status-error-text)',\n 'var(--color-status-warning-text)',\n 'var(--color-status-success-text)',\n 'var(--color-accent-teal)',\n 'var(--color-text-link)',\n 'var(--color-accent-purple)',\n 'var(--color-text-tertiary)',\n];\n\ninterface NoteEditorProps {\n note?: Note;\n vibeOptions?: { id: string; name: string }[];\n /** Pre-set vibeId when creating a new note (used in vibe-scoped context) */\n defaultVibeId?: string;\n /** Hide the vibe dropdown (used when notes are scoped to a single vibe) */\n hideVibeSelect?: boolean;\n onSubmit: (data: NoteEditorSubmitData) => void;\n onCancel: () => void;\n isLoading?: boolean;\n}\n\nexport function NoteEditor({\n note,\n vibeOptions = [],\n defaultVibeId,\n hideVibeSelect,\n onSubmit,\n onCancel,\n isLoading,\n}: NoteEditorProps) {\n const tr = useTr();\n const { workspaceId } = useVibeControls();\n const [isPreview, setIsPreview] = useState(false);\n const [formData, setFormData] = useState({\n title: note?.title || '',\n content: note?.content || '',\n vibeId: note?.vibeId || defaultVibeId || '',\n isPinned: note?.isPinned ?? false,\n visibility: (note?.visibility ?? 'WORKSPACE') as NoteVisibility,\n });\n\n // Tag picker state\n const [selectedTagIds, setSelectedTagIds] = useState<Set<string>>(new Set());\n const [tagsInitialized, setTagsInitialized] = useState(false);\n const [showTagPicker, setShowTagPicker] = useState(false);\n\n // Fetch available tags from wspace-tags-svc\n const { data: tagsData, refetch: refetchTags } = useAvailableNoteTagsQuery();\n const availableTags: SelectedTag[] = (tagsData?.availableNoteTags ?? []).map(\n (t: { id: string; key: string; label: string; color?: string | null }) => ({\n id: t.id,\n key: t.key,\n label: t.label,\n color: t.color ?? null,\n })\n );\n\n // Initialize selected tags once available tags load\n useEffect(() => {\n if (tagsInitialized || availableTags.length === 0) return;\n const ids = new Set<string>();\n\n // First: pre-select from tagAssignments (tags service data)\n if (note?.tagAssignments && note.tagAssignments.length > 0) {\n note.tagAssignments.forEach((a: NoteTagAssignment) => ids.add(a.tagId));\n }\n // Fallback: match legacy string tags by label/key to available tags\n else if (note?.tags && note.tags.length > 0) {\n for (const legacyTag of note.tags) {\n const match = availableTags.find(\n (t) =>\n t.label.toLowerCase() === legacyTag.toLowerCase() || t.key === legacyTag.toLowerCase()\n );\n if (match) ids.add(match.id);\n }\n }\n\n if (ids.size > 0) setSelectedTagIds(ids);\n setTagsInitialized(true);\n }, [availableTags, note, tagsInitialized]);\n\n // Inline tag creation\n const [createNoteTag] = useCreateNoteTagMutation();\n const [newTagLabel, setNewTagLabel] = useState('');\n const [newTagColor, setNewTagColor] = useState('var(--color-accent-purple)');\n const [isCreatingTag, setIsCreatingTag] = useState(false);\n\n const handleCreateTag = async () => {\n const label = newTagLabel.trim();\n if (!label || isCreatingTag) return;\n setIsCreatingTag(true);\n try {\n const result = await createNoteTag({\n variables: { input: { label, color: newTagColor } },\n });\n const newTag = result.data?.createNoteTag;\n if (newTag) {\n setSelectedTagIds((prev) => new Set(prev).add(newTag.id));\n await refetchTags();\n }\n setNewTagLabel('');\n } catch (err) {\n console.error('Failed to create tag:', err);\n } finally {\n setIsCreatingTag(false);\n }\n };\n\n const toggleTag = (tagId: string) => {\n setSelectedTagIds((prev) => {\n const next = new Set(prev);\n if (next.has(tagId)) {\n next.delete(tagId);\n } else {\n next.add(tagId);\n }\n return next;\n });\n };\n\n const handleSubmit = (e: React.FormEvent) => {\n e.preventDefault();\n const data: NoteEditorSubmitData = {\n ...(note?.id ? { id: note.id } : {}),\n workspaceId: workspaceId ?? '',\n title: formData.title,\n content: formData.content,\n vibeId: formData.vibeId || undefined,\n isPinned: formData.isPinned,\n visibility: formData.visibility,\n selectedTagIds: Array.from(selectedTagIds),\n };\n onSubmit(data);\n };\n\n // Enhanced markdown preview with inline formatting support\n const parseInlineFormatting = (text: string): React.ReactNode[] => {\n const parts: React.ReactNode[] = [];\n let remaining = text;\n let key = 0;\n\n while (remaining.length > 0) {\n // Bold: **text** or __text__\n const boldMatch = remaining.match(/^(\\*\\*|__)(.+?)\\1/);\n if (boldMatch) {\n parts.push(<strong key={key++}>{parseInlineFormatting(boldMatch[2])}</strong>);\n remaining = remaining.slice(boldMatch[0].length);\n continue;\n }\n\n // Italic: *text* or _text_\n const italicMatch = remaining.match(/^(\\*|_)([^*_]+?)\\1/);\n if (italicMatch) {\n parts.push(<em key={key++}>{parseInlineFormatting(italicMatch[2])}</em>);\n remaining = remaining.slice(italicMatch[0].length);\n continue;\n }\n\n // Strikethrough: ~~text~~\n const strikeMatch = remaining.match(/^~~(.+?)~~/);\n if (strikeMatch) {\n parts.push(<del key={key++}>{parseInlineFormatting(strikeMatch[1])}</del>);\n remaining = remaining.slice(strikeMatch[0].length);\n continue;\n }\n\n // Inline code: `code`\n const codeMatch = remaining.match(/^`([^`]+)`/);\n if (codeMatch) {\n parts.push(\n <code\n key={key++}\n className=\"bg-bg-elevated px-1.5 py-0.5 rounded text-sm font-mono text-text-primary\"\n >\n {codeMatch[1]}\n </code>\n );\n remaining = remaining.slice(codeMatch[0].length);\n continue;\n }\n\n // Links: [text](url) - only allow safe URL schemes to prevent XSS\n const linkMatch = remaining.match(/^\\[([^\\]]+)\\]\\(([^)]+)\\)/);\n if (linkMatch) {\n const url = linkMatch[2];\n // Only allow http, https, mailto, relative paths, and hash links to prevent XSS via javascript: URLs\n const isSafeUrl = /^(https?:\\/\\/|mailto:|\\/|#)/i.test(url);\n if (isSafeUrl) {\n parts.push(\n <a\n key={key++}\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"text-action-primary-bg hover:underline\"\n >\n {linkMatch[1]}\n </a>\n );\n } else {\n // Render unsafe links as plain text with muted styling\n parts.push(\n <span key={key++} className=\"text-text-secondary\">\n {linkMatch[1]}\n </span>\n );\n }\n remaining = remaining.slice(linkMatch[0].length);\n continue;\n }\n\n // No match - take the next character\n parts.push(remaining[0]);\n remaining = remaining.slice(1);\n }\n\n return parts;\n };\n\n // Parse markdown content into React elements\n const renderMarkdown = (text: string) => {\n const lines = text.split('\\n');\n const elements: React.ReactNode[] = [];\n let i = 0;\n\n while (i < lines.length) {\n const line = lines[i];\n\n // Code blocks: ```\n if (line.startsWith('```')) {\n const language = line.slice(3).trim();\n const codeLines: string[] = [];\n i++;\n while (i < lines.length && !lines[i].startsWith('```')) {\n codeLines.push(lines[i]);\n i++;\n }\n elements.push(\n <pre key={elements.length} className=\"bg-bg-elevated rounded-md p-3 my-2 overflow-x-auto\">\n <code className=\"text-sm font-mono text-text-primary\">\n {language && (\n <span className=\"text-xs text-text-secondary block mb-2\">{language}</span>\n )}\n {codeLines.join('\\n')}\n </code>\n </pre>\n );\n i++;\n continue;\n }\n\n // Headings\n if (line.startsWith('# ')) {\n elements.push(\n <h1 key={elements.length} className=\"text-2xl font-bold mb-2 mt-4\">\n {parseInlineFormatting(line.slice(2))}\n </h1>\n );\n i++;\n continue;\n }\n if (line.startsWith('## ')) {\n elements.push(\n <h2 key={elements.length} className=\"text-xl font-bold mb-2 mt-3\">\n {parseInlineFormatting(line.slice(3))}\n </h2>\n );\n i++;\n continue;\n }\n if (line.startsWith('### ')) {\n elements.push(\n <h3 key={elements.length} className=\"text-lg font-bold mb-2 mt-2\">\n {parseInlineFormatting(line.slice(4))}\n </h3>\n );\n i++;\n continue;\n }\n\n // Blockquotes: > text\n if (line.startsWith('> ')) {\n elements.push(\n <blockquote\n key={elements.length}\n className=\"border-l-4 border-border-default pl-4 my-2 italic text-text-secondary\"\n >\n {parseInlineFormatting(line.slice(2))}\n </blockquote>\n );\n i++;\n continue;\n }\n\n // Unordered list: - or * (collect consecutive items and wrap in <ul>)\n if (line.match(/^[-*] /)) {\n const listItems: React.ReactNode[] = [];\n while (i < lines.length && lines[i].match(/^[-*] /)) {\n listItems.push(\n <li key={listItems.length} className=\"list-disc\">\n {parseInlineFormatting(lines[i].slice(2))}\n </li>\n );\n i++;\n }\n elements.push(\n <ul key={elements.length} className=\"ml-6 my-2\">\n {listItems}\n </ul>\n );\n continue;\n }\n\n // Ordered list: 1. 2. etc. (collect consecutive items and wrap in <ol>)\n const orderedMatch = line.match(/^(\\d+)\\. /);\n if (orderedMatch) {\n const listItems: React.ReactNode[] = [];\n while (i < lines.length) {\n const olMatch = lines[i].match(/^(\\d+)\\. /);\n if (!olMatch) break;\n listItems.push(\n <li key={listItems.length} className=\"list-decimal\">\n {parseInlineFormatting(lines[i].slice(olMatch[0].length))}\n </li>\n );\n i++;\n }\n elements.push(\n <ol key={elements.length} className=\"ml-6 my-2\">\n {listItems}\n </ol>\n );\n continue;\n }\n\n // Horizontal rule: --- or ***\n if (line.match(/^(-{3,}|\\*{3,})$/)) {\n elements.push(<hr key={elements.length} className=\"my-4 border-border-default\" />);\n i++;\n continue;\n }\n\n // Table detection (simple): | col1 | col2 |\n if (line.startsWith('|') && line.endsWith('|')) {\n const tableLines: string[] = [line];\n i++;\n while (i < lines.length && lines[i].startsWith('|') && lines[i].endsWith('|')) {\n tableLines.push(lines[i]);\n i++;\n }\n\n // Parse table\n const rows = tableLines\n .filter((l) => !l.match(/^\\|[\\s\\-:|]+\\|$/)) // Skip separator rows (including alignment markers like :---:)\n .map((l) =>\n l\n .slice(1, -1)\n .split('|')\n .map((cell) => cell.trim())\n );\n\n if (rows.length > 0) {\n const [header, ...body] = rows;\n elements.push(\n <table key={elements.length} className=\"w-full my-2 border-collapse text-sm\">\n <thead>\n <tr className=\"border-b border-border-default\">\n {header.map((cell, ci) => (\n <th key={ci} className=\"text-left py-2 px-3 font-semibold text-text-primary\">\n {parseInlineFormatting(cell)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {body.map((row, ri) => (\n <tr key={ri} className=\"border-b border-border-subtle\">\n {row.map((cell, ci) => (\n <td key={ci} className=\"py-2 px-3 text-text-primary\">\n {parseInlineFormatting(cell)}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n );\n }\n continue;\n }\n\n // Empty line\n if (line === '') {\n elements.push(<br key={elements.length} />);\n i++;\n continue;\n }\n\n // Regular paragraph with inline formatting\n elements.push(\n <p key={elements.length} className=\"mb-1\">\n {parseInlineFormatting(line)}\n </p>\n );\n i++;\n }\n\n return elements;\n };\n\n return (\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-bg-overlay\">\n <div className=\"w-full max-w-3xl bg-bg-surface rounded-lg shadow-xl max-h-[90vh] flex flex-col\">\n <div className=\"flex items-center justify-between px-6 py-4 border-b border-border-default\">\n <h2 className=\"text-lg font-semibold text-text-primary\">\n {note\n ? tr('vibecontrols.notes.editNote', 'Edit Note')\n : tr('vibecontrols.notes.newNote', 'New Note')}\n </h2>\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => setIsPreview(!isPreview)}\n className={`inline-flex items-center gap-2 px-3 py-1.5 text-sm rounded-md transition-colors ${\n isPreview\n ? 'bg-action-primary-bg text-action-primary-text'\n : 'bg-bg-sunken text-text-primary hover:bg-bg-elevated'\n }`}\n >\n {isPreview ? <Edit className=\"size-4\" /> : <Eye className=\"size-4\" />}\n {isPreview\n ? tr('vibecontrols.notes.edit', 'Edit')\n : tr('vibecontrols.notes.preview', 'Preview')}\n </button>\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"p-1 rounded hover:bg-bg-sunken transition-colors\"\n >\n <X className=\"size-5 text-text-secondary\" />\n </button>\n </div>\n </div>\n\n <form onSubmit={handleSubmit} className=\"flex-1 flex flex-col overflow-hidden\">\n <div className=\"p-6 space-y-4 flex-1 overflow-y-auto\">\n <div>\n <input\n aria-label=\"control\"\n type=\"text\"\n value={formData.title}\n onChange={(e) => setFormData({ ...formData, title: e.target.value })}\n placeholder={tr('vibecontrols.notes.titlePlaceholder', 'Note title...')}\n required\n className=\"w-full px-0 py-2 text-lg sm:text-2xl font-bold bg-transparent border-0 border-b border-border-default text-text-primary placeholder:text-text-placeholder focus:outline-none focus:border-action-primary-bg\"\n />\n </div>\n\n <div className={`grid ${hideVibeSelect ? 'grid-cols-1' : 'grid-cols-2'} gap-4`}>\n {!hideVibeSelect && (\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('vibecontrols.notes.relatedVibe', 'Related Vibe (optional)')}\n </label>\n <select\n value={formData.vibeId}\n onChange={(e) => setFormData({ ...formData, vibeId: e.target.value })}\n className=\"w-full px-3 py-2 text-sm bg-bg-sunken border border-border-default rounded-md text-text-primary focus:outline-none focus:ring-2 focus:ring-action-primary-bg\"\n >\n <option value=\"\">No vibe</option>\n {vibeOptions.map((vibe) => (\n <option key={vibe.id} value={vibe.id}>\n {vibe.name}\n </option>\n ))}\n </select>\n </div>\n )}\n <div>\n <label className=\"block text-sm font-medium text-text-primary mb-1\">\n {tr('vibecontrols.notes.tags', 'Tags')}\n </label>\n {/* Selected tags */}\n <div className=\"flex flex-wrap gap-1.5 min-h-[38px] px-3 py-2 bg-bg-sunken border border-border-default rounded-md\">\n {availableTags\n .filter((t) => selectedTagIds.has(t.id))\n .map((tag) => (\n <span\n key={tag.id}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 text-xs font-medium bg-[var(--color-accent-soft)] text-text-primary rounded\"\n >\n <Tag className=\"size-3\" />\n {tag.label}\n <button\n type=\"button\"\n onClick={() => toggleTag(tag.id)}\n className=\"ml-0.5 hover:text-status-error-text\"\n >\n <X className=\"size-3\" />\n </button>\n </span>\n ))}\n <button\n type=\"button\"\n onClick={() => setShowTagPicker(!showTagPicker)}\n className=\"inline-flex items-center gap-1 px-2 py-0.5 text-xs text-text-secondary hover:text-text-primary hover:bg-bg-elevated rounded transition-colors\"\n >\n <Tag className=\"size-3\" />\n {selectedTagIds.size === 0 ? 'Add tags...' : '+'}\n </button>\n </div>\n {/* Tag picker dropdown */}\n {showTagPicker && (\n <div className=\"mt-1 bg-bg-surface border border-border-default rounded-md shadow-lg\">\n {/* Inline create: text input + color picker */}\n <div className=\"flex items-center gap-2 p-2 border-b border-border-subtle\">\n <span\n aria-hidden=\"true\"\n className=\"size-6 rounded-full border-2 border-border-default\"\n style={{ backgroundColor: newTagColor }}\n />\n <input\n aria-label=\"New tag name... (Enter to create)\"\n type=\"text\"\n value={newTagLabel}\n onChange={(e) => setNewTagLabel(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleCreateTag();\n }\n }}\n placeholder=\"New tag name... (Enter to create)\"\n disabled={isCreatingTag}\n className=\"flex-1 px-2 py-1 text-sm bg-bg-sunken border border-border-default rounded text-text-primary placeholder:text-text-placeholder focus:outline-none focus:ring-1 focus:ring-action-primary-bg disabled:opacity-50\"\n />\n <button\n type=\"button\"\n onClick={handleCreateTag}\n disabled={!newTagLabel.trim() || isCreatingTag}\n className=\"p-1 text-action-primary-bg hover:bg-[var(--color-accent-soft)] rounded transition-colors disabled:opacity-30\"\n >\n <Plus className=\"size-4\" />\n </button>\n </div>\n {/* Quick color palette */}\n <div className=\"flex items-center gap-1 px-2 py-1.5 border-b border-border-subtle\">\n {TAG_COLORS.map((c) => (\n <button\n key={c}\n type=\"button\"\n onClick={() => setNewTagColor(c)}\n className={`size-4 rounded-full transition-transform ${newTagColor === c ? 'ring-2 ring-action-primary-bg scale-125' : ''}`}\n style={{ backgroundColor: c }}\n />\n ))}\n </div>\n {/* Existing tags list */}\n <div className=\"max-h-32 overflow-y-auto p-1\">\n {availableTags.length === 0 ? (\n <p className=\"text-xs text-text-muted px-2 py-1\">\n No tags yet — create one above\n </p>\n ) : (\n availableTags.map((tag) => (\n <button\n key={tag.id}\n type=\"button\"\n onClick={() => toggleTag(tag.id)}\n className=\"flex items-center justify-between w-full px-2 py-1.5 text-sm text-text-primary hover:bg-bg-sunken rounded transition-colors\"\n >\n <span className=\"flex items-center gap-2\">\n {tag.color && (\n <span\n className=\"size-2.5 rounded-full\"\n style={{ backgroundColor: tag.color }}\n />\n )}\n {tag.label}\n </span>\n {selectedTagIds.has(tag.id) && (\n <Check className=\"size-4 text-action-primary-bg\" />\n )}\n </button>\n ))\n )}\n </div>\n </div>\n )}\n </div>\n </div>\n\n <div className=\"flex-1 min-h-[300px]\">\n {isPreview ? (\n <div className=\"h-full p-4 bg-bg-sunken rounded-md prose prose-sm dark:prose-invert max-w-none overflow-y-auto\">\n {renderMarkdown(formData.content)}\n </div>\n ) : (\n <textarea\n aria-label=\"control\"\n value={formData.content}\n onChange={(e) => setFormData({ ...formData, content: e.target.value })}\n placeholder={tr(\n 'vibecontrols.notes.contentPlaceholder',\n 'Write your note in Markdown...'\n )}\n className=\"w-full h-full min-h-[300px] px-3 py-2 text-sm bg-bg-sunken border border-border-default rounded-md text-text-primary placeholder:text-text-placeholder focus:outline-none focus:ring-2 focus:ring-action-primary-bg resize-none font-mono\"\n />\n )}\n </div>\n\n <div className=\"flex items-center gap-4 flex-wrap\">\n <div className=\"flex items-center gap-2\">\n <input\n aria-label=\"isPinned\"\n type=\"checkbox\"\n id=\"isPinned\"\n checked={formData.isPinned}\n onChange={(e) => setFormData({ ...formData, isPinned: e.target.checked })}\n className=\"size-4 rounded border-border-default text-action-primary-bg focus:ring-action-primary-bg\"\n />\n <label htmlFor=\"isPinned\" className=\"text-sm text-text-primary\">\n {tr('vibecontrols.notes.pinThisNote', 'Pin this note')}\n </label>\n </div>\n\n {/* Visibility toggle */}\n <div className=\"flex items-center gap-1 bg-bg-sunken rounded-lg p-0.5\">\n <button\n type=\"button\"\n onClick={() => setFormData({ ...formData, visibility: 'WORKSPACE' })}\n className={`flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md transition-colors ${\n formData.visibility === 'WORKSPACE'\n ? 'bg-bg-surface text-text-primary shadow-sm'\n : 'text-text-muted hover:text-text-secondary'\n }`}\n >\n <Globe className=\"size-3.5\" />\n Workspace\n </button>\n <button\n type=\"button\"\n onClick={() => setFormData({ ...formData, visibility: 'PRIVATE' })}\n className={`flex items-center gap-1.5 px-3 py-1.5 text-xs font-medium rounded-md transition-colors ${\n formData.visibility === 'PRIVATE'\n ? 'bg-bg-surface text-text-primary shadow-sm'\n : 'text-text-muted hover:text-text-secondary'\n }`}\n >\n <Lock className=\"size-3.5\" />\n Private\n </button>\n </div>\n {formData.visibility === 'PRIVATE' && (\n <p className=\"text-xs text-text-muted w-full -mt-2\">Only you can see this note.</p>\n )}\n </div>\n </div>\n\n <div className=\"flex items-center justify-end gap-3 px-6 py-4 border-t border-border-default bg-bg-sunken\">\n <button\n type=\"button\"\n onClick={onCancel}\n disabled={isLoading}\n className=\"px-4 py-2 text-sm font-medium text-text-primary bg-bg-surface border border-border-default rounded-md hover:bg-bg-elevated transition-colors disabled:opacity-50\"\n >\n {tr('vibecontrols.notes.cancel', 'Cancel')}\n </button>\n <button\n type=\"submit\"\n disabled={isLoading}\n className=\"inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-action-primary-text bg-action-primary-bg rounded-md hover:bg-action-primary-bg-hover transition-colors disabled:opacity-50\"\n >\n <Save className=\"size-4\" />\n {isLoading\n ? tr('vibecontrols.notes.saving', 'Saving...')\n : tr('vibecontrols.notes.saveNote', 'Save Note')}\n </button>\n </div>\n </form>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NoteList.js","names":[],"sources":["../../../src/components/notes/NoteList.tsx"],"sourcesContent":["import type { Note } from './types';\nimport { EmptyState } from '../shared/EmptyState';\nimport {\n FileText,\n Plus,\n Pin,\n Tag,\n MoreVertical,\n Edit,\n Trash2,\n PinOff,\n Lock,\n Globe,\n Share2,\n} from 'lucide-react';\nimport { useState } from 'react';\nimport { useTr } from '../../shared/hooks/useTr';\n\ninterface NoteListProps {\n notes: Note[];\n onOpen?: (note: Note) => void;\n onEdit?: (note: Note) => void;\n onDelete?: (note: Note) => void;\n onPin?: (note: Note) => void;\n onUnpin?: (note: Note) => void;\n /** Generic-sharing entry point (full Share dialog); see NoteCard.onShareAccess. */\n onShareAccess?: (note: Note) => void;\n onCreateNew?: () => void;\n isLoading?: boolean;\n}\n\nfunction NoteRow({\n note,\n onOpen,\n onEdit,\n onDelete,\n onPin,\n onUnpin,\n onShareAccess,\n}: {\n note: Note;\n onOpen?: (note: Note) => void;\n onEdit?: (note: Note) => void;\n onDelete?: (note: Note) => void;\n onPin?: (note: Note) => void;\n onUnpin?: (note: Note) => void;\n onShareAccess?: (note: Note) => void;\n}) {\n const [showMenu, setShowMenu] = useState(false);\n\n const formatDate = (dateStr: string) => {\n return new Date(dateStr).toLocaleDateString('en-US', {\n month: 'short',\n day: 'numeric',\n year: 'numeric',\n });\n };\n\n const getPreview = (content: string) => {\n const text = content\n .replace(/^#+\\s+/gm, '')\n .replace(/\\n/g, ' ')\n .trim();\n return text.length > 80 ? text.slice(0, 80) + '...' : text;\n };\n\n return (\n <tr\n className=\"border-b border-border-subtle hover:bg-bg-sunken/50 cursor-pointer transition-colors\"\n onClick={() => onOpen?.(note)}\n >\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center gap-3 min-w-0\">\n <FileText className=\"size-4 text-status-warning-text shrink-0\" />\n <div className=\"min-w-0\">\n <div className=\"flex items-center gap-1.5\">\n <p className=\"text-sm font-medium text-text-primary truncate\">{note.title}</p>\n {note.isPinned && <Pin className=\"size-3 text-status-warning-text shrink-0\" />}\n {note.visibility === 'PRIVATE' ? (\n <span title=\"Private\">\n <Lock className=\"size-3 text-text-muted shrink-0\" />\n </span>\n ) : (\n <span title=\"Workspace\">\n <Globe className=\"size-3 text-text-muted shrink-0\" />\n </span>\n )}\n </div>\n <p className=\"text-xs text-text-muted truncate max-w-[300px]\">\n {getPreview(note.content)}\n </p>\n </div>\n </div>\n </td>\n <td className=\"px-4 py-3\">\n <span className=\"text-sm text-text-secondary truncate block max-w-[100px]\">\n {note.vibe?.name || '-'}\n </span>\n </td>\n <td className=\"px-4 py-3\">\n {/* Render tagAssignments if available, otherwise fall back to legacy string tags */}\n {note.tagAssignments && note.tagAssignments.length > 0 ? (\n <div className=\"flex flex-wrap gap-1\">\n {note.tagAssignments.slice(0, 2).map((assignment) => (\n <span\n key={assignment.id}\n className=\"inline-flex items-center gap-0.5 px-1.5 py-0.5 text-xs bg-[var(--color-accent-soft)] text-text-primary rounded\"\n style={\n assignment.tag?.color\n ? { borderLeft: `2px solid ${assignment.tag.color}` }\n : undefined\n }\n >\n <Tag className=\"size-2.5\" />\n {assignment.tag?.label ?? assignment.tagId.slice(0, 8)}\n </span>\n ))}\n {note.tagAssignments.length > 2 && (\n <span className=\"px-1.5 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded\">\n +{note.tagAssignments.length - 2}\n </span>\n )}\n </div>\n ) : note.tags && note.tags.length > 0 ? (\n <div className=\"flex flex-wrap gap-1\">\n {note.tags.slice(0, 2).map((tag) => (\n <span\n key={tag}\n className=\"inline-flex items-center gap-0.5 px-1.5 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded\"\n >\n <Tag className=\"size-2.5\" />\n {tag}\n </span>\n ))}\n {note.tags.length > 2 && (\n <span className=\"px-1.5 py-0.5 text-xs bg-bg-sunken text-text-secondary rounded\">\n +{note.tags.length - 2}\n </span>\n )}\n </div>\n ) : (\n <span className=\"text-xs text-text-muted\">-</span>\n )}\n </td>\n <td className=\"px-4 py-3\">\n <span className=\"text-xs text-text-muted\">{formatDate(note.updatedAt)}</span>\n </td>\n <td className=\"px-4 py-3\">\n <div className=\"flex items-center gap-1 justify-end\">\n {(onEdit || onDelete || onPin || onUnpin || onShareAccess) && (\n <div className=\"relative\">\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n setShowMenu(!showMenu);\n }}\n className=\"p-1.5 rounded hover:bg-bg-sunken transition-colors\"\n >\n <MoreVertical className=\"size-3.5 text-text-secondary\" />\n </button>\n {showMenu && (\n <div className=\"absolute right-0 mt-1 w-44 bg-bg-surface border border-border-default rounded-lg shadow-lg z-50\">\n {onEdit && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onEdit(note);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken rounded-t-lg\"\n >\n <Edit className=\"size-4\" />\n Edit\n </button>\n )}\n {onShareAccess && (\n <button\n type=\"button\"\n data-testid=\"note-share-access\"\n onClick={(e) => {\n e.stopPropagation();\n onShareAccess(note);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken\"\n >\n <Share2 className=\"size-4\" />\n Share access…\n </button>\n )}\n {note.isPinned && onUnpin && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onUnpin(note);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken\"\n >\n <PinOff className=\"size-4\" />\n Unpin\n </button>\n )}\n {!note.isPinned && onPin && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onPin(note);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-text-primary hover:bg-bg-sunken\"\n >\n <Pin className=\"size-4\" />\n Pin\n </button>\n )}\n {onDelete && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onDelete(note);\n setShowMenu(false);\n }}\n className=\"flex items-center gap-2 w-full px-3 py-2 text-sm text-status-error-text hover:bg-bg-sunken rounded-b-lg\"\n >\n <Trash2 className=\"size-4\" />\n Delete\n </button>\n )}\n </div>\n )}\n </div>\n )}\n </div>\n </td>\n </tr>\n );\n}\n\nexport function NoteList({\n notes,\n onOpen,\n onEdit,\n onDelete,\n onPin,\n onUnpin,\n onShareAccess,\n onCreateNew,\n isLoading,\n}: NoteListProps) {\n const tr = useTr();\n if (!isLoading && notes.length === 0) {\n return (\n <EmptyState\n icon={<FileText className=\"size-8 text-text-secondary\" />}\n title={tr('vibecontrols.notes.emptyTitle', 'No notes yet')}\n description={tr(\n 'vibecontrols.notes.emptyDescription',\n 'Notes help you document your development process. Create your first note to get started.'\n )}\n action={\n onCreateNew && (\n <button\n type=\"button\"\n onClick={onCreateNew}\n className=\"inline-flex items-center gap-2 px-4 py-2 text-sm font-medium text-action-primary-text bg-action-primary-bg rounded-md hover:bg-action-primary-bg-hover transition-colors\"\n >\n <Plus className=\"size-4\" />\n {tr('vibecontrols.notes.createNote', 'Create Note')}\n </button>\n )\n }\n />\n );\n }\n\n // Sort: pinned first, then by updated date\n const sortedNotes = [...notes].sort((a, b) => {\n if (a.isPinned && !b.isPinned) return -1;\n if (!a.isPinned && b.isPinned) return 1;\n return new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime();\n });\n\n return (\n <div className=\"border border-border-default rounded-lg\">\n <div className=\"overflow-x-auto rounded-lg\">\n <table className=\"w-full\">\n <thead>\n <tr className=\"bg-bg-sunken border-b border-border-default\">\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider rounded-tl-lg\">\n {tr('vibecontrols.notes.columnTitle', 'Title')}\n </th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n {tr('vibecontrols.notes.columnVibe', 'Vibe')}\n </th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n {tr('vibecontrols.notes.columnTags', 'Tags')}\n </th>\n <th className=\"px-4 py-2.5 text-left text-xs font-medium text-text-secondary uppercase tracking-wider\">\n {tr('vibecontrols.notes.columnUpdated', 'Updated')}\n </th>\n <th className=\"px-4 py-2.5 text-right text-xs font-medium text-text-secondary uppercase tracking-wider rounded-tr-lg\">\n {tr('vibecontrols.notes.columnActions', 'Actions')}\n </th>\n </tr>\n </thead>\n <tbody>\n {sortedNotes.map((note) => (\n <NoteRow\n key={note.id}\n note={note}\n onOpen={onOpen}\n onEdit={onEdit}\n onDelete={onDelete}\n onPin={onPin}\n onUnpin={onUnpin}\n onShareAccess={onShareAccess}\n />\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NotesTabPanel.js","names":[],"sources":["../../../src/components/notes/NotesTabPanel.tsx"],"sourcesContent":["import { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { useState, useMemo } from 'react';\nimport { Plus, FileText, Grid, List, Pin, RefreshCw, Lock, Globe } from 'lucide-react';\nimport { AnimatePresence } from 'framer-motion';\nimport { useNavigate } from 'react-router';\nimport { useApolloClient } from '@apollo/client/react';\nimport { MotionList, MotionItem } from '@burdenoff/fe-libs/shared/motion';\nimport { NoteCard } from './NoteCard';\nimport { NoteList } from './NoteList';\nimport { NoteEditor } from './NoteEditor';\nimport type { Note, NoteVisibility } from './types';\nimport type { NoteEditorSubmitData } from './NoteEditor';\nimport {\n SearchInput,\n FilterDropdown,\n EmptyState,\n LoadingState,\n ErrorState,\n QuotaExhaustedDialog,\n} from '@/components/shared';\nimport {\n useListNotesQuery,\n usePinNoteMutation,\n useUnpinNoteMutation,\n useDeleteNoteMutation,\n useCreateNoteMutation,\n useUpdateNoteMutation,\n useReplaceNoteTagsMutation,\n useAvailableNoteTagsQuery,\n ListNotesDocument,\n} from '@/generated/wspace-operations';\nimport { NoteVisibility as GqlNoteVisibility } from '@/generated/wspace-types';\nimport { PermissionButton, AccessDenied } from '@burdenoff/fe-libs/shared/components';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { useFeatureFlag } from '@burdenoff/fe-libs/shared/feature-flags';\nimport { VIBE_PERMISSIONS } from '@/constants/permissions';\nimport { isQuotaExhaustedError, markQuotaHandledLocally } from '@/utils/quotaUtils';\nimport { NoteShareDialog, SHARE_REGISTRY } from '@/components/sharing';\n\ntype ViewMode = 'grid' | 'list';\n\ninterface NotesTabPanelProps {\n /**\n * 'vibe' = single vibe context; 'agent' = multi-vibe agent context;\n * 'session' = notes authored against a single terminal session (F1).\n */\n context: 'vibe' | 'agent' | 'session';\n /** For vibe context: the single vibeId to scope notes to */\n vibeId?: string;\n /** For session context: the single sessionId to scope notes to */\n sessionId?: string;\n /** For agent context: the vibes belonging to the agent */\n agentVibes?: { id: string; name: string }[];\n}\n\n/**\n * Reusable notes panel for embedding as a tab in detail pages.\n * Supports vibe-scoped, agent-scoped, and session-scoped contexts.\n */\nexport function NotesTabPanel({ context, vibeId, sessionId, agentVibes = [] }: NotesTabPanelProps) {\n const { t } = useI18n();\n const navigate = useNavigate();\n const apolloClient = useApolloClient();\n const tr = (key: string, fallback: string) => {\n const v = t(key);\n return v === key ? fallback : v;\n };\n const { hasPermission, isLoading: permissionsLoading, permissions } = usePermissions();\n\n const canListNotes = hasPermission(VIBE_PERMISSIONS.NOTE_LIST);\n const canCreateNote = hasPermission(VIBE_PERMISSIONS.NOTE_CREATE);\n const canDeleteNote = hasPermission(VIBE_PERMISSIONS.NOTE_DELETE);\n\n // Generic note sharing (full users/link/vibe dialog). Gated by the\n // `vibecontrols.sharing.note` flag (default ON) + note share permission.\n // This is the only sharing entry point on the notes surface as of\n // BOFF-3036 — the legacy PRIVATE↔WORKSPACE toggle was removed (see\n // `vibecontrols-specs/business/production/visibility-feature-audit-boff-3036.md`).\n const noteSharingFlagEnabled = useFeatureFlag(\n SHARE_REGISTRY.note.featureFlag,\n SHARE_REGISTRY.note.defaultEnabled\n );\n const canShareNote = hasPermission(SHARE_REGISTRY.note.permission);\n const noteSharingEnabled = noteSharingFlagEnabled && canShareNote;\n const [genericShareNote, setGenericShareNote] = useState<Note | null>(null);\n\n const [searchQuery, setSearchQuery] = useState('');\n const [vibeFilter, setVibeFilter] = useState('all');\n const [tagFilter, setTagFilter] = useState('all');\n const [visibilityFilter, setVisibilityFilter] = useState<'all' | 'PRIVATE' | 'WORKSPACE'>('all');\n const [showPinnedOnly, setShowPinnedOnly] = useState(false);\n const [viewMode, setViewMode] = useState<ViewMode>('grid');\n const [showEditor, setShowEditor] = useState(false);\n const [selectedNote, setSelectedNote] = useState<Note | null>(null);\n const [showQuotaExhausted, setShowQuotaExhausted] = useState(false);\n\n // Evict cached notes list and refetch — bypasses stale cache-and-network data\n const evictAndRefetch = (refetch: () => void) => {\n apolloClient.cache.evict({ id: 'ROOT_QUERY', fieldName: 'notes' });\n apolloClient.cache.gc();\n refetch();\n };\n\n const [pinNote] = usePinNoteMutation({\n refetchQueries: [ListNotesDocument],\n awaitRefetchQueries: true,\n });\n const [unpinNote] = useUnpinNoteMutation({\n refetchQueries: [ListNotesDocument],\n awaitRefetchQueries: true,\n });\n const [deleteNote] = useDeleteNoteMutation({\n refetchQueries: [ListNotesDocument],\n awaitRefetchQueries: true,\n });\n const [createNote] = useCreateNoteMutation({\n refetchQueries: [ListNotesDocument],\n awaitRefetchQueries: true,\n });\n const [updateNote] = useUpdateNoteMutation({\n refetchQueries: [ListNotesDocument],\n awaitRefetchQueries: true,\n });\n const [replaceNoteTags] = useReplaceNoteTagsMutation({\n refetchQueries: [ListNotesDocument],\n awaitRefetchQueries: true,\n });\n\n const shouldSkipQueries = permissionsLoading || !canListNotes;\n\n const { data: availableTagsData } = useAvailableNoteTagsQuery({ skip: shouldSkipQueries });\n\n // Build query filter based on context\n const queryFilter = useMemo(() => {\n const visibilityVal =\n visibilityFilter !== 'all' ? (visibilityFilter as GqlNoteVisibility) : undefined;\n\n if (context === 'session' && sessionId) {\n return {\n sessionId,\n isPinned: showPinnedOnly ? true : undefined,\n visibility: visibilityVal,\n };\n }\n if (context === 'vibe' && vibeId) {\n return {\n vibeId,\n isPinned: showPinnedOnly ? true : undefined,\n visibility: visibilityVal,\n };\n }\n // Agent context: fetch all notes, filter client-side\n return {\n vibeId: vibeFilter === 'none' ? null : vibeFilter !== 'all' ? vibeFilter : undefined,\n isPinned: showPinnedOnly ? true : undefined,\n visibility: visibilityVal,\n };\n }, [context, vibeId, sessionId, vibeFilter, showPinnedOnly, visibilityFilter]);\n\n const { data, loading, error, refetch } = useListNotesQuery({\n variables: { filter: queryFilter, pagination: { limit: 50 } },\n fetchPolicy: 'cache-and-network',\n skip: shouldSkipQueries,\n });\n\n // Vibe filter options (agent context only)\n const vibeOptions = useMemo(() => {\n if (context !== 'agent') return [];\n return [\n { value: 'all', label: 'All Vibes' },\n { value: 'none', label: 'No Vibe (General)' },\n ...agentVibes.map((v) => ({ value: v.id, label: v.name })),\n ];\n }, [context, agentVibes]);\n\n // Tag label lookup by ID — used when federation doesn't return nested tag object\n type AvailableTag = { id: string; key: string; label: string; color?: string | null };\n const tagLabelMap = useMemo((): Map<string, AvailableTag> => {\n const tags = (availableTagsData?.availableNoteTags ?? []) as AvailableTag[];\n return new Map(tags.map((tag) => [tag.id, tag]));\n }, [availableTagsData?.availableNoteTags]);\n\n // Map GraphQL response to Note type\n const notes: Note[] = useMemo(() => {\n const rawNotes = data?.notes?.items ?? [];\n const mapped = rawNotes.map((note: NonNullable<typeof rawNotes>[number]) => ({\n id: note.id,\n workspaceId: note.workspaceId,\n vibeId: note.vibeId || null,\n title: note.title,\n content: note.content,\n tags: note.tags || [],\n tagAssignments:\n note.tagAssignments?.map((a: NonNullable<typeof note.tagAssignments>[number]) => {\n // `a.tag` may be null when federation doesn't resolve the tag entity.\n // Fall back to the availableNoteTags lookup so the label always shows.\n const resolvedTag = a.tag\n ? { id: a.tag.id, label: a.tag.label, key: a.tag.key, color: a.tag.color }\n : tagLabelMap.has(a.tagId)\n ? {\n id: a.tagId,\n label: tagLabelMap.get(a.tagId)!.label,\n key: tagLabelMap.get(a.tagId)!.key,\n color: tagLabelMap.get(a.tagId)!.color ?? null,\n }\n : undefined;\n return {\n id: a.id,\n tagId: a.tagId,\n tag: resolvedTag,\n entityType: a.entityType,\n entityId: a.entityId,\n source: a.source,\n assignedBy: a.assignedBy,\n assignedAt: a.assignedAt,\n };\n }) || [],\n isPinned: note.isPinned,\n visibility: (note.visibility ?? 'WORKSPACE') as NoteVisibility,\n createdBy: note.createdBy ?? '',\n metadata: (note.metadata as Record<string, unknown>) || {},\n createdAt: note.createdAt,\n updatedAt: note.updatedAt,\n vibe: note.vibe ? { id: note.vibe.id, name: note.vibe.name } : undefined,\n }));\n\n // Agent context: client-side filter to only agent's vibes\n if (context === 'agent' && agentVibes.length > 0) {\n const vibeIdSet = new Set(agentVibes.map((v) => v.id));\n return mapped.filter((n: Note) => n.vibeId && vibeIdSet.has(n.vibeId));\n }\n\n return mapped;\n }, [data?.notes?.items, context, agentVibes, tagLabelMap]);\n\n // Tag filter options\n const tagOptions = useMemo(() => {\n const tags = availableTagsData?.availableNoteTags ?? [];\n return [\n { value: 'all', label: 'All Tags' },\n ...tags.map((tag: AvailableTag) => ({\n value: tag.id,\n label: tag.label,\n })),\n ];\n }, [availableTagsData?.availableNoteTags]);\n\n // Client-side search and tag filtering\n const filteredNotes = useMemo(() => {\n return notes.filter((note) => {\n if (searchQuery) {\n const query = searchQuery.toLowerCase();\n const matchesSearch =\n note.title.toLowerCase().includes(query) ||\n note.content.toLowerCase().includes(query) ||\n note.tagAssignments?.some((a) => a.tag?.label?.toLowerCase().includes(query));\n if (!matchesSearch) return false;\n }\n if (tagFilter !== 'all') {\n const hasTag = note.tagAssignments?.some((a) => a.tagId === tagFilter);\n if (!hasTag) return false;\n }\n return true;\n });\n }, [notes, searchQuery, tagFilter]);\n\n // Sort: pinned first, then by updatedAt\n const sortedNotes = useMemo(() => {\n return [...filteredNotes].sort((a, b) => {\n if (a.isPinned && !b.isPinned) return -1;\n if (!a.isPinned && b.isPinned) return 1;\n return new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime();\n });\n }, [filteredNotes]);\n\n const handleNoteSelect = (note: Note) => {\n setSelectedNote(note);\n setShowEditor(true);\n };\n\n const handleCreateNote = () => {\n setSelectedNote(null);\n setShowEditor(true);\n };\n\n const handlePinNote = async (note: Note) => {\n try {\n if (note.isPinned) {\n await unpinNote({ variables: { id: note.id } });\n } else {\n await pinNote({ variables: { id: note.id } });\n }\n evictAndRefetch(refetch);\n } catch (err) {\n console.error('Failed to toggle pin for note:', err);\n }\n };\n\n const handleDeleteNote = async (note: Note) => {\n try {\n await deleteNote({ variables: { id: note.id } });\n evictAndRefetch(refetch);\n } catch (err) {\n console.error('Failed to delete note:', err);\n }\n };\n\n const handleSaveNote = async (noteData: NoteEditorSubmitData) => {\n const closeEditorForQuota = () => {\n setShowEditor(false);\n setSelectedNote(null);\n markQuotaHandledLocally();\n setShowQuotaExhausted(true);\n };\n\n try {\n let noteId: string | undefined;\n\n // In vibe context, always force the vibeId\n const effectiveVibeId = context === 'vibe' ? vibeId : noteData.vibeId;\n\n if (noteData.id) {\n let result;\n try {\n result = await updateNote({\n variables: {\n id: noteData.id,\n input: {\n title: noteData.title,\n content: noteData.content,\n visibility: noteData.visibility\n ? (noteData.visibility as GqlNoteVisibility)\n : undefined,\n },\n },\n });\n } catch (err) {\n if (isQuotaExhaustedError(err)) {\n closeEditorForQuota();\n return;\n }\n\n throw err;\n }\n noteId = result.data?.updateNote?.id;\n } else {\n let result;\n try {\n result = await createNote({\n variables: {\n input: {\n title: noteData.title || '',\n content: noteData.content || '',\n vibeId: effectiveVibeId,\n // F1 — stamp the session so the note shows in this session's\n // drawer; it stays workspace-reusable everywhere else.\n sessionId: context === 'session' ? sessionId : undefined,\n visibility: noteData.visibility\n ? (noteData.visibility as GqlNoteVisibility)\n : GqlNoteVisibility.Workspace,\n },\n },\n });\n } catch (err) {\n if (isQuotaExhaustedError(err)) {\n closeEditorForQuota();\n return;\n }\n\n throw err;\n }\n noteId = result.data?.createNote?.id;\n }\n\n // Assign tags\n if (noteId && noteData.selectedTagIds && noteData.selectedTagIds.length > 0) {\n await replaceNoteTags({\n variables: { input: { noteId, tagIds: noteData.selectedTagIds } },\n });\n } else if (noteId && noteData.selectedTagIds?.length === 0 && noteData.id) {\n await replaceNoteTags({\n variables: { input: { noteId, tagIds: [] } },\n });\n }\n\n setShowEditor(false);\n evictAndRefetch(refetch);\n } catch (err) {\n console.error('Failed to save note:', err);\n }\n };\n\n // Opens the generic Share dialog for a note (users / link / vibe).\n // Note visibility is now exclusively modelled via the generic Share dialog;\n // the legacy PRIVATE↔WORKSPACE toggle (`onShare` / `handleShareNote`) was\n // removed in BOFF-3036 — see\n // `vibecontrols-specs/business/production/visibility-feature-audit-boff-3036.md`.\n const handleShareNoteAccess = noteSharingEnabled\n ? (note: Note) => setGenericShareNote(note)\n : undefined;\n\n // Stats\n const stats = {\n total: notes.length,\n pinned: notes.filter((n) => n.isPinned).length,\n };\n\n // Vibe options for editor\n const vibeOptionsForEditor = useMemo(() => {\n if (context === 'vibe') return [];\n return agentVibes;\n }, [context, agentVibes]);\n\n // Permission guard\n if (!permissionsLoading && permissions && !canListNotes) {\n return (\n <AccessDenied\n title=\"Access Denied\"\n description=\"You don't have permission to view notes.\"\n details=\"Required permission: note:list\"\n />\n );\n }\n\n if (loading && notes.length === 0) {\n return <LoadingState message=\"Loading notes...\" />;\n }\n\n if (error && notes.length === 0) {\n return (\n <ErrorState title=\"Failed to load notes\" message={error.message} onRetry={() => refetch()} />\n );\n }\n\n const isFiltered =\n searchQuery ||\n (context === 'agent' && vibeFilter !== 'all') ||\n tagFilter !== 'all' ||\n showPinnedOnly;\n\n return (\n <div className=\"space-y-4\">\n {/* Header */}\n <div className=\"flex items-center justify-between\">\n <div>\n <h3 className=\"text-lg font-semibold text-text-primary\">Notes</h3>\n <p className=\"text-sm text-text-secondary\">\n {stats.total} {stats.total === 1 ? 'note' : 'notes'}, {stats.pinned} pinned\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => refetch()}\n disabled={loading}\n className=\"flex items-center gap-2 px-3 py-2 text-text-secondary hover:bg-bg-sunken rounded-md transition-colors disabled:opacity-50\"\n title=\"Refresh notes\"\n >\n <RefreshCw className={`size-4 ${loading ? 'animate-spin' : ''}`} />\n </button>\n <PermissionButton permission={VIBE_PERMISSIONS.NOTE_CREATE}>\n <button\n type=\"button\"\n onClick={handleCreateNote}\n className=\"flex items-center gap-2 px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors\"\n >\n <Plus className=\"size-4\" />\n New Note\n </button>\n </PermissionButton>\n </div>\n </div>\n\n {/* Filters */}\n <div className=\"space-y-3\">\n <div className=\"flex items-center gap-2\">\n <SearchInput\n value={searchQuery}\n onChange={setSearchQuery}\n placeholder=\"Search notes...\"\n className=\"flex-1 sm:w-64 sm:flex-none\"\n />\n <div className=\"flex items-center gap-1 bg-bg-sunken rounded-md p-1 flex-shrink-0\">\n <button\n type=\"button\"\n onClick={() => setViewMode('grid')}\n className={`p-1.5 sm:p-2 rounded ${viewMode === 'grid' ? 'bg-bg-surface shadow-sm' : 'hover:bg-bg-surface/50'}`}\n title=\"Grid view\"\n >\n <Grid className=\"size-4 text-text-secondary\" />\n </button>\n <button\n type=\"button\"\n onClick={() => setViewMode('list')}\n className={`p-1.5 sm:p-2 rounded ${viewMode === 'list' ? 'bg-bg-surface shadow-sm' : 'hover:bg-bg-surface/50'}`}\n title=\"List view\"\n >\n <List className=\"size-4 text-text-secondary\" />\n </button>\n </div>\n </div>\n\n <div className=\"flex items-center gap-2 sm:gap-3 flex-wrap\">\n {context === 'agent' && (\n <FilterDropdown\n label=\"Vibe\"\n value={vibeFilter}\n options={vibeOptions}\n onChange={setVibeFilter}\n />\n )}\n <FilterDropdown\n label=\"Tag\"\n value={tagFilter}\n options={tagOptions}\n onChange={setTagFilter}\n />\n {/* Visibility filter */}\n <div className=\"flex items-center gap-1 bg-bg-sunken rounded-md p-0.5\">\n <button\n type=\"button\"\n onClick={() => setVisibilityFilter('all')}\n className={`px-2.5 py-1 text-xs rounded transition-colors ${visibilityFilter === 'all' ? 'bg-bg-surface text-text-primary shadow-sm' : 'text-text-muted hover:text-text-secondary'}`}\n >\n All\n </button>\n <button\n type=\"button\"\n onClick={() => setVisibilityFilter('WORKSPACE')}\n className={`flex items-center gap-1 px-2.5 py-1 text-xs rounded transition-colors ${visibilityFilter === 'WORKSPACE' ? 'bg-bg-surface text-text-primary shadow-sm' : 'text-text-muted hover:text-text-secondary'}`}\n >\n <Globe className=\"size-3\" />\n Shared\n </button>\n <button\n type=\"button\"\n onClick={() => setVisibilityFilter('PRIVATE')}\n className={`flex items-center gap-1 px-2.5 py-1 text-xs rounded transition-colors ${visibilityFilter === 'PRIVATE' ? 'bg-bg-surface text-text-primary shadow-sm' : 'text-text-muted hover:text-text-secondary'}`}\n >\n <Lock className=\"size-3\" />\n Private\n </button>\n </div>\n </div>\n </div>\n\n {/* Pinned toggle */}\n <div className=\"flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={() => setShowPinnedOnly(!showPinnedOnly)}\n className={`flex items-center gap-2 px-3 py-1.5 text-sm rounded-full transition-colors ${\n showPinnedOnly\n ? 'bg-status-warning-bg-subtle text-status-warning-text'\n : 'bg-bg-sunken text-text-secondary hover:bg-bg-sunken/80'\n }`}\n >\n <Pin className=\"size-3\" />\n Pinned ({stats.pinned})\n </button>\n </div>\n\n {/* Results count */}\n {isFiltered ? (\n <p className=\"text-sm text-text-secondary\">\n Showing {sortedNotes.length} of {notes.length} notes\n {loading && <span className=\"ml-2 text-text-muted\">(refreshing…)</span>}\n </p>\n ) : null}\n\n {/* Notes display */}\n <AnimatePresence mode=\"wait\">\n {sortedNotes.length > 0 ? (\n viewMode === 'grid' ? (\n <MotionList\n key=\"grid\"\n stagger={0.04}\n className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4\"\n >\n {sortedNotes.map((note) => (\n <MotionItem key={note.id}>\n <NoteCard\n note={note}\n onOpen={handleNoteSelect}\n onEdit={handleNoteSelect}\n onPin={handlePinNote}\n onUnpin={handlePinNote}\n onDelete={canDeleteNote ? handleDeleteNote : undefined}\n onShareAccess={handleShareNoteAccess}\n />\n </MotionItem>\n ))}\n </MotionList>\n ) : (\n <NoteList\n key=\"list\"\n notes={sortedNotes}\n onOpen={handleNoteSelect}\n onEdit={handleNoteSelect}\n onPin={handlePinNote}\n onUnpin={handlePinNote}\n onDelete={canDeleteNote ? handleDeleteNote : undefined}\n onShareAccess={handleShareNoteAccess}\n />\n )\n ) : (\n <EmptyState\n icon={<FileText className=\"size-8 text-text-secondary\" />}\n title={isFiltered ? 'No notes found' : 'No notes yet'}\n description={\n isFiltered\n ? 'Try adjusting your search or filters'\n : 'Create your first note to start documenting your work'\n }\n action={\n !isFiltered && canCreateNote ? (\n <button\n type=\"button\"\n onClick={handleCreateNote}\n className=\"flex items-center gap-2 px-4 py-2 bg-action-primary-bg text-action-primary-text rounded-md hover:bg-action-primary-bg-hover transition-colors\"\n >\n <Plus className=\"size-4\" />\n New Note\n </button>\n ) : undefined\n }\n />\n )}\n </AnimatePresence>\n\n {/* Note Editor Modal */}\n {showEditor && (\n <NoteEditor\n note={selectedNote || undefined}\n vibeOptions={vibeOptionsForEditor}\n defaultVibeId={context === 'vibe' ? vibeId : undefined}\n hideVibeSelect={context === 'vibe'}\n onSubmit={handleSaveNote}\n onCancel={() => setShowEditor(false)}\n />\n )}\n\n <QuotaExhaustedDialog\n isOpen={showQuotaExhausted}\n onClose={() => setShowQuotaExhausted(false)}\n onConfirm={() => {\n setShowQuotaExhausted(false);\n navigate('/billing/plans');\n }}\n title=\"Note Quota Reached\"\n message=\"You've used all available note quota on your current plan. Upgrade your plan to create or update more notes.\"\n />\n\n {/* Generic note sharing dialog (users / link / vibe) */}\n {genericShareNote && (\n <NoteShareDialog\n note={{\n id: genericShareNote.id,\n title: genericShareNote.title,\n vibeId: genericShareNote.vibeId,\n }}\n open={Boolean(genericShareNote)}\n onOpenChange={(next) => {\n if (!next) setGenericShareNote(null);\n }}\n />\n )}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FleetActivityAreaChart.js","names":[],"sources":["../../../src/components/overview/FleetActivityAreaChart.tsx"],"sourcesContent":["/**\n * The recharts half of the Fleet Activity card.\n *\n * Split out (and lazy-loaded by `FleetActivityChart`) so recharts stays out of\n * the Overview page's initial chunk — the same treatment the Analytics page\n * gives its charts.\n *\n * This is deliberately NOT `AnalyticsTimeSeriesChart`: that component renders\n * its own bordered surface, a legend box and an `M/D` axis, none of which work\n * for an hourly 24h series embedded in a card.\n */\n\nimport { useId, useMemo } from 'react';\nimport {\n Area,\n AreaChart,\n CartesianGrid,\n ResponsiveContainer,\n Tooltip,\n XAxis,\n YAxis,\n} from 'recharts';\nimport type { FleetActivityGranularity, FleetActivitySeries } from './types';\n\ninterface FleetActivityAreaChartProps {\n series: readonly FleetActivitySeries[];\n granularity: FleetActivityGranularity;\n height?: number;\n}\n\ntype MergedPoint = Record<string, number | string>;\n\nexport function FleetActivityAreaChart({\n series,\n granularity,\n height = 260,\n}: FleetActivityAreaChartProps) {\n const gradientPrefix = useId().replace(/:/g, '');\n\n const chartData = useMemo<MergedPoint[]>(() => {\n const byTimestamp = new Map<string, MergedPoint>();\n\n for (const s of series) {\n for (const point of s.data ?? []) {\n const key = new Date(point.timestamp).toISOString();\n const bucket = byTimestamp.get(key) ?? { timestamp: key };\n bucket[s.id] = point.value;\n byTimestamp.set(key, bucket);\n }\n }\n\n // Zero-fill missing series so the stacked areas do not tear where one\n // entity reported no events for a bucket.\n const merged = Array.from(byTimestamp.values());\n for (const bucket of merged) {\n for (const s of series) {\n if (typeof bucket[s.id] !== 'number') bucket[s.id] = 0;\n }\n }\n\n return merged.sort((a, b) => String(a.timestamp).localeCompare(String(b.timestamp)));\n }, [series]);\n\n const formatAxis = (value: string): string => {\n const d = new Date(value);\n if (granularity === 'HOUR') {\n return d.toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' });\n }\n return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric' });\n };\n\n const formatTooltip = (value: string): string =>\n new Date(value).toLocaleString(undefined, {\n month: 'short',\n day: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n\n return (\n <ResponsiveContainer width=\"100%\" height={height}>\n <AreaChart data={chartData} margin={{ top: 8, right: 8, left: 0, bottom: 0 }}>\n <defs>\n {series.map((s) => (\n <linearGradient key={s.id} id={`${gradientPrefix}-${s.id}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor={s.color} stopOpacity={0.45} />\n <stop offset=\"100%\" stopColor={s.color} stopOpacity={0.02} />\n </linearGradient>\n ))}\n </defs>\n <CartesianGrid\n strokeDasharray=\"3 3\"\n stroke=\"var(--color-border-seam)\"\n vertical={false}\n opacity={0.6}\n />\n <XAxis\n dataKey=\"timestamp\"\n tickFormatter={formatAxis}\n minTickGap={28}\n tickLine={false}\n tick={{ fill: 'var(--color-text-secondary)', fontSize: 11 }}\n axisLine={{ stroke: 'var(--color-border-seam)' }}\n />\n <YAxis\n width={36}\n allowDecimals={false}\n tickLine={false}\n tick={{ fill: 'var(--color-text-secondary)', fontSize: 11 }}\n axisLine={false}\n />\n <Tooltip\n labelFormatter={formatTooltip}\n cursor={{ stroke: 'var(--color-border-strong)', strokeWidth: 1 }}\n contentStyle={{\n background: 'var(--color-bg-surface)',\n border: '1px solid var(--color-border-seam)',\n borderRadius: 'var(--radius-card, 8px)',\n fontSize: '12px',\n color: 'var(--color-text-primary)',\n }}\n labelStyle={{ color: 'var(--color-text-secondary)' }}\n itemStyle={{ color: 'var(--color-text-primary)' }}\n />\n {series.map((s) => (\n <Area\n key={s.id}\n type=\"monotone\"\n dataKey={s.id}\n name={s.label}\n stackId=\"fleet-activity\"\n stroke={s.color}\n strokeWidth={2}\n fill={`url(#${gradientPrefix}-${s.id})`}\n dot={false}\n activeDot={{ r: 3 }}\n isAnimationActive={false}\n />\n ))}\n </AreaChart>\n </ResponsiveContainer>\n );\n}\n"],"mappings":";;;;;;;;;;AAgCA,SAAgB,EAAuB,EACrC,WACA,gBACA,YAAS,OACqB;CAC9B,IAAM,IAAiB,GAAO,CAAC,QAAQ,MAAM,GAAG;AA0ChD,QACE,kBAAC,GAAD;EAAqB,OAAM;EAAe;YACxC,kBAAC,GAAD;GAAW,MA1CG,QAA6B;IAC7C,IAAM,oBAAc,IAAI,KAA0B;AAElD,SAAK,IAAM,KAAK,EACd,MAAK,IAAM,KAAS,EAAE,QAAQ,EAAE,EAAE;KAChC,IAAM,IAAM,IAAI,KAAK,EAAM,UAAU,CAAC,aAAa,EAC7C,IAAS,EAAY,IAAI,EAAI,IAAI,EAAE,WAAW,GAAK;AAEzD,KADA,EAAO,EAAE,MAAM,EAAM,OACrB,EAAY,IAAI,GAAK,EAAO;;IAMhC,IAAM,IAAS,MAAM,KAAK,EAAY,QAAQ,CAAC;AAC/C,SAAK,IAAM,KAAU,EACnB,MAAK,IAAM,KAAK,EACd,CAAI,OAAO,EAAO,EAAE,OAAQ,aAAU,EAAO,EAAE,MAAM;AAIzD,WAAO,EAAO,MAAM,GAAG,MAAM,OAAO,EAAE,UAAU,CAAC,cAAc,OAAO,EAAE,UAAU,CAAC,CAAC;MACnF,CAAC,EAAO,CAAC;GAoBoB,QAAQ;IAAE,KAAK;IAAG,OAAO;IAAG,MAAM;IAAG,QAAQ;IAAG;aAA5E;IACE,kBAAC,QAAD,EAAA,UACG,EAAO,KAAK,MACX,kBAAC,kBAAD;KAA2B,IAAI,GAAG,EAAe,GAAG,EAAE;KAAM,IAAG;KAAI,IAAG;KAAI,IAAG;KAAI,IAAG;eAApF,CACE,kBAAC,QAAD;MAAM,QAAO;MAAK,WAAW,EAAE;MAAO,aAAa;MAAQ,CAAA,EAC3D,kBAAC,QAAD;MAAM,QAAO;MAAO,WAAW,EAAE;MAAO,aAAa;MAAQ,CAAA,CAC9C;OAHI,EAAE,GAGN,CACjB,EACG,CAAA;IACP,kBAAC,GAAD;KACE,iBAAgB;KAChB,QAAO;KACP,UAAU;KACV,SAAS;KACT,CAAA;IACF,kBAAC,GAAD;KACE,SAAQ;KACR,gBAnCY,MAA0B;MAC5C,IAAM,IAAI,IAAI,KAAK,EAAM;AAIzB,aAHI,MAAgB,SACX,EAAE,mBAAmB,KAAA,GAAW;OAAE,MAAM;OAAW,QAAQ;OAAW,CAAC,GAEzE,EAAE,mBAAmB,KAAA,GAAW;OAAE,OAAO;OAAS,KAAK;OAAW,CAAC;;KA+BpE,YAAY;KACZ,UAAU;KACV,MAAM;MAAE,MAAM;MAA+B,UAAU;MAAI;KAC3D,UAAU,EAAE,QAAQ,4BAA4B;KAChD,CAAA;IACF,kBAAC,GAAD;KACE,OAAO;KACP,eAAe;KACf,UAAU;KACV,MAAM;MAAE,MAAM;MAA+B,UAAU;MAAI;KAC3D,UAAU;KACV,CAAA;IACF,kBAAC,GAAD;KACE,iBAzCe,MACrB,IAAI,KAAK,EAAM,CAAC,eAAe,KAAA,GAAW;MACxC,OAAO;MACP,KAAK;MACL,MAAM;MACN,QAAQ;MACT,CAAC;KAoCI,QAAQ;MAAE,QAAQ;MAA8B,aAAa;MAAG;KAChE,cAAc;MACZ,YAAY;MACZ,QAAQ;MACR,cAAc;MACd,UAAU;MACV,OAAO;MACR;KACD,YAAY,EAAE,OAAO,+BAA+B;KACpD,WAAW,EAAE,OAAO,6BAA6B;KACjD,CAAA;IACD,EAAO,KAAK,MACX,kBAAC,GAAD;KAEE,MAAK;KACL,SAAS,EAAE;KACX,MAAM,EAAE;KACR,SAAQ;KACR,QAAQ,EAAE;KACV,aAAa;KACb,MAAM,QAAQ,EAAe,GAAG,EAAE,GAAG;KACrC,KAAK;KACL,WAAW,EAAE,GAAG,GAAG;KACnB,mBAAmB;KACnB,EAXK,EAAE,GAWP,CACF;IACQ;;EACQ,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FleetActivityChart.js","names":[],"sources":["../../../src/components/overview/FleetActivityChart.tsx"],"sourcesContent":["/**\n * Fleet Activity — time-bucketed sessions / AI events / action runs across the\n * workspace, with a range picker. Backed by the existing\n * `VibecontrolsAnalytics` query via `useFleetActivity`.\n */\n\nimport { Suspense, lazy, useMemo } from 'react';\nimport { Activity } from 'lucide-react';\nimport { Card, EmptyState, ErrorState } from '@/components/shared';\nimport { SkeletonLine } from '@/components/shared/PageSkeleton';\nimport { useTr } from '../../shared/hooks/useTr';\nimport type { FleetActivityRange } from './types';\nimport type { FleetActivityResult } from './useFleetAnalytics';\n\nconst FleetActivityAreaChart = lazy(() =>\n import('./FleetActivityAreaChart').then((m) => ({ default: m.FleetActivityAreaChart }))\n);\n\nconst RANGE_ORDER: readonly FleetActivityRange[] = ['LAST_24H', 'LAST_7D', 'LAST_30D'];\n\ninterface FleetActivityChartProps {\n range: FleetActivityRange;\n onRangeChange: (range: FleetActivityRange) => void;\n activity: FleetActivityResult;\n /** Called when the user follows the card through to the Analytics page. */\n onViewAnalytics?: () => void;\n}\n\nexport function FleetActivityChart({\n range,\n onRangeChange,\n activity,\n onViewAnalytics,\n}: FleetActivityChartProps) {\n const tr = useTr();\n\n const rangeLabels: Record<FleetActivityRange, string> = {\n LAST_24H: tr('vibecontrols.overview.activity.range.last24h', 'Last 24 hours'),\n LAST_7D: tr('vibecontrols.overview.activity.range.last7d', 'Last 7 days'),\n LAST_30D: tr('vibecontrols.overview.activity.range.last30d', 'Last 30 days'),\n };\n\n const series = useMemo(\n () => [\n {\n id: 'sessions',\n label: tr('vibecontrols.overview.activity.series.sessions', 'Sessions'),\n color: 'var(--color-accent-teal)',\n data: activity.sessions,\n },\n {\n id: 'aiEvents',\n label: tr('vibecontrols.overview.activity.series.aiEvents', 'AI events'),\n color: 'var(--color-accent-purple)',\n data: activity.aiEvents,\n },\n {\n id: 'actionRuns',\n label: tr('vibecontrols.overview.activity.series.actionRuns', 'Action runs'),\n color: 'var(--color-text-link)',\n data: activity.actionRuns,\n },\n ],\n [activity.sessions, activity.aiEvents, activity.actionRuns, tr]\n );\n\n const hasData = series.some((s) => (s.data?.length ?? 0) > 0);\n const isInitialLoad = activity.loading && !hasData;\n\n return (\n <Card className=\"flex h-full flex-col\">\n <div className=\"mb-5 flex flex-wrap items-center justify-between gap-3\">\n <h2 className=\"flex items-center gap-2.5 text-lg font-semibold tracking-tight text-text-primary\">\n <span className=\"inline-flex size-8 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary\">\n <Activity className=\"size-5\" />\n </span>\n {tr('vibecontrols.overview.activity.title', 'Fleet Activity')}\n </h2>\n <label className=\"flex items-center gap-2\">\n <span className=\"sr-only\">\n {tr('vibecontrols.overview.activity.rangeLabel', 'Fleet activity time range')}\n </span>\n <select\n value={range}\n onChange={(e) => onRangeChange(e.target.value as FleetActivityRange)}\n className=\"rounded-md border border-border-seam bg-bg-sunken px-2 py-1.5 text-sm text-text-primary focus:outline-none focus-visible:ring-2 focus-visible:ring-border-focus\"\n >\n {RANGE_ORDER.map((value) => (\n <option key={value} value={value}>\n {rangeLabels[value]}\n </option>\n ))}\n </select>\n </label>\n </div>\n\n {activity.error && !hasData ? (\n <ErrorState\n title={tr('vibecontrols.overview.activity.errorTitle', 'Could not load fleet activity')}\n message={tr(\n 'vibecontrols.overview.activity.errorMessage',\n 'The activity breakdown is temporarily unavailable. Try again in a moment.'\n )}\n onRetry={activity.refetch}\n />\n ) : isInitialLoad ? (\n <div className=\"flex-1 space-y-3\" aria-hidden=\"true\">\n <SkeletonLine height=\"h-[260px]\" />\n </div>\n ) : !hasData ? (\n <EmptyState\n illustration=\"empty-analytics\"\n title={tr('vibecontrols.overview.activity.emptyTitle', 'No activity in this window')}\n description={tr(\n 'vibecontrols.overview.activity.emptyDescription',\n 'Once sessions, AI tools and actions run, their volume shows up here.'\n )}\n action={\n onViewAnalytics ? (\n <button\n type=\"button\"\n onClick={onViewAnalytics}\n className=\"text-sm font-medium text-text-link hover:underline\"\n >\n {tr('vibecontrols.overview.activity.openAnalytics', 'Open analytics')}\n </button>\n ) : undefined\n }\n />\n ) : (\n <>\n <ul className=\"mb-3 flex flex-wrap items-center gap-x-4 gap-y-1\">\n {series.map((s) => (\n <li key={s.id} className=\"flex items-center gap-1.5 text-xs text-text-secondary\">\n <span\n className=\"size-2 rounded-full\"\n style={{ backgroundColor: s.color }}\n aria-hidden=\"true\"\n />\n {s.label}\n </li>\n ))}\n </ul>\n <div className=\"flex-1\">\n <Suspense fallback={<SkeletonLine height=\"h-[260px]\" />}>\n <FleetActivityAreaChart series={series} granularity={activity.granularity} />\n </Suspense>\n </div>\n </>\n )}\n </Card>\n );\n}\n"],"mappings":";;;;;;;;;;AAcA,IAAM,IAAyB,QAC7B,OAAO,+BAA4B,MAAM,OAAO,EAAE,SAAS,EAAE,wBAAwB,EAAE,CACxF,EAEK,IAA6C;CAAC;CAAY;CAAW;CAAW;AAUtF,SAAgB,EAAmB,EACjC,UACA,kBACA,aACA,sBAC0B;CAC1B,IAAM,IAAK,GAAO,EAEZ,IAAkD;EACtD,UAAU,EAAG,gDAAgD,gBAAgB;EAC7E,SAAS,EAAG,+CAA+C,cAAc;EACzE,UAAU,EAAG,gDAAgD,eAAe;EAC7E,EAEK,IAAS,QACP;EACJ;GACE,IAAI;GACJ,OAAO,EAAG,kDAAkD,WAAW;GACvE,OAAO;GACP,MAAM,EAAS;GAChB;EACD;GACE,IAAI;GACJ,OAAO,EAAG,kDAAkD,YAAY;GACxE,OAAO;GACP,MAAM,EAAS;GAChB;EACD;GACE,IAAI;GACJ,OAAO,EAAG,oDAAoD,cAAc;GAC5E,OAAO;GACP,MAAM,EAAS;GAChB;EACF,EACD;EAAC,EAAS;EAAU,EAAS;EAAU,EAAS;EAAY;EAAG,CAChE,EAEK,IAAU,EAAO,MAAM,OAAO,EAAE,MAAM,UAAU,KAAK,EAAE,EACvD,IAAgB,EAAS,WAAW,CAAC;AAE3C,QACE,kBAAC,GAAD;EAAM,WAAU;YAAhB,CACE,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,MAAD;IAAI,WAAU;cAAd,CACE,kBAAC,QAAD;KAAM,WAAU;eACd,kBAAC,GAAD,EAAU,WAAU,UAAW,CAAA;KAC1B,CAAA,EACN,EAAG,wCAAwC,iBAAiB,CAC1D;OACL,kBAAC,SAAD;IAAO,WAAU;cAAjB,CACE,kBAAC,QAAD;KAAM,WAAU;eACb,EAAG,6CAA6C,4BAA4B;KACxE,CAAA,EACP,kBAAC,UAAD;KACE,OAAO;KACP,WAAW,MAAM,EAAc,EAAE,OAAO,MAA4B;KACpE,WAAU;eAET,EAAY,KAAK,MAChB,kBAAC,UAAD;MAA2B;gBACxB,EAAY;MACN,EAFI,EAEJ,CACT;KACK,CAAA,CACH;MACJ;MAEL,EAAS,SAAS,CAAC,IAClB,kBAAC,GAAD;GACE,OAAO,EAAG,6CAA6C,gCAAgC;GACvF,SAAS,EACP,+CACA,4EACD;GACD,SAAS,EAAS;GAClB,CAAA,GACA,IACF,kBAAC,OAAD;GAAK,WAAU;GAAmB,eAAY;aAC5C,kBAAC,GAAD,EAAc,QAAO,aAAc,CAAA;GAC/B,CAAA,GACH,IAqBH,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,MAAD;GAAI,WAAU;aACX,EAAO,KAAK,MACX,kBAAC,MAAD;IAAe,WAAU;cAAzB,CACE,kBAAC,QAAD;KACE,WAAU;KACV,OAAO,EAAE,iBAAiB,EAAE,OAAO;KACnC,eAAY;KACZ,CAAA,EACD,EAAE,MACA;MAPI,EAAE,GAON,CACL;GACC,CAAA,EACL,kBAAC,OAAD;GAAK,WAAU;aACb,kBAAC,GAAD;IAAU,UAAU,kBAAC,GAAD,EAAc,QAAO,aAAc,CAAA;cACrD,kBAAC,GAAD;KAAgC;KAAQ,aAAa,EAAS;KAAe,CAAA;IACpE,CAAA;GACP,CAAA,CACL,EAAA,CAAA,GAtCH,kBAAC,GAAD;GACE,cAAa;GACb,OAAO,EAAG,6CAA6C,6BAA6B;GACpF,aAAa,EACX,mDACA,uEACD;GACD,QACE,IACE,kBAAC,UAAD;IACE,MAAK;IACL,SAAS;IACT,WAAU;cAET,EAAG,gDAAgD,iBAAiB;IAC9D,CAAA,GACP,KAAA;GAEN,CAAA,CAsBC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"FleetHealthCard.js","names":[],"sources":["../../../src/components/overview/FleetHealthCard.tsx"],"sourcesContent":["/**\n * Fleet Health — a healthy-share donut plus a per-agent status list.\n *\n * Data source: the agents already held in the cached `VibeControlsInitialData`\n * result (no extra request from the landing page). Status is derived exactly\n * the way the Health page derives it when no live deep-probe is available:\n * inactive => offline, active with a heartbeat inside 5 minutes => healthy,\n * active with a stale/absent heartbeat => degraded. The live per-component\n * probe (`VibecontrolsAgentHealthProbes`) is intentionally left to the Health\n * page — it round-trips to every agent and is too heavy for the overview.\n */\n\nimport { useMemo } from 'react';\nimport { HeartPulse } from 'lucide-react';\nimport { Card, EmptyState, ErrorState, StatusBadge } from '@/components/shared';\nimport { SkeletonLine } from '@/components/shared/PageSkeleton';\nimport { useTr } from '../../shared/hooks/useTr';\nimport type { FleetHealthEntry, FleetHealthStatus } from './types';\n\n/** An agent is considered healthy while its heartbeat is younger than this. */\nconst HEARTBEAT_FRESH_MS = 5 * 60 * 1000;\n\nexport interface FleetHealthAgentInput {\n id: string;\n name: string;\n hostname: string;\n isActive: boolean;\n lastHeartbeat?: string | null;\n}\n\nexport function deriveFleetHealth(\n agents: readonly FleetHealthAgentInput[],\n now: number\n): FleetHealthEntry[] {\n return agents.map((agent) => {\n let status: FleetHealthStatus = 'offline';\n\n if (agent.isActive) {\n const beat = agent.lastHeartbeat ? new Date(agent.lastHeartbeat).getTime() : NaN;\n status = Number.isFinite(beat) && now - beat < HEARTBEAT_FRESH_MS ? 'healthy' : 'degraded';\n }\n\n return { id: agent.id, name: agent.name, hostname: agent.hostname, status };\n });\n}\n\nconst MAX_LISTED = 5;\nconst DONUT_RADIUS = 15.5;\nconst DONUT_CIRCUMFERENCE = 2 * Math.PI * DONUT_RADIUS;\n\n// `StatusBadge` only maps UPPERCASE agent statuses, so the lowercase health\n// vocabulary is mapped explicitly here (otherwise `offline` renders neutral\n// grey instead of the error tint).\nconst STATUS_VARIANT: Record<FleetHealthStatus, 'success' | 'warning' | 'error'> = {\n healthy: 'success',\n degraded: 'warning',\n offline: 'error',\n};\n\nfunction ringToken(percent: number): string {\n if (percent >= 90) return 'var(--color-status-success-text)';\n if (percent >= 50) return 'var(--color-status-warning-text)';\n return 'var(--color-status-error-text)';\n}\n\ninterface FleetHealthCardProps {\n agents: readonly FleetHealthAgentInput[];\n loading: boolean;\n error?: Error;\n onRetry: () => void;\n onViewAll: () => void;\n onSelectAgent: (agentId: string) => void;\n onAddAgent: () => void;\n}\n\nexport function FleetHealthCard({\n agents,\n loading,\n error,\n onRetry,\n onViewAll,\n onSelectAgent,\n onAddAgent,\n}: FleetHealthCardProps) {\n const tr = useTr();\n\n const entries = useMemo(() => deriveFleetHealth(agents, Date.now()), [agents]);\n\n const healthyCount = entries.filter((e) => e.status === 'healthy').length;\n const healthyPercent =\n entries.length === 0 ? 0 : Math.round((healthyCount / entries.length) * 100);\n const ringColor = ringToken(healthyPercent);\n const dash = (healthyPercent / 100) * DONUT_CIRCUMFERENCE;\n\n // Surface the agents that need attention first — a fleet-health card that\n // lists five healthy agents while a sixth is offline is worse than useless.\n const ordered = useMemo(() => {\n const weight: Record<FleetHealthStatus, number> = { offline: 0, degraded: 1, healthy: 2 };\n return [...entries].sort((a, b) => weight[a.status] - weight[b.status]);\n }, [entries]);\n\n return (\n <Card className=\"flex h-full flex-col\">\n <div className=\"mb-5 flex items-center justify-between\">\n <h2 className=\"flex items-center gap-2.5 text-lg font-semibold tracking-tight text-text-primary\">\n <span className=\"inline-flex size-8 items-center justify-center rounded-lg bg-[var(--color-accent-soft)] text-text-primary\">\n <HeartPulse className=\"size-5\" />\n </span>\n {tr('vibecontrols.overview.health.title', 'Fleet Health')}\n </h2>\n <button\n type=\"button\"\n onClick={onViewAll}\n className=\"text-sm font-medium text-text-link hover:underline\"\n >\n {tr('vibecontrols.overview.health.viewAll', 'View all')}\n </button>\n </div>\n\n {error && entries.length === 0 ? (\n <ErrorState\n title={tr('vibecontrols.overview.health.errorTitle', 'Could not load fleet health')}\n message={tr(\n 'vibecontrols.overview.health.errorMessage',\n \"We couldn't read your agents' status. Try again in a moment.\"\n )}\n onRetry={onRetry}\n />\n ) : loading && entries.length === 0 ? (\n <div className=\"space-y-3\" aria-hidden=\"true\">\n <SkeletonLine height=\"h-16\" width=\"w-40\" />\n <SkeletonLine height=\"h-5\" />\n <SkeletonLine height=\"h-5\" />\n <SkeletonLine height=\"h-5\" />\n </div>\n ) : entries.length === 0 ? (\n <EmptyState\n illustration=\"empty-agents\"\n title={tr('vibecontrols.overview.health.emptyTitle', 'No agents registered')}\n description={tr(\n 'vibecontrols.overview.health.emptyDescription',\n 'Register an agent to start tracking fleet health.'\n )}\n action={\n <button\n type=\"button\"\n onClick={onAddAgent}\n className=\"text-sm font-medium text-text-link hover:underline\"\n >\n {tr('vibecontrols.overview.health.addAgent', 'Add agent')}\n </button>\n }\n />\n ) : (\n <>\n <div className=\"mb-5 flex items-center gap-4\">\n <svg\n viewBox=\"0 0 36 36\"\n className=\"size-16 flex-shrink-0\"\n role=\"img\"\n aria-label={tr(\n 'vibecontrols.overview.health.donutLabel',\n '{{percent}}% of agents healthy',\n { percent: healthyPercent }\n )}\n >\n <circle\n cx=\"18\"\n cy=\"18\"\n r={DONUT_RADIUS}\n fill=\"none\"\n stroke=\"var(--color-border-seam)\"\n strokeWidth=\"3\"\n />\n <circle\n cx=\"18\"\n cy=\"18\"\n r={DONUT_RADIUS}\n fill=\"none\"\n stroke={ringColor}\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeDasharray={`${dash} ${DONUT_CIRCUMFERENCE}`}\n transform=\"rotate(-90 18 18)\"\n />\n </svg>\n <div className=\"min-w-0\">\n <p className=\"text-2xl font-semibold tabular-nums text-text-primary\">\n {healthyPercent}%{' '}\n <span className=\"text-sm font-medium text-text-secondary\">\n {tr('vibecontrols.overview.health.healthy', 'healthy')}\n </span>\n </p>\n <p className=\"text-xs text-text-secondary\">\n {tr('vibecontrols.overview.health.summary', '{{healthy}} of {{total}} agents', {\n healthy: healthyCount,\n total: entries.length,\n })}\n </p>\n </div>\n </div>\n\n <ul className=\"flex-1 space-y-2\">\n {ordered.slice(0, MAX_LISTED).map((entry) => (\n <li key={entry.id}>\n <button\n type=\"button\"\n onClick={() => onSelectAgent(entry.id)}\n className=\"flex w-full items-center justify-between gap-3 rounded-button px-2 py-1.5 text-left hover:bg-bg-sunken focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus\"\n >\n <span className=\"min-w-0\">\n <span className=\"block truncate text-sm font-medium text-text-primary\">\n {entry.name}\n </span>\n <span className=\"block truncate text-xs text-text-secondary\">\n {entry.hostname}\n </span>\n </span>\n <StatusBadge status={entry.status} variant={STATUS_VARIANT[entry.status]} />\n </button>\n </li>\n ))}\n </ul>\n\n {ordered.length > MAX_LISTED && (\n <p className=\"mt-3 text-xs text-text-secondary\">\n {tr('vibecontrols.overview.health.more', '+{{count}} more', {\n count: ordered.length - MAX_LISTED,\n })}\n </p>\n )}\n </>\n )}\n </Card>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"QuickActionsCard.js","names":[],"sources":["../../../src/components/overview/QuickActionsCard.tsx"],"sourcesContent":["/**\n * Quick Actions — the mockup's right-rail shortcut stack.\n *\n * Every entry is pure in-app navigation to a route that already exists in\n * `VibeControlsRoutes`; nothing here calls a mutation, so no backend\n * capability is implied. Entries the caller has no permission for are hidden\n * rather than shown disabled.\n */\n\nimport type { ReactNode } from 'react';\nimport { CalendarClock, Plus, Server, Workflow, Zap } from 'lucide-react';\nimport { usePermissions } from '@burdenoff/fe-libs/shared/providers/shell';\nimport { Card, EmptyState } from '@/components/shared';\nimport { SkeletonLine } from '@/components/shared/PageSkeleton';\nimport { VIBE_PERMISSIONS } from '@/constants/permissions';\nimport { useTr } from '../../shared/hooks/useTr';\n\ninterface QuickAction {\n id: string;\n label: string;\n icon: ReactNode;\n to: string;\n permission: string;\n primary?: boolean;\n}\n\ninterface QuickActionsCardProps {\n onNavigate: (path: string) => void;\n}\n\nexport function QuickActionsCard({ onNavigate }: QuickActionsCardProps) {\n const tr = useTr();\n const { hasPermission, isLoading } = usePermissions();\n\n const actions: QuickAction[] = [\n {\n id: 'new-session',\n label: tr('vibecontrols.overview.quickActions.newSession', 'New Session'),\n icon: <Plus className=\"size-4\" />,\n to: '/sessions',\n permission: VIBE_PERMISSIONS.SESSION_CREATE,\n primary: true,\n },\n {\n id: 'add-agent',\n label: tr('vibecontrols.overview.quickActions.addAgent', 'Add Agent'),\n icon: <Server className=\"size-4\" />,\n to: '/agents?create=true',\n permission: VIBE_PERMISSIONS.AGENT_CREATE,\n },\n {\n id: 'review-vibes',\n label: tr('vibecontrols.overview.quickActions.reviewVibes', 'Review Vibes'),\n icon: <Zap className=\"size-4\" />,\n to: '/vibes',\n permission: VIBE_PERMISSIONS.VIBE_LIST,\n },\n {\n id: 'create-workflow',\n label: tr('vibecontrols.overview.quickActions.createWorkflow', 'Create Workflow'),\n icon: <Workflow className=\"size-4\" />,\n to: '/actions',\n permission: VIBE_PERMISSIONS.ACTION_CREATE,\n },\n {\n id: 'schedule-task',\n label: tr('vibecontrols.overview.quickActions.scheduleTask', 'Schedule Task'),\n icon: <CalendarClock className=\"size-4\" />,\n to: '/calendar',\n permission: VIBE_PERMISSIONS.CALENDAR_AGENT_TASK_CREATE,\n },\n ];\n\n const visible = actions.filter((action) => hasPermission(action.permission));\n\n return (\n <Card className=\"flex h-full flex-col\">\n <h2 className=\"mb-4 text-lg font-semibold tracking-tight text-text-primary\">\n {tr('vibecontrols.overview.quickActions.title', 'Quick Actions')}\n </h2>\n\n {isLoading ? (\n <div className=\"space-y-2\" aria-hidden=\"true\">\n <SkeletonLine height=\"h-9\" />\n <SkeletonLine height=\"h-9\" />\n <SkeletonLine height=\"h-9\" />\n </div>\n ) : visible.length === 0 ? (\n <EmptyState\n title={tr('vibecontrols.overview.quickActions.emptyTitle', 'No actions available')}\n description={tr(\n 'vibecontrols.overview.quickActions.emptyDescription',\n 'Your role does not allow creating sessions, agents, workflows or scheduled tasks.'\n )}\n />\n ) : (\n <div className=\"flex flex-col gap-2\">\n {visible.map((action) => (\n <button\n key={action.id}\n type=\"button\"\n onClick={() => onNavigate(action.to)}\n className={\n action.primary\n ? 'inline-flex w-full items-center justify-center gap-2 rounded-button bg-action-primary-bg px-3 py-2 text-sm font-semibold text-action-primary-text transition-colors duration-200 hover:bg-action-primary-bgHover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus'\n : 'inline-flex w-full items-center justify-center gap-2 rounded-button border border-border-seam bg-bg-surface px-3 py-2 text-sm font-medium text-text-primary transition-all duration-200 hover:border-border-strong hover:bg-bg-sunken focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-border-focus'\n }\n >\n {action.icon}\n {action.label}\n </button>\n ))}\n </div>\n )}\n </Card>\n );\n}\n"],"mappings":";;;;;;;;;;AA8BA,SAAgB,EAAiB,EAAE,iBAAqC;CACtE,IAAM,IAAK,GAAO,EACZ,EAAE,kBAAe,iBAAc,GAAgB,EAyC/C,IAvCyB;EAC7B;GACE,IAAI;GACJ,OAAO,EAAG,iDAAiD,cAAc;GACzE,MAAM,kBAAC,GAAD,EAAM,WAAU,UAAW,CAAA;GACjC,IAAI;GACJ,YAAY,EAAiB;GAC7B,SAAS;GACV;EACD;GACE,IAAI;GACJ,OAAO,EAAG,+CAA+C,YAAY;GACrE,MAAM,kBAAC,GAAD,EAAQ,WAAU,UAAW,CAAA;GACnC,IAAI;GACJ,YAAY,EAAiB;GAC9B;EACD;GACE,IAAI;GACJ,OAAO,EAAG,kDAAkD,eAAe;GAC3E,MAAM,kBAAC,GAAD,EAAK,WAAU,UAAW,CAAA;GAChC,IAAI;GACJ,YAAY,EAAiB;GAC9B;EACD;GACE,IAAI;GACJ,OAAO,EAAG,qDAAqD,kBAAkB;GACjF,MAAM,kBAAC,GAAD,EAAU,WAAU,UAAW,CAAA;GACrC,IAAI;GACJ,YAAY,EAAiB;GAC9B;EACD;GACE,IAAI;GACJ,OAAO,EAAG,mDAAmD,gBAAgB;GAC7E,MAAM,kBAAC,GAAD,EAAe,WAAU,UAAW,CAAA;GAC1C,IAAI;GACJ,YAAY,EAAiB;GAC9B;EACF,CAEuB,QAAQ,MAAW,EAAc,EAAO,WAAW,CAAC;AAE5E,QACE,kBAAC,GAAD;EAAM,WAAU;YAAhB,CACE,kBAAC,MAAD;GAAI,WAAU;aACX,EAAG,4CAA4C,gBAAgB;GAC7D,CAAA,EAEJ,IACC,kBAAC,OAAD;GAAK,WAAU;GAAY,eAAY;aAAvC;IACE,kBAAC,GAAD,EAAc,QAAO,OAAQ,CAAA;IAC7B,kBAAC,GAAD,EAAc,QAAO,OAAQ,CAAA;IAC7B,kBAAC,GAAD,EAAc,QAAO,OAAQ,CAAA;IACzB;OACJ,EAAQ,WAAW,IACrB,kBAAC,GAAD;GACE,OAAO,EAAG,iDAAiD,uBAAuB;GAClF,aAAa,EACX,uDACA,oFACD;GACD,CAAA,GAEF,kBAAC,OAAD;GAAK,WAAU;aACZ,EAAQ,KAAK,MACZ,kBAAC,UAAD;IAEE,MAAK;IACL,eAAe,EAAW,EAAO,GAAG;IACpC,WACE,EAAO,UACH,qSACA;cAPR,CAUG,EAAO,MACP,EAAO,MACD;MAXF,EAAO,GAWL,CACT;GACE,CAAA,CAEH"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useFleetAnalytics.js","names":[],"sources":["../../../src/components/overview/useFleetAnalytics.ts"],"sourcesContent":["/**\n * Overview analytics hooks.\n *\n * Both hooks bind to the EXISTING `VibecontrolsAnalytics` query\n * (`src/operations/wspace/vibecontrols/queries/analytics.graphql`) — the same\n * operation the Analytics page uses. `entityTypes` narrows the server-side\n * work to only the entities each widget needs.\n *\n * Variable stability matters here: Apollo re-issues a request whenever\n * `variables` change, so both hooks quantise \"now\" (to the hour / to the day)\n * instead of using a fresh `Date` on every render.\n */\n\nimport { useCallback, useMemo } from 'react';\nimport { AnalyticsEntityType } from '@/generated/wspace-types';\nimport { useVibecontrolsAnalyticsQuery } from '@/generated/wspace-operations';\nimport type { FleetActivityGranularity, FleetActivityPoint, FleetActivityRange } from './types';\n\ninterface RangeConfig {\n hours: number;\n granularity: FleetActivityGranularity;\n}\n\nconst RANGE_CONFIG: Record<FleetActivityRange, RangeConfig> = {\n LAST_24H: { hours: 24, granularity: 'HOUR' },\n LAST_7D: { hours: 24 * 7, granularity: 'DAY' },\n LAST_30D: { hours: 24 * 30, granularity: 'DAY' },\n};\n\n/** Current hour, minutes/seconds zeroed — stable for up to an hour. */\nfunction currentHourKey(): string {\n const d = new Date();\n d.setMinutes(0, 0, 0);\n return d.toISOString();\n}\n\n/** Local midnight of the current day — stable for the whole day. */\nfunction currentDayKey(): string {\n const d = new Date();\n d.setHours(0, 0, 0, 0);\n return d.toISOString();\n}\n\nexport interface FleetActivityResult {\n sessions: readonly FleetActivityPoint[];\n aiEvents: readonly FleetActivityPoint[];\n actionRuns: readonly FleetActivityPoint[];\n granularity: FleetActivityGranularity;\n loading: boolean;\n error?: Error;\n refetch: () => void;\n}\n\n/**\n * Time-bucketed fleet activity (sessions started, AI tool events, action runs)\n * for the selected window.\n */\nexport function useFleetActivity(range: FleetActivityRange, enabled: boolean): FleetActivityResult {\n const { hours, granularity } = RANGE_CONFIG[range];\n const hourKey = currentHourKey();\n\n const variables = useMemo(() => {\n // Round the window up to the end of the in-progress hour so the newest\n // bucket is included rather than clipped mid-way.\n const endDate = new Date(hourKey);\n endDate.setHours(endDate.getHours() + 1);\n const startDate = new Date(endDate);\n startDate.setHours(startDate.getHours() - hours);\n\n return {\n input: {\n startDate: startDate.toISOString(),\n endDate: endDate.toISOString(),\n granularity,\n entityTypes: [\n AnalyticsEntityType.Session,\n AnalyticsEntityType.AiEvent,\n AnalyticsEntityType.Action,\n ],\n },\n };\n }, [hourKey, hours, granularity]);\n\n const { data, loading, error, refetch } = useVibecontrolsAnalyticsQuery({\n variables,\n skip: !enabled,\n fetchPolicy: 'cache-and-network',\n nextFetchPolicy: 'cache-first',\n notifyOnNetworkStatusChange: true,\n });\n\n const handleRefetch = useCallback(() => {\n void refetch();\n }, [refetch]);\n\n const analytics = data?.vibecontrolsAnalytics;\n\n return {\n sessions: analytics?.sessions?.createdOverTime ?? [],\n aiEvents: analytics?.aiEvents?.eventsOverTime ?? [],\n actionRuns: analytics?.actions?.executionsOverTime ?? [],\n granularity,\n loading,\n error,\n refetch: handleRefetch,\n };\n}\n\nexport interface AiRunsTodayResult {\n /** Null until the first result lands (or when the caller is not permitted). */\n total: number | null;\n loading: boolean;\n error?: Error;\n refetch: () => void;\n}\n\n/**\n * Count of AI tool events recorded since local midnight — the \"AI Runs Today\"\n * KPI. Scoped server-side to the AiEvent entity only.\n */\nexport function useAiRunsToday(enabled: boolean): AiRunsTodayResult {\n const dayKey = currentDayKey();\n\n const variables = useMemo(() => {\n const startDate = new Date(dayKey);\n const endDate = new Date(startDate);\n endDate.setDate(endDate.getDate() + 1);\n\n return {\n input: {\n startDate: startDate.toISOString(),\n endDate: endDate.toISOString(),\n granularity: 'HOUR',\n entityTypes: [AnalyticsEntityType.AiEvent],\n },\n };\n }, [dayKey]);\n\n const { data, loading, error, refetch } = useVibecontrolsAnalyticsQuery({\n variables,\n skip: !enabled,\n fetchPolicy: 'cache-and-network',\n nextFetchPolicy: 'cache-first',\n notifyOnNetworkStatusChange: true,\n });\n\n const handleRefetch = useCallback(() => {\n void refetch();\n }, [refetch]);\n\n const total = data?.vibecontrolsAnalytics?.aiEvents?.total;\n\n return {\n total: typeof total === 'number' ? total : null,\n loading,\n error,\n refetch: handleRefetch,\n };\n}\n"],"mappings":";;;;AAuBA,IAAM,IAAwD;CAC5D,UAAU;EAAE,OAAO;EAAI,aAAa;EAAQ;CAC5C,SAAS;EAAE,OAAO;EAAQ,aAAa;EAAO;CAC9C,UAAU;EAAE,OAAO;EAAS,aAAa;EAAO;CACjD;AAGD,SAAS,IAAyB;CAChC,IAAM,oBAAI,IAAI,MAAM;AAEpB,QADA,EAAE,WAAW,GAAG,GAAG,EAAE,EACd,EAAE,aAAa;;AAIxB,SAAS,IAAwB;CAC/B,IAAM,oBAAI,IAAI,MAAM;AAEpB,QADA,EAAE,SAAS,GAAG,GAAG,GAAG,EAAE,EACf,EAAE,aAAa;;AAiBxB,SAAgB,EAAiB,GAA2B,GAAuC;CACjG,IAAM,EAAE,UAAO,mBAAgB,EAAa,IACtC,IAAU,GAAgB,EAwB1B,EAAE,SAAM,YAAS,UAAO,eAAY,EAA8B;EACtE,WAvBgB,QAAc;GAG9B,IAAM,IAAU,IAAI,KAAK,EAAQ;AACjC,KAAQ,SAAS,EAAQ,UAAU,GAAG,EAAE;GACxC,IAAM,IAAY,IAAI,KAAK,EAAQ;AAGnC,UAFA,EAAU,SAAS,EAAU,UAAU,GAAG,EAAM,EAEzC,EACL,OAAO;IACL,WAAW,EAAU,aAAa;IAClC,SAAS,EAAQ,aAAa;IAC9B;IACA,aAAa;KACX,EAAoB;KACpB,EAAoB;KACpB,EAAoB;KACrB;IACF,EACF;KACA;GAAC;GAAS;GAAO;GAAY,CAAC;EAI/B,MAAM,CAAC;EACP,aAAa;EACb,iBAAiB;EACjB,6BAA6B;EAC9B,CAAC,EAEI,IAAgB,QAAkB;AACjC,KAAS;IACb,CAAC,EAAQ,CAAC,EAEP,IAAY,GAAM;AAExB,QAAO;EACL,UAAU,GAAW,UAAU,mBAAmB,EAAE;EACpD,UAAU,GAAW,UAAU,kBAAkB,EAAE;EACnD,YAAY,GAAW,SAAS,sBAAsB,EAAE;EACxD;EACA;EACA;EACA,SAAS;EACV;;AAeH,SAAgB,EAAe,GAAqC;CAClE,IAAM,IAAS,GAAe,EAiBxB,EAAE,SAAM,YAAS,UAAO,eAAY,EAA8B;EACtE,WAhBgB,QAAc;GAC9B,IAAM,IAAY,IAAI,KAAK,EAAO,EAC5B,IAAU,IAAI,KAAK,EAAU;AAGnC,UAFA,EAAQ,QAAQ,EAAQ,SAAS,GAAG,EAAE,EAE/B,EACL,OAAO;IACL,WAAW,EAAU,aAAa;IAClC,SAAS,EAAQ,aAAa;IAC9B,aAAa;IACb,aAAa,CAAC,EAAoB,QAAQ;IAC3C,EACF;KACA,CAAC,EAAO,CAAC;EAIV,MAAM,CAAC;EACP,aAAa;EACb,iBAAiB;EACjB,6BAA6B;EAC9B,CAAC,EAEI,IAAgB,QAAkB;AACjC,KAAS;IACb,CAAC,EAAQ,CAAC,EAEP,IAAQ,GAAM,uBAAuB,UAAU;AAErD,QAAO;EACL,OAAO,OAAO,KAAU,WAAW,IAAQ;EAC3C;EACA;EACA,SAAS;EACV"}
|