@togo-framework/ui 0.1.7 → 0.1.9
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 +66 -5
- package/dist/index.js +216 -15
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -3957,22 +3957,39 @@ declare namespace PillButton {
|
|
|
3957
3957
|
var displayName: string;
|
|
3958
3958
|
}
|
|
3959
3959
|
|
|
3960
|
+
interface BrandGlyph {
|
|
3961
|
+
path: string;
|
|
3962
|
+
hex: string;
|
|
3963
|
+
}
|
|
3964
|
+
/** A provider plugin nested under a base card (auth → auth-dev, auth-firebase…). */
|
|
3965
|
+
interface ProviderChip {
|
|
3966
|
+
name: string;
|
|
3967
|
+
href: string;
|
|
3968
|
+
icon?: LucideIcon;
|
|
3969
|
+
brand?: BrandGlyph;
|
|
3970
|
+
color?: string;
|
|
3971
|
+
}
|
|
3960
3972
|
interface MarketplaceCardProps {
|
|
3961
3973
|
name: string;
|
|
3962
3974
|
href: string;
|
|
3963
3975
|
category?: string;
|
|
3964
|
-
/** Hex
|
|
3976
|
+
/** Hex driving the cover gradient + glyph tint (per-plugin). */
|
|
3977
|
+
color?: string;
|
|
3978
|
+
/** Back-compat alias for `color`. */
|
|
3965
3979
|
categoryColor?: string;
|
|
3966
3980
|
icon?: LucideIcon;
|
|
3981
|
+
/** Real brand SVG (path + hex). Wins over `icon`. */
|
|
3982
|
+
brandIcon?: BrandGlyph;
|
|
3967
3983
|
description?: string;
|
|
3968
|
-
/** Owner/org, e.g. "togo-framework". */
|
|
3969
3984
|
author?: string;
|
|
3970
3985
|
stars?: number;
|
|
3971
3986
|
downloads?: number;
|
|
3972
3987
|
enabled?: boolean;
|
|
3988
|
+
/** Providers nested under a base card. Renders a "providers" chip row. */
|
|
3989
|
+
providers?: ProviderChip[];
|
|
3973
3990
|
className?: string;
|
|
3974
3991
|
}
|
|
3975
|
-
declare function MarketplaceCard({ name, href, category, categoryColor, icon: Icon, description, author, stars, downloads, enabled, className, }: MarketplaceCardProps): React$1.JSX.Element;
|
|
3992
|
+
declare function MarketplaceCard({ name, href, category, color, categoryColor, icon: Icon, brandIcon, description, author, stars, downloads, enabled, providers, className, }: MarketplaceCardProps): React$1.JSX.Element;
|
|
3976
3993
|
declare namespace MarketplaceCard {
|
|
3977
3994
|
var displayName: string;
|
|
3978
3995
|
}
|
|
@@ -4108,12 +4125,56 @@ interface TypingTerminalProps {
|
|
|
4108
4125
|
loop?: boolean;
|
|
4109
4126
|
/** Fixed body height (px). The window never grows/jumps while typing. */
|
|
4110
4127
|
height?: number;
|
|
4128
|
+
/** Fired once when the playback (or the static frame) completes. */
|
|
4129
|
+
onComplete?: () => void;
|
|
4111
4130
|
}
|
|
4112
|
-
declare function TypingTerminal({ steps, endSlot, title, className, typeMs, lineMs, loop, height }: TypingTerminalProps): React$1.JSX.Element;
|
|
4131
|
+
declare function TypingTerminal({ steps, endSlot, title, className, typeMs, lineMs, loop, height, onComplete }: TypingTerminalProps): React$1.JSX.Element;
|
|
4113
4132
|
declare namespace TypingTerminal {
|
|
4114
4133
|
var displayName: string;
|
|
4115
4134
|
}
|
|
4116
4135
|
|
|
4136
|
+
type ClaudeStep = {
|
|
4137
|
+
kind: "user";
|
|
4138
|
+
text: string;
|
|
4139
|
+
} | {
|
|
4140
|
+
kind: "assistant";
|
|
4141
|
+
text: string;
|
|
4142
|
+
} | {
|
|
4143
|
+
kind: "tool";
|
|
4144
|
+
tool: string;
|
|
4145
|
+
arg: string;
|
|
4146
|
+
result?: string;
|
|
4147
|
+
};
|
|
4148
|
+
interface ClaudeSessionProps {
|
|
4149
|
+
steps: ClaudeStep[];
|
|
4150
|
+
/** Revealed after the last step finishes (e.g. a BrowserFrame with the running app). */
|
|
4151
|
+
endSlot?: React$1.ReactNode;
|
|
4152
|
+
title?: string;
|
|
4153
|
+
className?: string;
|
|
4154
|
+
typeMs?: number;
|
|
4155
|
+
lineMs?: number;
|
|
4156
|
+
loop?: boolean;
|
|
4157
|
+
/** Fixed body height (px). The window never grows/jumps while playing. */
|
|
4158
|
+
height?: number;
|
|
4159
|
+
/** Fired once when the playback (or the static frame) completes. */
|
|
4160
|
+
onComplete?: () => void;
|
|
4161
|
+
}
|
|
4162
|
+
declare function ClaudeSession({ steps, endSlot, title, className, typeMs, lineMs, loop, height, onComplete }: ClaudeSessionProps): React$1.JSX.Element;
|
|
4163
|
+
declare namespace ClaudeSession {
|
|
4164
|
+
var displayName: string;
|
|
4165
|
+
}
|
|
4166
|
+
|
|
4167
|
+
interface BrowserFrameProps {
|
|
4168
|
+
/** URL shown in the address bar. */
|
|
4169
|
+
url?: string;
|
|
4170
|
+
children: React$1.ReactNode;
|
|
4171
|
+
className?: string;
|
|
4172
|
+
}
|
|
4173
|
+
declare function BrowserFrame({ url, children, className }: BrowserFrameProps): React$1.JSX.Element;
|
|
4174
|
+
declare namespace BrowserFrame {
|
|
4175
|
+
var displayName: string;
|
|
4176
|
+
}
|
|
4177
|
+
|
|
4117
4178
|
interface MascotMarkProps {
|
|
4118
4179
|
/** Source of the head mark SVG (defaults to /togo-mark.svg). */
|
|
4119
4180
|
src?: string;
|
|
@@ -4125,4 +4186,4 @@ declare namespace MascotMark {
|
|
|
4125
4186
|
var displayName: string;
|
|
4126
4187
|
}
|
|
4127
4188
|
|
|
4128
|
-
export { type A2UIActionItem, type A2UIActionsData, type A2UIArtifact$1 as A2UIArtifact, type A2UICardData, type A2UICardField, type A2UIChartData, type A2UIChartSeries, type A2UIClientCandidate, type A2UIClientCandidatesData, type A2UIClientDiffConfirmData, type A2UIClientDiffRow, type A2UIClientField, type A2UIClientFieldPickerData, type A2UIKind, type A2UIMarkdownData, type A2UIPersonaStarter, type A2UIPersonaStartersData, type A2UITableColumn, type A2UITableData, type ActivityBucket, AdminLayout, type AdminLayoutProps, type AdminSubNavItem, AgentSteps, type AlertMapItem, type AlertSeverity, type AppBrand, AppHeader, type AppHeaderProps, AppLayout, type AppLayoutProps, type AppNavGroup, type AppNavItem, AppPageShell, type AppPageShellProps, AppSidebar, type AppSidebarProps, type AppearanceMode, ArtifactActions, type ArtifactActionsProps, ArtifactCard, type ArtifactCardProps, ArtifactChart, type ArtifactChartProps, ArtifactClientCandidates, type ArtifactClientCandidatesProps, ArtifactClientDiffConfirm, type ArtifactClientDiffConfirmProps, ArtifactClientFieldPicker, type ArtifactClientFieldPickerProps, type ArtifactInteraction, ArtifactMarkdown, type ArtifactMarkdownProps, ArtifactPersonaStarters, type ArtifactPersonaStartersProps, ArtifactRenderer, type ArtifactRendererProps, ArtifactTable, type ArtifactTableProps, ArtifactViewer, AuroraBackground, type AuroraBackgroundProps, AuthCard, type AuthCardBrand, type AuthClient, AuthErrorAlert, AuthFlow, type AuthLayout, AuthStepHeader, type BarPoint, Callout, type CardFilter, CardGrid, type CardGridLabels, ChatThread, CodeBlock, CodeShowcase, type CodeShowcaseProps, type CodeShowcaseTab, ColorPicker, type ColorPickerProps, CommandPalette, ContextualSkeleton, type CopilotClient, type CopilotEvent, CopilotLauncher, CopilotProvider, type CopilotQuickAction, type CopilotRequest, CopilotSelectionTrigger, type CopilotSelectionTriggerProps, DEFAULT_LAYERS, DEFAULT_LEGEND_GROUPS, DEFAULT_REGION_PRESETS, DataState, type DataStateLabels, type DataStateProps, DataTable, type DataTableBulkAction, type DataTableColumnFilter, type DataTableColumnMeta, type DataTableDensity, type DataTableFilterType, type DataTableLanguage, type DataTableProps, type DataTableSelectOption, type DataTableServerCallbacks, type DataTableServerState, type DockPosition, DocsLayout, type DocsLayoutProps, type DocsNavGroup, type DocsNavItem, DocsSidebar, DocsTOC, DynamicIcon, DynamicSection, type DynamicSectionProps, EmptyState, type EmptyStateProps, EntityNetworkGraph, type EntityNetworkGraphProps, type ErrorFilter, ErrorTrackingPage, type ErrorTrackingPageProps, EventMapPanel, type EventMapPanelProps, Eyebrow, type EyebrowProps, FeatureCard, type FeatureCardProps, type FeedbackAttachment, FeedbackButton, type FeedbackButtonProps, FeedbackHub, type FeedbackHubProps, type FeedbackItem, type FeedbackKind, FeedbackWidget, type FeedbackWidgetProps, FilterBar, type FilterBarProps, type FilterChip, ForgotForm, GlassCard, type GlassCardProps, type GraphLink, type GraphNode, IconPicker, type IconPickerProps, type Issue$1 as Issue, type IssueAssignee, type IssueBreadcrumb, IssueDetail, type IssueDetailProps, type IssueLevel, type IssueSort, type IssueTag, IssuesList, type IssuesListProps, LANG_COOKIE_NAME, type LanguageContextValue, LanguageProvider, type LanguageProviderProps, type LegendGroup, type LegendItem, type LegendShapeType, LockScreen, type LockScreenProps, type LockScreenUser, type LogLevel, LoginForm, type LoginResult, Logo, type LogoProps, type LogoTone, type LogoVariant, type LogsFilter, LogsView, type LogsViewProps, MARKER_COLORS, MARKER_LABELS, type MapLayer, MapLayersPanel, type MapLayersPanelProps, MapLegend, type MapLegendProps, type MapMarker$1 as MapMarker, type MapMarkerType, MapPanel, type MapPanelProps, type MapRegionPreset, MapView, type MapViewProps, MarkdownContent, MarkdownEditor, type MarkdownEditorProps, MarkdownRenderer, type MarkdownRendererProps, MarkdownTable, type MarkdownView, MarketplaceCard, type MarketplaceCardProps, MascotMark, type MascotMarkProps, MiniBarChart, MockupWindow, type MockupWindowProps, type ModelOption, MotorFeedbackLauncher, type MotorFeedbackLauncherProps, NestedStepsEditor, type NestedStepsEditorProps, NetworkGraph, type NetworkGraphProps, type NewFeedback, OTPBoxGroup, type OtpResult, PIPELINE_STAGES, PageHeader, type PageHeaderProps, Pager, type PaletteItem, PasswordInput, PasswordLockScreen, type PasswordLockScreenProps, type PasswordLockScreenUser, type PasswordRule, PasswordStrengthMeter, type PickedLocation, PillButton, type PillButtonProps, type PipelineCard, type PipelineLane, type PipelineModel, type PluginActivitySummary, type PluginAppearanceFields, PluginAppearanceSection, type PluginAppearanceSectionProps, PluginCard, type PluginCatalogEntry, type PluginDetailIdentity, PluginDetailLayout, type PluginDetailLayoutProps, type PluginDetailTab, PluginHero, PluginHeroSkeleton, PluginPageHeader, PluginSectionCard, PluginSparkline, type ProfileSession, ProfileView, type ProfileViewProps, type RenderMapContext, ResetForm, type ResolvedIcon, Reveal, type RevealProps, RouteProgress, type RouteProgressProps, STEP_FIELD_REGISTRY, SectionBoard, type SectionBoardProps, SectionHeading, type SectionHeadingProps, type SectionModel, SectionSkeleton, SentraLoading, type ServiceLogRow, ServiceUnavailable, type ServiceUnavailableProps, SessionExpired, type SessionExpiredProps, SeverityChip, type SidebarConversation, type SidebarUser, SourceBadge, type SparklinePoint, type StackFrame, type StackFrameContextLine, StatCard, type StatCardProps, type StatTile, StatsRow, StatusBadge, type StatusBadgeProps, type StatusBadgeTone, type Step, type StepFieldDef, type StepFieldType, type StepMetrics7d, StepOptionsDialog, type StepOptionsDialogProps, StreamingMessage, type TerminalStep, type TestRunCallbacks, type TestRunCompletePayload, TestRunPanel, type TestRunPanelProps, type TestRunSavedItem, type TestRunStep, type TocItem, TwoFAForm, TypingTerminal, type TypingTerminalProps, UnifiedCopilotDock, type UnlockCredentials, type Verify2FAResult, type View, ViewToggle, type ViewToggleProps, Wordmark, type WordmarkProps, Workflow, WorkflowEditor, type WorkflowEditorProps, type WorkflowPalette, WorkflowPipeline, type WorkflowPipelineProps, type WorkflowProps, type WorkflowSource, type WorkflowStep, type WorkflowStepLike, WorkflowStepNode, type WorkflowStepNodeProps, type WorkflowView, cn, computeRules, computeScore, feedbackButtonVariants, levelTone, resolveIcon, statValueVariants, statusBadgeVariants, useCopilot, useLanguage, useT };
|
|
4189
|
+
export { type A2UIActionItem, type A2UIActionsData, type A2UIArtifact$1 as A2UIArtifact, type A2UICardData, type A2UICardField, type A2UIChartData, type A2UIChartSeries, type A2UIClientCandidate, type A2UIClientCandidatesData, type A2UIClientDiffConfirmData, type A2UIClientDiffRow, type A2UIClientField, type A2UIClientFieldPickerData, type A2UIKind, type A2UIMarkdownData, type A2UIPersonaStarter, type A2UIPersonaStartersData, type A2UITableColumn, type A2UITableData, type ActivityBucket, AdminLayout, type AdminLayoutProps, type AdminSubNavItem, AgentSteps, type AlertMapItem, type AlertSeverity, type AppBrand, AppHeader, type AppHeaderProps, AppLayout, type AppLayoutProps, type AppNavGroup, type AppNavItem, AppPageShell, type AppPageShellProps, AppSidebar, type AppSidebarProps, type AppearanceMode, ArtifactActions, type ArtifactActionsProps, ArtifactCard, type ArtifactCardProps, ArtifactChart, type ArtifactChartProps, ArtifactClientCandidates, type ArtifactClientCandidatesProps, ArtifactClientDiffConfirm, type ArtifactClientDiffConfirmProps, ArtifactClientFieldPicker, type ArtifactClientFieldPickerProps, type ArtifactInteraction, ArtifactMarkdown, type ArtifactMarkdownProps, ArtifactPersonaStarters, type ArtifactPersonaStartersProps, ArtifactRenderer, type ArtifactRendererProps, ArtifactTable, type ArtifactTableProps, ArtifactViewer, AuroraBackground, type AuroraBackgroundProps, AuthCard, type AuthCardBrand, type AuthClient, AuthErrorAlert, AuthFlow, type AuthLayout, AuthStepHeader, type BarPoint, type BrandGlyph, BrowserFrame, type BrowserFrameProps, Callout, type CardFilter, CardGrid, type CardGridLabels, ChatThread, ClaudeSession, type ClaudeSessionProps, type ClaudeStep, CodeBlock, CodeShowcase, type CodeShowcaseProps, type CodeShowcaseTab, ColorPicker, type ColorPickerProps, CommandPalette, ContextualSkeleton, type CopilotClient, type CopilotEvent, CopilotLauncher, CopilotProvider, type CopilotQuickAction, type CopilotRequest, CopilotSelectionTrigger, type CopilotSelectionTriggerProps, DEFAULT_LAYERS, DEFAULT_LEGEND_GROUPS, DEFAULT_REGION_PRESETS, DataState, type DataStateLabels, type DataStateProps, DataTable, type DataTableBulkAction, type DataTableColumnFilter, type DataTableColumnMeta, type DataTableDensity, type DataTableFilterType, type DataTableLanguage, type DataTableProps, type DataTableSelectOption, type DataTableServerCallbacks, type DataTableServerState, type DockPosition, DocsLayout, type DocsLayoutProps, type DocsNavGroup, type DocsNavItem, DocsSidebar, DocsTOC, DynamicIcon, DynamicSection, type DynamicSectionProps, EmptyState, type EmptyStateProps, EntityNetworkGraph, type EntityNetworkGraphProps, type ErrorFilter, ErrorTrackingPage, type ErrorTrackingPageProps, EventMapPanel, type EventMapPanelProps, Eyebrow, type EyebrowProps, FeatureCard, type FeatureCardProps, type FeedbackAttachment, FeedbackButton, type FeedbackButtonProps, FeedbackHub, type FeedbackHubProps, type FeedbackItem, type FeedbackKind, FeedbackWidget, type FeedbackWidgetProps, FilterBar, type FilterBarProps, type FilterChip, ForgotForm, GlassCard, type GlassCardProps, type GraphLink, type GraphNode, IconPicker, type IconPickerProps, type Issue$1 as Issue, type IssueAssignee, type IssueBreadcrumb, IssueDetail, type IssueDetailProps, type IssueLevel, type IssueSort, type IssueTag, IssuesList, type IssuesListProps, LANG_COOKIE_NAME, type LanguageContextValue, LanguageProvider, type LanguageProviderProps, type LegendGroup, type LegendItem, type LegendShapeType, LockScreen, type LockScreenProps, type LockScreenUser, type LogLevel, LoginForm, type LoginResult, Logo, type LogoProps, type LogoTone, type LogoVariant, type LogsFilter, LogsView, type LogsViewProps, MARKER_COLORS, MARKER_LABELS, type MapLayer, MapLayersPanel, type MapLayersPanelProps, MapLegend, type MapLegendProps, type MapMarker$1 as MapMarker, type MapMarkerType, MapPanel, type MapPanelProps, type MapRegionPreset, MapView, type MapViewProps, MarkdownContent, MarkdownEditor, type MarkdownEditorProps, MarkdownRenderer, type MarkdownRendererProps, MarkdownTable, type MarkdownView, MarketplaceCard, type MarketplaceCardProps, MascotMark, type MascotMarkProps, MiniBarChart, MockupWindow, type MockupWindowProps, type ModelOption, MotorFeedbackLauncher, type MotorFeedbackLauncherProps, NestedStepsEditor, type NestedStepsEditorProps, NetworkGraph, type NetworkGraphProps, type NewFeedback, OTPBoxGroup, type OtpResult, PIPELINE_STAGES, PageHeader, type PageHeaderProps, Pager, type PaletteItem, PasswordInput, PasswordLockScreen, type PasswordLockScreenProps, type PasswordLockScreenUser, type PasswordRule, PasswordStrengthMeter, type PickedLocation, PillButton, type PillButtonProps, type PipelineCard, type PipelineLane, type PipelineModel, type PluginActivitySummary, type PluginAppearanceFields, PluginAppearanceSection, type PluginAppearanceSectionProps, PluginCard, type PluginCatalogEntry, type PluginDetailIdentity, PluginDetailLayout, type PluginDetailLayoutProps, type PluginDetailTab, PluginHero, PluginHeroSkeleton, PluginPageHeader, PluginSectionCard, PluginSparkline, type ProfileSession, ProfileView, type ProfileViewProps, type ProviderChip, type RenderMapContext, ResetForm, type ResolvedIcon, Reveal, type RevealProps, RouteProgress, type RouteProgressProps, STEP_FIELD_REGISTRY, SectionBoard, type SectionBoardProps, SectionHeading, type SectionHeadingProps, type SectionModel, SectionSkeleton, SentraLoading, type ServiceLogRow, ServiceUnavailable, type ServiceUnavailableProps, SessionExpired, type SessionExpiredProps, SeverityChip, type SidebarConversation, type SidebarUser, SourceBadge, type SparklinePoint, type StackFrame, type StackFrameContextLine, StatCard, type StatCardProps, type StatTile, StatsRow, StatusBadge, type StatusBadgeProps, type StatusBadgeTone, type Step, type StepFieldDef, type StepFieldType, type StepMetrics7d, StepOptionsDialog, type StepOptionsDialogProps, StreamingMessage, type TerminalStep, type TestRunCallbacks, type TestRunCompletePayload, TestRunPanel, type TestRunPanelProps, type TestRunSavedItem, type TestRunStep, type TocItem, TwoFAForm, TypingTerminal, type TypingTerminalProps, UnifiedCopilotDock, type UnlockCredentials, type Verify2FAResult, type View, ViewToggle, type ViewToggleProps, Wordmark, type WordmarkProps, Workflow, WorkflowEditor, type WorkflowEditorProps, type WorkflowPalette, WorkflowPipeline, type WorkflowPipelineProps, type WorkflowProps, type WorkflowSource, type WorkflowStep, type WorkflowStepLike, WorkflowStepNode, type WorkflowStepNodeProps, type WorkflowView, cn, computeRules, computeScore, feedbackButtonVariants, levelTone, resolveIcon, statValueVariants, statusBadgeVariants, useCopilot, useLanguage, useT };
|
package/dist/index.js
CHANGED
|
@@ -16014,28 +16014,44 @@ import * as React30 from "react";
|
|
|
16014
16014
|
import { Search as Search8, Star as Star2, Download as Download2 } from "lucide-react";
|
|
16015
16015
|
import { jsx as jsx99, jsxs as jsxs87 } from "react/jsx-runtime";
|
|
16016
16016
|
var DISPLAY3 = { fontFamily: '"Sora", var(--togo-font-body, ui-sans-serif, system-ui, sans-serif)' };
|
|
16017
|
+
function Glyph2({ icon: Icon, brand, size = 28 }) {
|
|
16018
|
+
if (brand) {
|
|
16019
|
+
return /* @__PURE__ */ jsx99("svg", { role: "img", viewBox: "0 0 24 24", width: size, height: size, fill: "#fff", "aria-hidden": "true", children: /* @__PURE__ */ jsx99("path", { d: brand.path }) });
|
|
16020
|
+
}
|
|
16021
|
+
return Icon ? /* @__PURE__ */ jsx99(Icon, { size, style: { color: "#fff" } }) : null;
|
|
16022
|
+
}
|
|
16017
16023
|
function MarketplaceCard({
|
|
16018
16024
|
name,
|
|
16019
16025
|
href,
|
|
16020
16026
|
category,
|
|
16021
|
-
|
|
16027
|
+
color,
|
|
16028
|
+
categoryColor,
|
|
16022
16029
|
icon: Icon,
|
|
16030
|
+
brandIcon,
|
|
16023
16031
|
description,
|
|
16024
16032
|
author,
|
|
16025
16033
|
stars,
|
|
16026
16034
|
downloads,
|
|
16027
16035
|
enabled,
|
|
16036
|
+
providers,
|
|
16028
16037
|
className
|
|
16029
16038
|
}) {
|
|
16039
|
+
const tint = color || categoryColor || "#2D8CE6";
|
|
16040
|
+
const shown = (providers || []).slice(0, 5);
|
|
16041
|
+
const extra = (providers || []).length - shown.length;
|
|
16030
16042
|
return /* @__PURE__ */ jsx99("a", { href, className: cn("group block h-full", className), children: /* @__PURE__ */ jsxs87("div", { className: "rounded-2xl border border-border bg-card/40 overflow-hidden h-full flex flex-col transition-all duration-200 hover:border-foreground/25 hover:-translate-y-0.5", children: [
|
|
16031
16043
|
/* @__PURE__ */ jsxs87(
|
|
16032
16044
|
"div",
|
|
16033
16045
|
{
|
|
16034
16046
|
className: "relative h-28 flex items-center justify-center overflow-hidden",
|
|
16035
|
-
style: { background: `radial-gradient(120% 140% at 0% 0%, ${
|
|
16047
|
+
style: { background: `radial-gradient(120% 140% at 0% 0%, ${tint}55, transparent 62%), linear-gradient(135deg, ${tint}26, #0b1016)` },
|
|
16036
16048
|
children: [
|
|
16037
16049
|
/* @__PURE__ */ jsx99("div", { className: "absolute inset-0 opacity-[0.14]", style: { backgroundImage: "radial-gradient(circle at 1px 1px, #fff 1px, transparent 0)", backgroundSize: "16px 16px" } }),
|
|
16038
|
-
Icon && /* @__PURE__ */ jsx99("div", { className: "relative grid place-items-center w-14 h-14 rounded-2xl bg-black/20 ring-1 ring-white/20 transition-transform duration-300 group-hover:scale-105", children: /* @__PURE__ */ jsx99(
|
|
16050
|
+
(Icon || brandIcon) && /* @__PURE__ */ jsx99("div", { className: "relative grid place-items-center w-14 h-14 rounded-2xl bg-black/20 ring-1 ring-white/20 transition-transform duration-300 group-hover:scale-105", children: /* @__PURE__ */ jsx99(Glyph2, { icon: Icon, brand: brandIcon }) }),
|
|
16051
|
+
typeof providers !== "undefined" && providers.length > 0 && /* @__PURE__ */ jsxs87("span", { className: "absolute top-3 start-3 text-[10px] font-mono px-2 py-0.5 rounded-full bg-black/30 text-white/80 ring-1 ring-white/20", children: [
|
|
16052
|
+
providers.length,
|
|
16053
|
+
" providers"
|
|
16054
|
+
] }),
|
|
16039
16055
|
enabled && /* @__PURE__ */ jsx99("span", { className: "absolute top-3 end-3 text-[10px] font-mono px-2 py-0.5 rounded-full bg-black/30 text-emerald-300 ring-1 ring-emerald-400/30", children: "enabled" })
|
|
16040
16056
|
]
|
|
16041
16057
|
}
|
|
@@ -16046,6 +16062,28 @@ function MarketplaceCard({
|
|
|
16046
16062
|
category && /* @__PURE__ */ jsx99("span", { className: "ms-auto shrink-0 text-[10px] font-mono uppercase tracking-wider px-2 py-0.5 rounded-full border border-border text-muted-foreground", children: category })
|
|
16047
16063
|
] }),
|
|
16048
16064
|
/* @__PURE__ */ jsx99("p", { className: "text-[13px] text-muted-foreground mt-1.5 line-clamp-2 flex-1", children: description || "A togo-framework plugin." }),
|
|
16065
|
+
shown.length > 0 && /* @__PURE__ */ jsxs87("div", { className: "mt-3 flex flex-wrap gap-1.5", children: [
|
|
16066
|
+
shown.map((p) => /* @__PURE__ */ jsxs87(
|
|
16067
|
+
"span",
|
|
16068
|
+
{
|
|
16069
|
+
onClick: (e) => {
|
|
16070
|
+
e.preventDefault();
|
|
16071
|
+
e.stopPropagation();
|
|
16072
|
+
window.location.href = p.href;
|
|
16073
|
+
},
|
|
16074
|
+
className: "inline-flex items-center gap-1.5 rounded-full border border-border bg-background/40 ps-1.5 pe-2.5 py-1 text-[11px] text-muted-foreground hover:text-foreground hover:border-foreground/25 transition-colors cursor-pointer",
|
|
16075
|
+
children: [
|
|
16076
|
+
/* @__PURE__ */ jsx99("span", { className: "grid place-items-center w-4 h-4 rounded-full", style: { background: `${p.color || tint}26` }, children: /* @__PURE__ */ jsx99(Glyph2, { icon: p.icon, brand: p.brand, size: 10 }) }),
|
|
16077
|
+
p.name
|
|
16078
|
+
]
|
|
16079
|
+
},
|
|
16080
|
+
p.href
|
|
16081
|
+
)),
|
|
16082
|
+
extra > 0 && /* @__PURE__ */ jsxs87("span", { className: "inline-flex items-center rounded-full border border-border px-2.5 py-1 text-[11px] text-muted-foreground", children: [
|
|
16083
|
+
"+",
|
|
16084
|
+
extra
|
|
16085
|
+
] })
|
|
16086
|
+
] }),
|
|
16049
16087
|
/* @__PURE__ */ jsxs87("div", { className: "flex items-center gap-3 mt-3 text-[11px] text-muted-foreground font-mono", children: [
|
|
16050
16088
|
author && /* @__PURE__ */ jsx99("span", { className: "truncate", children: author }),
|
|
16051
16089
|
/* @__PURE__ */ jsxs87("span", { className: "ms-auto flex items-center gap-3 shrink-0", children: [
|
|
@@ -16285,14 +16323,17 @@ function fullFrame(steps) {
|
|
|
16285
16323
|
return { lines, showEnd: true };
|
|
16286
16324
|
}
|
|
16287
16325
|
var keepStaticFrame = () => typeof window !== "undefined" && (window.matchMedia?.("(prefers-reduced-motion: reduce)").matches || navigator?.webdriver === true);
|
|
16288
|
-
function TypingTerminal({ steps, endSlot, title = "~/myapp \u2014 togo", className, typeMs = 26, lineMs = 110, loop = false, height = 360 }) {
|
|
16326
|
+
function TypingTerminal({ steps, endSlot, title = "~/myapp \u2014 togo", className, typeMs = 26, lineMs = 110, loop = false, height = 360, onComplete }) {
|
|
16289
16327
|
const [frame, setFrame] = React32.useState(() => fullFrame(steps));
|
|
16290
16328
|
const [done, setDone] = React32.useState(false);
|
|
16291
16329
|
const [runId, setRunId] = React32.useState(0);
|
|
16292
16330
|
const scrollRef = React32.useRef(null);
|
|
16331
|
+
const onDone = React32.useRef(onComplete);
|
|
16332
|
+
onDone.current = onComplete;
|
|
16293
16333
|
React32.useEffect(() => {
|
|
16294
16334
|
if (keepStaticFrame()) {
|
|
16295
16335
|
setDone(true);
|
|
16336
|
+
onDone.current?.();
|
|
16296
16337
|
return;
|
|
16297
16338
|
}
|
|
16298
16339
|
let alive = true;
|
|
@@ -16338,6 +16379,7 @@ function TypingTerminal({ steps, endSlot, title = "~/myapp \u2014 togo", classNa
|
|
|
16338
16379
|
toBottom();
|
|
16339
16380
|
if (!loop) {
|
|
16340
16381
|
setDone(true);
|
|
16382
|
+
onDone.current?.();
|
|
16341
16383
|
return;
|
|
16342
16384
|
}
|
|
16343
16385
|
await wait(4200);
|
|
@@ -16377,9 +16419,166 @@ function TypingTerminal({ steps, endSlot, title = "~/myapp \u2014 togo", classNa
|
|
|
16377
16419
|
}
|
|
16378
16420
|
TypingTerminal.displayName = "TypingTerminal";
|
|
16379
16421
|
|
|
16380
|
-
// src/components/marketing/
|
|
16422
|
+
// src/components/marketing/ClaudeSession.tsx
|
|
16381
16423
|
import * as React33 from "react";
|
|
16424
|
+
import { RotateCcw as RotateCcw4, Sparkles as Sparkles13 } from "lucide-react";
|
|
16382
16425
|
import { jsx as jsx102, jsxs as jsxs90 } from "react/jsx-runtime";
|
|
16426
|
+
var Tool = ({ tool, arg }) => /* @__PURE__ */ jsxs90("div", { className: "whitespace-pre-wrap break-words", children: [
|
|
16427
|
+
/* @__PURE__ */ jsx102("span", { className: "text-[#28c840]", children: "\u23FA " }),
|
|
16428
|
+
/* @__PURE__ */ jsx102("span", { className: "text-foreground font-semibold", children: tool }),
|
|
16429
|
+
/* @__PURE__ */ jsxs90("span", { className: "text-muted-foreground", children: [
|
|
16430
|
+
"(",
|
|
16431
|
+
arg,
|
|
16432
|
+
")"
|
|
16433
|
+
] })
|
|
16434
|
+
] });
|
|
16435
|
+
var Result = ({ text }) => /* @__PURE__ */ jsxs90("div", { className: "whitespace-pre-wrap break-words text-muted-foreground ps-3", children: [
|
|
16436
|
+
/* @__PURE__ */ jsx102("span", { className: "text-muted-foreground/60", children: "\u23BF " }),
|
|
16437
|
+
text
|
|
16438
|
+
] });
|
|
16439
|
+
var User4 = ({ text }) => /* @__PURE__ */ jsxs90("div", { className: "whitespace-pre-wrap break-words", children: [
|
|
16440
|
+
/* @__PURE__ */ jsx102("span", { className: "text-[#5CDDEC]", children: "> " }),
|
|
16441
|
+
/* @__PURE__ */ jsx102("span", { className: "text-foreground", children: text })
|
|
16442
|
+
] });
|
|
16443
|
+
var Assistant = ({ text }) => /* @__PURE__ */ jsxs90("div", { className: "whitespace-pre-wrap break-words text-foreground/80", children: [
|
|
16444
|
+
/* @__PURE__ */ jsx102("span", { className: "text-[var(--togo-cyan,#5CDDEC)]", children: "\u273B " }),
|
|
16445
|
+
text
|
|
16446
|
+
] });
|
|
16447
|
+
function fullFrame2(steps) {
|
|
16448
|
+
const out = [];
|
|
16449
|
+
steps.forEach((s, i) => {
|
|
16450
|
+
if (s.kind === "user") out.push(/* @__PURE__ */ jsx102(User4, { text: s.text }, `u${i}`));
|
|
16451
|
+
else if (s.kind === "assistant") out.push(/* @__PURE__ */ jsx102(Assistant, { text: s.text }, `a${i}`));
|
|
16452
|
+
else {
|
|
16453
|
+
out.push(/* @__PURE__ */ jsx102(Tool, { tool: s.tool, arg: s.arg }, `t${i}`));
|
|
16454
|
+
if (s.result) out.push(/* @__PURE__ */ jsx102(Result, { text: s.result }, `r${i}`));
|
|
16455
|
+
}
|
|
16456
|
+
});
|
|
16457
|
+
return out;
|
|
16458
|
+
}
|
|
16459
|
+
var keepStaticFrame2 = () => typeof window !== "undefined" && (window.matchMedia?.("(prefers-reduced-motion: reduce)").matches || navigator?.webdriver === true);
|
|
16460
|
+
function ClaudeSession({ steps, endSlot, title = "\u273B Claude Code \u2014 togo", className, typeMs = 22, lineMs = 320, loop = false, height = 360, onComplete }) {
|
|
16461
|
+
const [lines, setLines] = React33.useState(() => fullFrame2(steps));
|
|
16462
|
+
const [showEnd, setShowEnd] = React33.useState(true);
|
|
16463
|
+
const [done, setDone] = React33.useState(false);
|
|
16464
|
+
const [runId, setRunId] = React33.useState(0);
|
|
16465
|
+
const scrollRef = React33.useRef(null);
|
|
16466
|
+
const onDone = React33.useRef(onComplete);
|
|
16467
|
+
onDone.current = onComplete;
|
|
16468
|
+
React33.useEffect(() => {
|
|
16469
|
+
if (keepStaticFrame2()) {
|
|
16470
|
+
setDone(true);
|
|
16471
|
+
onDone.current?.();
|
|
16472
|
+
return;
|
|
16473
|
+
}
|
|
16474
|
+
let alive = true;
|
|
16475
|
+
const timers = [];
|
|
16476
|
+
const wait = (ms) => new Promise((res) => timers.push(setTimeout(res, ms)));
|
|
16477
|
+
const toBottom = () => {
|
|
16478
|
+
if (scrollRef.current) scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
|
|
16479
|
+
};
|
|
16480
|
+
async function run() {
|
|
16481
|
+
setDone(false);
|
|
16482
|
+
setShowEnd(false);
|
|
16483
|
+
do {
|
|
16484
|
+
const acc = [];
|
|
16485
|
+
setLines([]);
|
|
16486
|
+
for (let i = 0; i < steps.length && alive; i++) {
|
|
16487
|
+
const s = steps[i];
|
|
16488
|
+
if (s.kind === "user") {
|
|
16489
|
+
for (let c = 1; c <= s.text.length && alive; c++) {
|
|
16490
|
+
setLines([...acc, /* @__PURE__ */ jsxs90("div", { className: "whitespace-pre-wrap break-words", children: [
|
|
16491
|
+
/* @__PURE__ */ jsx102("span", { className: "text-[#5CDDEC]", children: "> " }),
|
|
16492
|
+
/* @__PURE__ */ jsx102("span", { className: "text-foreground", children: s.text.slice(0, c) }),
|
|
16493
|
+
/* @__PURE__ */ jsx102("span", { className: "ml-0.5 inline-block w-2 -mb-0.5 h-4 bg-[#5CDDEC] animate-pulse" })
|
|
16494
|
+
] }, `u${i}`)]);
|
|
16495
|
+
toBottom();
|
|
16496
|
+
await wait(typeMs);
|
|
16497
|
+
}
|
|
16498
|
+
acc.push(/* @__PURE__ */ jsx102(User4, { text: s.text }, `u${i}`));
|
|
16499
|
+
await wait(420);
|
|
16500
|
+
} else if (s.kind === "assistant") {
|
|
16501
|
+
acc.push(/* @__PURE__ */ jsx102(Assistant, { text: s.text }, `a${i}`));
|
|
16502
|
+
setLines([...acc]);
|
|
16503
|
+
toBottom();
|
|
16504
|
+
await wait(lineMs);
|
|
16505
|
+
} else {
|
|
16506
|
+
acc.push(/* @__PURE__ */ jsx102(Tool, { tool: s.tool, arg: s.arg }, `t${i}`));
|
|
16507
|
+
setLines([...acc]);
|
|
16508
|
+
toBottom();
|
|
16509
|
+
await wait(Math.round(lineMs * 0.7));
|
|
16510
|
+
if (s.result) {
|
|
16511
|
+
acc.push(/* @__PURE__ */ jsx102(Result, { text: s.result }, `r${i}`));
|
|
16512
|
+
setLines([...acc]);
|
|
16513
|
+
toBottom();
|
|
16514
|
+
await wait(lineMs);
|
|
16515
|
+
}
|
|
16516
|
+
}
|
|
16517
|
+
}
|
|
16518
|
+
if (!alive) return;
|
|
16519
|
+
setLines([...acc]);
|
|
16520
|
+
setShowEnd(true);
|
|
16521
|
+
setDone(true);
|
|
16522
|
+
toBottom();
|
|
16523
|
+
onDone.current?.();
|
|
16524
|
+
if (!loop) return;
|
|
16525
|
+
await wait(4200);
|
|
16526
|
+
} while (alive);
|
|
16527
|
+
}
|
|
16528
|
+
run();
|
|
16529
|
+
return () => {
|
|
16530
|
+
alive = false;
|
|
16531
|
+
timers.forEach(clearTimeout);
|
|
16532
|
+
};
|
|
16533
|
+
}, [steps, typeMs, lineMs, loop, runId]);
|
|
16534
|
+
return /* @__PURE__ */ jsxs90("div", { className: cn("rounded-2xl border border-border overflow-hidden bg-[#080b0f] shadow-2xl", className), children: [
|
|
16535
|
+
/* @__PURE__ */ jsxs90("div", { className: "flex items-center gap-2 px-4 py-3 border-b border-border", children: [
|
|
16536
|
+
/* @__PURE__ */ jsx102(Sparkles13, { size: 13, className: "text-[var(--togo-cyan,#5CDDEC)]" }),
|
|
16537
|
+
/* @__PURE__ */ jsx102("span", { className: "font-mono text-xs text-muted-foreground", children: title }),
|
|
16538
|
+
done && !loop && /* @__PURE__ */ jsxs90(
|
|
16539
|
+
"button",
|
|
16540
|
+
{
|
|
16541
|
+
type: "button",
|
|
16542
|
+
onClick: () => setRunId((n) => n + 1),
|
|
16543
|
+
className: "ms-auto inline-flex items-center gap-1.5 rounded-md border border-white/12 bg-white/[0.04] px-2.5 py-1 font-mono text-[11px] text-muted-foreground hover:text-foreground hover:bg-white/[0.08] transition-colors",
|
|
16544
|
+
"aria-label": "Replay the Claude Code session",
|
|
16545
|
+
children: [
|
|
16546
|
+
/* @__PURE__ */ jsx102(RotateCcw4, { size: 12 }),
|
|
16547
|
+
" Replay"
|
|
16548
|
+
]
|
|
16549
|
+
}
|
|
16550
|
+
)
|
|
16551
|
+
] }),
|
|
16552
|
+
/* @__PURE__ */ jsxs90("div", { ref: scrollRef, className: "p-5 font-mono text-[12.5px] sm:text-[13px] leading-[1.9] overflow-auto", style: { height }, children: [
|
|
16553
|
+
lines,
|
|
16554
|
+
showEnd && endSlot ? /* @__PURE__ */ jsx102("div", { className: "mt-4 pt-4 border-t border-white/10", children: endSlot }) : null
|
|
16555
|
+
] })
|
|
16556
|
+
] });
|
|
16557
|
+
}
|
|
16558
|
+
ClaudeSession.displayName = "ClaudeSession";
|
|
16559
|
+
|
|
16560
|
+
// src/components/marketing/BrowserFrame.tsx
|
|
16561
|
+
import { Lock as Lock4 } from "lucide-react";
|
|
16562
|
+
import { jsx as jsx103, jsxs as jsxs91 } from "react/jsx-runtime";
|
|
16563
|
+
function BrowserFrame({ url = "localhost:8080", children, className }) {
|
|
16564
|
+
return /* @__PURE__ */ jsxs91("div", { className: cn("rounded-2xl border border-border overflow-hidden bg-[#0b0f13] shadow-2xl", className), children: [
|
|
16565
|
+
/* @__PURE__ */ jsxs91("div", { className: "flex items-center gap-2 px-3 py-2.5 border-b border-border bg-white/[0.03]", children: [
|
|
16566
|
+
/* @__PURE__ */ jsx103("span", { className: "w-3 h-3 rounded-full bg-[#ff5f57]" }),
|
|
16567
|
+
/* @__PURE__ */ jsx103("span", { className: "w-3 h-3 rounded-full bg-[#febc2e]" }),
|
|
16568
|
+
/* @__PURE__ */ jsx103("span", { className: "w-3 h-3 rounded-full bg-[#28c840]" }),
|
|
16569
|
+
/* @__PURE__ */ jsxs91("div", { className: "ms-2 flex flex-1 items-center gap-1.5 rounded-md bg-black/30 px-2.5 py-1 min-w-0", children: [
|
|
16570
|
+
/* @__PURE__ */ jsx103(Lock4, { size: 11, className: "text-muted-foreground shrink-0" }),
|
|
16571
|
+
/* @__PURE__ */ jsx103("span", { className: "truncate font-mono text-[11px] text-muted-foreground", children: url })
|
|
16572
|
+
] })
|
|
16573
|
+
] }),
|
|
16574
|
+
/* @__PURE__ */ jsx103("div", { children })
|
|
16575
|
+
] });
|
|
16576
|
+
}
|
|
16577
|
+
BrowserFrame.displayName = "BrowserFrame";
|
|
16578
|
+
|
|
16579
|
+
// src/components/marketing/MascotMark.tsx
|
|
16580
|
+
import * as React34 from "react";
|
|
16581
|
+
import { jsx as jsx104, jsxs as jsxs92 } from "react/jsx-runtime";
|
|
16383
16582
|
var EYES = [
|
|
16384
16583
|
{ x: 0.405, y: 0.45 },
|
|
16385
16584
|
{ x: 0.595, y: 0.45 }
|
|
@@ -16392,10 +16591,10 @@ var KEYFRAMES = `
|
|
|
16392
16591
|
.tg-mascot { will-change: transform; animation: tgMascotFloat 6s ease-in-out infinite; }
|
|
16393
16592
|
@media (prefers-reduced-motion: reduce) { .tg-mascot { animation: none !important; } }`;
|
|
16394
16593
|
function MascotMark({ src = "/togo-mark.svg", alt = "ToGO", className }) {
|
|
16395
|
-
const ref =
|
|
16396
|
-
const [active, setActive] =
|
|
16397
|
-
const [look, setLook] =
|
|
16398
|
-
|
|
16594
|
+
const ref = React34.useRef(null);
|
|
16595
|
+
const [active, setActive] = React34.useState(false);
|
|
16596
|
+
const [look, setLook] = React34.useState({ dx: 0, dy: 0 });
|
|
16597
|
+
React34.useEffect(() => {
|
|
16399
16598
|
if (typeof window === "undefined" || !window.matchMedia) return;
|
|
16400
16599
|
if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
|
|
16401
16600
|
if (!window.matchMedia("(hover: hover) and (pointer: fine)").matches) return;
|
|
@@ -16424,9 +16623,9 @@ function MascotMark({ src = "/togo-mark.svg", alt = "ToGO", className }) {
|
|
|
16424
16623
|
};
|
|
16425
16624
|
}, []);
|
|
16426
16625
|
const tilt = active ? look.dx * 4 : 0;
|
|
16427
|
-
return /* @__PURE__ */
|
|
16428
|
-
/* @__PURE__ */
|
|
16429
|
-
/* @__PURE__ */
|
|
16626
|
+
return /* @__PURE__ */ jsxs92("div", { ref, className: cn("tg-mascot", className), style: { position: "relative", display: "inline-block" }, children: [
|
|
16627
|
+
/* @__PURE__ */ jsx104("style", { children: KEYFRAMES }),
|
|
16628
|
+
/* @__PURE__ */ jsxs92(
|
|
16430
16629
|
"div",
|
|
16431
16630
|
{
|
|
16432
16631
|
style: {
|
|
@@ -16436,8 +16635,8 @@ function MascotMark({ src = "/togo-mark.svg", alt = "ToGO", className }) {
|
|
|
16436
16635
|
transition: "transform .25s ease-out"
|
|
16437
16636
|
},
|
|
16438
16637
|
children: [
|
|
16439
|
-
/* @__PURE__ */
|
|
16440
|
-
active && EYES.map((eye, i) => /* @__PURE__ */
|
|
16638
|
+
/* @__PURE__ */ jsx104("img", { src, alt, draggable: false, style: { display: "block", width: "100%", height: "100%" } }),
|
|
16639
|
+
active && EYES.map((eye, i) => /* @__PURE__ */ jsx104(
|
|
16441
16640
|
"span",
|
|
16442
16641
|
{
|
|
16443
16642
|
"aria-hidden": "true",
|
|
@@ -16452,7 +16651,7 @@ function MascotMark({ src = "/togo-mark.svg", alt = "ToGO", className }) {
|
|
|
16452
16651
|
background: "rgba(255,255,255,.94)",
|
|
16453
16652
|
boxShadow: "inset 0 2px 4px rgba(8,16,40,.28)"
|
|
16454
16653
|
},
|
|
16455
|
-
children: /* @__PURE__ */
|
|
16654
|
+
children: /* @__PURE__ */ jsx104(
|
|
16456
16655
|
"span",
|
|
16457
16656
|
{
|
|
16458
16657
|
style: {
|
|
@@ -16532,6 +16731,7 @@ export {
|
|
|
16532
16731
|
BreadcrumbList,
|
|
16533
16732
|
BreadcrumbPage,
|
|
16534
16733
|
BreadcrumbSeparator,
|
|
16734
|
+
BrowserFrame,
|
|
16535
16735
|
Button,
|
|
16536
16736
|
Calendar,
|
|
16537
16737
|
Callout,
|
|
@@ -16555,6 +16755,7 @@ export {
|
|
|
16555
16755
|
ChartTooltipContent,
|
|
16556
16756
|
ChatThread_default as ChatThread,
|
|
16557
16757
|
Checkbox,
|
|
16758
|
+
ClaudeSession,
|
|
16558
16759
|
CodeBlock,
|
|
16559
16760
|
CodeShowcase,
|
|
16560
16761
|
Collapsible,
|