@stack-spot/ai-chat-widget 1.4.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/StackspotAIWidget.d.ts +3 -2
- package/dist/StackspotAIWidget.d.ts.map +1 -1
- package/dist/StackspotAIWidget.js +2 -2
- package/dist/StackspotAIWidget.js.map +1 -1
- package/dist/app-metadata.json +2 -2
- package/dist/state/WidgetState.d.ts +0 -1
- package/dist/state/WidgetState.d.ts.map +1 -1
- package/dist/state/WidgetState.js +4 -10
- package/dist/state/WidgetState.js.map +1 -1
- package/package.json +6 -6
- package/src/StackspotAIWidget.tsx +4 -6
- package/src/app-metadata.json +2 -2
- package/src/state/WidgetState.ts +4 -10
- package/tsconfig.json +8 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.5.0](https://github.com/stack-spot/portal-ai-chat-widget/compare/ai-chat-widget@v1.4.1...ai-chat-widget@v1.5.0) (2024-11-05)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* style feature ([5ef9a29](https://github.com/stack-spot/portal-ai-chat-widget/commit/5ef9a29cede82f6de7aaf90597c92022eb48fd2f))
|
|
9
|
+
|
|
10
|
+
## [1.4.1](https://github.com/stack-spot/portal-ai-chat-widget/compare/ai-chat-widget@v1.4.0...ai-chat-widget@v1.4.1) (2024-11-05)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* release ([b26e08a](https://github.com/stack-spot/portal-ai-chat-widget/commit/b26e08a29bad33faa47f48077f438ef67bcce731))
|
|
16
|
+
|
|
3
17
|
## [1.4.0](https://github.com/stack-spot/portal-ai-chat-widget/compare/ai-chat-widget-v1.3.3...ai-chat-widget@v1.4.0) (2024-11-04)
|
|
4
18
|
|
|
5
19
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { WithStyle } from '@stack-spot/portal-theme';
|
|
1
2
|
import './layout.css';
|
|
2
3
|
import { MinimizedActions } from './types.js';
|
|
3
|
-
export interface AIWidgetProps {
|
|
4
|
+
export interface AIWidgetProps extends WithStyle {
|
|
4
5
|
/**
|
|
5
6
|
* The name of the user currently logged in.
|
|
6
7
|
*/
|
|
@@ -18,5 +19,5 @@ export interface AIWidgetProps {
|
|
|
18
19
|
* Renders a Chat Widget according to the closest model found in the React tree (AIWidgetProvider). If no model is found, a global version
|
|
19
20
|
* of the Chat Widget will be instantiated and used.
|
|
20
21
|
*/
|
|
21
|
-
export declare const StackspotAIWidget: ({ username, minimizedActions, children }: AIWidgetProps) => import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
export declare const StackspotAIWidget: ({ username, minimizedActions, children, className, style }: AIWidgetProps) => import("react/jsx-runtime").JSX.Element;
|
|
22
23
|
//# sourceMappingURL=StackspotAIWidget.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackspotAIWidget.d.ts","sourceRoot":"","sources":["../src/StackspotAIWidget.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StackspotAIWidget.d.ts","sourceRoot":"","sources":["../src/StackspotAIWidget.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAe,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAIjE,OAAO,cAAc,CAAA;AAGrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAc1C,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,+DAAqE,aAAa,4CAmC/G,CAAA"}
|
|
@@ -22,13 +22,13 @@ import { Workspaces } from './views/Workspaces.js';
|
|
|
22
22
|
* Renders a Chat Widget according to the closest model found in the React tree (AIWidgetProvider). If no model is found, a global version
|
|
23
23
|
* of the Chat Widget will be instantiated and used.
|
|
24
24
|
*/
|
|
25
|
-
export const StackspotAIWidget = ({ username, minimizedActions = {}, children }) => {
|
|
25
|
+
export const StackspotAIWidget = ({ username, minimizedActions = {}, children, className, style }) => {
|
|
26
26
|
const rightPanelRef = useRef(null);
|
|
27
27
|
const chatWindowRef = useRef(null);
|
|
28
28
|
const currentChat = useCurrentChatMessages();
|
|
29
29
|
const isMinimized = useWidgetState('isMinimized');
|
|
30
30
|
const isCurrentChatEmpty = currentChat.length === 0;
|
|
31
|
-
return useMemo(() => (_jsx(TooltipProvider, { children: _jsx(RightPanelProvider, { chatWindow: chatWindowRef, panel: rightPanelRef, children: _jsxs("div", { className: listToClass(['ai-chat-widget', isMinimized && 'minimized']), translate: "no", children: [_jsxs("div", { className: "chat-window", ref: chatWindowRef, children: [isMinimized
|
|
31
|
+
return useMemo(() => (_jsx(TooltipProvider, { children: _jsx(RightPanelProvider, { chatWindow: chatWindowRef, panel: rightPanelRef, children: _jsxs("div", { className: listToClass(['ai-chat-widget', isMinimized && 'minimized', className]), translate: "no", style: style, children: [_jsxs("div", { className: "chat-window", ref: chatWindowRef, children: [isMinimized
|
|
32
32
|
? _jsx(MinimizedHeader, { ...minimizedActions })
|
|
33
33
|
: _jsx(ChatTabSelection, {}), _jsxs("div", { className: "chat-container", children: [_jsx("div", { className: "chat-content", children: isCurrentChatEmpty ? (children ?? _jsx(Home, { username: username })) : _jsx(Chat, { username: username }) }), _jsx(MessageInput, {})] })] }), _jsx(Stacks, {}), _jsx(Workspaces, {}), _jsx(KnowledgeSources, {}), _jsx(KSDocument, {}), _jsx(Agents, {}), _jsx(Editor, {}), _jsx(ChatHistory, {}), _jsx("div", { className: "chat-right-panel", ref: rightPanelRef, children: _jsx(RightPanel, {}) })] }) }) })), [isCurrentChatEmpty, username, isMinimized, children]);
|
|
34
34
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackspotAIWidget.js","sourceRoot":"","sources":["../src/StackspotAIWidget.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"StackspotAIWidget.js","sourceRoot":"","sources":["../src/StackspotAIWidget.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAa,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AACxE,OAAO,cAAc,CAAA;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAErE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAiB/C;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAAE,QAAQ,EAAE,gBAAgB,GAAG,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAiB,EAAE,EAAE;IAClH,MAAM,aAAa,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IAClD,MAAM,aAAa,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAA;IAClD,MAAM,WAAW,GAAG,sBAAsB,EAAE,CAAA;IAC5C,MAAM,WAAW,GAAG,cAAc,CAAC,aAAa,CAAC,CAAA;IACjD,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,CAAA;IAEnD,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC,CACnB,KAAC,eAAe,cACd,KAAC,kBAAkB,IAAC,UAAU,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,YACjE,eAAK,SAAS,EAAE,WAAW,CAAC,CAAC,gBAAgB,EAAE,WAAW,IAAI,WAAW,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,EAAC,IAAI,EAAC,KAAK,EAAE,KAAK,aACjH,eAAK,SAAS,EAAC,aAAa,EAAC,GAAG,EAAE,aAAa,aAC5C,WAAW;gCACV,CAAC,CAAC,KAAC,eAAe,OAAK,gBAAgB,GAAI;gCAC3C,CAAC,CAAC,KAAC,gBAAgB,KAAG,EAExB,eAAK,SAAS,EAAC,gBAAgB,aAC7B,cAAK,SAAS,EAAC,cAAc,YAC1B,kBAAkB,CAAC,CAAC,CAAC,CAAC,QAAQ,IAAI,KAAC,IAAI,IAAC,QAAQ,EAAE,QAAQ,GAAI,CAAC,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,QAAQ,EAAE,QAAQ,GAAI,GAC3F,EACN,KAAC,YAAY,KAAG,IACZ,IACF,EACN,KAAC,MAAM,KAAG,EACV,KAAC,UAAU,KAAG,EACd,KAAC,gBAAgB,KAAG,EACpB,KAAC,UAAU,KAAG,EACd,KAAC,MAAM,KAAG,EACV,KAAC,MAAM,KAAG,EACV,KAAC,WAAW,KAAG,EACf,cAAK,SAAS,EAAC,kBAAkB,EAAC,GAAG,EAAE,aAAa,YAAE,KAAC,UAAU,KAAG,GAAM,IACtE,GACa,GACL,CACnB,EAAE,CAAC,kBAAkB,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAA;AAC3D,CAAC,CAAA"}
|
package/dist/app-metadata.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stack-spot/ai-chat-widget",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"date": "
|
|
3
|
+
"version": "1.5.0",
|
|
4
|
+
"date": "Tue Nov 05 2024 14:14:04 GMT+0000 (Coordinated Universal Time)",
|
|
5
5
|
"dependencies": [
|
|
6
6
|
{
|
|
7
7
|
"name": "@stack-spot/app-metadata",
|
|
@@ -68,7 +68,6 @@ export declare class WidgetState extends ObservableState<WidgetProperties> {
|
|
|
68
68
|
chatFeatures: ChatFeatures;
|
|
69
69
|
constructor({ chatTabs, initial, interceptors, features }?: Options);
|
|
70
70
|
private getNextUntitledChatIndex;
|
|
71
|
-
private getNextUntitledChatLabel;
|
|
72
71
|
/**
|
|
73
72
|
* Utility function for adding a new chat to the chat tabs. This also selects the new tab.
|
|
74
73
|
* @param properties the chat properties (initial state).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetState.d.ts","sourceRoot":"","sources":["../../src/state/WidgetState.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAA2B,cAAc,EAAE,MAAM,aAAa,CAAA;AACrG,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,kCAAkC,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,OAAO,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;IACrF;;OAEG;IACH,gBAAgB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACrF;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,UAAU,OAAO;IACf;;;;;OAKG;IACH,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAID;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,eAAe,CAAC,gBAAgB,CAAC;IAChE,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAA;IACrC;;OAEG;IACH,YAAY,EAAE,kBAAkB,EAAE,CAAK;IACvC;;OAEG;IACH,YAAY,EAAE,YAAY,CAAA;gBAEd,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAiB,EAAE,QAAQ,EAAE,GAAE,OAAY;IAc5E,OAAO,CAAC,wBAAwB;
|
|
1
|
+
{"version":3,"file":"WidgetState.d.ts","sourceRoot":"","sources":["../../src/state/WidgetState.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAA2B,cAAc,EAAE,MAAM,aAAa,CAAA;AACrG,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AACvC,OAAO,EAAE,kCAAkC,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,OAAO,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;IACrF;;OAEG;IACH,gBAAgB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACrF;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAED,UAAU,OAAO;IACf;;;;;OAKG;IACH,YAAY,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;IAC7C;;OAEG;IACH,QAAQ,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAID;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,eAAe,CAAC,gBAAgB,CAAC;IAChE,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAA;IACrC;;OAEG;IACH,YAAY,EAAE,kBAAkB,EAAE,CAAK;IACvC;;OAEG;IACH,YAAY,EAAE,YAAY,CAAA;gBAEd,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAiB,EAAE,QAAQ,EAAE,GAAE,OAAY;IAc5E,OAAO,CAAC,wBAAwB;IAUhC;;;;;OAKG;IACH,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE,GAAE,OAAO,CAAC,kCAAkC,CAAM,EAAE,OAAO,GAAE,SAAS,EAAO;CAYjH"}
|
|
@@ -7,7 +7,7 @@ import { getFeaturesWithDefaults } from '../features.js';
|
|
|
7
7
|
import { ChatState } from './ChatState.js';
|
|
8
8
|
import { ChatTabsController } from './ChatTabsController.js';
|
|
9
9
|
import { ObservableState } from './ObservableState.js';
|
|
10
|
-
const untitledChatPrefix = 'Chat';
|
|
10
|
+
const untitledChatPrefix = 'Chat ';
|
|
11
11
|
/**
|
|
12
12
|
* Holds the full state of the AI Chat Widget.
|
|
13
13
|
*
|
|
@@ -39,19 +39,13 @@ export class WidgetState extends ObservableState {
|
|
|
39
39
|
getNextUntitledChatIndex() {
|
|
40
40
|
let max = 0;
|
|
41
41
|
for (const chat of this.chatTabs.getAll()) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const [, match] = chat.get('label').match(`^${untitledChatPrefix} (\\d+)$`) ?? [];
|
|
45
|
-
const index = match ? parseInt(match) : 0;
|
|
42
|
+
const [, match] = chat.get('label').match(`${untitledChatPrefix}(\\d+)`) ?? [];
|
|
43
|
+
const index = parseInt(match);
|
|
46
44
|
if (index > max)
|
|
47
45
|
max = index;
|
|
48
46
|
}
|
|
49
47
|
return max + 1;
|
|
50
48
|
}
|
|
51
|
-
getNextUntitledChatLabel() {
|
|
52
|
-
const next = this.getNextUntitledChatIndex();
|
|
53
|
-
return next > 1 ? `${untitledChatPrefix} ${next}` : untitledChatPrefix;
|
|
54
|
-
}
|
|
55
49
|
/**
|
|
56
50
|
* Utility function for adding a new chat to the chat tabs. This also selects the new tab.
|
|
57
51
|
* @param properties the chat properties (initial state).
|
|
@@ -61,7 +55,7 @@ export class WidgetState extends ObservableState {
|
|
|
61
55
|
createChat({ label, ...properties } = {}, entries = []) {
|
|
62
56
|
const chat = new ChatState({
|
|
63
57
|
id: ulid(),
|
|
64
|
-
initial: { label: label || this.
|
|
58
|
+
initial: { label: label || `${untitledChatPrefix}${this.getNextUntitledChatIndex()}`, features: this.chatFeatures, ...properties },
|
|
65
59
|
entries,
|
|
66
60
|
interceptors: this.interceptors,
|
|
67
61
|
untitled: !label,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WidgetState.js","sourceRoot":"","sources":["../../src/state/WidgetState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,gCAAgC,EAAE,MAAM,8CAA8C,CAAA;AAC/F,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAC1E,OAAO,EAAkC,uBAAuB,EAAkB,MAAM,aAAa,CAAA;AAErG,OAAO,EAAsC,SAAS,EAAsB,MAAM,aAAa,CAAA;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AA+CnD,MAAM,kBAAkB,GAAG,
|
|
1
|
+
{"version":3,"file":"WidgetState.js","sourceRoot":"","sources":["../../src/state/WidgetState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,gCAAgC,EAAE,MAAM,8CAA8C,CAAA;AAC/F,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAA;AACnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAC1E,OAAO,EAAkC,uBAAuB,EAAkB,MAAM,aAAa,CAAA;AAErG,OAAO,EAAsC,SAAS,EAAsB,MAAM,aAAa,CAAA;AAC/F,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AA+CnD,MAAM,kBAAkB,GAAG,OAAO,CAAA;AAElC;;;;GAIG;AACH,MAAM,OAAO,WAAY,SAAQ,eAAiC;IACvD,QAAQ,CAAoB;IACrC;;OAEG;IACH,YAAY,GAAyB,EAAE,CAAA;IACvC;;OAEG;IACH,YAAY,CAAc;IAE1B,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,GAAG,EAAE,EAAE,QAAQ,KAAc,EAAE;QAC1E,MAAM,oBAAoB,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAA;QAC9D,KAAK,CAAC,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,oBAAoB,EAAE,CAAC,CAAA;QACrD,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAA;QACxC,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,IAAI,kBAAkB,EAAE,CAAA;QACpD,IAAI,CAAC,YAAY,GAAG;YAClB,GAAG,YAAY;YACf,gCAAgC;YAChC,6BAA6B,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,MAAM,CAAC;YAC/E,sBAAsB;SACvB,CAAA;QACD,IAAI,CAAC,UAAU,EAAE,CAAA;IACnB,CAAC;IAEO,wBAAwB;QAC9B,IAAI,GAAG,GAAG,CAAC,CAAA;QACX,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,kBAAkB,QAAQ,CAAC,IAAI,EAAE,CAAA;YAC9E,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;YAC7B,IAAI,KAAK,GAAG,GAAG;gBAAE,GAAG,GAAG,KAAK,CAAA;QAC9B,CAAC;QACD,OAAO,GAAG,GAAG,CAAC,CAAA;IAChB,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,EAAE,KAAK,EAAE,GAAG,UAAU,KAAkD,EAAE,EAAE,UAAuB,EAAE;QAC9G,MAAM,IAAI,GAAG,IAAI,SAAS,CAAC;YACzB,EAAE,EAAE,IAAI,EAAE;YACV,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,GAAG,kBAAkB,GAAG,IAAI,CAAC,wBAAwB,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,UAAU,EAAE;YAClI,OAAO;YACP,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,QAAQ,EAAE,CAAC,KAAK;SACjB,CAAC,CAAA;QACF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACvB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC7B,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stack-spot/ai-chat-widget",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "rimraf dist && pnpm generate:metadata && tsc && tsc-esm-fix --target='dist' && cpy src/layout.css dist --flat",
|
|
9
|
+
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
|
10
|
+
"generate:metadata": "pnpm app-metadata --lockfile ../../pnpm-lock.yaml --path packages/widget"
|
|
11
|
+
},
|
|
7
12
|
"peerDependencies": {
|
|
8
13
|
"@citric/core": "^6.0.0",
|
|
9
14
|
"@citric/icons": "^5.4.0 || ^6.0.0",
|
|
@@ -48,10 +53,5 @@
|
|
|
48
53
|
"react-syntax-highlighter": "^15.5.0",
|
|
49
54
|
"remark-gfm": "^4.0.0",
|
|
50
55
|
"ulid": "^2.3.0"
|
|
51
|
-
},
|
|
52
|
-
"scripts": {
|
|
53
|
-
"build": "rimraf dist && pnpm generate:metadata && tsc && tsc-esm-fix --target='dist' && cpy src/layout.css dist --flat",
|
|
54
|
-
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
|
|
55
|
-
"generate:metadata": "pnpm app-metadata --lockfile ../../pnpm-lock.yaml --path packages/widget"
|
|
56
56
|
}
|
|
57
57
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { listToClass } from '@stack-spot/portal-theme'
|
|
1
|
+
import { listToClass, WithStyle } from '@stack-spot/portal-theme'
|
|
2
2
|
import { useMemo, useRef } from 'react'
|
|
3
3
|
import { TooltipProvider } from './components/Tooltip'
|
|
4
4
|
import { useCurrentChatMessages, useWidgetState } from './context/hooks'
|
|
@@ -19,7 +19,7 @@ import { MinimizedHeader } from './views/MinimizedHeader'
|
|
|
19
19
|
import { Stacks } from './views/Stacks'
|
|
20
20
|
import { Workspaces } from './views/Workspaces'
|
|
21
21
|
|
|
22
|
-
export interface AIWidgetProps {
|
|
22
|
+
export interface AIWidgetProps extends WithStyle {
|
|
23
23
|
/**
|
|
24
24
|
* The name of the user currently logged in.
|
|
25
25
|
*/
|
|
@@ -38,9 +38,7 @@ export interface AIWidgetProps {
|
|
|
38
38
|
* Renders a Chat Widget according to the closest model found in the React tree (AIWidgetProvider). If no model is found, a global version
|
|
39
39
|
* of the Chat Widget will be instantiated and used.
|
|
40
40
|
*/
|
|
41
|
-
export const StackspotAIWidget = (
|
|
42
|
-
{ username, minimizedActions = {}, children }: AIWidgetProps,
|
|
43
|
-
) => {
|
|
41
|
+
export const StackspotAIWidget = ({ username, minimizedActions = {}, children, className, style }: AIWidgetProps) => {
|
|
44
42
|
const rightPanelRef = useRef<HTMLDivElement>(null)
|
|
45
43
|
const chatWindowRef = useRef<HTMLDivElement>(null)
|
|
46
44
|
const currentChat = useCurrentChatMessages()
|
|
@@ -50,7 +48,7 @@ export const StackspotAIWidget = (
|
|
|
50
48
|
return useMemo(() => (
|
|
51
49
|
<TooltipProvider>
|
|
52
50
|
<RightPanelProvider chatWindow={chatWindowRef} panel={rightPanelRef}>
|
|
53
|
-
<div className={listToClass(['ai-chat-widget', isMinimized && 'minimized'])} translate="no">
|
|
51
|
+
<div className={listToClass(['ai-chat-widget', isMinimized && 'minimized', className])} translate="no" style={style}>
|
|
54
52
|
<div className="chat-window" ref={chatWindowRef}>
|
|
55
53
|
{isMinimized
|
|
56
54
|
? <MinimizedHeader {...minimizedActions} />
|
package/src/app-metadata.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stack-spot/ai-chat-widget",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"date": "
|
|
3
|
+
"version": "1.5.0",
|
|
4
|
+
"date": "Tue Nov 05 2024 14:14:04 GMT+0000 (Coordinated Universal Time)",
|
|
5
5
|
"dependencies": [
|
|
6
6
|
{
|
|
7
7
|
"name": "@stack-spot/app-metadata",
|
package/src/state/WidgetState.ts
CHANGED
|
@@ -54,7 +54,7 @@ interface Options {
|
|
|
54
54
|
chatTabs?: ChatTabsController,
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
const untitledChatPrefix = 'Chat'
|
|
57
|
+
const untitledChatPrefix = 'Chat '
|
|
58
58
|
|
|
59
59
|
/**
|
|
60
60
|
* Holds the full state of the AI Chat Widget.
|
|
@@ -89,19 +89,13 @@ export class WidgetState extends ObservableState<WidgetProperties> {
|
|
|
89
89
|
private getNextUntitledChatIndex() {
|
|
90
90
|
let max = 0
|
|
91
91
|
for (const chat of this.chatTabs.getAll()) {
|
|
92
|
-
|
|
93
|
-
const
|
|
94
|
-
const index = match ? parseInt(match) : 0
|
|
92
|
+
const [, match] = chat.get('label').match(`${untitledChatPrefix}(\\d+)`) ?? []
|
|
93
|
+
const index = parseInt(match)
|
|
95
94
|
if (index > max) max = index
|
|
96
95
|
}
|
|
97
96
|
return max + 1
|
|
98
97
|
}
|
|
99
98
|
|
|
100
|
-
private getNextUntitledChatLabel() {
|
|
101
|
-
const next = this.getNextUntitledChatIndex()
|
|
102
|
-
return next > 1 ? `${untitledChatPrefix} ${next}` : untitledChatPrefix
|
|
103
|
-
}
|
|
104
|
-
|
|
105
99
|
/**
|
|
106
100
|
* Utility function for adding a new chat to the chat tabs. This also selects the new tab.
|
|
107
101
|
* @param properties the chat properties (initial state).
|
|
@@ -111,7 +105,7 @@ export class WidgetState extends ObservableState<WidgetProperties> {
|
|
|
111
105
|
createChat({ label, ...properties }: Partial<ChatPropertiesWithOptionalFeatures> = {}, entries: ChatEntry[] = []) {
|
|
112
106
|
const chat = new ChatState({
|
|
113
107
|
id: ulid(),
|
|
114
|
-
initial: { label: label || this.
|
|
108
|
+
initial: { label: label || `${untitledChatPrefix}${this.getNextUntitledChatIndex()}`, features: this.chatFeatures, ...properties },
|
|
115
109
|
entries,
|
|
116
110
|
interceptors: this.interceptors,
|
|
117
111
|
untitled: !label,
|
package/tsconfig.json
CHANGED
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
"compilerOptions": {
|
|
3
3
|
"target": "ES2023",
|
|
4
4
|
"useDefineForClassFields": true,
|
|
5
|
-
"lib": [
|
|
5
|
+
"lib": [
|
|
6
|
+
"ES2023",
|
|
7
|
+
"DOM",
|
|
8
|
+
"DOM.Iterable"
|
|
9
|
+
],
|
|
6
10
|
"moduleResolution": "Bundler",
|
|
7
11
|
"jsx": "react-jsx",
|
|
8
12
|
"skipLibCheck": true,
|
|
@@ -11,12 +15,13 @@
|
|
|
11
15
|
"declarationMap": true,
|
|
12
16
|
"module": "ESNext",
|
|
13
17
|
"outDir": "dist",
|
|
14
|
-
/* Linting */
|
|
15
18
|
"strict": true,
|
|
16
19
|
"noUnusedLocals": true,
|
|
17
20
|
"noUnusedParameters": true,
|
|
18
21
|
"noFallthroughCasesInSwitch": true,
|
|
19
22
|
"stripInternal": true
|
|
20
23
|
},
|
|
21
|
-
"include": [
|
|
24
|
+
"include": [
|
|
25
|
+
"src"
|
|
26
|
+
]
|
|
22
27
|
}
|