@stigmer/react 3.40.1 → 3.41.1-dev.20261003094357.g39d6aa748646
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/README.md +2 -1
- package/access/ManageAccessButton.d.ts +1 -1
- package/access/ManageAccessButton.js +1 -1
- package/access/ManageAccessDialog.d.ts +1 -1
- package/access/ManageAccessDialog.js +2 -2
- package/access/ManageAccessDialog.js.map +1 -1
- package/access/types.d.ts +1 -1
- package/agent/AgentDetailView.d.ts.map +1 -1
- package/agent/AgentDetailView.js +2 -1
- package/agent/AgentDetailView.js.map +1 -1
- package/api-key/ApiKeyListPanel.d.ts.map +1 -1
- package/api-key/ApiKeyListPanel.js +2 -1
- package/api-key/ApiKeyListPanel.js.map +1 -1
- package/attachment/AttachmentImageLightbox.d.ts.map +1 -1
- package/attachment/AttachmentImageLightbox.js.map +1 -1
- package/billing/AutoRechargeCard.d.ts +3 -3
- package/billing/AutoRechargeCard.d.ts.map +1 -1
- package/billing/AutoRechargeCard.js +4 -4
- package/billing/AutoRechargeCard.js.map +1 -1
- package/billing/BillingSection.d.ts.map +1 -1
- package/billing/BillingSection.js +7 -6
- package/billing/BillingSection.js.map +1 -1
- package/billing/ChangePlanDialog.d.ts.map +1 -1
- package/billing/ChangePlanDialog.js +13 -1
- package/billing/ChangePlanDialog.js.map +1 -1
- package/billing/CreditLedgerTable.d.ts +3 -3
- package/billing/CreditLedgerTable.d.ts.map +1 -1
- package/billing/CreditLedgerTable.js +3 -3
- package/billing/CreditLedgerTable.js.map +1 -1
- package/billing/CreditPackGrid.d.ts +1 -1
- package/billing/CreditPackGrid.js +1 -1
- package/billing/PaymentMethodCard.d.ts +1 -1
- package/billing/PaymentMethodCard.js +1 -1
- package/billing/PlanSection.d.ts +3 -3
- package/billing/PlanSection.d.ts.map +1 -1
- package/billing/PlanSection.js +4 -3
- package/billing/PlanSection.js.map +1 -1
- package/billing/ProviderKeysSection.d.ts +33 -0
- package/billing/ProviderKeysSection.d.ts.map +1 -0
- package/billing/ProviderKeysSection.js +143 -0
- package/billing/ProviderKeysSection.js.map +1 -0
- package/billing/UpgradeNotice.d.ts.map +1 -1
- package/billing/UpgradeNotice.js +1 -0
- package/billing/UpgradeNotice.js.map +1 -1
- package/billing/index.d.ts +4 -0
- package/billing/index.d.ts.map +1 -1
- package/billing/index.js +2 -0
- package/billing/index.js.map +1 -1
- package/billing/plan-features.d.ts +3 -2
- package/billing/plan-features.d.ts.map +1 -1
- package/billing/plan-features.js +5 -4
- package/billing/plan-features.js.map +1 -1
- package/billing/useBillingAccount.d.ts +4 -4
- package/billing/useBillingAccount.d.ts.map +1 -1
- package/billing/useBillingAccount.js +7 -7
- package/billing/useBillingAccount.js.map +1 -1
- package/billing/useBillingUsageReport.d.ts +4 -4
- package/billing/useBillingUsageReport.d.ts.map +1 -1
- package/billing/useBillingUsageReport.js +7 -7
- package/billing/useBillingUsageReport.js.map +1 -1
- package/billing/useChangePlan.d.ts +2 -2
- package/billing/useChangePlan.d.ts.map +1 -1
- package/billing/useChangePlan.js +4 -4
- package/billing/useChangePlan.js.map +1 -1
- package/billing/useCreateBillingPortalSession.d.ts +2 -2
- package/billing/useCreateBillingPortalSession.d.ts.map +1 -1
- package/billing/useCreateBillingPortalSession.js +3 -3
- package/billing/useCreateBillingPortalSession.js.map +1 -1
- package/billing/useCreateCheckoutSession.d.ts +2 -2
- package/billing/useCreateCheckoutSession.d.ts.map +1 -1
- package/billing/useCreateCheckoutSession.js +2 -2
- package/billing/useCreateCheckoutSession.js.map +1 -1
- package/billing/useCreatePaymentMethodSetupSession.d.ts +1 -1
- package/billing/useCreatePaymentMethodSetupSession.d.ts.map +1 -1
- package/billing/useCreatePaymentMethodSetupSession.js +2 -2
- package/billing/useCreatePaymentMethodSetupSession.js.map +1 -1
- package/billing/useCreditLedger.d.ts +4 -4
- package/billing/useCreditLedger.d.ts.map +1 -1
- package/billing/useCreditLedger.js +7 -7
- package/billing/useCreditLedger.js.map +1 -1
- package/billing/useCustomerModelPricing.d.ts +4 -4
- package/billing/useCustomerModelPricing.d.ts.map +1 -1
- package/billing/useCustomerModelPricing.js +6 -6
- package/billing/useCustomerModelPricing.js.map +1 -1
- package/billing/useEntitlements.d.ts +2 -2
- package/billing/useEntitlements.d.ts.map +1 -1
- package/billing/useEntitlements.js +4 -4
- package/billing/useEntitlements.js.map +1 -1
- package/billing/usePeriodEstimate.d.ts +1 -1
- package/billing/usePeriodEstimate.d.ts.map +1 -1
- package/billing/usePeriodEstimate.js +3 -3
- package/billing/usePeriodEstimate.js.map +1 -1
- package/billing/useProviderKeys.d.ts +67 -0
- package/billing/useProviderKeys.d.ts.map +1 -0
- package/billing/useProviderKeys.js +61 -0
- package/billing/useProviderKeys.js.map +1 -0
- package/billing/useSetAutoRechargeConfig.d.ts +2 -2
- package/billing/useSetAutoRechargeConfig.d.ts.map +1 -1
- package/billing/useSetAutoRechargeConfig.js +2 -2
- package/billing/useSetAutoRechargeConfig.js.map +1 -1
- package/billing/useSubscription.d.ts +3 -3
- package/billing/useSubscription.d.ts.map +1 -1
- package/billing/useSubscription.js +7 -7
- package/billing/useSubscription.js.map +1 -1
- package/channel/AgentChannelsPanel.d.ts.map +1 -1
- package/channel/AgentChannelsPanel.js +11 -9
- package/channel/AgentChannelsPanel.js.map +1 -1
- package/channel/connect/ServingAppSection.js +1 -1
- package/channel/connect/ServingAppSection.js.map +1 -1
- package/channel-app/ChannelAppDetailPanel.d.ts +2 -2
- package/channel-app/ChannelAppDetailPanel.js +17 -10
- package/channel-app/ChannelAppDetailPanel.js.map +1 -1
- package/channel-app/ChannelAppListPanel.d.ts +2 -2
- package/channel-app/ChannelAppListPanel.d.ts.map +1 -1
- package/channel-app/ChannelAppListPanel.js +2 -1
- package/channel-app/ChannelAppListPanel.js.map +1 -1
- package/channel-app/CreateChannelAppForm.js +1 -1
- package/channel-app/CreateChannelAppForm.js.map +1 -1
- package/channel-app/copy.d.ts +3 -3
- package/channel-app/copy.js +3 -3
- package/channel-app/internal.d.ts +9 -0
- package/channel-app/internal.d.ts.map +1 -1
- package/channel-app/internal.js +9 -0
- package/channel-app/internal.js.map +1 -1
- package/channel-app/slackAppSetup.d.ts +3 -24
- package/channel-app/slackAppSetup.d.ts.map +1 -1
- package/channel-app/slackAppSetup.js +6 -3
- package/channel-app/slackAppSetup.js.map +1 -1
- package/channel-app/whatsappAppSetup.d.ts +3 -27
- package/channel-app/whatsappAppSetup.d.ts.map +1 -1
- package/channel-app/whatsappAppSetup.js +5 -2
- package/channel-app/whatsappAppSetup.js.map +1 -1
- package/composer/SessionComposer.d.ts.map +1 -1
- package/composer/SessionComposer.js +5 -9
- package/composer/SessionComposer.js.map +1 -1
- package/cursor-accounts/CursorAccountEditor.js +3 -3
- package/cursor-accounts/CursorAccountEditor.js.map +1 -1
- package/cursor-accounts/CursorAccountsConsole.js +3 -3
- package/cursor-accounts/CursorAccountsConsole.js.map +1 -1
- package/dashboard/OperationalDashboard.d.ts +1 -4
- package/dashboard/OperationalDashboard.d.ts.map +1 -1
- package/dashboard/OperationalDashboard.js +1 -3
- package/dashboard/OperationalDashboard.js.map +1 -1
- package/dashboard/useDashboardSummary.d.ts +1 -3
- package/dashboard/useDashboardSummary.d.ts.map +1 -1
- package/dashboard/useDashboardSummary.js +1 -1
- package/dashboard/useDashboardSummary.js.map +1 -1
- package/environment/EnvironmentListPanel.d.ts.map +1 -1
- package/environment/EnvironmentListPanel.js +2 -1
- package/environment/EnvironmentListPanel.js.map +1 -1
- package/environment/EnvironmentVariableEditor.d.ts.map +1 -1
- package/environment/EnvironmentVariableEditor.js +3 -2
- package/environment/EnvironmentVariableEditor.js.map +1 -1
- package/environment/index.d.ts +1 -1
- package/environment/index.d.ts.map +1 -1
- package/environment/index.js +1 -1
- package/environment/index.js.map +1 -1
- package/environment/systemEnvVars.d.ts +4 -63
- package/environment/systemEnvVars.d.ts.map +1 -1
- package/environment/systemEnvVars.js +21 -113
- package/environment/systemEnvVars.js.map +1 -1
- package/execution/ArtifactFileContent.d.ts.map +1 -1
- package/execution/ArtifactFileContent.js +2 -1
- package/execution/ArtifactFileContent.js.map +1 -1
- package/execution/McpToolDetail.d.ts.map +1 -1
- package/execution/McpToolDetail.js +2 -1
- package/execution/McpToolDetail.js.map +1 -1
- package/execution/RecalledMemoriesCard.js +1 -1
- package/execution/ResultView.d.ts.map +1 -1
- package/execution/ResultView.js +2 -1
- package/execution/ResultView.js.map +1 -1
- package/execution/TerminalSession.js +1 -1
- package/execution/TerminalSession.js.map +1 -1
- package/execution/ThreadSkeleton.d.ts.map +1 -1
- package/execution/ThreadSkeleton.js +2 -1
- package/execution/ThreadSkeleton.js.map +1 -1
- package/execution/file-path-resolver.d.ts.map +1 -1
- package/execution/file-path-resolver.js +3 -2
- package/execution/file-path-resolver.js.map +1 -1
- package/execution/sandbox-path-normalizer.d.ts +0 -11
- package/execution/sandbox-path-normalizer.d.ts.map +1 -1
- package/execution/sandbox-path-normalizer.js +2 -1
- package/execution/sandbox-path-normalizer.js.map +1 -1
- package/github/parseGitUrl.d.ts.map +1 -1
- package/github/parseGitUrl.js +16 -4
- package/github/parseGitUrl.js.map +1 -1
- package/iam-policy/GrantAccessForm.d.ts +3 -3
- package/iam-policy/GrantAccessForm.d.ts.map +1 -1
- package/iam-policy/GrantAccessForm.js +3 -3
- package/iam-policy/GrantAccessForm.js.map +1 -1
- package/iam-policy/OrgMembersPanel.d.ts +3 -3
- package/iam-policy/OrgMembersPanel.d.ts.map +1 -1
- package/iam-policy/OrgMembersPanel.js +5 -4
- package/iam-policy/OrgMembersPanel.js.map +1 -1
- package/iam-policy/PeopleWithAccess.d.ts +2 -2
- package/iam-policy/PeopleWithAccess.d.ts.map +1 -1
- package/iam-policy/PeopleWithAccess.js +2 -2
- package/iam-policy/PeopleWithAccess.js.map +1 -1
- package/iam-policy/PrincipalPicker.d.ts +2 -2
- package/iam-policy/PrincipalPicker.d.ts.map +1 -1
- package/iam-policy/PrincipalPicker.js +2 -2
- package/iam-policy/PrincipalPicker.js.map +1 -1
- package/iam-policy/SharePanel.d.ts +3 -3
- package/iam-policy/SharePanel.d.ts.map +1 -1
- package/iam-policy/SharePanel.js +3 -3
- package/iam-policy/SharePanel.js.map +1 -1
- package/iam-policy/useCheckPermission.d.ts +4 -1
- package/iam-policy/useCheckPermission.d.ts.map +1 -1
- package/iam-policy/useCheckPermission.js +4 -1
- package/iam-policy/useCheckPermission.js.map +1 -1
- package/iam-policy/useCreateIamPolicy.d.ts +1 -1
- package/iam-policy/useCreateIamPolicy.js +1 -1
- package/iam-policy/useDeleteIamPolicy.d.ts +1 -1
- package/iam-policy/useDeleteIamPolicy.js +1 -1
- package/iam-policy/useGrantableRoles.d.ts +1 -1
- package/iam-policy/useGrantableRoles.js +1 -1
- package/iam-policy/useGranteeCandidates.d.ts +3 -3
- package/iam-policy/useGranteeCandidates.d.ts.map +1 -1
- package/iam-policy/useGranteeCandidates.js +2 -2
- package/iam-policy/useGranteeCandidates.js.map +1 -1
- package/iam-policy/useOwnerAssignment.d.ts +2 -2
- package/iam-policy/useOwnerAssignment.d.ts.map +1 -1
- package/iam-policy/useOwnerAssignment.js +3 -3
- package/iam-policy/useOwnerAssignment.js.map +1 -1
- package/iam-policy/usePrincipalsCount.d.ts +4 -4
- package/iam-policy/usePrincipalsCount.d.ts.map +1 -1
- package/iam-policy/usePrincipalsCount.js +7 -7
- package/iam-policy/usePrincipalsCount.js.map +1 -1
- package/iam-policy/useResourceAccess.d.ts +1 -1
- package/iam-policy/useResourceAccess.js +1 -1
- package/iam-policy/useRevokeOrgAccess.d.ts +11 -9
- package/iam-policy/useRevokeOrgAccess.d.ts.map +1 -1
- package/iam-policy/useRevokeOrgAccess.js +6 -6
- package/iam-policy/useRevokeOrgAccess.js.map +1 -1
- package/identity-account/AccountPreferencesPanel.d.ts +6 -0
- package/identity-account/AccountPreferencesPanel.d.ts.map +1 -1
- package/identity-account/AccountPreferencesPanel.js +35 -3
- package/identity-account/AccountPreferencesPanel.js.map +1 -1
- package/identity-account/useAccountExecutionDefaults.d.ts +1 -1
- package/identity-account/useAccountExecutionDefaults.d.ts.map +1 -1
- package/identity-account/useAccountExecutionDefaults.js +2 -3
- package/identity-account/useAccountExecutionDefaults.js.map +1 -1
- package/identity-provider/IdentityProviderDetailPanel.js +4 -4
- package/identity-provider/IdentityProviderDetailPanel.js.map +1 -1
- package/identity-provider/IdentityProviderListPanel.d.ts.map +1 -1
- package/identity-provider/IdentityProviderListPanel.js +2 -1
- package/identity-provider/IdentityProviderListPanel.js.map +1 -1
- package/identity-provider/IdentityProviderWizard.js +1 -1
- package/identity-provider/IdentityProviderWizard.js.map +1 -1
- package/identity-provider/SsoLoginPrompt.js +2 -1
- package/identity-provider/SsoLoginPrompt.js.map +1 -1
- package/identity-provider/useIdentityProviderList.d.ts +2 -2
- package/identity-provider/useIdentityProviderList.js +2 -2
- package/index.d.ts +4 -4
- package/index.d.ts.map +1 -1
- package/index.js +4 -4
- package/index.js.map +1 -1
- package/inline-edit/InlineEditImage.d.ts +4 -0
- package/inline-edit/InlineEditImage.d.ts.map +1 -1
- package/inline-edit/InlineEditImage.js +12 -11
- package/inline-edit/InlineEditImage.js.map +1 -1
- package/inline-edit/InlineEditText.d.ts +4 -0
- package/inline-edit/InlineEditText.d.ts.map +1 -1
- package/inline-edit/InlineEditText.js +12 -11
- package/inline-edit/InlineEditText.js.map +1 -1
- package/inline-edit/InlineEditTextarea.d.ts +4 -0
- package/inline-edit/InlineEditTextarea.d.ts.map +1 -1
- package/inline-edit/InlineEditTextarea.js +11 -16
- package/inline-edit/InlineEditTextarea.js.map +1 -1
- package/inline-edit/useInlineDraft.d.ts +26 -0
- package/inline-edit/useInlineDraft.d.ts.map +1 -0
- package/inline-edit/useInlineDraft.js +61 -0
- package/inline-edit/useInlineDraft.js.map +1 -0
- package/internal/DialogShell.d.ts +21 -0
- package/internal/DialogShell.d.ts.map +1 -1
- package/internal/DialogShell.js +51 -4
- package/internal/DialogShell.js.map +1 -1
- package/internal/LoadingRegion.d.ts +35 -0
- package/internal/LoadingRegion.d.ts.map +1 -0
- package/internal/LoadingRegion.js +33 -0
- package/internal/LoadingRegion.js.map +1 -0
- package/internal/UnknownPublicAddressNotice.d.ts +20 -0
- package/internal/UnknownPublicAddressNotice.d.ts.map +1 -0
- package/internal/UnknownPublicAddressNotice.js +19 -0
- package/internal/UnknownPublicAddressNotice.js.map +1 -0
- package/internal/features.js +2 -2
- package/internal/features.js.map +1 -1
- package/internal/markdown-components.d.ts.map +1 -1
- package/internal/markdown-components.js +18 -4
- package/internal/markdown-components.js.map +1 -1
- package/internal/trim.d.ts +7 -0
- package/internal/trim.d.ts.map +1 -0
- package/internal/trim.js +12 -0
- package/internal/trim.js.map +1 -0
- package/invitation/InvitationManager.d.ts.map +1 -1
- package/invitation/InvitationManager.js +2 -1
- package/invitation/InvitationManager.js.map +1 -1
- package/invitation/InvitationRedemption.d.ts.map +1 -1
- package/invitation/InvitationRedemption.js +5 -4
- package/invitation/InvitationRedemption.js.map +1 -1
- package/invitation/useInvitationPreview.d.ts +1 -1
- package/invitation/useInvitationPreview.js +1 -1
- package/library/InstanceVisibilitySelector.d.ts +1 -1
- package/library/InstanceVisibilitySelector.d.ts.map +1 -1
- package/library/ResourceVisibilityControl.d.ts +6 -3
- package/library/ResourceVisibilityControl.d.ts.map +1 -1
- package/library/ResourceVisibilityControl.js +7 -4
- package/library/ResourceVisibilityControl.js.map +1 -1
- package/library/VisibilitySelector.d.ts +2 -2
- package/library/VisibilitySelector.d.ts.map +1 -1
- package/library/VisibilitySelector.js +1 -1
- package/licenses/LicenseDetail.d.ts.map +1 -1
- package/licenses/LicenseDetail.js +3 -3
- package/licenses/LicenseDetail.js.map +1 -1
- package/licenses/LicenseIssueForm.js +7 -7
- package/licenses/LicenseIssueForm.js.map +1 -1
- package/licenses/license-draft.d.ts +1 -1
- package/licenses/license-draft.d.ts.map +1 -1
- package/licenses/license-draft.js +3 -3
- package/licenses/license-draft.js.map +1 -1
- package/licenses/license-format.d.ts +7 -5
- package/licenses/license-format.d.ts.map +1 -1
- package/licenses/license-format.js +2 -4
- package/licenses/license-format.js.map +1 -1
- package/mcp-server/McpServerConnectDialog.js +4 -5
- package/mcp-server/McpServerConnectDialog.js.map +1 -1
- package/mcp-server/McpServerDetailView.d.ts.map +1 -1
- package/mcp-server/McpServerDetailView.js +5 -7
- package/mcp-server/McpServerDetailView.js.map +1 -1
- package/mcp-server/McpServerPicker.d.ts.map +1 -1
- package/mcp-server/McpServerPicker.js +2 -6
- package/mcp-server/McpServerPicker.js.map +1 -1
- package/mcp-server/McpToolSelector.js +1 -1
- package/mcp-server/McpToolSelector.js.map +1 -1
- package/mcp-server/useMcpServerConnect.d.ts +14 -25
- package/mcp-server/useMcpServerConnect.d.ts.map +1 -1
- package/mcp-server/useMcpServerConnect.js +7 -19
- package/mcp-server/useMcpServerConnect.js.map +1 -1
- package/mcp-server/useMcpServerOAuthConnect.d.ts +1 -3
- package/mcp-server/useMcpServerOAuthConnect.d.ts.map +1 -1
- package/mcp-server/useMcpServerOAuthConnect.js +6 -19
- package/mcp-server/useMcpServerOAuthConnect.js.map +1 -1
- package/memory/MemoryListPanel.d.ts.map +1 -1
- package/memory/MemoryListPanel.js +2 -1
- package/memory/MemoryListPanel.js.map +1 -1
- package/models/HarnessSelector.d.ts.map +1 -1
- package/models/HarnessSelector.js +1 -2
- package/models/HarnessSelector.js.map +1 -1
- package/models/ModelSelector.d.ts +1 -1
- package/models/ModelSelector.d.ts.map +1 -1
- package/models/ModelSelector.js +1 -7
- package/models/ModelSelector.js.map +1 -1
- package/models/harness.d.ts +10 -6
- package/models/harness.d.ts.map +1 -1
- package/models/harness.js +35 -28
- package/models/harness.js.map +1 -1
- package/models/index.d.ts +1 -1
- package/models/index.d.ts.map +1 -1
- package/models/index.js +1 -1
- package/models/index.js.map +1 -1
- package/oauth-app/OAuthAppListPanel.d.ts.map +1 -1
- package/oauth-app/OAuthAppListPanel.js +2 -1
- package/oauth-app/OAuthAppListPanel.js.map +1 -1
- package/organization/OrgPreferencesPanel.d.ts +3 -3
- package/organization/OrgPreferencesPanel.d.ts.map +1 -1
- package/organization/OrgPreferencesPanel.js +19 -6
- package/organization/OrgPreferencesPanel.js.map +1 -1
- package/organization/OrgProfilePanel.d.ts +3 -3
- package/organization/OrgProfilePanel.d.ts.map +1 -1
- package/organization/OrgProfilePanel.js +8 -7
- package/organization/OrgProfilePanel.js.map +1 -1
- package/organization/index.d.ts +1 -0
- package/organization/index.d.ts.map +1 -1
- package/organization/index.js +1 -0
- package/organization/index.js.map +1 -1
- package/organization/useFollowSessionOrganization.d.ts +9 -0
- package/organization/useFollowSessionOrganization.d.ts.map +1 -0
- package/organization/useFollowSessionOrganization.js +52 -0
- package/organization/useFollowSessionOrganization.js.map +1 -0
- package/package.json +5 -5
- package/plan-catalog/plan-draft.js +3 -3
- package/plan-catalog/plan-draft.js.map +1 -1
- package/platform-client/PlatformClientListPanel.d.ts.map +1 -1
- package/platform-client/PlatformClientListPanel.js +2 -1
- package/platform-client/PlatformClientListPanel.js.map +1 -1
- package/plugin/PluginDetailView.d.ts.map +1 -1
- package/plugin/PluginDetailView.js +2 -1
- package/plugin/PluginDetailView.js.map +1 -1
- package/plugin/useMcpServerReadiness.js +2 -2
- package/plugin/useMcpServerReadiness.js.map +1 -1
- package/portal-container.d.ts +8 -0
- package/portal-container.d.ts.map +1 -1
- package/portal-container.js +8 -0
- package/portal-container.js.map +1 -1
- package/provider-standing/ProviderStandingConsole.js +1 -1
- package/provider.d.ts +31 -2
- package/provider.d.ts.map +1 -1
- package/provider.js +7 -3
- package/provider.js.map +1 -1
- package/public-base-url-context.d.ts +35 -0
- package/public-base-url-context.d.ts.map +1 -0
- package/public-base-url-context.js +63 -0
- package/public-base-url-context.js.map +1 -0
- package/resource-workbench/components/SelectionCheckbox.js +1 -1
- package/resource-workbench/components/SelectionCheckbox.js.map +1 -1
- package/schedule/ScheduleDetailView.d.ts.map +1 -1
- package/schedule/ScheduleDetailView.js +2 -1
- package/schedule/ScheduleDetailView.js.map +1 -1
- package/session/SessionViewer.d.ts +7 -2
- package/session/SessionViewer.d.ts.map +1 -1
- package/session/SessionViewer.js +7 -2
- package/session/SessionViewer.js.map +1 -1
- package/session/useLocalSessionWorker.d.ts +19 -3
- package/session/useLocalSessionWorker.d.ts.map +1 -1
- package/session/useLocalSessionWorker.js +37 -4
- package/session/useLocalSessionWorker.js.map +1 -1
- package/session/useSessionConversation.d.ts +10 -1
- package/session/useSessionConversation.d.ts.map +1 -1
- package/session/useSessionConversation.js +5 -3
- package/session/useSessionConversation.js.map +1 -1
- package/settings/ChannelAppsSection.d.ts +4 -4
- package/settings/ChannelAppsSection.js +4 -4
- package/settings/EnvironmentsSection.d.ts.map +1 -1
- package/settings/EnvironmentsSection.js +2 -1
- package/settings/EnvironmentsSection.js.map +1 -1
- package/settings/MembersSection.js +2 -2
- package/settings/MembersSection.js.map +1 -1
- package/settings/OrgPreferencesSection.js +1 -1
- package/settings/OrgPreferencesSection.js.map +1 -1
- package/settings/OrgProfileSection.js +1 -1
- package/settings/OrgProfileSection.js.map +1 -1
- package/settings/ProviderKeysSection.d.ts +3 -0
- package/settings/ProviderKeysSection.d.ts.map +1 -0
- package/settings/ProviderKeysSection.js +3 -0
- package/settings/ProviderKeysSection.js.map +1 -0
- package/settings/TeamsSection.js +1 -1
- package/settings/TeamsSection.js.map +1 -1
- package/settings/UsageSection.js +1 -1
- package/settings/UsageSection.js.map +1 -1
- package/settings/index.d.ts +2 -0
- package/settings/index.d.ts.map +1 -1
- package/settings/index.js +1 -0
- package/settings/index.js.map +1 -1
- package/settings/settings-nav.d.ts.map +1 -1
- package/settings/settings-nav.js +2 -1
- package/settings/settings-nav.js.map +1 -1
- package/sharing/ShareAgentDialog.d.ts.map +1 -1
- package/sharing/ShareAgentDialog.js +14 -9
- package/sharing/ShareAgentDialog.js.map +1 -1
- package/sharing/SharedAgentChat.d.ts.map +1 -1
- package/sharing/SharedAgentChat.js +2 -1
- package/sharing/SharedAgentChat.js.map +1 -1
- package/sharing/useCanCreateAgentShare.d.ts +3 -1
- package/sharing/useCanCreateAgentShare.d.ts.map +1 -1
- package/sharing/useCanCreateAgentShare.js +5 -3
- package/sharing/useCanCreateAgentShare.js.map +1 -1
- package/sharing/useSaveAgentShare.d.ts +1 -1
- package/sharing/useSaveAgentShare.js +1 -1
- package/sidebar/WorkspaceSidebar.d.ts.map +1 -1
- package/sidebar/WorkspaceSidebar.js +2 -1
- package/sidebar/WorkspaceSidebar.js.map +1 -1
- package/skill/SkillDetailView.d.ts.map +1 -1
- package/skill/SkillDetailView.js +2 -1
- package/skill/SkillDetailView.js.map +1 -1
- package/skill/SkillDiffDialog.d.ts.map +1 -1
- package/skill/SkillDiffDialog.js +2 -1
- package/skill/SkillDiffDialog.js.map +1 -1
- package/skill/SkillFileBrowser.d.ts.map +1 -1
- package/skill/SkillFileBrowser.js +2 -1
- package/skill/SkillFileBrowser.js.map +1 -1
- package/src/access/ManageAccessButton.tsx +1 -1
- package/src/access/ManageAccessDialog.tsx +2 -2
- package/src/access/types.ts +1 -1
- package/src/agent/AgentDetailView.tsx +4 -4
- package/src/api-key/ApiKeyListPanel.tsx +4 -4
- package/src/attachment/AttachmentImageLightbox.tsx +3 -4
- package/src/billing/AutoRechargeCard.tsx +5 -5
- package/src/billing/BillingSection.tsx +10 -9
- package/src/billing/ChangePlanDialog.tsx +14 -2
- package/src/billing/CreditLedgerTable.tsx +4 -4
- package/src/billing/CreditPackGrid.tsx +1 -1
- package/src/billing/PaymentMethodCard.tsx +1 -1
- package/src/billing/PlanSection.tsx +6 -5
- package/src/billing/ProviderKeysSection.tsx +324 -0
- package/src/billing/UpgradeNotice.tsx +1 -0
- package/src/billing/index.ts +9 -0
- package/src/billing/plan-features.ts +5 -4
- package/src/billing/useBillingAccount.ts +7 -7
- package/src/billing/useBillingUsageReport.ts +7 -7
- package/src/billing/useChangePlan.ts +6 -6
- package/src/billing/useCreateBillingPortalSession.ts +4 -4
- package/src/billing/useCreateCheckoutSession.ts +3 -3
- package/src/billing/useCreatePaymentMethodSetupSession.ts +3 -3
- package/src/billing/useCreditLedger.ts +7 -7
- package/src/billing/useCustomerModelPricing.ts +7 -7
- package/src/billing/useEntitlements.ts +5 -5
- package/src/billing/usePeriodEstimate.ts +4 -4
- package/src/billing/useProviderKeys.ts +129 -0
- package/src/billing/useSetAutoRechargeConfig.ts +3 -3
- package/src/billing/useSubscription.ts +7 -7
- package/src/channel/AgentChannelsPanel.tsx +11 -9
- package/src/channel/connect/ServingAppSection.tsx +1 -1
- package/src/channel-app/ChannelAppDetailPanel.tsx +37 -20
- package/src/channel-app/ChannelAppListPanel.tsx +6 -6
- package/src/channel-app/CreateChannelAppForm.tsx +0 -1
- package/src/channel-app/copy.ts +3 -3
- package/src/channel-app/internal.tsx +21 -0
- package/src/channel-app/slackAppSetup.ts +6 -3
- package/src/channel-app/whatsappAppSetup.ts +5 -2
- package/src/composer/SessionComposer.tsx +5 -14
- package/src/cursor-accounts/CursorAccountEditor.tsx +3 -3
- package/src/cursor-accounts/CursorAccountsConsole.tsx +5 -5
- package/src/dashboard/OperationalDashboard.tsx +1 -6
- package/src/dashboard/useDashboardSummary.ts +2 -4
- package/src/environment/EnvironmentListPanel.tsx +4 -4
- package/src/environment/EnvironmentVariableEditor.tsx +5 -5
- package/src/environment/index.ts +1 -7
- package/src/environment/systemEnvVars.ts +21 -133
- package/src/execution/ArtifactFileContent.tsx +3 -2
- package/src/execution/McpToolDetail.tsx +3 -3
- package/src/execution/RecalledMemoriesCard.tsx +1 -1
- package/src/execution/ResultView.tsx +3 -3
- package/src/execution/TerminalSession.tsx +1 -1
- package/src/execution/ThreadSkeleton.tsx +4 -4
- package/src/execution/file-path-resolver.ts +3 -2
- package/src/execution/sandbox-path-normalizer.ts +2 -1
- package/src/github/parseGitUrl.ts +13 -4
- package/src/iam-policy/GrantAccessForm.tsx +4 -4
- package/src/iam-policy/OrgMembersPanel.tsx +10 -8
- package/src/iam-policy/PeopleWithAccess.tsx +3 -3
- package/src/iam-policy/PrincipalPicker.tsx +3 -3
- package/src/iam-policy/SharePanel.tsx +4 -4
- package/src/iam-policy/useCheckPermission.ts +4 -1
- package/src/iam-policy/useCreateIamPolicy.ts +1 -1
- package/src/iam-policy/useDeleteIamPolicy.ts +1 -1
- package/src/iam-policy/useGrantableRoles.ts +1 -1
- package/src/iam-policy/useGranteeCandidates.ts +3 -3
- package/src/iam-policy/useOwnerAssignment.ts +3 -3
- package/src/iam-policy/usePrincipalsCount.ts +7 -7
- package/src/iam-policy/useResourceAccess.ts +1 -1
- package/src/iam-policy/useRevokeOrgAccess.ts +13 -11
- package/src/identity-account/AccountPreferencesPanel.tsx +60 -13
- package/src/identity-account/useAccountExecutionDefaults.ts +2 -5
- package/src/identity-provider/IdentityProviderDetailPanel.tsx +3 -9
- package/src/identity-provider/IdentityProviderListPanel.tsx +4 -4
- package/src/identity-provider/IdentityProviderWizard.tsx +1 -1
- package/src/identity-provider/SsoLoginPrompt.tsx +6 -5
- package/src/identity-provider/useIdentityProviderList.ts +2 -2
- package/src/index.ts +10 -5
- package/src/inline-edit/InlineEditImage.tsx +13 -11
- package/src/inline-edit/InlineEditText.tsx +13 -11
- package/src/inline-edit/InlineEditTextarea.tsx +12 -16
- package/src/inline-edit/useInlineDraft.ts +85 -0
- package/src/internal/DialogShell.tsx +80 -3
- package/src/internal/LoadingRegion.tsx +46 -0
- package/src/internal/UnknownPublicAddressNotice.tsx +31 -0
- package/src/internal/features.ts +2 -2
- package/src/internal/loading-region-markup.json +71 -0
- package/src/internal/markdown-components.tsx +15 -4
- package/src/internal/trim.ts +10 -0
- package/src/invitation/InvitationManager.tsx +4 -4
- package/src/invitation/InvitationRedemption.tsx +7 -7
- package/src/invitation/useInvitationPreview.ts +1 -1
- package/src/library/InstanceVisibilitySelector.tsx +1 -1
- package/src/library/ResourceVisibilityControl.tsx +7 -4
- package/src/library/VisibilitySelector.tsx +2 -2
- package/src/licenses/LicenseDetail.tsx +8 -6
- package/src/licenses/LicenseIssueForm.tsx +7 -7
- package/src/licenses/license-draft.ts +4 -4
- package/src/licenses/license-format.ts +12 -8
- package/src/mcp-server/McpServerConnectDialog.tsx +4 -6
- package/src/mcp-server/McpServerDetailView.tsx +7 -10
- package/src/mcp-server/McpServerPicker.tsx +2 -12
- package/src/mcp-server/McpToolSelector.tsx +1 -1
- package/src/mcp-server/useMcpServerConnect.ts +14 -33
- package/src/mcp-server/useMcpServerOAuthConnect.ts +7 -23
- package/src/memory/MemoryListPanel.tsx +4 -4
- package/src/models/HarnessSelector.tsx +1 -3
- package/src/models/ModelSelector.tsx +2 -7
- package/src/models/harness.ts +41 -39
- package/src/models/index.ts +1 -1
- package/src/oauth-app/OAuthAppListPanel.tsx +4 -4
- package/src/organization/OrgPreferencesPanel.tsx +28 -10
- package/src/organization/OrgProfilePanel.tsx +12 -12
- package/src/organization/index.ts +1 -0
- package/src/organization/useFollowSessionOrganization.ts +54 -0
- package/src/plan-catalog/plan-draft.ts +3 -3
- package/src/platform-client/PlatformClientListPanel.tsx +4 -4
- package/src/plugin/PluginDetailView.tsx +3 -2
- package/src/plugin/useMcpServerReadiness.ts +2 -2
- package/src/portal-container.ts +8 -0
- package/src/provider-standing/ProviderStandingConsole.tsx +1 -1
- package/src/provider.tsx +60 -27
- package/src/public-base-url-context.ts +71 -0
- package/src/resource-workbench/components/SelectionCheckbox.tsx +1 -1
- package/src/schedule/ScheduleDetailView.tsx +4 -4
- package/src/session/SessionViewer.tsx +13 -3
- package/src/session/useLocalSessionWorker.ts +35 -4
- package/src/session/useSessionConversation.ts +14 -3
- package/src/settings/ChannelAppsSection.tsx +4 -4
- package/src/settings/EnvironmentsSection.tsx +3 -2
- package/src/settings/MembersSection.tsx +3 -3
- package/src/settings/OrgPreferencesSection.tsx +1 -1
- package/src/settings/OrgProfileSection.tsx +1 -1
- package/src/settings/ProviderKeysSection.tsx +4 -0
- package/src/settings/TeamsSection.tsx +1 -1
- package/src/settings/UsageSection.tsx +1 -1
- package/src/settings/index.ts +2 -0
- package/src/settings/settings-nav.ts +2 -0
- package/src/sharing/ShareAgentDialog.tsx +32 -15
- package/src/sharing/SharedAgentChat.tsx +4 -4
- package/src/sharing/useCanCreateAgentShare.ts +6 -4
- package/src/sharing/useSaveAgentShare.ts +1 -1
- package/src/sidebar/WorkspaceSidebar.tsx +3 -2
- package/src/skill/SkillDetailView.tsx +4 -4
- package/src/skill/SkillDiffDialog.tsx +4 -4
- package/src/skill/SkillFileBrowser.tsx +4 -4
- package/src/styles.css +14 -4
- package/src/team/TeamDetailPanel.tsx +3 -3
- package/src/team/TeamListPanel.tsx +3 -2
- package/src/team/TeamMembersPanel.tsx +3 -3
- package/src/usage/OrgUsagePanel.tsx +9 -9
- package/src/usage/useExportCSV.ts +9 -9
- package/src/usage/useOrgUsageReport.ts +7 -7
- package/src/version-history/VersionTimeline.tsx +4 -4
- package/src/workflow/WorkflowTaskApprovalSummary.tsx +14 -7
- package/src/workflow/WorkflowVersionDiffViewer.tsx +4 -4
- package/src/workflow/WorkflowVersionTimeline.tsx +4 -4
- package/src/workflow/inspector/tabs/BranchesTab.tsx +2 -2
- package/src/workflow/inspector/tabs/CatchTab.tsx +1 -1
- package/src/workflow/inspector/tabs/IterationTab.tsx +1 -1
- package/src/workflow/instance/WorkflowInstanceDetailPanel.tsx +7 -6
- package/src/workflow/task-detail/task-approval.ts +20 -13
- package/src/workflow/useDiagnoseExecutionFlow.ts +23 -18
- package/src/workflow/useExplainWorkflowFlow.ts +7 -3
- package/src/workflow/useRefineWorkflowFlow.ts +17 -10
- package/src/workflow/useWorkflowArchitectFlow.ts +7 -3
- package/src/workspace/ExplorerTree.tsx +4 -8
- package/src/workspace/FileViewer.tsx +4 -5
- package/styles.css +1 -1
- package/team/TeamDetailPanel.d.ts +2 -2
- package/team/TeamDetailPanel.d.ts.map +1 -1
- package/team/TeamDetailPanel.js +2 -2
- package/team/TeamDetailPanel.js.map +1 -1
- package/team/TeamListPanel.d.ts.map +1 -1
- package/team/TeamListPanel.js +2 -1
- package/team/TeamListPanel.js.map +1 -1
- package/team/TeamMembersPanel.d.ts +2 -2
- package/team/TeamMembersPanel.d.ts.map +1 -1
- package/team/TeamMembersPanel.js +2 -2
- package/team/TeamMembersPanel.js.map +1 -1
- package/usage/OrgUsagePanel.d.ts +3 -3
- package/usage/OrgUsagePanel.d.ts.map +1 -1
- package/usage/OrgUsagePanel.js +6 -5
- package/usage/OrgUsagePanel.js.map +1 -1
- package/usage/useExportCSV.d.ts +2 -2
- package/usage/useExportCSV.d.ts.map +1 -1
- package/usage/useExportCSV.js +9 -9
- package/usage/useExportCSV.js.map +1 -1
- package/usage/useOrgUsageReport.d.ts +4 -4
- package/usage/useOrgUsageReport.d.ts.map +1 -1
- package/usage/useOrgUsageReport.js +7 -7
- package/usage/useOrgUsageReport.js.map +1 -1
- package/version-history/VersionTimeline.d.ts.map +1 -1
- package/version-history/VersionTimeline.js +2 -1
- package/version-history/VersionTimeline.js.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.d.ts +7 -4
- package/workflow/WorkflowTaskApprovalSummary.d.ts.map +1 -1
- package/workflow/WorkflowTaskApprovalSummary.js +8 -3
- package/workflow/WorkflowTaskApprovalSummary.js.map +1 -1
- package/workflow/WorkflowVersionDiffViewer.d.ts.map +1 -1
- package/workflow/WorkflowVersionDiffViewer.js +2 -1
- package/workflow/WorkflowVersionDiffViewer.js.map +1 -1
- package/workflow/WorkflowVersionTimeline.d.ts.map +1 -1
- package/workflow/WorkflowVersionTimeline.js +2 -1
- package/workflow/WorkflowVersionTimeline.js.map +1 -1
- package/workflow/inspector/tabs/BranchesTab.js +1 -1
- package/workflow/inspector/tabs/BranchesTab.js.map +1 -1
- package/workflow/inspector/tabs/CatchTab.js +1 -1
- package/workflow/inspector/tabs/CatchTab.js.map +1 -1
- package/workflow/inspector/tabs/IterationTab.js +1 -1
- package/workflow/inspector/tabs/IterationTab.js.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.d.ts.map +1 -1
- package/workflow/instance/WorkflowInstanceDetailPanel.js +6 -5
- package/workflow/instance/WorkflowInstanceDetailPanel.js.map +1 -1
- package/workflow/task-detail/task-approval.d.ts +13 -11
- package/workflow/task-detail/task-approval.d.ts.map +1 -1
- package/workflow/task-detail/task-approval.js +8 -4
- package/workflow/task-detail/task-approval.js.map +1 -1
- package/workflow/useDiagnoseExecutionFlow.d.ts.map +1 -1
- package/workflow/useDiagnoseExecutionFlow.js +23 -18
- package/workflow/useDiagnoseExecutionFlow.js.map +1 -1
- package/workflow/useExplainWorkflowFlow.d.ts.map +1 -1
- package/workflow/useExplainWorkflowFlow.js +7 -3
- package/workflow/useExplainWorkflowFlow.js.map +1 -1
- package/workflow/useRefineWorkflowFlow.d.ts.map +1 -1
- package/workflow/useRefineWorkflowFlow.js +14 -10
- package/workflow/useRefineWorkflowFlow.js.map +1 -1
- package/workflow/useWorkflowArchitectFlow.d.ts.map +1 -1
- package/workflow/useWorkflowArchitectFlow.js +7 -3
- package/workflow/useWorkflowArchitectFlow.js.map +1 -1
- package/workspace/ExplorerTree.d.ts.map +1 -1
- package/workspace/ExplorerTree.js +2 -5
- package/workspace/ExplorerTree.js.map +1 -1
- package/workspace/FileViewer.d.ts.map +1 -1
- package/workspace/FileViewer.js +2 -1
- package/workspace/FileViewer.js.map +1 -1
|
@@ -186,6 +186,7 @@ function resolvePhase(
|
|
|
186
186
|
|
|
187
187
|
import { forwardRef, useId } from "react";
|
|
188
188
|
import { SpinnerIcon } from "../internal/SpinnerIcon.js";
|
|
189
|
+
import { LoadingRegion } from "../internal/LoadingRegion.js";
|
|
189
190
|
|
|
190
191
|
interface OrgInputFormProps {
|
|
191
192
|
readonly value: string;
|
|
@@ -241,16 +242,16 @@ const OrgInputForm = forwardRef<HTMLInputElement, OrgInputFormProps>(
|
|
|
241
242
|
|
|
242
243
|
function LoadingState({ org }: { org: string }) {
|
|
243
244
|
return (
|
|
244
|
-
<
|
|
245
|
+
<LoadingRegion
|
|
245
246
|
className="stg:flex stg:flex-col stg:items-center stg:gap-3 stg:py-4"
|
|
246
|
-
|
|
247
|
-
aria-label={`Looking up SSO provider for ${org}`}
|
|
247
|
+
label={`Looking up SSO provider for ${org}`}
|
|
248
248
|
>
|
|
249
249
|
<SpinnerIcon size={20} className="stg:text-muted-foreground" />
|
|
250
|
-
|
|
250
|
+
{/* The hidden label says it in full; this is its short visible form. */}
|
|
251
|
+
<p className="stg:text-sm stg:text-muted-foreground" aria-hidden="true">
|
|
251
252
|
Looking up <span className="stg:font-medium stg:text-foreground">{org}</span>…
|
|
252
253
|
</p>
|
|
253
|
-
</
|
|
254
|
+
</LoadingRegion>
|
|
254
255
|
);
|
|
255
256
|
}
|
|
256
257
|
|
|
@@ -32,8 +32,8 @@ export interface UseIdentityProviderListReturn {
|
|
|
32
32
|
*
|
|
33
33
|
* @example
|
|
34
34
|
* ```tsx
|
|
35
|
-
* function IdpSettings({
|
|
36
|
-
* const { identityProviders, isLoading, error } = useIdentityProviderList(
|
|
35
|
+
* function IdpSettings({ org }: { org: string }) {
|
|
36
|
+
* const { identityProviders, isLoading, error } = useIdentityProviderList(org);
|
|
37
37
|
*
|
|
38
38
|
* if (isLoading) return <Skeleton />;
|
|
39
39
|
* if (error) return <ErrorMessage error={error} />;
|
package/src/index.ts
CHANGED
|
@@ -948,7 +948,7 @@ export type {
|
|
|
948
948
|
UseUpdateScheduleSpecReturn,
|
|
949
949
|
} from "./schedule/index.js";
|
|
950
950
|
|
|
951
|
-
// Environment — data hooks, list hook, personal convenience hook, secret reveal, variable management, env var form,
|
|
951
|
+
// Environment — data hooks, list hook, personal convenience hook, secret reveal, variable management, env var form, the platform-filled key set, and styled components
|
|
952
952
|
export {
|
|
953
953
|
useEnvironment,
|
|
954
954
|
useEnvironmentList,
|
|
@@ -964,10 +964,6 @@ export {
|
|
|
964
964
|
EnvVarForm,
|
|
965
965
|
useSessionEnvPool,
|
|
966
966
|
SYSTEM_ENV_VAR_KEYS,
|
|
967
|
-
toGrpcAddress,
|
|
968
|
-
buildSystemEnvVars,
|
|
969
|
-
resolveSystemEnvVarValues,
|
|
970
|
-
resolveDeclaredSystemEnvVars,
|
|
971
967
|
EnvironmentPicker,
|
|
972
968
|
useToolCredentialsReadiness,
|
|
973
969
|
} from "./environment/index.js";
|
|
@@ -1127,6 +1123,7 @@ export {
|
|
|
1127
1123
|
useOrg,
|
|
1128
1124
|
useActiveOrgSlug,
|
|
1129
1125
|
useActiveOrgId,
|
|
1126
|
+
useFollowSessionOrganization,
|
|
1130
1127
|
useOrgGate,
|
|
1131
1128
|
useOrganization,
|
|
1132
1129
|
useCreateOrganization,
|
|
@@ -1164,6 +1161,9 @@ export {
|
|
|
1164
1161
|
useSubscription,
|
|
1165
1162
|
useEntitlements,
|
|
1166
1163
|
usePeriodEstimate,
|
|
1164
|
+
useProviderKeys,
|
|
1165
|
+
useProviderKeyActions,
|
|
1166
|
+
ProviderKeysSection,
|
|
1167
1167
|
useChangePlan,
|
|
1168
1168
|
useCancelSubscription,
|
|
1169
1169
|
useCreatePaymentMethodSetupSession,
|
|
@@ -1206,6 +1206,11 @@ export type {
|
|
|
1206
1206
|
UseEntitlementsReturn,
|
|
1207
1207
|
UsePeriodEstimateOptions,
|
|
1208
1208
|
UsePeriodEstimateReturn,
|
|
1209
|
+
ProviderKeyProvider,
|
|
1210
|
+
UseProviderKeysOptions,
|
|
1211
|
+
UseProviderKeysReturn,
|
|
1212
|
+
UseProviderKeyActionsReturn,
|
|
1213
|
+
ProviderKeysSectionProps,
|
|
1209
1214
|
UseChangePlanReturn,
|
|
1210
1215
|
UseCancelSubscriptionReturn,
|
|
1211
1216
|
UseCreatePaymentMethodSetupSessionReturn,
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback,
|
|
3
|
+
import { useCallback, useRef, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import type { InlineEditBaseProps } from "./types.js";
|
|
6
|
+
import { useInlineDraft } from "./useInlineDraft.js";
|
|
6
7
|
|
|
7
8
|
/** Props for {@link InlineEditImage}. */
|
|
8
9
|
export interface InlineEditImageProps extends InlineEditBaseProps {
|
|
@@ -21,6 +22,10 @@ export interface InlineEditImageProps extends InlineEditBaseProps {
|
|
|
21
22
|
*
|
|
22
23
|
* Shows the current image (or fallback icon). On click, reveals
|
|
23
24
|
* an input for entering a new image URL with confirm/cancel.
|
|
25
|
+
*
|
|
26
|
+
* The draft is seeded from `value` when editing opens. While the editor is
|
|
27
|
+
* open, a draft the user has edited keeps their text if `value` changes, and
|
|
28
|
+
* an untouched draft follows the new `value`.
|
|
24
29
|
*/
|
|
25
30
|
export function InlineEditImage({
|
|
26
31
|
value,
|
|
@@ -32,18 +37,15 @@ export function InlineEditImage({
|
|
|
32
37
|
error,
|
|
33
38
|
className,
|
|
34
39
|
}: InlineEditImageProps) {
|
|
35
|
-
const [isEditing, setIsEditing] = useState(false);
|
|
36
|
-
const [draft, setDraft] = useState(value);
|
|
37
40
|
const [localError, setLocalError] = useState<string | null>(null);
|
|
38
41
|
const inputRef = useRef<HTMLInputElement>(null);
|
|
42
|
+
const { isEditing, setIsEditing, draft, setDraft, startEditing } =
|
|
43
|
+
useInlineDraft(value, inputRef);
|
|
39
44
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
requestAnimationFrame(() => inputRef.current?.focus());
|
|
45
|
-
}
|
|
46
|
-
}, [isEditing, value]);
|
|
45
|
+
const handleEdit = useCallback(() => {
|
|
46
|
+
setLocalError(null);
|
|
47
|
+
startEditing();
|
|
48
|
+
}, [startEditing]);
|
|
47
49
|
|
|
48
50
|
const handleConfirm = useCallback(async () => {
|
|
49
51
|
const trimmed = draft.trim();
|
|
@@ -81,7 +83,7 @@ export function InlineEditImage({
|
|
|
81
83
|
<div className={cn("stg:group/inline-edit stg:inline-flex", className)}>
|
|
82
84
|
<button
|
|
83
85
|
type="button"
|
|
84
|
-
onClick={() => { if (!disabled)
|
|
86
|
+
onClick={() => { if (!disabled) handleEdit(); }}
|
|
85
87
|
disabled={disabled}
|
|
86
88
|
className={cn(
|
|
87
89
|
"stg:relative stg:rounded-md stg:p-0.5 stg:transition-colors",
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback,
|
|
3
|
+
import { useCallback, useRef, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import type { InlineEditBaseProps } from "./types.js";
|
|
6
|
+
import { useInlineDraft } from "./useInlineDraft.js";
|
|
6
7
|
|
|
7
8
|
/** Props for {@link InlineEditText}. */
|
|
8
9
|
export interface InlineEditTextProps extends InlineEditBaseProps {
|
|
@@ -24,6 +25,10 @@ export interface InlineEditTextProps extends InlineEditBaseProps {
|
|
|
24
25
|
* Displays the value as styled text. On click, transitions to an input
|
|
25
26
|
* with inline confirm/cancel controls. Confirm triggers `onSave`;
|
|
26
27
|
* cancel reverts. Escape key also cancels.
|
|
28
|
+
*
|
|
29
|
+
* The draft is seeded from `value` when editing opens. While the editor is
|
|
30
|
+
* open, a draft the user has edited keeps their text if `value` changes, and
|
|
31
|
+
* an untouched draft follows the new `value`.
|
|
27
32
|
*/
|
|
28
33
|
export function InlineEditText({
|
|
29
34
|
value,
|
|
@@ -36,18 +41,15 @@ export function InlineEditText({
|
|
|
36
41
|
error,
|
|
37
42
|
className,
|
|
38
43
|
}: InlineEditTextProps) {
|
|
39
|
-
const [isEditing, setIsEditing] = useState(false);
|
|
40
|
-
const [draft, setDraft] = useState(value);
|
|
41
44
|
const [localError, setLocalError] = useState<string | null>(null);
|
|
42
45
|
const inputRef = useRef<HTMLInputElement>(null);
|
|
46
|
+
const { isEditing, setIsEditing, draft, setDraft, startEditing } =
|
|
47
|
+
useInlineDraft(value, inputRef);
|
|
43
48
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
requestAnimationFrame(() => inputRef.current?.focus());
|
|
49
|
-
}
|
|
50
|
-
}, [isEditing, value]);
|
|
49
|
+
const handleEdit = useCallback(() => {
|
|
50
|
+
setLocalError(null);
|
|
51
|
+
startEditing();
|
|
52
|
+
}, [startEditing]);
|
|
51
53
|
|
|
52
54
|
const handleConfirm = useCallback(async () => {
|
|
53
55
|
const trimmed = draft.trim();
|
|
@@ -91,7 +93,7 @@ export function InlineEditText({
|
|
|
91
93
|
<div className={cn("stg:group/inline-edit", className)}>
|
|
92
94
|
<button
|
|
93
95
|
type="button"
|
|
94
|
-
onClick={() => { if (!disabled)
|
|
96
|
+
onClick={() => { if (!disabled) handleEdit(); }}
|
|
95
97
|
disabled={disabled}
|
|
96
98
|
className={cn(
|
|
97
99
|
"stg:inline-flex stg:w-full stg:items-center stg:gap-1.5 stg:rounded-md stg:px-1.5 stg:py-0.5 stg:text-left stg:transition-colors",
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
4
4
|
import { cn } from "@stigmer/theme";
|
|
5
5
|
import type { InlineEditBaseProps } from "./types.js";
|
|
6
|
+
import { useInlineDraft } from "./useInlineDraft.js";
|
|
6
7
|
|
|
7
8
|
/** Props for {@link InlineEditTextarea}. */
|
|
8
9
|
export interface InlineEditTextareaProps extends InlineEditBaseProps {
|
|
@@ -23,6 +24,10 @@ export interface InlineEditTextareaProps extends InlineEditBaseProps {
|
|
|
23
24
|
*
|
|
24
25
|
* In read mode, renders the value as preformatted text with expand/collapse.
|
|
25
26
|
* On click, opens a textarea with confirm/cancel. Ctrl+Enter confirms.
|
|
27
|
+
*
|
|
28
|
+
* The draft is seeded from `value` when editing opens. While the editor is
|
|
29
|
+
* open, a draft the user has edited keeps their text if `value` changes, and
|
|
30
|
+
* an untouched draft follows the new `value`.
|
|
26
31
|
*/
|
|
27
32
|
export function InlineEditTextarea({
|
|
28
33
|
value,
|
|
@@ -35,24 +40,15 @@ export function InlineEditTextarea({
|
|
|
35
40
|
error,
|
|
36
41
|
className,
|
|
37
42
|
}: InlineEditTextareaProps) {
|
|
38
|
-
const [isEditing, setIsEditing] = useState(false);
|
|
39
|
-
const [draft, setDraft] = useState(value);
|
|
40
43
|
const [localError, setLocalError] = useState<string | null>(null);
|
|
41
44
|
const textareaRef = useRef<HTMLTextAreaElement>(null);
|
|
45
|
+
const { isEditing, setIsEditing, draft, setDraft, startEditing } =
|
|
46
|
+
useInlineDraft(value, textareaRef, { caretAtEnd: true });
|
|
42
47
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
requestAnimationFrame(() => {
|
|
48
|
-
const ta = textareaRef.current;
|
|
49
|
-
if (ta) {
|
|
50
|
-
ta.focus();
|
|
51
|
-
ta.selectionStart = ta.value.length;
|
|
52
|
-
}
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
}, [isEditing, value]);
|
|
48
|
+
const handleEdit = useCallback(() => {
|
|
49
|
+
setLocalError(null);
|
|
50
|
+
startEditing();
|
|
51
|
+
}, [startEditing]);
|
|
56
52
|
|
|
57
53
|
// Auto-resize textarea
|
|
58
54
|
useEffect(() => {
|
|
@@ -103,7 +99,7 @@ export function InlineEditTextarea({
|
|
|
103
99
|
<div className={cn("stg:group/inline-edit", className)}>
|
|
104
100
|
<button
|
|
105
101
|
type="button"
|
|
106
|
-
onClick={() => { if (!disabled)
|
|
102
|
+
onClick={() => { if (!disabled) handleEdit(); }}
|
|
107
103
|
disabled={disabled}
|
|
108
104
|
className={cn(
|
|
109
105
|
"stg:w-full stg:rounded-md stg:px-2 stg:py-1.5 stg:text-left stg:transition-colors",
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The draft, focus and caret contract shared by the click-to-edit text
|
|
5
|
+
* editors (`InlineEditText`, `InlineEditTextarea`, `InlineEditImage`), kept in
|
|
6
|
+
* one place so the three cannot drift apart. Internal: not exported from the
|
|
7
|
+
* package.
|
|
8
|
+
*
|
|
9
|
+
* - Opening seeds the draft from the stored value and focuses the field in
|
|
10
|
+
* the commit that shows it, never a frame later, so a selection made right
|
|
11
|
+
* after opening (select-all, then type) is not collapsed afterwards
|
|
12
|
+
* (stigmer/stigmer#1575). A layout effect is used rather than a passive one
|
|
13
|
+
* because, in a browser, a passive effect may run after paint and after the
|
|
14
|
+
* next input.
|
|
15
|
+
* - An untouched draft follows the stored value, so a save never writes a
|
|
16
|
+
* stale copy over a change made elsewhere; once the user edits, the draft
|
|
17
|
+
* is theirs until they save or cancel. The follow is adjusted during render
|
|
18
|
+
* (the `ResizableSplit` idiom), so the field never shows the stale value.
|
|
19
|
+
*/
|
|
20
|
+
import { useCallback, useLayoutEffect, useMemo, useState } from "react";
|
|
21
|
+
import type { RefObject } from "react";
|
|
22
|
+
|
|
23
|
+
/** Return value of {@link useInlineDraft}. */
|
|
24
|
+
export interface UseInlineDraftReturn {
|
|
25
|
+
/** `true` while the field is open for editing. */
|
|
26
|
+
readonly isEditing: boolean;
|
|
27
|
+
/** Open or close the field without reseeding the draft. */
|
|
28
|
+
readonly setIsEditing: (editing: boolean) => void;
|
|
29
|
+
/** The text in the field. */
|
|
30
|
+
readonly draft: string;
|
|
31
|
+
/** Replace the text in the field (the user typed, or a control reset it). */
|
|
32
|
+
readonly setDraft: (draft: string) => void;
|
|
33
|
+
/** Open the field with the draft seeded from the stored value. */
|
|
34
|
+
readonly startEditing: () => void;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Holds an inline editor's open state and draft, and places focus when the
|
|
39
|
+
* field opens (the contract in this module's header).
|
|
40
|
+
*
|
|
41
|
+
* @param value - The stored value.
|
|
42
|
+
* @param fieldRef - The input or textarea shown while editing.
|
|
43
|
+
* @param options.caretAtEnd - Place the caret after the text on opening.
|
|
44
|
+
*/
|
|
45
|
+
export function useInlineDraft(
|
|
46
|
+
value: string,
|
|
47
|
+
fieldRef: RefObject<HTMLInputElement | HTMLTextAreaElement | null>,
|
|
48
|
+
options?: { readonly caretAtEnd?: boolean },
|
|
49
|
+
): UseInlineDraftReturn {
|
|
50
|
+
const caretAtEnd = options?.caretAtEnd ?? false;
|
|
51
|
+
const [isEditing, setIsEditing] = useState(false);
|
|
52
|
+
const [draft, setDraft] = useState(value);
|
|
53
|
+
// The stored value the draft was last seeded from.
|
|
54
|
+
const [seed, setSeed] = useState(value);
|
|
55
|
+
|
|
56
|
+
// An untouched draft follows the stored value (see the module header).
|
|
57
|
+
if (value !== seed) {
|
|
58
|
+
setSeed(value);
|
|
59
|
+
if (draft === seed) setDraft(value);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const startEditing = useCallback(() => {
|
|
63
|
+
setDraft(value);
|
|
64
|
+
setSeed(value);
|
|
65
|
+
setIsEditing(true);
|
|
66
|
+
}, [value]);
|
|
67
|
+
|
|
68
|
+
// A layout effect, not a frame later: focus (and the caret) land in the
|
|
69
|
+
// commit that shows the field, before the browser handles the next input.
|
|
70
|
+
useLayoutEffect(() => {
|
|
71
|
+
if (!isEditing) return;
|
|
72
|
+
const field = fieldRef.current;
|
|
73
|
+
if (!field) return;
|
|
74
|
+
field.focus();
|
|
75
|
+
if (caretAtEnd) {
|
|
76
|
+
const end = field.value.length;
|
|
77
|
+
field.setSelectionRange(end, end);
|
|
78
|
+
}
|
|
79
|
+
}, [isEditing, fieldRef, caretAtEnd]);
|
|
80
|
+
|
|
81
|
+
return useMemo(
|
|
82
|
+
() => ({ isEditing, setIsEditing, draft, setDraft, startEditing }),
|
|
83
|
+
[isEditing, draft, startEditing],
|
|
84
|
+
);
|
|
85
|
+
}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import { useCallback, useEffect, useRef } from "react";
|
|
4
|
-
import type {
|
|
3
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
4
|
+
import type {
|
|
5
|
+
KeyboardEvent,
|
|
6
|
+
MouseEvent,
|
|
7
|
+
ReactNode,
|
|
8
|
+
SyntheticEvent,
|
|
9
|
+
} from "react";
|
|
5
10
|
import { cn } from "@stigmer/theme";
|
|
11
|
+
import {
|
|
12
|
+
PortalContainerContext,
|
|
13
|
+
useStigmerPortalContainer,
|
|
14
|
+
} from "../portal-container.js";
|
|
6
15
|
|
|
7
16
|
/**
|
|
8
17
|
* Width presets for {@link DialogShell}, mapping to Tailwind `max-w-*`
|
|
@@ -79,6 +88,27 @@ export interface DialogShellProps {
|
|
|
79
88
|
* escaped the #652 fence, and animation classes present on some dialogs and
|
|
80
89
|
* missing from others.
|
|
81
90
|
*
|
|
91
|
+
* Popups opened inside a modal shell render inside it (stigmer#1509). A
|
|
92
|
+
* modal `<dialog>` sits in the browser's top layer and makes the rest of
|
|
93
|
+
* the document inert, so a popover, menu or tooltip portaled into the
|
|
94
|
+
* provider's `document.body` container would paint beneath the dialog and
|
|
95
|
+
* refuse every click. The shell therefore owns an empty portal target as
|
|
96
|
+
* its last child and re-provides it through {@link PortalContainerContext}:
|
|
97
|
+
* every SDK popup below it lands in the top layer with the dialog, themed
|
|
98
|
+
* by ordinary inheritance from the provider's in-tree scope. The target is
|
|
99
|
+
* a zero-size fixed box, so the dialog's own scrolling box never clips a
|
|
100
|
+
* popup that extends past its edge. The target
|
|
101
|
+
* carries no `data-stgm-portal` marker; that selector keeps meaning the one
|
|
102
|
+
* body container. A non-modal shell is in-flow, so it keeps the provider's
|
|
103
|
+
* container.
|
|
104
|
+
*
|
|
105
|
+
* Because those popups now receive keys, Escape pressed while one is open
|
|
106
|
+
* belongs to the popup: Base UI closes it but does not prevent the
|
|
107
|
+
* keydown's default, which is the dialog's own close request. The shell
|
|
108
|
+
* notes, before any popup handler runs, whether its target held a popup,
|
|
109
|
+
* and keeps the dialog open for that one close request; the next Escape
|
|
110
|
+
* closes the dialog.
|
|
111
|
+
*
|
|
82
112
|
* Internal on purpose — not exported from the package until a host needs it.
|
|
83
113
|
* The `stigmer/no-handrolled-dialog` lint rule fences new `<dialog>`
|
|
84
114
|
* elements onto this shell.
|
|
@@ -102,6 +132,19 @@ export function DialogShell({
|
|
|
102
132
|
"aria-labelledby": ariaLabelledby,
|
|
103
133
|
}: DialogShellProps) {
|
|
104
134
|
const dialogRef = useRef<HTMLDialogElement>(null);
|
|
135
|
+
const inheritedPortalContainer = useStigmerPortalContainer();
|
|
136
|
+
// State, not a ref: children must re-render with the element once it
|
|
137
|
+
// mounts. Until then the value is `null`, which Base UI reads as "wait
|
|
138
|
+
// for a container" — no popup flashes into the body first.
|
|
139
|
+
const [portalTarget, setPortalTarget] = useState<HTMLDivElement | null>(
|
|
140
|
+
null,
|
|
141
|
+
);
|
|
142
|
+
// Set while one Escape keydown is in flight and a popup was open when it
|
|
143
|
+
// started; see the doc comment. Cleared by the cancel it guards, or by a
|
|
144
|
+
// task queued at keydown time when the browser sends no cancel (it may
|
|
145
|
+
// skip one for a repeated Escape without user activation), so it can
|
|
146
|
+
// never swallow a later Escape meant for the dialog.
|
|
147
|
+
const escapeClosesPopupRef = useRef(false);
|
|
105
148
|
|
|
106
149
|
// Sync the native top-layer state to the controlled prop. Runs on mount
|
|
107
150
|
// too, so a shell mounted with `open` already true shows immediately.
|
|
@@ -121,11 +164,28 @@ export function DialogShell({
|
|
|
121
164
|
const handleCancel = useCallback(
|
|
122
165
|
(e: SyntheticEvent<HTMLDialogElement>) => {
|
|
123
166
|
e.preventDefault();
|
|
167
|
+
if (escapeClosesPopupRef.current) {
|
|
168
|
+
escapeClosesPopupRef.current = false;
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
124
171
|
onOpenChange(false);
|
|
125
172
|
},
|
|
126
173
|
[onOpenChange],
|
|
127
174
|
);
|
|
128
175
|
|
|
176
|
+
// Capture phase: runs before the popup's own key handlers, which stop
|
|
177
|
+
// propagation, while the popup is certainly still mounted.
|
|
178
|
+
const handleKeyDownCapture = useCallback(
|
|
179
|
+
(e: KeyboardEvent<HTMLDialogElement>) => {
|
|
180
|
+
if (e.key !== "Escape" || !portalTarget?.hasChildNodes()) return;
|
|
181
|
+
escapeClosesPopupRef.current = true;
|
|
182
|
+
setTimeout(() => {
|
|
183
|
+
escapeClosesPopupRef.current = false;
|
|
184
|
+
}, 0);
|
|
185
|
+
},
|
|
186
|
+
[portalTarget],
|
|
187
|
+
);
|
|
188
|
+
|
|
129
189
|
// A native close the effect did not perform (e.g. a `method="dialog"`
|
|
130
190
|
// form submit) must not leave the controlled state stranded open.
|
|
131
191
|
const handleClose = useCallback(() => {
|
|
@@ -146,6 +206,7 @@ export function DialogShell({
|
|
|
146
206
|
ref={dialogRef}
|
|
147
207
|
open={modal ? undefined : open || undefined}
|
|
148
208
|
onCancel={modal ? handleCancel : undefined}
|
|
209
|
+
onKeyDownCapture={modal ? handleKeyDownCapture : undefined}
|
|
149
210
|
onClose={modal ? handleClose : undefined}
|
|
150
211
|
onClick={modal && dismissOnBackdrop ? handleClick : undefined}
|
|
151
212
|
aria-label={ariaLabel}
|
|
@@ -163,7 +224,23 @@ export function DialogShell({
|
|
|
163
224
|
className,
|
|
164
225
|
)}
|
|
165
226
|
>
|
|
166
|
-
|
|
227
|
+
<PortalContainerContext.Provider
|
|
228
|
+
value={modal ? portalTarget : inheritedPortalContainer}
|
|
229
|
+
>
|
|
230
|
+
{children}
|
|
231
|
+
</PortalContainerContext.Provider>
|
|
232
|
+
{/* A zero-size fixed box at the viewport origin, not an in-flow
|
|
233
|
+
div: a fixed box's containing block is the viewport, so popups
|
|
234
|
+
positioned inside it escape the dialog's own overflow clip (a
|
|
235
|
+
modal dialog scrolls its content) while staying in its top layer.
|
|
236
|
+
An in-flow target left every popup cut off at the dialog's edge
|
|
237
|
+
in Chromium. */}
|
|
238
|
+
{modal && (
|
|
239
|
+
<div
|
|
240
|
+
ref={setPortalTarget}
|
|
241
|
+
className="stg:fixed stg:top-0 stg:left-0 stg:size-0"
|
|
242
|
+
/>
|
|
243
|
+
)}
|
|
167
244
|
</dialog>
|
|
168
245
|
);
|
|
169
246
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* The SDK's container for a labelled loading region: the region a skeleton
|
|
5
|
+
* fills while its data is in flight, marked busy and named for a screen reader
|
|
6
|
+
* without a role. A skeleton with no name needs none of this and stays a bare
|
|
7
|
+
* busy element.
|
|
8
|
+
*
|
|
9
|
+
* Why hidden text, not `aria-label`: a `div` with no role may not take
|
|
10
|
+
* `aria-label` (axe `aria-prohibited-attr`, WCAG 4.1.2), so a labelled
|
|
11
|
+
* skeleton fails any page audit it is on screen for (stigmer/stigmer#1653).
|
|
12
|
+
* Why no role: `status` is what this console's phase badges, empty states and
|
|
13
|
+
* notices carry, and `progressbar` its usage gauge, so a skeleton with either
|
|
14
|
+
* would answer locators meant for them.
|
|
15
|
+
*
|
|
16
|
+
* Why not a live region: a loading placeholder is not news. The content that
|
|
17
|
+
* replaces it is what a screen reader user reads, and an announcement per
|
|
18
|
+
* skeleton would talk over every panel that loads at once.
|
|
19
|
+
*
|
|
20
|
+
* `label` names a wordless skeleton ("Loading sessions"). Leave it out, or
|
|
21
|
+
* empty, when the children already say what is loading in visible text, so a
|
|
22
|
+
* screen reader does not read it twice. The hidden text comes first: the
|
|
23
|
+
* containers space their children with `space-y-*` and `gap-*`, and an
|
|
24
|
+
* absolutely positioned first child changes neither, where a trailing one
|
|
25
|
+
* would give the last placeholder a margin it never had. The
|
|
26
|
+
* `stigmer/require-loading-region` lint rule sends a busy element here when
|
|
27
|
+
* axe would refuse its name, or when it takes role="status".
|
|
28
|
+
*
|
|
29
|
+
* @internal Not part of the public API.
|
|
30
|
+
*/
|
|
31
|
+
export function LoadingRegion({
|
|
32
|
+
label,
|
|
33
|
+
className,
|
|
34
|
+
children,
|
|
35
|
+
}: {
|
|
36
|
+
readonly label?: string;
|
|
37
|
+
readonly className?: string;
|
|
38
|
+
readonly children?: ReactNode;
|
|
39
|
+
}) {
|
|
40
|
+
return (
|
|
41
|
+
<div className={className} aria-busy="true">
|
|
42
|
+
{label ? <span className="stg:sr-only">{label}</span> : null}
|
|
43
|
+
{children}
|
|
44
|
+
</div>
|
|
45
|
+
);
|
|
46
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
/** Props for {@link UnknownPublicAddressNotice}. */
|
|
4
|
+
export interface UnknownPublicAddressNoticeProps {
|
|
5
|
+
/** What cannot be shown, as it reads mid-sentence ("the callback URL"). */
|
|
6
|
+
readonly subject: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Shown in place of a copyable URL or snippet when the server's public
|
|
11
|
+
* address is unknown (`usePublicBaseUrl` answered `null`): the client talks
|
|
12
|
+
* to the server through a relative `baseUrl` and the host named no
|
|
13
|
+
* `publicBaseUrl`. One sentence, shared by every copy surface, so a user is
|
|
14
|
+
* told plainly why there is nothing to copy instead of being offered an
|
|
15
|
+
* address Slack, Meta or a backend cannot call.
|
|
16
|
+
*
|
|
17
|
+
* The surface keeps its own label above the notice, the shape the channel
|
|
18
|
+
* app panel already uses for a verify token it can no longer show. The
|
|
19
|
+
* reader is the host's user, not its developer, so the copy names no prop
|
|
20
|
+
* or configuration.
|
|
21
|
+
*/
|
|
22
|
+
export function UnknownPublicAddressNotice({
|
|
23
|
+
subject,
|
|
24
|
+
}: UnknownPublicAddressNoticeProps) {
|
|
25
|
+
return (
|
|
26
|
+
<p className="stg:text-[0.65rem] stg:text-muted-foreground">
|
|
27
|
+
This app doesn't know your Stigmer server's public address, so
|
|
28
|
+
it can't show {subject}.
|
|
29
|
+
</p>
|
|
30
|
+
);
|
|
31
|
+
}
|
package/src/internal/features.ts
CHANGED
|
@@ -23,7 +23,7 @@ export const FEATURE_COPY: Readonly<
|
|
|
23
23
|
},
|
|
24
24
|
[Feature.byo_provider_keys]: {
|
|
25
25
|
label: "Bring your own provider keys",
|
|
26
|
-
description: "
|
|
26
|
+
description: "Run agents on your own Anthropic and OpenAI keys, with no Stigmer commission on those tokens.",
|
|
27
27
|
},
|
|
28
28
|
[Feature.channels]: {
|
|
29
29
|
label: "Channels",
|
|
@@ -31,7 +31,7 @@ export const FEATURE_COPY: Readonly<
|
|
|
31
31
|
},
|
|
32
32
|
[Feature.sharing]: {
|
|
33
33
|
label: "Sharing",
|
|
34
|
-
description: "Share agents with
|
|
34
|
+
description: "Share agents through hosted links, with your organization or with anyone who has the link.",
|
|
35
35
|
},
|
|
36
36
|
[Feature.teams]: {
|
|
37
37
|
label: "Teams",
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "Which elements axe-core refuses a name on, for the stigmer/require-loading-region lint rule (tools/eslint-plugin-stigmer/rules/require-loading-region.js), which reports a busy, labelled element with no role written when its tag is in namelessElements. Measured, not judged: src/internal/__tests__/a11y/loading-region-markup.browser.test.ts renders every HTML element, busy, labelled, empty and with no role, through axe's aria-prohibited-attr in Chromium, and fails, printing what axe measured, when these lists disagree. Update a list by copying that output.",
|
|
3
|
+
"axeCore": "4.11.4",
|
|
4
|
+
"namelessElements": [
|
|
5
|
+
"abbr",
|
|
6
|
+
"address",
|
|
7
|
+
"b",
|
|
8
|
+
"bdi",
|
|
9
|
+
"bdo",
|
|
10
|
+
"blockquote",
|
|
11
|
+
"br",
|
|
12
|
+
"caption",
|
|
13
|
+
"cite",
|
|
14
|
+
"code",
|
|
15
|
+
"col",
|
|
16
|
+
"colgroup",
|
|
17
|
+
"data",
|
|
18
|
+
"del",
|
|
19
|
+
"div",
|
|
20
|
+
"em",
|
|
21
|
+
"figcaption",
|
|
22
|
+
"hgroup",
|
|
23
|
+
"i",
|
|
24
|
+
"ins",
|
|
25
|
+
"kbd",
|
|
26
|
+
"legend",
|
|
27
|
+
"map",
|
|
28
|
+
"mark",
|
|
29
|
+
"p",
|
|
30
|
+
"picture",
|
|
31
|
+
"pre",
|
|
32
|
+
"q",
|
|
33
|
+
"rt",
|
|
34
|
+
"ruby",
|
|
35
|
+
"s",
|
|
36
|
+
"samp",
|
|
37
|
+
"small",
|
|
38
|
+
"span",
|
|
39
|
+
"strong",
|
|
40
|
+
"sub",
|
|
41
|
+
"sup",
|
|
42
|
+
"time",
|
|
43
|
+
"u",
|
|
44
|
+
"var",
|
|
45
|
+
"wbr"
|
|
46
|
+
],
|
|
47
|
+
"elementsLeftToAxe": {
|
|
48
|
+
"a": {
|
|
49
|
+
"reason": "an a with an href is a link, which takes a name; the rule cannot see an href passed in a spread",
|
|
50
|
+
"accepted": "<a id=\"probe\" href=\"#x\" aria-busy=\"true\" aria-label=\"Loading\"></a>"
|
|
51
|
+
},
|
|
52
|
+
"td": {
|
|
53
|
+
"reason": "a table cell takes a name inside a table; axe cannot judge one alone",
|
|
54
|
+
"accepted": "<table><tbody><tr><td id=\"probe\" aria-busy=\"true\" aria-label=\"Loading\"></td></tr></tbody></table>"
|
|
55
|
+
},
|
|
56
|
+
"th": {
|
|
57
|
+
"reason": "a header cell takes a name inside a table; axe cannot judge one alone",
|
|
58
|
+
"accepted": "<table><tbody><tr><th id=\"probe\" aria-busy=\"true\" aria-label=\"Loading\"></th></tr></tbody></table>"
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"elementsAxeSkips": {
|
|
62
|
+
"area": "hidden by default",
|
|
63
|
+
"audio": "hidden by default without controls",
|
|
64
|
+
"datalist": "hidden by default",
|
|
65
|
+
"dialog": "hidden until opened",
|
|
66
|
+
"noscript": "not rendered while scripting runs",
|
|
67
|
+
"rp": "hidden by default",
|
|
68
|
+
"template": "inert content",
|
|
69
|
+
"slot": "outside axe's tree"
|
|
70
|
+
}
|
|
71
|
+
}
|