@brokr/sdk 1.0.0 → 2.1.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/account.js +34 -0
- package/dist/account.mjs +7 -0
- package/dist/auth.js +628 -114
- package/dist/auth.mjs +611 -111
- package/dist/chat.js +34 -0
- package/dist/chat.mjs +7 -0
- package/dist/events.js +64 -0
- package/dist/events.mjs +37 -0
- package/dist/feature.js +6304 -0
- package/dist/feature.mjs +6278 -0
- package/dist/files.js +428 -0
- package/dist/files.mjs +408 -0
- package/dist/index.d.ts +18 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4069 -454
- package/dist/index.mjs +4040 -448
- package/dist/logs.js +148 -0
- package/dist/logs.mjs +124 -0
- package/dist/management.js +14 -13
- package/dist/management.mjs +14 -13
- package/dist/next.js +2725 -0
- package/dist/next.mjs +2710 -0
- package/dist/notifications.js +140 -0
- package/dist/notifications.mjs +110 -0
- package/dist/payments.js +32 -0
- package/dist/payments.mjs +7 -0
- package/dist/react-notifications.js +299 -0
- package/dist/react-notifications.mjs +267 -0
- package/dist/react-styles.js +2756 -0
- package/dist/react-styles.mjs +2720 -0
- package/dist/react-theme.js +4196 -0
- package/dist/react-theme.mjs +4172 -0
- package/dist/react.js +8591 -209
- package/dist/react.mjs +8571 -183
- package/dist/runtime.js +2113 -385
- package/dist/runtime.mjs +2085 -397
- package/dist/src/account/config.d.ts +42 -0
- package/dist/src/account/config.d.ts.map +1 -0
- package/dist/src/account/index.d.ts +3 -0
- package/dist/src/account/index.d.ts.map +1 -0
- package/dist/src/ai/client.d.ts +58 -0
- package/dist/src/ai/client.d.ts.map +1 -0
- package/dist/src/ai/conversation-title.d.ts +13 -0
- package/dist/src/ai/conversation-title.d.ts.map +1 -0
- package/dist/src/ai/types.d.ts +81 -0
- package/dist/src/ai/types.d.ts.map +1 -0
- package/dist/src/auth.d.ts +133 -20
- package/dist/src/auth.d.ts.map +1 -1
- package/dist/src/chat/config.d.ts +61 -0
- package/dist/src/chat/config.d.ts.map +1 -0
- package/dist/src/chat/index.d.ts +3 -0
- package/dist/src/chat/index.d.ts.map +1 -0
- package/dist/src/chat/sse-parser.d.ts +44 -0
- package/dist/src/chat/sse-parser.d.ts.map +1 -0
- package/dist/src/dev-console.d.ts +18 -0
- package/dist/src/dev-console.d.ts.map +1 -0
- package/dist/src/email/client.d.ts +33 -0
- package/dist/src/email/client.d.ts.map +1 -0
- package/dist/src/email/templates.d.ts +15 -0
- package/dist/src/email/templates.d.ts.map +1 -0
- package/dist/src/email/types.d.ts +35 -0
- package/dist/src/email/types.d.ts.map +1 -0
- package/dist/src/env-detect.d.ts +25 -0
- package/dist/src/env-detect.d.ts.map +1 -0
- package/dist/src/errors.d.ts +53 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/events/client.d.ts +25 -0
- package/dist/src/events/client.d.ts.map +1 -0
- package/dist/src/events/index.d.ts +9 -0
- package/dist/src/events/index.d.ts.map +1 -0
- package/dist/src/events/types.d.ts +10 -0
- package/dist/src/events/types.d.ts.map +1 -0
- package/dist/src/feature/canonical.d.ts +33 -0
- package/dist/src/feature/canonical.d.ts.map +1 -0
- package/dist/src/feature/create-feature.d.ts +33 -0
- package/dist/src/feature/create-feature.d.ts.map +1 -0
- package/dist/src/feature/db.d.ts +16 -0
- package/dist/src/feature/db.d.ts.map +1 -0
- package/dist/src/feature/handlers.d.ts +28 -0
- package/dist/src/feature/handlers.d.ts.map +1 -0
- package/dist/src/feature/index.d.ts +21 -0
- package/dist/src/feature/index.d.ts.map +1 -0
- package/dist/src/feature/manifest.d.ts +173 -0
- package/dist/src/feature/manifest.d.ts.map +1 -0
- package/dist/src/feature/mapping.d.ts +18 -0
- package/dist/src/feature/mapping.d.ts.map +1 -0
- package/dist/src/feature/runtime.d.ts +45 -0
- package/dist/src/feature/runtime.d.ts.map +1 -0
- package/dist/src/feature/types.d.ts +65 -0
- package/dist/src/feature/types.d.ts.map +1 -0
- package/dist/src/files/client.d.ts +28 -0
- package/dist/src/files/client.d.ts.map +1 -0
- package/dist/src/files/types.d.ts +28 -0
- package/dist/src/files/types.d.ts.map +1 -0
- package/dist/src/fix-registry.d.ts +8 -0
- package/dist/src/fix-registry.d.ts.map +1 -0
- package/dist/src/gateway.d.ts +32 -0
- package/dist/src/gateway.d.ts.map +1 -0
- package/dist/src/logs/capture.d.ts +56 -0
- package/dist/src/logs/capture.d.ts.map +1 -0
- package/dist/src/logs/index.d.ts +2 -0
- package/dist/src/logs/index.d.ts.map +1 -0
- package/dist/src/management.d.ts +1 -1
- package/dist/src/management.d.ts.map +1 -1
- package/dist/src/models.d.ts +32 -0
- package/dist/src/models.d.ts.map +1 -0
- package/dist/src/next/auth.d.ts +54 -0
- package/dist/src/next/auth.d.ts.map +1 -0
- package/dist/src/next/chat.d.ts +31 -0
- package/dist/src/next/chat.d.ts.map +1 -0
- package/dist/src/next/index.d.ts +14 -0
- package/dist/src/next/index.d.ts.map +1 -0
- package/dist/src/next/notifications.d.ts +67 -0
- package/dist/src/next/notifications.d.ts.map +1 -0
- package/dist/src/notifications/built-ins.d.ts +9 -0
- package/dist/src/notifications/built-ins.d.ts.map +1 -0
- package/dist/src/notifications/client.d.ts +38 -0
- package/dist/src/notifications/client.d.ts.map +1 -0
- package/dist/src/notifications/config.d.ts +71 -0
- package/dist/src/notifications/config.d.ts.map +1 -0
- package/dist/src/notifications/index.d.ts +6 -0
- package/dist/src/notifications/index.d.ts.map +1 -0
- package/dist/src/notifications/registry.d.ts +67 -0
- package/dist/src/notifications/registry.d.ts.map +1 -0
- package/dist/src/notifications/types.d.ts +48 -0
- package/dist/src/notifications/types.d.ts.map +1 -0
- package/dist/src/payments/client.d.ts +64 -0
- package/dist/src/payments/client.d.ts.map +1 -0
- package/dist/src/payments/config.d.ts +46 -0
- package/dist/src/payments/config.d.ts.map +1 -0
- package/dist/src/payments/entitlements.d.ts +48 -0
- package/dist/src/payments/entitlements.d.ts.map +1 -0
- package/dist/src/payments/types.d.ts +135 -0
- package/dist/src/payments/types.d.ts.map +1 -0
- package/dist/src/react/BrokrErrorBoundary.d.ts +23 -0
- package/dist/src/react/BrokrErrorBoundary.d.ts.map +1 -0
- package/dist/src/react/account/AccountPanel.d.ts +12 -0
- package/dist/src/react/account/AccountPanel.d.ts.map +1 -0
- package/dist/src/react/account/Avatar.d.ts +11 -0
- package/dist/src/react/account/Avatar.d.ts.map +1 -0
- package/dist/src/react/account/ProfilePhotoButton.d.ts +7 -0
- package/dist/src/react/account/ProfilePhotoButton.d.ts.map +1 -0
- package/dist/src/react/account/UserButton.d.ts +7 -0
- package/dist/src/react/account/UserButton.d.ts.map +1 -0
- package/dist/src/react/auth-pages/AuthPageShell.d.ts +9 -0
- package/dist/src/react/auth-pages/AuthPageShell.d.ts.map +1 -0
- package/dist/src/react/auth-pages/SignInPage.d.ts +9 -0
- package/dist/src/react/auth-pages/SignInPage.d.ts.map +1 -0
- package/dist/src/react/auth-pages/SignUpPage.d.ts +8 -0
- package/dist/src/react/auth-pages/SignUpPage.d.ts.map +1 -0
- package/dist/src/react/auth.d.ts +1 -49
- package/dist/src/react/auth.d.ts.map +1 -1
- package/dist/src/react/chat/AIChat.d.ts +4 -0
- package/dist/src/react/chat/AIChat.d.ts.map +1 -0
- package/dist/src/react/chat/ChatContext.d.ts +76 -0
- package/dist/src/react/chat/ChatContext.d.ts.map +1 -0
- package/dist/src/react/chat/ChatInput.d.ts +3 -0
- package/dist/src/react/chat/ChatInput.d.ts.map +1 -0
- package/dist/src/react/chat/MarkdownRenderer.d.ts +5 -0
- package/dist/src/react/chat/MarkdownRenderer.d.ts.map +1 -0
- package/dist/src/react/chat/MessageBubble.d.ts +14 -0
- package/dist/src/react/chat/MessageBubble.d.ts.map +1 -0
- package/dist/src/react/chat/MessagePane.d.ts +10 -0
- package/dist/src/react/chat/MessagePane.d.ts.map +1 -0
- package/dist/src/react/chat/ModelSelector.d.ts +13 -0
- package/dist/src/react/chat/ModelSelector.d.ts.map +1 -0
- package/dist/src/react/chat/ThreadSidebar.d.ts +3 -0
- package/dist/src/react/chat/ThreadSidebar.d.ts.map +1 -0
- package/dist/src/react/chat/index.d.ts +5 -0
- package/dist/src/react/chat/index.d.ts.map +1 -0
- package/dist/src/react/chat/token-limit.d.ts +14 -0
- package/dist/src/react/chat/token-limit.d.ts.map +1 -0
- package/dist/src/react/chat/types.d.ts +65 -0
- package/dist/src/react/chat/types.d.ts.map +1 -0
- package/dist/src/react/chat/useChat.d.ts +57 -0
- package/dist/src/react/chat/useChat.d.ts.map +1 -0
- package/dist/src/react/composites/FabAI.d.ts +15 -0
- package/dist/src/react/composites/FabAI.d.ts.map +1 -0
- package/dist/src/react/composites/FeedbackWidget.d.ts +10 -0
- package/dist/src/react/composites/FeedbackWidget.d.ts.map +1 -0
- package/dist/src/react/composites/SmartUpload.d.ts +12 -0
- package/dist/src/react/composites/SmartUpload.d.ts.map +1 -0
- package/dist/src/react/config.d.ts +23 -0
- package/dist/src/react/config.d.ts.map +1 -0
- package/dist/src/react/context.d.ts +4 -0
- package/dist/src/react/context.d.ts.map +1 -0
- package/dist/src/react/css/account.d.ts +2 -0
- package/dist/src/react/css/account.d.ts.map +1 -0
- package/dist/src/react/css/animations.d.ts +2 -0
- package/dist/src/react/css/animations.d.ts.map +1 -0
- package/dist/src/react/css/auth.d.ts +2 -0
- package/dist/src/react/css/auth.d.ts.map +1 -0
- package/dist/src/react/css/chat-extras.d.ts +2 -0
- package/dist/src/react/css/chat-extras.d.ts.map +1 -0
- package/dist/src/react/css/chat.d.ts +2 -0
- package/dist/src/react/css/chat.d.ts.map +1 -0
- package/dist/src/react/css/composites.d.ts +2 -0
- package/dist/src/react/css/composites.d.ts.map +1 -0
- package/dist/src/react/css/gates.d.ts +2 -0
- package/dist/src/react/css/gates.d.ts.map +1 -0
- package/dist/src/react/css/index.d.ts +3 -0
- package/dist/src/react/css/index.d.ts.map +1 -0
- package/dist/src/react/css/markdown.d.ts +2 -0
- package/dist/src/react/css/markdown.d.ts.map +1 -0
- package/dist/src/react/css/notifications.d.ts +2 -0
- package/dist/src/react/css/notifications.d.ts.map +1 -0
- package/dist/src/react/css/primitives.d.ts +2 -0
- package/dist/src/react/css/primitives.d.ts.map +1 -0
- package/dist/src/react/css/reset.d.ts +2 -0
- package/dist/src/react/css/reset.d.ts.map +1 -0
- package/dist/src/react/css/responsive.d.ts +2 -0
- package/dist/src/react/css/responsive.d.ts.map +1 -0
- package/dist/src/react/css/skeleton.d.ts +2 -0
- package/dist/src/react/css/skeleton.d.ts.map +1 -0
- package/dist/src/react/css/tokens.d.ts +2 -0
- package/dist/src/react/css/tokens.d.ts.map +1 -0
- package/dist/src/react/gates/AuthWall.d.ts +7 -0
- package/dist/src/react/gates/AuthWall.d.ts.map +1 -0
- package/dist/src/react/gates/BillingBoundary.d.ts +4 -0
- package/dist/src/react/gates/BillingBoundary.d.ts.map +1 -0
- package/dist/src/react/gates/Gate.d.ts +9 -0
- package/dist/src/react/gates/Gate.d.ts.map +1 -0
- package/dist/src/react/gates/RequirePlan.d.ts +4 -0
- package/dist/src/react/gates/RequirePlan.d.ts.map +1 -0
- package/dist/src/react/gates/RequireUser.d.ts +4 -0
- package/dist/src/react/gates/RequireUser.d.ts.map +1 -0
- package/dist/src/react/gates/UsageGate.d.ts +4 -0
- package/dist/src/react/gates/UsageGate.d.ts.map +1 -0
- package/dist/src/react/helpers.d.ts +7 -0
- package/dist/src/react/helpers.d.ts.map +1 -0
- package/dist/src/react/hooks/use-theme.d.ts +15 -0
- package/dist/src/react/hooks/use-theme.d.ts.map +1 -0
- package/dist/src/react/hooks/use-user.d.ts +12 -0
- package/dist/src/react/hooks/use-user.d.ts.map +1 -0
- package/dist/src/react/icons.d.ts +26 -0
- package/dist/src/react/icons.d.ts.map +1 -0
- package/dist/src/react/index.d.ts +48 -0
- package/dist/src/react/index.d.ts.map +1 -0
- package/dist/src/react/notifications/NotificationBell.d.ts +7 -0
- package/dist/src/react/notifications/NotificationBell.d.ts.map +1 -0
- package/dist/src/react/notifications/NotificationList.d.ts +7 -0
- package/dist/src/react/notifications/NotificationList.d.ts.map +1 -0
- package/dist/src/react/notifications/Toast.d.ts +13 -0
- package/dist/src/react/notifications/Toast.d.ts.map +1 -0
- package/dist/src/react/notifications/index.d.ts +8 -0
- package/dist/src/react/notifications/index.d.ts.map +1 -0
- package/dist/src/react/notifications/provider.d.ts +14 -0
- package/dist/src/react/notifications/provider.d.ts.map +1 -0
- package/dist/src/react/notifications/use-notifications.d.ts +24 -0
- package/dist/src/react/notifications/use-notifications.d.ts.map +1 -0
- package/dist/src/react/payments/AutoReloadToggle.d.ts +6 -0
- package/dist/src/react/payments/AutoReloadToggle.d.ts.map +1 -0
- package/dist/src/react/payments/Balance.d.ts +8 -0
- package/dist/src/react/payments/Balance.d.ts.map +1 -0
- package/dist/src/react/payments/CancelSubscription.d.ts +6 -0
- package/dist/src/react/payments/CancelSubscription.d.ts.map +1 -0
- package/dist/src/react/payments/CheckoutButton.d.ts +7 -0
- package/dist/src/react/payments/CheckoutButton.d.ts.map +1 -0
- package/dist/src/react/payments/CustomerPortalButton.d.ts +6 -0
- package/dist/src/react/payments/CustomerPortalButton.d.ts.map +1 -0
- package/dist/src/react/payments/FeatureMeter.d.ts +6 -0
- package/dist/src/react/payments/FeatureMeter.d.ts.map +1 -0
- package/dist/src/react/payments/Plans.d.ts +8 -0
- package/dist/src/react/payments/Plans.d.ts.map +1 -0
- package/dist/src/react/payments/TopUpButton.d.ts +8 -0
- package/dist/src/react/payments/TopUpButton.d.ts.map +1 -0
- package/dist/src/react/payments/UpdateBilling.d.ts +3 -0
- package/dist/src/react/payments/UpdateBilling.d.ts.map +1 -0
- package/dist/src/react/payments/UpgradePrompt.d.ts +8 -0
- package/dist/src/react/payments/UpgradePrompt.d.ts.map +1 -0
- package/dist/src/react/primitives/Skeleton.d.ts +15 -0
- package/dist/src/react/primitives/Skeleton.d.ts.map +1 -0
- package/dist/src/react/provider.d.ts +21 -0
- package/dist/src/react/provider.d.ts.map +1 -0
- package/dist/src/react/request.d.ts +2 -0
- package/dist/src/react/request.d.ts.map +1 -0
- package/dist/src/react/styles-entry.d.ts +4 -0
- package/dist/src/react/styles-entry.d.ts.map +1 -0
- package/dist/src/react/styles.d.ts +2 -0
- package/dist/src/react/styles.d.ts.map +1 -0
- package/dist/src/react/theme-entry.d.ts +3 -0
- package/dist/src/react/theme-entry.d.ts.map +1 -0
- package/dist/src/react/theme.d.ts +6 -0
- package/dist/src/react/theme.d.ts.map +1 -0
- package/dist/src/react/types.d.ts +191 -0
- package/dist/src/react/types.d.ts.map +1 -0
- package/dist/src/react/use-brokr-theme.d.ts +6 -0
- package/dist/src/react/use-brokr-theme.d.ts.map +1 -0
- package/dist/src/runtime.d.ts +69 -180
- package/dist/src/runtime.d.ts.map +1 -1
- package/dist/src/storage/client.d.ts +113 -0
- package/dist/src/storage/client.d.ts.map +1 -0
- package/dist/src/storage/types.d.ts +60 -0
- package/dist/src/storage/types.d.ts.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +70 -9
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { AIChatMessage, AIChatContext, AIChatCommand, Thread } from './types';
|
|
2
|
+
export interface ChatState {
|
|
3
|
+
displayMessages: AIChatMessage[];
|
|
4
|
+
visibleMessages: AIChatMessage[];
|
|
5
|
+
isSubmitting: boolean;
|
|
6
|
+
error: string | null;
|
|
7
|
+
activeId: string | null;
|
|
8
|
+
activeThread: Thread | null;
|
|
9
|
+
renderedTitle: string;
|
|
10
|
+
isTitleLoading: boolean;
|
|
11
|
+
activeModel: string;
|
|
12
|
+
activeProvider: {
|
|
13
|
+
id: string;
|
|
14
|
+
label: string;
|
|
15
|
+
model: string;
|
|
16
|
+
logo: string;
|
|
17
|
+
free: boolean;
|
|
18
|
+
} | undefined;
|
|
19
|
+
selectedModel: string;
|
|
20
|
+
setSelectedModel: (model: string) => void;
|
|
21
|
+
availableProviders: Array<{
|
|
22
|
+
id: string;
|
|
23
|
+
label: string;
|
|
24
|
+
model: string;
|
|
25
|
+
logo: string;
|
|
26
|
+
free: boolean;
|
|
27
|
+
}>;
|
|
28
|
+
sendMessage: (rawText?: string) => Promise<void>;
|
|
29
|
+
startNewChat: () => void;
|
|
30
|
+
selectThread: (id: string | null) => void;
|
|
31
|
+
deleteThread: (threadId: string) => Promise<void>;
|
|
32
|
+
handleCopy: (content: string) => void;
|
|
33
|
+
renamingId: string | null;
|
|
34
|
+
renameValue: string;
|
|
35
|
+
setRenameValue: (v: string) => void;
|
|
36
|
+
startRename: (threadId: string) => void;
|
|
37
|
+
submitRename: () => Promise<void>;
|
|
38
|
+
displaySidebarItems: Array<{
|
|
39
|
+
id: string;
|
|
40
|
+
title: string;
|
|
41
|
+
}>;
|
|
42
|
+
threadsLoading: boolean;
|
|
43
|
+
sidebarOpen: boolean;
|
|
44
|
+
setSidebarOpen: (open: boolean) => void;
|
|
45
|
+
closeSidebar: () => void;
|
|
46
|
+
selectThreadAndCloseSidebar: (id: string | null) => void;
|
|
47
|
+
threadMenuOpenId: string | null;
|
|
48
|
+
setThreadMenuOpenId: (id: string | null) => void;
|
|
49
|
+
hasMoreMessages: boolean;
|
|
50
|
+
loadingOlder: boolean;
|
|
51
|
+
memHasMore: boolean;
|
|
52
|
+
isPersist: boolean;
|
|
53
|
+
scrollContainerRef: React.MutableRefObject<HTMLDivElement | null>;
|
|
54
|
+
sentinelRef: React.MutableRefObject<HTMLDivElement | null>;
|
|
55
|
+
bottomRef: React.MutableRefObject<HTMLDivElement | null>;
|
|
56
|
+
threadMenuRef: React.MutableRefObject<HTMLDivElement | null>;
|
|
57
|
+
textareaRef: React.MutableRefObject<HTMLTextAreaElement | null>;
|
|
58
|
+
input: string;
|
|
59
|
+
setInput: (v: string) => void;
|
|
60
|
+
chatContext: AIChatContext;
|
|
61
|
+
headerCommands: AIChatCommand[];
|
|
62
|
+
composerCommands: AIChatCommand[];
|
|
63
|
+
threadMenuCommands: AIChatCommand[];
|
|
64
|
+
checkout: (params: {
|
|
65
|
+
plan: string;
|
|
66
|
+
}) => Promise<string>;
|
|
67
|
+
user: {
|
|
68
|
+
id?: string;
|
|
69
|
+
email?: string;
|
|
70
|
+
name?: string;
|
|
71
|
+
image?: string;
|
|
72
|
+
} | null;
|
|
73
|
+
}
|
|
74
|
+
export declare const ChatProvider: import("react").Provider<ChatState | null>;
|
|
75
|
+
export declare function useChatState(): ChatState;
|
|
76
|
+
//# sourceMappingURL=ChatContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatContext.d.ts","sourceRoot":"","sources":["../../../../src/react/chat/ChatContext.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatInput.d.ts","sourceRoot":"","sources":["../../../../src/react/chat/ChatInput.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAiC,MAAM,OAAO,CAAC;AActD,wBAAgB,SAAS,sBAsExB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarkdownRenderer.d.ts","sourceRoot":"","sources":["../../../../src/react/chat/MarkdownRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAsOpD,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,qBAQhE"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { AIChatMessage } from './types';
|
|
3
|
+
interface MessageBubbleProps {
|
|
4
|
+
message: AIChatMessage;
|
|
5
|
+
isTyping: boolean;
|
|
6
|
+
user: {
|
|
7
|
+
email?: string;
|
|
8
|
+
name?: string;
|
|
9
|
+
image?: string;
|
|
10
|
+
} | null;
|
|
11
|
+
}
|
|
12
|
+
export declare function MessageBubble({ message, isTyping, user }: MessageBubbleProps): React.JSX.Element;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=MessageBubble.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageBubble.d.ts","sourceRoot":"","sources":["../../../../src/react/chat/MessageBubble.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAK3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,UAAU,kBAAkB;IAC1B,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAChE;AAED,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,kBAAkB,qBA0D5E"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
interface MessagePaneProps {
|
|
3
|
+
starterPrompts: string[];
|
|
4
|
+
emptyTitle: string;
|
|
5
|
+
emptyCopy: string;
|
|
6
|
+
subtitle?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function MessagePane({ starterPrompts, emptyTitle, emptyCopy, subtitle }: MessagePaneProps): React.JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=MessagePane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessagePane.d.ts","sourceRoot":"","sources":["../../../../src/react/chat/MessagePane.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAepD,UAAU,gBAAgB;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,gBAAgB,qBA0EhG"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { providers } from '../../models';
|
|
3
|
+
interface ModelSelectorProps {
|
|
4
|
+
activeModel: string;
|
|
5
|
+
setSelectedModel: (model: string) => void;
|
|
6
|
+
availableProviders: typeof providers;
|
|
7
|
+
checkout: (params: {
|
|
8
|
+
plan: string;
|
|
9
|
+
}) => Promise<string>;
|
|
10
|
+
}
|
|
11
|
+
export declare function ModelSelector({ activeModel, setSelectedModel, availableProviders, checkout, }: ModelSelectorProps): React.JSX.Element;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=ModelSelector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModelSelector.d.ts","sourceRoot":"","sources":["../../../../src/react/chat/ModelSelector.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAEjF,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AA2CzC,UAAU,kBAAkB;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,kBAAkB,EAAE,OAAO,SAAS,CAAC;IACrC,QAAQ,EAAE,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACzD;AAED,wBAAgB,aAAa,CAAC,EAC5B,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,QAAQ,GACT,EAAE,kBAAkB,qBAoEpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ThreadSidebar.d.ts","sourceRoot":"","sources":["../../../../src/react/chat/ThreadSidebar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAmBpD,wBAAgB,aAAa,sBA4F5B"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { AIChat } from './AIChat';
|
|
2
|
+
export type { AIChatProps, Thread, AIChatMessage, AIChatCommand, AIChatContext } from './types';
|
|
3
|
+
export { useChat } from './useChat';
|
|
4
|
+
export type { UseChatConfig, UseChatReturn } from './useChat';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/react/chat/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAChG,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token budget trimming for AI chat context windows.
|
|
3
|
+
*
|
|
4
|
+
* Estimates tokens at ~4 chars/token and trims oldest messages
|
|
5
|
+
* while preserving the system prompt and the latest user message.
|
|
6
|
+
*/
|
|
7
|
+
import type { ChatMessage } from '../../ai/types';
|
|
8
|
+
/**
|
|
9
|
+
* Trim messages to fit within a token budget.
|
|
10
|
+
* Keeps: system prompt (if any) + latest user message.
|
|
11
|
+
* Drops: oldest non-system messages first.
|
|
12
|
+
*/
|
|
13
|
+
export declare function trimToTokenBudget(messages: ChatMessage[], budget?: number): ChatMessage[];
|
|
14
|
+
//# sourceMappingURL=token-limit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-limit.d.ts","sourceRoot":"","sources":["../../../../src/react/chat/token-limit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AASlD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,WAAW,EAAE,EACvB,MAAM,GAAE,MAAe,GACtB,WAAW,EAAE,CAqCf"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { BrokrUser } from '../types';
|
|
2
|
+
export interface Thread {
|
|
3
|
+
id: string;
|
|
4
|
+
surface: string;
|
|
5
|
+
subject: string | null;
|
|
6
|
+
title: string;
|
|
7
|
+
createdAt: string;
|
|
8
|
+
updatedAt: string;
|
|
9
|
+
messageCount: number;
|
|
10
|
+
}
|
|
11
|
+
export interface AIChatMessage {
|
|
12
|
+
id: string;
|
|
13
|
+
role: 'user' | 'assistant';
|
|
14
|
+
content: string;
|
|
15
|
+
/** Model that generated this message (assistant messages only). */
|
|
16
|
+
model?: string;
|
|
17
|
+
/** Persistence status — allows the UI to show spinners for in-flight messages. */
|
|
18
|
+
status?: 'pending' | 'streaming' | 'complete' | 'error';
|
|
19
|
+
/** AI provider identifier (e.g. 'deepseek', 'openai'). */
|
|
20
|
+
provider?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface AIChatContext {
|
|
23
|
+
thread: Thread | null;
|
|
24
|
+
messages: AIChatMessage[];
|
|
25
|
+
user: BrokrUser | null;
|
|
26
|
+
sendMessage: (content: string) => Promise<void>;
|
|
27
|
+
newThread: () => void;
|
|
28
|
+
setThread: (threadId: string | null) => void;
|
|
29
|
+
}
|
|
30
|
+
export interface AIChatCommand {
|
|
31
|
+
id: string;
|
|
32
|
+
text: string;
|
|
33
|
+
location: 'threadMenu' | 'header' | 'composer';
|
|
34
|
+
show?: (ctx: AIChatContext) => boolean;
|
|
35
|
+
run: (ctx: AIChatContext) => void | Promise<void>;
|
|
36
|
+
}
|
|
37
|
+
export interface AIChatProps {
|
|
38
|
+
endpoint?: string;
|
|
39
|
+
prompt?: string;
|
|
40
|
+
starterPrompts?: string[];
|
|
41
|
+
emptyTitle?: string;
|
|
42
|
+
emptyCopy?: string;
|
|
43
|
+
title?: string;
|
|
44
|
+
subtitle?: string;
|
|
45
|
+
model?: string;
|
|
46
|
+
modelSelector?: boolean;
|
|
47
|
+
variant?: number;
|
|
48
|
+
sidebar?: boolean;
|
|
49
|
+
threadMenu?: boolean;
|
|
50
|
+
autoTitle?: boolean;
|
|
51
|
+
persist?: boolean;
|
|
52
|
+
surface?: string;
|
|
53
|
+
subject?: string;
|
|
54
|
+
commands?: AIChatCommand[];
|
|
55
|
+
threads?: Thread[];
|
|
56
|
+
activeThreadId?: string | null;
|
|
57
|
+
onThreadSelect?: (threadId: string | null) => void;
|
|
58
|
+
onThreadCreate?: (thread: Thread) => void;
|
|
59
|
+
onThreadDelete?: (threadId: string) => void;
|
|
60
|
+
messages?: AIChatMessage[];
|
|
61
|
+
onSendMessage?: (content: string, threadId: string | null) => Promise<string>;
|
|
62
|
+
onMessage?: (msg: AIChatMessage) => void;
|
|
63
|
+
onThreadChange?: (thread: Thread | null) => void;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/react/chat/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { Thread, AIChatMessage } from './types';
|
|
2
|
+
export interface UseChatConfig {
|
|
3
|
+
endpoint: string;
|
|
4
|
+
prompt?: string;
|
|
5
|
+
model: string;
|
|
6
|
+
persist: boolean;
|
|
7
|
+
surface: string;
|
|
8
|
+
subject?: string;
|
|
9
|
+
autoTitle: boolean;
|
|
10
|
+
isControlled: boolean;
|
|
11
|
+
threadsProp?: Thread[];
|
|
12
|
+
activeThreadIdProp?: string | null;
|
|
13
|
+
messagesProp?: AIChatMessage[];
|
|
14
|
+
onThreadSelect?: (threadId: string | null) => void;
|
|
15
|
+
onThreadCreate?: (thread: Thread) => void;
|
|
16
|
+
onThreadDelete?: (threadId: string) => void;
|
|
17
|
+
onSendMessage?: (content: string, threadId: string | null) => Promise<string>;
|
|
18
|
+
onMessage?: (msg: AIChatMessage) => void;
|
|
19
|
+
onThreadChange?: (thread: Thread | null) => void;
|
|
20
|
+
userId?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface UseChatReturn {
|
|
23
|
+
displayMessages: AIChatMessage[];
|
|
24
|
+
isSubmitting: boolean;
|
|
25
|
+
error: string | null;
|
|
26
|
+
activeId: string | null;
|
|
27
|
+
activeThread: Thread | null;
|
|
28
|
+
displaySidebarItems: Array<{
|
|
29
|
+
id: string;
|
|
30
|
+
title: string;
|
|
31
|
+
}>;
|
|
32
|
+
threadsLoading: boolean;
|
|
33
|
+
serverThreads: Thread[];
|
|
34
|
+
hasMoreMessages: boolean;
|
|
35
|
+
loadingOlder: boolean;
|
|
36
|
+
sendMessage: (rawText?: string, inputRef?: string) => Promise<void>;
|
|
37
|
+
startNewChat: () => void;
|
|
38
|
+
selectThread: (id: string | null) => void;
|
|
39
|
+
deleteThread: (threadId: string) => Promise<void>;
|
|
40
|
+
renamingId: string | null;
|
|
41
|
+
renameValue: string;
|
|
42
|
+
setRenameValue: (v: string) => void;
|
|
43
|
+
startRename: (threadId: string) => void;
|
|
44
|
+
submitRename: () => Promise<void>;
|
|
45
|
+
input: string;
|
|
46
|
+
setInput: (v: string) => void;
|
|
47
|
+
scrollContainerRef: React.MutableRefObject<HTMLDivElement | null>;
|
|
48
|
+
sentinelRef: React.MutableRefObject<HTMLDivElement | null>;
|
|
49
|
+
bottomRef: React.MutableRefObject<HTMLDivElement | null>;
|
|
50
|
+
textareaRef: React.MutableRefObject<HTMLTextAreaElement | null>;
|
|
51
|
+
loadOlderMessages: () => Promise<void>;
|
|
52
|
+
renderedTitle: string;
|
|
53
|
+
isTitleLoading: boolean;
|
|
54
|
+
isPersist: boolean;
|
|
55
|
+
}
|
|
56
|
+
export declare function useChat(config: UseChatConfig): UseChatReturn;
|
|
57
|
+
//# sourceMappingURL=useChat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../../../src/react/chat/useChat.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { ChatMessage } from '../../ai/types';
|
|
3
|
+
export interface FabAIProps {
|
|
4
|
+
model?: string;
|
|
5
|
+
onSendMessage?: (params: {
|
|
6
|
+
messages: ChatMessage[];
|
|
7
|
+
model?: string;
|
|
8
|
+
systemPrompt?: string;
|
|
9
|
+
}) => Promise<string>;
|
|
10
|
+
position?: 'bottom-right' | 'bottom-left';
|
|
11
|
+
starterPrompts?: string[];
|
|
12
|
+
systemPrompt?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function FabAI({ model, onSendMessage, position, starterPrompts, systemPrompt, }: FabAIProps): React.JSX.Element;
|
|
15
|
+
//# sourceMappingURL=FabAI.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FabAI.d.ts","sourceRoot":"","sources":["../../../../src/react/composites/FabAI.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAgBlD,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE;QACvB,QAAQ,EAAE,WAAW,EAAE,CAAC;QACxB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACtB,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC;IAC1C,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAOD,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,aAAa,EACb,QAAyB,EACzB,cAAmB,EACnB,YAAY,GACb,EAAE,UAAU,qBA6JZ"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface FeedbackWidgetProps {
|
|
3
|
+
context?: string;
|
|
4
|
+
onSubmit?: (feedback: {
|
|
5
|
+
rating: 'up' | 'down';
|
|
6
|
+
text?: string;
|
|
7
|
+
}) => void | Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export declare function FeedbackWidget({ context, onSubmit, }: FeedbackWidgetProps): React.JSX.Element;
|
|
10
|
+
//# sourceMappingURL=FeedbackWidget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FeedbackWidget.d.ts","sourceRoot":"","sources":["../../../../src/react/composites/FeedbackWidget.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAIrD,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzF;AAED,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,QAAQ,GACT,EAAE,mBAAmB,qBA+FrB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export interface SmartUploadProps {
|
|
3
|
+
accept?: string;
|
|
4
|
+
maxSize?: number;
|
|
5
|
+
onUpload?: (result: {
|
|
6
|
+
key: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
}) => void;
|
|
9
|
+
purpose?: 'description' | 'text-extraction' | 'general';
|
|
10
|
+
}
|
|
11
|
+
export declare function SmartUpload({ accept, maxSize, onUpload, purpose, }: SmartUploadProps): React.JSX.Element;
|
|
12
|
+
//# sourceMappingURL=SmartUpload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmartUpload.d.ts","sourceRoot":"","sources":["../../../../src/react/composites/SmartUpload.tsx"],"names":[],"mappings":"AAEA,OAAO,KAMN,MAAM,OAAO,CAAC;AAIf,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACnE,OAAO,CAAC,EAAE,aAAa,GAAG,iBAAiB,GAAG,SAAS,CAAC;CACzD;AAOD,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,OAA2B,EAC3B,QAAQ,EACR,OAAmB,GACpB,EAAE,gBAAgB,qBAyIlB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { ChatConfig } from '../chat/config';
|
|
2
|
+
import type { AccountConfig } from '../account/config';
|
|
3
|
+
/**
|
|
4
|
+
* Per-feature config defaults, assembled by BrokrProvider from individual
|
|
5
|
+
* per-feature props (`chat`, `account`, etc.).
|
|
6
|
+
*
|
|
7
|
+
* Components read from this via `useBrokr().config`.
|
|
8
|
+
* Inline props always take precedence over config defaults.
|
|
9
|
+
*/
|
|
10
|
+
export interface BrokrConfig {
|
|
11
|
+
chat?: ChatConfig;
|
|
12
|
+
account?: AccountConfig;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Merge config defaults with inline props.
|
|
16
|
+
* Inline props (non-undefined) always win.
|
|
17
|
+
*
|
|
18
|
+
* `D` is the defaults type (e.g. ChatConfig), `T` is the full props type
|
|
19
|
+
* (e.g. AIChatProps). They don't need to be related — only overlapping
|
|
20
|
+
* keys are merged.
|
|
21
|
+
*/
|
|
22
|
+
export declare function filterDefined<D extends object, T extends object>(defaults: D | undefined, overrides: T): T;
|
|
23
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/react/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMvD;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,MAAM,EAC9D,QAAQ,EAAE,CAAC,GAAG,SAAS,EACvB,SAAS,EAAE,CAAC,GACX,CAAC,CASH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/react/context.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,eAAO,MAAM,YAAY,mDAAgD,CAAC;AAE1E,wBAAgB,QAAQ,IAAI,iBAAiB,CAM5C"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const ACCOUNT_CSS = "\n.brokr-account-trigger {\n align-items: center;\n background: color-mix(in srgb, var(--brokr-surface) 92%, var(--brokr-bg));\n border: 1px solid var(--brokr-muted-border);\n border-radius: calc(var(--brokr-radius-card) + 1px);\n color: var(--brokr-text-primary);\n cursor: pointer;\n display: inline-flex;\n gap: var(--brokr-space-3);\n min-height: 44px;\n padding: 0.4rem 0.55rem 0.4rem 0.45rem;\n}\n\n.brokr-account-trigger[data-display=\"avatar\"] {\n border-radius: 999px;\n gap: 0;\n justify-content: center;\n min-width: 44px;\n padding: 0.35rem;\n}\n\n.brokr-avatar,\n.brokr-avatar-lg {\n align-items: center;\n background: var(--brokr-subtle-fill-strong);\n border-radius: 999px;\n color: var(--brokr-text-primary);\n display: inline-flex;\n font-weight: 700;\n justify-content: center;\n overflow: hidden;\n}\n\n.brokr-avatar { height: 32px; width: 32px; }\n.brokr-avatar-lg { height: 72px; width: 72px; }\n\n.brokr-avatar img,\n.brokr-avatar-lg img {\n display: block;\n height: 100%;\n object-fit: cover;\n width: 100%;\n}\n\n.brokr-popover {\n display: grid;\n gap: var(--brokr-space-3);\n max-height: min(78vh, 760px);\n min-width: 280px;\n overflow: auto;\n padding: var(--brokr-space-3);\n position: absolute;\n right: 0;\n top: calc(100% + 2px);\n width: min(92vw, 320px);\n z-index: var(--brokr-z-popover);\n}\n\n.brokr-popover[data-align=\"start\"] {\n left: 0;\n right: auto;\n}\n\n.brokr-popover-actions {\n display: grid;\n gap: var(--brokr-space-2);\n}\n\n.brokr-session-list,\n.brokr-stack-list {\n display: grid;\n gap: var(--brokr-space-3);\n}\n\n.brokr-session-item {\n align-items: center;\n display: grid;\n gap: var(--brokr-space-3);\n grid-template-columns: 1fr auto;\n}\n\n.brokr-profile-photo {\n align-items: center;\n cursor: pointer;\n display: inline-grid;\n justify-items: center;\n position: relative;\n width: 100%;\n}\n\n.brokr-profile-photo-shell {\n display: grid;\n gap: var(--brokr-space-3);\n justify-items: center;\n}\n\n.brokr-profile-photo-frame {\n align-items: center;\n display: grid;\n justify-items: center;\n min-height: 72px;\n width: 100%;\n}\n\n.brokr-profile-photo-overlay {\n align-items: center;\n background: color-mix(in srgb, var(--brokr-bg) 72%, transparent);\n backdrop-filter: blur(10px);\n border-radius: inherit;\n color: var(--brokr-text-primary);\n display: grid;\n justify-items: center;\n inset: 0;\n opacity: 0;\n position: absolute;\n transition: opacity 150ms ease;\n}\n\n.brokr-profile-photo:hover .brokr-profile-photo-overlay,\n.brokr-profile-photo:focus-within .brokr-profile-photo-overlay {\n opacity: 1;\n}\n\n/* ============================================================\n Account Panel \u2014 Settings surface\n ============================================================ */\n\n.brokr-account-panel {\n background: color-mix(in srgb, var(--brokr-surface) 97%, var(--brokr-bg));\n border: 1px solid var(--brokr-muted-border);\n border-radius: calc(var(--brokr-radius-card) + 4px);\n display: grid;\n gap: 0;\n margin: 0 auto;\n max-width: 1040px;\n min-height: 620px;\n overflow: hidden;\n width: 100%;\n}\n\n.brokr-account-sidebar {\n background: color-mix(in srgb, var(--brokr-surfaceMuted, var(--brokr-surface)) 82%, var(--brokr-bg));\n border-right: 1px solid var(--brokr-muted-border);\n display: grid;\n align-content: start;\n gap: 1.6rem;\n padding: 1.45rem 1.1rem;\n}\n\n.brokr-account-sidebar-group {\n display: grid;\n gap: 0.45rem;\n}\n\n.brokr-account-sidebar-kicker {\n color: var(--brokr-text-secondary);\n font-size: 0.68rem;\n font-weight: 700;\n letter-spacing: 0.12em;\n line-height: 1;\n opacity: 0.8;\n padding: 0 0.55rem;\n text-transform: uppercase;\n}\n\n.brokr-account-tab-list {\n display: grid;\n gap: 0.2rem;\n align-content: start;\n}\n\n.brokr-account-tab {\n align-items: center;\n appearance: none;\n background: transparent;\n border: 1px solid transparent;\n border-radius: calc(var(--brokr-radius-card) - 1px);\n color: var(--brokr-text-secondary);\n cursor: pointer;\n display: inline-flex;\n font: inherit;\n font-size: var(--brokr-font-size-sm);\n font-weight: 600;\n gap: 0.7rem;\n justify-content: flex-start;\n line-height: 1;\n min-height: 38px;\n padding: 0 0.7rem;\n text-align: left;\n width: 100%;\n}\n\n.brokr-account-tab-icon {\n align-items: center;\n color: currentColor;\n display: inline-flex;\n flex-shrink: 0;\n height: 16px;\n justify-content: center;\n line-height: 0;\n width: 16px;\n}\n\n.brokr-account-tab > span:last-child {\n align-items: center;\n display: inline-flex;\n min-height: 1rem;\n}\n\n.brokr-account-tab:hover,\n.brokr-account-tab[data-active=\"true\"] {\n background: color-mix(in srgb, var(--brokr-text-primary) 6%, transparent);\n border-color: var(--brokr-muted-border);\n color: var(--brokr-text-primary);\n}\n\n.brokr-account-surface {\n display: grid;\n align-content: start;\n gap: 1.4rem;\n padding: 1.5rem;\n}\n\n.brokr-account-surface-header {\n display: block;\n padding: 0.1rem 0;\n}\n\n.brokr-account-form,\n.brokr-account-stack {\n display: grid;\n gap: 1rem;\n}\n\n.brokr-account-card {\n background: color-mix(in srgb, var(--brokr-surface) 96%, var(--brokr-bg));\n border: 1px solid var(--brokr-muted-border);\n border-radius: calc(var(--brokr-radius-card) + 1px);\n display: grid;\n gap: 1rem;\n padding: 1.15rem;\n}\n\n.brokr-account-photo-row {\n align-items: center;\n display: flex;\n gap: 1rem;\n min-height: 92px;\n}\n\n.brokr-account-photo-row .brokr-profile-photo-shell {\n gap: 0;\n}\n\n.brokr-account-photo-copy {\n display: grid;\n gap: 0.35rem;\n align-content: center;\n}\n\n.brokr-account-photo-hint {\n align-items: center;\n color: var(--brokr-text-secondary);\n display: inline-flex;\n gap: 0.45rem;\n font-size: var(--brokr-font-size-sm);\n}\n\n.brokr-account-field-list {\n display: grid;\n gap: 0;\n padding: 0;\n}\n\n.brokr-account-field-row {\n display: grid;\n gap: 0.8rem;\n grid-template-columns: 1fr;\n padding: 1.15rem;\n}\n\n.brokr-account-field-row + .brokr-account-field-row {\n border-top: 1px solid var(--brokr-muted-border);\n}\n\n.brokr-account-field-head {\n display: grid;\n gap: 0.25rem;\n max-width: none;\n}\n\n.brokr-account-field-body {\n display: grid;\n gap: var(--brokr-space-2);\n justify-items: stretch;\n min-width: 0;\n width: 100%;\n}\n\n.brokr-account-field-body .brokr-input {\n min-height: 44px;\n width: 100%;\n}\n\n.brokr-account-field-body-static,\n.brokr-account-field-body-actions {\n align-content: center;\n}\n\n.brokr-account-field-body-stack {\n justify-items: stretch;\n}\n\n.brokr-account-static-value {\n align-items: center;\n display: flex;\n flex-wrap: wrap;\n gap: var(--brokr-space-3);\n justify-content: space-between;\n line-height: 1.25;\n width: 100%;\n}\n\n.brokr-account-status-pill {\n align-items: center;\n background: color-mix(in srgb, var(--brokr-text-primary) 6%, transparent);\n border: 1px solid var(--brokr-muted-border);\n border-radius: 999px;\n color: var(--brokr-text-secondary);\n display: inline-flex;\n font-size: 0.75rem;\n font-weight: 600;\n gap: 0.35rem;\n min-height: 28px;\n padding: 0 0.7rem;\n}\n\n.brokr-account-status-pill[data-verified=\"true\"] {\n color: var(--brokr-text-primary);\n}\n\n.brokr-account-actions-row {\n align-items: center;\n display: flex;\n gap: var(--brokr-space-3);\n justify-content: flex-end;\n padding-top: 0.1rem;\n}\n\n.brokr-account-summary-row {\n align-items: center;\n display: flex;\n gap: var(--brokr-space-4);\n justify-content: space-between;\n}\n\n.brokr-account-summary-copy {\n display: grid;\n gap: 0.35rem;\n}\n\n.brokr-account-summary-copy strong {\n color: var(--brokr-text-primary);\n font-size: 1.05rem;\n font-weight: 600;\n letter-spacing: -0.02em;\n}\n\n.brokr-account-summary-kicker {\n color: var(--brokr-text-secondary);\n font-size: 0.72rem;\n font-weight: 700;\n letter-spacing: 0.12em;\n text-transform: uppercase;\n}\n\n.brokr-account-summary-icon {\n align-items: center;\n background: color-mix(in srgb, var(--brokr-text-primary) 6%, transparent);\n border: 1px solid var(--brokr-muted-border);\n border-radius: 10px;\n color: var(--brokr-text-secondary);\n display: inline-flex;\n height: 40px;\n justify-content: center;\n width: 40px;\n}\n\n.brokr-account-session-group {\n border: 1px solid var(--brokr-muted-border);\n border-radius: calc(var(--brokr-radius-card) - 1px);\n display: grid;\n overflow: hidden;\n}\n\n.brokr-account-session-row {\n align-items: center;\n background: color-mix(in srgb, var(--brokr-surface) 98%, var(--brokr-bg));\n display: grid;\n gap: 0.75rem;\n grid-template-columns: 1fr auto;\n padding: 0.85rem 1rem;\n}\n\n.brokr-account-session-row + .brokr-account-session-row {\n border-top: 1px solid var(--brokr-muted-border);\n}\n\n.brokr-account-session-info {\n display: grid;\n gap: 0.15rem;\n min-width: 0;\n}\n\n.brokr-account-session-info strong {\n color: var(--brokr-text-primary);\n font-size: var(--brokr-font-size-sm);\n font-weight: 600;\n}\n\n.brokr-account-session-detail,\n.brokr-account-session-empty {\n color: var(--brokr-text-secondary);\n font-size: var(--brokr-font-size-sm);\n line-height: 1.5;\n}\n\n.brokr-account-danger-zone {\n border-color: color-mix(in srgb, var(--brokr-error, var(--brokr-primary)) 20%, var(--brokr-border));\n}\n\n.brokr-account-link-button {\n appearance: none;\n background: transparent;\n border: 1px solid transparent;\n border-radius: calc(var(--brokr-radius-button) - 2px);\n color: var(--brokr-text-secondary);\n cursor: pointer;\n font: inherit;\n font-size: 0.8125rem;\n font-weight: 600;\n min-height: 34px;\n padding: 0 0.7rem;\n text-decoration: none;\n transition: color 120ms ease, background-color 120ms ease, border-color 120ms ease;\n}\n\n.brokr-account-link-button:hover {\n background: color-mix(in srgb, var(--brokr-text-primary) 5%, transparent);\n border-color: var(--brokr-muted-border);\n color: var(--brokr-text-primary);\n}\n\n.brokr-account-link-button[data-tone=\"danger\"] {\n color: color-mix(in srgb, var(--brokr-error, var(--brokr-primary)) 70%, var(--brokr-text-secondary));\n}\n\n.brokr-account-link-button[data-tone=\"danger\"]:hover {\n color: var(--brokr-error, var(--brokr-primary));\n}\n\n.brokr-account-panel[data-density=\"compact\"] {\n border-radius: calc(var(--brokr-radius-card) + 2px);\n max-width: 100%;\n}\n\n.brokr-account-panel[data-density=\"compact\"] .brokr-account-sidebar {\n border-bottom: 1px solid var(--brokr-muted-border);\n border-right: none;\n gap: var(--brokr-space-3);\n padding: var(--brokr-space-3);\n}\n\n.brokr-account-panel[data-density=\"compact\"] .brokr-account-tab-list {\n display: flex;\n flex-wrap: wrap;\n}\n\n.brokr-account-panel[data-density=\"compact\"] .brokr-account-surface {\n gap: var(--brokr-space-3);\n padding: var(--brokr-space-3);\n}\n\n.brokr-account-menu {\n display: grid;\n gap: var(--brokr-space-3);\n}\n\n.brokr-account-menu-header {\n align-items: center;\n display: grid;\n gap: var(--brokr-space-3);\n grid-template-columns: auto minmax(0, 1fr);\n padding-bottom: var(--brokr-space-2);\n}\n\n.brokr-account-menu-copy {\n display: grid;\n gap: 0.15rem;\n min-width: 0;\n}\n\n.brokr-account-menu-copy strong {\n color: var(--brokr-text-primary);\n font-size: 0.95rem;\n font-weight: 600;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.brokr-account-menu-copy span {\n color: var(--brokr-text-secondary);\n font-size: 0.82rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.brokr-account-menu-actions {\n display: grid;\n gap: var(--brokr-space-2);\n padding-top: var(--brokr-space-2);\n border-top: 1px solid var(--brokr-muted-border);\n}\n\n.brokr-account-menu-action {\n align-items: center;\n appearance: none;\n background: transparent;\n border: 1px solid transparent;\n border-radius: calc(var(--brokr-radius-card) - 1px);\n color: var(--brokr-text-primary);\n cursor: pointer;\n display: inline-flex;\n font: inherit;\n font-size: var(--brokr-font-size-sm);\n font-weight: 600;\n gap: 0.65rem;\n justify-content: flex-start;\n min-height: 38px;\n padding: 0 0.75rem;\n}\n\n.brokr-account-menu-action > span:last-child {\n align-items: center;\n display: inline-flex;\n min-height: 1rem;\n}\n\n.brokr-account-menu-action:hover {\n background: color-mix(in srgb, var(--brokr-text-primary) 5%, transparent);\n border-color: var(--brokr-muted-border);\n}\n\n.brokr-account-menu-action-icon {\n align-items: center;\n color: var(--brokr-text-secondary);\n display: inline-flex;\n justify-content: center;\n}\n\n.brokr-modal-backdrop {\n align-items: center;\n background: color-mix(in srgb, var(--brokr-bg) 60%, transparent);\n backdrop-filter: blur(10px);\n display: grid;\n inset: 0;\n padding: var(--brokr-space-6);\n position: fixed;\n z-index: var(--brokr-z-modal-backdrop);\n}\n\n.brokr-modal-dialog {\n max-height: min(90vh, 860px);\n overflow: auto;\n width: min(96vw, 1100px);\n}\n\n.brokr-account-settings-dialog {\n display: grid;\n gap: var(--brokr-space-4);\n padding: var(--brokr-space-4);\n}\n\n.brokr-modal-toolbar {\n display: flex;\n justify-content: flex-end;\n}\n\n.brokr-account-panel[data-density=\"compact\"] .brokr-account-card {\n gap: var(--brokr-space-3);\n padding: var(--brokr-space-3);\n}\n\n.brokr-account-panel[data-density=\"compact\"] .brokr-account-field-row,\n.brokr-account-panel[data-density=\"compact\"] .brokr-account-photo-row {\n gap: var(--brokr-space-3);\n grid-template-columns: 1fr;\n}\n\n.brokr-account-panel[data-density=\"compact\"] .brokr-account-field-body,\n.brokr-account-panel[data-density=\"compact\"] .brokr-account-actions-row {\n justify-items: stretch;\n justify-content: stretch;\n width: 100%;\n}\n\n.brokr-account-panel[data-density=\"compact\"] .brokr-account-static-value,\n.brokr-account-panel[data-density=\"compact\"] .brokr-account-summary-row {\n align-items: flex-start;\n flex-direction: column;\n}\n";
|
|
2
|
+
//# sourceMappingURL=account.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../../../src/react/css/account.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,+3bAsmBvB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const ANIMATIONS_CSS = "\n@keyframes brokrPulse {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n@keyframes brokrFadeIn {\n from { opacity: 0; transform: translateY(4px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes brokrTypingBounce {\n 0%, 80%, 100% { opacity: 0.35; transform: translateY(0); }\n 40% { opacity: 1; transform: translateY(-2px); }\n}\n\n@keyframes brokrModelDrop {\n from { opacity: 0; transform: translateY(-4px); }\n to { opacity: 1; transform: translateY(0); }\n}\n\n@keyframes brokrDrawerSlideIn {\n from { transform: translateX(-100%); }\n to { transform: translateX(0); }\n}\n";
|
|
2
|
+
//# sourceMappingURL=animations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animations.d.ts","sourceRoot":"","sources":["../../../../src/react/css/animations.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,6oBAyB1B,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const AUTH_CSS = "\n.brokr-auth-shell {\n align-items: stretch;\n background: var(--brokr-bg);\n color: var(--brokr-text-primary);\n display: grid;\n min-height: 100vh;\n}\n\n.brokr-auth-shell[data-variant=\"1\"] {\n grid-template-columns: minmax(0, 1.1fr) minmax(360px, 0.9fr);\n}\n\n.brokr-auth-hero {\n display: grid;\n min-height: 40vh;\n overflow: hidden;\n padding: var(--brokr-space-8);\n position: relative;\n}\n\n.brokr-auth-hero::after {\n background: linear-gradient(180deg, transparent 0%, color-mix(in srgb, var(--brokr-bg) 75%, transparent) 100%);\n content: \"\";\n inset: 0;\n pointer-events: none;\n position: absolute;\n}\n\n.brokr-auth-hero-media {\n background-color: var(--brokr-soft-surface);\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n border: 1px solid var(--brokr-muted-border);\n border-radius: calc(var(--brokr-radius-card) + 10px);\n inset: var(--brokr-space-6);\n position: absolute;\n}\n\n.brokr-auth-hero-content {\n align-content: end;\n display: grid;\n gap: var(--brokr-space-4);\n margin-top: auto;\n max-width: 34rem;\n padding: var(--brokr-space-6);\n position: relative;\n z-index: 1;\n}\n\n.brokr-brand-row {\n align-items: center;\n display: inline-flex;\n gap: var(--brokr-space-3);\n}\n\n.brokr-brand-logo {\n border-radius: calc(var(--brokr-radius-card) + 6px);\n display: block;\n height: 40px;\n object-fit: contain;\n width: 40px;\n}\n\n.brokr-brand-name {\n color: var(--brokr-text-primary);\n font-size: var(--brokr-font-size-sm);\n font-weight: 700;\n letter-spacing: 0.08em;\n text-transform: uppercase;\n}\n\n.brokr-auth-form-pane {\n align-items: center;\n display: grid;\n min-height: 100vh;\n padding: var(--brokr-space-8);\n}\n\n.brokr-auth-card {\n display: grid;\n gap: var(--brokr-space-6);\n margin: 0 auto;\n max-width: 28rem;\n padding: var(--brokr-space-8);\n width: 100%;\n}\n\n.brokr-auth-form {\n display: grid;\n gap: var(--brokr-space-4);\n}\n\n.brokr-auth-footer {\n color: var(--brokr-text-secondary);\n display: flex;\n flex-wrap: wrap;\n gap: var(--brokr-space-2);\n justify-content: center;\n}\n\n.brokr-auth-link,\n.brokr-action {\n color: var(--brokr-text-primary);\n cursor: pointer;\n text-decoration: none;\n}\n\n.brokr-auth-link:hover,\n.brokr-action:hover {\n opacity: 0.8;\n}\n";
|
|
2
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../src/react/css/auth.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,qzEAiHpB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const CHAT_EXTRAS_CSS = "\n/* ============================================================\n AI Chat \u2014 Model Selector Dropdown\n ============================================================ */\n\n.brokr-model-selector {\n position: relative;\n}\n\n.brokr-model-trigger {\n align-items: center;\n background: var(--brokr-subtle-fill);\n border: 1px solid var(--brokr-muted-border);\n border-radius: var(--brokr-radius-button);\n color: var(--brokr-text-primary);\n cursor: pointer;\n display: inline-flex;\n font: inherit;\n font-size: var(--brokr-font-size-sm);\n font-weight: 600;\n gap: var(--brokr-space-2);\n min-height: 36px;\n padding: 0 0.75rem;\n transition: background-color 120ms ease;\n white-space: nowrap;\n}\n\n.brokr-model-trigger:hover {\n background: var(--brokr-subtle-fill-strong);\n}\n\n.brokr-model-dropdown {\n animation: brokrModelDrop 120ms ease-out;\n background: var(--brokr-surface);\n border: 1px solid var(--brokr-muted-border);\n border-radius: calc(var(--brokr-radius-card) + 1px);\n box-shadow: var(--brokr-shadow-md);\n display: flex;\n flex-direction: column;\n min-width: 220px;\n overflow: hidden;\n padding: 0.3rem;\n position: absolute;\n right: 0;\n top: calc(100% + 6px);\n z-index: var(--brokr-z-dropdown);\n}\n\n.brokr-model-option {\n align-items: center;\n appearance: none;\n background: transparent;\n border: none;\n border-radius: calc(var(--brokr-radius-card) - 1px);\n color: var(--brokr-text-primary);\n cursor: pointer;\n display: flex;\n font: inherit;\n font-size: var(--brokr-font-size-sm);\n gap: var(--brokr-space-2);\n padding: 0.5rem 0.75rem;\n text-align: left;\n transition: background-color 100ms ease;\n width: 100%;\n}\n\n.brokr-model-option:hover:not([data-locked=\"true\"]) {\n background: var(--brokr-subtle-fill);\n}\n\n.brokr-model-option[data-active=\"true\"] {\n background: color-mix(in srgb, var(--brokr-primary) 8%, transparent);\n}\n\n.brokr-model-option[data-locked=\"true\"] {\n cursor: not-allowed;\n opacity: 0.45;\n}\n\n.brokr-model-option-label {\n flex: 1;\n}\n\n.brokr-model-dot {\n border-radius: 999px;\n display: inline-block;\n flex-shrink: 0;\n height: 8px;\n width: 8px;\n}\n\n.brokr-model-lock {\n font-size: 0.7rem;\n}\n\n/* ============================================================\n AI Chat \u2014 Thread row with context menu\n ============================================================ */\n\n.brokr-ai-chat-thread-row {\n align-items: center;\n display: grid;\n grid-template-columns: 1fr auto;\n position: relative;\n}\n\n.brokr-ai-chat-thread-row .brokr-ai-chat-conversation {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n}\n\n.brokr-ai-chat-thread-menu-wrap {\n flex-shrink: 0;\n position: relative;\n}\n\n.brokr-ai-chat-thread-menu-btn {\n align-items: center;\n background: transparent;\n border: none;\n border-radius: var(--brokr-radius-button);\n color: var(--brokr-text-secondary);\n cursor: pointer;\n display: inline-flex;\n height: 28px;\n justify-content: center;\n padding: 0;\n width: 28px;\n}\n\n.brokr-ai-chat-thread-menu-btn:hover {\n background: var(--brokr-subtle-fill-strong);\n color: var(--brokr-text-primary);\n}\n\n.brokr-ai-chat-thread-dropdown {\n animation: brokrModelDrop 120ms ease-out;\n background: var(--brokr-surface);\n border: 1px solid var(--brokr-muted-border);\n border-radius: var(--brokr-radius-card);\n box-shadow: var(--brokr-shadow-md);\n display: flex;\n flex-direction: column;\n min-width: 160px;\n overflow: hidden;\n padding: 0.3rem;\n position: absolute;\n right: 0;\n top: calc(100% + 4px);\n z-index: var(--brokr-z-dropdown);\n}\n\n.brokr-ai-chat-thread-dropdown-item {\n align-items: center;\n appearance: none;\n background: transparent;\n border: none;\n border-radius: calc(var(--brokr-radius-card) - 2px);\n color: var(--brokr-text-primary);\n cursor: pointer;\n display: flex;\n font: inherit;\n font-size: var(--brokr-font-size-sm);\n gap: var(--brokr-space-2);\n padding: 0.5rem 0.75rem;\n text-align: left;\n transition: background-color 100ms ease;\n width: 100%;\n}\n\n.brokr-ai-chat-thread-dropdown-item:hover {\n background: var(--brokr-subtle-fill);\n}\n\n.brokr-ai-chat-thread-dropdown-item[data-tone=\"danger\"] {\n color: color-mix(in srgb, var(--brokr-error, var(--brokr-primary)) 80%, var(--brokr-text-primary));\n}\n\n/* ============================================================\n AI Chat \u2014 Message copy button\n ============================================================ */\n\n.brokr-ai-chat-message-wrap {\n max-width: min(100%, 720px);\n position: relative;\n width: 100%;\n}\n\n.brokr-ai-chat-message-wrap .brokr-ai-chat-message-content {\n max-width: 100%;\n width: 100%;\n}\n\n.brokr-ai-chat-copy-btn {\n align-items: center;\n background: var(--brokr-surface);\n border: 1px solid var(--brokr-muted-border);\n border-radius: var(--brokr-radius-button);\n color: var(--brokr-text-secondary);\n cursor: pointer;\n display: inline-flex;\n height: 26px;\n justify-content: center;\n opacity: 0;\n padding: 0;\n position: absolute;\n right: 0;\n top: -4px;\n transition: opacity 120ms ease, background-color 120ms ease;\n width: 26px;\n}\n\n.brokr-ai-chat-message-wrap:hover .brokr-ai-chat-copy-btn {\n opacity: 1;\n}\n\n.brokr-ai-chat-copy-btn:hover {\n background: var(--brokr-subtle-fill-strong);\n color: var(--brokr-text-primary);\n}\n\n/* ============================================================\n AI Chat \u2014 Input layout\n ============================================================ */\n\n.brokr-ai-chat-input-row {\n align-items: stretch;\n display: flex;\n gap: var(--brokr-space-2);\n}\n\n.brokr-ai-chat-input-container {\n display: flex;\n flex-direction: column;\n gap: var(--brokr-space-2);\n margin: 0 auto;\n max-width: 860px;\n}\n\n.brokr-ai-chat-composer-actions {\n display: flex;\n flex-wrap: wrap;\n gap: var(--brokr-space-2);\n}\n\n/* ============================================================\n AI Chat \u2014 Variant: no header (variant=3)\n ============================================================ */\n\n.brokr-ai-chat-stage[data-noheader=\"true\"] .brokr-ai-chat-thread {\n padding-top: var(--brokr-space-4);\n}\n\n/* ============================================================\n AI Chat \u2014 Mobile drawer\n ============================================================ */\n\n.brokr-ai-chat-drawer-backdrop {\n background: color-mix(in srgb, var(--brokr-bg) 60%, transparent);\n backdrop-filter: blur(4px);\n inset: 0;\n position: fixed;\n z-index: var(--brokr-z-drawer-backdrop);\n}\n\n.brokr-ai-chat-drawer {\n animation: brokrDrawerSlideIn 200ms ease-out;\n background: var(--brokr-surface);\n border-right: 1px solid var(--brokr-muted-border);\n display: grid;\n gap: var(--brokr-space-4);\n padding: var(--brokr-space-4);\n align-content: start;\n overflow-y: auto;\n height: 100%;\n left: 0;\n max-width: 280px;\n position: fixed;\n top: 0;\n width: 80vw;\n z-index: var(--brokr-z-drawer);\n}\n\n.brokr-ai-chat-hamburger {\n align-items: center;\n background: var(--brokr-surface);\n border: 1px solid var(--brokr-muted-border);\n border-radius: var(--brokr-radius-button);\n color: var(--brokr-text-secondary);\n cursor: pointer;\n display: none;\n height: 36px;\n justify-content: center;\n width: 36px;\n}\n\n.brokr-ai-chat-hamburger:hover {\n background: var(--brokr-subtle-fill);\n color: var(--brokr-text-primary);\n}\n\n.brokr-ai-chat-topbar-left {\n display: flex;\n align-items: center;\n gap: var(--brokr-space-2);\n}\n\n/* ============================================================\n AI Chat \u2014 Rename input\n ============================================================ */\n\n.brokr-ai-chat-rename-input {\n appearance: none;\n background: var(--brokr-subtle-fill);\n border: 1px solid var(--brokr-primary);\n border-radius: var(--brokr-radius-button);\n color: var(--brokr-text-primary);\n font: inherit;\n font-size: var(--brokr-font-size-xs);\n outline: none;\n padding: 0.5rem 0.65rem;\n width: 100%;\n}\n\n/* ============================================================\n AI Chat \u2014 Sentinel (infinite scroll trigger)\n ============================================================ */\n\n.brokr-ai-chat-sentinel {\n min-height: 1px;\n}\n";
|
|
2
|
+
//# sourceMappingURL=chat-extras.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-extras.d.ts","sourceRoot":"","sources":["../../../../src/react/css/chat-extras.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,+vQA6U3B,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const CHAT_CSS = "\n.brokr-ai-chat-shell {\n display: grid;\n gap: 0;\n grid-template-columns: minmax(240px, 280px) minmax(0, 1fr);\n overflow: hidden;\n width: 100%;\n}\n\n.brokr-ai-chat-shell[data-sidebar=\"false\"] {\n grid-template-columns: minmax(0, 1fr);\n}\n\n.brokr-ai-chat-sidebar {\n border-right: 1px solid var(--brokr-muted-border);\n display: grid;\n gap: var(--brokr-space-4);\n padding: var(--brokr-space-4);\n align-content: start;\n overflow-y: auto;\n height: 100%;\n max-height: 100%;\n min-height: 0;\n}\n\n.brokr-ai-chat-sidebar-empty {\n display: flex;\n flex: 1;\n align-items: center;\n justify-content: center;\n padding: var(--brokr-space-6) var(--brokr-space-4);\n}\n\n.brokr-ai-chat-sidebar-empty-text {\n color: var(--brokr-text-secondary);\n font-size: var(--brokr-font-size-xs);\n line-height: 1.5;\n text-align: center;\n opacity: 0.6;\n}\n\n.brokr-ai-chat-sidebar-button {\n align-items: center;\n background: transparent;\n border: none;\n border-radius: var(--brokr-radius-button);\n color: var(--brokr-text-secondary);\n cursor: pointer;\n display: inline-flex;\n font: inherit;\n font-size: var(--brokr-font-size-xs);\n font-weight: 500;\n gap: var(--brokr-space-2);\n justify-content: flex-start;\n padding: 0.5rem 0.65rem;\n padding-bottom: 0.65rem;\n margin-bottom: var(--brokr-space-2);\n border-bottom: 1px solid var(--brokr-muted-border);\n border-radius: 0;\n transition: color 120ms ease;\n width: 100%;\n}\n\n.brokr-ai-chat-sidebar-button:hover {\n color: var(--brokr-text-primary);\n}\n\n.brokr-ai-chat-conversations {\n display: grid;\n gap: 2px;\n}\n\n.brokr-ai-chat-conversation {\n appearance: none;\n background: transparent;\n border: none;\n border-radius: var(--brokr-radius-button);\n color: var(--brokr-text-secondary);\n cursor: pointer;\n font: inherit;\n font-size: var(--brokr-font-size-xs);\n font-weight: 400;\n overflow: hidden;\n padding: 0.5rem 0.65rem;\n text-align: left;\n text-overflow: ellipsis;\n transition: color 120ms ease, background 120ms ease;\n white-space: nowrap;\n}\n\n.brokr-ai-chat-conversation:hover {\n color: var(--brokr-text-primary);\n background: var(--brokr-subtle-fill);\n}\n\n.brokr-ai-chat-conversation[data-active=\"true\"] {\n color: var(--brokr-text-primary);\n background: var(--brokr-subtle-fill);\n font-weight: 500;\n}\n\n.brokr-ai-chat-stage {\n height: 100%;\n max-height: 100%;\n min-height: 0;\n width: 100%;\n max-width: 100%;\n min-width: 0;\n overflow: hidden;\n position: relative;\n}\n\n.brokr-ai-chat-topbar {\n align-items: center;\n display: flex;\n flex-direction: row;\n gap: var(--brokr-space-4);\n justify-content: space-between;\n left: 0;\n padding: var(--brokr-space-3);\n pointer-events: none;\n position: absolute;\n right: 0;\n top: 0;\n z-index: var(--brokr-z-chat-float);\n}\n\n.brokr-ai-chat-topbar > * {\n pointer-events: auto;\n}\n\n.brokr-ai-chat-header-title {\n align-items: center;\n display: inline-flex;\n gap: var(--brokr-space-2);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.brokr-ai-chat-title-loading {\n align-items: center;\n color: var(--brokr-text-secondary);\n display: inline-flex;\n gap: 0.3rem;\n}\n\n.brokr-ai-chat-title-loading span {\n animation: brokrTypingBounce 1.2s ease-in-out infinite;\n background: color-mix(in srgb, var(--brokr-text-primary) 50%, transparent);\n border-radius: 999px;\n display: inline-block;\n height: 0.28rem;\n width: 0.28rem;\n}\n\n.brokr-ai-chat-title-loading span:nth-child(2) {\n animation-delay: 0.15s;\n}\n\n.brokr-ai-chat-title-loading span:nth-child(3) {\n animation-delay: 0.3s;\n}\n\n.brokr-ai-chat-topbar-actions {\n align-items: center;\n display: inline-flex;\n gap: var(--brokr-space-2);\n}\n\n.brokr-ai-chat-model-select {\n min-width: 11rem;\n}\n\n.brokr-ai-chat-thread {\n height: 100%;\n min-height: 0;\n overflow-y: auto;\n padding: calc(var(--brokr-space-12) + var(--brokr-space-4)) 0 calc(var(--brokr-space-12) + 4.75rem);\n}\n\n.brokr-ai-chat-thread[data-empty=\"true\"] {\n align-content: center;\n display: grid;\n}\n\n.brokr-ai-chat-thread-inner {\n margin: 0 auto;\n max-width: 860px;\n}\n\n.brokr-ai-chat-message {\n animation: brokrFadeIn 200ms ease;\n margin-bottom: var(--brokr-space-10);\n}\n\n.brokr-ai-chat-model-avatar {\n border-radius: 50%;\n flex-shrink: 0;\n height: 28px;\n object-fit: cover;\n width: 28px;\n}\n\n.brokr-model-logo {\n border-radius: 50%;\n flex-shrink: 0;\n height: 18px;\n object-fit: cover;\n width: 18px;\n}\n\n.brokr-ai-chat-message-row {\n align-items: flex-start;\n display: flex;\n gap: var(--brokr-space-3);\n width: 100%;\n}\n\n.brokr-ai-chat-message-row[data-role=\"user\"] {\n justify-content: flex-end;\n}\n\n.brokr-ai-chat-message-row[data-role=\"assistant\"] {\n justify-content: flex-start;\n}\n\n.brokr-ai-chat-message-content {\n color: var(--brokr-text-secondary);\n font-size: 0.9375rem;\n line-height: 1.7;\n width: min(100%, 720px);\n overflow-wrap: break-word;\n}\n\n.brokr-ai-chat-message-content-user {\n color: var(--brokr-text-primary);\n}\n\n.brokr-ai-chat-message-error {\n color: var(--brokr-error, #ef4444);\n font-size: 0.875rem;\n line-height: 1.5;\n opacity: 0.85;\n}\n\n.brokr-ai-chat-message-bubble {\n background: color-mix(in srgb, var(--brokr-text-primary) 10%, var(--brokr-surface));\n border: 1px solid color-mix(in srgb, var(--brokr-text-primary) 10%, var(--brokr-border));\n border-radius: calc(var(--brokr-radius-card) + 2px);\n box-shadow: var(--brokr-shadow-sm);\n max-width: min(78%, 720px);\n padding: var(--brokr-space-3) var(--brokr-space-4);\n}\n\n.brokr-ai-chat-empty {\n align-items: center;\n display: flex;\n flex-direction: column;\n gap: var(--brokr-space-3);\n justify-content: center;\n margin: 0 auto;\n max-width: 720px;\n padding: var(--brokr-space-8);\n text-align: center;\n}\n\n.brokr-ai-chat-empty .brokr-copy {\n max-width: 42rem;\n}\n\n.brokr-ai-chat-starters {\n display: grid;\n gap: var(--brokr-space-2);\n grid-template-columns: repeat(2, minmax(0, 1fr));\n margin-top: var(--brokr-space-2);\n width: min(100%, 720px);\n}\n\n.brokr-ai-chat-starter {\n align-items: flex-start;\n appearance: none;\n background: transparent;\n border: 1px solid var(--brokr-muted-border);\n border-radius: calc(var(--brokr-radius-card) + 1px);\n color: var(--brokr-text-primary);\n cursor: pointer;\n display: inline-flex;\n font: inherit;\n font-size: var(--brokr-font-size-sm);\n justify-content: flex-start;\n min-height: 58px;\n padding: 0.85rem 1rem;\n text-align: left;\n}\n\n.brokr-ai-chat-starter:hover {\n background: var(--brokr-subtle-fill);\n}\n\n.brokr-ai-chat-input-area {\n bottom: 0;\n left: 0;\n padding: var(--brokr-space-4) 0 var(--brokr-space-5);\n position: absolute;\n right: 0;\n z-index: var(--brokr-z-chat-float);\n}\n\n.brokr-ai-chat-textarea {\n background: var(--brokr-surface);\n border: 1px solid var(--brokr-border);\n border-radius: var(--brokr-radius-input);\n color: var(--brokr-text-primary);\n flex: 1;\n font: inherit;\n line-height: 1.5;\n max-height: 168px;\n min-height: 44px;\n outline: none;\n overflow: hidden;\n padding: var(--brokr-space-3);\n resize: none;\n}\n\n.brokr-ai-chat-textarea:focus {\n border-color: var(--brokr-primary);\n}\n\n.brokr-ai-chat-send {\n align-items: center;\n align-self: stretch;\n background: var(--brokr-primary);\n border: none;\n border-radius: var(--brokr-radius-button);\n color: var(--brokr-primary-contrast);\n cursor: pointer;\n display: inline-flex;\n flex-shrink: 0;\n justify-content: center;\n width: 44px;\n}\n\n.brokr-ai-chat-send:disabled {\n cursor: not-allowed;\n opacity: 0.35;\n}\n\n.brokr-ai-chat-typing {\n align-items: center;\n display: inline-flex;\n gap: 0.4rem;\n min-height: 28px;\n padding: 0.25rem 0;\n}\n\n.brokr-ai-chat-typing span {\n animation: brokrTypingBounce 1.2s ease-in-out infinite;\n background: color-mix(in srgb, var(--brokr-text-primary) 70%, transparent);\n border-radius: 999px;\n display: inline-block;\n height: 0.42rem;\n width: 0.42rem;\n}\n\n.brokr-ai-chat-typing span:nth-child(2) {\n animation-delay: 0.16s;\n}\n\n.brokr-ai-chat-typing span:nth-child(3) {\n animation-delay: 0.32s;\n}\n";
|
|
2
|
+
//# sourceMappingURL=chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../../../src/react/css/chat.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,6pQAoXpB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const COMPOSITES_CSS = "\n.brokr-chat-fab {\n bottom: var(--brokr-space-6);\n position: fixed;\n right: var(--brokr-space-6);\n z-index: var(--brokr-z-fab);\n}\n\n.brokr-chat-panel {\n display: grid;\n gap: var(--brokr-space-4);\n grid-template-rows: auto 1fr auto;\n height: 100dvh;\n max-height: 100dvh;\n min-height: 100dvh;\n min-width: min(100vw, 420px);\n padding: var(--brokr-space-5);\n position: fixed;\n right: 0;\n top: 0;\n width: min(100vw, 420px);\n z-index: var(--brokr-z-panel);\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n\n.brokr-chat-messages {\n display: grid;\n gap: var(--brokr-space-3);\n overflow: auto;\n padding-right: var(--brokr-space-1);\n align-content: start;\n}\n\n.brokr-chat-messages[data-empty=\"true\"] {\n align-content: center;\n}\n\n.brokr-chat-bubble {\n border: 1px solid var(--brokr-muted-border);\n border-radius: calc(var(--brokr-radius-card) - 2px);\n line-height: 1.55;\n max-width: min(100%, 34ch);\n padding: var(--brokr-space-3) var(--brokr-space-4);\n white-space: pre-wrap;\n width: fit-content;\n}\n\n.brokr-chat-empty {\n align-items: center;\n color: var(--brokr-text-secondary);\n display: grid;\n gap: var(--brokr-space-3);\n justify-items: start;\n padding: var(--brokr-space-2);\n}\n\n.brokr-chat-starters {\n display: flex;\n flex-wrap: wrap;\n gap: var(--brokr-space-2);\n}\n\n.brokr-chat-starter {\n background: var(--brokr-subtle-fill);\n border: 1px solid var(--brokr-muted-border);\n border-radius: 999px;\n color: var(--brokr-text-primary);\n cursor: pointer;\n font: inherit;\n min-height: 36px;\n padding: 0 0.9rem;\n}\n\n.brokr-chat-bubble[data-role=\"user\"] {\n background: color-mix(in srgb, var(--brokr-primary) 10%, var(--brokr-surface));\n justify-self: end;\n max-width: min(100%, 30ch);\n}\n\n.brokr-chat-bubble[data-role=\"assistant\"] {\n background: color-mix(in srgb, var(--brokr-surface) 92%, var(--brokr-bg));\n justify-self: start;\n}\n\n.brokr-chat-input {\n min-height: 72px;\n resize: none;\n}\n\n.brokr-feedback-shell {\n display: grid;\n gap: var(--brokr-space-5);\n padding: var(--brokr-space-6);\n}\n\n.brokr-feedback-rating {\n display: grid;\n gap: var(--brokr-space-3);\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n\n.brokr-rating-button {\n align-items: center;\n background: var(--brokr-subtle-fill);\n border: 1px solid var(--brokr-muted-border);\n border-radius: var(--brokr-radius-button);\n color: var(--brokr-text-primary);\n cursor: pointer;\n display: inline-flex;\n gap: var(--brokr-space-2);\n justify-content: center;\n min-height: 44px;\n}\n\n.brokr-rating-button[data-active=\"true\"] {\n background: color-mix(in srgb, var(--brokr-primary) 10%, var(--brokr-bg));\n border-color: color-mix(in srgb, var(--brokr-primary) 30%, var(--brokr-border));\n}\n\n.brokr-upload-shell {\n display: grid;\n gap: var(--brokr-space-4);\n padding: var(--brokr-space-5);\n}\n\n.brokr-upload-dropzone {\n align-items: center;\n background: color-mix(in srgb, var(--brokr-surface) 60%, var(--brokr-bg));\n border: 1px dashed color-mix(in srgb, var(--brokr-border) 75%, transparent);\n border-radius: calc(var(--brokr-radius-card) + 4px);\n display: grid;\n gap: var(--brokr-space-3);\n justify-items: center;\n min-height: 220px;\n padding: var(--brokr-space-6);\n text-align: center;\n transition: border-color 150ms ease, background-color 150ms ease, transform 150ms ease;\n}\n\n.brokr-upload-dropzone[data-drag=\"true\"] {\n background: color-mix(in srgb, var(--brokr-primary) 8%, var(--brokr-bg));\n border-color: color-mix(in srgb, var(--brokr-primary) 30%, var(--brokr-border));\n transform: translateY(-1px);\n}\n\n.brokr-upload-file {\n align-items: center;\n display: grid;\n gap: var(--brokr-space-3);\n grid-template-columns: 1fr auto;\n padding: var(--brokr-space-3) var(--brokr-space-4);\n}\n";
|
|
2
|
+
//# sourceMappingURL=composites.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composites.d.ts","sourceRoot":"","sources":["../../../../src/react/css/composites.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,g0HAyJ1B,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const GATES_CSS = "\n.brokr-plan-card {\n display: grid;\n gap: var(--brokr-space-5);\n min-height: 100%;\n padding: var(--brokr-space-6);\n position: relative;\n}\n\n.brokr-plan-card[data-highlight=\"true\"] {\n background: color-mix(in srgb, var(--brokr-surface) 86%, var(--brokr-bg));\n transform: translateY(-2px);\n}\n\n.brokr-plan-price {\n align-items: baseline;\n display: flex;\n gap: var(--brokr-space-2);\n}\n\n.brokr-plan-value {\n font-size: clamp(2rem, 4vw, 3rem);\n font-weight: 700;\n letter-spacing: -0.05em;\n line-height: 1;\n}\n\n.brokr-feature-list {\n display: grid;\n gap: var(--brokr-space-3);\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.brokr-feature-item {\n align-items: flex-start;\n color: var(--brokr-text-secondary);\n display: grid;\n gap: var(--brokr-space-3);\n grid-template-columns: 1rem 1fr;\n}\n\n.brokr-feature-bullet {\n background: var(--brokr-text-primary);\n border-radius: 999px;\n height: 6px;\n margin-top: 0.45rem;\n opacity: 0.75;\n width: 6px;\n}\n\n.brokr-gate-card {\n display: grid;\n gap: var(--brokr-space-4);\n padding: var(--brokr-space-5);\n}\n\n.brokr-meter {\n display: grid;\n gap: var(--brokr-space-3);\n}\n\n.brokr-meter-bar {\n background: var(--brokr-subtle-fill);\n border-radius: 999px;\n height: 8px;\n overflow: hidden;\n width: 100%;\n}\n\n.brokr-meter-fill {\n background: var(--brokr-primary);\n border-radius: inherit;\n height: 100%;\n transition: width 150ms ease;\n}\n";
|
|
2
|
+
//# sourceMappingURL=gates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../../../../src/react/css/gates.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,28CA6ErB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/react/css/index.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,gBAAgB,QAcV,CAAC;AAEpB,wBAAgB,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzD"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const MARKDOWN_CSS = "\n/* ============================================================\n Markdown rendering \u2014 assistant messages\n ============================================================ */\n\n.brokr-md p,\n.brokr-md-paragraph {\n margin: 0 0 0.6em;\n line-height: 1.7;\n}\n\n.brokr-md p:last-child,\n.brokr-md-paragraph:last-child {\n margin-bottom: 0;\n}\n\n.brokr-md strong {\n color: var(--brokr-text-primary);\n font-weight: 600;\n}\n\n.brokr-md em {\n font-style: italic;\n}\n\n.brokr-md-inline-code {\n background: var(--brokr-subtle-fill-strong);\n border-radius: 4px;\n color: var(--brokr-primary);\n font-family: var(--brokr-font-mono);\n font-size: 0.85em;\n padding: 0.15em 0.4em;\n}\n\n.brokr-md-link {\n color: var(--brokr-primary);\n text-decoration: underline;\n text-underline-offset: 2px;\n}\n\n.brokr-md-link:hover {\n opacity: 0.8;\n}\n\n.brokr-md-heading {\n color: var(--brokr-text-primary);\n font-weight: 600;\n line-height: 1.3;\n margin: 1.2em 0 0.5em;\n}\n\n.brokr-md-heading:first-child {\n margin-top: 0;\n}\n\n.brokr-md-h1 { font-size: 1.25em; }\n.brokr-md-h2 { font-size: 1.15em; }\n.brokr-md-h3 { font-size: 1.05em; }\n.brokr-md-h4,\n.brokr-md-h5,\n.brokr-md-h6 { font-size: 0.95em; text-transform: uppercase; letter-spacing: 0.03em; opacity: 0.8; }\n\n.brokr-md-divider {\n border: none;\n border-top: 1px solid var(--brokr-muted-border);\n margin: 1em 0;\n}\n\n.brokr-md-list {\n list-style: none;\n margin: 0.5em 0;\n padding: 0 0 0 1.2em;\n}\n\n.brokr-md-list li {\n line-height: 1.7;\n margin-bottom: 0.25em;\n position: relative;\n}\n\n.brokr-md-list li::before {\n content: '\u2022';\n color: var(--brokr-text-secondary);\n left: -1em;\n position: absolute;\n}\n\n/* \u2500\u2500\u2500 Code blocks \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.brokr-md-codeblock {\n border: 1px solid var(--brokr-muted-border);\n border-radius: var(--brokr-radius-card);\n margin: 0.8em 0;\n overflow: hidden;\n}\n\n.brokr-md-codeblock-header {\n align-items: center;\n background: var(--brokr-subtle-fill);\n border-bottom: 1px solid var(--brokr-muted-border);\n display: flex;\n font-size: var(--brokr-font-size-xs);\n justify-content: space-between;\n padding: 0.4em 0.75em;\n}\n\n.brokr-md-codeblock-lang {\n color: var(--brokr-text-secondary);\n font-family: var(--brokr-font-mono);\n font-weight: 500;\n text-transform: lowercase;\n}\n\n.brokr-md-codeblock-copy {\n align-items: center;\n background: transparent;\n border: none;\n color: var(--brokr-text-secondary);\n cursor: pointer;\n display: inline-flex;\n font: inherit;\n font-size: var(--brokr-font-size-xs);\n gap: 0.35em;\n padding: 0.15em 0.4em;\n border-radius: var(--brokr-radius-button);\n transition: color 120ms ease, background 120ms ease;\n}\n\n.brokr-md-codeblock-copy:hover {\n background: var(--brokr-subtle-fill-strong);\n color: var(--brokr-text-primary);\n}\n\n.brokr-md-codeblock-pre {\n color: var(--brokr-text-primary);\n font-family: var(--brokr-font-mono);\n font-size: 0.825em;\n line-height: 1.6;\n margin: 0;\n overflow-x: auto;\n padding: 0.75em 1em;\n}\n\n.brokr-md-codeblock-pre code {\n background: none;\n border: none;\n padding: 0;\n}\n";
|
|
2
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../../src/react/css/markdown.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,s3GAoJxB,CAAC"}
|