@docyrus/ui-pro-ai-assistant 0.7.1 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/docy-assistant.d.ts +1 -1
- package/dist/hooks/use-session-state.d.ts +1 -0
- package/dist/index.js +71 -5
- package/dist/index.js.map +1 -1
- package/dist/lib/assistant-api-actions.d.ts +1 -1
- package/dist/styles.css +5 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/views/sidebar-content.d.ts +2 -0
- package/package.json +1 -1
package/dist/docy-assistant.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type RefObject } from 'react';
|
|
2
2
|
import { type DocyAssistantProps } from './types';
|
|
3
|
-
export declare const DocyAssistant: ({ ref, isOpen, onClose, supportWebSearch, supportThinking, supportFiles, supportDocumentSearch, supportDeepResearch, supportMultiModels, supportWorkCanvas, apiEndpoint, title: titleProp, description: descriptionProp, placeholder: placeholderProp, logo, footerText: footerTextProp, variant, renderMode, enableSidebar, enableVoice, enableMicrophone, enableWelcomePage, tenantAiAgentId, onMessageSend, onVoiceStart, onVoiceEnd, className, defaultFullscreen, hideExpand, hideCloseButton, hideBorder, showHeader, hideHeaderOnWelcome, agentSelectorUrl, onAgentChange, onFullscreenChange, enableSharing, onShare: onShareProp, initialPrompt, initialModelId, initialFeatures, initialFiles, hostEnvironment, appId, appName, appIcon, clientTools, ...props }: DocyAssistantProps & {
|
|
3
|
+
export declare const DocyAssistant: ({ ref, isOpen, onClose, supportWebSearch, supportThinking, supportFiles, supportDocumentSearch, supportDeepResearch, supportMultiModels, supportWorkCanvas, apiEndpoint, title: titleProp, description: descriptionProp, placeholder: placeholderProp, logo, footerText: footerTextProp, variant, renderMode, enableSidebar, enableVoice, enableMicrophone, enableWelcomePage, tenantAiAgentId, onMessageSend, onVoiceStart, onVoiceEnd, className, defaultFullscreen, isFullscreen: isFullscreenProp, hideExpand, hideCloseButton, hideBorder, showHeader, hideHeaderOnWelcome, agentSelectorUrl, onAgentChange, onFullscreenChange, enableSharing, onShare: onShareProp, initialPrompt, initialModelId, initialFeatures, initialFiles, hostEnvironment, appId, appName, appIcon, clientTools, ...props }: DocyAssistantProps & {
|
|
4
4
|
ref?: RefObject<HTMLDivElement | null>;
|
|
5
5
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -14,6 +14,7 @@ export declare function useSessionState(): {
|
|
|
14
14
|
state: SessionState;
|
|
15
15
|
actions: {
|
|
16
16
|
setSessions: (sessions: AssistantSession[]) => void;
|
|
17
|
+
appendSessions: (sessions: AssistantSession[]) => void;
|
|
17
18
|
selectSessionId: (id: string | null) => void;
|
|
18
19
|
selectSession: (session: AssistantSession | null) => void;
|
|
19
20
|
startEditing: () => void;
|
package/dist/index.js
CHANGED
|
@@ -2714,6 +2714,8 @@ var AgentTabs = ({
|
|
|
2714
2714
|
return /* @__PURE__ */ jsxs(
|
|
2715
2715
|
"div",
|
|
2716
2716
|
{
|
|
2717
|
+
role: "tab",
|
|
2718
|
+
"aria-selected": isActive,
|
|
2717
2719
|
className: cn(
|
|
2718
2720
|
"group/tab flex items-center gap-1.5 h-8 pl-2 pr-1 rounded-md cursor-pointer text-sm font-medium max-w-[200px] shrink-0 transition-colors",
|
|
2719
2721
|
isActive ? "bg-accent text-foreground" : "text-muted-foreground hover:bg-accent/50 hover:text-foreground"
|
|
@@ -3106,13 +3108,19 @@ function processMessagesData(rawData) {
|
|
|
3106
3108
|
}
|
|
3107
3109
|
|
|
3108
3110
|
// src/lib/assistant-api-actions.ts
|
|
3109
|
-
async function fetchAgentThreads(apiClient, tenantAiAgentId, onSuccess, userId, deploymentId) {
|
|
3111
|
+
async function fetchAgentThreads(apiClient, tenantAiAgentId, onSuccess, userId, deploymentId, limit, offset3) {
|
|
3110
3112
|
try {
|
|
3111
3113
|
const apiParams = {
|
|
3112
3114
|
columns: "id,subject,created_on,last_modified_on,body_text,tenant_ai_agent_id,created_by",
|
|
3113
3115
|
expand: "created_by",
|
|
3114
3116
|
orderBy: JSON.stringify({ field: "created_on", direction: "desc" })
|
|
3115
3117
|
};
|
|
3118
|
+
if (typeof limit === "number" && limit > 0) {
|
|
3119
|
+
apiParams.limit = limit;
|
|
3120
|
+
}
|
|
3121
|
+
if (typeof offset3 === "number" && offset3 > 0) {
|
|
3122
|
+
apiParams.offset = offset3;
|
|
3123
|
+
}
|
|
3116
3124
|
const agentRule = deploymentId ? { field: "tenant_ai_agent_deployment_id", operator: "=", value: deploymentId } : { field: "tenant_ai_agent_id", operator: "=", value: tenantAiAgentId };
|
|
3117
3125
|
const rules = [agentRule, { field: "archived", operator: "=", value: "false" }];
|
|
3118
3126
|
if (userId) {
|
|
@@ -4749,6 +4757,12 @@ function sessionReducer(state, action) {
|
|
|
4749
4757
|
switch (action.type) {
|
|
4750
4758
|
case "SET_SESSIONS":
|
|
4751
4759
|
return { ...state, sessions: action.payload };
|
|
4760
|
+
case "APPEND_SESSIONS": {
|
|
4761
|
+
const existing = new Set(state.sessions.map((s) => s.id));
|
|
4762
|
+
const fresh = action.payload.filter((s) => !existing.has(s.id));
|
|
4763
|
+
if (fresh.length === 0) return state;
|
|
4764
|
+
return { ...state, sessions: [...state.sessions, ...fresh] };
|
|
4765
|
+
}
|
|
4752
4766
|
case "SELECT_SESSION_ID":
|
|
4753
4767
|
return { ...state, selectedSessionId: action.payload };
|
|
4754
4768
|
case "SELECT_SESSION":
|
|
@@ -4797,6 +4811,9 @@ function useSessionState() {
|
|
|
4797
4811
|
const setSessions = useCallback((sessions) => {
|
|
4798
4812
|
dispatch({ type: "SET_SESSIONS", payload: sessions });
|
|
4799
4813
|
}, []);
|
|
4814
|
+
const appendSessions = useCallback((sessions) => {
|
|
4815
|
+
dispatch({ type: "APPEND_SESSIONS", payload: sessions });
|
|
4816
|
+
}, []);
|
|
4800
4817
|
const selectSessionId = useCallback((id) => {
|
|
4801
4818
|
dispatch({ type: "SELECT_SESSION_ID", payload: id });
|
|
4802
4819
|
}, []);
|
|
@@ -4839,6 +4856,7 @@ function useSessionState() {
|
|
|
4839
4856
|
const actions = useMemo(
|
|
4840
4857
|
() => ({
|
|
4841
4858
|
setSessions,
|
|
4859
|
+
appendSessions,
|
|
4842
4860
|
selectSessionId,
|
|
4843
4861
|
selectSession,
|
|
4844
4862
|
startEditing,
|
|
@@ -4855,6 +4873,7 @@ function useSessionState() {
|
|
|
4855
4873
|
}),
|
|
4856
4874
|
[
|
|
4857
4875
|
setSessions,
|
|
4876
|
+
appendSessions,
|
|
4858
4877
|
selectSessionId,
|
|
4859
4878
|
selectSession,
|
|
4860
4879
|
startEditing,
|
|
@@ -19431,6 +19450,7 @@ var MessageItem = memo(({
|
|
|
19431
19450
|
), children: [
|
|
19432
19451
|
/* @__PURE__ */ jsx(MessageContent, { className: cn(
|
|
19433
19452
|
"group-[.is-user]:p-2 group-[.is-user]:mt-0.5",
|
|
19453
|
+
"group-[.is-user]:text-foreground",
|
|
19434
19454
|
isEditing && isUserMessage && "flex-1 w-full max-w-full"
|
|
19435
19455
|
), children: renderMessageContent() }),
|
|
19436
19456
|
isAssistantMessage && !isStreaming && textContent && /* @__PURE__ */ jsx(MessageActions, { className: "mt-1 opacity-0 group-hover:opacity-100 transition-opacity", children: /* @__PURE__ */ jsx(CopyButton, { text: textContent }) }),
|
|
@@ -35694,12 +35714,19 @@ var SidebarContent = ({
|
|
|
35694
35714
|
onShowMoreProjects,
|
|
35695
35715
|
onNewProject,
|
|
35696
35716
|
onToggleSidebar,
|
|
35717
|
+
onLoadMoreSessions,
|
|
35718
|
+
hasMoreSessions,
|
|
35697
35719
|
supportWorkCanvas = true,
|
|
35698
35720
|
t
|
|
35699
35721
|
}) => {
|
|
35700
35722
|
const [storedListType, setActiveListType] = useState("sessions");
|
|
35701
35723
|
const activeListType = !supportWorkCanvas && storedListType === "works" ? "sessions" : storedListType;
|
|
35702
35724
|
const [openMenuId, setOpenMenuId] = useState(null);
|
|
35725
|
+
const handleSessionsScroll = useCallback((e) => {
|
|
35726
|
+
if (activeListType !== "sessions" || !hasMoreSessions || !onLoadMoreSessions) return;
|
|
35727
|
+
const el = e.currentTarget;
|
|
35728
|
+
if (el.scrollHeight - el.scrollTop - el.clientHeight < 80) onLoadMoreSessions();
|
|
35729
|
+
}, [activeListType, hasMoreSessions, onLoadMoreSessions]);
|
|
35703
35730
|
const navItems = [{ id: 1, label: t("tabs.sessions"), icon: MessageSquare }, ...supportWorkCanvas ? [{ id: 3, label: t("tabs.works"), icon: NotebookText }] : []];
|
|
35704
35731
|
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col flex-1 min-h-0", children: [
|
|
35705
35732
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-px", children: [
|
|
@@ -35821,6 +35848,7 @@ var SidebarContent = ({
|
|
|
35821
35848
|
"div",
|
|
35822
35849
|
{
|
|
35823
35850
|
className: "flex-1 overflow-y-auto",
|
|
35851
|
+
onScroll: handleSessionsScroll,
|
|
35824
35852
|
style: {
|
|
35825
35853
|
scrollbarWidth: "thin",
|
|
35826
35854
|
scrollbarColor: "var(--muted-foreground) transparent"
|
|
@@ -36101,6 +36129,7 @@ function dataUrlToFile(dataUrl, filename) {
|
|
|
36101
36129
|
}
|
|
36102
36130
|
return new File([u8arr], filename, { type: mime });
|
|
36103
36131
|
}
|
|
36132
|
+
var THREADS_PAGE_SIZE = 20;
|
|
36104
36133
|
var DocyAssistant = ({
|
|
36105
36134
|
ref,
|
|
36106
36135
|
isOpen = true,
|
|
@@ -36130,6 +36159,7 @@ var DocyAssistant = ({
|
|
|
36130
36159
|
onVoiceEnd,
|
|
36131
36160
|
className,
|
|
36132
36161
|
defaultFullscreen = false,
|
|
36162
|
+
isFullscreen: isFullscreenProp,
|
|
36133
36163
|
hideExpand = false,
|
|
36134
36164
|
hideCloseButton = false,
|
|
36135
36165
|
hideBorder = false,
|
|
@@ -36209,7 +36239,9 @@ var DocyAssistant = ({
|
|
|
36209
36239
|
const [showWelcome, setShowWelcome] = useState(() => enableWelcomePage && tabs.length <= 1);
|
|
36210
36240
|
const currentUserId = configUser.id;
|
|
36211
36241
|
const [projectSearchQuery, setProjectSearchQuery] = useState("");
|
|
36212
|
-
const [
|
|
36242
|
+
const [internalInlineFullscreen, setInternalInlineFullscreen] = useState(defaultFullscreen);
|
|
36243
|
+
const isInlineFullscreen = isFullscreenProp ?? internalInlineFullscreen;
|
|
36244
|
+
const setIsInlineFullscreen = setInternalInlineFullscreen;
|
|
36213
36245
|
const [sharingEditorOpen, setSharingEditorOpen] = useState(false);
|
|
36214
36246
|
const [appContext, setAppContext] = useState(
|
|
36215
36247
|
appId ? { id: appId, name: appName, icon: appIcon } : null
|
|
@@ -36415,8 +36447,35 @@ var DocyAssistant = ({
|
|
|
36415
36447
|
return changed ? next : prev;
|
|
36416
36448
|
});
|
|
36417
36449
|
}, [agentDetails, agentDetailsForId]);
|
|
36418
|
-
const
|
|
36419
|
-
|
|
36450
|
+
const [hasMoreThreads, setHasMoreThreads] = useState(true);
|
|
36451
|
+
const isLoadingMoreThreadsRef = useRef(false);
|
|
36452
|
+
const sessionsRef = useRef(sessionState.sessions);
|
|
36453
|
+
useEffect(() => {
|
|
36454
|
+
sessionsRef.current = sessionState.sessions;
|
|
36455
|
+
}, [sessionState.sessions]);
|
|
36456
|
+
const fetchThreads = useCallback(async (mode = "initial") => {
|
|
36457
|
+
if (mode === "more") {
|
|
36458
|
+
if (isLoadingMoreThreadsRef.current) return;
|
|
36459
|
+
isLoadingMoreThreadsRef.current = true;
|
|
36460
|
+
}
|
|
36461
|
+
const offset3 = mode === "more" ? sessionsRef.current.length : 0;
|
|
36462
|
+
await fetchAgentThreads(
|
|
36463
|
+
apiClient,
|
|
36464
|
+
activeAgentId,
|
|
36465
|
+
(threads) => {
|
|
36466
|
+
if (mode === "initial") {
|
|
36467
|
+
sessionActions.setSessions(threads);
|
|
36468
|
+
} else {
|
|
36469
|
+
sessionActions.appendSessions(threads);
|
|
36470
|
+
}
|
|
36471
|
+
setHasMoreThreads(threads.length === THREADS_PAGE_SIZE);
|
|
36472
|
+
},
|
|
36473
|
+
currentUserId,
|
|
36474
|
+
deploymentId,
|
|
36475
|
+
THREADS_PAGE_SIZE,
|
|
36476
|
+
offset3
|
|
36477
|
+
);
|
|
36478
|
+
if (mode === "more") isLoadingMoreThreadsRef.current = false;
|
|
36420
36479
|
}, [
|
|
36421
36480
|
apiClient,
|
|
36422
36481
|
activeAgentId,
|
|
@@ -36424,6 +36483,10 @@ var DocyAssistant = ({
|
|
|
36424
36483
|
currentUserId,
|
|
36425
36484
|
deploymentId
|
|
36426
36485
|
]);
|
|
36486
|
+
const loadMoreThreads = useCallback(() => {
|
|
36487
|
+
if (!hasMoreThreads) return;
|
|
36488
|
+
void fetchThreads("more");
|
|
36489
|
+
}, [fetchThreads, hasMoreThreads]);
|
|
36427
36490
|
const fetchProjectThreads2 = useCallback(async (projectId) => {
|
|
36428
36491
|
await fetchProjectThreads(apiClient, projectId, projectActions.setProjectThreads);
|
|
36429
36492
|
}, [apiClient, projectActions]);
|
|
@@ -36461,7 +36524,8 @@ var DocyAssistant = ({
|
|
|
36461
36524
|
]);
|
|
36462
36525
|
useEffect(() => {
|
|
36463
36526
|
if (isOpen && enableSidebar) {
|
|
36464
|
-
|
|
36527
|
+
setHasMoreThreads(true);
|
|
36528
|
+
void fetchThreads("initial");
|
|
36465
36529
|
}
|
|
36466
36530
|
}, [isOpen, enableSidebar, fetchThreads]);
|
|
36467
36531
|
useEffect(() => {
|
|
@@ -36908,6 +36972,8 @@ var DocyAssistant = ({
|
|
|
36908
36972
|
},
|
|
36909
36973
|
onToggleSidebar: isFloating && !uiState.isExpanded ? () => uiActions.setSidebarOpen(false) : void 0,
|
|
36910
36974
|
supportWorkCanvas: effectiveSupportWorkCanvas,
|
|
36975
|
+
onLoadMoreSessions: loadMoreThreads,
|
|
36976
|
+
hasMoreSessions: hasMoreThreads,
|
|
36911
36977
|
t
|
|
36912
36978
|
}
|
|
36913
36979
|
);
|