@stigmer/react 0.4.7 → 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/execution/MessageThread.d.ts +1 -0
- package/execution/MessageThread.d.ts.map +1 -1
- package/execution/MessageThread.js +22 -12
- package/execution/MessageThread.js.map +1 -1
- package/execution/SetupProgress.d.ts +23 -9
- package/execution/SetupProgress.d.ts.map +1 -1
- package/execution/SetupProgress.js +30 -14
- package/execution/SetupProgress.js.map +1 -1
- package/execution/__tests__/thread-keys.test.js +82 -0
- package/execution/__tests__/thread-keys.test.js.map +1 -1
- 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/models/registry.d.ts +4 -1
- package/models/registry.d.ts.map +1 -1
- package/models/registry.js +6 -2
- package/models/registry.js.map +1 -1
- package/package.json +8 -4
- package/provider.js +1 -1
- package/provider.js.map +1 -1
- 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/execution/MessageThread.tsx +26 -15
- package/src/execution/SetupProgress.tsx +35 -14
- package/src/execution/__tests__/thread-keys.test.ts +101 -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/models/registry.ts +10 -2
- package/src/provider.tsx +1 -1
- 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,52 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { cn } from "@stigmer/theme";
|
|
4
|
+
|
|
5
|
+
/** Props for {@link SelectionCheckbox}. */
|
|
6
|
+
export interface SelectionCheckboxProps {
|
|
7
|
+
/** Whether the checkbox is checked. */
|
|
8
|
+
readonly checked: boolean;
|
|
9
|
+
/**
|
|
10
|
+
* Indeterminate state (e.g. header checkbox when some but not all
|
|
11
|
+
* rows are selected). Overrides `checked` visually.
|
|
12
|
+
*/
|
|
13
|
+
readonly indeterminate?: boolean;
|
|
14
|
+
/** Called when the user toggles the checkbox. */
|
|
15
|
+
readonly onChange: (checked: boolean) => void;
|
|
16
|
+
/** Accessible label for the checkbox. */
|
|
17
|
+
readonly "aria-label": string;
|
|
18
|
+
/** Additional CSS classes. */
|
|
19
|
+
readonly className?: string;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Accessible checkbox for row/card selection and "select all" headers.
|
|
24
|
+
*
|
|
25
|
+
* Uses a native `<input type="checkbox">` with the `indeterminate`
|
|
26
|
+
* property set via ref for proper browser + screen reader support.
|
|
27
|
+
*/
|
|
28
|
+
export function SelectionCheckbox({
|
|
29
|
+
checked,
|
|
30
|
+
indeterminate = false,
|
|
31
|
+
onChange,
|
|
32
|
+
"aria-label": ariaLabel,
|
|
33
|
+
className,
|
|
34
|
+
}: SelectionCheckboxProps) {
|
|
35
|
+
return (
|
|
36
|
+
<input
|
|
37
|
+
type="checkbox"
|
|
38
|
+
role="checkbox"
|
|
39
|
+
checked={checked}
|
|
40
|
+
ref={(el) => {
|
|
41
|
+
if (el) el.indeterminate = indeterminate;
|
|
42
|
+
}}
|
|
43
|
+
onChange={(e) => onChange(e.target.checked)}
|
|
44
|
+
aria-label={ariaLabel}
|
|
45
|
+
className={cn(
|
|
46
|
+
"size-3.5 shrink-0 cursor-pointer rounded border border-input accent-primary",
|
|
47
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1",
|
|
48
|
+
className,
|
|
49
|
+
)}
|
|
50
|
+
/>
|
|
51
|
+
);
|
|
52
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { cn } from "@stigmer/theme";
|
|
4
|
+
import type { StatusPhase } from "../types";
|
|
5
|
+
|
|
6
|
+
/** Props for {@link StatusBadge}. */
|
|
7
|
+
export interface StatusBadgeProps {
|
|
8
|
+
/** The status phase to display. Maps to `--stgm-status-*` tokens. */
|
|
9
|
+
readonly phase: StatusPhase;
|
|
10
|
+
/**
|
|
11
|
+
* Optional human-readable label override. When omitted, the phase
|
|
12
|
+
* name is title-cased (e.g. "ready" becomes "Ready").
|
|
13
|
+
*/
|
|
14
|
+
readonly label?: string;
|
|
15
|
+
/** Tooltip text shown on hover. When omitted, no tooltip renders. */
|
|
16
|
+
readonly tooltip?: string;
|
|
17
|
+
/** Additional CSS classes for the root element. */
|
|
18
|
+
readonly className?: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const PHASE_LABELS: Record<StatusPhase, string> = {
|
|
22
|
+
ready: "Ready",
|
|
23
|
+
running: "Running",
|
|
24
|
+
pending: "Pending",
|
|
25
|
+
degraded: "Degraded",
|
|
26
|
+
failed: "Failed",
|
|
27
|
+
disabled: "Disabled",
|
|
28
|
+
draft: "Draft",
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Accessible status indicator that combines a color dot with a text label.
|
|
33
|
+
*
|
|
34
|
+
* Never communicates status through color alone — the text label is always
|
|
35
|
+
* present (WCAG 1.4.1). Colors come from `--stgm-status-*` design tokens
|
|
36
|
+
* defined in `@stigmer/theme`, ensuring correct appearance in both light
|
|
37
|
+
* and dark modes.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```tsx
|
|
41
|
+
* <StatusBadge phase="ready" />
|
|
42
|
+
* <StatusBadge phase="failed" label="Unreachable" tooltip="Last checked 2m ago" />
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export function StatusBadge({
|
|
46
|
+
phase,
|
|
47
|
+
label,
|
|
48
|
+
tooltip,
|
|
49
|
+
className,
|
|
50
|
+
}: StatusBadgeProps) {
|
|
51
|
+
const displayLabel = label ?? PHASE_LABELS[phase];
|
|
52
|
+
|
|
53
|
+
const badge = (
|
|
54
|
+
<span
|
|
55
|
+
className={cn(
|
|
56
|
+
"inline-flex items-center gap-1.5 rounded-full px-2 py-0.5 text-[11px] font-medium leading-none",
|
|
57
|
+
statusClasses(phase),
|
|
58
|
+
className,
|
|
59
|
+
)}
|
|
60
|
+
>
|
|
61
|
+
<span
|
|
62
|
+
className={cn("size-1.5 shrink-0 rounded-full", dotClasses(phase))}
|
|
63
|
+
aria-hidden="true"
|
|
64
|
+
/>
|
|
65
|
+
{displayLabel}
|
|
66
|
+
</span>
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
if (!tooltip) return badge;
|
|
70
|
+
|
|
71
|
+
return (
|
|
72
|
+
<span title={tooltip} className="inline-flex">
|
|
73
|
+
{badge}
|
|
74
|
+
</span>
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Maps a status phase to Tailwind classes using `--stgm-status-*` tokens.
|
|
80
|
+
* Background uses the `-subtle` variant; text uses the main status color.
|
|
81
|
+
*/
|
|
82
|
+
function statusClasses(phase: StatusPhase): string {
|
|
83
|
+
switch (phase) {
|
|
84
|
+
case "ready":
|
|
85
|
+
return "bg-[var(--stgm-status-ready-subtle)] text-[var(--stgm-status-ready)]";
|
|
86
|
+
case "running":
|
|
87
|
+
return "bg-[var(--stgm-status-running-subtle)] text-[var(--stgm-status-running)]";
|
|
88
|
+
case "pending":
|
|
89
|
+
return "bg-[var(--stgm-status-pending-subtle)] text-[var(--stgm-status-pending)]";
|
|
90
|
+
case "degraded":
|
|
91
|
+
return "bg-[var(--stgm-status-degraded-subtle)] text-[var(--stgm-status-degraded)]";
|
|
92
|
+
case "failed":
|
|
93
|
+
return "bg-[var(--stgm-status-failed-subtle)] text-[var(--stgm-status-failed)]";
|
|
94
|
+
case "disabled":
|
|
95
|
+
return "bg-[var(--stgm-status-disabled-subtle)] text-[var(--stgm-status-disabled)]";
|
|
96
|
+
case "draft":
|
|
97
|
+
return "bg-[var(--stgm-status-draft-subtle)] text-[var(--stgm-status-draft)]";
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/** Maps a status phase to the dot's background color (the main token). */
|
|
102
|
+
function dotClasses(phase: StatusPhase): string {
|
|
103
|
+
switch (phase) {
|
|
104
|
+
case "ready":
|
|
105
|
+
return "bg-[var(--stgm-status-ready)]";
|
|
106
|
+
case "running":
|
|
107
|
+
return "bg-[var(--stgm-status-running)]";
|
|
108
|
+
case "pending":
|
|
109
|
+
return "bg-[var(--stgm-status-pending)]";
|
|
110
|
+
case "degraded":
|
|
111
|
+
return "bg-[var(--stgm-status-degraded)]";
|
|
112
|
+
case "failed":
|
|
113
|
+
return "bg-[var(--stgm-status-failed)]";
|
|
114
|
+
case "disabled":
|
|
115
|
+
return "bg-[var(--stgm-status-disabled)]";
|
|
116
|
+
case "draft":
|
|
117
|
+
return "bg-[var(--stgm-status-draft)]";
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { cn } from "@stigmer/theme";
|
|
4
|
+
import type { ViewMode } from "../types";
|
|
5
|
+
|
|
6
|
+
/** Props for {@link ViewSwitcher}. */
|
|
7
|
+
export interface ViewSwitcherProps {
|
|
8
|
+
/** Currently active view mode. */
|
|
9
|
+
readonly value: ViewMode;
|
|
10
|
+
/** Called when the user selects a different view mode. */
|
|
11
|
+
readonly onChange: (mode: ViewMode) => void;
|
|
12
|
+
/** Which view modes to show. @default ["table", "cards", "list"] */
|
|
13
|
+
readonly modes?: readonly ViewMode[];
|
|
14
|
+
/** Additional CSS classes. */
|
|
15
|
+
readonly className?: string;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
const MODE_META: Record<ViewMode, { label: string; icon: () => React.JSX.Element }> = {
|
|
19
|
+
table: { label: "Table view", icon: TableIcon },
|
|
20
|
+
cards: { label: "Card view", icon: CardsIcon },
|
|
21
|
+
list: { label: "List view", icon: ListIcon },
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Toggle button group for switching between table, cards, and list views.
|
|
26
|
+
*
|
|
27
|
+
* Uses `role="radiogroup"` with `role="radio"` children for accessible
|
|
28
|
+
* view switching. Each button shows an icon and is labeled for screen
|
|
29
|
+
* readers.
|
|
30
|
+
*/
|
|
31
|
+
export function ViewSwitcher({
|
|
32
|
+
value,
|
|
33
|
+
onChange,
|
|
34
|
+
modes = ["table", "cards", "list"],
|
|
35
|
+
className,
|
|
36
|
+
}: ViewSwitcherProps) {
|
|
37
|
+
return (
|
|
38
|
+
<div
|
|
39
|
+
role="radiogroup"
|
|
40
|
+
aria-label="View mode"
|
|
41
|
+
className={cn("inline-flex rounded-md border border-input", className)}
|
|
42
|
+
>
|
|
43
|
+
{modes.map((mode) => {
|
|
44
|
+
const { label, icon: Icon } = MODE_META[mode];
|
|
45
|
+
const isActive = value === mode;
|
|
46
|
+
return (
|
|
47
|
+
<button
|
|
48
|
+
key={mode}
|
|
49
|
+
type="button"
|
|
50
|
+
role="radio"
|
|
51
|
+
aria-checked={isActive}
|
|
52
|
+
aria-label={label}
|
|
53
|
+
onClick={() => onChange(mode)}
|
|
54
|
+
className={cn(
|
|
55
|
+
"inline-flex items-center justify-center px-2 py-1.5 transition-colors",
|
|
56
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:z-10",
|
|
57
|
+
"first:rounded-l-[calc(var(--stgm-radius)-1px)] last:rounded-r-[calc(var(--stgm-radius)-1px)]",
|
|
58
|
+
"border-r border-input last:border-r-0",
|
|
59
|
+
isActive
|
|
60
|
+
? "bg-accent text-accent-foreground"
|
|
61
|
+
: "text-muted-foreground hover:text-foreground hover:bg-accent-hover",
|
|
62
|
+
)}
|
|
63
|
+
>
|
|
64
|
+
<Icon />
|
|
65
|
+
</button>
|
|
66
|
+
);
|
|
67
|
+
})}
|
|
68
|
+
</div>
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
// Icons (inline SVGs matching the SDK's icon pattern)
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
|
|
76
|
+
function TableIcon() {
|
|
77
|
+
return (
|
|
78
|
+
<svg
|
|
79
|
+
width="14"
|
|
80
|
+
height="14"
|
|
81
|
+
viewBox="0 0 14 14"
|
|
82
|
+
fill="none"
|
|
83
|
+
stroke="currentColor"
|
|
84
|
+
strokeWidth="1.25"
|
|
85
|
+
strokeLinecap="round"
|
|
86
|
+
strokeLinejoin="round"
|
|
87
|
+
aria-hidden="true"
|
|
88
|
+
>
|
|
89
|
+
<rect x="1.5" y="1.5" width="11" height="11" rx="1.5" />
|
|
90
|
+
<path d="M1.5 5.5h11M1.5 9h11M5.5 5.5v6" />
|
|
91
|
+
</svg>
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function CardsIcon() {
|
|
96
|
+
return (
|
|
97
|
+
<svg
|
|
98
|
+
width="14"
|
|
99
|
+
height="14"
|
|
100
|
+
viewBox="0 0 14 14"
|
|
101
|
+
fill="none"
|
|
102
|
+
stroke="currentColor"
|
|
103
|
+
strokeWidth="1.25"
|
|
104
|
+
strokeLinecap="round"
|
|
105
|
+
strokeLinejoin="round"
|
|
106
|
+
aria-hidden="true"
|
|
107
|
+
>
|
|
108
|
+
<rect x="1.5" y="1.5" width="4.5" height="4.5" rx="1" />
|
|
109
|
+
<rect x="8" y="1.5" width="4.5" height="4.5" rx="1" />
|
|
110
|
+
<rect x="1.5" y="8" width="4.5" height="4.5" rx="1" />
|
|
111
|
+
<rect x="8" y="8" width="4.5" height="4.5" rx="1" />
|
|
112
|
+
</svg>
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function ListIcon() {
|
|
117
|
+
return (
|
|
118
|
+
<svg
|
|
119
|
+
width="14"
|
|
120
|
+
height="14"
|
|
121
|
+
viewBox="0 0 14 14"
|
|
122
|
+
fill="none"
|
|
123
|
+
stroke="currentColor"
|
|
124
|
+
strokeWidth="1.25"
|
|
125
|
+
strokeLinecap="round"
|
|
126
|
+
strokeLinejoin="round"
|
|
127
|
+
aria-hidden="true"
|
|
128
|
+
>
|
|
129
|
+
<path d="M4.5 3h8M4.5 7h8M4.5 11h8" />
|
|
130
|
+
<circle cx="2" cy="3" r="0.75" fill="currentColor" stroke="none" />
|
|
131
|
+
<circle cx="2" cy="7" r="0.75" fill="currentColor" stroke="none" />
|
|
132
|
+
<circle cx="2" cy="11" r="0.75" fill="currentColor" stroke="none" />
|
|
133
|
+
</svg>
|
|
134
|
+
);
|
|
135
|
+
}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { useMemo, useCallback, useState, useRef, useEffect } from "react";
|
|
4
|
+
import {
|
|
5
|
+
getCoreRowModel,
|
|
6
|
+
getSortedRowModel,
|
|
7
|
+
useReactTable,
|
|
8
|
+
type ColumnDef,
|
|
9
|
+
type SortingState,
|
|
10
|
+
type RowSelectionState,
|
|
11
|
+
type Table,
|
|
12
|
+
} from "@tanstack/react-table";
|
|
13
|
+
import type { SearchResult } from "@stigmer/protos/ai/stigmer/search/v1/io_pb";
|
|
14
|
+
import type { ListParams, ListResult } from "@stigmer/sdk";
|
|
15
|
+
import { useFetch } from "../../internal/useFetch";
|
|
16
|
+
import type {
|
|
17
|
+
WorkbenchColumnDef,
|
|
18
|
+
SortValue,
|
|
19
|
+
SortDirection,
|
|
20
|
+
} from "../types";
|
|
21
|
+
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Options
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
|
|
26
|
+
/** Options for {@link useResourceCollection}. */
|
|
27
|
+
export interface UseResourceCollectionOptions<TData = SearchResult> {
|
|
28
|
+
/**
|
|
29
|
+
* Async function that fetches a page of resources.
|
|
30
|
+
* The hook passes `ListParams` (org, query, page, scope) and expects
|
|
31
|
+
* `ListResult` back. Pass `null` to disable fetching (idle state).
|
|
32
|
+
*/
|
|
33
|
+
readonly listFn: ((params: ListParams) => Promise<ListResult>) | null;
|
|
34
|
+
/** Organization slug to scope the query. Pass `null` to disable fetching. */
|
|
35
|
+
readonly org: string | null;
|
|
36
|
+
/** Text search query. No debouncing is applied — the consumer controls timing. */
|
|
37
|
+
readonly query?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Scope for resource visibility.
|
|
40
|
+
* - `"org"` — resources owned by the active organization.
|
|
41
|
+
* - `"all"` — includes public resources from other organizations.
|
|
42
|
+
* @default "org"
|
|
43
|
+
*/
|
|
44
|
+
readonly scope?: "org" | "all";
|
|
45
|
+
/** Current page number (1-indexed). @default 1 */
|
|
46
|
+
readonly page?: number;
|
|
47
|
+
/** Page size. @default 20 */
|
|
48
|
+
readonly pageSize?: number;
|
|
49
|
+
/** Active sort. When provided, the column header shows the sort indicator. */
|
|
50
|
+
readonly sort?: SortValue | null;
|
|
51
|
+
/** Called when the user changes the sort via a column header click. */
|
|
52
|
+
readonly onSortChange?: (sort: SortValue | null) => void;
|
|
53
|
+
/**
|
|
54
|
+
* Column definitions for the table view. These are converted to
|
|
55
|
+
* TanStack Table column defs internally.
|
|
56
|
+
*/
|
|
57
|
+
readonly columns?: readonly WorkbenchColumnDef<TData>[];
|
|
58
|
+
/** Enable row selection state tracking. @default false */
|
|
59
|
+
readonly enableSelection?: boolean;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Return value
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
|
|
66
|
+
/** Return value of {@link useResourceCollection}. */
|
|
67
|
+
export interface UseResourceCollectionReturn<TData = SearchResult> {
|
|
68
|
+
/** The fetched data items for the current page. */
|
|
69
|
+
readonly items: readonly TData[];
|
|
70
|
+
/** Total number of matching items across all pages. */
|
|
71
|
+
readonly totalCount: number;
|
|
72
|
+
/** Total number of pages. */
|
|
73
|
+
readonly totalPages: number;
|
|
74
|
+
/** The current page number (mirrors input). */
|
|
75
|
+
readonly currentPage: number;
|
|
76
|
+
/** `true` during the initial data fetch (no data yet). */
|
|
77
|
+
readonly isLoading: boolean;
|
|
78
|
+
/** `true` during a background refetch while stale data is shown. */
|
|
79
|
+
readonly isRefetching: boolean;
|
|
80
|
+
/** Error from the last failed fetch, or `null`. */
|
|
81
|
+
readonly error: Error | null;
|
|
82
|
+
/** Imperatively trigger a refetch. */
|
|
83
|
+
readonly refetch: () => void;
|
|
84
|
+
/**
|
|
85
|
+
* The TanStack Table instance. Available for advanced consumers who
|
|
86
|
+
* need direct table API access (e.g. custom renderers). `null` when
|
|
87
|
+
* no columns are provided.
|
|
88
|
+
*/
|
|
89
|
+
readonly table: Table<TData> | null;
|
|
90
|
+
/** Current row selection state (item ID -> selected). */
|
|
91
|
+
readonly rowSelection: RowSelectionState;
|
|
92
|
+
/** Update row selection state directly. */
|
|
93
|
+
readonly setRowSelection: React.Dispatch<React.SetStateAction<RowSelectionState>>;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
// Hook
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
|
|
100
|
+
const DEFAULT_PAGE_SIZE = 20;
|
|
101
|
+
|
|
102
|
+
interface CollectionData {
|
|
103
|
+
entries: readonly SearchResult[];
|
|
104
|
+
totalCount: number;
|
|
105
|
+
totalPages: number;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const INITIAL_DATA: CollectionData = {
|
|
109
|
+
entries: [],
|
|
110
|
+
totalCount: 0,
|
|
111
|
+
totalPages: 0,
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Headless hook that manages resource collection state: data fetching,
|
|
116
|
+
* sorting, selection, and pagination.
|
|
117
|
+
*
|
|
118
|
+
* Wraps `useFetch` for data and `@tanstack/react-table` for table state
|
|
119
|
+
* (sorting, selection, column visibility). The hook itself produces no
|
|
120
|
+
* DOM — it returns data, state, and a TanStack Table instance that view
|
|
121
|
+
* components (`ResourceTable`, `ResourceCards`, `ResourceList`) consume.
|
|
122
|
+
*
|
|
123
|
+
* Platform builders who want full rendering control use this hook
|
|
124
|
+
* directly. The `ResourceWorkbench` shell composes it internally.
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```tsx
|
|
128
|
+
* const collection = useResourceCollection({
|
|
129
|
+
* listFn: (params) => stigmer.agent.list(params),
|
|
130
|
+
* org: "acme",
|
|
131
|
+
* query: debouncedQuery,
|
|
132
|
+
* page: 1,
|
|
133
|
+
* columns: agentColumns,
|
|
134
|
+
* });
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
export function useResourceCollection<TData = SearchResult>(
|
|
138
|
+
options: UseResourceCollectionOptions<TData>,
|
|
139
|
+
): UseResourceCollectionReturn<TData> {
|
|
140
|
+
const {
|
|
141
|
+
listFn,
|
|
142
|
+
org,
|
|
143
|
+
query = "",
|
|
144
|
+
scope = "org",
|
|
145
|
+
page = 1,
|
|
146
|
+
pageSize = DEFAULT_PAGE_SIZE,
|
|
147
|
+
sort = null,
|
|
148
|
+
onSortChange,
|
|
149
|
+
columns = [],
|
|
150
|
+
enableSelection = false,
|
|
151
|
+
} = options;
|
|
152
|
+
|
|
153
|
+
// --- Data fetching via useFetch -----------------------------------------
|
|
154
|
+
const { data, isLoading, isRefetching, error, refetch } = useFetch<CollectionData>(
|
|
155
|
+
listFn && org
|
|
156
|
+
? async () => {
|
|
157
|
+
const params: ListParams = {
|
|
158
|
+
org,
|
|
159
|
+
query: query || undefined,
|
|
160
|
+
excludePublic: false,
|
|
161
|
+
crossOrgPublic: scope === "all",
|
|
162
|
+
page: { num: page, size: pageSize },
|
|
163
|
+
};
|
|
164
|
+
const result = await listFn(params as Parameters<typeof listFn>[0]);
|
|
165
|
+
return {
|
|
166
|
+
entries: [...result.entries],
|
|
167
|
+
totalCount: result.totalCount,
|
|
168
|
+
totalPages: result.totalPages,
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
: null,
|
|
172
|
+
[listFn, org, query, scope, page, pageSize],
|
|
173
|
+
INITIAL_DATA,
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
const items = data.entries as unknown as readonly TData[];
|
|
177
|
+
|
|
178
|
+
// --- TanStack Table sorting bridge --------------------------------------
|
|
179
|
+
const sortingState: SortingState = useMemo(() => {
|
|
180
|
+
if (!sort) return [];
|
|
181
|
+
return [{ id: sort.id, desc: sort.direction === "desc" }];
|
|
182
|
+
}, [sort]);
|
|
183
|
+
|
|
184
|
+
const onSortChangeRef = useRef(onSortChange);
|
|
185
|
+
onSortChangeRef.current = onSortChange;
|
|
186
|
+
|
|
187
|
+
const handleSortingChange = useCallback(
|
|
188
|
+
(updater: SortingState | ((prev: SortingState) => SortingState)) => {
|
|
189
|
+
const next = typeof updater === "function" ? updater(sortingState) : updater;
|
|
190
|
+
if (next.length === 0) {
|
|
191
|
+
onSortChangeRef.current?.(null);
|
|
192
|
+
} else {
|
|
193
|
+
const col = next[0];
|
|
194
|
+
onSortChangeRef.current?.({
|
|
195
|
+
id: col.id,
|
|
196
|
+
direction: (col.desc ? "desc" : "asc") as SortDirection,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
[sortingState],
|
|
201
|
+
);
|
|
202
|
+
|
|
203
|
+
// --- Row selection state ------------------------------------------------
|
|
204
|
+
const [rowSelection, setRowSelection] = useState<RowSelectionState>({});
|
|
205
|
+
|
|
206
|
+
// Clear selection when page, query, or scope changes to prevent stale refs.
|
|
207
|
+
const clearKey = `${page}-${query}-${scope}`;
|
|
208
|
+
const prevClearKey = useRef(clearKey);
|
|
209
|
+
useEffect(() => {
|
|
210
|
+
if (prevClearKey.current !== clearKey) {
|
|
211
|
+
prevClearKey.current = clearKey;
|
|
212
|
+
setRowSelection({});
|
|
213
|
+
}
|
|
214
|
+
}, [clearKey]);
|
|
215
|
+
|
|
216
|
+
// --- TanStack Table column conversion -----------------------------------
|
|
217
|
+
const tanstackColumns = useMemo<ColumnDef<TData, unknown>[]>(() => {
|
|
218
|
+
return columns.map((col) => ({
|
|
219
|
+
id: col.id,
|
|
220
|
+
header: col.header,
|
|
221
|
+
cell: (info) => col.cell(info.row.original),
|
|
222
|
+
enableSorting: col.sortable ?? false,
|
|
223
|
+
size: col.minWidth,
|
|
224
|
+
minSize: col.minWidth,
|
|
225
|
+
}));
|
|
226
|
+
}, [columns]);
|
|
227
|
+
|
|
228
|
+
// --- TanStack Table instance -------------------------------------------
|
|
229
|
+
const table = useReactTable<TData>({
|
|
230
|
+
data: items as TData[],
|
|
231
|
+
columns: tanstackColumns,
|
|
232
|
+
state: {
|
|
233
|
+
sorting: sortingState,
|
|
234
|
+
rowSelection,
|
|
235
|
+
},
|
|
236
|
+
onSortingChange: handleSortingChange,
|
|
237
|
+
onRowSelectionChange: enableSelection ? setRowSelection : undefined,
|
|
238
|
+
getCoreRowModel: getCoreRowModel(),
|
|
239
|
+
getSortedRowModel: getSortedRowModel(),
|
|
240
|
+
getRowId: (row) => (row as SearchResult).id ?? String(items.indexOf(row as TData)),
|
|
241
|
+
manualPagination: true,
|
|
242
|
+
manualSorting: true,
|
|
243
|
+
enableRowSelection: enableSelection,
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
const tableOrNull = tanstackColumns.length > 0 ? table : null;
|
|
247
|
+
|
|
248
|
+
return {
|
|
249
|
+
items,
|
|
250
|
+
totalCount: data.totalCount,
|
|
251
|
+
totalPages: data.totalPages,
|
|
252
|
+
currentPage: page,
|
|
253
|
+
isLoading,
|
|
254
|
+
isRefetching,
|
|
255
|
+
error,
|
|
256
|
+
refetch,
|
|
257
|
+
table: tableOrNull,
|
|
258
|
+
rowSelection,
|
|
259
|
+
setRowSelection,
|
|
260
|
+
};
|
|
261
|
+
}
|