@pillar-ai/sdk 0.1.26 → 0.1.28

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.
Files changed (64) hide show
  1. package/dist/cli/sync.js +3 -0
  2. package/dist/components/Progress/SecretReveal.d.ts +12 -0
  3. package/dist/core/Pillar.d.ts +6 -6
  4. package/dist/core/config.d.ts +25 -0
  5. package/dist/index.d.ts +1 -1
  6. package/dist/pillar.esm.js +1 -1
  7. package/dist/tools/types.d.ts +11 -0
  8. package/package.json +1 -1
  9. package/dist/actions/definitions/analytics.d.ts +0 -18
  10. package/dist/actions/definitions/content.d.ts +0 -40
  11. package/dist/actions/definitions/index.d.ts +0 -26
  12. package/dist/actions/definitions/navigation.d.ts +0 -65
  13. package/dist/actions/definitions/settings.d.ts +0 -162
  14. package/dist/actions/definitions/sources.d.ts +0 -44
  15. package/dist/actions/definitions/support.d.ts +0 -15
  16. package/dist/actions/definitions/team.d.ts +0 -120
  17. package/dist/api/ag-ui-adapter.d.ts +0 -76
  18. package/dist/api/ag-ui-bridge.d.ts +0 -49
  19. package/dist/api/ag-ui-client.d.ts +0 -102
  20. package/dist/api/ag-ui-handler.d.ts +0 -89
  21. package/dist/button/FloatingButton.d.ts +0 -44
  22. package/dist/components/Button/FloatingButton.d.ts +0 -46
  23. package/dist/components/DevTools/DOMScannerPreview.d.ts +0 -21
  24. package/dist/components/Progress/AGUIProgress.d.ts +0 -15
  25. package/dist/components/Tooltips/Tooltip.d.ts +0 -46
  26. package/dist/components/Tooltips/TooltipManager.d.ts +0 -41
  27. package/dist/components/Tooltips/index.d.ts +0 -6
  28. package/dist/components/Tooltips/styles.d.ts +0 -5
  29. package/dist/components/Views/ArticleChatView.d.ts +0 -9
  30. package/dist/components/Views/ArticleView.d.ts +0 -10
  31. package/dist/components/Views/CategoryView.d.ts +0 -11
  32. package/dist/components/Views/DeveloperView.d.ts +0 -6
  33. package/dist/components/Views/SearchView.d.ts +0 -10
  34. package/dist/components/shared/ArticleCard.d.ts +0 -17
  35. package/dist/components/shared/CategoryCard.d.ts +0 -17
  36. package/dist/content/extensions/AccordionNode.d.ts +0 -10
  37. package/dist/content/extensions/CalloutNode.d.ts +0 -11
  38. package/dist/content/extensions/index.d.ts +0 -5
  39. package/dist/content/index.d.ts +0 -5
  40. package/dist/content/renderer.d.ts +0 -24
  41. package/dist/panel/Panel.d.ts +0 -53
  42. package/dist/panel/PanelUI.d.ts +0 -43
  43. package/dist/panel/components/ArticleCard.d.ts +0 -10
  44. package/dist/panel/components/CategoryCard.d.ts +0 -10
  45. package/dist/panel/components/ChatInput.d.ts +0 -36
  46. package/dist/panel/components/Header.d.ts +0 -16
  47. package/dist/panel/components/SearchInput.d.ts +0 -11
  48. package/dist/panel/styles.d.ts +0 -5
  49. package/dist/panel/views/ArticleView.d.ts +0 -21
  50. package/dist/panel/views/CategoryView.d.ts +0 -20
  51. package/dist/panel/views/ChatView.d.ts +0 -30
  52. package/dist/panel/views/HomeView.d.ts +0 -18
  53. package/dist/panel/views/SearchView.d.ts +0 -22
  54. package/dist/store/developer.d.ts +0 -19
  55. package/dist/store/tooltips.d.ts +0 -21
  56. package/dist/tooltips/Tooltip.d.ts +0 -63
  57. package/dist/tooltips/TooltipManager.d.ts +0 -42
  58. package/dist/tooltips/styles.d.ts +0 -5
  59. package/dist/ui/config.d.ts +0 -96
  60. package/dist/ui/executor.d.ts +0 -75
  61. package/dist/ui/index.d.ts +0 -11
  62. package/dist/ui/scanner.d.ts +0 -105
  63. package/dist/ui/types.d.ts +0 -293
  64. package/dist/utils/markdown.d.ts +0 -9
@@ -1,43 +0,0 @@
1
- /**
2
- * Panel UI Controller
3
- * Manages panel navigation and view rendering with persistent chat input
4
- */
5
- import type { EventEmitter } from '../core/events';
6
- import type { APIClient } from '../api/client';
7
- export type ViewType = 'home' | 'article' | 'search' | 'category';
8
- export interface PanelUIOptions {
9
- api: APIClient;
10
- events: EventEmitter;
11
- onClose: () => void;
12
- }
13
- export declare class PanelUI {
14
- private options;
15
- private container;
16
- private header;
17
- private content;
18
- private chatInput;
19
- private homeView;
20
- private articleView;
21
- private searchView;
22
- private categoryView;
23
- private viewStack;
24
- private currentView;
25
- constructor(options: PanelUIOptions);
26
- render(): HTMLElement;
27
- /**
28
- * Show the initial view when panel opens for the first time
29
- * or when no view is currently displayed
30
- */
31
- showInitialView(): void;
32
- navigate(view: ViewType, params?: Record<string, string>): void;
33
- goBack(): void;
34
- reset(): void;
35
- private renderView;
36
- private renderHomeView;
37
- private renderArticleView;
38
- private renderSearchView;
39
- private renderCategoryView;
40
- private updateHeader;
41
- private destroyCurrentView;
42
- destroy(): void;
43
- }
@@ -1,10 +0,0 @@
1
- /**
2
- * Article Card Component
3
- */
4
- import type { ArticleSummary } from '../../api/client';
5
- export interface ArticleCardOptions {
6
- article: ArticleSummary;
7
- onClick: (article: ArticleSummary) => void;
8
- }
9
- export declare function createArticleCard(options: ArticleCardOptions): HTMLElement;
10
- export declare function createArticleList(articles: ArticleSummary[], onClick: (article: ArticleSummary) => void): HTMLElement;
@@ -1,10 +0,0 @@
1
- /**
2
- * Category Card Component
3
- */
4
- import type { CategoryData } from '../../api/client';
5
- export interface CategoryCardOptions {
6
- category: CategoryData;
7
- onClick: (category: CategoryData) => void;
8
- }
9
- export declare function createCategoryCard(options: CategoryCardOptions): HTMLElement;
10
- export declare function createCategoryList(categories: CategoryData[], onClick: (category: CategoryData) => void): HTMLElement;
@@ -1,36 +0,0 @@
1
- /**
2
- * Chat Input Component
3
- * Persistent chat input with message display area
4
- */
5
- import type { APIClient, ArticleSummary } from '../../api/client';
6
- export interface ChatInputOptions {
7
- api: APIClient;
8
- onArticleClick: (article: ArticleSummary) => void;
9
- }
10
- export declare class ChatInput {
11
- private options;
12
- private element;
13
- private messagesContainer;
14
- private inputElement;
15
- private sendButton;
16
- private messages;
17
- private isLoading;
18
- private isExpanded;
19
- constructor(options: ChatInputOptions);
20
- render(): HTMLElement;
21
- private createInputArea;
22
- private handleSend;
23
- private expand;
24
- private addWelcomeMessage;
25
- private addMessage;
26
- private createAssistantMessageElement;
27
- private createSourcesElement;
28
- private formatMessageContent;
29
- private setLoading;
30
- private scrollToBottom;
31
- /**
32
- * Reset the chat state
33
- */
34
- reset(): void;
35
- destroy(): void;
36
- }
@@ -1,16 +0,0 @@
1
- /**
2
- * Panel Header Component
3
- * Displays title, back button, home button, and close button
4
- */
5
- export interface HeaderOptions {
6
- title: string;
7
- showBack?: boolean;
8
- showHome?: boolean;
9
- onBack?: () => void;
10
- onHome?: () => void;
11
- onClose?: () => void;
12
- }
13
- export declare function createHeader(options: HeaderOptions): HTMLElement;
14
- export declare function updateHeaderTitle(header: HTMLElement, title: string): void;
15
- export declare function setBackButtonVisible(header: HTMLElement, visible: boolean): void;
16
- export declare function setHomeButtonVisible(header: HTMLElement, visible: boolean): void;
@@ -1,11 +0,0 @@
1
- /**
2
- * Search Input Component
3
- */
4
- export interface SearchInputOptions {
5
- placeholder?: string;
6
- onSearch: (query: string) => void;
7
- debounceMs?: number;
8
- }
9
- export declare function createSearchInput(options: SearchInputOptions): HTMLElement;
10
- export declare function setSearchValue(container: HTMLElement, value: string): void;
11
- export declare function focusSearch(container: HTMLElement): void;
@@ -1,5 +0,0 @@
1
- /**
2
- * Panel CSS Styles
3
- * Complete styling for the help panel (injected into Shadow DOM)
4
- */
5
- export declare const PANEL_STYLES = "\n/* Reset and base styles */\n*, *::before, *::after {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n}\n\n:host {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n font-size: 14px;\n line-height: 1.5;\n color: #1a1a1a;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n/* Panel Container */\n.pillar-panel {\n position: fixed;\n top: 0;\n bottom: 0;\n width: var(--pillar-panel-width, 380px);\n max-width: 100vw;\n background: #ffffff;\n box-shadow: -4px 0 20px rgba(0, 0, 0, 0.1);\n display: flex;\n flex-direction: column;\n z-index: 99999;\n transform: translateX(100%);\n transition: transform 0.3s ease;\n}\n\n.pillar-panel--right {\n right: 0;\n}\n\n.pillar-panel--left {\n left: 0;\n box-shadow: 4px 0 20px rgba(0, 0, 0, 0.1);\n transform: translateX(-100%);\n}\n\n.pillar-panel--open {\n transform: translateX(0);\n}\n\n/* Panel UI - Main layout */\n.pillar-panel-ui {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n}\n\n/* Backdrop */\n.pillar-backdrop {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.3);\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n z-index: 99998;\n}\n\n.pillar-backdrop--visible {\n opacity: 1;\n visibility: visible;\n}\n\n/* Header */\n.pillar-panel__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid #e5e7eb;\n flex-shrink: 0;\n}\n\n.pillar-panel__header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.pillar-panel__back-btn,\n.pillar-panel__home-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n color: #6b7280;\n background: none;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: color 0.15s ease, background 0.15s ease;\n}\n\n.pillar-panel__back-btn:hover,\n.pillar-panel__home-btn:hover {\n color: #1a1a1a;\n background: #f3f4f6;\n}\n\n.pillar-panel__back-btn svg,\n.pillar-panel__home-btn svg {\n width: 20px;\n height: 20px;\n}\n\n.pillar-panel__title {\n font-size: 16px;\n font-weight: 600;\n color: #1a1a1a;\n}\n\n.pillar-panel__close-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n padding: 0;\n color: #6b7280;\n background: none;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: color 0.15s ease, background 0.15s ease;\n}\n\n.pillar-panel__close-btn:hover {\n color: #1a1a1a;\n background: #f3f4f6;\n}\n\n.pillar-panel__close-btn svg {\n width: 20px;\n height: 20px;\n}\n\n/* Content area */\n.pillar-panel__content {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n min-height: 0;\n}\n\n/* Search Input */\n.pillar-search {\n position: relative;\n padding: 16px 20px;\n}\n\n.pillar-search__input {\n width: 100%;\n padding: 10px 12px 10px 40px;\n font-size: 14px;\n color: #1a1a1a;\n background: #f9fafb;\n border: 1px solid #e5e7eb;\n border-radius: 8px;\n outline: none;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n}\n\n.pillar-search__input:focus {\n border-color: #2563eb;\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.pillar-search__input::placeholder {\n color: #9ca3af;\n}\n\n.pillar-search__icon {\n position: absolute;\n left: 32px;\n top: 50%;\n transform: translateY(-50%);\n width: 18px;\n height: 18px;\n color: #9ca3af;\n pointer-events: none;\n}\n\n/* Category Card */\n.pillar-category-card {\n display: flex;\n align-items: flex-start;\n gap: 14px;\n padding: 16px 20px;\n border-bottom: 1px solid #f3f4f6;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.pillar-category-card:hover {\n background: #f9fafb;\n}\n\n.pillar-category-card__icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n background: #eff6ff;\n border-radius: 10px;\n color: #2563eb;\n flex-shrink: 0;\n}\n\n.pillar-category-card__icon svg {\n width: 20px;\n height: 20px;\n}\n\n.pillar-category-card__content {\n flex: 1;\n min-width: 0;\n}\n\n.pillar-category-card__title {\n font-size: 15px;\n font-weight: 500;\n color: #1a1a1a;\n margin-bottom: 2px;\n}\n\n.pillar-category-card__description {\n font-size: 13px;\n color: #6b7280;\n}\n\n.pillar-category-card__count {\n font-size: 12px;\n color: #9ca3af;\n margin-top: 4px;\n}\n\n/* Article Card */\n.pillar-article-card {\n display: block;\n padding: 16px 20px;\n border-bottom: 1px solid #f3f4f6;\n cursor: pointer;\n transition: background 0.15s ease;\n text-decoration: none;\n color: inherit;\n}\n\n.pillar-article-card:hover {\n background: #f9fafb;\n}\n\n.pillar-article-card__title {\n font-size: 15px;\n font-weight: 500;\n color: #1a1a1a;\n margin-bottom: 4px;\n}\n\n.pillar-article-card__excerpt {\n font-size: 13px;\n color: #6b7280;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n}\n\n.pillar-article-card__meta {\n display: flex;\n align-items: center;\n gap: 8px;\n margin-top: 8px;\n font-size: 12px;\n color: #9ca3af;\n}\n\n/* Article Content */\n.pillar-article {\n padding: 20px;\n}\n\n.pillar-article__title {\n font-size: 20px;\n font-weight: 600;\n color: #1a1a1a;\n margin-bottom: 16px;\n}\n\n.pillar-article__content {\n font-size: 15px;\n line-height: 1.7;\n color: #374151;\n}\n\n.pillar-article__content h1,\n.pillar-article__content h2,\n.pillar-article__content h3,\n.pillar-article__content h4 {\n color: #1a1a1a;\n margin: 24px 0 12px;\n font-weight: 600;\n}\n\n.pillar-article__content h2 {\n font-size: 18px;\n}\n\n.pillar-article__content h3 {\n font-size: 16px;\n}\n\n.pillar-article__content p {\n margin: 0 0 16px;\n}\n\n.pillar-article__content ul,\n.pillar-article__content ol {\n margin: 0 0 16px;\n padding-left: 24px;\n}\n\n.pillar-article__content li {\n margin-bottom: 8px;\n}\n\n.pillar-article__content a {\n color: #2563eb;\n text-decoration: none;\n}\n\n.pillar-article__content a:hover {\n text-decoration: underline;\n}\n\n.pillar-article__content code {\n padding: 2px 6px;\n font-size: 13px;\n background: #f3f4f6;\n border-radius: 4px;\n font-family: 'SF Mono', Consolas, monospace;\n}\n\n.pillar-article__content pre {\n padding: 16px;\n margin: 0 0 16px;\n background: #1a1a1a;\n border-radius: 8px;\n overflow-x: auto;\n}\n\n.pillar-article__content pre code {\n padding: 0;\n background: none;\n color: #e5e7eb;\n}\n\n.pillar-article__content img {\n max-width: 100%;\n height: auto;\n border-radius: 8px;\n margin: 16px 0;\n}\n\n/* ============================================================================\n Persistent Chat Input (bottom of panel)\n ============================================================================ */\n\n.pillar-chat-input-container {\n flex-shrink: 0;\n border-top: 1px solid #e5e7eb;\n background: #ffffff;\n display: flex;\n flex-direction: column;\n max-height: 50%;\n transition: max-height 0.3s ease;\n}\n\n.pillar-chat-input-container--expanded {\n max-height: 60%;\n}\n\n/* Messages area */\n.pillar-chat-input__messages {\n flex: 1;\n overflow-y: auto;\n padding: 0;\n max-height: 0;\n transition: max-height 0.3s ease, padding 0.3s ease;\n}\n\n.pillar-chat-input-container--expanded .pillar-chat-input__messages {\n max-height: 300px;\n padding: 16px 20px;\n}\n\n.pillar-chat-input__message {\n margin-bottom: 12px;\n}\n\n.pillar-chat-input__message--user {\n text-align: right;\n}\n\n.pillar-chat-input__message-content {\n display: inline-block;\n max-width: 85%;\n padding: 10px 14px;\n border-radius: 16px;\n font-size: 14px;\n line-height: 1.5;\n}\n\n.pillar-chat-input__message--user .pillar-chat-input__message-content {\n background: #2563eb;\n color: #ffffff;\n border-bottom-right-radius: 4px;\n}\n\n.pillar-chat-input__message--assistant .pillar-chat-input__message-content {\n background: #f3f4f6;\n color: #1a1a1a;\n border-bottom-left-radius: 4px;\n}\n\n.pillar-chat-input__sources {\n margin-top: 8px;\n padding-top: 8px;\n border-top: 1px solid #e5e7eb;\n}\n\n.pillar-chat-input__sources-title {\n font-size: 11px;\n font-weight: 500;\n color: #6b7280;\n margin-bottom: 6px;\n}\n\n.pillar-chat-input__source {\n display: block;\n padding: 6px 10px;\n margin-bottom: 4px;\n font-size: 12px;\n color: #2563eb;\n background: #eff6ff;\n border-radius: 6px;\n text-decoration: none;\n cursor: pointer;\n}\n\n.pillar-chat-input__source:hover {\n background: #dbeafe;\n}\n\n/* Input area */\n.pillar-chat-input__area {\n padding: 12px 16px;\n}\n\n.pillar-chat-input__wrapper {\n display: flex;\n gap: 8px;\n align-items: flex-end;\n}\n\n.pillar-chat-input__input {\n flex: 1;\n padding: 10px 14px;\n font-size: 14px;\n font-family: inherit;\n color: #1a1a1a;\n background: #f9fafb;\n border: 1px solid #e5e7eb;\n border-radius: 20px;\n outline: none;\n resize: none;\n min-height: 40px;\n max-height: 120px;\n transition: border-color 0.15s ease, box-shadow 0.15s ease;\n}\n\n.pillar-chat-input__input:focus {\n border-color: #2563eb;\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.pillar-chat-input__input::placeholder {\n color: #9ca3af;\n}\n\n.pillar-chat-input__send-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n padding: 0;\n color: #ffffff;\n background: #2563eb;\n border: none;\n border-radius: 20px;\n cursor: pointer;\n flex-shrink: 0;\n transition: background 0.15s ease;\n}\n\n.pillar-chat-input__send-btn:hover:not(:disabled) {\n background: #1d4ed8;\n}\n\n.pillar-chat-input__send-btn:disabled {\n background: #9ca3af;\n cursor: not-allowed;\n}\n\n.pillar-chat-input__send-btn svg {\n width: 18px;\n height: 18px;\n}\n\n/* ============================================================================\n Legacy Chat View (for backwards compatibility)\n ============================================================================ */\n\n.pillar-chat {\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.pillar-chat__messages {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px;\n}\n\n.pillar-chat__message {\n margin-bottom: 16px;\n}\n\n.pillar-chat__message--user {\n text-align: right;\n}\n\n.pillar-chat__message-content {\n display: inline-block;\n max-width: 85%;\n padding: 12px 16px;\n border-radius: 16px;\n font-size: 14px;\n line-height: 1.5;\n}\n\n.pillar-chat__message--user .pillar-chat__message-content {\n background: #2563eb;\n color: #ffffff;\n border-bottom-right-radius: 4px;\n}\n\n.pillar-chat__message--assistant .pillar-chat__message-content {\n background: #f3f4f6;\n color: #1a1a1a;\n border-bottom-left-radius: 4px;\n}\n\n.pillar-chat__sources {\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid #e5e7eb;\n}\n\n.pillar-chat__sources-title {\n font-size: 12px;\n font-weight: 500;\n color: #6b7280;\n margin-bottom: 8px;\n}\n\n.pillar-chat__source {\n display: block;\n padding: 8px 12px;\n margin-bottom: 4px;\n font-size: 13px;\n color: #2563eb;\n background: #eff6ff;\n border-radius: 6px;\n text-decoration: none;\n cursor: pointer;\n}\n\n.pillar-chat__source:hover {\n background: #dbeafe;\n}\n\n.pillar-chat__input-area {\n padding: 16px 20px;\n border-top: 1px solid #e5e7eb;\n background: #ffffff;\n}\n\n.pillar-chat__input-wrapper {\n display: flex;\n gap: 8px;\n}\n\n.pillar-chat__input {\n flex: 1;\n padding: 10px 14px;\n font-size: 14px;\n color: #1a1a1a;\n background: #f9fafb;\n border: 1px solid #e5e7eb;\n border-radius: 20px;\n outline: none;\n resize: none;\n min-height: 40px;\n max-height: 120px;\n}\n\n.pillar-chat__input:focus {\n border-color: #2563eb;\n box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);\n}\n\n.pillar-chat__send-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n padding: 0;\n color: #ffffff;\n background: #2563eb;\n border: none;\n border-radius: 20px;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.pillar-chat__send-btn:hover:not(:disabled) {\n background: #1d4ed8;\n}\n\n.pillar-chat__send-btn:disabled {\n background: #9ca3af;\n cursor: not-allowed;\n}\n\n.pillar-chat__send-btn svg {\n width: 18px;\n height: 18px;\n}\n\n/* Loading states */\n.pillar-loading {\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n color: #6b7280;\n}\n\n.pillar-loading__spinner {\n width: 24px;\n height: 24px;\n border: 2px solid #e5e7eb;\n border-top-color: #2563eb;\n border-radius: 50%;\n animation: pillar-spin 0.8s linear infinite;\n}\n\n@keyframes pillar-spin {\n to { transform: rotate(360deg); }\n}\n\n/* Empty states */\n.pillar-empty {\n padding: 40px 20px;\n text-align: center;\n color: #6b7280;\n}\n\n.pillar-empty__icon {\n width: 48px;\n height: 48px;\n margin: 0 auto 16px;\n color: #d1d5db;\n}\n\n.pillar-empty__title {\n font-size: 16px;\n font-weight: 500;\n color: #1a1a1a;\n margin-bottom: 4px;\n}\n\n.pillar-empty__description {\n font-size: 14px;\n}\n\n/* Section titles */\n.pillar-section-title {\n padding: 12px 20px 8px;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: #6b7280;\n}\n\n/* Chat entry button (legacy - kept for backwards compatibility) */\n.pillar-chat-entry {\n display: flex;\n align-items: center;\n gap: 12px;\n margin: 16px 20px;\n padding: 14px 16px;\n background: linear-gradient(135deg, #2563eb 0%, #1d4ed8 100%);\n border: none;\n border-radius: 12px;\n cursor: pointer;\n transition: transform 0.15s ease, box-shadow 0.15s ease;\n}\n\n.pillar-chat-entry:hover {\n transform: translateY(-1px);\n box-shadow: 0 4px 12px rgba(37, 99, 235, 0.3);\n}\n\n.pillar-chat-entry__icon {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 36px;\n height: 36px;\n background: rgba(255, 255, 255, 0.2);\n border-radius: 10px;\n color: #ffffff;\n}\n\n.pillar-chat-entry__icon svg {\n width: 20px;\n height: 20px;\n}\n\n.pillar-chat-entry__content {\n flex: 1;\n text-align: left;\n}\n\n.pillar-chat-entry__title {\n font-size: 15px;\n font-weight: 600;\n color: #ffffff;\n margin-bottom: 2px;\n}\n\n.pillar-chat-entry__description {\n font-size: 13px;\n color: rgba(255, 255, 255, 0.8);\n}\n\n/* Scrollbar styling */\n.pillar-panel__content::-webkit-scrollbar,\n.pillar-chat__messages::-webkit-scrollbar,\n.pillar-chat-input__messages::-webkit-scrollbar {\n width: 6px;\n}\n\n.pillar-panel__content::-webkit-scrollbar-track,\n.pillar-chat__messages::-webkit-scrollbar-track,\n.pillar-chat-input__messages::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.pillar-panel__content::-webkit-scrollbar-thumb,\n.pillar-chat__messages::-webkit-scrollbar-thumb,\n.pillar-chat-input__messages::-webkit-scrollbar-thumb {\n background: #d1d5db;\n border-radius: 3px;\n}\n\n.pillar-panel__content::-webkit-scrollbar-thumb:hover,\n.pillar-chat__messages::-webkit-scrollbar-thumb:hover,\n.pillar-chat-input__messages::-webkit-scrollbar-thumb:hover {\n background: #9ca3af;\n}\n\n/* Home view */\n.pillar-home-view {\n padding-bottom: 16px;\n}\n";
@@ -1,21 +0,0 @@
1
- /**
2
- * Article View
3
- * Displays article content using TipTap for rendering
4
- */
5
- import type { APIClient, ArticleSummary } from '../../api/client';
6
- export interface ArticleViewOptions {
7
- api: APIClient;
8
- onArticleClick: (article: ArticleSummary) => void;
9
- }
10
- export declare class ArticleView {
11
- private options;
12
- private element;
13
- private currentSlug;
14
- constructor(options: ArticleViewOptions);
15
- render(slug: string): Promise<HTMLElement>;
16
- private loadArticle;
17
- private createArticleElement;
18
- private createRelatedArticles;
19
- getTitle(): string;
20
- destroy(): void;
21
- }
@@ -1,20 +0,0 @@
1
- /**
2
- * Category View
3
- * Displays articles within a category
4
- */
5
- import type { APIClient, CategoryData, ArticleSummary } from '../../api/client';
6
- export interface CategoryViewOptions {
7
- api: APIClient;
8
- onArticleClick: (article: ArticleSummary) => void;
9
- }
10
- export declare class CategoryView {
11
- private options;
12
- private element;
13
- private currentCategory;
14
- constructor(options: CategoryViewOptions);
15
- render(category: CategoryData): Promise<HTMLElement>;
16
- private createCategoryHeader;
17
- private loadArticles;
18
- getTitle(): string;
19
- destroy(): void;
20
- }
@@ -1,30 +0,0 @@
1
- /**
2
- * Chat View
3
- * AI chat interface with streaming responses
4
- */
5
- import type { APIClient, ArticleSummary } from '../../api/client';
6
- export interface ChatViewOptions {
7
- api: APIClient;
8
- onArticleClick: (article: ArticleSummary) => void;
9
- }
10
- export declare class ChatView {
11
- private options;
12
- private element;
13
- private messagesContainer;
14
- private inputElement;
15
- private sendButton;
16
- private messages;
17
- private isLoading;
18
- constructor(options: ChatViewOptions);
19
- render(): HTMLElement;
20
- private createInputArea;
21
- private addWelcomeMessage;
22
- private handleSend;
23
- private addMessage;
24
- private createAssistantMessageElement;
25
- private createSourcesElement;
26
- private formatMessageContent;
27
- private setLoading;
28
- private scrollToBottom;
29
- destroy(): void;
30
- }
@@ -1,18 +0,0 @@
1
- /**
2
- * Home View
3
- * Default panel view with categories list
4
- */
5
- import type { APIClient, CategoryData } from '../../api/client';
6
- export interface HomeViewOptions {
7
- api: APIClient;
8
- onCategoryClick: (category: CategoryData) => void;
9
- }
10
- export declare class HomeView {
11
- private options;
12
- private element;
13
- private categoriesLoaded;
14
- constructor(options: HomeViewOptions);
15
- render(): HTMLElement;
16
- private loadCategories;
17
- destroy(): void;
18
- }
@@ -1,22 +0,0 @@
1
- /**
2
- * Search View
3
- * Search results display
4
- */
5
- import type { APIClient, ArticleSummary } from '../../api/client';
6
- export interface SearchViewOptions {
7
- api: APIClient;
8
- onArticleClick: (article: ArticleSummary) => void;
9
- initialQuery?: string;
10
- }
11
- export declare class SearchView {
12
- private options;
13
- private element;
14
- private resultsContainer;
15
- private currentQuery;
16
- constructor(options: SearchViewOptions);
17
- render(): HTMLElement;
18
- private handleSearch;
19
- private showEmptyState;
20
- private showNoResults;
21
- destroy(): void;
22
- }
@@ -1,19 +0,0 @@
1
- /**
2
- * Developer Store
3
- * Signal-based state for developer mode features
4
- */
5
- export declare const selectedAction: import("@preact/signals-core").Signal<string | null>;
6
- export declare const actionData: import("@preact/signals-core").Signal<string>;
7
- export declare const executionResult: import("@preact/signals-core").Signal<{
8
- type: "success" | "error";
9
- message: string;
10
- } | null>;
11
- export declare const isExecuting: import("@preact/signals-core").Signal<boolean>;
12
- export declare const setSelectedAction: (actionName: string | null) => void;
13
- export declare const setActionData: (data: string) => void;
14
- export declare const setExecutionResult: (result: {
15
- type: "success" | "error";
16
- message: string;
17
- } | null) => void;
18
- export declare const setIsExecuting: (executing: boolean) => void;
19
- export declare const resetDeveloperStore: () => void;
@@ -1,21 +0,0 @@
1
- /**
2
- * Tooltips Store
3
- * Signal-based state for tooltip visibility and data
4
- */
5
- import type { TooltipData } from '../api/client';
6
- export interface TooltipInstance {
7
- id: string;
8
- data: TooltipData;
9
- anchor: HTMLElement;
10
- isVisible: boolean;
11
- }
12
- export declare const tooltips: import("@preact/signals-core").Signal<Map<string, TooltipInstance>>;
13
- export declare const visibleTooltipId: import("@preact/signals-core").Signal<string | null>;
14
- export declare const visibleTooltip: import("@preact/signals-core").ReadonlySignal<TooltipInstance | null>;
15
- export declare const tooltipCount: import("@preact/signals-core").ReadonlySignal<number>;
16
- export declare const registerTooltip: (id: string, data: TooltipData, anchor: HTMLElement) => void;
17
- export declare const unregisterTooltip: (id: string) => void;
18
- export declare const showTooltip: (id: string) => void;
19
- export declare const hideTooltip: (id: string) => void;
20
- export declare const hideAllTooltips: () => void;
21
- export declare const resetTooltips: () => void;
@@ -1,63 +0,0 @@
1
- /**
2
- * Individual Tooltip Component
3
- * Handles rendering and positioning of a single tooltip
4
- */
5
- import type { TooltipData } from '../api/client';
6
- import type { TooltipTrigger, TooltipPosition } from '../core/config';
7
- export interface TooltipOptions {
8
- trigger: TooltipTrigger;
9
- position: TooltipPosition;
10
- onLearnMore?: (articleSlug: string) => void;
11
- onShow?: () => void;
12
- onHide?: () => void;
13
- }
14
- export declare class Tooltip {
15
- private id;
16
- private data;
17
- private anchor;
18
- private options;
19
- private element;
20
- private arrow;
21
- private iconElement;
22
- private isVisible;
23
- private hideTimeout;
24
- constructor(data: TooltipData, anchor: HTMLElement, options: TooltipOptions);
25
- /**
26
- * Initialize the tooltip
27
- */
28
- init(): void;
29
- /**
30
- * Show the tooltip
31
- */
32
- show(): void;
33
- /**
34
- * Hide the tooltip
35
- */
36
- hide(): void;
37
- /**
38
- * Toggle tooltip visibility
39
- */
40
- toggle(): void;
41
- /**
42
- * Update tooltip position
43
- */
44
- updatePosition(): void;
45
- /**
46
- * Destroy the tooltip
47
- */
48
- destroy(): void;
49
- private createElement;
50
- private createIcon;
51
- private bindEvents;
52
- private unbindEvents;
53
- private handleMouseEnter;
54
- private handleTooltipMouseEnter;
55
- private handleMouseLeave;
56
- private handleClick;
57
- private handleDocumentClick;
58
- private handleFocus;
59
- private handleBlur;
60
- private handleKeyDown;
61
- private handleScroll;
62
- private handleResize;
63
- }
@@ -1,42 +0,0 @@
1
- /**
2
- * Tooltip Manager
3
- * Scans DOM for tooltip elements and manages their lifecycle
4
- */
5
- import type { EventEmitter } from '../core/events';
6
- import type { ResolvedConfig } from '../core/config';
7
- import type { APIClient } from '../api/client';
8
- export declare class TooltipManager {
9
- private config;
10
- private api;
11
- private events;
12
- private tooltips;
13
- private tooltipData;
14
- private observer;
15
- private stylesInjected;
16
- constructor(config: ResolvedConfig, api: APIClient, events: EventEmitter);
17
- /**
18
- * Initialize the tooltip manager
19
- */
20
- init(): Promise<void>;
21
- /**
22
- * Scan DOM for tooltip elements and initialize them
23
- */
24
- scan(): Promise<void>;
25
- /**
26
- * Show a specific tooltip
27
- */
28
- show(tooltipId: string): void;
29
- /**
30
- * Hide a specific tooltip
31
- */
32
- hide(tooltipId: string): void;
33
- /**
34
- * Destroy the tooltip manager
35
- */
36
- destroy(): void;
37
- private createTooltip;
38
- private setupObserver;
39
- private handleRemovedElement;
40
- private getElementKey;
41
- private getTooltipDataForElement;
42
- }
@@ -1,5 +0,0 @@
1
- /**
2
- * Tooltip CSS Styles
3
- * Injected into the document head
4
- */
5
- export declare const TOOLTIP_STYLES = "\n/* Pillar Tooltip Styles */\n.pillar-tooltip {\n position: absolute;\n z-index: 99999;\n max-width: 320px;\n padding: 12px 16px;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;\n font-size: 14px;\n line-height: 1.5;\n color: #1a1a1a;\n background: #ffffff;\n border-radius: 8px;\n box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.05);\n pointer-events: auto;\n opacity: 0;\n transform: scale(0.95);\n transition: opacity 0.15s ease, transform 0.15s ease;\n}\n\n.pillar-tooltip.pillar-tooltip--visible {\n opacity: 1;\n transform: scale(1);\n}\n\n.pillar-tooltip__content {\n margin: 0;\n}\n\n.pillar-tooltip__content p {\n margin: 0 0 8px;\n}\n\n.pillar-tooltip__content p:last-child {\n margin-bottom: 0;\n}\n\n.pillar-tooltip__content a {\n color: #2563eb;\n text-decoration: none;\n}\n\n.pillar-tooltip__content a:hover {\n text-decoration: underline;\n}\n\n.pillar-tooltip__learn-more {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n margin-top: 12px;\n padding: 6px 12px;\n font-size: 13px;\n font-weight: 500;\n color: #2563eb;\n background: #eff6ff;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n transition: background 0.15s ease;\n}\n\n.pillar-tooltip__learn-more:hover {\n background: #dbeafe;\n}\n\n.pillar-tooltip__learn-more svg {\n width: 14px;\n height: 14px;\n}\n\n/* Arrow */\n.pillar-tooltip__arrow {\n position: absolute;\n width: 12px;\n height: 12px;\n background: #ffffff;\n transform: rotate(45deg);\n box-shadow: -1px -1px 0 0 rgba(0, 0, 0, 0.05);\n}\n\n.pillar-tooltip--top .pillar-tooltip__arrow {\n bottom: -6px;\n box-shadow: 1px 1px 0 0 rgba(0, 0, 0, 0.05);\n}\n\n.pillar-tooltip--bottom .pillar-tooltip__arrow {\n top: -6px;\n}\n\n.pillar-tooltip--left .pillar-tooltip__arrow {\n right: -6px;\n box-shadow: 1px -1px 0 0 rgba(0, 0, 0, 0.05);\n}\n\n.pillar-tooltip--right .pillar-tooltip__arrow {\n left: -6px;\n box-shadow: -1px 1px 0 0 rgba(0, 0, 0, 0.05);\n}\n\n/* Tooltip Icon (for icon trigger) */\n.pillar-tooltip-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 16px;\n height: 16px;\n margin-left: 4px;\n vertical-align: middle;\n color: #6b7280;\n cursor: help;\n transition: color 0.15s ease;\n}\n\n.pillar-tooltip-icon:hover {\n color: #2563eb;\n}\n\n.pillar-tooltip-icon svg {\n width: 100%;\n height: 100%;\n}\n\n/* Close button */\n.pillar-tooltip__close {\n position: absolute;\n top: 8px;\n right: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 20px;\n height: 20px;\n padding: 0;\n color: #9ca3af;\n background: none;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n transition: color 0.15s ease, background 0.15s ease;\n}\n\n.pillar-tooltip__close:hover {\n color: #1a1a1a;\n background: #f3f4f6;\n}\n\n.pillar-tooltip__close svg {\n width: 12px;\n height: 12px;\n}\n";
@@ -1,96 +0,0 @@
1
- /**
2
- * UI Scanner Configuration
3
- *
4
- * Configuration options for the UI scanning system.
5
- */
6
- /**
7
- * Configuration for the UI Scanner.
8
- */
9
- export interface UIScannerConfig {
10
- /**
11
- * Enable automatic UI scanning.
12
- * When true, the page is scanned on init and after interactions.
13
- * @default true
14
- */
15
- enabled: boolean;
16
- /**
17
- * CSS selectors for containers to scan.
18
- * Only elements within these containers will be included.
19
- * Use ['body'] to scan the entire page.
20
- * @default ['body']
21
- */
22
- includeSelectors: string[];
23
- /**
24
- * CSS selectors to exclude from scanning.
25
- * Elements matching these selectors (or within them) will be skipped.
26
- * @default []
27
- */
28
- excludeSelectors: string[];
29
- /**
30
- * Automatically exclude sensitive elements.
31
- * When true, password fields, payment forms, etc. are excluded.
32
- * @default true
33
- */
34
- excludeSensitive: boolean;
35
- /**
36
- * Additional selectors for sensitive elements to exclude.
37
- * These are added to the default sensitive selectors.
38
- * @default []
39
- */
40
- sensitiveSelectors: string[];
41
- /**
42
- * Maximum number of elements to include in the scan.
43
- * Elements are prioritized by visibility and interactability.
44
- * @default 100
45
- */
46
- maxElements: number;
47
- /**
48
- * Automatically rescan after each UI interaction.
49
- * @default true
50
- */
51
- rescanAfterInteraction: boolean;
52
- /**
53
- * Debounce delay for rescanning in milliseconds.
54
- * Prevents excessive scans during rapid interactions.
55
- * @default 300
56
- */
57
- rescanDebounceMs: number;
58
- /**
59
- * Include elements that are currently not visible (scrolled out of view).
60
- * @default false
61
- */
62
- includeOffscreen: boolean;
63
- /**
64
- * Maximum text length for element labels.
65
- * Longer text will be truncated.
66
- * @default 100
67
- */
68
- maxLabelLength: number;
69
- /**
70
- * Maximum text length for context extraction.
71
- * @default 200
72
- */
73
- maxContextLength: number;
74
- }
75
- /**
76
- * Default sensitive element selectors.
77
- * These are excluded when excludeSensitive is true.
78
- */
79
- export declare const DEFAULT_SENSITIVE_SELECTORS: string[];
80
- /**
81
- * Default selectors for interactable elements.
82
- * Used by the scanner to find elements to include.
83
- */
84
- export declare const DEFAULT_INTERACTABLE_SELECTORS: string[];
85
- /**
86
- * Default configuration for the UI Scanner.
87
- */
88
- export declare const DEFAULT_UI_SCANNER_CONFIG: UIScannerConfig;
89
- /**
90
- * Merge user config with defaults.
91
- */
92
- export declare function resolveUIScannerConfig(config?: Partial<UIScannerConfig>): UIScannerConfig;
93
- /**
94
- * Get all sensitive selectors (default + custom).
95
- */
96
- export declare function getSensitiveSelectors(config: UIScannerConfig): string[];
@@ -1,75 +0,0 @@
1
- /**
2
- * UI Interaction Executor
3
- *
4
- * Executes AI-requested interactions on DOM elements.
5
- * Handles clicking, typing, selecting, scrolling, and other interactions.
6
- */
7
- import type { UIScanner } from './scanner';
8
- import type { UIInteraction, UIInteractionResult } from './types';
9
- /**
10
- * Executes UI interactions on DOM elements.
11
- */
12
- export declare class UIInteractionExecutor {
13
- private scanner;
14
- constructor(scanner: UIScanner);
15
- /**
16
- * Execute a UI interaction.
17
- */
18
- execute(interaction: UIInteraction): Promise<UIInteractionResult>;
19
- /**
20
- * Find an element by its Pillar ID.
21
- */
22
- private findElement;
23
- /**
24
- * Wait for an element to become visible.
25
- */
26
- private waitForVisible;
27
- /**
28
- * Check if an element is visible.
29
- */
30
- private isVisible;
31
- /**
32
- * Scroll an element into view.
33
- */
34
- private scrollIntoView;
35
- /**
36
- * Click on an element.
37
- */
38
- private click;
39
- /**
40
- * Type text into an input element.
41
- */
42
- private type;
43
- /**
44
- * Select an option from a select element.
45
- */
46
- private select;
47
- /**
48
- * Scroll to an element.
49
- */
50
- private scroll;
51
- /**
52
- * Hover over an element.
53
- */
54
- private hover;
55
- /**
56
- * Focus an element.
57
- */
58
- private focus;
59
- /**
60
- * Clear an input element's value.
61
- */
62
- private clear;
63
- /**
64
- * Create an error result.
65
- */
66
- private errorResult;
67
- /**
68
- * Sleep for a given number of milliseconds.
69
- */
70
- private sleep;
71
- /**
72
- * Flush microtasks to allow React/Vue state updates.
73
- */
74
- private flushMicrotasks;
75
- }
@@ -1,11 +0,0 @@
1
- /**
2
- * UI Interaction Module
3
- *
4
- * Exports for the UI scanning and interaction system.
5
- */
6
- export type { UIElement, UIElementRect, UIElementSummary, UIElementType, UIInteraction, UIInteractionOptions, UIInteractionResult, UIInteractionType, UIPageState, UIScrollPosition, } from './types';
7
- export { toElementSummary, toPageStateSummary } from './types';
8
- export type { UIScannerConfig } from './config';
9
- export { DEFAULT_INTERACTABLE_SELECTORS, DEFAULT_SENSITIVE_SELECTORS, DEFAULT_UI_SCANNER_CONFIG, getSensitiveSelectors, resolveUIScannerConfig, } from './config';
10
- export { UIScanner } from './scanner';
11
- export { UIInteractionExecutor } from './executor';