@servicetitan/anvil2-ext-atlas 0.0.14 → 0.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.
Files changed (160) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/dist/_commonjsHelpers-B85MJLTf.js +6 -0
  3. package/dist/_commonjsHelpers-B85MJLTf.js.map +1 -0
  4. package/dist/atlas-header-jdAIcEpa.js +23 -0
  5. package/dist/atlas-header-jdAIcEpa.js.map +1 -0
  6. package/dist/atlas-header.d.ts +2 -0
  7. package/dist/atlas-header.js +2 -0
  8. package/dist/atlas-header.js.map +1 -0
  9. package/dist/chat-composer-rich-BM5hoC1f.js +162 -0
  10. package/dist/chat-composer-rich-BM5hoC1f.js.map +1 -0
  11. package/dist/chat-composer-rich.css +119 -0
  12. package/dist/chat-composer-rich.d.ts +2 -0
  13. package/dist/chat-composer-rich.js +2 -0
  14. package/dist/chat-composer-rich.js.map +1 -0
  15. package/dist/chat-window-BEkLTYNg.js +76 -0
  16. package/dist/chat-window-BEkLTYNg.js.map +1 -0
  17. package/dist/chat-window.css +49 -0
  18. package/dist/chat.d.ts +2 -0
  19. package/dist/chat.js +2 -0
  20. package/dist/chat.js.map +1 -0
  21. package/dist/components/atlas-header/atlas-header.d.ts +21 -0
  22. package/dist/components/atlas-header/index.d.ts +2 -0
  23. package/dist/components/chat/chat-window.d.ts +13 -0
  24. package/dist/components/chat/index.d.ts +1 -0
  25. package/dist/components/chat-composer-rich/chat-composer-rich.d.ts +23 -0
  26. package/dist/components/chat-composer-rich/index.d.ts +2 -0
  27. package/dist/components/content/content.d.ts +7 -0
  28. package/dist/components/content/index.d.ts +1 -0
  29. package/dist/components/footer/footer.d.ts +16 -0
  30. package/dist/components/footer/index.d.ts +2 -0
  31. package/dist/components/header/header.d.ts +23 -0
  32. package/dist/components/header/index.d.ts +2 -0
  33. package/dist/components/index.d.ts +16 -1
  34. package/dist/components/infinite-content/hooks/use-infinite-scroll.d.ts +11 -0
  35. package/dist/components/infinite-content/hooks/use-scroll-callback.d.ts +11 -0
  36. package/dist/components/infinite-content/index.d.ts +2 -0
  37. package/dist/components/infinite-content/infinite-content.d.ts +17 -0
  38. package/dist/components/loader/index.d.ts +1 -0
  39. package/dist/components/loader/loader.d.ts +2 -0
  40. package/dist/components/markdown-text/index.d.ts +2 -0
  41. package/dist/components/markdown-text/markdown-text.d.ts +5 -0
  42. package/dist/components/messages/assistant-message.d.ts +10 -0
  43. package/dist/components/messages/error-message.d.ts +8 -0
  44. package/dist/components/messages/index.d.ts +6 -0
  45. package/dist/components/messages/markdown-message.d.ts +13 -0
  46. package/dist/components/messages/message-interface.d.ts +4 -0
  47. package/dist/components/messages/small-action.d.ts +13 -0
  48. package/dist/components/messages/system-message.d.ts +18 -0
  49. package/dist/components/messages/user-message.d.ts +13 -0
  50. package/dist/components/notification-card/index.d.ts +1 -0
  51. package/dist/components/notification-card/notification-card.d.ts +10 -0
  52. package/dist/components/recommendations/confirmation-card/confirmation-card.d.ts +10 -0
  53. package/dist/components/recommendations/confirmation-card/index.d.ts +1 -0
  54. package/dist/components/recommendations/index.d.ts +4 -0
  55. package/dist/components/recommendations/multiple-recommendation-card/index.d.ts +1 -0
  56. package/dist/components/recommendations/multiple-recommendation-card/multiple-recommendation-card.d.ts +7 -0
  57. package/dist/components/recommendations/shared-interfaces.d.ts +26 -0
  58. package/dist/components/recommendations/single-recommendation-card/index.d.ts +1 -0
  59. package/dist/components/recommendations/single-recommendation-card/single-recommendation-card.d.ts +7 -0
  60. package/dist/components/screens/index.d.ts +1 -0
  61. package/dist/components/screens/system-error.d.ts +10 -0
  62. package/dist/components/screens/welcome.d.ts +8 -0
  63. package/dist/components/spinner/index.d.ts +1 -0
  64. package/dist/components/spinner/spinner.d.ts +1 -0
  65. package/dist/components/suggestion/index.d.ts +1 -0
  66. package/dist/components/suggestion/suggestion.d.ts +11 -0
  67. package/dist/components/toolbox/index.d.ts +2 -0
  68. package/dist/components/toolbox/toolbox.d.ts +12 -0
  69. package/dist/components/toolbox/toolbox.enums.d.ts +5 -0
  70. package/dist/content-acT_RzNQ.js +55 -0
  71. package/dist/content-acT_RzNQ.js.map +1 -0
  72. package/dist/content.css +10 -0
  73. package/dist/content.d.ts +2 -0
  74. package/dist/content.js +2 -0
  75. package/dist/content.js.map +1 -0
  76. package/dist/footer-DezXey1O.js +86 -0
  77. package/dist/footer-DezXey1O.js.map +1 -0
  78. package/dist/footer.css +12 -0
  79. package/dist/footer.d.ts +2 -0
  80. package/dist/footer.js +2 -0
  81. package/dist/footer.js.map +1 -0
  82. package/dist/header-DgkrbsFN.js +171 -0
  83. package/dist/header-DgkrbsFN.js.map +1 -0
  84. package/dist/header.css +23 -0
  85. package/dist/header.d.ts +2 -0
  86. package/dist/header.js +2 -0
  87. package/dist/header.js.map +1 -0
  88. package/dist/hooks/index.d.ts +1 -0
  89. package/dist/hooks/use-draggable.d.ts +18 -0
  90. package/dist/index-DDXI3m_u.js +73 -0
  91. package/dist/index-DDXI3m_u.js.map +1 -0
  92. package/dist/index-DFEn2XpE.js +24643 -0
  93. package/dist/index-DFEn2XpE.js.map +1 -0
  94. package/dist/index.js +16 -1
  95. package/dist/index.js.map +1 -1
  96. package/dist/infinite-content-B4ojfnZH.js +144 -0
  97. package/dist/infinite-content-B4ojfnZH.js.map +1 -0
  98. package/dist/infinite-content.css +25 -0
  99. package/dist/infinite-content.d.ts +2 -0
  100. package/dist/infinite-content.js +2 -0
  101. package/dist/infinite-content.js.map +1 -0
  102. package/dist/loader-DYmcO1Y_.js +48 -0
  103. package/dist/loader-DYmcO1Y_.js.map +1 -0
  104. package/dist/loader.d.ts +2 -0
  105. package/dist/loader.js +2 -0
  106. package/dist/loader.js.map +1 -0
  107. package/dist/markdown-text-CKN0oo8R.js +13 -0
  108. package/dist/markdown-text-CKN0oo8R.js.map +1 -0
  109. package/dist/markdown-text.css +45 -0
  110. package/dist/markdown-text.d.ts +2 -0
  111. package/dist/markdown-text.js +2 -0
  112. package/dist/markdown-text.js.map +1 -0
  113. package/dist/messages.d.ts +2 -0
  114. package/dist/messages.js +2 -0
  115. package/dist/messages.js.map +1 -0
  116. package/dist/notification-card-B38ZC7k4.js +59 -0
  117. package/dist/notification-card-B38ZC7k4.js.map +1 -0
  118. package/dist/notification-card.d.ts +2 -0
  119. package/dist/notification-card.js +2 -0
  120. package/dist/notification-card.js.map +1 -0
  121. package/dist/proxy-B3m3ViIw.js +9928 -0
  122. package/dist/proxy-B3m3ViIw.js.map +1 -0
  123. package/dist/recommendations.d.ts +2 -0
  124. package/dist/recommendations.js +2 -0
  125. package/dist/recommendations.js.map +1 -0
  126. package/dist/screens.d.ts +2 -0
  127. package/dist/screens.js +2 -0
  128. package/dist/screens.js.map +1 -0
  129. package/dist/single-recommendation-card-G78KiWnb.js +199 -0
  130. package/dist/single-recommendation-card-G78KiWnb.js.map +1 -0
  131. package/dist/spinner-QnlThoJs.js +23 -0
  132. package/dist/spinner-QnlThoJs.js.map +1 -0
  133. package/dist/spinner.css +21 -0
  134. package/dist/spinner.d.ts +2 -0
  135. package/dist/spinner.js +2 -0
  136. package/dist/spinner.js.map +1 -0
  137. package/dist/suggestion-pJLJZyjg.js +33 -0
  138. package/dist/suggestion-pJLJZyjg.js.map +1 -0
  139. package/dist/suggestion.d.ts +2 -0
  140. package/dist/suggestion.js +2 -0
  141. package/dist/suggestion.js.map +1 -0
  142. package/dist/toolbox-B-mWIaVL.js +272 -0
  143. package/dist/toolbox-B-mWIaVL.js.map +1 -0
  144. package/dist/toolbox.d.ts +2 -0
  145. package/dist/toolbox.js +2 -0
  146. package/dist/toolbox.js.map +1 -0
  147. package/dist/user-message-DCOP95qA.js +247 -0
  148. package/dist/user-message-DCOP95qA.js.map +1 -0
  149. package/dist/user-message.css +170 -0
  150. package/dist/welcome-BY6k2z0K.js +57 -0
  151. package/dist/welcome-BY6k2z0K.js.map +1 -0
  152. package/dist/welcome.css +23 -0
  153. package/package.json +19 -7
  154. package/dist/DummyComponent-ac_BQfhC.js +0 -8
  155. package/dist/DummyComponent-ac_BQfhC.js.map +0 -1
  156. package/dist/DummyComponent.d.ts +0 -2
  157. package/dist/DummyComponent.js +0 -2
  158. package/dist/DummyComponent.js.map +0 -1
  159. package/dist/components/DummyComponent/DummyComponent.d.ts +0 -1
  160. package/dist/components/DummyComponent/index.d.ts +0 -1
@@ -0,0 +1,23 @@
1
+ export interface ChatComposerRichProps {
2
+ message?: string;
3
+ /** Callback when user submits a message */
4
+ onSend?: (text: string) => void;
5
+ /** Placeholder text for the input */
6
+ placeholder?: string;
7
+ /** Whether the composer is disabled */
8
+ disabled?: boolean;
9
+ /** Additional CSS class name */
10
+ className?: string;
11
+ onChange: (text: string) => void;
12
+ /** Callback when upload file is selected from menu */
13
+ onUploadFile?: () => void;
14
+ /** Callback when dictate message is selected from menu */
15
+ onDictateMessage?: () => void;
16
+ /** ID for the menu button */
17
+ menuButtonId?: string;
18
+ /** ID for the send icon button */
19
+ sendIconId?: string;
20
+ /** ID for the message input area */
21
+ messageInputId?: string;
22
+ }
23
+ export declare const ChatComposerRich: ({ message, onSend, onChange, placeholder, disabled, className, onUploadFile, onDictateMessage, messageInputId, sendIconId, }: ChatComposerRichProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export type { ChatComposerRichProps } from './chat-composer-rich';
2
+ export { ChatComposerRich } from './chat-composer-rich';
@@ -0,0 +1,7 @@
1
+ import { FC, PropsWithChildren } from 'react';
2
+ export interface ContentProps {
3
+ itemsLength: number;
4
+ loading?: boolean;
5
+ className?: string;
6
+ }
7
+ export declare const Content: FC<PropsWithChildren<ContentProps>>;
@@ -0,0 +1 @@
1
+ export * from './content';
@@ -0,0 +1,16 @@
1
+ export interface FooterProps {
2
+ isLoading?: boolean;
3
+ message: string;
4
+ placeholder?: string;
5
+ onMessageChange: (value: string) => void;
6
+ onSubmit: () => void;
7
+ className?: string;
8
+ messageInputId?: string;
9
+ sendIconId?: string;
10
+ learnMoreLinkId?: string;
11
+ /** Callback when upload file is selected from menu */
12
+ onUploadFile?: () => void;
13
+ /** Callback when dictate message is selected from menu */
14
+ onDictateMessage?: () => void;
15
+ }
16
+ export declare const Footer: ({ isLoading, placeholder, message, onMessageChange, onSubmit, className, messageInputId, sendIconId, learnMoreLinkId, onUploadFile, onDictateMessage, }: FooterProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export type { FooterProps } from './footer';
2
+ export { Footer } from './footer';
@@ -0,0 +1,23 @@
1
+ import { MouseEvent } from 'react';
2
+ export interface HeaderProps {
3
+ title?: string;
4
+ onMouseDown?: (e: MouseEvent) => void;
5
+ isDragging?: boolean;
6
+ isDraggable?: boolean;
7
+ isExpanded?: boolean;
8
+ disabledChatsIcon?: boolean;
9
+ historyCount?: number;
10
+ titleBadge?: string | number;
11
+ className?: string;
12
+ onBack?: () => void;
13
+ onClose?: () => void;
14
+ onViewHistory?: () => void;
15
+ onFullscreen?: () => void;
16
+ onCreateNewChat?: () => void;
17
+ backButtonId?: string;
18
+ viewHistoryButtonId?: string;
19
+ fullscreenButtonId?: string;
20
+ newChatButtonId?: string;
21
+ closeButtonId?: string;
22
+ }
23
+ export declare const Header: ({ title, onMouseDown, isDraggable, isDragging, onFullscreen, onViewHistory, isExpanded, historyCount, titleBadge, disabledChatsIcon, onClose, onBack, className, onCreateNewChat, backButtonId, viewHistoryButtonId, fullscreenButtonId, newChatButtonId, closeButtonId, }: HeaderProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export type { HeaderProps } from './header';
2
+ export { Header } from './header';
@@ -1 +1,16 @@
1
- export * from './DummyComponent';
1
+ export * from './atlas-header';
2
+ export * from './chat';
3
+ export * from './chat-composer-rich';
4
+ export * from './content';
5
+ export * from './footer';
6
+ export * from './header';
7
+ export * from './infinite-content';
8
+ export * from './loader';
9
+ export * from './markdown-text';
10
+ export * from './messages';
11
+ export * from './notification-card';
12
+ export * from './recommendations';
13
+ export * from './screens';
14
+ export * from './spinner';
15
+ export * from './suggestion';
16
+ export * from './toolbox';
@@ -0,0 +1,11 @@
1
+ interface UseInfiniteScrollOptions {
2
+ hasMore: boolean;
3
+ isLoading: boolean;
4
+ onLoadMore: () => void;
5
+ rootMargin?: string;
6
+ threshold?: number;
7
+ }
8
+ export declare const useInfiniteScroll: ({ hasMore, isLoading, onLoadMore, rootMargin, threshold, }: UseInfiniteScrollOptions) => {
9
+ sentinelRef: import('react').RefObject<HTMLDivElement>;
10
+ };
11
+ export {};
@@ -0,0 +1,11 @@
1
+ interface UseScrollCallbackOptions {
2
+ onScrollDown?: () => void;
3
+ onScrollTop?: () => void;
4
+ threshold?: number;
5
+ element?: HTMLElement | null;
6
+ }
7
+ export declare const useScrollCallback: ({ onScrollDown, onScrollTop, threshold, element, }?: UseScrollCallbackOptions) => {
8
+ lastScrollTop: number;
9
+ hasTriggeredScrollDown: boolean;
10
+ };
11
+ export {};
@@ -0,0 +1,2 @@
1
+ export type { InfiniteContentProps } from './infinite-content';
2
+ export * from './infinite-content';
@@ -0,0 +1,17 @@
1
+ import { FC, PropsWithChildren, ReactNode, RefObject } from 'react';
2
+ export interface InfiniteContentProps {
3
+ loading?: boolean;
4
+ className?: string;
5
+ hasMore?: boolean;
6
+ onLoadMore?: () => void;
7
+ loadingMore?: boolean;
8
+ rootMargin?: string;
9
+ threshold?: number;
10
+ renderLoadingMore?: () => ReactNode;
11
+ renderEndMessage?: () => ReactNode;
12
+ onScrollDown?: () => void;
13
+ onScrollTop?: () => void;
14
+ scrollThreshold?: number;
15
+ scrollContainerRef?: RefObject<HTMLElement>;
16
+ }
17
+ export declare const InfiniteContent: FC<PropsWithChildren<InfiniteContentProps>>;
@@ -0,0 +1 @@
1
+ export * from './loader';
@@ -0,0 +1,2 @@
1
+ import { FC } from 'react';
2
+ export declare const Loader: FC;
@@ -0,0 +1,2 @@
1
+ export type { MarkdownTextProps } from './markdown-text';
2
+ export { MarkdownText } from './markdown-text';
@@ -0,0 +1,5 @@
1
+ import { FC } from 'react';
2
+ export interface MarkdownTextProps {
3
+ text: string;
4
+ }
5
+ export declare const MarkdownText: FC<MarkdownTextProps>;
@@ -0,0 +1,10 @@
1
+ import { FC } from 'react';
2
+ import { Svg } from '@servicetitan/anvil2';
3
+ import { MessageProps } from './message-interface';
4
+ export interface AssistantMessageProps extends MessageProps {
5
+ error?: string | boolean;
6
+ svgIcon?: Svg;
7
+ assistant?: string;
8
+ onRetry?: () => void;
9
+ }
10
+ export declare const AssistantMessage: FC<AssistantMessageProps>;
@@ -0,0 +1,8 @@
1
+ import { FC } from 'react';
2
+ export interface ErrorMessageProps {
3
+ error: string | boolean;
4
+ message?: string;
5
+ onRetry?: () => void;
6
+ className?: string;
7
+ }
8
+ export declare const ErrorMessage: FC<ErrorMessageProps>;
@@ -0,0 +1,6 @@
1
+ export * from './assistant-message';
2
+ export * from './markdown-message';
3
+ export type * from './message-interface';
4
+ export * from './small-action';
5
+ export * from './system-message';
6
+ export * from './user-message';
@@ -0,0 +1,13 @@
1
+ import { FC } from 'react';
2
+ import { Svg } from '@servicetitan/anvil2';
3
+ import { MessageProps } from './message-interface';
4
+ import { ToolboxProps } from '../toolbox';
5
+ export interface MarkdownMessageProps extends MessageProps {
6
+ error?: string;
7
+ svgIcon?: Svg;
8
+ assistant?: string;
9
+ onRetry?: () => void;
10
+ toolboxProps?: Omit<ToolboxProps, "text">;
11
+ }
12
+ export declare const MarkdownMessage: FC<MarkdownMessageProps>;
13
+ export declare const Thinking: FC<MarkdownMessageProps>;
@@ -0,0 +1,4 @@
1
+ export interface MessageProps {
2
+ message?: string;
3
+ className?: string;
4
+ }
@@ -0,0 +1,13 @@
1
+ import { FC } from 'react';
2
+ import { MessageProps } from './message-interface';
3
+ export interface SmallActionProps extends MessageProps {
4
+ recommendationId: string;
5
+ message: string;
6
+ description?: string;
7
+ buttonText?: string;
8
+ onReject: (recommendationId: string) => void | undefined;
9
+ onAccept: (recommendationId: string) => void | undefined;
10
+ buttonDisabled?: boolean;
11
+ className?: string;
12
+ }
13
+ export declare const SmallAction: FC<SmallActionProps>;
@@ -0,0 +1,18 @@
1
+ import { FC } from 'react';
2
+ import { MessageProps } from './message-interface';
3
+ interface SystemMessageRadioOption {
4
+ label: string;
5
+ description?: string;
6
+ value: string;
7
+ }
8
+ interface SystemMessageProps extends MessageProps {
9
+ message: string;
10
+ radioOptions: SystemMessageRadioOption[];
11
+ selectedValue: string;
12
+ onRadioChange: (value: string) => void;
13
+ buttonText: string;
14
+ onSubmit: () => void;
15
+ buttonDisabled?: boolean;
16
+ }
17
+ export declare const SystemMessage: FC<SystemMessageProps>;
18
+ export {};
@@ -0,0 +1,13 @@
1
+ import { FC } from 'react';
2
+ export interface ChatMessage {
3
+ content: string;
4
+ type: "user" | "assistant" | "system";
5
+ }
6
+ interface UserMessageProps {
7
+ message: string;
8
+ className?: string;
9
+ isError?: boolean;
10
+ onRetry?: () => void;
11
+ }
12
+ export declare const UserMessage: FC<UserMessageProps>;
13
+ export {};
@@ -0,0 +1 @@
1
+ export * from './notification-card';
@@ -0,0 +1,10 @@
1
+ import { FC } from 'react';
2
+ interface NotificationCardProps {
3
+ title: string;
4
+ message: string;
5
+ timestamp: string;
6
+ unread?: boolean;
7
+ onClick?: () => void;
8
+ }
9
+ export declare const NotificationCard: FC<NotificationCardProps>;
10
+ export {};
@@ -0,0 +1,10 @@
1
+ import { FC } from 'react';
2
+ import { BaseRecommendationProps, ConfirmationResponse } from '../shared-interfaces';
3
+ export interface ConfirmationRecommendationProps extends BaseRecommendationProps {
4
+ recommendationId?: string;
5
+ message: string;
6
+ description?: string;
7
+ onSubmit: (confirmationResponse: ConfirmationResponse) => void;
8
+ className?: string;
9
+ }
10
+ export declare const ConfirmationCard: FC<ConfirmationRecommendationProps>;
@@ -0,0 +1 @@
1
+ export * from './confirmation-card';
@@ -0,0 +1,4 @@
1
+ export * from './confirmation-card';
2
+ export * from './multiple-recommendation-card';
3
+ export type * from './shared-interfaces';
4
+ export * from './single-recommendation-card';
@@ -0,0 +1 @@
1
+ export * from './multiple-recommendation-card';
@@ -0,0 +1,7 @@
1
+ import { FC } from 'react';
2
+ import { BaseRecommendationProps, Options } from '../shared-interfaces';
3
+ interface MultipleRecommendationProps extends BaseRecommendationProps {
4
+ options: Options[];
5
+ }
6
+ export declare const MultipleRecommendationCard: FC<MultipleRecommendationProps>;
7
+ export {};
@@ -0,0 +1,26 @@
1
+ export interface Options {
2
+ id: string;
3
+ label: string;
4
+ description?: string;
5
+ value?: string;
6
+ }
7
+ export interface ConfirmationResponse {
8
+ actionId: string;
9
+ optionIds?: string[];
10
+ sourceMessageId?: string;
11
+ parameters?: Record<string, string | number | undefined>;
12
+ }
13
+ export interface RecommendationAction {
14
+ id: string;
15
+ name: string;
16
+ type?: string;
17
+ url?: string;
18
+ }
19
+ export interface BaseRecommendationProps {
20
+ recommendationId?: string;
21
+ message: string;
22
+ actions: RecommendationAction[];
23
+ onSubmit: (confirmationResponse: ConfirmationResponse) => void;
24
+ submitted?: boolean;
25
+ selected?: string[];
26
+ }
@@ -0,0 +1 @@
1
+ export * from './single-recommendation-card';
@@ -0,0 +1,7 @@
1
+ import { FC } from 'react';
2
+ import { BaseRecommendationProps, Options } from '../shared-interfaces';
3
+ interface SingleRecommendationProps extends BaseRecommendationProps {
4
+ options: Options[];
5
+ }
6
+ export declare const SingleRecommendationCard: FC<SingleRecommendationProps>;
7
+ export {};
@@ -0,0 +1 @@
1
+ export * from './welcome';
@@ -0,0 +1,10 @@
1
+ import { FC } from 'react';
2
+ import { Svg } from '@servicetitan/anvil2';
3
+ export interface SystemErrorProps {
4
+ text?: string;
5
+ title?: string;
6
+ description?: string;
7
+ icon?: Svg;
8
+ iconColor?: string;
9
+ }
10
+ export declare const SystemError: FC<SystemErrorProps>;
@@ -0,0 +1,8 @@
1
+ import { FC, PropsWithChildren } from 'react';
2
+ export interface WelcomeProps {
3
+ onContinue: () => void;
4
+ title?: string;
5
+ subtitle?: string;
6
+ continueButtonId?: string;
7
+ }
8
+ export declare const Welcome: FC<PropsWithChildren<WelcomeProps>>;
@@ -0,0 +1 @@
1
+ export * from './spinner';
@@ -0,0 +1 @@
1
+ export declare const Spinner: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export * from './suggestion';
@@ -0,0 +1,11 @@
1
+ import { FC } from 'react';
2
+ interface SuggestionProps {
3
+ text: string;
4
+ onClick: (suggestion: string) => void;
5
+ }
6
+ export declare const Suggestion: FC<SuggestionProps>;
7
+ export declare const SuggestionList: FC<{
8
+ suggestions: string[];
9
+ onSelect: (text: string) => void;
10
+ }>;
11
+ export {};
@@ -0,0 +1,2 @@
1
+ export * from './toolbox';
2
+ export * from './toolbox.enums';
@@ -0,0 +1,12 @@
1
+ import { FC } from 'react';
2
+ import { UserFeedback } from './toolbox.enums';
3
+ export interface ToolboxProps {
4
+ text?: string;
5
+ onRetry?: () => Promise<void>;
6
+ onLike?: () => Promise<void>;
7
+ onDislike?: () => Promise<void>;
8
+ onFlag?: () => Promise<void>;
9
+ onPlay?: () => Promise<void>;
10
+ currentFeedback?: UserFeedback;
11
+ }
12
+ export declare const Toolbox: FC<ToolboxProps>;
@@ -0,0 +1,5 @@
1
+ export declare enum UserFeedback {
2
+ None = "None",
3
+ Positive = "Positive",
4
+ Negative = "Negative"
5
+ }
@@ -0,0 +1,55 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useRef, useState, useEffect } from 'react';
3
+ import { c as classNames } from './index-DDXI3m_u.js';
4
+ import { Grid } from '@servicetitan/anvil2';
5
+ import { S as Spinner } from './spinner-QnlThoJs.js';
6
+
7
+ import './content.css';const styles = {
8
+ "chat-content": "_chat-content_xnleg_1"
9
+ };
10
+
11
+ const Content = ({
12
+ children,
13
+ itemsLength,
14
+ loading = false,
15
+ className
16
+ }) => {
17
+ const chatEndRef = useRef(null);
18
+ const containerRef = useRef(null);
19
+ const [isInitialLoad, setIsInitialLoad] = useState(true);
20
+ const [previousMessageCount, setPreviousMessageCount] = useState(0);
21
+ const scrollToBottom = (smooth = true) => {
22
+ if (smooth) {
23
+ chatEndRef.current?.scrollIntoView({ behavior: "smooth", block: "end" });
24
+ } else {
25
+ chatEndRef.current?.scrollIntoView({ behavior: "auto", block: "end" });
26
+ }
27
+ };
28
+ useEffect(() => {
29
+ if (isInitialLoad && itemsLength > 0) {
30
+ scrollToBottom(false);
31
+ setIsInitialLoad(false);
32
+ setPreviousMessageCount(itemsLength);
33
+ } else if (!isInitialLoad && itemsLength > previousMessageCount) {
34
+ scrollToBottom(true);
35
+ setPreviousMessageCount(itemsLength);
36
+ } else if (!isInitialLoad && itemsLength !== previousMessageCount) {
37
+ setPreviousMessageCount(itemsLength);
38
+ }
39
+ }, [itemsLength, isInitialLoad, previousMessageCount]);
40
+ return /* @__PURE__ */ jsxs(
41
+ Grid,
42
+ {
43
+ className: classNames(styles["chat-content"], className),
44
+ ref: containerRef,
45
+ gridColumn: "1 / 13",
46
+ children: [
47
+ loading ? /* @__PURE__ */ jsx(Spinner, {}) : children,
48
+ /* @__PURE__ */ jsx("div", { ref: chatEndRef })
49
+ ]
50
+ }
51
+ );
52
+ };
53
+
54
+ export { Content as C };
55
+ //# sourceMappingURL=content-acT_RzNQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-acT_RzNQ.js","sources":["../src/components/content/content.tsx"],"sourcesContent":["import { FC, PropsWithChildren, useEffect, useRef, useState } from \"react\";\nimport classNames from \"classnames\";\nimport { Grid } from \"@servicetitan/anvil2\";\n\nimport { Spinner } from \"../spinner\";\n\nimport styles from \"./content.module.scss\";\n\nexport interface ContentProps {\n itemsLength: number;\n loading?: boolean;\n className?: string;\n}\n\nexport const Content: FC<PropsWithChildren<ContentProps>> = ({\n children,\n itemsLength,\n loading = false,\n className,\n}) => {\n const chatEndRef = useRef<HTMLDivElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n const [isInitialLoad, setIsInitialLoad] = useState(true);\n const [previousMessageCount, setPreviousMessageCount] = useState(0);\n\n const scrollToBottom = (smooth = true) => {\n if (smooth) {\n chatEndRef.current?.scrollIntoView({ behavior: \"smooth\", block: \"end\" });\n } else {\n chatEndRef.current?.scrollIntoView({ behavior: \"auto\", block: \"end\" });\n }\n };\n\n useEffect(() => {\n if (isInitialLoad && itemsLength > 0) {\n // Initial load: scroll to bottom without smooth animation\n scrollToBottom(false);\n setIsInitialLoad(false);\n setPreviousMessageCount(itemsLength);\n } else if (!isInitialLoad && itemsLength > previousMessageCount) {\n // New messages added: scroll to bottom with smooth animation\n scrollToBottom(true);\n setPreviousMessageCount(itemsLength);\n } else if (!isInitialLoad && itemsLength !== previousMessageCount) {\n // Message count changed but not increased (e.g., conversation switched)\n // Just update the count without scrolling\n setPreviousMessageCount(itemsLength);\n }\n }, [itemsLength, isInitialLoad, previousMessageCount]);\n\n return (\n <Grid\n className={classNames(styles[\"chat-content\"], className)}\n ref={containerRef}\n gridColumn=\"1 / 13\"\n >\n {loading ? <Spinner /> : children}\n <div ref={chatEndRef} />\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAcO,MAAM,UAA+C,CAAC;AAAA,EAC3D,QAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,UAAA,GAAa,OAAuB,IAAI,CAAA;AAC9C,EAAA,MAAM,YAAA,GAAe,OAAuB,IAAI,CAAA;AAChD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,IAAI,CAAA;AACvD,EAAA,MAAM,CAAC,oBAAA,EAAsB,uBAAuB,CAAA,GAAI,SAAS,CAAC,CAAA;AAElE,EAAA,MAAM,cAAA,GAAiB,CAAC,MAAA,GAAS,IAAA,KAAS;AACxC,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,UAAA,CAAW,SAAS,cAAA,CAAe,EAAE,UAAU,QAAA,EAAU,KAAA,EAAO,OAAO,CAAA;AAAA,IACzE,CAAA,MAAO;AACL,MAAA,UAAA,CAAW,SAAS,cAAA,CAAe,EAAE,UAAU,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA;AAAA,IACvE;AAAA,EACF,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,aAAA,IAAiB,cAAc,CAAA,EAAG;AAEpC,MAAA,cAAA,CAAe,KAAK,CAAA;AACpB,MAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,MAAA,uBAAA,CAAwB,WAAW,CAAA;AAAA,IACrC,CAAA,MAAA,IAAW,CAAC,aAAA,IAAiB,WAAA,GAAc,oBAAA,EAAsB;AAE/D,MAAA,cAAA,CAAe,IAAI,CAAA;AACnB,MAAA,uBAAA,CAAwB,WAAW,CAAA;AAAA,IACrC,CAAA,MAAA,IAAW,CAAC,aAAA,IAAiB,WAAA,KAAgB,oBAAA,EAAsB;AAGjE,MAAA,uBAAA,CAAwB,WAAW,CAAA;AAAA,IACrC;AAAA,EACF,CAAA,EAAG,CAAC,WAAA,EAAa,aAAA,EAAe,oBAAoB,CAAC,CAAA;AAErD,EAAA,uBACE,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,UAAA,CAAW,MAAA,CAAO,cAAc,GAAG,SAAS,CAAA;AAAA,MACvD,GAAA,EAAK,YAAA;AAAA,MACL,UAAA,EAAW,QAAA;AAAA,MAEV,QAAA,EAAA;AAAA,QAAA,OAAA,mBAAU,GAAA,CAAC,WAAQ,CAAA,GAAK,QAAA;AAAA,wBACzB,GAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,UAAA,EAAY;AAAA;AAAA;AAAA,GACxB;AAEJ;;;;"}
@@ -0,0 +1,10 @@
1
+ @layer starter, reset, base, state, application;
2
+ ._chat-content_xnleg_1 {
3
+ flex-grow: 1;
4
+ padding: var(--size-4);
5
+ box-sizing: border-box;
6
+ overflow-y: auto;
7
+ display: flex;
8
+ flex-direction: column;
9
+ gap: 8px;
10
+ }
@@ -0,0 +1,2 @@
1
+ export * from './components/content/index'
2
+ export {}
@@ -0,0 +1,2 @@
1
+ export { C as Content } from './content-acT_RzNQ.js';
2
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,86 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { c as classNames } from './index-DDXI3m_u.js';
3
+ import { observer } from 'mobx-react';
4
+ import { Text, Link } from '@servicetitan/anvil2';
5
+ import { C as ChatComposerRich } from './chat-composer-rich-BM5hoC1f.js';
6
+
7
+ import './footer.css';const styles = {
8
+ "chat-footer": "_chat-footer_1kkwo_1"};
9
+
10
+ const Footer = observer(
11
+ ({
12
+ isLoading = false,
13
+ placeholder = "Ask Atlas",
14
+ message,
15
+ onMessageChange,
16
+ onSubmit,
17
+ className,
18
+ messageInputId,
19
+ sendIconId,
20
+ learnMoreLinkId,
21
+ onUploadFile,
22
+ onDictateMessage
23
+ }) => {
24
+ const handleSubmit = () => {
25
+ if (!isLoading) {
26
+ onSubmit();
27
+ }
28
+ };
29
+ return /* @__PURE__ */ jsxs("div", { className: classNames(styles["chat-footer"], className), children: [
30
+ /* @__PURE__ */ jsx(
31
+ ChatComposerRich,
32
+ {
33
+ messageInputId,
34
+ sendIconId,
35
+ placeholder,
36
+ onSend: handleSubmit,
37
+ onChange: onMessageChange,
38
+ message,
39
+ disabled: isLoading,
40
+ onUploadFile,
41
+ onDictateMessage
42
+ }
43
+ ),
44
+ /* @__PURE__ */ jsxs(
45
+ Text,
46
+ {
47
+ subdued: true,
48
+ variant: "body",
49
+ size: "small",
50
+ style: {
51
+ fontSize: "var(--typography-label-size-small)",
52
+ marginBlockStart: "var(--size-1)"
53
+ },
54
+ children: [
55
+ "Atlas is TI-powered, subject to our privacy policy.",
56
+ " ",
57
+ /* @__PURE__ */ jsx(
58
+ Link,
59
+ {
60
+ id: learnMoreLinkId,
61
+ target: "_blank",
62
+ href: "#",
63
+ appearance: "secondary",
64
+ children: /* @__PURE__ */ jsx(
65
+ Text,
66
+ {
67
+ inline: true,
68
+ size: "small",
69
+ subdued: true,
70
+ style: {
71
+ fontSize: "var(--typography-label-size-small)"
72
+ },
73
+ children: "Learn more"
74
+ }
75
+ )
76
+ }
77
+ )
78
+ ]
79
+ }
80
+ )
81
+ ] });
82
+ }
83
+ );
84
+
85
+ export { Footer as F };
86
+ //# sourceMappingURL=footer-DezXey1O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"footer-DezXey1O.js","sources":["../src/components/footer/footer.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport { observer } from \"mobx-react\";\nimport { Link, Text } from \"@servicetitan/anvil2\";\n\nimport { ChatComposerRich } from \"../chat-composer-rich\";\n\nimport styles from \"./footer.module.scss\";\n\nexport interface FooterProps {\n isLoading?: boolean;\n message: string;\n placeholder?: string;\n onMessageChange: (value: string) => void;\n onSubmit: () => void;\n className?: string;\n messageInputId?: string;\n sendIconId?: string;\n learnMoreLinkId?: string;\n /** Callback when upload file is selected from menu */\n onUploadFile?: () => void;\n /** Callback when dictate message is selected from menu */\n onDictateMessage?: () => void;\n}\n\nexport const Footer = observer(\n ({\n isLoading = false,\n placeholder = \"Ask Atlas\",\n message,\n onMessageChange,\n onSubmit,\n className,\n messageInputId,\n sendIconId,\n learnMoreLinkId,\n onUploadFile,\n onDictateMessage,\n }: FooterProps) => {\n const handleSubmit = () => {\n if (!isLoading) {\n onSubmit();\n }\n };\n\n return (\n <div className={classNames(styles[\"chat-footer\"], className)}>\n <ChatComposerRich\n messageInputId={messageInputId}\n sendIconId={sendIconId}\n placeholder={placeholder}\n onSend={handleSubmit}\n onChange={onMessageChange}\n message={message}\n disabled={isLoading}\n onUploadFile={onUploadFile}\n onDictateMessage={onDictateMessage}\n />\n <Text\n subdued\n variant=\"body\"\n size=\"small\"\n style={{\n fontSize: \"var(--typography-label-size-small)\",\n marginBlockStart: \"var(--size-1)\",\n }}\n >\n Atlas is TI-powered, subject to our privacy policy.{\" \"}\n <Link\n id={learnMoreLinkId}\n target=\"_blank\"\n href=\"#\"\n appearance=\"secondary\"\n >\n <Text\n inline\n size=\"small\"\n subdued\n style={{\n fontSize: \"var(--typography-label-size-small)\",\n }}\n >\n Learn more\n </Text>\n </Link>\n </Text>\n </div>\n );\n },\n);\n"],"names":[],"mappings":";;;;;;;;;AAwBO,MAAM,MAAA,GAAS,QAAA;AAAA,EACpB,CAAC;AAAA,IACC,SAAA,GAAY,KAAA;AAAA,IACZ,WAAA,GAAc,WAAA;AAAA,IACd,OAAA;AAAA,IACA,eAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA,eAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF,KAAmB;AACjB,IAAA,MAAM,eAAe,MAAM;AACzB,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,QAAA,EAAS;AAAA,MACX;AAAA,IACF,CAAA;AAEA,IAAA,uBACE,IAAA,CAAC,SAAI,SAAA,EAAW,UAAA,CAAW,OAAO,aAAa,CAAA,EAAG,SAAS,CAAA,EACzD,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,cAAA;AAAA,UACA,UAAA;AAAA,UACA,WAAA;AAAA,UACA,MAAA,EAAQ,YAAA;AAAA,UACR,QAAA,EAAU,eAAA;AAAA,UACV,OAAA;AAAA,UACA,QAAA,EAAU,SAAA;AAAA,UACV,YAAA;AAAA,UACA;AAAA;AAAA,OACF;AAAA,sBACA,IAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAO,IAAA;AAAA,UACP,OAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAK,OAAA;AAAA,UACL,KAAA,EAAO;AAAA,YACL,QAAA,EAAU,oCAAA;AAAA,YACV,gBAAA,EAAkB;AAAA,WACpB;AAAA,UACD,QAAA,EAAA;AAAA,YAAA,qDAAA;AAAA,YACqD,GAAA;AAAA,4BACpD,GAAA;AAAA,cAAC,IAAA;AAAA,cAAA;AAAA,gBACC,EAAA,EAAI,eAAA;AAAA,gBACJ,MAAA,EAAO,QAAA;AAAA,gBACP,IAAA,EAAK,GAAA;AAAA,gBACL,UAAA,EAAW,WAAA;AAAA,gBAEX,QAAA,kBAAA,GAAA;AAAA,kBAAC,IAAA;AAAA,kBAAA;AAAA,oBACC,MAAA,EAAM,IAAA;AAAA,oBACN,IAAA,EAAK,OAAA;AAAA,oBACL,OAAA,EAAO,IAAA;AAAA,oBACP,KAAA,EAAO;AAAA,sBACL,QAAA,EAAU;AAAA,qBACZ;AAAA,oBACD,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AACF;AAAA;AAAA;AACF,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;;;;"}
@@ -0,0 +1,12 @@
1
+ @layer starter, reset, base, state, application;
2
+
3
+ ._chat-footer_1kkwo_1 {
4
+ padding: var(--size-4);
5
+ background-color: var(--color-background);
6
+ border-top: 1px solid var(--color-border);
7
+ }
8
+
9
+ ._chat-footer-description_1kkwo_7 {
10
+ margin-top: var(--size-1);
11
+ font-size: 0.8rem;
12
+ }
@@ -0,0 +1,2 @@
1
+ export * from './components/footer/index'
2
+ export {}