@stigmer/react 0.4.8 → 0.5.0
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/action-menu/ActionMenu.d.ts +64 -0
- package/action-menu/ActionMenu.d.ts.map +1 -0
- package/action-menu/ActionMenu.js +78 -0
- package/action-menu/ActionMenu.js.map +1 -0
- package/action-menu/index.d.ts +3 -0
- package/action-menu/index.d.ts.map +1 -0
- package/action-menu/index.js +2 -0
- package/action-menu/index.js.map +1 -0
- package/action-menu/types.d.ts +65 -0
- package/action-menu/types.d.ts.map +1 -0
- package/action-menu/types.js +2 -0
- package/action-menu/types.js.map +1 -0
- package/agent/AgentCreationWizard.d.ts +55 -0
- package/agent/AgentCreationWizard.d.ts.map +1 -0
- package/agent/AgentCreationWizard.js +115 -0
- package/agent/AgentCreationWizard.js.map +1 -0
- package/agent/AgentDetailView.d.ts +77 -9
- package/agent/AgentDetailView.d.ts.map +1 -1
- package/agent/AgentDetailView.js +265 -87
- package/agent/AgentDetailView.js.map +1 -1
- package/agent/index.d.ts +8 -0
- package/agent/index.d.ts.map +1 -1
- package/agent/index.js +4 -0
- package/agent/index.js.map +1 -1
- package/agent/internal/agentToInput.d.ts +12 -0
- package/agent/internal/agentToInput.d.ts.map +1 -0
- package/agent/internal/agentToInput.js +72 -0
- package/agent/internal/agentToInput.js.map +1 -0
- package/agent/steps/CapabilitiesStep.d.ts +16 -0
- package/agent/steps/CapabilitiesStep.d.ts.map +1 -0
- package/agent/steps/CapabilitiesStep.js +80 -0
- package/agent/steps/CapabilitiesStep.js.map +1 -0
- package/agent/steps/IdentityStep.d.ts +18 -0
- package/agent/steps/IdentityStep.d.ts.map +1 -0
- package/agent/steps/IdentityStep.js +43 -0
- package/agent/steps/IdentityStep.js.map +1 -0
- package/agent/steps/ReviewStep.d.ts +23 -0
- package/agent/steps/ReviewStep.d.ts.map +1 -0
- package/agent/steps/ReviewStep.js +73 -0
- package/agent/steps/ReviewStep.js.map +1 -0
- package/agent/steps/types.d.ts +35 -0
- package/agent/steps/types.d.ts.map +1 -0
- package/agent/steps/types.js +16 -0
- package/agent/steps/types.js.map +1 -0
- package/agent/useCreateAgent.d.ts +45 -0
- package/agent/useCreateAgent.d.ts.map +1 -0
- package/agent/useCreateAgent.js +50 -0
- package/agent/useCreateAgent.js.map +1 -0
- package/agent/useUpdateAgent.d.ts +24 -0
- package/agent/useUpdateAgent.d.ts.map +1 -0
- package/agent/useUpdateAgent.js +35 -0
- package/agent/useUpdateAgent.js.map +1 -0
- package/dependency-graph/DependencyGraph.d.ts +37 -0
- package/dependency-graph/DependencyGraph.d.ts.map +1 -0
- package/dependency-graph/DependencyGraph.js +88 -0
- package/dependency-graph/DependencyGraph.js.map +1 -0
- package/dependency-graph/DependencyTreeNode.d.ts +23 -0
- package/dependency-graph/DependencyTreeNode.d.ts.map +1 -0
- package/dependency-graph/DependencyTreeNode.js +99 -0
- package/dependency-graph/DependencyTreeNode.js.map +1 -0
- package/dependency-graph/index.d.ts +4 -0
- package/dependency-graph/index.d.ts.map +1 -0
- package/dependency-graph/index.js +5 -0
- package/dependency-graph/index.js.map +1 -0
- package/dependency-graph/types.d.ts +130 -0
- package/dependency-graph/types.d.ts.map +1 -0
- package/dependency-graph/types.js +2 -0
- package/dependency-graph/types.js.map +1 -0
- package/dependency-graph/useDependencyGraph.d.ts +27 -0
- package/dependency-graph/useDependencyGraph.d.ts.map +1 -0
- package/dependency-graph/useDependencyGraph.js +129 -0
- package/dependency-graph/useDependencyGraph.js.map +1 -0
- package/empty-state/EmptyState.d.ts +29 -0
- package/empty-state/EmptyState.d.ts.map +1 -0
- package/empty-state/EmptyState.js +45 -0
- package/empty-state/EmptyState.js.map +1 -0
- package/empty-state/index.d.ts +4 -0
- package/empty-state/index.d.ts.map +1 -0
- package/empty-state/index.js +3 -0
- package/empty-state/index.js.map +1 -0
- package/empty-state/types.d.ts +73 -0
- package/empty-state/types.d.ts.map +1 -0
- package/empty-state/types.js +2 -0
- package/empty-state/types.js.map +1 -0
- package/empty-state/useEmptyState.d.ts +18 -0
- package/empty-state/useEmptyState.d.ts.map +1 -0
- package/empty-state/useEmptyState.js +72 -0
- package/empty-state/useEmptyState.js.map +1 -0
- package/feedback/StigmerToaster.d.ts +18 -0
- package/feedback/StigmerToaster.d.ts.map +1 -0
- package/feedback/StigmerToaster.js +31 -0
- package/feedback/StigmerToaster.js.map +1 -0
- package/feedback/index.d.ts +4 -0
- package/feedback/index.d.ts.map +1 -0
- package/feedback/index.js +3 -0
- package/feedback/index.js.map +1 -0
- package/feedback/toast.d.ts +14 -0
- package/feedback/toast.d.ts.map +1 -0
- package/feedback/toast.js +14 -0
- package/feedback/toast.js.map +1 -0
- package/feedback/types.d.ts +4 -0
- package/feedback/types.d.ts.map +1 -0
- package/feedback/types.js +2 -0
- package/feedback/types.js.map +1 -0
- package/index.d.ts +30 -10
- package/index.d.ts.map +1 -1
- package/index.js +29 -9
- package/index.js.map +1 -1
- package/inline-edit/InlineEditImage.d.ts +20 -0
- package/inline-edit/InlineEditImage.d.ts.map +1 -0
- package/inline-edit/InlineEditImage.js +85 -0
- package/inline-edit/InlineEditImage.js.map +1 -0
- package/inline-edit/InlineEditKeyValue.d.ts +29 -0
- package/inline-edit/InlineEditKeyValue.d.ts.map +1 -0
- package/inline-edit/InlineEditKeyValue.js +67 -0
- package/inline-edit/InlineEditKeyValue.js.map +1 -0
- package/inline-edit/InlineEditResourceList.d.ts +34 -0
- package/inline-edit/InlineEditResourceList.d.ts.map +1 -0
- package/inline-edit/InlineEditResourceList.js +99 -0
- package/inline-edit/InlineEditResourceList.js.map +1 -0
- package/inline-edit/InlineEditSelect.d.ts +18 -0
- package/inline-edit/InlineEditSelect.d.ts.map +1 -0
- package/inline-edit/InlineEditSelect.js +54 -0
- package/inline-edit/InlineEditSelect.js.map +1 -0
- package/inline-edit/InlineEditText.d.ts +23 -0
- package/inline-edit/InlineEditText.d.ts.map +1 -0
- package/inline-edit/InlineEditText.js +79 -0
- package/inline-edit/InlineEditText.js.map +1 -0
- package/inline-edit/InlineEditTextarea.d.ts +22 -0
- package/inline-edit/InlineEditTextarea.d.ts.map +1 -0
- package/inline-edit/InlineEditTextarea.js +83 -0
- package/inline-edit/InlineEditTextarea.js.map +1 -0
- package/inline-edit/index.d.ts +16 -0
- package/inline-edit/index.d.ts.map +1 -0
- package/inline-edit/index.js +8 -0
- package/inline-edit/index.js.map +1 -0
- package/inline-edit/types.d.ts +42 -0
- package/inline-edit/types.d.ts.map +1 -0
- package/inline-edit/types.js +2 -0
- package/inline-edit/types.js.map +1 -0
- package/inline-edit/useInlineFieldSave.d.ts +23 -0
- package/inline-edit/useInlineFieldSave.d.ts.map +1 -0
- package/inline-edit/useInlineFieldSave.js +44 -0
- package/inline-edit/useInlineFieldSave.js.map +1 -0
- package/internal/Tabs.d.ts +4 -38
- package/internal/Tabs.d.ts.map +1 -1
- package/internal/Tabs.js +3 -62
- package/internal/Tabs.js.map +1 -1
- package/library/ImportResourceDialog.d.ts +43 -0
- package/library/ImportResourceDialog.d.ts.map +1 -0
- package/library/ImportResourceDialog.js +90 -0
- package/library/ImportResourceDialog.js.map +1 -0
- package/library/index.d.ts +7 -4
- package/library/index.d.ts.map +1 -1
- package/library/index.js +4 -2
- package/library/index.js.map +1 -1
- package/library/serialize-resource-yaml.d.ts +53 -0
- package/library/serialize-resource-yaml.d.ts.map +1 -1
- package/library/serialize-resource-yaml.js +275 -0
- package/library/serialize-resource-yaml.js.map +1 -1
- package/library/useExportResource.d.ts +56 -0
- package/library/useExportResource.d.ts.map +1 -0
- package/library/useExportResource.js +137 -0
- package/library/useExportResource.js.map +1 -0
- package/library/useImportResource.d.ts +84 -0
- package/library/useImportResource.d.ts.map +1 -0
- package/library/useImportResource.js +188 -0
- package/library/useImportResource.js.map +1 -0
- package/mcp-server/McpServerCreationWizard.d.ts +55 -0
- package/mcp-server/McpServerCreationWizard.d.ts.map +1 -0
- package/mcp-server/McpServerCreationWizard.js +121 -0
- package/mcp-server/McpServerCreationWizard.js.map +1 -0
- package/mcp-server/McpServerDetailView.d.ts +21 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +113 -20
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/index.d.ts +8 -0
- package/mcp-server/index.d.ts.map +1 -1
- package/mcp-server/index.js +4 -0
- package/mcp-server/index.js.map +1 -1
- package/mcp-server/internal/mcpServerToInput.d.ts +12 -0
- package/mcp-server/internal/mcpServerToInput.d.ts.map +1 -0
- package/mcp-server/internal/mcpServerToInput.js +81 -0
- package/mcp-server/internal/mcpServerToInput.js.map +1 -0
- package/mcp-server/steps/EnvironmentAuthStep.d.ts +15 -0
- package/mcp-server/steps/EnvironmentAuthStep.d.ts.map +1 -0
- package/mcp-server/steps/EnvironmentAuthStep.js +55 -0
- package/mcp-server/steps/EnvironmentAuthStep.js.map +1 -0
- package/mcp-server/steps/IdentityTransportStep.d.ts +19 -0
- package/mcp-server/steps/IdentityTransportStep.d.ts.map +1 -0
- package/mcp-server/steps/IdentityTransportStep.js +73 -0
- package/mcp-server/steps/IdentityTransportStep.js.map +1 -0
- package/mcp-server/steps/ReviewStep.d.ts +23 -0
- package/mcp-server/steps/ReviewStep.d.ts.map +1 -0
- package/mcp-server/steps/ReviewStep.js +137 -0
- package/mcp-server/steps/ReviewStep.js.map +1 -0
- package/mcp-server/steps/types.d.ts +56 -0
- package/mcp-server/steps/types.d.ts.map +1 -0
- package/mcp-server/steps/types.js +27 -0
- package/mcp-server/steps/types.js.map +1 -0
- package/mcp-server/useCreateMcpServer.d.ts +45 -0
- package/mcp-server/useCreateMcpServer.d.ts.map +1 -0
- package/mcp-server/useCreateMcpServer.js +50 -0
- package/mcp-server/useCreateMcpServer.js.map +1 -0
- package/mcp-server/useUpdateMcpServer.d.ts +24 -0
- package/mcp-server/useUpdateMcpServer.d.ts.map +1 -0
- package/mcp-server/useUpdateMcpServer.js +35 -0
- package/mcp-server/useUpdateMcpServer.js.map +1 -0
- package/package.json +8 -4
- package/resource-creation/CreationPicker.d.ts +60 -0
- package/resource-creation/CreationPicker.d.ts.map +1 -0
- package/resource-creation/CreationPicker.js +74 -0
- package/resource-creation/CreationPicker.js.map +1 -0
- package/resource-creation/StepIndicator.d.ts +28 -0
- package/resource-creation/StepIndicator.d.ts.map +1 -0
- package/resource-creation/StepIndicator.js +40 -0
- package/resource-creation/StepIndicator.js.map +1 -0
- package/resource-creation/TemplateCard.d.ts +24 -0
- package/resource-creation/TemplateCard.d.ts.map +1 -0
- package/resource-creation/TemplateCard.js +68 -0
- package/resource-creation/TemplateCard.js.map +1 -0
- package/resource-creation/TemplateGallery.d.ts +43 -0
- package/resource-creation/TemplateGallery.d.ts.map +1 -0
- package/resource-creation/TemplateGallery.js +78 -0
- package/resource-creation/TemplateGallery.js.map +1 -0
- package/resource-creation/WizardNav.d.ts +31 -0
- package/resource-creation/WizardNav.d.ts.map +1 -0
- package/resource-creation/WizardNav.js +29 -0
- package/resource-creation/WizardNav.js.map +1 -0
- package/resource-creation/WizardShell.d.ts +41 -0
- package/resource-creation/WizardShell.d.ts.map +1 -0
- package/resource-creation/WizardShell.js +55 -0
- package/resource-creation/WizardShell.js.map +1 -0
- package/resource-creation/index.d.ts +21 -0
- package/resource-creation/index.d.ts.map +1 -0
- package/resource-creation/index.js +14 -0
- package/resource-creation/index.js.map +1 -0
- package/resource-creation/templates/agent-templates.d.ts +15 -0
- package/resource-creation/templates/agent-templates.d.ts.map +1 -0
- package/resource-creation/templates/agent-templates.js +148 -0
- package/resource-creation/templates/agent-templates.js.map +1 -0
- package/resource-creation/templates/index.d.ts +5 -0
- package/resource-creation/templates/index.d.ts.map +1 -0
- package/resource-creation/templates/index.js +5 -0
- package/resource-creation/templates/index.js.map +1 -0
- package/resource-creation/templates/mcp-server-templates.d.ts +15 -0
- package/resource-creation/templates/mcp-server-templates.d.ts.map +1 -0
- package/resource-creation/templates/mcp-server-templates.js +92 -0
- package/resource-creation/templates/mcp-server-templates.js.map +1 -0
- package/resource-creation/templates/types.d.ts +48 -0
- package/resource-creation/templates/types.d.ts.map +1 -0
- package/resource-creation/templates/types.js +16 -0
- package/resource-creation/templates/types.js.map +1 -0
- package/resource-creation/types.d.ts +88 -0
- package/resource-creation/types.d.ts.map +1 -0
- package/resource-creation/types.js +2 -0
- package/resource-creation/types.js.map +1 -0
- package/resource-creation/useTemplateFilter.d.ts +43 -0
- package/resource-creation/useTemplateFilter.d.ts.map +1 -0
- package/resource-creation/useTemplateFilter.js +73 -0
- package/resource-creation/useTemplateFilter.js.map +1 -0
- package/resource-creation/useWizardState.d.ts +67 -0
- package/resource-creation/useWizardState.d.ts.map +1 -0
- package/resource-creation/useWizardState.js +143 -0
- package/resource-creation/useWizardState.js.map +1 -0
- package/resource-detail/ConfirmDialog.d.ts +44 -0
- package/resource-detail/ConfirmDialog.d.ts.map +1 -0
- package/resource-detail/ConfirmDialog.js +62 -0
- package/resource-detail/ConfirmDialog.js.map +1 -0
- package/resource-detail/ResourceActionBar.d.ts +42 -0
- package/resource-detail/ResourceActionBar.d.ts.map +1 -0
- package/resource-detail/ResourceActionBar.js +64 -0
- package/resource-detail/ResourceActionBar.js.map +1 -0
- package/resource-detail/ResourceDetailShell.d.ts +36 -0
- package/resource-detail/ResourceDetailShell.d.ts.map +1 -0
- package/resource-detail/ResourceDetailShell.js +65 -0
- package/resource-detail/ResourceDetailShell.js.map +1 -0
- package/resource-detail/Section.d.ts +18 -0
- package/resource-detail/Section.d.ts.map +1 -0
- package/resource-detail/Section.js +18 -0
- package/resource-detail/Section.js.map +1 -0
- package/resource-detail/index.d.ts +15 -0
- package/resource-detail/index.d.ts.map +1 -0
- package/resource-detail/index.js +10 -0
- package/resource-detail/index.js.map +1 -0
- package/resource-detail/types.d.ts +146 -0
- package/resource-detail/types.d.ts.map +1 -0
- package/resource-detail/types.js +2 -0
- package/resource-detail/types.js.map +1 -0
- package/resource-detail/useConfirmAction.d.ts +41 -0
- package/resource-detail/useConfirmAction.d.ts.map +1 -0
- package/resource-detail/useConfirmAction.js +30 -0
- package/resource-detail/useConfirmAction.js.map +1 -0
- package/resource-detail/useCopyResource.d.ts +28 -0
- package/resource-detail/useCopyResource.d.ts.map +1 -0
- package/resource-detail/useCopyResource.js +46 -0
- package/resource-detail/useCopyResource.js.map +1 -0
- package/resource-detail/useDeleteResource.d.ts +40 -0
- package/resource-detail/useDeleteResource.d.ts.map +1 -0
- package/resource-detail/useDeleteResource.js +83 -0
- package/resource-detail/useDeleteResource.js.map +1 -0
- package/resource-detail/useDetailTabs.d.ts +46 -0
- package/resource-detail/useDetailTabs.d.ts.map +1 -0
- package/resource-detail/useDetailTabs.js +47 -0
- package/resource-detail/useDetailTabs.js.map +1 -0
- package/resource-workbench/components/BulkActionBar.d.ts +36 -0
- package/resource-workbench/components/BulkActionBar.d.ts.map +1 -0
- package/resource-workbench/components/BulkActionBar.js +35 -0
- package/resource-workbench/components/BulkActionBar.js.map +1 -0
- package/resource-workbench/components/ColumnHeader.d.ts +23 -0
- package/resource-workbench/components/ColumnHeader.d.ts.map +1 -0
- package/resource-workbench/components/ColumnHeader.js +25 -0
- package/resource-workbench/components/ColumnHeader.js.map +1 -0
- package/resource-workbench/components/FilterBar.d.ts +33 -0
- package/resource-workbench/components/FilterBar.d.ts.map +1 -0
- package/resource-workbench/components/FilterBar.js +72 -0
- package/resource-workbench/components/FilterBar.js.map +1 -0
- package/resource-workbench/components/ResourceAvatar.d.ts +29 -0
- package/resource-workbench/components/ResourceAvatar.d.ts.map +1 -0
- package/resource-workbench/components/ResourceAvatar.js +51 -0
- package/resource-workbench/components/ResourceAvatar.js.map +1 -0
- package/resource-workbench/components/ResourceCards.d.ts +39 -0
- package/resource-workbench/components/ResourceCards.d.ts.map +1 -0
- package/resource-workbench/components/ResourceCards.js +41 -0
- package/resource-workbench/components/ResourceCards.js.map +1 -0
- package/resource-workbench/components/ResourceInspector.d.ts +26 -0
- package/resource-workbench/components/ResourceInspector.d.ts.map +1 -0
- package/resource-workbench/components/ResourceInspector.js +22 -0
- package/resource-workbench/components/ResourceInspector.js.map +1 -0
- package/resource-workbench/components/ResourceList.d.ts +39 -0
- package/resource-workbench/components/ResourceList.d.ts.map +1 -0
- package/resource-workbench/components/ResourceList.js +41 -0
- package/resource-workbench/components/ResourceList.js.map +1 -0
- package/resource-workbench/components/ResourceTable.d.ts +47 -0
- package/resource-workbench/components/ResourceTable.d.ts.map +1 -0
- package/resource-workbench/components/ResourceTable.js +78 -0
- package/resource-workbench/components/ResourceTable.js.map +1 -0
- package/resource-workbench/components/ResourceWorkbench.d.ts +131 -0
- package/resource-workbench/components/ResourceWorkbench.d.ts.map +1 -0
- package/resource-workbench/components/ResourceWorkbench.js +170 -0
- package/resource-workbench/components/ResourceWorkbench.js.map +1 -0
- package/resource-workbench/components/SelectionCheckbox.d.ts +24 -0
- package/resource-workbench/components/SelectionCheckbox.d.ts.map +1 -0
- package/resource-workbench/components/SelectionCheckbox.js +16 -0
- package/resource-workbench/components/SelectionCheckbox.js.map +1 -0
- package/resource-workbench/components/StatusBadge.d.ts +31 -0
- package/resource-workbench/components/StatusBadge.d.ts.map +1 -0
- package/resource-workbench/components/StatusBadge.js +75 -0
- package/resource-workbench/components/StatusBadge.js.map +1 -0
- package/resource-workbench/components/ViewSwitcher.d.ts +21 -0
- package/resource-workbench/components/ViewSwitcher.d.ts.map +1 -0
- package/resource-workbench/components/ViewSwitcher.js +37 -0
- package/resource-workbench/components/ViewSwitcher.js.map +1 -0
- package/resource-workbench/hooks/useResourceCollection.d.ts +93 -0
- package/resource-workbench/hooks/useResourceCollection.d.ts.map +1 -0
- package/resource-workbench/hooks/useResourceCollection.js +133 -0
- package/resource-workbench/hooks/useResourceCollection.js.map +1 -0
- package/resource-workbench/hooks/useResourceFilters.d.ts +73 -0
- package/resource-workbench/hooks/useResourceFilters.d.ts.map +1 -0
- package/resource-workbench/hooks/useResourceFilters.js +105 -0
- package/resource-workbench/hooks/useResourceFilters.js.map +1 -0
- package/resource-workbench/hooks/useResourceSelection.d.ts +44 -0
- package/resource-workbench/hooks/useResourceSelection.d.ts.map +1 -0
- package/resource-workbench/hooks/useResourceSelection.js +123 -0
- package/resource-workbench/hooks/useResourceSelection.js.map +1 -0
- package/resource-workbench/hooks/useViewPreference.d.ts +32 -0
- package/resource-workbench/hooks/useViewPreference.d.ts.map +1 -0
- package/resource-workbench/hooks/useViewPreference.js +60 -0
- package/resource-workbench/hooks/useViewPreference.js.map +1 -0
- package/resource-workbench/index.d.ts +34 -0
- package/resource-workbench/index.d.ts.map +1 -0
- package/resource-workbench/index.js +19 -0
- package/resource-workbench/index.js.map +1 -0
- package/resource-workbench/types.d.ts +165 -0
- package/resource-workbench/types.d.ts.map +1 -0
- package/resource-workbench/types.js +2 -0
- package/resource-workbench/types.js.map +1 -0
- package/runner/RunnerDetailView.d.ts +44 -0
- package/runner/RunnerDetailView.d.ts.map +1 -0
- package/runner/RunnerDetailView.js +154 -0
- package/runner/RunnerDetailView.js.map +1 -0
- package/runner/RunnerListPanel.d.ts +26 -1
- package/runner/RunnerListPanel.d.ts.map +1 -1
- package/runner/RunnerListPanel.js +68 -46
- package/runner/RunnerListPanel.js.map +1 -1
- package/runner/index.d.ts +7 -1
- package/runner/index.d.ts.map +1 -1
- package/runner/index.js +3 -0
- package/runner/index.js.map +1 -1
- package/runner/shared.d.ts +31 -0
- package/runner/shared.d.ts.map +1 -0
- package/runner/shared.js +55 -0
- package/runner/shared.js.map +1 -0
- package/runner/useRunner.d.ts +37 -0
- package/runner/useRunner.d.ts.map +1 -0
- package/runner/useRunner.js +24 -0
- package/runner/useRunner.js.map +1 -0
- package/session/__tests__/group-sessions.test.js +3 -3
- package/session/__tests__/group-sessions.test.js.map +1 -1
- package/skill/SkillDetailView.d.ts +70 -7
- package/skill/SkillDetailView.d.ts.map +1 -1
- package/skill/SkillDetailView.js +107 -39
- package/skill/SkillDetailView.js.map +1 -1
- package/skill/SkillDiffDialog.d.ts +42 -0
- package/skill/SkillDiffDialog.d.ts.map +1 -0
- package/skill/SkillDiffDialog.js +72 -0
- package/skill/SkillDiffDialog.js.map +1 -0
- package/skill/SkillFileBrowser.d.ts +31 -0
- package/skill/SkillFileBrowser.d.ts.map +1 -0
- package/skill/SkillFileBrowser.js +105 -0
- package/skill/SkillFileBrowser.js.map +1 -0
- package/skill/SkillUploader.d.ts +39 -0
- package/skill/SkillUploader.d.ts.map +1 -0
- package/skill/SkillUploader.js +141 -0
- package/skill/SkillUploader.js.map +1 -0
- package/skill/index.d.ts +18 -0
- package/skill/index.d.ts.map +1 -1
- package/skill/index.js +9 -0
- package/skill/index.js.map +1 -1
- package/skill/internal/computeArtifactHash.d.ts +9 -0
- package/skill/internal/computeArtifactHash.d.ts.map +1 -0
- package/skill/internal/computeArtifactHash.js +14 -0
- package/skill/internal/computeArtifactHash.js.map +1 -0
- package/skill/internal/fetchAndUnpackArtifact.d.ts +16 -0
- package/skill/internal/fetchAndUnpackArtifact.d.ts.map +1 -0
- package/skill/internal/fetchAndUnpackArtifact.js +34 -0
- package/skill/internal/fetchAndUnpackArtifact.js.map +1 -0
- package/skill/usePushSkill.d.ts +53 -0
- package/skill/usePushSkill.d.ts.map +1 -0
- package/skill/usePushSkill.js +57 -0
- package/skill/usePushSkill.js.map +1 -0
- package/skill/useSkillArtifact.d.ts +37 -0
- package/skill/useSkillArtifact.d.ts.map +1 -0
- package/skill/useSkillArtifact.js +76 -0
- package/skill/useSkillArtifact.js.map +1 -0
- package/skill/useSkillDiff.d.ts +31 -0
- package/skill/useSkillDiff.d.ts.map +1 -0
- package/skill/useSkillDiff.js +97 -0
- package/skill/useSkillDiff.js.map +1 -0
- package/skill/useSkillDuplicateCheck.d.ts +34 -0
- package/skill/useSkillDuplicateCheck.d.ts.map +1 -0
- package/skill/useSkillDuplicateCheck.js +58 -0
- package/skill/useSkillDuplicateCheck.js.map +1 -0
- package/skill/useSkillUpload.d.ts +69 -0
- package/skill/useSkillUpload.d.ts.map +1 -0
- package/skill/useSkillUpload.js +157 -0
- package/skill/useSkillUpload.js.map +1 -0
- package/skill/useSkillVersions.d.ts +46 -0
- package/skill/useSkillVersions.d.ts.map +1 -0
- package/skill/useSkillVersions.js +104 -0
- package/skill/useSkillVersions.js.map +1 -0
- package/src/action-menu/ActionMenu.tsx +151 -0
- package/src/action-menu/index.ts +9 -0
- package/src/action-menu/types.ts +70 -0
- package/src/agent/AgentCreationWizard.tsx +201 -0
- package/src/agent/AgentDetailView.tsx +817 -321
- package/src/agent/index.ts +16 -0
- package/src/agent/internal/agentToInput.ts +95 -0
- package/src/agent/steps/CapabilitiesStep.tsx +363 -0
- package/src/agent/steps/IdentityStep.tsx +259 -0
- package/src/agent/steps/ReviewStep.tsx +211 -0
- package/src/agent/steps/types.ts +53 -0
- package/src/agent/useCreateAgent.ts +76 -0
- package/src/agent/useUpdateAgent.ts +55 -0
- package/src/dependency-graph/DependencyGraph.tsx +153 -0
- package/src/dependency-graph/DependencyTreeNode.tsx +282 -0
- package/src/dependency-graph/index.ts +15 -0
- package/src/dependency-graph/types.ts +131 -0
- package/src/dependency-graph/useDependencyGraph.ts +158 -0
- package/src/empty-state/EmptyState.tsx +90 -0
- package/src/empty-state/index.ts +9 -0
- package/src/empty-state/types.ts +81 -0
- package/src/empty-state/useEmptyState.ts +85 -0
- package/src/feedback/StigmerToaster.tsx +45 -0
- package/src/feedback/index.ts +3 -0
- package/src/feedback/toast.ts +13 -0
- package/src/feedback/types.ts +7 -0
- package/src/index.ts +270 -8
- package/src/inline-edit/InlineEditImage.tsx +208 -0
- package/src/inline-edit/InlineEditKeyValue.tsx +278 -0
- package/src/inline-edit/InlineEditResourceList.tsx +325 -0
- package/src/inline-edit/InlineEditSelect.tsx +150 -0
- package/src/inline-edit/InlineEditText.tsx +211 -0
- package/src/inline-edit/InlineEditTextarea.tsx +209 -0
- package/src/inline-edit/index.ts +28 -0
- package/src/inline-edit/types.ts +47 -0
- package/src/inline-edit/useInlineFieldSave.ts +62 -0
- package/src/internal/Tabs.tsx +4 -164
- package/src/library/ImportResourceDialog.tsx +227 -0
- package/src/library/index.ts +18 -8
- package/src/library/serialize-resource-yaml.ts +356 -0
- package/src/library/useExportResource.ts +183 -0
- package/src/library/useImportResource.ts +253 -0
- package/src/mcp-server/McpServerCreationWizard.tsx +206 -0
- package/src/mcp-server/McpServerDetailView.tsx +392 -105
- package/src/mcp-server/index.ts +16 -0
- package/src/mcp-server/internal/mcpServerToInput.ts +95 -0
- package/src/mcp-server/steps/EnvironmentAuthStep.tsx +462 -0
- package/src/mcp-server/steps/IdentityTransportStep.tsx +531 -0
- package/src/mcp-server/steps/ReviewStep.tsx +297 -0
- package/src/mcp-server/steps/types.ts +85 -0
- package/src/mcp-server/useCreateMcpServer.ts +76 -0
- package/src/mcp-server/useUpdateMcpServer.ts +55 -0
- package/src/resource-creation/CreationPicker.tsx +292 -0
- package/src/resource-creation/StepIndicator.tsx +156 -0
- package/src/resource-creation/TemplateCard.tsx +143 -0
- package/src/resource-creation/TemplateGallery.tsx +222 -0
- package/src/resource-creation/WizardNav.tsx +163 -0
- package/src/resource-creation/WizardShell.tsx +124 -0
- package/src/resource-creation/index.ts +45 -0
- package/src/resource-creation/templates/agent-templates.ts +160 -0
- package/src/resource-creation/templates/index.ts +7 -0
- package/src/resource-creation/templates/mcp-server-templates.ts +106 -0
- package/src/resource-creation/templates/types.ts +64 -0
- package/src/resource-creation/types.ts +105 -0
- package/src/resource-creation/useTemplateFilter.ts +117 -0
- package/src/resource-creation/useWizardState.ts +223 -0
- package/src/resource-detail/ConfirmDialog.tsx +127 -0
- package/src/resource-detail/ResourceActionBar.tsx +157 -0
- package/src/resource-detail/ResourceDetailShell.tsx +184 -0
- package/src/resource-detail/Section.tsx +78 -0
- package/src/resource-detail/index.ts +34 -0
- package/src/resource-detail/types.ts +177 -0
- package/src/resource-detail/useConfirmAction.ts +70 -0
- package/src/resource-detail/useCopyResource.ts +74 -0
- package/src/resource-detail/useDeleteResource.ts +110 -0
- package/src/resource-detail/useDetailTabs.ts +93 -0
- package/src/resource-workbench/components/BulkActionBar.tsx +122 -0
- package/src/resource-workbench/components/ColumnHeader.tsx +105 -0
- package/src/resource-workbench/components/FilterBar.tsx +173 -0
- package/src/resource-workbench/components/ResourceAvatar.tsx +109 -0
- package/src/resource-workbench/components/ResourceCards.tsx +126 -0
- package/src/resource-workbench/components/ResourceInspector.tsx +88 -0
- package/src/resource-workbench/components/ResourceList.tsx +121 -0
- package/src/resource-workbench/components/ResourceTable.tsx +222 -0
- package/src/resource-workbench/components/ResourceWorkbench.tsx +695 -0
- package/src/resource-workbench/components/SelectionCheckbox.tsx +52 -0
- package/src/resource-workbench/components/StatusBadge.tsx +119 -0
- package/src/resource-workbench/components/ViewSwitcher.tsx +135 -0
- package/src/resource-workbench/hooks/useResourceCollection.ts +261 -0
- package/src/resource-workbench/hooks/useResourceFilters.ts +216 -0
- package/src/resource-workbench/hooks/useResourceSelection.ts +178 -0
- package/src/resource-workbench/hooks/useViewPreference.ts +75 -0
- package/src/resource-workbench/index.ts +73 -0
- package/src/resource-workbench/types.ts +220 -0
- package/src/runner/RunnerDetailView.tsx +410 -0
- package/src/runner/RunnerListPanel.tsx +126 -111
- package/src/runner/index.ts +13 -1
- package/src/runner/shared.tsx +124 -0
- package/src/runner/useRunner.ts +59 -0
- package/src/session/__tests__/group-sessions.test.ts +5 -3
- package/src/skill/SkillDetailView.tsx +371 -165
- package/src/skill/SkillDiffDialog.tsx +213 -0
- package/src/skill/SkillFileBrowser.tsx +289 -0
- package/src/skill/SkillUploader.tsx +481 -0
- package/src/skill/index.ts +34 -0
- package/src/skill/internal/computeArtifactHash.ts +13 -0
- package/src/skill/internal/fetchAndUnpackArtifact.ts +48 -0
- package/src/skill/usePushSkill.ts +101 -0
- package/src/skill/useSkillArtifact.ts +107 -0
- package/src/skill/useSkillDiff.ts +128 -0
- package/src/skill/useSkillDuplicateCheck.ts +92 -0
- package/src/skill/useSkillUpload.ts +231 -0
- package/src/skill/useSkillVersions.ts +165 -0
- package/src/styles.css +28 -0
- package/src/tabs/Tabs.tsx +184 -0
- package/src/tabs/index.ts +2 -0
- package/src/version-history/DiffFileList.tsx +111 -0
- package/src/version-history/DiffSummary.tsx +61 -0
- package/src/version-history/DiffViewer.tsx +163 -0
- package/src/version-history/MultiFileDiffView.tsx +114 -0
- package/src/version-history/VersionTimeline.tsx +232 -0
- package/src/version-history/VersionTimelineEntry.tsx +254 -0
- package/src/version-history/computeDiff.ts +61 -0
- package/src/version-history/computeMultiFileDiff.ts +97 -0
- package/src/version-history/index.ts +22 -0
- package/src/version-history/types.ts +129 -0
- package/styles.css +1 -1
- package/tabs/Tabs.d.ts +58 -0
- package/tabs/Tabs.d.ts.map +1 -0
- package/tabs/Tabs.js +80 -0
- package/tabs/Tabs.js.map +1 -0
- package/tabs/index.d.ts +3 -0
- package/tabs/index.d.ts.map +1 -0
- package/tabs/index.js +2 -0
- package/tabs/index.js.map +1 -0
- package/version-history/DiffFileList.d.ts +22 -0
- package/version-history/DiffFileList.d.ts.map +1 -0
- package/version-history/DiffFileList.js +37 -0
- package/version-history/DiffFileList.js.map +1 -0
- package/version-history/DiffSummary.d.ts +21 -0
- package/version-history/DiffSummary.d.ts.map +1 -0
- package/version-history/DiffSummary.js +16 -0
- package/version-history/DiffSummary.js.map +1 -0
- package/version-history/DiffViewer.d.ts +31 -0
- package/version-history/DiffViewer.d.ts.map +1 -0
- package/version-history/DiffViewer.js +60 -0
- package/version-history/DiffViewer.js.map +1 -0
- package/version-history/MultiFileDiffView.d.ts +30 -0
- package/version-history/MultiFileDiffView.d.ts.map +1 -0
- package/version-history/MultiFileDiffView.js +40 -0
- package/version-history/MultiFileDiffView.js.map +1 -0
- package/version-history/VersionTimeline.d.ts +29 -0
- package/version-history/VersionTimeline.d.ts.map +1 -0
- package/version-history/VersionTimeline.js +87 -0
- package/version-history/VersionTimeline.js.map +1 -0
- package/version-history/VersionTimelineEntry.d.ts +22 -0
- package/version-history/VersionTimelineEntry.d.ts.map +1 -0
- package/version-history/VersionTimelineEntry.js +98 -0
- package/version-history/VersionTimelineEntry.js.map +1 -0
- package/version-history/computeDiff.d.ts +16 -0
- package/version-history/computeDiff.d.ts.map +1 -0
- package/version-history/computeDiff.js +54 -0
- package/version-history/computeDiff.js.map +1 -0
- package/version-history/computeMultiFileDiff.d.ts +15 -0
- package/version-history/computeMultiFileDiff.d.ts.map +1 -0
- package/version-history/computeMultiFileDiff.js +83 -0
- package/version-history/computeMultiFileDiff.js.map +1 -0
- package/version-history/index.d.ts +14 -0
- package/version-history/index.d.ts.map +1 -0
- package/version-history/index.js +9 -0
- package/version-history/index.js.map +1 -0
- package/version-history/types.d.ts +106 -0
- package/version-history/types.d.ts.map +1 -0
- package/version-history/types.js +2 -0
- package/version-history/types.js.map +1 -0
- package/library/ResourceListView.d.ts +0 -174
- package/library/ResourceListView.d.ts.map +0 -1
- package/library/ResourceListView.js +0 -318
- package/library/ResourceListView.js.map +0 -1
- package/src/library/ResourceListView.tsx +0 -956
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useMemo, useReducer } from "react";
|
|
4
|
+
import type { WizardStepDef, WizardState } from "./types";
|
|
5
|
+
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Public API
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
|
|
10
|
+
/** Options for {@link useWizardState}. */
|
|
11
|
+
export interface UseWizardStateOptions<TData> {
|
|
12
|
+
/** Ordered step definitions — determines wizard length and validation. */
|
|
13
|
+
readonly steps: readonly WizardStepDef<TData>[];
|
|
14
|
+
/** Initial form data (empty/default values for all fields). */
|
|
15
|
+
readonly initialData: TData;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** Return value of {@link useWizardState}. */
|
|
19
|
+
export interface UseWizardStateReturn<TData> {
|
|
20
|
+
/** Zero-based index of the current step. */
|
|
21
|
+
readonly currentStepIndex: number;
|
|
22
|
+
/** Definition of the current step. */
|
|
23
|
+
readonly currentStep: WizardStepDef<TData>;
|
|
24
|
+
/** Accumulated form data across all steps. */
|
|
25
|
+
readonly data: TData;
|
|
26
|
+
/** Merges a partial update into the accumulated data. */
|
|
27
|
+
readonly updateData: (partial: Partial<TData>) => void;
|
|
28
|
+
/** Whether navigation forward is allowed (current step is valid). */
|
|
29
|
+
readonly canGoNext: boolean;
|
|
30
|
+
/** Whether navigation backward is possible (not on first step). */
|
|
31
|
+
readonly canGoBack: boolean;
|
|
32
|
+
/** Advance to the next step (validates current step first). */
|
|
33
|
+
readonly goNext: () => void;
|
|
34
|
+
/** Return to the previous step. */
|
|
35
|
+
readonly goBack: () => void;
|
|
36
|
+
/** Jump directly to a specific step (only allows going backward). */
|
|
37
|
+
readonly goToStep: (index: number) => void;
|
|
38
|
+
/** Validation error for the current step, or `null`. */
|
|
39
|
+
readonly validationError: string | null;
|
|
40
|
+
/** `true` when on the first step. */
|
|
41
|
+
readonly isFirstStep: boolean;
|
|
42
|
+
/** `true` when on the last step. */
|
|
43
|
+
readonly isLastStep: boolean;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// Actions
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
|
|
50
|
+
type WizardAction<TData> =
|
|
51
|
+
| { readonly type: "GO_NEXT" }
|
|
52
|
+
| { readonly type: "GO_BACK" }
|
|
53
|
+
| { readonly type: "GO_TO_STEP"; readonly index: number }
|
|
54
|
+
| { readonly type: "UPDATE_DATA"; readonly partial: Partial<TData> }
|
|
55
|
+
| { readonly type: "SET_VALIDATION_ERROR"; readonly error: string | null };
|
|
56
|
+
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// Reducer
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
|
|
61
|
+
function createReducer<TData>(steps: readonly WizardStepDef<TData>[]) {
|
|
62
|
+
return function wizardReducer(
|
|
63
|
+
state: WizardState<TData>,
|
|
64
|
+
action: WizardAction<TData>,
|
|
65
|
+
): WizardState<TData> {
|
|
66
|
+
switch (action.type) {
|
|
67
|
+
case "GO_NEXT": {
|
|
68
|
+
const step = steps[state.currentStepIndex];
|
|
69
|
+
const error = step?.validate?.(state.data) ?? null;
|
|
70
|
+
if (error) {
|
|
71
|
+
return { ...state, validationError: error };
|
|
72
|
+
}
|
|
73
|
+
const nextIndex = Math.min(
|
|
74
|
+
state.currentStepIndex + 1,
|
|
75
|
+
steps.length - 1,
|
|
76
|
+
);
|
|
77
|
+
return {
|
|
78
|
+
...state,
|
|
79
|
+
currentStepIndex: nextIndex,
|
|
80
|
+
validationError: null,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
case "GO_BACK": {
|
|
85
|
+
const prevIndex = Math.max(state.currentStepIndex - 1, 0);
|
|
86
|
+
return {
|
|
87
|
+
...state,
|
|
88
|
+
currentStepIndex: prevIndex,
|
|
89
|
+
validationError: null,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
case "GO_TO_STEP": {
|
|
94
|
+
if (action.index < 0 || action.index >= steps.length) return state;
|
|
95
|
+
if (action.index >= state.currentStepIndex) return state;
|
|
96
|
+
return {
|
|
97
|
+
...state,
|
|
98
|
+
currentStepIndex: action.index,
|
|
99
|
+
validationError: null,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
case "UPDATE_DATA":
|
|
104
|
+
return {
|
|
105
|
+
...state,
|
|
106
|
+
data: { ...state.data, ...action.partial },
|
|
107
|
+
validationError: null,
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
case "SET_VALIDATION_ERROR":
|
|
111
|
+
return { ...state, validationError: action.error };
|
|
112
|
+
|
|
113
|
+
default:
|
|
114
|
+
return state;
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// ---------------------------------------------------------------------------
|
|
120
|
+
// Hook
|
|
121
|
+
// ---------------------------------------------------------------------------
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Headless state machine for multi-step wizard flows.
|
|
125
|
+
*
|
|
126
|
+
* Manages step navigation, per-step validation gating, and accumulated
|
|
127
|
+
* form data. Generic over the data shape — each wizard defines its own
|
|
128
|
+
* `TData` type with fields for all steps.
|
|
129
|
+
*
|
|
130
|
+
* Navigation forward is gated by the current step's `validate` function.
|
|
131
|
+
* Navigation backward is always allowed. Direct step jumps only go backward
|
|
132
|
+
* (prevents skipping required steps).
|
|
133
|
+
*
|
|
134
|
+
* Follows the `useReducer` + discriminated union pattern established
|
|
135
|
+
* by `agentSetupReducer` — pure state transitions, imperative API on top.
|
|
136
|
+
*
|
|
137
|
+
* @typeParam TData - Accumulated form data shape.
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* ```tsx
|
|
141
|
+
* const wizard = useWizardState({
|
|
142
|
+
* steps: [
|
|
143
|
+
* { id: "basics", label: "Basics", validate: (d) => d.name ? null : "Name is required" },
|
|
144
|
+
* { id: "review", label: "Review" },
|
|
145
|
+
* ],
|
|
146
|
+
* initialData: { name: "", description: "" },
|
|
147
|
+
* });
|
|
148
|
+
*
|
|
149
|
+
* // wizard.data.name, wizard.updateData({ name: "My Agent" })
|
|
150
|
+
* // wizard.goNext(), wizard.goBack()
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
export function useWizardState<TData>(
|
|
154
|
+
options: UseWizardStateOptions<TData>,
|
|
155
|
+
): UseWizardStateReturn<TData> {
|
|
156
|
+
const { steps, initialData } = options;
|
|
157
|
+
|
|
158
|
+
const reducer = useMemo(() => createReducer(steps), [steps]);
|
|
159
|
+
|
|
160
|
+
const [state, dispatch] = useReducer(reducer, {
|
|
161
|
+
currentStepIndex: 0,
|
|
162
|
+
data: initialData,
|
|
163
|
+
validationError: null,
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
const currentStep = steps[state.currentStepIndex]!;
|
|
167
|
+
const isFirstStep = state.currentStepIndex === 0;
|
|
168
|
+
const isLastStep = state.currentStepIndex === steps.length - 1;
|
|
169
|
+
|
|
170
|
+
const canGoNext = useMemo(() => {
|
|
171
|
+
const error = currentStep.validate?.(state.data) ?? null;
|
|
172
|
+
return error === null;
|
|
173
|
+
}, [currentStep, state.data]);
|
|
174
|
+
|
|
175
|
+
const canGoBack = !isFirstStep;
|
|
176
|
+
|
|
177
|
+
const goNext = useCallback(() => {
|
|
178
|
+
dispatch({ type: "GO_NEXT" });
|
|
179
|
+
}, []);
|
|
180
|
+
|
|
181
|
+
const goBack = useCallback(() => {
|
|
182
|
+
dispatch({ type: "GO_BACK" });
|
|
183
|
+
}, []);
|
|
184
|
+
|
|
185
|
+
const goToStep = useCallback((index: number) => {
|
|
186
|
+
dispatch({ type: "GO_TO_STEP", index });
|
|
187
|
+
}, []);
|
|
188
|
+
|
|
189
|
+
const updateData = useCallback((partial: Partial<TData>) => {
|
|
190
|
+
dispatch({ type: "UPDATE_DATA", partial });
|
|
191
|
+
}, []);
|
|
192
|
+
|
|
193
|
+
return useMemo(
|
|
194
|
+
() => ({
|
|
195
|
+
currentStepIndex: state.currentStepIndex,
|
|
196
|
+
currentStep,
|
|
197
|
+
data: state.data,
|
|
198
|
+
updateData,
|
|
199
|
+
canGoNext,
|
|
200
|
+
canGoBack,
|
|
201
|
+
goNext,
|
|
202
|
+
goBack,
|
|
203
|
+
goToStep,
|
|
204
|
+
validationError: state.validationError,
|
|
205
|
+
isFirstStep,
|
|
206
|
+
isLastStep,
|
|
207
|
+
}),
|
|
208
|
+
[
|
|
209
|
+
state.currentStepIndex,
|
|
210
|
+
state.data,
|
|
211
|
+
state.validationError,
|
|
212
|
+
currentStep,
|
|
213
|
+
canGoNext,
|
|
214
|
+
canGoBack,
|
|
215
|
+
isFirstStep,
|
|
216
|
+
isLastStep,
|
|
217
|
+
updateData,
|
|
218
|
+
goNext,
|
|
219
|
+
goBack,
|
|
220
|
+
goToStep,
|
|
221
|
+
],
|
|
222
|
+
);
|
|
223
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useCallback, useEffect, useRef } from "react";
|
|
4
|
+
import { cn } from "@stigmer/theme";
|
|
5
|
+
import type { ConfirmState } from "./types";
|
|
6
|
+
|
|
7
|
+
export interface ConfirmDialogProps {
|
|
8
|
+
/** Pending confirmation state from {@link useConfirmAction}. */
|
|
9
|
+
readonly state: ConfirmState | null;
|
|
10
|
+
/** Accept the pending confirmation. */
|
|
11
|
+
readonly onConfirm: () => void;
|
|
12
|
+
/** Dismiss the pending confirmation. */
|
|
13
|
+
readonly onCancel: () => void;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Accessible confirmation dialog for destructive actions.
|
|
18
|
+
*
|
|
19
|
+
* Uses the native `<dialog>` element with `showModal()` for built-in
|
|
20
|
+
* focus trapping, Escape key handling, and backdrop. Styled via
|
|
21
|
+
* `--stgm-*` design tokens.
|
|
22
|
+
*
|
|
23
|
+
* Pairs with {@link useConfirmAction} which manages the imperative
|
|
24
|
+
* `confirm()` → Promise pattern.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```tsx
|
|
28
|
+
* const { confirmState, confirm, handleConfirm, handleCancel } = useConfirmAction();
|
|
29
|
+
*
|
|
30
|
+
* // Trigger
|
|
31
|
+
* const handleDelete = async () => {
|
|
32
|
+
* const ok = await confirm({
|
|
33
|
+
* title: "Delete agent?",
|
|
34
|
+
* description: "This cannot be undone.",
|
|
35
|
+
* confirmLabel: "Delete",
|
|
36
|
+
* variant: "destructive",
|
|
37
|
+
* });
|
|
38
|
+
* if (ok) await deleteAgent();
|
|
39
|
+
* };
|
|
40
|
+
*
|
|
41
|
+
* // Render
|
|
42
|
+
* <ConfirmDialog
|
|
43
|
+
* state={confirmState}
|
|
44
|
+
* onConfirm={handleConfirm}
|
|
45
|
+
* onCancel={handleCancel}
|
|
46
|
+
* />
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export function ConfirmDialog({
|
|
50
|
+
state,
|
|
51
|
+
onConfirm,
|
|
52
|
+
onCancel,
|
|
53
|
+
}: ConfirmDialogProps) {
|
|
54
|
+
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
55
|
+
|
|
56
|
+
useEffect(() => {
|
|
57
|
+
const dialog = dialogRef.current;
|
|
58
|
+
if (!dialog) return;
|
|
59
|
+
if (state && !dialog.open) {
|
|
60
|
+
dialog.showModal();
|
|
61
|
+
} else if (!state && dialog.open) {
|
|
62
|
+
dialog.close();
|
|
63
|
+
}
|
|
64
|
+
}, [state]);
|
|
65
|
+
|
|
66
|
+
const handleDialogCancel = useCallback(
|
|
67
|
+
(e: React.SyntheticEvent) => {
|
|
68
|
+
e.preventDefault();
|
|
69
|
+
onCancel();
|
|
70
|
+
},
|
|
71
|
+
[onCancel],
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
if (!state) return null;
|
|
75
|
+
|
|
76
|
+
const isDestructive = state.variant === "destructive";
|
|
77
|
+
|
|
78
|
+
return (
|
|
79
|
+
<dialog
|
|
80
|
+
ref={dialogRef}
|
|
81
|
+
onCancel={handleDialogCancel}
|
|
82
|
+
className={cn(
|
|
83
|
+
"fixed inset-0 z-50 m-auto w-full max-w-sm rounded-lg border border-border bg-popover p-0 text-popover-foreground shadow-lg",
|
|
84
|
+
"backdrop:bg-black/50",
|
|
85
|
+
"open:animate-in open:fade-in-0 open:zoom-in-95",
|
|
86
|
+
)}
|
|
87
|
+
>
|
|
88
|
+
<div className="flex flex-col gap-4 p-6">
|
|
89
|
+
<div className="flex flex-col gap-1.5">
|
|
90
|
+
<h3 className="text-base font-semibold text-foreground">
|
|
91
|
+
{state.title}
|
|
92
|
+
</h3>
|
|
93
|
+
<p className="text-sm text-muted-foreground">
|
|
94
|
+
{state.description}
|
|
95
|
+
</p>
|
|
96
|
+
</div>
|
|
97
|
+
<div className="flex justify-end gap-2">
|
|
98
|
+
<button
|
|
99
|
+
type="button"
|
|
100
|
+
onClick={onCancel}
|
|
101
|
+
className={cn(
|
|
102
|
+
"rounded-md px-3 py-1.5 text-sm font-medium transition-colors",
|
|
103
|
+
"border border-input bg-background text-foreground",
|
|
104
|
+
"hover:bg-accent hover:text-accent-foreground",
|
|
105
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
106
|
+
)}
|
|
107
|
+
>
|
|
108
|
+
{state.cancelLabel ?? "Cancel"}
|
|
109
|
+
</button>
|
|
110
|
+
<button
|
|
111
|
+
type="button"
|
|
112
|
+
onClick={onConfirm}
|
|
113
|
+
className={cn(
|
|
114
|
+
"rounded-md px-3 py-1.5 text-sm font-medium transition-colors",
|
|
115
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
116
|
+
isDestructive
|
|
117
|
+
? "bg-destructive text-destructive-foreground hover:bg-destructive-hover"
|
|
118
|
+
: "bg-primary text-primary-foreground hover:bg-primary-hover",
|
|
119
|
+
)}
|
|
120
|
+
>
|
|
121
|
+
{state.confirmLabel ?? "Confirm"}
|
|
122
|
+
</button>
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
</dialog>
|
|
126
|
+
);
|
|
127
|
+
}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useMemo } from "react";
|
|
4
|
+
import { cn } from "@stigmer/theme";
|
|
5
|
+
import { ActionMenu } from "../action-menu";
|
|
6
|
+
import type { DetailAction } from "./types";
|
|
7
|
+
|
|
8
|
+
export interface ResourceActionBarProps {
|
|
9
|
+
/**
|
|
10
|
+
* Primary action rendered as a visible button.
|
|
11
|
+
* Use for the most common action on this resource (e.g. "Edit").
|
|
12
|
+
*/
|
|
13
|
+
readonly primaryAction?: DetailAction;
|
|
14
|
+
/**
|
|
15
|
+
* Secondary and tertiary actions rendered in the overflow (kebab) menu.
|
|
16
|
+
* Actions with the same `group` are visually grouped with separators.
|
|
17
|
+
*/
|
|
18
|
+
readonly actions?: readonly DetailAction[];
|
|
19
|
+
/** Additional CSS classes for the root container. */
|
|
20
|
+
readonly className?: string;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Horizontal action bar for resource detail page headers.
|
|
25
|
+
*
|
|
26
|
+
* Renders an optional primary action as a visible button and any
|
|
27
|
+
* remaining actions in a kebab overflow menu (using the SDK's
|
|
28
|
+
* {@link ActionMenu} compound component).
|
|
29
|
+
*
|
|
30
|
+
* When there are no actions at all, renders nothing.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```tsx
|
|
34
|
+
* <ResourceActionBar
|
|
35
|
+
* primaryAction={{
|
|
36
|
+
* id: "edit",
|
|
37
|
+
* label: "Edit",
|
|
38
|
+
* icon: <PencilIcon />,
|
|
39
|
+
* onAction: () => router.push(editUrl),
|
|
40
|
+
* }}
|
|
41
|
+
* actions={[
|
|
42
|
+
* { id: "copy-id", label: "Copy ID", onAction: () => copyId(id) },
|
|
43
|
+
* { id: "delete", label: "Delete", variant: "destructive", onAction: handleDelete },
|
|
44
|
+
* ]}
|
|
45
|
+
* />
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
export function ResourceActionBar({
|
|
49
|
+
primaryAction,
|
|
50
|
+
actions,
|
|
51
|
+
className,
|
|
52
|
+
}: ResourceActionBarProps) {
|
|
53
|
+
const hasOverflow = actions != null && actions.length > 0;
|
|
54
|
+
if (!primaryAction && !hasOverflow) return null;
|
|
55
|
+
|
|
56
|
+
return (
|
|
57
|
+
<div className={cn("flex items-center gap-2", className)}>
|
|
58
|
+
{primaryAction && (
|
|
59
|
+
<button
|
|
60
|
+
type="button"
|
|
61
|
+
onClick={primaryAction.onAction}
|
|
62
|
+
disabled={primaryAction.disabled}
|
|
63
|
+
className={cn(
|
|
64
|
+
"inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-sm font-medium transition-colors",
|
|
65
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
66
|
+
"bg-primary text-primary-foreground hover:bg-primary-hover",
|
|
67
|
+
"disabled:pointer-events-none disabled:opacity-50",
|
|
68
|
+
)}
|
|
69
|
+
>
|
|
70
|
+
{primaryAction.icon}
|
|
71
|
+
{primaryAction.label}
|
|
72
|
+
</button>
|
|
73
|
+
)}
|
|
74
|
+
{hasOverflow && <OverflowMenu actions={actions} />}
|
|
75
|
+
</div>
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
// Overflow kebab menu
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
|
|
83
|
+
function OverflowMenu({
|
|
84
|
+
actions,
|
|
85
|
+
}: {
|
|
86
|
+
readonly actions: readonly DetailAction[];
|
|
87
|
+
}) {
|
|
88
|
+
const grouped = useGroupedActions(actions);
|
|
89
|
+
|
|
90
|
+
return (
|
|
91
|
+
<ActionMenu>
|
|
92
|
+
<ActionMenu.Trigger aria-label="More actions">
|
|
93
|
+
<KebabIcon className="size-4" />
|
|
94
|
+
</ActionMenu.Trigger>
|
|
95
|
+
<ActionMenu.Content>
|
|
96
|
+
{grouped.map((group, groupIndex) => (
|
|
97
|
+
<ActionMenu.Group key={group.key}>
|
|
98
|
+
{groupIndex > 0 && <ActionMenu.Separator />}
|
|
99
|
+
{group.items.map((action) => (
|
|
100
|
+
<ActionMenu.Item
|
|
101
|
+
key={action.id}
|
|
102
|
+
icon={action.icon}
|
|
103
|
+
shortcut={action.shortcut}
|
|
104
|
+
variant={action.variant}
|
|
105
|
+
disabled={action.disabled}
|
|
106
|
+
onSelect={action.onAction}
|
|
107
|
+
>
|
|
108
|
+
{action.label}
|
|
109
|
+
</ActionMenu.Item>
|
|
110
|
+
))}
|
|
111
|
+
</ActionMenu.Group>
|
|
112
|
+
))}
|
|
113
|
+
</ActionMenu.Content>
|
|
114
|
+
</ActionMenu>
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// ---------------------------------------------------------------------------
|
|
119
|
+
// Action grouping
|
|
120
|
+
// ---------------------------------------------------------------------------
|
|
121
|
+
|
|
122
|
+
interface ActionGroup {
|
|
123
|
+
readonly key: string;
|
|
124
|
+
readonly items: readonly DetailAction[];
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function useGroupedActions(actions: readonly DetailAction[]): ActionGroup[] {
|
|
128
|
+
return useMemo(() => {
|
|
129
|
+
const map = new Map<string, DetailAction[]>();
|
|
130
|
+
for (const action of actions) {
|
|
131
|
+
const key = action.group ?? "__default";
|
|
132
|
+
const list = map.get(key);
|
|
133
|
+
if (list) list.push(action);
|
|
134
|
+
else map.set(key, [action]);
|
|
135
|
+
}
|
|
136
|
+
return Array.from(map.entries()).map(([key, items]) => ({ key, items }));
|
|
137
|
+
}, [actions]);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// ---------------------------------------------------------------------------
|
|
141
|
+
// Kebab icon (inline SVG — no icon library dependency)
|
|
142
|
+
// ---------------------------------------------------------------------------
|
|
143
|
+
|
|
144
|
+
function KebabIcon({ className }: { readonly className?: string }) {
|
|
145
|
+
return (
|
|
146
|
+
<svg
|
|
147
|
+
className={className}
|
|
148
|
+
viewBox="0 0 16 16"
|
|
149
|
+
fill="currentColor"
|
|
150
|
+
aria-hidden="true"
|
|
151
|
+
>
|
|
152
|
+
<circle cx="8" cy="3" r="1.25" />
|
|
153
|
+
<circle cx="8" cy="8" r="1.25" />
|
|
154
|
+
<circle cx="8" cy="13" r="1.25" />
|
|
155
|
+
</svg>
|
|
156
|
+
);
|
|
157
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { cn } from "@stigmer/theme";
|
|
4
|
+
import { StatusBadge } from "../resource-workbench/components/StatusBadge";
|
|
5
|
+
import { Tabs } from "../tabs/Tabs";
|
|
6
|
+
import { ResourceActionBar } from "./ResourceActionBar";
|
|
7
|
+
import type { ResourceDetailShellProps } from "./types";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Shared layout shell for resource detail pages.
|
|
11
|
+
*
|
|
12
|
+
* Renders a standardized header (icon, name, org, timestamps, status,
|
|
13
|
+
* visibility control), an action bar (primary button + kebab overflow),
|
|
14
|
+
* optional tabs, and a content area — all themed via `--stgm-*` tokens.
|
|
15
|
+
*
|
|
16
|
+
* The shell receives pre-fetched data via props (DD-T03-001). It does
|
|
17
|
+
* NOT own data fetching — resource-specific hooks (`useAgent`, `useSkill`,
|
|
18
|
+
* etc.) handle that. The shell is a layout + behavior coordinator, not
|
|
19
|
+
* a data-fetching component.
|
|
20
|
+
*
|
|
21
|
+
* Zero Console dependencies — safe for platform builder embedding.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```tsx
|
|
25
|
+
* const { agent } = useAgent(org, slug);
|
|
26
|
+
*
|
|
27
|
+
* <ResourceDetailShell
|
|
28
|
+
* header={{
|
|
29
|
+
* name: agent.metadata.name,
|
|
30
|
+
* id: agent.metadata.id,
|
|
31
|
+
* org: agent.metadata.org,
|
|
32
|
+
* slug: agent.metadata.slug,
|
|
33
|
+
* description: agent.spec.description,
|
|
34
|
+
* }}
|
|
35
|
+
* primaryAction={{ id: "edit", label: "Edit", onAction: handleEdit }}
|
|
36
|
+
* actions={[...]}
|
|
37
|
+
* >
|
|
38
|
+
* <AgentOverview agent={agent} />
|
|
39
|
+
* </ResourceDetailShell>
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export function ResourceDetailShell({
|
|
43
|
+
header,
|
|
44
|
+
visibilityControl,
|
|
45
|
+
primaryAction,
|
|
46
|
+
actions,
|
|
47
|
+
tabs,
|
|
48
|
+
activeTab,
|
|
49
|
+
onTabChange,
|
|
50
|
+
tabsAriaLabel,
|
|
51
|
+
children,
|
|
52
|
+
className,
|
|
53
|
+
}: ResourceDetailShellProps) {
|
|
54
|
+
const hasTabs = tabs != null && tabs.length > 0;
|
|
55
|
+
|
|
56
|
+
return (
|
|
57
|
+
<div className={cn("flex flex-col gap-6", className)}>
|
|
58
|
+
{/* Header + Action bar row */}
|
|
59
|
+
<div className="flex items-start justify-between gap-4">
|
|
60
|
+
<Header
|
|
61
|
+
header={header}
|
|
62
|
+
visibilityControl={visibilityControl}
|
|
63
|
+
/>
|
|
64
|
+
<ResourceActionBar
|
|
65
|
+
primaryAction={primaryAction}
|
|
66
|
+
actions={actions}
|
|
67
|
+
className="shrink-0"
|
|
68
|
+
/>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
{/* Tabs + content or plain content */}
|
|
72
|
+
{hasTabs && activeTab && onTabChange ? (
|
|
73
|
+
<Tabs
|
|
74
|
+
tabs={tabs}
|
|
75
|
+
activeTab={activeTab}
|
|
76
|
+
onTabChange={onTabChange}
|
|
77
|
+
aria-label={tabsAriaLabel}
|
|
78
|
+
>
|
|
79
|
+
{children}
|
|
80
|
+
</Tabs>
|
|
81
|
+
) : (
|
|
82
|
+
children
|
|
83
|
+
)}
|
|
84
|
+
</div>
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// ---------------------------------------------------------------------------
|
|
89
|
+
// Header
|
|
90
|
+
// ---------------------------------------------------------------------------
|
|
91
|
+
|
|
92
|
+
function Header({
|
|
93
|
+
header,
|
|
94
|
+
visibilityControl,
|
|
95
|
+
}: {
|
|
96
|
+
readonly header: ResourceDetailShellProps["header"];
|
|
97
|
+
readonly visibilityControl?: ResourceDetailShellProps["visibilityControl"];
|
|
98
|
+
}) {
|
|
99
|
+
const {
|
|
100
|
+
name,
|
|
101
|
+
org,
|
|
102
|
+
slug,
|
|
103
|
+
description,
|
|
104
|
+
iconUrl,
|
|
105
|
+
icon,
|
|
106
|
+
createdAt,
|
|
107
|
+
updatedAt,
|
|
108
|
+
status,
|
|
109
|
+
statusLabel,
|
|
110
|
+
} = header;
|
|
111
|
+
|
|
112
|
+
const showSlug = slug && slug !== name;
|
|
113
|
+
|
|
114
|
+
return (
|
|
115
|
+
<div className="flex min-w-0 items-start gap-3">
|
|
116
|
+
{iconUrl ? (
|
|
117
|
+
<img
|
|
118
|
+
src={iconUrl}
|
|
119
|
+
alt=""
|
|
120
|
+
className="mt-0.5 size-8 shrink-0 rounded object-cover"
|
|
121
|
+
/>
|
|
122
|
+
) : icon ? (
|
|
123
|
+
<span className="mt-1 shrink-0">{icon}</span>
|
|
124
|
+
) : null}
|
|
125
|
+
<div className="min-w-0 flex-1">
|
|
126
|
+
<div className="flex items-center gap-2">
|
|
127
|
+
<h2 className="truncate text-lg font-semibold text-foreground">
|
|
128
|
+
{name}
|
|
129
|
+
</h2>
|
|
130
|
+
{showSlug && (
|
|
131
|
+
<code className="shrink-0 rounded bg-muted px-1.5 py-0.5 text-xs font-medium text-muted-foreground">
|
|
132
|
+
{slug}
|
|
133
|
+
</code>
|
|
134
|
+
)}
|
|
135
|
+
{status && (
|
|
136
|
+
<StatusBadge
|
|
137
|
+
phase={status}
|
|
138
|
+
label={statusLabel}
|
|
139
|
+
/>
|
|
140
|
+
)}
|
|
141
|
+
{visibilityControl}
|
|
142
|
+
</div>
|
|
143
|
+
<div className="mt-0.5 flex flex-wrap items-center gap-x-1.5 text-xs text-muted-foreground">
|
|
144
|
+
{org && <span>{org}</span>}
|
|
145
|
+
{createdAt && (
|
|
146
|
+
<>
|
|
147
|
+
<Dot />
|
|
148
|
+
<span>Created {formatDate(createdAt)}</span>
|
|
149
|
+
</>
|
|
150
|
+
)}
|
|
151
|
+
{updatedAt && (
|
|
152
|
+
<>
|
|
153
|
+
<Dot />
|
|
154
|
+
<span>Updated {formatDate(updatedAt)}</span>
|
|
155
|
+
</>
|
|
156
|
+
)}
|
|
157
|
+
</div>
|
|
158
|
+
{description && (
|
|
159
|
+
<p className="mt-2 text-sm text-muted-foreground">{description}</p>
|
|
160
|
+
)}
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// ---------------------------------------------------------------------------
|
|
167
|
+
// Utilities
|
|
168
|
+
// ---------------------------------------------------------------------------
|
|
169
|
+
|
|
170
|
+
function Dot() {
|
|
171
|
+
return (
|
|
172
|
+
<span className="shrink-0" aria-hidden="true">
|
|
173
|
+
{"\u00B7"}
|
|
174
|
+
</span>
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
function formatDate(date: Date): string {
|
|
179
|
+
return date.toLocaleDateString("en-US", {
|
|
180
|
+
month: "short",
|
|
181
|
+
day: "numeric",
|
|
182
|
+
year: "numeric",
|
|
183
|
+
});
|
|
184
|
+
}
|