@gntik-ai/templates 0.9.0 → 0.10.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/dist/index.d.ts +13 -5
- package/dist/index.js +93 -67
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/src/index.ts +1 -1
- package/src/keyboard-shortcuts/Page.test.tsx +39 -1
- package/src/keyboard-shortcuts/ShortcutSheet.tsx +3 -2
- package/src/keyboard-shortcuts/data.ts +28 -14
- package/src/resource-detail/Page.labels.test.tsx +67 -0
- package/src/resource-detail/Page.tsx +18 -7
- package/src/resource-detail/examples/Labels.tsx +18 -0
- package/src/resource-detail/examples/Spanish.tsx +11 -0
- package/src/resource-detail/template.meta.ts +1 -1
- package/src/settings-profile/fixtures/editable.snap +1 -1
- package/src/shared/ConsoleShell.test.tsx +13 -0
- package/src/shared/ConsoleShell.tsx +35 -30
- package/src/workflow-builder/Page.test.tsx +103 -2
- package/src/workflow-builder/Page.tsx +34 -8
- package/src/workflow-builder/examples/SaveGraph.tsx +17 -0
- package/src/workflow-builder/template.meta.ts +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { ActiveFilter, ActivityItem, ApiKeyExpiry, ApiKeyScope, AppSidebarFooterProps, AppSidebarHeaderProps, AppTopbarProps, BillingCycle, BillingPlan, ChartCardProps, ChartCardRange, CodeFile, CodePanelProps, CodeProblem, CommentAuthor, ConsoleEntry, CostPoint, CreateApiKeyInput, DangerZoneAction, DataTableColumn, DeploymentRow, DescriptionItem, DeviceSession, EvalMetric, EvalRow, FaqItem, Feature, FeedbackAction, FilterField, FlowBuilderProps, FlowEdge, FlowNode, FlowNodeKind, ForgotPasswordFormProps, Invitation as Invitation$1, InvitePayload, Invoice, KpiItem, LogLine, MarketingAction, Member, MfaMethod, ModelKey, NotificationChannel, NotificationEvent, NotificationMatrixValue, PageChromeAction, PageHeaderMetaItem, PaletteItem, PaymentMethod, PricingCycle, PricingTier, Profile, PromptRunInput, Quota, ResourceAction, ResourceCard, RoleOption, SavedView, SignInFormProps, SignInValues, SignUpValues, SsoProvider, StatusEvent, ThreadComment, TokenUsagePeriod, TraceSpan } from "@gntik-ai/blocks";
|
|
2
|
+
import { ActiveFilter, ActivityItem, ApiKeyExpiry, ApiKeyScope, AppSidebarFooterProps, AppSidebarHeaderProps, AppTopbarProps, BillingCycle, BillingPlan, ChartCardProps, ChartCardRange, CodeFile, CodePanelProps, CodeProblem, CommentAuthor, ConsoleEntry, CostPoint, CreateApiKeyInput, DangerZoneAction, DataTableColumn, DeploymentRow, DescriptionItem, DeviceSession, EvalMetric, EvalRow, FaqItem, Feature, FeedbackAction, FilterField, FlowBuilderProps, FlowEdge, FlowGraph, FlowNode, FlowNodeKind, ForgotPasswordFormProps, Invitation as Invitation$1, InvitePayload, Invoice, KpiItem, LogLine, MarketingAction, Member, MfaMethod, ModelKey, NotificationChannel, NotificationEvent, NotificationMatrixValue, PageChromeAction, PageHeaderMetaItem, PaletteItem, PaymentMethod, PricingCycle, PricingTier, Profile, PromptRunInput, Quota, ResourceAction, ResourceCard, RoleOption, SavedView, SignInFormProps, SignInValues, SignUpValues, SsoProvider, StatusEvent, ThreadComment, TokenUsagePeriod, TraceSpan } from "@gntik-ai/blocks";
|
|
3
3
|
import { BreadcrumbItem, DateRange, KanbanCard, KanbanColumn, KanbanMove, ListInputPair, MegaMenuItem, NavGroup, NavItem, NotificationItem, OutlineItem, PowerSearchField, PowerSearchQuery, SettingsLayoutProps, SidebarLayoutProps, StatusDotTone, StepItem, StepStatus, TransferListItem, UserMenuUser, WizardLayoutProps, Workspace } from "@gntik-ai/ui";
|
|
4
4
|
import { MouseEventHandler, ReactElement, ReactNode } from "react";
|
|
5
5
|
import { ChatFeedback, CitationSource, Suggestion } from "@gntik-ai/chat";
|
|
@@ -395,7 +395,7 @@ declare function CreateWorkspacePage({ steps, initialValues, regions, plans, rol
|
|
|
395
395
|
declare const meta$8: TemplateMeta;
|
|
396
396
|
//#endregion
|
|
397
397
|
//#region src/workflow-builder/Page.d.ts
|
|
398
|
-
interface FlowBuilderPageProps<Kind extends string = FlowNodeKind> extends Pick<FlowBuilderProps<Kind>, 'nodeTypes' | 'onConnectEdge' | 'onConnect' | 'isValidConnection' | 'onConnectionRejected' | 'validationIssues' | 'mode' | 'nodeStatus' | 'onNodeSelect'> {
|
|
398
|
+
interface FlowBuilderPageProps<Kind extends string = FlowNodeKind> extends Pick<FlowBuilderProps<Kind>, 'nodeTypes' | 'onConnectEdge' | 'onConnect' | 'isValidConnection' | 'onConnectionRejected' | 'validationIssues' | 'mode' | 'nodeStatus' | 'onNodeSelect' | 'graph' | 'onGraphChange'> {
|
|
399
399
|
/** Optional companion code panel; run mode forces readOnly. */
|
|
400
400
|
codePanel?: CodePanelProps;
|
|
401
401
|
title: string;
|
|
@@ -413,7 +413,7 @@ interface FlowBuilderPageProps<Kind extends string = FlowNodeKind> extends Pick<
|
|
|
413
413
|
defaultConsoleEntries: ConsoleEntry[];
|
|
414
414
|
onConsoleChange: (entries: ConsoleEntry[]) => void;
|
|
415
415
|
onConsoleClear: () => void;
|
|
416
|
-
onSave: () => void | Promise<void>;
|
|
416
|
+
onSave: (graph: FlowGraph<Kind>) => void | Promise<void>;
|
|
417
417
|
onPublish: () => void;
|
|
418
418
|
breadcrumbs: BreadcrumbItem[];
|
|
419
419
|
/** Builder height in px on wide screens. */
|
|
@@ -657,7 +657,15 @@ interface ResourceSettings {
|
|
|
657
657
|
//#endregion
|
|
658
658
|
//#region src/resource-detail/Page.d.ts
|
|
659
659
|
type ResourceDetailTab = 'overview' | 'activity' | 'settings';
|
|
660
|
+
interface ResourceDetailLabels {
|
|
661
|
+
overview: string;
|
|
662
|
+
activity: string;
|
|
663
|
+
settings: string;
|
|
664
|
+
sections: string;
|
|
665
|
+
}
|
|
660
666
|
interface ResourceDetailProps {
|
|
667
|
+
/** Per-key copy overrides; explicit props take precedence, then labels, then the active catalog. */
|
|
668
|
+
labels?: Partial<ResourceDetailLabels>;
|
|
661
669
|
/**
|
|
662
670
|
* Optional boolean, default false. Shows only the keyboard-accessible Overview tab in
|
|
663
671
|
* the "Resource sections" tablist, using explicit resource props without sample defaults.
|
|
@@ -2353,7 +2361,7 @@ interface Shortcut {
|
|
|
2353
2361
|
id: string;
|
|
2354
2362
|
/** What the shortcut does. */
|
|
2355
2363
|
description: string;
|
|
2356
|
-
/** Keys pressed together, e.g. ['
|
|
2364
|
+
/** Keys pressed together, e.g. ['mod', 'K']. */
|
|
2357
2365
|
keys: string[];
|
|
2358
2366
|
/** A second combination that does the same (e.g. a sequence "G then P"). */
|
|
2359
2367
|
then?: string[];
|
|
@@ -2529,5 +2537,5 @@ declare function IncidentBoardPage(props: Partial<IncidentBoardProps>): import("
|
|
|
2529
2537
|
//#region src/incident-board/template.meta.d.ts
|
|
2530
2538
|
declare const meta$16: TemplateMeta;
|
|
2531
2539
|
//#endregion
|
|
2532
|
-
export { AcceptInvitationPage, type AcceptInvitationPageProps, type ApiKey, type ArticleFeedbackValue, type ArticleLink, AssistantChatPage, type AssistantChatProps, type AssistantTool, type AuditEvent, AuditLogPage, type AuditLogProps, type AuditResult, type BoardCard, type BoardColumn, BoardPage, type BoardProps, type BoardState, type ChangelogEntry, ChangelogPage, type ChangelogProps, type ChangelogTag, CodeEditorPage, type CodeEditorPageProps, type ComparisonRow, type ComparisonSection, type ComparisonValue, type Connector, type ConsoleShellProps, ContactPage, type ContactProps, type ContactTopic, type ContactValues, type Conversation, type CreateWizardCopy, type CreateWizardFieldErrors, type CreateWizardFlowLabels, type CreateWizardFlowProps, type CreateWizardFlowStep, CreateWizardPage, type CreateWizardProps, type CreateWizardSubmitState, CreateWorkspacePage, type CreateWorkspaceProps, DataExplorerPage, type DataExplorerProps, type Density, type DirectMessage, type DocLink, DocsArticlePage, type DocsArticleProps, type EvalRegression, type EvalSample, EvaluationsPage, type EvaluationsProps, type ExplorerField, type ExplorerRow, type FlowBuilderPageProps, ForgotPasswordPage, type ForgotPasswordPageProps, type GalleryView, GettingStartedPage, type GettingStartedProps, type HelpArticle, type HelpCategory, HelpHomePage, type HelpHomeProps, HomeDashboardPage, type HomeDashboardProps, type HomeSecondaryChart, type InboxCategory, type InboxFilter, type InboxNotification, type Incident, IncidentBoardPage, type IncidentBoardProps, IncidentConsolePage, type IncidentConsoleProps, type IncidentField, type IncidentSeverity, type IncidentStatus, type Invitation, type KeyboardShortcutsDialogProps, KeyboardShortcutsPage, type KeyboardShortcutsProps, LandingPage, type LandingProps, type LanguageOption, type LiveEvent, LiveEventStreamPage, type LiveEventStreamProps, type LiveEventStreamStatus, type MessageAttachment, MessagingPage, type MessagingProps, type MfaChallengePageProps, MfaChallengePage as MfaPage, ModelProvidersPage, type ModelProvidersProps, type NewModelKeyInput, type WorkspaceValues as NewWorkspaceValues, NotificationInboxPage, type NotificationInboxProps, type Office, type PasswordChange, type PendingActivationAction, type PendingActivationLink, PendingActivationPage, type PendingActivationPageProps, type PlaygroundModel, type PlaygroundOutput, PricingPage, type PricingProps, type ProfileDetail, type ProfileFormValues, PromptPlaygroundPage, type PromptPlaygroundProps, type ProviderUsageLimit, type PublicHubAction, PublicHubPage, type PublicHubPageProps, type QuickAction, type RadarPoint, type RegionOption, type RequestPoint, ResetPasswordPage, type ResetPasswordPageProps, type ResourceBulkAction, ResourceDetailPage, type ResourceDetailProps, type ResourceDetailTab, ResourceFormPage, type ResourceFormProps, type ResourceFormValues, ResourceGalleryPage, type ResourceGalleryProps, type ResourceGroupBy, ResourceIndexPage, type ResourceIndexProps, type ResourceKind, type RegionOption$1 as ResourceRegionOption, type ResourceRow, type ResourceSettings, ResourceTreePage, type ResourceTreeProps, type RolePermission, RunTracePage, type RunTraceProps, type ScorecardMetric, ScorecardPage, type ScorecardProps, type SearchFacet, type SearchHit, type SearchResultType, SearchResultsPage, type SearchResultsProps, type SearchSelection, type SelectOption, SettingsApiKeysPage, type SettingsApiKeysProps, SettingsAppearancePage, type SettingsAppearanceProps, SettingsBillingPage, type SettingsBillingProps, type SettingsFrameOptions, type SettingsFrameProps, SettingsIntegrationsPage, type SettingsIntegrationsProps, SettingsMembersPage, type SettingsMembersProps, type SettingsNavExtraItem, SettingsNotificationsPage, type SettingsNotificationsProps, type SettingsPageId, SettingsProfilePage, type SettingsProfileProps, SettingsSecurityPage, type SettingsSecurityProps, SettingsWorkspacePage, type SettingsWorkspaceProps, type SetupTask, ShellSidebarPage, type ShellSidebarPageProps, ShellTopnavPage, type ShellTopnavPageProps, type Shortcut, type ShortcutGroup, SignInCardPage, type SignInCardPageProps, SignInPage, type SignInPageProps, SignUpPage, type SignUpPageProps, type SignatureHeader, type SourceOption, type SpanDetail, SsoLoginPage, type SsoLoginPageProps, Status403Page, type Status403Props, Status404Page, type Status404Props, Status500Page, type Status500Props, StatusMaintenancePage, type StatusMaintenanceProps, type TemplateMeta, type TraceRun, type TrafficPoint, type TreeResource, type TriageIncident, type TriageSeverity, type TriageStage, UpgradeRequiredPage, type UpgradeRequiredProps, UsageAnalyticsPage, type UsageAnalyticsProps, type UsageExportRequest, type UsageRow, VerifyEmailPage, type VerifyEmailPageProps, type WebhookDelivery, type WebhookEndpoint, type WizardRegion, type WizardValues, FlowBuilderPage as WorkflowBuilderPage, type WorkspaceRegion, type WorkspaceValues$1 as WorkspaceValues, meta as acceptInvitationTemplateMeta, meta$1 as assistantChatTemplateMeta, meta$2 as auditLogTemplateMeta, meta$3 as boardTemplateMeta, meta$4 as changelogTemplateMeta, meta$5 as codeEditorTemplateMeta, meta$6 as contactTemplateMeta, meta$7 as createWizardTemplateMeta, meta$8 as createWorkspaceTemplateMeta, meta$9 as dataExplorerTemplateMeta, meta$10 as docsArticleTemplateMeta, meta$11 as evaluationsTemplateMeta, meta$12 as forgotPasswordTemplateMeta, formatAge as formatIncidentAge, meta$13 as gettingStartedTemplateMeta, meta$14 as helpHomeTemplateMeta, meta$15 as homeDashboardTemplateMeta, meta$16 as incidentBoardTemplateMeta, meta$17 as incidentConsoleTemplateMeta, meta$18 as keyboardShortcutsTemplateMeta, meta$19 as landingTemplateMeta, meta$20 as liveEventStreamTemplateMeta, meta$21 as messagingTemplateMeta, meta$22 as mfaTemplateMeta, meta$23 as modelProvidersTemplateMeta, meta$24 as notificationInboxTemplateMeta, meta$25 as pendingActivationTemplateMeta, meta$26 as pricingTemplateMeta, meta$27 as promptPlaygroundTemplateMeta, meta$28 as publicHubTemplateMeta, meta$29 as resetPasswordTemplateMeta, meta$30 as resourceDetailTemplateMeta, meta$31 as resourceFormTemplateMeta, meta$32 as resourceGalleryTemplateMeta, meta$33 as resourceIndexTemplateMeta, meta$34 as resourceTreeTemplateMeta, meta$35 as runTraceTemplateMeta, meta$36 as scorecardTemplateMeta, meta$37 as searchResultsTemplateMeta, meta$38 as settingsApiKeysTemplateMeta, meta$39 as settingsAppearanceTemplateMeta, meta$40 as settingsBillingTemplateMeta, meta$41 as settingsIntegrationsTemplateMeta, meta$42 as settingsMembersTemplateMeta, meta$43 as settingsNotificationsTemplateMeta, meta$44 as settingsProfileTemplateMeta, meta$45 as settingsSecurityTemplateMeta, meta$46 as settingsWorkspaceTemplateMeta, meta$47 as shellSidebarTemplateMeta, meta$48 as shellTopnavTemplateMeta, meta$49 as signInCardTemplateMeta, meta$50 as signInTemplateMeta, meta$51 as signUpTemplateMeta, meta$52 as ssoLoginTemplateMeta, meta$53 as status403TemplateMeta, meta$54 as status404TemplateMeta, meta$55 as status500TemplateMeta, meta$56 as statusMaintenanceTemplateMeta, meta$57 as upgradeRequiredTemplateMeta, meta$58 as usageAnalyticsTemplateMeta, meta$59 as verifyEmailTemplateMeta, meta$60 as workflowBuilderTemplateMeta };
|
|
2540
|
+
export { AcceptInvitationPage, type AcceptInvitationPageProps, type ApiKey, type ArticleFeedbackValue, type ArticleLink, AssistantChatPage, type AssistantChatProps, type AssistantTool, type AuditEvent, AuditLogPage, type AuditLogProps, type AuditResult, type BoardCard, type BoardColumn, BoardPage, type BoardProps, type BoardState, type ChangelogEntry, ChangelogPage, type ChangelogProps, type ChangelogTag, CodeEditorPage, type CodeEditorPageProps, type ComparisonRow, type ComparisonSection, type ComparisonValue, type Connector, type ConsoleShellProps, ContactPage, type ContactProps, type ContactTopic, type ContactValues, type Conversation, type CreateWizardCopy, type CreateWizardFieldErrors, type CreateWizardFlowLabels, type CreateWizardFlowProps, type CreateWizardFlowStep, CreateWizardPage, type CreateWizardProps, type CreateWizardSubmitState, CreateWorkspacePage, type CreateWorkspaceProps, DataExplorerPage, type DataExplorerProps, type Density, type DirectMessage, type DocLink, DocsArticlePage, type DocsArticleProps, type EvalRegression, type EvalSample, EvaluationsPage, type EvaluationsProps, type ExplorerField, type ExplorerRow, type FlowBuilderPageProps, ForgotPasswordPage, type ForgotPasswordPageProps, type GalleryView, GettingStartedPage, type GettingStartedProps, type HelpArticle, type HelpCategory, HelpHomePage, type HelpHomeProps, HomeDashboardPage, type HomeDashboardProps, type HomeSecondaryChart, type InboxCategory, type InboxFilter, type InboxNotification, type Incident, IncidentBoardPage, type IncidentBoardProps, IncidentConsolePage, type IncidentConsoleProps, type IncidentField, type IncidentSeverity, type IncidentStatus, type Invitation, type KeyboardShortcutsDialogProps, KeyboardShortcutsPage, type KeyboardShortcutsProps, LandingPage, type LandingProps, type LanguageOption, type LiveEvent, LiveEventStreamPage, type LiveEventStreamProps, type LiveEventStreamStatus, type MessageAttachment, MessagingPage, type MessagingProps, type MfaChallengePageProps, MfaChallengePage as MfaPage, ModelProvidersPage, type ModelProvidersProps, type NewModelKeyInput, type WorkspaceValues as NewWorkspaceValues, NotificationInboxPage, type NotificationInboxProps, type Office, type PasswordChange, type PendingActivationAction, type PendingActivationLink, PendingActivationPage, type PendingActivationPageProps, type PlaygroundModel, type PlaygroundOutput, PricingPage, type PricingProps, type ProfileDetail, type ProfileFormValues, PromptPlaygroundPage, type PromptPlaygroundProps, type ProviderUsageLimit, type PublicHubAction, PublicHubPage, type PublicHubPageProps, type QuickAction, type RadarPoint, type RegionOption, type RequestPoint, ResetPasswordPage, type ResetPasswordPageProps, type ResourceBulkAction, type ResourceDetailLabels, ResourceDetailPage, type ResourceDetailProps, type ResourceDetailTab, ResourceFormPage, type ResourceFormProps, type ResourceFormValues, ResourceGalleryPage, type ResourceGalleryProps, type ResourceGroupBy, ResourceIndexPage, type ResourceIndexProps, type ResourceKind, type RegionOption$1 as ResourceRegionOption, type ResourceRow, type ResourceSettings, ResourceTreePage, type ResourceTreeProps, type RolePermission, RunTracePage, type RunTraceProps, type ScorecardMetric, ScorecardPage, type ScorecardProps, type SearchFacet, type SearchHit, type SearchResultType, SearchResultsPage, type SearchResultsProps, type SearchSelection, type SelectOption, SettingsApiKeysPage, type SettingsApiKeysProps, SettingsAppearancePage, type SettingsAppearanceProps, SettingsBillingPage, type SettingsBillingProps, type SettingsFrameOptions, type SettingsFrameProps, SettingsIntegrationsPage, type SettingsIntegrationsProps, SettingsMembersPage, type SettingsMembersProps, type SettingsNavExtraItem, SettingsNotificationsPage, type SettingsNotificationsProps, type SettingsPageId, SettingsProfilePage, type SettingsProfileProps, SettingsSecurityPage, type SettingsSecurityProps, SettingsWorkspacePage, type SettingsWorkspaceProps, type SetupTask, ShellSidebarPage, type ShellSidebarPageProps, ShellTopnavPage, type ShellTopnavPageProps, type Shortcut, type ShortcutGroup, SignInCardPage, type SignInCardPageProps, SignInPage, type SignInPageProps, SignUpPage, type SignUpPageProps, type SignatureHeader, type SourceOption, type SpanDetail, SsoLoginPage, type SsoLoginPageProps, Status403Page, type Status403Props, Status404Page, type Status404Props, Status500Page, type Status500Props, StatusMaintenancePage, type StatusMaintenanceProps, type TemplateMeta, type TraceRun, type TrafficPoint, type TreeResource, type TriageIncident, type TriageSeverity, type TriageStage, UpgradeRequiredPage, type UpgradeRequiredProps, UsageAnalyticsPage, type UsageAnalyticsProps, type UsageExportRequest, type UsageRow, VerifyEmailPage, type VerifyEmailPageProps, type WebhookDelivery, type WebhookEndpoint, type WizardRegion, type WizardValues, FlowBuilderPage as WorkflowBuilderPage, type WorkspaceRegion, type WorkspaceValues$1 as WorkspaceValues, meta as acceptInvitationTemplateMeta, meta$1 as assistantChatTemplateMeta, meta$2 as auditLogTemplateMeta, meta$3 as boardTemplateMeta, meta$4 as changelogTemplateMeta, meta$5 as codeEditorTemplateMeta, meta$6 as contactTemplateMeta, meta$7 as createWizardTemplateMeta, meta$8 as createWorkspaceTemplateMeta, meta$9 as dataExplorerTemplateMeta, meta$10 as docsArticleTemplateMeta, meta$11 as evaluationsTemplateMeta, meta$12 as forgotPasswordTemplateMeta, formatAge as formatIncidentAge, meta$13 as gettingStartedTemplateMeta, meta$14 as helpHomeTemplateMeta, meta$15 as homeDashboardTemplateMeta, meta$16 as incidentBoardTemplateMeta, meta$17 as incidentConsoleTemplateMeta, meta$18 as keyboardShortcutsTemplateMeta, meta$19 as landingTemplateMeta, meta$20 as liveEventStreamTemplateMeta, meta$21 as messagingTemplateMeta, meta$22 as mfaTemplateMeta, meta$23 as modelProvidersTemplateMeta, meta$24 as notificationInboxTemplateMeta, meta$25 as pendingActivationTemplateMeta, meta$26 as pricingTemplateMeta, meta$27 as promptPlaygroundTemplateMeta, meta$28 as publicHubTemplateMeta, meta$29 as resetPasswordTemplateMeta, meta$30 as resourceDetailTemplateMeta, meta$31 as resourceFormTemplateMeta, meta$32 as resourceGalleryTemplateMeta, meta$33 as resourceIndexTemplateMeta, meta$34 as resourceTreeTemplateMeta, meta$35 as runTraceTemplateMeta, meta$36 as scorecardTemplateMeta, meta$37 as searchResultsTemplateMeta, meta$38 as settingsApiKeysTemplateMeta, meta$39 as settingsAppearanceTemplateMeta, meta$40 as settingsBillingTemplateMeta, meta$41 as settingsIntegrationsTemplateMeta, meta$42 as settingsMembersTemplateMeta, meta$43 as settingsNotificationsTemplateMeta, meta$44 as settingsProfileTemplateMeta, meta$45 as settingsSecurityTemplateMeta, meta$46 as settingsWorkspaceTemplateMeta, meta$47 as shellSidebarTemplateMeta, meta$48 as shellTopnavTemplateMeta, meta$49 as signInCardTemplateMeta, meta$50 as signInTemplateMeta, meta$51 as signUpTemplateMeta, meta$52 as ssoLoginTemplateMeta, meta$53 as status403TemplateMeta, meta$54 as status404TemplateMeta, meta$55 as status500TemplateMeta, meta$56 as statusMaintenanceTemplateMeta, meta$57 as upgradeRequiredTemplateMeta, meta$58 as usageAnalyticsTemplateMeta, meta$59 as verifyEmailTemplateMeta, meta$60 as workflowBuilderTemplateMeta };
|
|
2533
2541
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { ChartLocaleProvider, Heatmap, MiniBar, RadarChart, chartFmt } from "@gntik-ai/charts";
|
|
3
|
+
import { ActivityFeed, AppSidebarFooter, AppSidebarHeader, AppSidebarNav, AppTopbar, AuthHeader, BulkActionBar, ChartCard, CodePanel, CommentThread, ConfirmDestructive, CreateApiKeyDialog, DEPLOYMENT_COLUMNS, DEPLOYMENT_DETAILS, DEPLOYMENT_EVENTS, DEPLOYMENT_ROWS, DangerZone, DataTable, DateRangeFilter, DescriptionListCard, ErrorPanel, EvaluationScorecard, Faq, FeatureGrid, FileUploadPanel, FilterBar, FirstRunEmpty, FlowBuilder, ForgotPasswordForm, FormSection, Hero, InlineCallout, InviteMembersDialog, InvoiceTable, KPI_ITEMS, KpiRow, ListSkeleton, LogViewer, MembersTable, MfaChallenge, ModelKeysList, NoResultsEmpty, NotificationMatrix, PROJECT_ACTIVITY, PageHeader, PageToolbar, PaymentMethodCard, PendingInvitations, PlanCard, PricingTable, ProfileHeader, PromptEditor, QuotaMeters, RESOURCE_CARDS, ResetPasswordForm, ResourceCardGrid, SectionHeader, SessionsDevices, SettingsRow, SignInForm, SignUpForm, SsoButtons, StatusTimeline, StickyActionBar, SystemBanner, TokenCostCard, TraceWaterfall, TrendDelta, ValidationSummary, apiKeyExpiries, apiKeyScopes, appSidebarNavGroups, appSidebarUser, appSidebarUser as appSidebarUser$1, appSidebarWorkspaces, appTopbarNotifications, builderEdges, builderNodes, cleanFlowGraph, firstRunSteps, formatSpanDuration, generateDemoSecret, memberRoles, noAccessSample, notificationChannels, notificationDefaults, notificationEvents, sampleDeviceSessions, sampleInvitations, sampleInvoices, sampleMembers, samplePaymentMethod, samplePlan, samplePricingTiers, sampleProfile, sampleQuotas, ssoProviders, ssoProviders as ssoProviders$1 } from "@gntik-ai/blocks";
|
|
4
|
+
import { Alert, AuthLayout, Avatar, AvatarGroup, Badge, Blockquote, Breadcrumbs, Button, CanvasLayout, Card, CardBody, CardDescription, CardHeader, CardTitle, Checkbox, CheckboxGroup, ClickableCard, CodeBlock, ContextMenu, ContextMenuContent, ContextMenuTrigger, Dialog, DialogBody, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DocsLayout, Drawer, DrawerBody, DrawerContent, DrawerDescription, DrawerHeader, DrawerTitle, EmptyState, Field, FieldDescription, FieldError, FieldLabel, Grid, GridItem, HStack, Heading, IconButton, Input, InspectorLayout, InspectorToggle, JsonViewer, KanbanBoard, Kbd, KbdCombo, Link, ListInput, LiveAnnouncer, Logo, MegaMenu, MenuItem, MenuSeparator, Meter, MobileNav, NavList, OtpInput, OverflowList, Page, PasswordInput, PowerSearch, Progress, Section, Select, SelectContent, SelectItem, SelectTrigger, SelectableCard, SelectableCardGroup, Separator, SettingsLayout, SidebarLayout, SimpleSelect, Skeleton, Spinner, SplitLayout, Stack, StackedLayout, StatusDot, StatusLayout, StatusTag, Switch, Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow, Tabs, TabsList, TabsPanel, TabsTab, Text, Textarea, ThemeSwitcher, Thumbnail, ThumbnailList, Timer, Timestamp, Toggle, ToggleGroup, TokenInput, TooltipProvider, TransferList, TreeList, VisuallyHidden, WizardLayout, cn, emptyPowerSearchQuery, formatPowerSearch, matchPowerSearch, matchText, megaMenuNavItems, moveKanbanCard, parsePowerSearch, useAnnounce, useHasLiveAnnouncer, useI18n, useInspectorLayout, useOs, useTheme } from "@gntik-ai/ui";
|
|
4
5
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
5
6
|
import { Fragment as Fragment$1, createElement, useEffect, useEffectEvent, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
6
7
|
import { ChatAnnouncer, ChatComposer, ChatLayout, ChatMessage, CitationList, Markdown, SuggestionChips, ToolCallCard } from "@gntik-ai/chat";
|
|
7
8
|
import { Archive, ArrowLeft, ArrowRight, BarChart3, Bell, BellOff, BellRing, BookOpen, Braces, Building2, CalendarClock, Check, CheckCheck, CircleCheck, Clock, Code2, Columns3, Copy, Cpu, CreditCard, Database, Download, ExternalLink, FileCode, FileDiff, FileJson, FileQuestion, FileSearch, FileText, Folder, FolderKanban, FolderOpen, GitBranch, Globe, GripVertical, Hand, HardDrive, Home, KeyRound, Keyboard, LayoutGrid, LayoutTemplate, LifeBuoy, ListOrdered, ListTodo, Lock, Mail, MailOpen, MapPin, MessageSquare, MessagesSquare, Minus, Palette, Phone, Play, PlayCircle, Plug, Plus, RefreshCw, Rocket, RotateCcw, RotateCw, Rss, Save, Search, SearchX, Send, Server, ServerCrash, Shield, ShieldCheck, Square, SquarePen, Table2, ThumbsDown, ThumbsUp, Trash2, Upload, User, UserPlus, Users, Wrench, X } from "@gntik-ai/icons";
|
|
8
|
-
import { Heatmap, MiniBar, RadarChart, chartFmt } from "@gntik-ai/charts";
|
|
9
9
|
import { DiffEditor } from "@gntik-ai/editor";
|
|
10
10
|
import { flushSync } from "react-dom";
|
|
11
11
|
//#region src/shared/ConsoleShell.tsx
|
|
@@ -16,38 +16,42 @@ import { flushSync } from "react-dom";
|
|
|
16
16
|
* link and user-menu items.
|
|
17
17
|
*/
|
|
18
18
|
function ConsoleShell({ children, nav, currentHref, breadcrumbs, workspaces, currentWorkspaceId, onWorkspaceChange, onCreateWorkspace, user, usage, helpHref, helpLabel, userMenuItems, onSignOut, topbar, storageKey, sidebarLabel, collapseMode }) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
collapsed
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
19
|
+
const { locale } = useI18n();
|
|
20
|
+
return /* @__PURE__ */ jsx(ChartLocaleProvider, {
|
|
21
|
+
locale,
|
|
22
|
+
children: /* @__PURE__ */ jsx(SidebarLayout, {
|
|
23
|
+
fullScreen: true,
|
|
24
|
+
storageKey,
|
|
25
|
+
sidebarLabel,
|
|
26
|
+
collapseMode,
|
|
27
|
+
sidebarHeader: ({ collapsed }) => /* @__PURE__ */ jsx(AppSidebarHeader, {
|
|
28
|
+
collapsed,
|
|
29
|
+
workspaces,
|
|
30
|
+
currentWorkspaceId,
|
|
31
|
+
onWorkspaceChange,
|
|
32
|
+
onCreateWorkspace
|
|
33
|
+
}),
|
|
34
|
+
sidebar: ({ collapsed }) => /* @__PURE__ */ jsx(AppSidebarNav, {
|
|
35
|
+
groups: nav,
|
|
36
|
+
currentHref,
|
|
37
|
+
collapsed
|
|
38
|
+
}),
|
|
39
|
+
sidebarFooter: ({ collapsed }) => /* @__PURE__ */ jsx(AppSidebarFooter, {
|
|
40
|
+
collapsed,
|
|
41
|
+
user,
|
|
42
|
+
usage,
|
|
43
|
+
helpHref,
|
|
44
|
+
helpLabel,
|
|
45
|
+
userMenuItems,
|
|
46
|
+
onSignOut
|
|
47
|
+
}),
|
|
48
|
+
topbar: /* @__PURE__ */ jsx(AppTopbar, {
|
|
49
|
+
breadcrumbs,
|
|
50
|
+
user,
|
|
51
|
+
...topbar
|
|
52
|
+
}),
|
|
53
|
+
children
|
|
54
|
+
})
|
|
51
55
|
});
|
|
52
56
|
}
|
|
53
57
|
//#endregion
|
|
@@ -1938,15 +1942,24 @@ const flowBuilderBreadcrumbs = [{
|
|
|
1938
1942
|
* '@gntik-ai/flow/styles.css' once for the React Flow canvas.
|
|
1939
1943
|
*/
|
|
1940
1944
|
function FlowBuilderPage(props) {
|
|
1941
|
-
const { title = flowBuilderContent.title, status = flowBuilderContent.status, nodes, edges, palette, onRun, consoleEntries, defaultConsoleEntries, onConsoleChange, onConsoleClear, onSave, onPublish, nodeTypes, onConnectEdge, onConnect, isValidConnection, onConnectionRejected, validationIssues, mode, nodeStatus, onNodeSelect, codePanel, breadcrumbs = flowBuilderBreadcrumbs, height = 640, fullScreen = true } = props;
|
|
1945
|
+
const { title = flowBuilderContent.title, status = flowBuilderContent.status, nodes = builderNodes, edges = builderEdges, palette, onRun, consoleEntries, defaultConsoleEntries, onConsoleChange, onConsoleClear, onSave, onPublish, nodeTypes, onConnectEdge, onConnect, isValidConnection, onConnectionRejected, validationIssues, mode, nodeStatus, onNodeSelect, graph, onGraphChange, codePanel, breadcrumbs = flowBuilderBreadcrumbs, height = 640, fullScreen = true } = props;
|
|
1942
1946
|
const [saving, setSaving] = useState(false);
|
|
1943
|
-
const [
|
|
1947
|
+
const [initialGraph] = useState(() => ({
|
|
1948
|
+
nodes,
|
|
1949
|
+
edges
|
|
1950
|
+
}));
|
|
1951
|
+
const [latestGraph, setLatestGraph] = useState();
|
|
1952
|
+
const [saveState, setSaveState] = useState("initial");
|
|
1953
|
+
const revision = useRef(0);
|
|
1954
|
+
const { t } = useI18n();
|
|
1955
|
+
const savedNote = saveState === "initial" ? flowBuilderContent.lastSaved : t(saveState === "unsaved" ? "actionBar.unsaved" : "actionBar.saved");
|
|
1944
1956
|
const save = async () => {
|
|
1945
1957
|
setSaving(true);
|
|
1958
|
+
const savedRevision = revision.current;
|
|
1946
1959
|
try {
|
|
1947
|
-
await onSave?.();
|
|
1948
|
-
|
|
1949
|
-
} finally {
|
|
1960
|
+
await onSave?.(cleanFlowGraph(graph ?? latestGraph ?? initialGraph));
|
|
1961
|
+
if (revision.current === savedRevision) setSaveState("saved");
|
|
1962
|
+
} catch {} finally {
|
|
1950
1963
|
setSaving(false);
|
|
1951
1964
|
}
|
|
1952
1965
|
};
|
|
@@ -1994,6 +2007,13 @@ function FlowBuilderPage(props) {
|
|
|
1994
2007
|
title,
|
|
1995
2008
|
nodes,
|
|
1996
2009
|
edges,
|
|
2010
|
+
graph,
|
|
2011
|
+
onGraphChange: (next, change) => {
|
|
2012
|
+
revision.current += 1;
|
|
2013
|
+
setLatestGraph(next);
|
|
2014
|
+
setSaveState("unsaved");
|
|
2015
|
+
onGraphChange?.(next, change);
|
|
2016
|
+
},
|
|
1997
2017
|
palette,
|
|
1998
2018
|
onRun,
|
|
1999
2019
|
consoleEntries,
|
|
@@ -2025,7 +2045,7 @@ const meta$60 = {
|
|
|
2025
2045
|
family: "Builders",
|
|
2026
2046
|
priority: "P3",
|
|
2027
2047
|
status: "experimental",
|
|
2028
|
-
description: "Full-screen workflow editor with optional nodeTypes, onConnectEdge, onConnect, isValidConnection, onConnectionRejected, validationIssues, mode=\"run\", nodeStatus and onNodeSelect passed to FlowBuilder; codePanel passes readOnly, markers, onValidityChange, onMonacoReady and loader to an optional CodePanel (branch, parallel, sequence and worker-backed YAML examples). The app must import '@gntik-ai/flow/styles.css' once for the canvas styles. Optional nodeTypes, onConnectEdge, onConnect, isValidConnection, onConnectionRejected, validationIssues, mode, nodeStatus and onNodeSelect pass to FlowBuilder unchanged (see its branch, parallel and sequence examples). mode=\"run\" hides Save, Publish and the saved notice, and preserves focus and node selection. Optional codePanel renders a companion CodePanel and passes all its extensions: readOnly, markers, onValidityChange, onMonacoReady and loader; run mode forces its readOnly to true. For example, WorkflowBuilderPage mode=\"run\" nodeStatus={{step:\"running\"}} onNodeSelect={openDetails}; codePanel={{files,problems:[],loader:yamlLoader,markers}} uses consumer-owned same-origin YAML workers and inline schemas.",
|
|
2048
|
+
description: "onSave(graph) receives the graph on screen (controlled graph, latest reported edit, or initial starter graph), without selected, dragging or measured node fields. Zero-argument handlers remain valid. Optional graph and onGraphChange pass through to FlowBuilder. Committed edits show actionBar.unsaved, a resolved save shows actionBar.saved, and a rejected save retains unsaved status and releases loading. Edits during a pending save remain unsaved. examples/SaveGraph.tsx shows a controlled graph and onSave={(graph) => localStorage.setItem(\"workflow-builder-example\", JSON.stringify(graph))}; hosts own persistence. Full-screen workflow editor with optional nodeTypes, onConnectEdge, onConnect, isValidConnection, onConnectionRejected, validationIssues, mode=\"run\", nodeStatus and onNodeSelect passed to FlowBuilder; codePanel passes readOnly, markers, onValidityChange, onMonacoReady and loader to an optional CodePanel (branch, parallel, sequence and worker-backed YAML examples). The app must import '@gntik-ai/flow/styles.css' once for the canvas styles. Optional nodeTypes, onConnectEdge, onConnect, isValidConnection, onConnectionRejected, validationIssues, mode, nodeStatus and onNodeSelect pass to FlowBuilder unchanged (see its branch, parallel and sequence examples). mode=\"run\" hides Save, Publish and the saved notice, and preserves focus and node selection. Optional codePanel renders a companion CodePanel and passes all its extensions: readOnly, markers, onValidityChange, onMonacoReady and loader; run mode forces its readOnly to true. For example, WorkflowBuilderPage mode=\"run\" nodeStatus={{step:\"running\"}} onNodeSelect={openDetails}; codePanel={{files,problems:[],loader:yamlLoader,markers}} uses consumer-owned same-origin YAML workers and inline schemas.",
|
|
2029
2049
|
layout: "CanvasLayout",
|
|
2030
2050
|
blocks: ["flow-builder", "code-panel"]
|
|
2031
2051
|
};
|
|
@@ -3034,23 +3054,15 @@ const detailDangerActions = [{
|
|
|
3034
3054
|
//#endregion
|
|
3035
3055
|
//#region src/resource-detail/Page.tsx
|
|
3036
3056
|
const TABS = [
|
|
3037
|
-
|
|
3038
|
-
|
|
3039
|
-
|
|
3040
|
-
},
|
|
3041
|
-
{
|
|
3042
|
-
value: "activity",
|
|
3043
|
-
label: "Activity"
|
|
3044
|
-
},
|
|
3045
|
-
{
|
|
3046
|
-
value: "settings",
|
|
3047
|
-
label: "Settings"
|
|
3048
|
-
}
|
|
3057
|
+
"overview",
|
|
3058
|
+
"activity",
|
|
3059
|
+
"settings"
|
|
3049
3060
|
];
|
|
3050
3061
|
/** Resource detail: editable tabs by default, or explicit-only Overview when readOnly is true. */
|
|
3051
3062
|
function ResourceDetailPage(props) {
|
|
3063
|
+
const { t } = useI18n();
|
|
3052
3064
|
const readOnly = props.readOnly ?? false;
|
|
3053
|
-
const { name = readOnly ? "" : detailResource.name, description = readOnly ? "" : detailResource.description, status = readOnly ? "" : detailResource.status, breadcrumbs = readOnly ? [] : detailBreadcrumbs, meta: metaProp, actions: actionsProp, details: detailsProp, overviewTitle = "Configuration", overviewDescription = readOnly ? "" : "Settings of this resource.", historyTitle = "Status history", events = readOnly ? [] : detailEvents, activity = readOnly ? [] : detailActivity, dangerActions = readOnly ? [] : detailDangerActions, defaultTab = "overview", onTabChange, onEditDetails, onSaveSettings, onDangerAction, shell } = props;
|
|
3065
|
+
const { name = readOnly ? "" : detailResource.name, description = readOnly ? "" : detailResource.description, status = readOnly ? "" : detailResource.status, breadcrumbs = readOnly ? [] : detailBreadcrumbs, meta: metaProp, actions: actionsProp, details: detailsProp, overviewTitle = "Configuration", overviewDescription = readOnly ? "" : "Settings of this resource.", historyTitle = "Status history", events = readOnly ? [] : detailEvents, activity = readOnly ? [] : detailActivity, dangerActions = readOnly ? [] : detailDangerActions, defaultTab = "overview", onTabChange, onEditDetails, onSaveSettings, onDangerAction, shell, labels } = props;
|
|
3054
3066
|
const meta = metaProp ?? (readOnly ? [] : detailMeta);
|
|
3055
3067
|
const actions = actionsProp ?? (readOnly ? [] : [{
|
|
3056
3068
|
label: "View logs",
|
|
@@ -3073,7 +3085,10 @@ function ResourceDetailPage(props) {
|
|
|
3073
3085
|
description
|
|
3074
3086
|
});
|
|
3075
3087
|
const dirty = settings.name !== saved.name || settings.description !== saved.description;
|
|
3076
|
-
const tabs = readOnly ? TABS.filter((
|
|
3088
|
+
const tabs = (readOnly ? TABS.filter((value) => value === "overview") : TABS).map((value) => ({
|
|
3089
|
+
value,
|
|
3090
|
+
label: labels?.[value] ?? t(`resourceDetail.${value}`)
|
|
3091
|
+
}));
|
|
3077
3092
|
return /* @__PURE__ */ jsx(ConsoleShell, {
|
|
3078
3093
|
currentHref: "/deployments",
|
|
3079
3094
|
breadcrumbs,
|
|
@@ -3098,7 +3113,7 @@ function ResourceDetailPage(props) {
|
|
|
3098
3113
|
},
|
|
3099
3114
|
children: [
|
|
3100
3115
|
/* @__PURE__ */ jsx(TabsList, {
|
|
3101
|
-
"aria-label": "
|
|
3116
|
+
"aria-label": labels?.sections ?? t("resourceDetail.sections"),
|
|
3102
3117
|
children: tabs.map((t) => /* @__PURE__ */ jsx(TabsTab, {
|
|
3103
3118
|
value: t.value,
|
|
3104
3119
|
children: t.label
|
|
@@ -3215,7 +3230,7 @@ const meta$30 = {
|
|
|
3215
3230
|
family: "Resources",
|
|
3216
3231
|
priority: "P1",
|
|
3217
3232
|
status: "beta",
|
|
3218
|
-
description: "Resource detail with editable Overview, Activity and Settings tabs by default; optional readOnly (boolean, default false) uses only explicit header and detail props and one Overview tab, with optional history (readonly StatusEvent[], default undefined): omitted hides the history card, [] shows the named empty state, and events render exactly as supplied without invented actors. Read-only ignores activity, events, dangerActions, defaultTab, onSaveSettings and onDangerAction; explicit actions and onEditDetails are honored. The Resource sections tablist retains Tab, arrow, Home/End and Enter/Space keyboard navigation; history is a named group containing the Status history list or empty-state region. Uses token styling in dark (default), light and high_contrast. Examples: runtime-with-transition maps state and lastTransitionAt to one actor-free event, runtime-without-transition maps null to [], and realtime-configuration and postgres-table-detail omit history. ConsoleShell retains sample frame defaults unless explicit shell props are supplied, as in the examples.",
|
|
3233
|
+
description: "Resource detail with editable Overview, Activity and Settings tabs by default; optional readOnly (boolean, default false) uses only explicit header and detail props and one Overview tab, with optional history (readonly StatusEvent[], default undefined): omitted hides the history card, [] shows the named empty state, and events render exactly as supplied without invented actors. Read-only ignores activity, events, dangerActions, defaultTab, onSaveSettings and onDangerAction; explicit actions and onEditDetails are honored. The Resource sections tablist retains Tab, arrow, Home/End and Enter/Space keyboard navigation; history is a named group containing the Status history list or empty-state region. Uses token styling in dark (default), light and high_contrast. Examples: runtime-with-transition maps state and lastTransitionAt to one actor-free event, runtime-without-transition maps null to [], and realtime-configuration and postgres-table-detail omit history. Optional labels?: Partial<ResourceDetailLabels> overrides overview, activity, settings and sections (all strings). Unset keys use I18nProvider (en/es); no provider keeps English. Only the tabs and tablist are localized by this template; fixtures and other section text are unchanged. readOnly keeps only the localized overview tab. See the Catalog labels live preview. ConsoleShell retains sample frame defaults unless explicit shell props are supplied, as in the examples.",
|
|
3219
3234
|
layout: "SidebarLayout + Page",
|
|
3220
3235
|
blocks: [
|
|
3221
3236
|
"app-sidebar",
|
|
@@ -13264,7 +13279,7 @@ const shortcutGroups = [
|
|
|
13264
13279
|
{
|
|
13265
13280
|
id: "palette",
|
|
13266
13281
|
description: "Open the command palette",
|
|
13267
|
-
keys: ["
|
|
13282
|
+
keys: ["mod", "K"]
|
|
13268
13283
|
},
|
|
13269
13284
|
{
|
|
13270
13285
|
id: "help",
|
|
@@ -13274,13 +13289,13 @@ const shortcutGroups = [
|
|
|
13274
13289
|
{
|
|
13275
13290
|
id: "sidebar",
|
|
13276
13291
|
description: "Collapse or expand the sidebar",
|
|
13277
|
-
keys: ["
|
|
13292
|
+
keys: ["mod", "B"]
|
|
13278
13293
|
},
|
|
13279
13294
|
{
|
|
13280
13295
|
id: "theme",
|
|
13281
13296
|
description: "Switch theme",
|
|
13282
13297
|
keys: [
|
|
13283
|
-
"
|
|
13298
|
+
"mod",
|
|
13284
13299
|
"⇧",
|
|
13285
13300
|
"L"
|
|
13286
13301
|
]
|
|
@@ -13355,12 +13370,12 @@ const shortcutGroups = [
|
|
|
13355
13370
|
{
|
|
13356
13371
|
id: "save",
|
|
13357
13372
|
description: "Save changes",
|
|
13358
|
-
keys: ["
|
|
13373
|
+
keys: ["mod", "S"]
|
|
13359
13374
|
},
|
|
13360
13375
|
{
|
|
13361
13376
|
id: "submit",
|
|
13362
13377
|
description: "Submit a form or comment",
|
|
13363
|
-
keys: ["
|
|
13378
|
+
keys: ["mod", "↵"]
|
|
13364
13379
|
},
|
|
13365
13380
|
{
|
|
13366
13381
|
id: "cancel",
|
|
@@ -13370,18 +13385,28 @@ const shortcutGroups = [
|
|
|
13370
13385
|
{
|
|
13371
13386
|
id: "undo",
|
|
13372
13387
|
description: "Undo",
|
|
13373
|
-
keys: ["
|
|
13388
|
+
keys: ["mod", "Z"]
|
|
13374
13389
|
}
|
|
13375
13390
|
]
|
|
13376
13391
|
}
|
|
13377
13392
|
];
|
|
13378
|
-
/** Groups
|
|
13379
|
-
function filterShortcuts(groups, query, locale) {
|
|
13393
|
+
/** Groups matching descriptions, titles or keys; mod accepts both Command and Ctrl spellings. */
|
|
13394
|
+
function filterShortcuts(groups, query, locale, os = "undetermined") {
|
|
13380
13395
|
const q = query.trim().toLowerCase();
|
|
13381
13396
|
if (!q) return [...groups];
|
|
13397
|
+
const modifier = os === "macos" || os === "ios" ? "⌘" : "Ctrl";
|
|
13398
|
+
const alias = modifier === "⌘" ? "Ctrl" : "⌘";
|
|
13399
|
+
const matchesKeys = (shortcut) => {
|
|
13400
|
+
const keys = [...shortcut.keys, ...shortcut.then ?? []];
|
|
13401
|
+
return [
|
|
13402
|
+
"mod",
|
|
13403
|
+
modifier,
|
|
13404
|
+
alias
|
|
13405
|
+
].some((mod) => keys.map((key) => key === "mod" ? mod : key).join(" ").toLowerCase() === q);
|
|
13406
|
+
};
|
|
13382
13407
|
return groups.map((g) => ({
|
|
13383
13408
|
...g,
|
|
13384
|
-
shortcuts: g.shortcuts.filter((s) => matchText(s.description, query, { locale }) || matchText(g.title, query, { locale }) ||
|
|
13409
|
+
shortcuts: g.shortcuts.filter((s) => matchText(s.description, query, { locale }) || matchText(g.title, query, { locale }) || matchesKeys(s))
|
|
13385
13410
|
})).filter((g) => g.shortcuts.length > 0);
|
|
13386
13411
|
}
|
|
13387
13412
|
//#endregion
|
|
@@ -13389,9 +13414,10 @@ function filterShortcuts(groups, query, locale) {
|
|
|
13389
13414
|
/** Searchable shortcut sheet shared by the page and the dialog. */
|
|
13390
13415
|
function ShortcutSheet({ groups, headingLevel = 2, columns = 2, autoFocus }) {
|
|
13391
13416
|
const { locale } = useI18n();
|
|
13417
|
+
const os = useOs();
|
|
13392
13418
|
const [query, setQuery] = useState("");
|
|
13393
13419
|
const countId = useId();
|
|
13394
|
-
const visible = filterShortcuts(groups, query, locale);
|
|
13420
|
+
const visible = filterShortcuts(groups, query, locale, os);
|
|
13395
13421
|
const total = visible.reduce((n, g) => n + g.shortcuts.length, 0);
|
|
13396
13422
|
return /* @__PURE__ */ jsxs(Stack, {
|
|
13397
13423
|
gap: 5,
|