@pillar-ai/sdk 0.1.15 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -12
- package/dist/api/client.d.ts +31 -28
- package/dist/api/mcp-client.d.ts +8 -21
- package/dist/components/Button/EdgeTrigger.d.ts +18 -0
- package/dist/components/Cards/ConfirmActionCard.d.ts +0 -4
- package/dist/components/Cards/index.d.ts +1 -1
- package/dist/components/DevTools/index.d.ts +1 -1
- package/dist/components/PagePilot/index.d.ts +0 -1
- package/dist/components/Panel/Header.d.ts +2 -1
- package/dist/components/Panel/Panel.d.ts +10 -4
- package/dist/components/Panel/TaskButton.d.ts +0 -4
- package/dist/components/Panel/UnifiedChatInput.d.ts +2 -2
- package/dist/components/Panel/WorkflowChecklist.d.ts +0 -1
- package/dist/components/Panel/index.d.ts +2 -3
- package/dist/components/Panel/styles.d.ts +1 -1
- package/dist/components/Progress/ProgressRow.d.ts +2 -1
- package/dist/components/TextSelection/index.d.ts +0 -1
- package/dist/components/index.d.ts +1 -1
- package/dist/core/Pillar.d.ts +1 -6
- package/dist/core/config.d.ts +24 -1
- package/dist/core/instance.d.ts +20 -0
- package/dist/pillar.esm.js +1 -1
- package/dist/store/chat.d.ts +7 -3
- package/dist/store/panel.d.ts +9 -0
- package/dist/styles/panel-styles.d.ts +6 -0
- package/dist/styles/theme.d.ts +13 -0
- package/dist/types/dom-scanner.d.ts +19 -0
- package/dist/utils/dom-scanner.d.ts +15 -2
- package/dist/utils/markdown-components.d.ts +0 -1
- package/dist/utils/preact-markdown.d.ts +0 -1
- package/package.json +10 -7
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @pillar-ai/sdk
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[Pillar](https://trypillar.com) is an open-source product copilot SDK for SaaS and web apps — embed an AI assistant that executes tasks, not just answers questions. [GitHub](https://github.com/pillarhq/pillar) · [Docs](https://trypillar.com/docs)
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/@pillar-ai/sdk)
|
|
6
6
|
[](https://www.npmjs.com/package/@pillar-ai/sdk)
|
|
@@ -9,13 +9,21 @@ Cursor for your product — Embed an AI co-pilot that executes tasks, not just a
|
|
|
9
9
|
|
|
10
10
|
## What is Pillar?
|
|
11
11
|
|
|
12
|
-
Pillar is
|
|
12
|
+
Pillar is a product copilot for SaaS and web applications. Users say what they want, and Pillar uses your UI to make it happen — navigating pages, pre-filling forms, and calling your APIs.
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
A CRM user could ask:
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
> "Close the Walmart deal as won in Salesforce and notify implementation"
|
|
17
|
+
|
|
18
|
+
An analytics user could ask:
|
|
19
|
+
|
|
20
|
+
> "Add a weekly signups chart to my Amplitude dashboard"
|
|
21
|
+
|
|
22
|
+
Or an HR user:
|
|
23
|
+
|
|
24
|
+
> "How do I change my direct deposit in Rippling?"
|
|
25
|
+
|
|
26
|
+
Pillar understands the intent, builds a multi-step plan, and executes it client-side with the user's session.
|
|
19
27
|
|
|
20
28
|
## Features
|
|
21
29
|
|
|
@@ -50,11 +58,9 @@ yarn add @pillar-ai/sdk
|
|
|
50
58
|
|
|
51
59
|
### 1. Get Your Product Key
|
|
52
60
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
2. Create a new product
|
|
57
|
-
3. Copy your **Product Key** from the settings page
|
|
61
|
+
> **⚠️ Beta Onboarding:** Cloud access is currently manual while we learn from early teams. Join the waitlist at [trypillar.com](https://trypillar.com), and we will reach out to onboard you.
|
|
62
|
+
>
|
|
63
|
+
> By default, you'll get an engineer from Pillar to help with setup. If you prefer onboarding without engineering support, include that in your waitlist request and we will support that too.
|
|
58
64
|
|
|
59
65
|
### 2. Initialize the SDK
|
|
60
66
|
|
|
@@ -63,7 +69,7 @@ import { Pillar } from "@pillar-ai/sdk";
|
|
|
63
69
|
|
|
64
70
|
// Initialize and get the instance
|
|
65
71
|
const pillar = await Pillar.init({
|
|
66
|
-
productKey: "your-product-key", //
|
|
72
|
+
productKey: "your-product-key", // Provided during onboarding
|
|
67
73
|
});
|
|
68
74
|
|
|
69
75
|
// Now you can use instance methods
|
package/dist/api/client.d.ts
CHANGED
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
* API Client for Pillar SDK
|
|
3
3
|
* Handles all communication with the Pillar backend
|
|
4
4
|
*/
|
|
5
|
-
import type { TaskButtonData } from
|
|
6
|
-
import type { ResolvedConfig } from
|
|
7
|
-
import type { Context, Suggestion, UserProfile } from
|
|
8
|
-
import type { Workflow } from
|
|
9
|
-
import type { UserContextItem } from
|
|
10
|
-
import type { ActionRequest, ChatImage, ImageUploadResponse } from
|
|
11
|
-
import { MCPClient } from
|
|
5
|
+
import type { TaskButtonData } from "../components/Panel/TaskButton";
|
|
6
|
+
import type { ResolvedConfig } from "../core/config";
|
|
7
|
+
import type { Context, Suggestion, UserProfile } from "../core/context";
|
|
8
|
+
import type { Workflow } from "../core/workflow";
|
|
9
|
+
import type { UserContextItem } from "../types/user-context";
|
|
10
|
+
import type { ActionRequest, ChatImage, ImageUploadResponse } from "./mcp-client";
|
|
11
|
+
import { MCPClient } from "./mcp-client";
|
|
12
12
|
export interface ArticleSummary {
|
|
13
13
|
id: string;
|
|
14
14
|
title: string;
|
|
@@ -17,7 +17,7 @@ export interface ArticleSummary {
|
|
|
17
17
|
category_name?: string;
|
|
18
18
|
}
|
|
19
19
|
export interface ChatMessage {
|
|
20
|
-
role:
|
|
20
|
+
role: "user" | "assistant";
|
|
21
21
|
content: string;
|
|
22
22
|
}
|
|
23
23
|
export interface SuggestedQuestion {
|
|
@@ -53,7 +53,7 @@ export interface ProgressEvent {
|
|
|
53
53
|
kind: string;
|
|
54
54
|
id?: string;
|
|
55
55
|
label?: string;
|
|
56
|
-
status?:
|
|
56
|
+
status?: "active" | "done" | "error";
|
|
57
57
|
text?: string;
|
|
58
58
|
children?: ProgressChild[];
|
|
59
59
|
metadata?: Record<string, unknown>;
|
|
@@ -67,7 +67,7 @@ export interface ProgressEvent {
|
|
|
67
67
|
export interface ServerEmbedConfig {
|
|
68
68
|
panel?: {
|
|
69
69
|
enabled?: boolean;
|
|
70
|
-
position?:
|
|
70
|
+
position?: "left" | "right";
|
|
71
71
|
width?: number;
|
|
72
72
|
};
|
|
73
73
|
floatingButton?: {
|
|
@@ -97,7 +97,7 @@ export interface ConversationSummary {
|
|
|
97
97
|
* Used for UI display of the agent's reasoning process.
|
|
98
98
|
*/
|
|
99
99
|
export interface DisplayStep {
|
|
100
|
-
step_type:
|
|
100
|
+
step_type: "thinking" | "tool_decision" | "parallel_tool_decision" | "tool_result" | "token_summary" | "step_start" | "generating" | "narration";
|
|
101
101
|
iteration?: number;
|
|
102
102
|
timestamp_ms?: number;
|
|
103
103
|
content?: string;
|
|
@@ -119,10 +119,11 @@ export interface DisplayStep {
|
|
|
119
119
|
*/
|
|
120
120
|
export interface HistoryMessage {
|
|
121
121
|
id: string;
|
|
122
|
-
role:
|
|
122
|
+
role: "user" | "assistant";
|
|
123
123
|
content: string;
|
|
124
124
|
timestamp: string | null;
|
|
125
125
|
display_trace?: DisplayStep[];
|
|
126
|
+
images?: ChatImage[];
|
|
126
127
|
}
|
|
127
128
|
/**
|
|
128
129
|
* Full conversation with messages.
|
|
@@ -186,13 +187,22 @@ export declare class APIClient {
|
|
|
186
187
|
* @returns Promise with signed URL and expiration
|
|
187
188
|
*/
|
|
188
189
|
uploadImage(file: File): Promise<ImageUploadResponse>;
|
|
189
|
-
chat(
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
190
|
+
chat(opts: {
|
|
191
|
+
message: string;
|
|
192
|
+
history?: ChatMessage[];
|
|
193
|
+
onChunk?: (chunk: string) => void;
|
|
194
|
+
articleSlug?: string;
|
|
195
|
+
existingConversationId?: string | null;
|
|
196
|
+
onActions?: (actions: TaskButtonData[]) => void;
|
|
197
|
+
userContext?: UserContextItem[];
|
|
198
|
+
images?: ChatImage[];
|
|
199
|
+
onProgress?: (progress: ProgressEvent) => void;
|
|
200
|
+
onConversationStarted?: (conversationId: string, assistantMessageId?: string) => void;
|
|
201
|
+
onActionRequest?: (request: ActionRequest) => Promise<void>;
|
|
202
|
+
signal?: AbortSignal;
|
|
203
|
+
onRequestId?: (requestId: number) => void;
|
|
204
|
+
resume?: boolean;
|
|
205
|
+
}): Promise<ChatResponse>;
|
|
196
206
|
/**
|
|
197
207
|
* Submit feedback on an AI assistant message.
|
|
198
208
|
* Fire-and-forget - errors are logged but don't throw.
|
|
@@ -201,7 +211,7 @@ export declare class APIClient {
|
|
|
201
211
|
* @param feedback - 'up' for helpful, 'down' for not helpful
|
|
202
212
|
* @param comment - Optional comment explaining the feedback
|
|
203
213
|
*/
|
|
204
|
-
submitFeedback(messageId: string, feedback:
|
|
214
|
+
submitFeedback(messageId: string, feedback: "up" | "down", comment?: string): Promise<void>;
|
|
205
215
|
/**
|
|
206
216
|
* Confirm task execution result.
|
|
207
217
|
* Called by the SDK after a customer's task handler completes.
|
|
@@ -211,7 +221,7 @@ export declare class APIClient {
|
|
|
211
221
|
* @param status - 'success' or 'failure'
|
|
212
222
|
* @param details - Optional execution details
|
|
213
223
|
*/
|
|
214
|
-
confirmTaskExecution(taskId: string, status:
|
|
224
|
+
confirmTaskExecution(taskId: string, status: "success" | "failure", details?: {
|
|
215
225
|
error?: string;
|
|
216
226
|
duration_ms?: number;
|
|
217
227
|
session_id?: string;
|
|
@@ -223,13 +233,6 @@ export declare class APIClient {
|
|
|
223
233
|
* Returns relevant articles, videos, and actions.
|
|
224
234
|
*/
|
|
225
235
|
getSuggestions(ctx: Context, userProfile: UserProfile): Promise<Suggestion[]>;
|
|
226
|
-
/**
|
|
227
|
-
* Chat with enhanced context.
|
|
228
|
-
* Includes product context and user profile for better responses.
|
|
229
|
-
*
|
|
230
|
-
* Note: Context is passed to the MCP ask tool as additional arguments.
|
|
231
|
-
*/
|
|
232
|
-
chatWithContext(message: string, history: ChatMessage[] | undefined, ctx: Context, userProfile: UserProfile, onChunk?: (chunk: string) => void, existingConversationId?: string | null, onActions?: (actions: TaskButtonData[]) => void): Promise<ChatResponse>;
|
|
233
236
|
/**
|
|
234
237
|
* Identify the current user after login.
|
|
235
238
|
* Links the anonymous visitor to the authenticated user ID, enabling
|
package/dist/api/mcp-client.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import type { TaskButtonData } from '../components/Panel/TaskButton';
|
|
|
8
8
|
import type { ResolvedConfig } from '../core/config';
|
|
9
9
|
import type { UserContextItem } from '../types/user-context';
|
|
10
10
|
import { type LogEntry } from '../utils/debug';
|
|
11
|
-
import type { ArticleSummary } from './client';
|
|
11
|
+
import type { ArticleSummary, DisplayStep } from './client';
|
|
12
12
|
/** MCP Tool result content */
|
|
13
13
|
interface ToolResultContent {
|
|
14
14
|
type: 'text' | 'image' | 'resource';
|
|
@@ -123,10 +123,13 @@ export interface ChatImage {
|
|
|
123
123
|
url: string;
|
|
124
124
|
/** Detail level for image analysis. 'low' is faster and cheaper. */
|
|
125
125
|
detail?: 'low' | 'high';
|
|
126
|
+
/** GCS storage path for URL refresh on history load */
|
|
127
|
+
path?: string;
|
|
126
128
|
}
|
|
127
129
|
/** Response from image upload endpoint */
|
|
128
130
|
export interface ImageUploadResponse {
|
|
129
131
|
url: string;
|
|
132
|
+
path: string;
|
|
130
133
|
expires_at: string;
|
|
131
134
|
}
|
|
132
135
|
export declare class MCPClient {
|
|
@@ -201,6 +204,8 @@ export declare class MCPClient {
|
|
|
201
204
|
signal?: AbortSignal;
|
|
202
205
|
/** Conversation ID - generated client-side, always provided */
|
|
203
206
|
conversationId?: string;
|
|
207
|
+
/** Resume an interrupted session (sends empty query, loads state server-side) */
|
|
208
|
+
resume?: boolean;
|
|
204
209
|
}): Promise<ToolResult>;
|
|
205
210
|
/**
|
|
206
211
|
* Cancel an active streaming request.
|
|
@@ -250,21 +255,6 @@ export declare class MCPClient {
|
|
|
250
255
|
* @returns Session status with resumption details, or null if not resumable
|
|
251
256
|
*/
|
|
252
257
|
getConversationStatus(conversationId: string): Promise<ConversationStatus | null>;
|
|
253
|
-
/**
|
|
254
|
-
* Resume an interrupted conversation.
|
|
255
|
-
*
|
|
256
|
-
* Returns a streaming response that continues the conversation
|
|
257
|
-
* from where it was interrupted.
|
|
258
|
-
*
|
|
259
|
-
* @param conversationId - The conversation to resume
|
|
260
|
-
* @param userContext - Optional current page context (highlighted text, DOM snapshot, etc.)
|
|
261
|
-
* @param callbacks - Streaming callbacks
|
|
262
|
-
*/
|
|
263
|
-
resumeConversation(conversationId: string, userContext: UserContextItem[] | undefined, callbacks: StreamCallbacks): Promise<void>;
|
|
264
|
-
/**
|
|
265
|
-
* Handle events from the resume stream.
|
|
266
|
-
*/
|
|
267
|
-
private handleResumeStreamEvent;
|
|
268
258
|
}
|
|
269
259
|
/**
|
|
270
260
|
* Conversation status for session resumption.
|
|
@@ -275,11 +265,8 @@ export interface ConversationStatus {
|
|
|
275
265
|
elapsed_ms?: number;
|
|
276
266
|
user_message?: string;
|
|
277
267
|
partial_response?: string;
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
action: string;
|
|
281
|
-
result_summary: string;
|
|
282
|
-
}>;
|
|
268
|
+
display_trace?: DisplayStep[];
|
|
269
|
+
registered_actions?: Record<string, unknown>[];
|
|
283
270
|
}
|
|
284
271
|
/**
|
|
285
272
|
* Convert ActionData from MCP response to TaskButtonData for UI rendering.
|
|
@@ -26,6 +26,12 @@ export declare class EdgeTrigger {
|
|
|
26
26
|
private unsubscribeActiveTab;
|
|
27
27
|
private themeObserver;
|
|
28
28
|
private currentTheme;
|
|
29
|
+
private _isResizing;
|
|
30
|
+
private _resizeStartX;
|
|
31
|
+
private _resizeStartWidth;
|
|
32
|
+
private _resizeRafId;
|
|
33
|
+
private _boundHandleResizeMove;
|
|
34
|
+
private _boundHandleResizeEnd;
|
|
29
35
|
constructor(config: ResolvedConfig, events: EventEmitter, onClick: () => void, rootContainer?: HTMLElement | null);
|
|
30
36
|
/**
|
|
31
37
|
* Handle tab click - sets active tab and opens panel
|
|
@@ -75,5 +81,17 @@ export declare class EdgeTrigger {
|
|
|
75
81
|
* Destroy the trigger
|
|
76
82
|
*/
|
|
77
83
|
destroy(): void;
|
|
84
|
+
/**
|
|
85
|
+
* Handle resize start from mouse or touch event on the drag handle
|
|
86
|
+
*/
|
|
87
|
+
private handleResizeStart;
|
|
88
|
+
/**
|
|
89
|
+
* Handle resize move - throttled via requestAnimationFrame
|
|
90
|
+
*/
|
|
91
|
+
private handleResizeMove;
|
|
92
|
+
/**
|
|
93
|
+
* Handle resize end - save final width and clean up
|
|
94
|
+
*/
|
|
95
|
+
private handleResizeEnd;
|
|
78
96
|
private render;
|
|
79
97
|
}
|
|
@@ -17,7 +17,3 @@ export declare function createDefaultConfirmCard(action: TaskButtonData, callbac
|
|
|
17
17
|
* Uses custom renderer if registered, otherwise uses default.
|
|
18
18
|
*/
|
|
19
19
|
export declare function createConfirmActionCard(action: TaskButtonData, onConfirm: (data?: Record<string, unknown>) => void, onCancel: () => void): HTMLDivElement;
|
|
20
|
-
/**
|
|
21
|
-
* CSS styles for ConfirmActionCard.
|
|
22
|
-
*/
|
|
23
|
-
export declare const CONFIRM_CARD_STYLES = "\n/* Confirm Action Card */\n.pillar-confirm-card-wrapper {\n margin-top: 12px;\n}\n\n.pillar-confirm-card {\n background: var(--pillar-bg-secondary, #f9fafb);\n border: 1px solid var(--pillar-border, #e5e7eb);\n border-radius: 12px;\n overflow: hidden;\n}\n\n.pillar-confirm-card__content {\n padding: 16px;\n}\n\n.pillar-confirm-card__header {\n margin-bottom: 12px;\n}\n\n.pillar-confirm-card__title {\n font-size: 14px;\n font-weight: 600;\n color: var(--pillar-text-primary, #111827);\n}\n\n.pillar-confirm-card__data {\n background: var(--pillar-bg-primary, #ffffff);\n border: 1px solid var(--pillar-border, #e5e7eb);\n border-radius: 8px;\n padding: 12px;\n margin-bottom: 12px;\n}\n\n.pillar-confirm-card__data-row {\n display: flex;\n gap: 8px;\n font-size: 13px;\n margin-bottom: 4px;\n}\n\n.pillar-confirm-card__data-row:last-child {\n margin-bottom: 0;\n}\n\n.pillar-confirm-card__data-key {\n color: var(--pillar-text-secondary, #6b7280);\n flex-shrink: 0;\n}\n\n.pillar-confirm-card__data-value {\n color: var(--pillar-text-primary, #111827);\n word-break: break-word;\n}\n\n.pillar-confirm-card__actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n}\n\n.pillar-confirm-card__btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 14px;\n font-size: 13px;\n font-weight: 500;\n font-family: inherit;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.15s ease;\n border: 1px solid transparent;\n}\n\n.pillar-confirm-card__btn:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.pillar-confirm-card__btn svg {\n width: 16px;\n height: 16px;\n}\n\n.pillar-confirm-card__btn--primary {\n background: var(--pillar-primary, #2563eb);\n color: #ffffff;\n border-color: var(--pillar-primary, #2563eb);\n}\n\n.pillar-confirm-card__btn--primary:hover:not(:disabled) {\n background: var(--pillar-primary-hover, #1d4ed8);\n border-color: var(--pillar-primary-hover, #1d4ed8);\n}\n\n.pillar-confirm-card__btn--secondary {\n background: var(--pillar-bg-primary, #ffffff);\n color: var(--pillar-text-secondary, #6b7280);\n border-color: var(--pillar-border, #e5e7eb);\n}\n\n.pillar-confirm-card__btn--secondary:hover:not(:disabled) {\n background: var(--pillar-bg-secondary, #f9fafb);\n}\n\n.pillar-confirm-card__success {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 8px;\n padding: 16px;\n color: #059669;\n font-weight: 500;\n}\n\n.pillar-confirm-card__success-icon svg {\n width: 20px;\n height: 20px;\n}\n\n.pillar-confirm-card__error {\n background: #fef2f2;\n border: 1px solid #fecaca;\n border-radius: 8px;\n padding: 12px;\n margin-bottom: 12px;\n color: #dc2626;\n font-size: 13px;\n}\n\n.pillar-confirm-card__spinner {\n display: inline-flex;\n animation: pillar-spin 1s linear infinite;\n}\n\n@keyframes pillar-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n";
|
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Components for rendering interactive cards in chat responses.
|
|
5
5
|
*/
|
|
6
|
-
export { createConfirmActionCard, createDefaultConfirmCard,
|
|
6
|
+
export { createConfirmActionCard, createDefaultConfirmCard, } from './ConfirmActionCard';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Panel Header Component
|
|
3
|
-
* Navigation header with back, home, history, and close buttons
|
|
3
|
+
* Navigation header with back, home, history, and close buttons.
|
|
4
|
+
* In mobile mode, the header doubles as a drag handle: swipe down to dismiss.
|
|
4
5
|
*/
|
|
5
6
|
import { type ViewType } from "../../store/router";
|
|
6
7
|
interface HeaderProps {
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* Panel Container Component
|
|
3
3
|
* Shadow DOM container for the help panel with Preact rendering
|
|
4
4
|
*/
|
|
5
|
-
import type { APIClient } from
|
|
6
|
-
import type { ResolvedConfig } from
|
|
7
|
-
import type { EventEmitter } from
|
|
5
|
+
import type { APIClient } from "../../api/client";
|
|
6
|
+
import type { ResolvedConfig } from "../../core/config";
|
|
7
|
+
import type { EventEmitter } from "../../core/events";
|
|
8
8
|
export declare class Panel {
|
|
9
9
|
private config;
|
|
10
10
|
private api;
|
|
@@ -54,6 +54,12 @@ export declare class Panel {
|
|
|
54
54
|
*/
|
|
55
55
|
destroy(): void;
|
|
56
56
|
private subscribeToState;
|
|
57
|
+
/**
|
|
58
|
+
* Toggle backdrop visibility using inline styles.
|
|
59
|
+
* The backdrop is created with inline styles, so we must toggle via
|
|
60
|
+
* inline styles too (class-based overrides lose to inline specificity).
|
|
61
|
+
*/
|
|
62
|
+
private setBackdropVisible;
|
|
57
63
|
private applyPushModeStyles;
|
|
58
64
|
private removePushModeStyles;
|
|
59
65
|
/**
|
|
@@ -101,5 +107,5 @@ export declare class Panel {
|
|
|
101
107
|
/**
|
|
102
108
|
* Update the theme at runtime
|
|
103
109
|
*/
|
|
104
|
-
setTheme(themeConfig: Partial<ResolvedConfig[
|
|
110
|
+
setTheme(themeConfig: Partial<ResolvedConfig["theme"]>): void;
|
|
105
111
|
}
|
|
@@ -42,8 +42,4 @@ export declare function createTaskButton(props: TaskButtonProps): HTMLButtonElem
|
|
|
42
42
|
* Create a container with multiple task buttons.
|
|
43
43
|
*/
|
|
44
44
|
export declare function createTaskButtonGroup(tasks: TaskButtonData[]): HTMLDivElement;
|
|
45
|
-
/**
|
|
46
|
-
* CSS styles for TaskButton (to be added to PANEL_STYLES).
|
|
47
|
-
*/
|
|
48
|
-
export declare const TASK_BUTTON_STYLES = "\n/* Task Button Component */\n.pillar-task-btn {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 8px 14px;\n font-size: 13px;\n font-weight: 500;\n font-family: inherit;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.15s ease;\n border: 1px solid transparent;\n text-decoration: none;\n}\n\n.pillar-task-btn__icon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n}\n\n.pillar-task-btn__icon svg {\n width: 16px;\n height: 16px;\n}\n\n.pillar-task-btn__label {\n white-space: nowrap;\n}\n\n/* Primary variant (default) */\n.pillar-task-btn--primary {\n background: #2563eb;\n color: #ffffff;\n border-color: #2563eb;\n}\n\n.pillar-task-btn--primary:hover {\n background: #1d4ed8;\n border-color: #1d4ed8;\n}\n\n/* Default variant */\n.pillar-task-btn--default {\n background: #f3f4f6;\n color: #1a1a1a;\n border-color: #e5e7eb;\n}\n\n.pillar-task-btn--default:hover {\n background: #e5e7eb;\n}\n\n/* Secondary variant */\n.pillar-task-btn--secondary {\n background: #eff6ff;\n color: #2563eb;\n border-color: #dbeafe;\n}\n\n.pillar-task-btn--secondary:hover {\n background: #dbeafe;\n}\n\n/* Outline variant */\n.pillar-task-btn--outline {\n background: transparent;\n color: #2563eb;\n border-color: #2563eb;\n}\n\n.pillar-task-btn--outline:hover {\n background: #eff6ff;\n}\n\n/* Ghost variant */\n.pillar-task-btn--ghost {\n background: transparent;\n color: #6b7280;\n border-color: transparent;\n}\n\n.pillar-task-btn--ghost:hover {\n background: #f3f4f6;\n color: #1a1a1a;\n}\n\n/* Active state for inline_ui buttons with expanded card */\n.pillar-task-btn--active {\n background: #1d4ed8;\n border-color: #1d4ed8;\n}\n\n/* Task button group */\n.pillar-task-btn-group {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-top: 12px;\n}\n\n/* Inline card container for inline_ui actions */\n.pillar-task-btn-inline-card {\n margin-top: 12px;\n animation: pillar-slide-down 0.15s ease-out;\n}\n\n@keyframes pillar-slide-down {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* Task suggestion card in chat */\n.pillar-task-suggestion {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px;\n background: #f9fafb;\n border: 1px solid #e5e7eb;\n border-radius: 12px;\n margin-top: 12px;\n}\n\n.pillar-task-suggestion__header {\n display: flex;\n align-items: center;\n gap: 6px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: #6b7280;\n}\n\n.pillar-task-suggestion__header svg {\n width: 14px;\n height: 14px;\n}\n\n.pillar-task-suggestion__description {\n font-size: 13px;\n color: #374151;\n}\n";
|
|
49
45
|
export {};
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* Reusable input with context tags and image upload support
|
|
4
4
|
* Used across all views in the SDK
|
|
5
5
|
*/
|
|
6
|
-
import { type ChatImage } from
|
|
7
|
-
import type { UserContextItem } from
|
|
6
|
+
import { type ChatImage } from "../../store/chat";
|
|
7
|
+
import type { UserContextItem } from "../../types";
|
|
8
8
|
interface UnifiedChatInputProps {
|
|
9
9
|
/** Placeholder text for the input */
|
|
10
10
|
placeholder?: string;
|
|
@@ -6,4 +6,3 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import { h } from 'preact';
|
|
8
8
|
export declare function WorkflowChecklist(): h.JSX.Element | null;
|
|
9
|
-
export declare const WORKFLOW_STYLES = "\n/* Workflow Checklist Container */\n.pillar-workflow {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 16px;\n background: #f9fafb;\n border: 1px solid #e5e7eb;\n border-radius: 12px;\n margin: 12px 0;\n}\n\n/* Header */\n.pillar-workflow__header {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.pillar-workflow__icon {\n display: flex;\n align-items: center;\n justify-content: center;\n color: #6b7280;\n}\n\n.pillar-workflow__title {\n flex: 1;\n font-size: 14px;\n font-weight: 600;\n color: #1a1a1a;\n}\n\n.pillar-workflow__progress {\n font-size: 12px;\n font-weight: 500;\n color: #6b7280;\n padding: 2px 8px;\n background: #e5e7eb;\n border-radius: 10px;\n}\n\n.pillar-workflow__description {\n font-size: 13px;\n color: #6b7280;\n}\n\n/* Steps List */\n.pillar-workflow__steps {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n/* Individual Step */\n.pillar-workflow-step {\n display: flex;\n align-items: flex-start;\n gap: 10px;\n padding: 10px 12px;\n background: #ffffff;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n transition: all 0.15s ease;\n}\n\n.pillar-workflow-step__icon {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 24px;\n height: 24px;\n color: #9ca3af;\n}\n\n.pillar-workflow-step__icon svg {\n width: 18px;\n height: 18px;\n}\n\n.pillar-workflow-step__content {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.pillar-workflow-step__label {\n font-size: 13px;\n font-weight: 500;\n color: #374151;\n}\n\n.pillar-workflow-step__note {\n font-size: 12px;\n color: #9ca3af;\n}\n\n.pillar-workflow-step__status-text {\n font-size: 12px;\n color: #2563eb;\n font-style: italic;\n}\n\n.pillar-workflow-step__actions {\n display: flex;\n gap: 8px;\n margin-top: 4px;\n}\n\n/* Step States */\n.pillar-workflow-step--pending {\n opacity: 0.6;\n}\n\n.pillar-workflow-step--awaiting_initiation {\n background: #fef3c7;\n border-color: #fcd34d;\n}\n\n.pillar-workflow-step--awaiting_initiation .pillar-workflow-step__icon {\n color: #d97706;\n}\n\n.pillar-workflow-step--active {\n background: #eff6ff;\n border-color: #93c5fd;\n}\n\n.pillar-workflow-step--active .pillar-workflow-step__icon {\n color: #2563eb;\n}\n\n.pillar-workflow-step--completed .pillar-workflow-step__icon {\n color: #059669;\n}\n\n.pillar-workflow-step--completed .pillar-workflow-step__label {\n text-decoration: line-through;\n color: #6b7280;\n}\n\n.pillar-workflow-step--skipped {\n opacity: 0.5;\n}\n\n.pillar-workflow-step--skipped .pillar-workflow-step__icon {\n color: #9ca3af;\n}\n\n.pillar-workflow-step--skipped .pillar-workflow-step__label {\n text-decoration: line-through;\n color: #9ca3af;\n}\n\n.pillar-workflow-step--failed {\n background: #fef2f2;\n border-color: #fca5a5;\n}\n\n.pillar-workflow-step--failed .pillar-workflow-step__icon {\n color: #dc2626;\n}\n\n/* Start Button */\n.pillar-workflow-step__start-btn {\n display: inline-flex;\n align-items: center;\n padding: 6px 12px;\n font-size: 12px;\n font-weight: 600;\n font-family: inherit;\n background: #2563eb;\n color: #ffffff;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.pillar-workflow-step__start-btn:hover {\n background: #1d4ed8;\n}\n\n/* Skip Button */\n.pillar-workflow-step__skip-btn {\n display: inline-flex;\n align-items: center;\n padding: 6px 12px;\n font-size: 12px;\n font-weight: 500;\n font-family: inherit;\n background: transparent;\n color: #6b7280;\n border: 1px solid #d1d5db;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.pillar-workflow-step__skip-btn:hover {\n background: #f3f4f6;\n color: #374151;\n}\n\n/* Spinner Animation for Active Step */\n@keyframes pillar-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n.pillar-workflow-step__spinner {\n animation: pillar-spin 1s linear infinite;\n}\n\n/* Footer */\n.pillar-workflow__footer {\n display: flex;\n justify-content: flex-end;\n padding-top: 8px;\n border-top: 1px solid #e5e7eb;\n}\n\n.pillar-workflow__cancel-btn {\n padding: 6px 12px;\n font-size: 12px;\n font-weight: 500;\n font-family: inherit;\n background: transparent;\n color: #9ca3af;\n border: none;\n cursor: pointer;\n transition: all 0.15s ease;\n}\n\n.pillar-workflow__cancel-btn:hover {\n color: #dc2626;\n}\n";
|
|
@@ -7,7 +7,6 @@ export { Header } from './Header';
|
|
|
7
7
|
export { ChatInput } from './ChatInput';
|
|
8
8
|
export { UnifiedChatInput } from './UnifiedChatInput';
|
|
9
9
|
export { ContextTag, ContextTagList } from './ContextTag';
|
|
10
|
-
export {
|
|
11
|
-
export { createTaskButton, createTaskButtonGroup, TASK_BUTTON_STYLES } from './TaskButton';
|
|
10
|
+
export { createTaskButton, createTaskButtonGroup } from './TaskButton';
|
|
12
11
|
export type { TaskButtonData } from './TaskButton';
|
|
13
|
-
export { WorkflowChecklist
|
|
12
|
+
export { WorkflowChecklist } from './WorkflowChecklist';
|