@cossistant/react 0.0.4 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -0
- package/_virtual/rolldown_runtime.js +19 -0
- package/conversation.d.ts +23 -0
- package/conversation.d.ts.map +1 -1
- package/hooks/index.d.ts +5 -3
- package/hooks/index.js +7 -5
- package/hooks/private/store/use-conversations-store.d.ts +8 -0
- package/hooks/private/store/use-conversations-store.d.ts.map +1 -1
- package/hooks/private/store/use-conversations-store.js +8 -0
- package/hooks/private/store/use-conversations-store.js.map +1 -1
- package/hooks/private/store/use-store-selector.d.ts +4 -0
- package/hooks/private/store/use-store-selector.d.ts.map +1 -1
- package/hooks/private/store/use-store-selector.js +5 -2
- package/hooks/private/store/use-store-selector.js.map +1 -1
- package/hooks/private/store/use-website-store.d.ts +4 -0
- package/hooks/private/store/use-website-store.d.ts.map +1 -1
- package/hooks/private/store/use-website-store.js +6 -3
- package/hooks/private/store/use-website-store.js.map +1 -1
- package/hooks/private/typing.d.ts +35 -0
- package/hooks/private/typing.d.ts.map +1 -0
- package/hooks/private/typing.js +49 -0
- package/hooks/private/typing.js.map +1 -0
- package/hooks/private/use-client-query.d.ts +5 -0
- package/hooks/private/use-client-query.d.ts.map +1 -1
- package/hooks/private/use-client-query.js +5 -0
- package/hooks/private/use-client-query.js.map +1 -1
- package/hooks/private/use-grouped-messages.d.ts +10 -4
- package/hooks/private/use-grouped-messages.d.ts.map +1 -1
- package/hooks/private/use-grouped-messages.js +24 -4
- package/hooks/private/use-grouped-messages.js.map +1 -1
- package/hooks/private/use-multimodal-input.d.ts.map +1 -1
- package/hooks/private/use-rest-client.d.ts.map +1 -1
- package/hooks/private/use-visitor-typing-reporter.d.ts +6 -0
- package/hooks/private/use-visitor-typing-reporter.d.ts.map +1 -1
- package/hooks/private/use-visitor-typing-reporter.js +6 -0
- package/hooks/private/use-visitor-typing-reporter.js.map +1 -1
- package/hooks/use-composer-refocus.d.ts.map +1 -1
- package/hooks/use-conversation-auto-seen.d.ts +9 -0
- package/hooks/use-conversation-auto-seen.d.ts.map +1 -1
- package/hooks/use-conversation-auto-seen.js +44 -3
- package/hooks/use-conversation-auto-seen.js.map +1 -1
- package/hooks/use-conversation-history-page.d.ts.map +1 -1
- package/hooks/use-conversation-history-page.js +16 -18
- package/hooks/use-conversation-history-page.js.map +1 -1
- package/hooks/use-conversation-lifecycle.d.ts.map +1 -1
- package/hooks/use-conversation-lifecycle.js +2 -4
- package/hooks/use-conversation-lifecycle.js.map +1 -1
- package/hooks/use-conversation-page.d.ts +6 -0
- package/hooks/use-conversation-page.d.ts.map +1 -1
- package/hooks/use-conversation-page.js +41 -3
- package/hooks/use-conversation-page.js.map +1 -1
- package/hooks/use-conversation-preview.d.ts +61 -0
- package/hooks/use-conversation-preview.d.ts.map +1 -0
- package/hooks/use-conversation-preview.js +173 -0
- package/hooks/use-conversation-preview.js.map +1 -0
- package/hooks/use-conversation-seen.d.ts +4 -0
- package/hooks/use-conversation-seen.d.ts.map +1 -1
- package/hooks/use-conversation-seen.js +4 -0
- package/hooks/use-conversation-seen.js.map +1 -1
- package/hooks/use-conversation-timeline-items.d.ts +4 -0
- package/hooks/use-conversation-timeline-items.d.ts.map +1 -1
- package/hooks/use-conversation-timeline-items.js +4 -0
- package/hooks/use-conversation-timeline-items.js.map +1 -1
- package/hooks/use-conversation-timeline.d.ts +32 -0
- package/hooks/use-conversation-timeline.d.ts.map +1 -0
- package/hooks/use-conversation-timeline.js +41 -0
- package/hooks/use-conversation-timeline.js.map +1 -0
- package/hooks/use-conversation-typing.d.ts +4 -0
- package/hooks/use-conversation-typing.d.ts.map +1 -1
- package/hooks/use-conversation-typing.js +4 -0
- package/hooks/use-conversation-typing.js.map +1 -1
- package/hooks/use-conversation.d.ts +11 -0
- package/hooks/use-conversation.d.ts.map +1 -1
- package/hooks/use-conversation.js +11 -0
- package/hooks/use-conversation.js.map +1 -1
- package/hooks/use-conversations.d.ts +12 -0
- package/hooks/use-conversations.d.ts.map +1 -1
- package/hooks/use-conversations.js +12 -0
- package/hooks/use-conversations.js.map +1 -1
- package/hooks/use-create-conversation.d.ts +5 -0
- package/hooks/use-create-conversation.d.ts.map +1 -1
- package/hooks/use-create-conversation.js +12 -9
- package/hooks/use-create-conversation.js.map +1 -1
- package/hooks/use-home-page.d.ts.map +1 -1
- package/hooks/use-home-page.js +6 -4
- package/hooks/use-home-page.js.map +1 -1
- package/hooks/use-message-composer.d.ts.map +1 -1
- package/hooks/use-realtime-support.d.ts.map +1 -1
- package/hooks/use-send-message.d.ts +9 -0
- package/hooks/use-send-message.d.ts.map +1 -1
- package/hooks/use-send-message.js +15 -13
- package/hooks/use-send-message.js.map +1 -1
- package/hooks/use-visitor.d.ts.map +1 -1
- package/hooks/use-visitor.js +28 -30
- package/hooks/use-visitor.js.map +1 -1
- package/hooks/use-window-visibility-focus.d.ts +4 -0
- package/hooks/use-window-visibility-focus.d.ts.map +1 -1
- package/hooks/use-window-visibility-focus.js +5 -2
- package/hooks/use-window-visibility-focus.js.map +1 -1
- package/identify-visitor.d.ts +12 -3
- package/identify-visitor.d.ts.map +1 -1
- package/identify-visitor.js +58 -9
- package/identify-visitor.js.map +1 -1
- package/index.d.ts +10 -7
- package/index.js +10 -9
- package/package.json +12 -16
- package/primitives/avatar/avatar.d.ts.map +1 -1
- package/primitives/avatar/fallback.d.ts.map +1 -1
- package/primitives/avatar/fallback.js +1 -3
- package/primitives/avatar/fallback.js.map +1 -1
- package/primitives/avatar/image.d.ts.map +1 -1
- package/primitives/avatar/index.d.ts +1 -0
- package/primitives/bubble.d.ts +2 -0
- package/primitives/bubble.d.ts.map +1 -1
- package/primitives/bubble.js +8 -2
- package/primitives/bubble.js.map +1 -1
- package/primitives/button.d.ts.map +1 -1
- package/primitives/conversation-timeline.d.ts.map +1 -1
- package/primitives/conversation-timeline.js +58 -5
- package/primitives/conversation-timeline.js.map +1 -1
- package/primitives/index.d.ts +1 -0
- package/primitives/index.parts.d.ts +1 -0
- package/primitives/multimodal-input.d.ts.map +1 -1
- package/primitives/timeline-item-group.d.ts +7 -7
- package/primitives/timeline-item-group.d.ts.map +1 -1
- package/primitives/timeline-item-group.js.map +1 -1
- package/primitives/timeline-item.d.ts +1 -1
- package/primitives/timeline-item.d.ts.map +1 -1
- package/primitives/timeline-item.js +7 -1
- package/primitives/timeline-item.js.map +1 -1
- package/primitives/window.d.ts +1 -1
- package/primitives/window.d.ts.map +1 -1
- package/primitives/window.js +4 -4
- package/primitives/window.js.map +1 -1
- package/provider.d.ts +23 -43
- package/provider.d.ts.map +1 -1
- package/provider.js +152 -49
- package/provider.js.map +1 -1
- package/realtime/event-filter.d.ts +4 -0
- package/realtime/event-filter.d.ts.map +1 -1
- package/realtime/event-filter.js +4 -0
- package/realtime/event-filter.js.map +1 -1
- package/realtime/index.js +1 -1
- package/realtime/provider.d.ts +7 -2
- package/realtime/provider.d.ts.map +1 -1
- package/realtime/provider.js +23 -1
- package/realtime/provider.js.map +1 -1
- package/realtime/seen-store.d.ts +13 -0
- package/realtime/seen-store.d.ts.map +1 -1
- package/realtime/seen-store.js +14 -2
- package/realtime/seen-store.js.map +1 -1
- package/realtime/support-provider.d.ts +1 -2
- package/realtime/support-provider.d.ts.map +1 -1
- package/realtime/support-provider.js +19 -20
- package/realtime/support-provider.js.map +1 -1
- package/realtime/typing-store.d.ts +18 -0
- package/realtime/typing-store.d.ts.map +1 -1
- package/realtime/typing-store.js +19 -2
- package/realtime/typing-store.js.map +1 -1
- package/realtime/use-realtime.d.ts +8 -4
- package/realtime/use-realtime.d.ts.map +1 -1
- package/realtime/use-realtime.js +4 -0
- package/realtime/use-realtime.js.map +1 -1
- package/realtime-events.d.ts +15 -1
- package/realtime-events.d.ts.map +1 -1
- package/schemas.d.ts +6 -0
- package/schemas.d.ts.map +1 -1
- package/support/components/avatar-stack.d.ts +8 -4
- package/support/components/avatar-stack.d.ts.map +1 -1
- package/support/components/avatar-stack.js +4 -0
- package/support/components/avatar-stack.js.map +1 -1
- package/support/components/avatar.d.ts +11 -6
- package/support/components/avatar.d.ts.map +1 -1
- package/support/components/avatar.js +4 -0
- package/support/components/avatar.js.map +1 -1
- package/support/components/bubble.d.ts.map +1 -1
- package/support/components/bubble.js +29 -6
- package/support/components/bubble.js.map +1 -1
- package/support/components/button.d.ts +8 -5
- package/support/components/button.d.ts.map +1 -1
- package/support/components/button.js +5 -1
- package/support/components/button.js.map +1 -1
- package/support/components/container.d.ts +0 -1
- package/support/components/container.d.ts.map +1 -1
- package/support/components/container.js +2 -8
- package/support/components/container.js.map +1 -1
- package/support/components/conversation-button-link.d.ts +8 -21
- package/support/components/conversation-button-link.d.ts.map +1 -1
- package/support/components/conversation-button-link.js +62 -178
- package/support/components/conversation-button-link.js.map +1 -1
- package/support/components/conversation-event.d.ts.map +1 -1
- package/support/components/conversation-event.js +4 -0
- package/support/components/conversation-event.js.map +1 -1
- package/support/components/conversation-timeline.d.ts +10 -1
- package/support/components/conversation-timeline.d.ts.map +1 -1
- package/support/components/conversation-timeline.js +63 -57
- package/support/components/conversation-timeline.js.map +1 -1
- package/support/components/cossistant-branding.d.ts +5 -2
- package/support/components/cossistant-branding.d.ts.map +1 -1
- package/support/components/cossistant-branding.js +3 -0
- package/support/components/cossistant-branding.js.map +1 -1
- package/support/components/header.d.ts.map +1 -1
- package/support/components/header.js +2 -2
- package/support/components/header.js.map +1 -1
- package/support/components/icons.d.ts.map +1 -1
- package/support/components/multimodal-input.d.ts.map +1 -1
- package/support/components/multimodal-input.js +5 -24
- package/support/components/multimodal-input.js.map +1 -1
- package/support/components/navigation-tab.d.ts +7 -2
- package/support/components/navigation-tab.d.ts.map +1 -1
- package/support/components/navigation-tab.js +4 -0
- package/support/components/navigation-tab.js.map +1 -1
- package/support/components/support-content.d.ts +1 -1
- package/support/components/support-content.d.ts.map +1 -1
- package/support/components/support-content.js +7 -10
- package/support/components/support-content.js.map +1 -1
- package/support/components/text-effect.d.ts +5 -2
- package/support/components/text-effect.d.ts.map +1 -1
- package/support/components/text-effect.js +4 -0
- package/support/components/text-effect.js.map +1 -1
- package/support/components/timeline-identification-tool.d.ts +7 -0
- package/support/components/timeline-identification-tool.d.ts.map +1 -0
- package/support/components/timeline-identification-tool.js +139 -0
- package/support/components/timeline-identification-tool.js.map +1 -0
- package/support/components/timeline-message-group.d.ts +2 -1
- package/support/components/timeline-message-group.d.ts.map +1 -1
- package/support/components/timeline-message-group.js +4 -19
- package/support/components/timeline-message-group.js.map +1 -1
- package/support/components/timeline-message-item.d.ts +6 -2
- package/support/components/timeline-message-item.d.ts.map +1 -1
- package/support/components/timeline-message-item.js +8 -4
- package/support/components/timeline-message-item.js.map +1 -1
- package/support/components/typing-indicator.d.ts +5 -2
- package/support/components/typing-indicator.d.ts.map +1 -1
- package/support/components/typing-indicator.js +4 -4
- package/support/components/typing-indicator.js.map +1 -1
- package/support/components/watermark.d.ts.map +1 -1
- package/support/context/websocket.d.ts +8 -0
- package/support/context/websocket.d.ts.map +1 -1
- package/support/context/websocket.js +12 -6
- package/support/context/websocket.js.map +1 -1
- package/support/index.d.ts +8 -8
- package/support/index.d.ts.map +1 -1
- package/support/index.js +18 -18
- package/support/index.js.map +1 -1
- package/support/pages/conversation-history.js +46 -54
- package/support/pages/conversation-history.js.map +1 -1
- package/support/pages/conversation.d.ts +3 -6
- package/support/pages/conversation.d.ts.map +1 -1
- package/support/pages/conversation.js +19 -9
- package/support/pages/conversation.js.map +1 -1
- package/support/pages/home.d.ts +2 -2
- package/support/pages/home.d.ts.map +1 -1
- package/support/pages/home.js +64 -77
- package/support/pages/home.js.map +1 -1
- package/support/store/support-store.d.ts +18 -2
- package/support/store/support-store.d.ts.map +1 -1
- package/support/store/support-store.js +20 -5
- package/support/store/support-store.js.map +1 -1
- package/support/{support-CMoDLQoC.css → support-Ck4jy29i.css} +1 -2
- package/support/support-Ck4jy29i.css.map +1 -0
- package/support/text/index.d.ts +15 -2
- package/support/text/index.d.ts.map +1 -1
- package/support/text/index.js +15 -2
- package/support/text/index.js.map +1 -1
- package/support/text/locales/en.js +22 -4
- package/support/text/locales/en.js.map +1 -1
- package/support/text/locales/es.js +18 -0
- package/support/text/locales/es.js.map +1 -1
- package/support/text/locales/fr.js +18 -0
- package/support/text/locales/fr.js.map +1 -1
- package/support/text/locales/keys.d.ts +69 -9
- package/support/text/locales/keys.d.ts.map +1 -1
- package/support/text/locales/keys.js +18 -0
- package/support/text/locales/keys.js.map +1 -1
- package/support/text/runtime.d.ts +21 -0
- package/support/text/runtime.d.ts.map +1 -1
- package/support/text/runtime.js +21 -0
- package/support/text/runtime.js.map +1 -1
- package/support/utils/index.d.ts +4 -0
- package/support/utils/index.d.ts.map +1 -1
- package/support/utils/index.js +4 -1
- package/support/utils/index.js.map +1 -1
- package/support/utils/time.d.ts +3 -0
- package/support/utils/time.d.ts.map +1 -1
- package/support/utils/time.js +3 -0
- package/support/utils/time.js.map +1 -1
- package/support-config.d.ts +2 -1
- package/support-config.d.ts.map +1 -1
- package/support-config.js.map +1 -1
- package/support.css +2 -2
- package/tailwind.css +404 -0
- package/timeline-item.d.ts +10 -0
- package/timeline-item.d.ts.map +1 -1
- package/utils/conversation.d.ts +7 -0
- package/utils/conversation.d.ts.map +1 -0
- package/utils/conversation.js +18 -0
- package/utils/conversation.js.map +1 -0
- package/utils/id.d.ts +3 -0
- package/utils/id.d.ts.map +1 -1
- package/utils/id.js +3 -0
- package/utils/id.js.map +1 -1
- package/utils/index.d.ts +2 -1
- package/utils/index.js +2 -1
- package/utils/metadata-hash.d.ts +12 -0
- package/utils/metadata-hash.d.ts.map +1 -0
- package/utils/metadata-hash.js +26 -0
- package/utils/metadata-hash.js.map +1 -0
- package/utils/text.d.ts +3 -0
- package/utils/text.d.ts.map +1 -1
- package/utils/text.js +3 -0
- package/utils/text.js.map +1 -1
- package/utils/use-render-element.d.ts +3 -0
- package/utils/use-render-element.d.ts.map +1 -1
- package/utils/use-render-element.js +3 -0
- package/utils/use-render-element.js.map +1 -1
- package/support/context/config.d.ts +0 -32
- package/support/context/config.d.ts.map +0 -1
- package/support/context/config.js +0 -27
- package/support/context/config.js.map +0 -1
- package/support/support-CMoDLQoC.css.map +0 -1
package/README.md
CHANGED
|
@@ -16,10 +16,37 @@ npm install @cossistant/react
|
|
|
16
16
|
yarn add @cossistant/react
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
+
## CSS Imports
|
|
20
|
+
|
|
21
|
+
The SDK provides two CSS entrypoints to fit your setup:
|
|
22
|
+
|
|
23
|
+
### Option 1: Tailwind v4 Source
|
|
24
|
+
|
|
25
|
+
If you're using Tailwind CSS v4, import the source file to enable full theme customization:
|
|
26
|
+
|
|
27
|
+
```tsx
|
|
28
|
+
import "@cossistant/react/tailwind.css";
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
This imports the raw Tailwind v4 source file, allowing you to override theme variables like `--co-theme-primary` in your own CSS.
|
|
32
|
+
|
|
33
|
+
### Option 2: Plain CSS
|
|
34
|
+
|
|
35
|
+
Import the pre-compiled CSS with no Tailwind dependency:
|
|
36
|
+
|
|
37
|
+
```tsx
|
|
38
|
+
import "@cossistant/react/support.css";
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
This file contains all the compiled styles and works in any React application without requiring Tailwind CSS.
|
|
42
|
+
|
|
43
|
+
> **Note:** Tailwind v3 is not supported. Use the plain CSS import if you're on Tailwind v3.
|
|
44
|
+
|
|
19
45
|
## Render the widget
|
|
20
46
|
|
|
21
47
|
```tsx
|
|
22
48
|
import { SupportProvider, Support } from "@cossistant/react";
|
|
49
|
+
import "@cossistant/react/support.css";
|
|
23
50
|
|
|
24
51
|
export function App() {
|
|
25
52
|
return (
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
//#region rolldown:runtime
|
|
2
|
+
var __create = Object.create;
|
|
2
3
|
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
3
8
|
var __export = (all) => {
|
|
4
9
|
let target = {};
|
|
5
10
|
for (var name in all) __defProp(target, name, {
|
|
@@ -8,6 +13,20 @@ var __export = (all) => {
|
|
|
8
13
|
});
|
|
9
14
|
return target;
|
|
10
15
|
};
|
|
16
|
+
var __copyProps = (to, from, except, desc) => {
|
|
17
|
+
if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
18
|
+
key = keys[i];
|
|
19
|
+
if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
20
|
+
get: ((k) => from[k]).bind(null, key),
|
|
21
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
return to;
|
|
25
|
+
};
|
|
26
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
27
|
+
value: mod,
|
|
28
|
+
enumerable: true
|
|
29
|
+
}) : target, mod));
|
|
11
30
|
|
|
12
31
|
//#endregion
|
|
13
32
|
export { __export };
|
package/conversation.d.ts
CHANGED
|
@@ -14,8 +14,10 @@ declare const createConversationResponseSchema: z.ZodObject<{
|
|
|
14
14
|
type: z.ZodEnum<{
|
|
15
15
|
message: "message";
|
|
16
16
|
event: "event";
|
|
17
|
+
identification: "identification";
|
|
17
18
|
}>;
|
|
18
19
|
text: z.ZodNullable<z.ZodString>;
|
|
20
|
+
tool: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
19
21
|
parts: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
20
22
|
type: z.ZodLiteral<"text">;
|
|
21
23
|
text: z.ZodString;
|
|
@@ -33,6 +35,9 @@ declare const createConversationResponseSchema: z.ZodObject<{
|
|
|
33
35
|
tag_removed: "tag_removed";
|
|
34
36
|
resolved: "resolved";
|
|
35
37
|
reopened: "reopened";
|
|
38
|
+
visitor_blocked: "visitor_blocked";
|
|
39
|
+
visitor_unblocked: "visitor_unblocked";
|
|
40
|
+
visitor_identified: "visitor_identified";
|
|
36
41
|
}>;
|
|
37
42
|
actorUserId: z.ZodNullable<z.ZodString>;
|
|
38
43
|
actorAiAgentId: z.ZodNullable<z.ZodString>;
|
|
@@ -72,6 +77,7 @@ declare const createConversationResponseSchema: z.ZodObject<{
|
|
|
72
77
|
open: "open";
|
|
73
78
|
spam: "spam";
|
|
74
79
|
}>>;
|
|
80
|
+
deletedAt: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
75
81
|
lastTimelineItem: z.ZodOptional<z.ZodObject<{
|
|
76
82
|
id: z.ZodOptional<z.ZodString>;
|
|
77
83
|
conversationId: z.ZodString;
|
|
@@ -83,8 +89,10 @@ declare const createConversationResponseSchema: z.ZodObject<{
|
|
|
83
89
|
type: z.ZodEnum<{
|
|
84
90
|
message: "message";
|
|
85
91
|
event: "event";
|
|
92
|
+
identification: "identification";
|
|
86
93
|
}>;
|
|
87
94
|
text: z.ZodNullable<z.ZodString>;
|
|
95
|
+
tool: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
88
96
|
parts: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
89
97
|
type: z.ZodLiteral<"text">;
|
|
90
98
|
text: z.ZodString;
|
|
@@ -102,6 +110,9 @@ declare const createConversationResponseSchema: z.ZodObject<{
|
|
|
102
110
|
tag_removed: "tag_removed";
|
|
103
111
|
resolved: "resolved";
|
|
104
112
|
reopened: "reopened";
|
|
113
|
+
visitor_blocked: "visitor_blocked";
|
|
114
|
+
visitor_unblocked: "visitor_unblocked";
|
|
115
|
+
visitor_identified: "visitor_identified";
|
|
105
116
|
}>;
|
|
106
117
|
actorUserId: z.ZodNullable<z.ZodString>;
|
|
107
118
|
actorAiAgentId: z.ZodNullable<z.ZodString>;
|
|
@@ -163,6 +174,7 @@ declare const listConversationsResponseSchema: z.ZodObject<{
|
|
|
163
174
|
open: "open";
|
|
164
175
|
spam: "spam";
|
|
165
176
|
}>>;
|
|
177
|
+
deletedAt: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
166
178
|
lastTimelineItem: z.ZodOptional<z.ZodObject<{
|
|
167
179
|
id: z.ZodOptional<z.ZodString>;
|
|
168
180
|
conversationId: z.ZodString;
|
|
@@ -174,8 +186,10 @@ declare const listConversationsResponseSchema: z.ZodObject<{
|
|
|
174
186
|
type: z.ZodEnum<{
|
|
175
187
|
message: "message";
|
|
176
188
|
event: "event";
|
|
189
|
+
identification: "identification";
|
|
177
190
|
}>;
|
|
178
191
|
text: z.ZodNullable<z.ZodString>;
|
|
192
|
+
tool: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
179
193
|
parts: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
180
194
|
type: z.ZodLiteral<"text">;
|
|
181
195
|
text: z.ZodString;
|
|
@@ -193,6 +207,9 @@ declare const listConversationsResponseSchema: z.ZodObject<{
|
|
|
193
207
|
tag_removed: "tag_removed";
|
|
194
208
|
resolved: "resolved";
|
|
195
209
|
reopened: "reopened";
|
|
210
|
+
visitor_blocked: "visitor_blocked";
|
|
211
|
+
visitor_unblocked: "visitor_unblocked";
|
|
212
|
+
visitor_identified: "visitor_identified";
|
|
196
213
|
}>;
|
|
197
214
|
actorUserId: z.ZodNullable<z.ZodString>;
|
|
198
215
|
actorAiAgentId: z.ZodNullable<z.ZodString>;
|
|
@@ -247,6 +264,7 @@ declare const getConversationResponseSchema: z.ZodObject<{
|
|
|
247
264
|
open: "open";
|
|
248
265
|
spam: "spam";
|
|
249
266
|
}>>;
|
|
267
|
+
deletedAt: z.ZodDefault<z.ZodNullable<z.ZodString>>;
|
|
250
268
|
lastTimelineItem: z.ZodOptional<z.ZodObject<{
|
|
251
269
|
id: z.ZodOptional<z.ZodString>;
|
|
252
270
|
conversationId: z.ZodString;
|
|
@@ -258,8 +276,10 @@ declare const getConversationResponseSchema: z.ZodObject<{
|
|
|
258
276
|
type: z.ZodEnum<{
|
|
259
277
|
message: "message";
|
|
260
278
|
event: "event";
|
|
279
|
+
identification: "identification";
|
|
261
280
|
}>;
|
|
262
281
|
text: z.ZodNullable<z.ZodString>;
|
|
282
|
+
tool: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
263
283
|
parts: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
|
|
264
284
|
type: z.ZodLiteral<"text">;
|
|
265
285
|
text: z.ZodString;
|
|
@@ -277,6 +297,9 @@ declare const getConversationResponseSchema: z.ZodObject<{
|
|
|
277
297
|
tag_removed: "tag_removed";
|
|
278
298
|
resolved: "resolved";
|
|
279
299
|
reopened: "reopened";
|
|
300
|
+
visitor_blocked: "visitor_blocked";
|
|
301
|
+
visitor_unblocked: "visitor_unblocked";
|
|
302
|
+
visitor_identified: "visitor_identified";
|
|
280
303
|
}>;
|
|
281
304
|
actorUserId: z.ZodNullable<z.ZodString>;
|
|
282
305
|
actorAiAgentId: z.ZodNullable<z.ZodString>;
|
package/conversation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.d.ts","names":[],"sources":["../../types/src/api/conversation.ts"],"sourcesContent":[],"mappings":";;;;cA8Ba,kCAAgC,CAAA,CAAA
|
|
1
|
+
{"version":3,"file":"conversation.d.ts","names":[],"sources":["../../types/src/api/conversation.ts"],"sourcesContent":[],"mappings":";;;;cA8Ba,kCAAgC,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAAA,IAAA,WAAA,CAAA;QAAA,OAAA,EAAA,SAAA;QASjC,KAAA,EAAA,OAAA;QAIC,cAAA,EAAA,gBA2BV;;;;;;;;;;;;;;UA3BwC,gBAAA,EAAA,kBAAA;UAAA,cAAA,EAAA,gBAAA;UA6B/B,gBAAwB,EAAA,kBAC5B;UAGK,SAAA,EAAA,WAaV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAlDS,8BAAA,GAAiC,CAAA,CAAE,aACvC;cAGK,gCAA8B,CAAA,CAAA;;;;;;;;;;;;;;;;;KA6B/B,wBAAA,GAA2B,CAAA,CAAE,aACjC;cAGK,iCAA+B,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAAA,UAAA,EAAA,YAAA;UAAA,qBAAA,EAAA,uBAAA;UAehC,kBAAyB,EAAA,oBAC7B;UAGK,gBAQV,EAAA,kBAAA;;;UARsC,SAAA,EAAA,WAAA;UAAA,WAAA,EAAA,aAAA;UAU7B,QAAA,EAAsB,UAAA;UAIrB,QAAA,EAAA,UAMV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAxBS,yBAAA,GAA4B,CAAA,CAAE,aAClC;cAGK,8BAA4B,CAAA,CAAA;;;KAU7B,sBAAA,GAAyB,CAAA,CAAE,aAC/B;cAGK,+BAA6B,CAAA,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UAAA,kBAAA,EAAA,oBAAA;UAAA,gBAAA,EAAA,kBAAA;UAQ9B,cAAuB,EAAA,gBAC3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KADI,uBAAA,GAA0B,CAAA,CAAE,aAChC"}
|
package/hooks/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useClientQuery } from "./private/use-client-query.js";
|
|
2
2
|
import { useDefaultMessages } from "./private/use-default-messages.js";
|
|
3
|
-
import { ConversationItem, GroupedMessage, TimelineEventItem, UseGroupedMessagesOptions, UseGroupedMessagesProps, useGroupedMessages } from "./private/use-grouped-messages.js";
|
|
3
|
+
import { ConversationItem, GroupedMessage, TimelineEventItem, TimelineToolItem, UseGroupedMessagesOptions, UseGroupedMessagesProps, useGroupedMessages } from "./private/use-grouped-messages.js";
|
|
4
4
|
import { UseMultimodalInputOptions, UseMultimodalInputReturn, useMultimodalInput } from "./private/use-multimodal-input.js";
|
|
5
5
|
import { UseClientResult, useClient } from "./private/use-rest-client.js";
|
|
6
6
|
import { UseComposerRefocusOptions, UseComposerRefocusReturn, useComposerRefocus } from "./use-composer-refocus.js";
|
|
@@ -9,9 +9,11 @@ import { CONVERSATION_AUTO_SEEN_DELAY_MS, UseConversationAutoSeenOptions, useCon
|
|
|
9
9
|
import { UseConversationHistoryPageOptions, UseConversationHistoryPageReturn, useConversationHistoryPage } from "./use-conversation-history-page.js";
|
|
10
10
|
import { ConversationLifecycleState, UseConversationLifecycleOptions, UseConversationLifecycleReturn, useConversationLifecycle } from "./use-conversation-lifecycle.js";
|
|
11
11
|
import { UseConversationPageOptions, UseConversationPageReturn, useConversationPage } from "./use-conversation-page.js";
|
|
12
|
-
import { useConversationSeen, useDebouncedConversationSeen } from "./use-conversation-seen.js";
|
|
13
12
|
import { UseConversationTimelineItemsOptions, UseConversationTimelineItemsResult, useConversationTimelineItems } from "./use-conversation-timeline-items.js";
|
|
13
|
+
import { ConversationPreviewAssignedAgent, ConversationPreviewLastMessage, ConversationPreviewTypingParticipant, ConversationPreviewTypingState, UseConversationPreviewOptions, UseConversationPreviewReturn, useConversationPreview } from "./use-conversation-preview.js";
|
|
14
|
+
import { useConversationSeen, useDebouncedConversationSeen } from "./use-conversation-seen.js";
|
|
14
15
|
import { ConversationTypingParticipant, useConversationTyping } from "./use-conversation-typing.js";
|
|
16
|
+
import { ConversationTimelineTypingParticipant, UseConversationTimelineOptions, UseConversationTimelineReturn, useConversationTimeline } from "./use-conversation-timeline.js";
|
|
15
17
|
import { UseConversationsOptions, UseConversationsResult, useConversations } from "./use-conversations.js";
|
|
16
18
|
import { CreateConversationVariables, UseCreateConversationOptions, UseCreateConversationResult, useCreateConversation } from "./use-create-conversation.js";
|
|
17
19
|
import { UseHomePageOptions, UseHomePageReturn, useHomePage } from "./use-home-page.js";
|
|
@@ -20,4 +22,4 @@ import { UseRealtimeSupportOptions, UseRealtimeSupportResult, useRealtimeSupport
|
|
|
20
22
|
import { SendMessageOptions, SendMessageResult, UseSendMessageOptions, UseSendMessageResult, useSendMessage } from "./use-send-message.js";
|
|
21
23
|
import { UseVisitorReturn, useVisitor } from "./use-visitor.js";
|
|
22
24
|
import { WindowVisibilityFocusState, useWindowVisibilityFocus } from "./use-window-visibility-focus.js";
|
|
23
|
-
export { CONVERSATION_AUTO_SEEN_DELAY_MS, ConversationItem, ConversationLifecycleState, ConversationTypingParticipant, CreateConversationVariables, GroupedMessage, SendMessageOptions, SendMessageResult, TimelineEventItem, UseClientResult, UseComposerRefocusOptions, UseComposerRefocusReturn, UseConversationAutoSeenOptions, UseConversationHistoryPageOptions, UseConversationHistoryPageReturn, UseConversationLifecycleOptions, UseConversationLifecycleReturn, UseConversationOptions, UseConversationPageOptions, UseConversationPageReturn, UseConversationResult, UseConversationTimelineItemsOptions, UseConversationTimelineItemsResult, UseConversationsOptions, UseConversationsResult, UseCreateConversationOptions, UseCreateConversationResult, UseGroupedMessagesOptions, UseGroupedMessagesProps, UseHomePageOptions, UseHomePageReturn, UseMessageComposerOptions, UseMessageComposerReturn, UseMultimodalInputOptions, UseMultimodalInputReturn, UseRealtimeSupportOptions, UseRealtimeSupportResult, UseSendMessageOptions, UseSendMessageResult, UseVisitorReturn, WindowVisibilityFocusState, useClient, useClientQuery, useComposerRefocus, useConversation, useConversationAutoSeen, useConversationHistoryPage, useConversationLifecycle, useConversationPage, useConversationSeen, useConversationTimelineItems, useConversationTyping, useConversations, useCreateConversation, useDebouncedConversationSeen, useDefaultMessages, useGroupedMessages, useHomePage, useMessageComposer, useMultimodalInput, useRealtimeSupport, useSendMessage, useVisitor, useWindowVisibilityFocus };
|
|
25
|
+
export { CONVERSATION_AUTO_SEEN_DELAY_MS, ConversationItem, ConversationLifecycleState, ConversationPreviewAssignedAgent, ConversationPreviewLastMessage, ConversationPreviewTypingParticipant, ConversationPreviewTypingState, ConversationTimelineTypingParticipant, ConversationTypingParticipant, CreateConversationVariables, GroupedMessage, SendMessageOptions, SendMessageResult, TimelineEventItem, TimelineToolItem, UseClientResult, UseComposerRefocusOptions, UseComposerRefocusReturn, UseConversationAutoSeenOptions, UseConversationHistoryPageOptions, UseConversationHistoryPageReturn, UseConversationLifecycleOptions, UseConversationLifecycleReturn, UseConversationOptions, UseConversationPageOptions, UseConversationPageReturn, UseConversationPreviewOptions, UseConversationPreviewReturn, UseConversationResult, UseConversationTimelineItemsOptions, UseConversationTimelineItemsResult, UseConversationTimelineOptions, UseConversationTimelineReturn, UseConversationsOptions, UseConversationsResult, UseCreateConversationOptions, UseCreateConversationResult, UseGroupedMessagesOptions, UseGroupedMessagesProps, UseHomePageOptions, UseHomePageReturn, UseMessageComposerOptions, UseMessageComposerReturn, UseMultimodalInputOptions, UseMultimodalInputReturn, UseRealtimeSupportOptions, UseRealtimeSupportResult, UseSendMessageOptions, UseSendMessageResult, UseVisitorReturn, WindowVisibilityFocusState, useClient, useClientQuery, useComposerRefocus, useConversation, useConversationAutoSeen, useConversationHistoryPage, useConversationLifecycle, useConversationPage, useConversationPreview, useConversationSeen, useConversationTimeline, useConversationTimelineItems, useConversationTyping, useConversations, useCreateConversation, useDebouncedConversationSeen, useDefaultMessages, useGroupedMessages, useHomePage, useMessageComposer, useMultimodalInput, useRealtimeSupport, useSendMessage, useVisitor, useWindowVisibilityFocus };
|
package/hooks/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { useClientQuery } from "./private/use-client-query.js";
|
|
2
2
|
import { useClient } from "./private/use-rest-client.js";
|
|
3
|
+
import { useConversation } from "./use-conversation.js";
|
|
3
4
|
import { useWindowVisibilityFocus } from "./use-window-visibility-focus.js";
|
|
4
5
|
import { CONVERSATION_AUTO_SEEN_DELAY_MS, useConversationAutoSeen } from "./use-conversation-auto-seen.js";
|
|
5
6
|
import { useConversationLifecycle } from "./use-conversation-lifecycle.js";
|
|
@@ -9,16 +10,17 @@ import { useSendMessage } from "./use-send-message.js";
|
|
|
9
10
|
import { useMessageComposer } from "./use-message-composer.js";
|
|
10
11
|
import { useConversationPage } from "./use-conversation-page.js";
|
|
11
12
|
import { useGroupedMessages } from "./private/use-grouped-messages.js";
|
|
13
|
+
import { useConversationSeen, useDebouncedConversationSeen } from "./use-conversation-seen.js";
|
|
14
|
+
import { useConversationTyping } from "./use-conversation-typing.js";
|
|
15
|
+
import { useConversationTimeline } from "./use-conversation-timeline.js";
|
|
12
16
|
import { useComposerRefocus } from "./use-composer-refocus.js";
|
|
17
|
+
import { useVisitor } from "./use-visitor.js";
|
|
13
18
|
import { useConversations } from "./use-conversations.js";
|
|
14
19
|
import { useConversationHistoryPage } from "./use-conversation-history-page.js";
|
|
20
|
+
import { useConversationPreview } from "./use-conversation-preview.js";
|
|
15
21
|
import { useHomePage } from "./use-home-page.js";
|
|
16
22
|
import { useDefaultMessages } from "./private/use-default-messages.js";
|
|
17
|
-
import { useConversation } from "./use-conversation.js";
|
|
18
|
-
import { useConversationSeen, useDebouncedConversationSeen } from "./use-conversation-seen.js";
|
|
19
|
-
import { useConversationTyping } from "./use-conversation-typing.js";
|
|
20
23
|
import { useCreateConversation } from "./use-create-conversation.js";
|
|
21
24
|
import { useRealtimeSupport } from "./use-realtime-support.js";
|
|
22
|
-
import { useVisitor } from "./use-visitor.js";
|
|
23
25
|
|
|
24
|
-
export { CONVERSATION_AUTO_SEEN_DELAY_MS, useClient, useClientQuery, useComposerRefocus, useConversation, useConversationAutoSeen, useConversationHistoryPage, useConversationLifecycle, useConversationPage, useConversationSeen, useConversationTimelineItems, useConversationTyping, useConversations, useCreateConversation, useDebouncedConversationSeen, useDefaultMessages, useGroupedMessages, useHomePage, useMessageComposer, useMultimodalInput, useRealtimeSupport, useSendMessage, useVisitor, useWindowVisibilityFocus };
|
|
26
|
+
export { CONVERSATION_AUTO_SEEN_DELAY_MS, useClient, useClientQuery, useComposerRefocus, useConversation, useConversationAutoSeen, useConversationHistoryPage, useConversationLifecycle, useConversationPage, useConversationPreview, useConversationSeen, useConversationTimeline, useConversationTimelineItems, useConversationTyping, useConversations, useCreateConversation, useDebouncedConversationSeen, useDefaultMessages, useGroupedMessages, useHomePage, useMessageComposer, useMultimodalInput, useRealtimeSupport, useSendMessage, useVisitor, useWindowVisibilityFocus };
|
|
@@ -6,7 +6,15 @@ type ConversationSelection = {
|
|
|
6
6
|
conversations: Conversation[];
|
|
7
7
|
pagination: ConversationPagination | null;
|
|
8
8
|
};
|
|
9
|
+
/**
|
|
10
|
+
* Selector hook that exposes the normalized conversations list from the
|
|
11
|
+
* internal store alongside pagination metadata.
|
|
12
|
+
*/
|
|
9
13
|
declare function useConversationsStore(): ConversationSelection;
|
|
14
|
+
/**
|
|
15
|
+
* Picks a single conversation entity from the store by id. Returns `null` when
|
|
16
|
+
* the identifier is missing or the entity has not been fetched yet.
|
|
17
|
+
*/
|
|
10
18
|
declare function useConversationById(conversationId: string | null): Conversation | null;
|
|
11
19
|
//#endregion
|
|
12
20
|
export { useConversationById, useConversationsStore };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-conversations-store.d.ts","names":[],"sources":["../../../../src/hooks/private/store/use-conversations-store.ts"],"sourcesContent":[],"mappings":";;;;KAQK,qBAAA;iBACW;EADX,UAAA,EAEQ,sBAFa,
|
|
1
|
+
{"version":3,"file":"use-conversations-store.d.ts","names":[],"sources":["../../../../src/hooks/private/store/use-conversations-store.ts"],"sourcesContent":[],"mappings":";;;;KAQK,qBAAA;iBACW;EADX,UAAA,EAEQ,sBAFa,GACV,IAAA;AAwChB,CAAA;AA4BA;;;;iBA5BgB,qBAAA,CAAA,GAAyB;;;;;iBA4BzB,mBAAA,iCAEb"}
|
|
@@ -12,6 +12,10 @@ function areSelectionsEqual(a, b) {
|
|
|
12
12
|
for (let index = 0; index < a.conversations.length; index += 1) if (a.conversations[index] !== b.conversations[index]) return false;
|
|
13
13
|
return true;
|
|
14
14
|
}
|
|
15
|
+
/**
|
|
16
|
+
* Selector hook that exposes the normalized conversations list from the
|
|
17
|
+
* internal store alongside pagination metadata.
|
|
18
|
+
*/
|
|
15
19
|
function useConversationsStore() {
|
|
16
20
|
const { client } = useSupport();
|
|
17
21
|
if (!client) throw new Error("useConversationsStore requires a configured Cossistant client");
|
|
@@ -20,6 +24,10 @@ function useConversationsStore() {
|
|
|
20
24
|
pagination: state.pagination
|
|
21
25
|
}), areSelectionsEqual);
|
|
22
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Picks a single conversation entity from the store by id. Returns `null` when
|
|
29
|
+
* the identifier is missing or the entity has not been fetched yet.
|
|
30
|
+
*/
|
|
23
31
|
function useConversationById(conversationId) {
|
|
24
32
|
const { client } = useSupport();
|
|
25
33
|
if (!client) throw new Error("useConversationById requires a configured Cossistant client");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-conversations-store.js","names":[],"sources":["../../../../src/hooks/private/store/use-conversations-store.ts"],"sourcesContent":["import type {\n\tConversationPagination,\n\tConversationsState,\n} from \"@cossistant/core\";\nimport type { Conversation } from \"@cossistant/types\";\nimport { useSupport } from \"../../../provider\";\nimport { useStoreSelector } from \"./use-store-selector\";\n\ntype ConversationSelection = {\n\tconversations: Conversation[];\n\tpagination: ConversationPagination | null;\n};\n\nfunction areSelectionsEqual(\n\ta: ConversationSelection,\n\tb: ConversationSelection\n): boolean {\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (a.pagination !== b.pagination) {\n\t\tif (!(a.pagination && b.pagination)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (\n\t\t\ta.pagination.page !== b.pagination.page ||\n\t\t\ta.pagination.limit !== b.pagination.limit ||\n\t\t\ta.pagination.total !== b.pagination.total ||\n\t\t\ta.pagination.totalPages !== b.pagination.totalPages ||\n\t\t\ta.pagination.hasMore !== b.pagination.hasMore\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\tif (a.conversations.length !== b.conversations.length) {\n\t\treturn false;\n\t}\n\tfor (let index = 0; index < a.conversations.length; index += 1) {\n\t\tif (a.conversations[index] !== b.conversations[index]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nexport function useConversationsStore(): ConversationSelection {\n\tconst { client } = useSupport();\n\n\tif (!client) {\n\t\tthrow new Error(\n\t\t\t\"useConversationsStore requires a configured Cossistant client\"\n\t\t);\n\t}\n\n\treturn useStoreSelector(\n\t\tclient.conversationsStore,\n\t\t(state: ConversationsState) => ({\n\t\t\tconversations: state.ids\n\t\t\t\t.map((id) => state.byId[id])\n\t\t\t\t.filter(\n\t\t\t\t\t(conversation): conversation is Conversation =>\n\t\t\t\t\t\tconversation !== undefined\n\t\t\t\t),\n\t\t\tpagination: state.pagination,\n\t\t}),\n\t\tareSelectionsEqual\n\t);\n}\n\nexport function useConversationById(\n\tconversationId: string | null\n): Conversation | null {\n\tconst { client } = useSupport();\n\n\tif (!client) {\n\t\tthrow new Error(\n\t\t\t\"useConversationById requires a configured Cossistant client\"\n\t\t);\n\t}\n\n\treturn useStoreSelector(client.conversationsStore, (state) => {\n\t\tif (!conversationId) {\n\t\t\treturn null;\n\t\t}\n\t\treturn state.byId[conversationId] ?? null;\n\t});\n}\n"],"mappings":";;;;AAaA,SAAS,mBACR,GACA,GACU;AACV,KAAI,MAAM,EACT,QAAO;AAER,KAAI,EAAE,eAAe,EAAE,YAAY;AAClC,MAAI,EAAE,EAAE,cAAc,EAAE,YACvB,QAAO;AAER,MACC,EAAE,WAAW,SAAS,EAAE,WAAW,QACnC,EAAE,WAAW,UAAU,EAAE,WAAW,SACpC,EAAE,WAAW,UAAU,EAAE,WAAW,SACpC,EAAE,WAAW,eAAe,EAAE,WAAW,cACzC,EAAE,WAAW,YAAY,EAAE,WAAW,QAEtC,QAAO;;AAGT,KAAI,EAAE,cAAc,WAAW,EAAE,cAAc,OAC9C,QAAO;AAER,MAAK,IAAI,QAAQ,GAAG,QAAQ,EAAE,cAAc,QAAQ,SAAS,EAC5D,KAAI,EAAE,cAAc,WAAW,EAAE,cAAc,OAC9C,QAAO;AAGT,QAAO
|
|
1
|
+
{"version":3,"file":"use-conversations-store.js","names":[],"sources":["../../../../src/hooks/private/store/use-conversations-store.ts"],"sourcesContent":["import type {\n\tConversationPagination,\n\tConversationsState,\n} from \"@cossistant/core\";\nimport type { Conversation } from \"@cossistant/types\";\nimport { useSupport } from \"../../../provider\";\nimport { useStoreSelector } from \"./use-store-selector\";\n\ntype ConversationSelection = {\n\tconversations: Conversation[];\n\tpagination: ConversationPagination | null;\n};\n\nfunction areSelectionsEqual(\n\ta: ConversationSelection,\n\tb: ConversationSelection\n): boolean {\n\tif (a === b) {\n\t\treturn true;\n\t}\n\tif (a.pagination !== b.pagination) {\n\t\tif (!(a.pagination && b.pagination)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (\n\t\t\ta.pagination.page !== b.pagination.page ||\n\t\t\ta.pagination.limit !== b.pagination.limit ||\n\t\t\ta.pagination.total !== b.pagination.total ||\n\t\t\ta.pagination.totalPages !== b.pagination.totalPages ||\n\t\t\ta.pagination.hasMore !== b.pagination.hasMore\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\tif (a.conversations.length !== b.conversations.length) {\n\t\treturn false;\n\t}\n\tfor (let index = 0; index < a.conversations.length; index += 1) {\n\t\tif (a.conversations[index] !== b.conversations[index]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n/**\n * Selector hook that exposes the normalized conversations list from the\n * internal store alongside pagination metadata.\n */\nexport function useConversationsStore(): ConversationSelection {\n\tconst { client } = useSupport();\n\n\tif (!client) {\n\t\tthrow new Error(\n\t\t\t\"useConversationsStore requires a configured Cossistant client\"\n\t\t);\n\t}\n\n\treturn useStoreSelector(\n\t\tclient.conversationsStore,\n\t\t(state: ConversationsState) => ({\n\t\t\tconversations: state.ids\n\t\t\t\t.map((id) => state.byId[id])\n\t\t\t\t.filter(\n\t\t\t\t\t(conversation): conversation is Conversation =>\n\t\t\t\t\t\tconversation !== undefined\n\t\t\t\t),\n\t\t\tpagination: state.pagination,\n\t\t}),\n\t\tareSelectionsEqual\n\t);\n}\n\n/**\n * Picks a single conversation entity from the store by id. Returns `null` when\n * the identifier is missing or the entity has not been fetched yet.\n */\nexport function useConversationById(\n\tconversationId: string | null\n): Conversation | null {\n\tconst { client } = useSupport();\n\n\tif (!client) {\n\t\tthrow new Error(\n\t\t\t\"useConversationById requires a configured Cossistant client\"\n\t\t);\n\t}\n\n\treturn useStoreSelector(client.conversationsStore, (state) => {\n\t\tif (!conversationId) {\n\t\t\treturn null;\n\t\t}\n\t\treturn state.byId[conversationId] ?? null;\n\t});\n}\n"],"mappings":";;;;AAaA,SAAS,mBACR,GACA,GACU;AACV,KAAI,MAAM,EACT,QAAO;AAER,KAAI,EAAE,eAAe,EAAE,YAAY;AAClC,MAAI,EAAE,EAAE,cAAc,EAAE,YACvB,QAAO;AAER,MACC,EAAE,WAAW,SAAS,EAAE,WAAW,QACnC,EAAE,WAAW,UAAU,EAAE,WAAW,SACpC,EAAE,WAAW,UAAU,EAAE,WAAW,SACpC,EAAE,WAAW,eAAe,EAAE,WAAW,cACzC,EAAE,WAAW,YAAY,EAAE,WAAW,QAEtC,QAAO;;AAGT,KAAI,EAAE,cAAc,WAAW,EAAE,cAAc,OAC9C,QAAO;AAER,MAAK,IAAI,QAAQ,GAAG,QAAQ,EAAE,cAAc,QAAQ,SAAS,EAC5D,KAAI,EAAE,cAAc,WAAW,EAAE,cAAc,OAC9C,QAAO;AAGT,QAAO;;;;;;AAOR,SAAgB,wBAA+C;CAC9D,MAAM,EAAE,WAAW,YAAY;AAE/B,KAAI,CAAC,OACJ,OAAM,IAAI,MACT,gEACA;AAGF,QAAO,iBACN,OAAO,qBACN,WAA+B;EAC/B,eAAe,MAAM,IACnB,KAAK,OAAO,MAAM,KAAK,IAAI,CAC3B,QACC,iBACA,iBAAiB,OAClB;EACF,YAAY,MAAM;EAClB,GACD,mBACA;;;;;;AAOF,SAAgB,oBACf,gBACsB;CACtB,MAAM,EAAE,WAAW,YAAY;AAE/B,KAAI,CAAC,OACJ,OAAM,IAAI,MACT,8DACA;AAGF,QAAO,iBAAiB,OAAO,qBAAqB,UAAU;AAC7D,MAAI,CAAC,eACJ,QAAO;AAER,SAAO,MAAM,KAAK,mBAAmB;GACpC"}
|
|
@@ -4,6 +4,10 @@ type BasicStore<TState> = {
|
|
|
4
4
|
getState(): TState;
|
|
5
5
|
subscribe(listener: Subscription<TState>): () => void;
|
|
6
6
|
};
|
|
7
|
+
/**
|
|
8
|
+
* React hook that bridges Zustand-like stores with React components by
|
|
9
|
+
* memoizing selector results and resubscribing when dependencies change.
|
|
10
|
+
*/
|
|
7
11
|
declare function useStoreSelector<TState, TSelected>(store: BasicStore<TState>, selector: (state: TState) => TSelected, isEqual?: (previous: TSelected, next: TSelected) => boolean): TSelected;
|
|
8
12
|
//#endregion
|
|
9
13
|
export { useStoreSelector };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-store-selector.d.ts","names":[],"sources":["../../../../src/hooks/private/store/use-store-selector.ts"],"sourcesContent":[],"mappings":";KAEK,+BAA+B;KAE/B,UAFA,CAAA,MAAY,CAAA,GAAA;EAEZ,QAAA,EAAA,EACQ,MADE;
|
|
1
|
+
{"version":3,"file":"use-store-selector.d.ts","names":[],"sources":["../../../../src/hooks/private/store/use-store-selector.ts"],"sourcesContent":[],"mappings":";KAEK,+BAA+B;KAE/B,UAFA,CAAA,MAAY,CAAA,GAAA;EAEZ,QAAA,EAAA,EACQ,MADE;EACF,SAAA,CAAA,QAAA,EACQ,YADR,CACqB,MADrB,CAAA,CAAA,EAAA,GAAA,GAAA,IAAA;CACqB;;;AAOlC;;AACQ,iBADQ,gBACR,CAAA,MAAA,EAAA,SAAA,CAAA,CAAA,KAAA,EAAA,UAAA,CAAW,MAAX,CAAA,EAAA,QAAA,EAAA,CAAA,KAAA,EACW,MADX,EAAA,GACsB,SADtB,EAAA,OAAA,CAAA,EAAA,CAAA,QAAA,EAEa,SAFb,EAAA,IAAA,EAE8B,SAF9B,EAAA,GAAA,OAAA,CAAA,EAGL,SAHK"}
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { useRef, useSyncExternalStore } from "react";
|
|
2
2
|
|
|
3
3
|
//#region src/hooks/private/store/use-store-selector.ts
|
|
4
|
+
/**
|
|
5
|
+
* React hook that bridges Zustand-like stores with React components by
|
|
6
|
+
* memoizing selector results and resubscribing when dependencies change.
|
|
7
|
+
*/
|
|
4
8
|
function useStoreSelector(store, selector, isEqual = Object.is) {
|
|
5
9
|
const selectionRef = useRef(void 0);
|
|
6
10
|
const subscribe = (onStoreChange) => store.subscribe(() => {
|
|
7
11
|
onStoreChange();
|
|
8
12
|
});
|
|
9
|
-
const
|
|
10
|
-
const selected = selector(snapshot);
|
|
13
|
+
const selected = selector(useSyncExternalStore(subscribe, () => store.getState(), () => store.getState()));
|
|
11
14
|
if (selectionRef.current === void 0 || !isEqual(selectionRef.current, selected)) selectionRef.current = selected;
|
|
12
15
|
return selectionRef.current;
|
|
13
16
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-store-selector.js","names":[],"sources":["../../../../src/hooks/private/store/use-store-selector.ts"],"sourcesContent":["import { useRef, useSyncExternalStore } from \"react\";\n\ntype Subscription<TState> = (state: TState) => void;\n\ntype BasicStore<TState> = {\n\tgetState(): TState;\n\tsubscribe(listener: Subscription<TState>): () => void;\n};\n\nexport function useStoreSelector<TState, TSelected>(\n\tstore: BasicStore<TState>,\n\tselector: (state: TState) => TSelected,\n\tisEqual: (previous: TSelected, next: TSelected) => boolean = Object.is\n): TSelected {\n\tconst selectionRef = useRef<TSelected>(undefined);\n\n\tconst subscribe = (onStoreChange: () => void) =>\n\t\tstore.subscribe(() => {\n\t\t\tonStoreChange();\n\t\t});\n\n\tconst snapshot = useSyncExternalStore(\n\t\tsubscribe,\n\t\t() => store.getState(),\n\t\t() => store.getState()\n\t);\n\tconst selected = selector(snapshot);\n\n\tif (\n\t\tselectionRef.current === undefined ||\n\t\t!isEqual(selectionRef.current, selected)\n\t) {\n\t\tselectionRef.current = selected;\n\t}\n\n\treturn selectionRef.current as TSelected;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"use-store-selector.js","names":[],"sources":["../../../../src/hooks/private/store/use-store-selector.ts"],"sourcesContent":["import { useRef, useSyncExternalStore } from \"react\";\n\ntype Subscription<TState> = (state: TState) => void;\n\ntype BasicStore<TState> = {\n\tgetState(): TState;\n\tsubscribe(listener: Subscription<TState>): () => void;\n};\n\n/**\n * React hook that bridges Zustand-like stores with React components by\n * memoizing selector results and resubscribing when dependencies change.\n */\nexport function useStoreSelector<TState, TSelected>(\n\tstore: BasicStore<TState>,\n\tselector: (state: TState) => TSelected,\n\tisEqual: (previous: TSelected, next: TSelected) => boolean = Object.is\n): TSelected {\n\tconst selectionRef = useRef<TSelected>(undefined);\n\n\tconst subscribe = (onStoreChange: () => void) =>\n\t\tstore.subscribe(() => {\n\t\t\tonStoreChange();\n\t\t});\n\n\tconst snapshot = useSyncExternalStore(\n\t\tsubscribe,\n\t\t() => store.getState(),\n\t\t() => store.getState()\n\t);\n\tconst selected = selector(snapshot);\n\n\tif (\n\t\tselectionRef.current === undefined ||\n\t\t!isEqual(selectionRef.current, selected)\n\t) {\n\t\tselectionRef.current = selected;\n\t}\n\n\treturn selectionRef.current as TSelected;\n}\n"],"mappings":";;;;;;;AAaA,SAAgB,iBACf,OACA,UACA,UAA6D,OAAO,IACxD;CACZ,MAAM,eAAe,OAAkB,OAAU;CAEjD,MAAM,aAAa,kBAClB,MAAM,gBAAgB;AACrB,iBAAe;GACd;CAOH,MAAM,WAAW,SALA,qBAChB,iBACM,MAAM,UAAU,QAChB,MAAM,UAAU,CACtB,CACkC;AAEnC,KACC,aAAa,YAAY,UACzB,CAAC,QAAQ,aAAa,SAAS,SAAS,CAExC,cAAa,UAAU;AAGxB,QAAO,aAAa"}
|
|
@@ -12,6 +12,10 @@ type UseWebsiteStoreOptions = {
|
|
|
12
12
|
refetchInterval?: number | false;
|
|
13
13
|
refetchOnWindowFocus?: boolean;
|
|
14
14
|
};
|
|
15
|
+
/**
|
|
16
|
+
* Subscribes to the shared website store on the SDK client and exposes
|
|
17
|
+
* convenient loading/error state plus a manual refresh helper.
|
|
18
|
+
*/
|
|
15
19
|
declare function useWebsiteStore(client: CossistantClient, options?: UseWebsiteStoreOptions): UseWebsiteStoreResult;
|
|
16
20
|
//#endregion
|
|
17
21
|
export { UseWebsiteStoreOptions, UseWebsiteStoreResult, useWebsiteStore };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-website-store.d.ts","names":[],"sources":["../../../../src/hooks/private/store/use-website-store.ts"],"sourcesContent":[],"mappings":";;;KAgBY,qBAAA;WACF;EADE,MAAA,EAEH,YAFG,CAAA,QAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"use-website-store.d.ts","names":[],"sources":["../../../../src/hooks/private/store/use-website-store.ts"],"sourcesContent":[],"mappings":";;;KAgBY,qBAAA;WACF;EADE,MAAA,EAEH,YAFG,CAAA,QAAqB,CAAA;EACvB,SAAA,EAAA,OAAA;EACD,KAAA,EAED,KAFC,GAAA,IAAA;EAED,OAAA,EAAA,GAAA,GACQ,OADR,CACgB,YADhB,CAAA,SAAA,CAAA,GAAA,IAAA,CAAA;CACgB;AAAR,KAGJ,sBAAA,GAHI;EAAO,eAAA,CAAA,EAAA,MAAA,GAAA,KAAA;EAGX,oBAAA,CAAA,EAAA,OAAsB;AAqBlC,CAAA;;;;;iBAAgB,eAAA,SACP,4BACC,yBACP"}
|
|
@@ -8,11 +8,14 @@ function toError(state, fallback) {
|
|
|
8
8
|
if (!state.error) return null;
|
|
9
9
|
return new Error(state.error.message);
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Subscribes to the shared website store on the SDK client and exposes
|
|
13
|
+
* convenient loading/error state plus a manual refresh helper.
|
|
14
|
+
*/
|
|
11
15
|
function useWebsiteStore(client, options = {}) {
|
|
12
|
-
const
|
|
16
|
+
const state = useStoreSelector(client.websiteStore ?? (() => {
|
|
13
17
|
throw new Error("Website store is not available on the client instance");
|
|
14
|
-
})();
|
|
15
|
-
const state = useStoreSelector(store, (current) => current);
|
|
18
|
+
})(), (current) => current);
|
|
16
19
|
const query = useClientQuery({
|
|
17
20
|
client,
|
|
18
21
|
queryFn: (instance, params) => instance.fetchWebsite(params ?? {}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-website-store.js","names":[],"sources":["../../../../src/hooks/private/store/use-website-store.ts"],"sourcesContent":["import type {\n\tCossistantClient,\n\tWebsiteState,\n\tWebsiteStore,\n} from \"@cossistant/core\";\nimport type { PublicWebsiteResponse } from \"@cossistant/types\";\nimport { useMemo } from \"react\";\nimport { useClientQuery } from \"../use-client-query\";\nimport { useStoreSelector } from \"./use-store-selector\";\n\nconst EMPTY_STATE: WebsiteState = {\n\twebsite: null,\n\tstatus: \"idle\",\n\terror: null,\n};\n\nexport type UseWebsiteStoreResult = {\n\twebsite: WebsiteState[\"website\"];\n\tstatus: WebsiteState[\"status\"];\n\tisLoading: boolean;\n\terror: Error | null;\n\trefresh: () => Promise<WebsiteState[\"website\"] | null>;\n};\n\nexport type UseWebsiteStoreOptions = {\n\trefetchInterval?: number | false;\n\trefetchOnWindowFocus?: boolean;\n};\n\nfunction toError(state: WebsiteState, fallback: Error | null): Error | null {\n\tif (fallback) {\n\t\treturn fallback;\n\t}\n\n\tif (!state.error) {\n\t\treturn null;\n\t}\n\n\treturn new Error(state.error.message);\n}\n\nexport function useWebsiteStore(\n\tclient: CossistantClient,\n\toptions: UseWebsiteStoreOptions = {}\n): UseWebsiteStoreResult {\n\tconst store =\n\t\tclient.websiteStore ??\n\t\t((): WebsiteStore => {\n\t\t\tthrow new Error(\"Website store is not available on the client instance\");\n\t\t})();\n\tconst state = useStoreSelector(store, (current) => current);\n\n\tconst query = useClientQuery<PublicWebsiteResponse, { force?: boolean }>({\n\t\tclient,\n\t\tqueryFn: (instance, params) => instance.fetchWebsite(params ?? {}),\n\t\tenabled: true,\n\t\trefetchInterval: options.refetchInterval ?? false,\n\t\trefetchOnWindowFocus: options.refetchOnWindowFocus ?? true,\n\t\trefetchOnMount: state.status === \"idle\",\n\t\tinitialData: state.website ?? undefined,\n\t});\n\n\tconst error = useMemo(\n\t\t() => toError(state, query.error),\n\t\t[state, query.error]\n\t);\n\tconst isLoading =\n\t\tquery.isLoading || state.status === \"loading\" || state.status === \"idle\";\n\n\tconst refresh = () =>\n\t\tquery\n\t\t\t.refetch({ force: true })\n\t\t\t.then((result) => result ?? client.websiteStore.getState().website)\n\t\t\t.catch(() => client.websiteStore.getState().website)\n\t\t\t.then((website) => website ?? null);\n\n\treturn {\n\t\twebsite: state.website,\n\t\tstatus: state.status,\n\t\tisLoading,\n\t\terror,\n\t\trefresh,\n\t};\n}\n"],"mappings":";;;;;AA6BA,SAAS,QAAQ,OAAqB,UAAsC;AAC3E,KAAI,SACH,QAAO;AAGR,KAAI,CAAC,MAAM,MACV,QAAO;AAGR,QAAO,IAAI,MAAM,MAAM,MAAM,QAAQ
|
|
1
|
+
{"version":3,"file":"use-website-store.js","names":[],"sources":["../../../../src/hooks/private/store/use-website-store.ts"],"sourcesContent":["import type {\n\tCossistantClient,\n\tWebsiteState,\n\tWebsiteStore,\n} from \"@cossistant/core\";\nimport type { PublicWebsiteResponse } from \"@cossistant/types\";\nimport { useMemo } from \"react\";\nimport { useClientQuery } from \"../use-client-query\";\nimport { useStoreSelector } from \"./use-store-selector\";\n\nconst EMPTY_STATE: WebsiteState = {\n\twebsite: null,\n\tstatus: \"idle\",\n\terror: null,\n};\n\nexport type UseWebsiteStoreResult = {\n\twebsite: WebsiteState[\"website\"];\n\tstatus: WebsiteState[\"status\"];\n\tisLoading: boolean;\n\terror: Error | null;\n\trefresh: () => Promise<WebsiteState[\"website\"] | null>;\n};\n\nexport type UseWebsiteStoreOptions = {\n\trefetchInterval?: number | false;\n\trefetchOnWindowFocus?: boolean;\n};\n\nfunction toError(state: WebsiteState, fallback: Error | null): Error | null {\n\tif (fallback) {\n\t\treturn fallback;\n\t}\n\n\tif (!state.error) {\n\t\treturn null;\n\t}\n\n\treturn new Error(state.error.message);\n}\n\n/**\n * Subscribes to the shared website store on the SDK client and exposes\n * convenient loading/error state plus a manual refresh helper.\n */\nexport function useWebsiteStore(\n\tclient: CossistantClient,\n\toptions: UseWebsiteStoreOptions = {}\n): UseWebsiteStoreResult {\n\tconst store =\n\t\tclient.websiteStore ??\n\t\t((): WebsiteStore => {\n\t\t\tthrow new Error(\"Website store is not available on the client instance\");\n\t\t})();\n\tconst state = useStoreSelector(store, (current) => current);\n\n\tconst query = useClientQuery<PublicWebsiteResponse, { force?: boolean }>({\n\t\tclient,\n\t\tqueryFn: (instance, params) => instance.fetchWebsite(params ?? {}),\n\t\tenabled: true,\n\t\trefetchInterval: options.refetchInterval ?? false,\n\t\trefetchOnWindowFocus: options.refetchOnWindowFocus ?? true,\n\t\trefetchOnMount: state.status === \"idle\",\n\t\tinitialData: state.website ?? undefined,\n\t});\n\n\tconst error = useMemo(\n\t\t() => toError(state, query.error),\n\t\t[state, query.error]\n\t);\n\tconst isLoading =\n\t\tquery.isLoading || state.status === \"loading\" || state.status === \"idle\";\n\n\tconst refresh = () =>\n\t\tquery\n\t\t\t.refetch({ force: true })\n\t\t\t.then((result) => result ?? client.websiteStore.getState().website)\n\t\t\t.catch(() => client.websiteStore.getState().website)\n\t\t\t.then((website) => website ?? null);\n\n\treturn {\n\t\twebsite: state.website,\n\t\tstatus: state.status,\n\t\tisLoading,\n\t\terror,\n\t\trefresh,\n\t};\n}\n"],"mappings":";;;;;AA6BA,SAAS,QAAQ,OAAqB,UAAsC;AAC3E,KAAI,SACH,QAAO;AAGR,KAAI,CAAC,MAAM,MACV,QAAO;AAGR,QAAO,IAAI,MAAM,MAAM,MAAM,QAAQ;;;;;;AAOtC,SAAgB,gBACf,QACA,UAAkC,EAAE,EACZ;CAMxB,MAAM,QAAQ,iBAJb,OAAO,uBACc;AACpB,QAAM,IAAI,MAAM,wDAAwD;KACrE,GACkC,YAAY,QAAQ;CAE3D,MAAM,QAAQ,eAA2D;EACxE;EACA,UAAU,UAAU,WAAW,SAAS,aAAa,UAAU,EAAE,CAAC;EAClE,SAAS;EACT,iBAAiB,QAAQ,mBAAmB;EAC5C,sBAAsB,QAAQ,wBAAwB;EACtD,gBAAgB,MAAM,WAAW;EACjC,aAAa,MAAM,WAAW;EAC9B,CAAC;CAEF,MAAM,QAAQ,cACP,QAAQ,OAAO,MAAM,MAAM,EACjC,CAAC,OAAO,MAAM,MAAM,CACpB;CACD,MAAM,YACL,MAAM,aAAa,MAAM,WAAW,aAAa,MAAM,WAAW;CAEnE,MAAM,gBACL,MACE,QAAQ,EAAE,OAAO,MAAM,CAAC,CACxB,MAAM,WAAW,UAAU,OAAO,aAAa,UAAU,CAAC,QAAQ,CAClE,YAAY,OAAO,aAAa,UAAU,CAAC,QAAQ,CACnD,MAAM,YAAY,WAAW,KAAK;AAErC,QAAO;EACN,SAAS,MAAM;EACf,QAAQ,MAAM;EACd;EACA;EACA;EACA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { SupportTextResolvedFormatter } from "../../support/text/locales/keys.js";
|
|
2
|
+
import { TypingEntry } from "@cossistant/core";
|
|
3
|
+
import { AvailableAIAgent, AvailableHumanAgent } from "@cossistant/types";
|
|
4
|
+
|
|
5
|
+
//#region src/hooks/private/typing.d.ts
|
|
6
|
+
type TimelineTypingParticipant = {
|
|
7
|
+
id: string;
|
|
8
|
+
type: "team_member" | "ai";
|
|
9
|
+
};
|
|
10
|
+
type PreviewTypingParticipant = TimelineTypingParticipant & {
|
|
11
|
+
name: string;
|
|
12
|
+
image: string | null;
|
|
13
|
+
};
|
|
14
|
+
type MapTypingEntriesToPreviewParticipantsOptions = {
|
|
15
|
+
availableHumanAgents: AvailableHumanAgent[];
|
|
16
|
+
availableAIAgents: AvailableAIAgent[];
|
|
17
|
+
text: SupportTextResolvedFormatter;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Converts raw typing events into participants understood by the timeline
|
|
21
|
+
* renderer.
|
|
22
|
+
*/
|
|
23
|
+
declare function mapTypingEntriesToParticipants(entries: TypingEntry[]): TimelineTypingParticipant[];
|
|
24
|
+
/**
|
|
25
|
+
* Resolves typing events into fully hydrated preview participants with display
|
|
26
|
+
* names and avatars ready for UI consumption.
|
|
27
|
+
*/
|
|
28
|
+
declare function mapTypingEntriesToPreviewParticipants(entries: TypingEntry[], {
|
|
29
|
+
availableHumanAgents,
|
|
30
|
+
availableAIAgents,
|
|
31
|
+
text
|
|
32
|
+
}: MapTypingEntriesToPreviewParticipantsOptions): PreviewTypingParticipant[];
|
|
33
|
+
//#endregion
|
|
34
|
+
export { MapTypingEntriesToPreviewParticipantsOptions, PreviewTypingParticipant, TimelineTypingParticipant, mapTypingEntriesToParticipants, mapTypingEntriesToPreviewParticipants };
|
|
35
|
+
//# sourceMappingURL=typing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typing.d.ts","names":[],"sources":["../../../src/hooks/private/typing.ts"],"sourcesContent":[],"mappings":";;;;;KAIY,yBAAA;;EAAA,IAAA,EAAA,aAAA,GAAA,IAAA;AAKZ,CAAA;AAKY,KALA,wBAAA,GAA2B,yBAKiB,GAAA;EACjC,IAAA,EAAA,MAAA;EACH,KAAA,EAAA,MAAA,GAAA,IAAA;CACb;AAA4B,KAHvB,4CAAA,GAGuB;EAOnB,oBAAA,EATO,mBASuB,EAAA;EA+B9B,iBAAA,EAvCI,gBAuCJ,EAAA;EACN,IAAA,EAvCH,4BAuCG;CAER;;;;;AAIyB,iBAtCX,8BAAA,CAsCW,OAAA,EArCjB,WAqCiB,EAAA,CAAA,EApCxB,yBAoCwB,EAAA;;;;;iBAPX,qCAAA,UACN;;;;GAKN,+CACD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
//#region src/hooks/private/typing.ts
|
|
2
|
+
/**
|
|
3
|
+
* Converts raw typing events into participants understood by the timeline
|
|
4
|
+
* renderer.
|
|
5
|
+
*/
|
|
6
|
+
function mapTypingEntriesToParticipants(entries) {
|
|
7
|
+
return entries.map((entry) => {
|
|
8
|
+
if (entry.actorType === "user") return {
|
|
9
|
+
id: entry.actorId,
|
|
10
|
+
type: "team_member"
|
|
11
|
+
};
|
|
12
|
+
if (entry.actorType === "ai_agent") return {
|
|
13
|
+
id: entry.actorId,
|
|
14
|
+
type: "ai"
|
|
15
|
+
};
|
|
16
|
+
return null;
|
|
17
|
+
}).filter((participant) => participant !== null);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Resolves typing events into fully hydrated preview participants with display
|
|
21
|
+
* names and avatars ready for UI consumption.
|
|
22
|
+
*/
|
|
23
|
+
function mapTypingEntriesToPreviewParticipants(entries, { availableHumanAgents, availableAIAgents, text }) {
|
|
24
|
+
return entries.map((entry) => {
|
|
25
|
+
if (entry.actorType === "user") {
|
|
26
|
+
const human = availableHumanAgents.find((agent) => agent.id === entry.actorId);
|
|
27
|
+
return {
|
|
28
|
+
id: entry.actorId,
|
|
29
|
+
type: "team_member",
|
|
30
|
+
name: human?.name || text("common.fallbacks.supportTeam"),
|
|
31
|
+
image: human?.image ?? null
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
if (entry.actorType === "ai_agent") {
|
|
35
|
+
const ai = availableAIAgents.find((agent) => agent.id === entry.actorId);
|
|
36
|
+
return {
|
|
37
|
+
id: entry.actorId,
|
|
38
|
+
type: "ai",
|
|
39
|
+
name: ai?.name || text("common.fallbacks.aiAssistant"),
|
|
40
|
+
image: ai?.image ?? null
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}).filter((participant) => participant !== null);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
//#endregion
|
|
48
|
+
export { mapTypingEntriesToParticipants, mapTypingEntriesToPreviewParticipants };
|
|
49
|
+
//# sourceMappingURL=typing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typing.js","names":[],"sources":["../../../src/hooks/private/typing.ts"],"sourcesContent":["import type { TypingEntry } from \"@cossistant/core\";\nimport type { AvailableAIAgent, AvailableHumanAgent } from \"@cossistant/types\";\nimport type { SupportTextResolvedFormatter } from \"../../support/text/locales/keys\";\n\nexport type TimelineTypingParticipant = {\n\tid: string;\n\ttype: \"team_member\" | \"ai\";\n};\n\nexport type PreviewTypingParticipant = TimelineTypingParticipant & {\n\tname: string;\n\timage: string | null;\n};\n\nexport type MapTypingEntriesToPreviewParticipantsOptions = {\n\tavailableHumanAgents: AvailableHumanAgent[];\n\tavailableAIAgents: AvailableAIAgent[];\n\ttext: SupportTextResolvedFormatter;\n};\n\n/**\n * Converts raw typing events into participants understood by the timeline\n * renderer.\n */\nexport function mapTypingEntriesToParticipants(\n\tentries: TypingEntry[]\n): TimelineTypingParticipant[] {\n\treturn entries\n\t\t.map<TimelineTypingParticipant | null>((entry) => {\n\t\t\tif (entry.actorType === \"user\") {\n\t\t\t\treturn {\n\t\t\t\t\tid: entry.actorId,\n\t\t\t\t\ttype: \"team_member\",\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (entry.actorType === \"ai_agent\") {\n\t\t\t\treturn {\n\t\t\t\t\tid: entry.actorId,\n\t\t\t\t\ttype: \"ai\",\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn null;\n\t\t})\n\t\t.filter(\n\t\t\t(participant): participant is TimelineTypingParticipant =>\n\t\t\t\tparticipant !== null\n\t\t);\n}\n\n/**\n * Resolves typing events into fully hydrated preview participants with display\n * names and avatars ready for UI consumption.\n */\nexport function mapTypingEntriesToPreviewParticipants(\n\tentries: TypingEntry[],\n\t{\n\t\tavailableHumanAgents,\n\t\tavailableAIAgents,\n\t\ttext,\n\t}: MapTypingEntriesToPreviewParticipantsOptions\n): PreviewTypingParticipant[] {\n\treturn entries\n\t\t.map<PreviewTypingParticipant | null>((entry) => {\n\t\t\tif (entry.actorType === \"user\") {\n\t\t\t\tconst human = availableHumanAgents.find(\n\t\t\t\t\t(agent) => agent.id === entry.actorId\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\tid: entry.actorId,\n\t\t\t\t\ttype: \"team_member\",\n\t\t\t\t\tname: human?.name || text(\"common.fallbacks.supportTeam\"),\n\t\t\t\t\timage: human?.image ?? null,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (entry.actorType === \"ai_agent\") {\n\t\t\t\tconst ai = availableAIAgents.find(\n\t\t\t\t\t(agent) => agent.id === entry.actorId\n\t\t\t\t);\n\n\t\t\t\treturn {\n\t\t\t\t\tid: entry.actorId,\n\t\t\t\t\ttype: \"ai\",\n\t\t\t\t\tname: ai?.name || text(\"common.fallbacks.aiAssistant\"),\n\t\t\t\t\timage: ai?.image ?? null,\n\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn null;\n\t\t})\n\t\t.filter(\n\t\t\t(participant): participant is PreviewTypingParticipant =>\n\t\t\t\tparticipant !== null\n\t\t);\n}\n"],"mappings":";;;;;AAwBA,SAAgB,+BACf,SAC8B;AAC9B,QAAO,QACL,KAAuC,UAAU;AACjD,MAAI,MAAM,cAAc,OACvB,QAAO;GACN,IAAI,MAAM;GACV,MAAM;GACN;AAGF,MAAI,MAAM,cAAc,WACvB,QAAO;GACN,IAAI,MAAM;GACV,MAAM;GACN;AAGF,SAAO;GACN,CACD,QACC,gBACA,gBAAgB,KACjB;;;;;;AAOH,SAAgB,sCACf,SACA,EACC,sBACA,mBACA,QAE4B;AAC7B,QAAO,QACL,KAAsC,UAAU;AAChD,MAAI,MAAM,cAAc,QAAQ;GAC/B,MAAM,QAAQ,qBAAqB,MACjC,UAAU,MAAM,OAAO,MAAM,QAC9B;AAED,UAAO;IACN,IAAI,MAAM;IACV,MAAM;IACN,MAAM,OAAO,QAAQ,KAAK,+BAA+B;IACzD,OAAO,OAAO,SAAS;IACvB;;AAGF,MAAI,MAAM,cAAc,YAAY;GACnC,MAAM,KAAK,kBAAkB,MAC3B,UAAU,MAAM,OAAO,MAAM,QAC9B;AAED,UAAO;IACN,IAAI,MAAM;IACV,MAAM;IACN,MAAM,IAAI,QAAQ,KAAK,+BAA+B;IACtD,OAAO,IAAI,SAAS;IACpB;;AAGF,SAAO;GACN,CACD,QACC,gBACA,gBAAgB,KACjB"}
|
|
@@ -19,6 +19,11 @@ type UseClientQueryResult<TData, TArgs> = {
|
|
|
19
19
|
isLoading: boolean;
|
|
20
20
|
refetch: (args?: TArgs) => Promise<TData | undefined>;
|
|
21
21
|
};
|
|
22
|
+
/**
|
|
23
|
+
* Lightweight data-fetching abstraction that plugs into the SDK client instead
|
|
24
|
+
* of React Query. It tracks loading/error state, supports polling, window
|
|
25
|
+
* focus refetching and exposes a typed refetch helper.
|
|
26
|
+
*/
|
|
22
27
|
declare function useClientQuery<TData, TArgs = void>(options: UseClientQueryOptions<TData, TArgs>): UseClientQueryResult<TData, TArgs>;
|
|
23
28
|
//#endregion
|
|
24
29
|
export { useClientQuery };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-client-query.d.ts","names":[],"sources":["../../../src/hooks/private/use-client-query.ts"],"sourcesContent":[],"mappings":";;;KAGK,iCACI,yBACD,sBACH,QAAQ;KAER;EALA,MAAA,EAMI,gBANG;
|
|
1
|
+
{"version":3,"file":"use-client-query.d.ts","names":[],"sources":["../../../src/hooks/private/use-client-query.ts"],"sourcesContent":[],"mappings":";;;KAGK,iCACI,yBACD,sBACH,QAAQ;KAER;EALA,MAAA,EAMI,gBANG;EACH,OAAA,EAMC,OAND,CAMS,KANT,EAMgB,KANhB,CAAA;EACD,OAAA,CAAA,EAAA,OAAA;EACK,eAAA,CAAA,EAAA,MAAA,GAAA,KAAA;EAAR,oBAAA,CAAA,EAAA,OAAA;EAAO,cAAA,CAAA,EAAA,OAAA;EAEP,WAAA,CAAA,EAOU,KAPV;EACI,WAAA,CAAA,EAOM,KAPN;EACS,YAAA,CAAA,EAAA,SAAA,OAAA,EAAA;CAAO;KAUpB,oBAVK,CAAA,KAAA,EAAA,KAAA,CAAA,GAAA;EAKK,IAAA,EAMR,KANQ,GAAA,SAAA;EACA,KAAA,EAMP,KANO,GAAA,IAAA;EAAK,SAAA,EAAA,OAAA;EAIf,OAAA,EAAA,CAAA,IAAA,CAAA,EAIa,KAJb,EAAoB,GAIG,OAJH,CAIW,KAJX,GAAA,SAAA,CAAA;CAClB;;;;;;AAqBS,iBAAA,cAAc,CAAA,KAAA,EAAA,QAAA,IAAA,CAAA,CAAA,OAAA,EACpB,qBADoB,CACE,KADF,EACS,KADT,CAAA,CAAA,EAE3B,oBAF2B,CAEN,KAFM,EAEC,KAFD,CAAA"}
|
|
@@ -6,6 +6,11 @@ function toError(error) {
|
|
|
6
6
|
return new Error(typeof error === "string" ? error : "Unknown error");
|
|
7
7
|
}
|
|
8
8
|
const EMPTY_DEPENDENCIES = [];
|
|
9
|
+
/**
|
|
10
|
+
* Lightweight data-fetching abstraction that plugs into the SDK client instead
|
|
11
|
+
* of React Query. It tracks loading/error state, supports polling, window
|
|
12
|
+
* focus refetching and exposes a typed refetch helper.
|
|
13
|
+
*/
|
|
9
14
|
function useClientQuery(options) {
|
|
10
15
|
const { client, queryFn, enabled = true, refetchInterval = false, refetchOnWindowFocus = true, refetchOnMount = true, initialData, initialArgs, dependencies = EMPTY_DEPENDENCIES } = options;
|
|
11
16
|
const [data, setData] = useState(initialData);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-client-query.js","names":["EMPTY_DEPENDENCIES: readonly unknown[]","raw: unknown"],"sources":["../../../src/hooks/private/use-client-query.ts"],"sourcesContent":["import type { CossistantClient } from \"@cossistant/core\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\ntype QueryFn<TData, TArgs> = (\n\tclient: CossistantClient,\n\targs?: TArgs | undefined\n) => Promise<TData>;\n\ntype UseClientQueryOptions<TData, TArgs> = {\n\tclient: CossistantClient;\n\tqueryFn: QueryFn<TData, TArgs>;\n\tenabled?: boolean;\n\trefetchInterval?: number | false;\n\trefetchOnWindowFocus?: boolean;\n\trefetchOnMount?: boolean;\n\tinitialData?: TData;\n\tinitialArgs?: TArgs;\n\tdependencies?: readonly unknown[];\n};\n\ntype UseClientQueryResult<TData, TArgs> = {\n\tdata: TData | undefined;\n\terror: Error | null;\n\tisLoading: boolean;\n\trefetch: (args?: TArgs) => Promise<TData | undefined>;\n};\n\nfunction toError(error: unknown): Error {\n\tif (error instanceof Error) {\n\t\treturn error;\n\t}\n\n\treturn new Error(typeof error === \"string\" ? error : \"Unknown error\");\n}\n\nconst EMPTY_DEPENDENCIES: readonly unknown[] = [];\n\nexport function useClientQuery<TData, TArgs = void>(\n\toptions: UseClientQueryOptions<TData, TArgs>\n): UseClientQueryResult<TData, TArgs> {\n\tconst {\n\t\tclient,\n\t\tqueryFn,\n\t\tenabled = true,\n\t\trefetchInterval = false,\n\t\trefetchOnWindowFocus = true,\n\t\trefetchOnMount = true,\n\t\tinitialData,\n\t\tinitialArgs,\n\t\tdependencies = EMPTY_DEPENDENCIES,\n\t} = options;\n\n\tconst [data, setData] = useState<TData | undefined>(initialData);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst [isLoading, setIsLoading] = useState(\n\t\tinitialData === undefined && Boolean(enabled)\n\t);\n\n\tconst dataRef = useRef(data);\n\tdataRef.current = data;\n\n\tconst argsRef = useRef<TArgs | undefined>(initialArgs);\n\tconst fetchIdRef = useRef(0);\n\tconst hasMountedRef = useRef(false);\n\tconst hasFetchedRef = useRef(initialData !== undefined);\n\tconst isMountedRef = useRef(true);\n\tconst queryFnRef = useRef(queryFn);\n\n\tqueryFnRef.current = queryFn;\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tisMountedRef.current = false;\n\t\t},\n\t\t[]\n\t);\n\n\tuseEffect(() => {\n\t\targsRef.current = initialArgs;\n\t}, [initialArgs]);\n\n\tconst execute = useCallback(\n\t\tasync (args?: TArgs, ignoreEnabled = false): Promise<TData | undefined> => {\n\t\t\tif (!(enabled || ignoreEnabled)) {\n\t\t\t\treturn dataRef.current;\n\t\t\t}\n\n\t\t\tconst nextArgs = args ?? argsRef.current;\n\t\t\targsRef.current = nextArgs;\n\n\t\t\tconst fetchId = fetchIdRef.current + 1;\n\t\t\tfetchIdRef.current = fetchId;\n\n\t\t\tsetIsLoading(true);\n\t\t\tsetError(null);\n\n\t\t\ttry {\n\t\t\t\tconst result = await queryFnRef.current(client, nextArgs);\n\n\t\t\t\tif (!isMountedRef.current || fetchId !== fetchIdRef.current) {\n\t\t\t\t\treturn dataRef.current;\n\t\t\t\t}\n\n\t\t\t\tdataRef.current = result;\n\t\t\t\tsetData(result);\n\t\t\t\tsetError(null);\n\t\t\t\tsetIsLoading(false);\n\t\t\t\thasFetchedRef.current = true;\n\n\t\t\t\treturn result;\n\t\t\t} catch (raw: unknown) {\n\t\t\t\tif (!isMountedRef.current || fetchId !== fetchIdRef.current) {\n\t\t\t\t\treturn dataRef.current;\n\t\t\t\t}\n\n\t\t\t\tconst normalized = toError(raw);\n\t\t\t\tsetError(normalized);\n\t\t\t\tsetIsLoading(false);\n\n\t\t\t\tthrow normalized;\n\t\t\t}\n\t\t},\n\t\t[client, enabled]\n\t);\n\n\tuseEffect(() => {\n\t\tif (!enabled) {\n\t\t\tsetIsLoading(false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst shouldFetchInitially = hasMountedRef.current\n\t\t\t? true\n\t\t\t: refetchOnMount || !hasFetchedRef.current;\n\n\t\thasMountedRef.current = true;\n\n\t\tif (!shouldFetchInitially) {\n\t\t\treturn;\n\t\t}\n\n\t\tvoid execute(argsRef.current);\n\t}, [enabled, execute, refetchOnMount, ...dependencies]);\n\n\tuseEffect(() => {\n\t\tif (!enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\trefetchInterval === false ||\n\t\t\trefetchInterval === null ||\n\t\t\trefetchInterval <= 0 ||\n\t\t\ttypeof window === \"undefined\"\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst timer = window.setInterval(() => {\n\t\t\tvoid execute(argsRef.current);\n\t\t}, refetchInterval);\n\n\t\treturn () => {\n\t\t\twindow.clearInterval(timer);\n\t\t};\n\t}, [enabled, execute, refetchInterval]);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\t!refetchOnWindowFocus ||\n\t\t\ttypeof window === \"undefined\" ||\n\t\t\ttypeof document === \"undefined\"\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst handleRefetch = () => {\n\t\t\tif (!enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvoid execute(argsRef.current);\n\t\t};\n\n\t\tconst onFocus = () => {\n\t\t\tvoid handleRefetch();\n\t\t};\n\n\t\tconst onVisibilityChange = () => {\n\t\t\tif (document.visibilityState === \"visible\") {\n\t\t\t\tvoid handleRefetch();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"focus\", onFocus);\n\t\tdocument.addEventListener(\"visibilitychange\", onVisibilityChange);\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"focus\", onFocus);\n\t\t\tdocument.removeEventListener(\"visibilitychange\", onVisibilityChange);\n\t\t};\n\t}, [enabled, execute, refetchOnWindowFocus]);\n\n\tconst refetch = useCallback(\n\t\tasync (args?: TArgs) => execute(args, true),\n\t\t[execute]\n\t);\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tdata,\n\t\t\terror,\n\t\t\tisLoading,\n\t\t\trefetch,\n\t\t}),\n\t\t[data, error, isLoading, refetch]\n\t);\n}\n"],"mappings":";;;AA2BA,SAAS,QAAQ,OAAuB;AACvC,KAAI,iBAAiB,MACpB,QAAO;AAGR,QAAO,IAAI,MAAM,OAAO,UAAU,WAAW,QAAQ,gBAAgB;;AAGtE,MAAMA,qBAAyC,EAAE
|
|
1
|
+
{"version":3,"file":"use-client-query.js","names":["EMPTY_DEPENDENCIES: readonly unknown[]","raw: unknown"],"sources":["../../../src/hooks/private/use-client-query.ts"],"sourcesContent":["import type { CossistantClient } from \"@cossistant/core\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\n\ntype QueryFn<TData, TArgs> = (\n\tclient: CossistantClient,\n\targs?: TArgs | undefined\n) => Promise<TData>;\n\ntype UseClientQueryOptions<TData, TArgs> = {\n\tclient: CossistantClient;\n\tqueryFn: QueryFn<TData, TArgs>;\n\tenabled?: boolean;\n\trefetchInterval?: number | false;\n\trefetchOnWindowFocus?: boolean;\n\trefetchOnMount?: boolean;\n\tinitialData?: TData;\n\tinitialArgs?: TArgs;\n\tdependencies?: readonly unknown[];\n};\n\ntype UseClientQueryResult<TData, TArgs> = {\n\tdata: TData | undefined;\n\terror: Error | null;\n\tisLoading: boolean;\n\trefetch: (args?: TArgs) => Promise<TData | undefined>;\n};\n\nfunction toError(error: unknown): Error {\n\tif (error instanceof Error) {\n\t\treturn error;\n\t}\n\n\treturn new Error(typeof error === \"string\" ? error : \"Unknown error\");\n}\n\nconst EMPTY_DEPENDENCIES: readonly unknown[] = [];\n\n/**\n * Lightweight data-fetching abstraction that plugs into the SDK client instead\n * of React Query. It tracks loading/error state, supports polling, window\n * focus refetching and exposes a typed refetch helper.\n */\nexport function useClientQuery<TData, TArgs = void>(\n\toptions: UseClientQueryOptions<TData, TArgs>\n): UseClientQueryResult<TData, TArgs> {\n\tconst {\n\t\tclient,\n\t\tqueryFn,\n\t\tenabled = true,\n\t\trefetchInterval = false,\n\t\trefetchOnWindowFocus = true,\n\t\trefetchOnMount = true,\n\t\tinitialData,\n\t\tinitialArgs,\n\t\tdependencies = EMPTY_DEPENDENCIES,\n\t} = options;\n\n\tconst [data, setData] = useState<TData | undefined>(initialData);\n\tconst [error, setError] = useState<Error | null>(null);\n\tconst [isLoading, setIsLoading] = useState(\n\t\tinitialData === undefined && Boolean(enabled)\n\t);\n\n\tconst dataRef = useRef(data);\n\tdataRef.current = data;\n\n\tconst argsRef = useRef<TArgs | undefined>(initialArgs);\n\tconst fetchIdRef = useRef(0);\n\tconst hasMountedRef = useRef(false);\n\tconst hasFetchedRef = useRef(initialData !== undefined);\n\tconst isMountedRef = useRef(true);\n\tconst queryFnRef = useRef(queryFn);\n\n\tqueryFnRef.current = queryFn;\n\n\tuseEffect(\n\t\t() => () => {\n\t\t\tisMountedRef.current = false;\n\t\t},\n\t\t[]\n\t);\n\n\tuseEffect(() => {\n\t\targsRef.current = initialArgs;\n\t}, [initialArgs]);\n\n\tconst execute = useCallback(\n\t\tasync (args?: TArgs, ignoreEnabled = false): Promise<TData | undefined> => {\n\t\t\tif (!(enabled || ignoreEnabled)) {\n\t\t\t\treturn dataRef.current;\n\t\t\t}\n\n\t\t\tconst nextArgs = args ?? argsRef.current;\n\t\t\targsRef.current = nextArgs;\n\n\t\t\tconst fetchId = fetchIdRef.current + 1;\n\t\t\tfetchIdRef.current = fetchId;\n\n\t\t\tsetIsLoading(true);\n\t\t\tsetError(null);\n\n\t\t\ttry {\n\t\t\t\tconst result = await queryFnRef.current(client, nextArgs);\n\n\t\t\t\tif (!isMountedRef.current || fetchId !== fetchIdRef.current) {\n\t\t\t\t\treturn dataRef.current;\n\t\t\t\t}\n\n\t\t\t\tdataRef.current = result;\n\t\t\t\tsetData(result);\n\t\t\t\tsetError(null);\n\t\t\t\tsetIsLoading(false);\n\t\t\t\thasFetchedRef.current = true;\n\n\t\t\t\treturn result;\n\t\t\t} catch (raw: unknown) {\n\t\t\t\tif (!isMountedRef.current || fetchId !== fetchIdRef.current) {\n\t\t\t\t\treturn dataRef.current;\n\t\t\t\t}\n\n\t\t\t\tconst normalized = toError(raw);\n\t\t\t\tsetError(normalized);\n\t\t\t\tsetIsLoading(false);\n\n\t\t\t\tthrow normalized;\n\t\t\t}\n\t\t},\n\t\t[client, enabled]\n\t);\n\n\tuseEffect(() => {\n\t\tif (!enabled) {\n\t\t\tsetIsLoading(false);\n\t\t\treturn;\n\t\t}\n\n\t\tconst shouldFetchInitially = hasMountedRef.current\n\t\t\t? true\n\t\t\t: refetchOnMount || !hasFetchedRef.current;\n\n\t\thasMountedRef.current = true;\n\n\t\tif (!shouldFetchInitially) {\n\t\t\treturn;\n\t\t}\n\n\t\tvoid execute(argsRef.current);\n\t}, [enabled, execute, refetchOnMount, ...dependencies]);\n\n\tuseEffect(() => {\n\t\tif (!enabled) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (\n\t\t\trefetchInterval === false ||\n\t\t\trefetchInterval === null ||\n\t\t\trefetchInterval <= 0 ||\n\t\t\ttypeof window === \"undefined\"\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst timer = window.setInterval(() => {\n\t\t\tvoid execute(argsRef.current);\n\t\t}, refetchInterval);\n\n\t\treturn () => {\n\t\t\twindow.clearInterval(timer);\n\t\t};\n\t}, [enabled, execute, refetchInterval]);\n\n\tuseEffect(() => {\n\t\tif (\n\t\t\t!refetchOnWindowFocus ||\n\t\t\ttypeof window === \"undefined\" ||\n\t\t\ttypeof document === \"undefined\"\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst handleRefetch = () => {\n\t\t\tif (!enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvoid execute(argsRef.current);\n\t\t};\n\n\t\tconst onFocus = () => {\n\t\t\tvoid handleRefetch();\n\t\t};\n\n\t\tconst onVisibilityChange = () => {\n\t\t\tif (document.visibilityState === \"visible\") {\n\t\t\t\tvoid handleRefetch();\n\t\t\t}\n\t\t};\n\n\t\twindow.addEventListener(\"focus\", onFocus);\n\t\tdocument.addEventListener(\"visibilitychange\", onVisibilityChange);\n\n\t\treturn () => {\n\t\t\twindow.removeEventListener(\"focus\", onFocus);\n\t\t\tdocument.removeEventListener(\"visibilitychange\", onVisibilityChange);\n\t\t};\n\t}, [enabled, execute, refetchOnWindowFocus]);\n\n\tconst refetch = useCallback(\n\t\tasync (args?: TArgs) => execute(args, true),\n\t\t[execute]\n\t);\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tdata,\n\t\t\terror,\n\t\t\tisLoading,\n\t\t\trefetch,\n\t\t}),\n\t\t[data, error, isLoading, refetch]\n\t);\n}\n"],"mappings":";;;AA2BA,SAAS,QAAQ,OAAuB;AACvC,KAAI,iBAAiB,MACpB,QAAO;AAGR,QAAO,IAAI,MAAM,OAAO,UAAU,WAAW,QAAQ,gBAAgB;;AAGtE,MAAMA,qBAAyC,EAAE;;;;;;AAOjD,SAAgB,eACf,SACqC;CACrC,MAAM,EACL,QACA,SACA,UAAU,MACV,kBAAkB,OAClB,uBAAuB,MACvB,iBAAiB,MACjB,aACA,aACA,eAAe,uBACZ;CAEJ,MAAM,CAAC,MAAM,WAAW,SAA4B,YAAY;CAChE,MAAM,CAAC,OAAO,YAAY,SAAuB,KAAK;CACtD,MAAM,CAAC,WAAW,gBAAgB,SACjC,gBAAgB,UAAa,QAAQ,QAAQ,CAC7C;CAED,MAAM,UAAU,OAAO,KAAK;AAC5B,SAAQ,UAAU;CAElB,MAAM,UAAU,OAA0B,YAAY;CACtD,MAAM,aAAa,OAAO,EAAE;CAC5B,MAAM,gBAAgB,OAAO,MAAM;CACnC,MAAM,gBAAgB,OAAO,gBAAgB,OAAU;CACvD,MAAM,eAAe,OAAO,KAAK;CACjC,MAAM,aAAa,OAAO,QAAQ;AAElC,YAAW,UAAU;AAErB,uBACa;AACX,eAAa,UAAU;IAExB,EAAE,CACF;AAED,iBAAgB;AACf,UAAQ,UAAU;IAChB,CAAC,YAAY,CAAC;CAEjB,MAAM,UAAU,YACf,OAAO,MAAc,gBAAgB,UAAsC;AAC1E,MAAI,EAAE,WAAW,eAChB,QAAO,QAAQ;EAGhB,MAAM,WAAW,QAAQ,QAAQ;AACjC,UAAQ,UAAU;EAElB,MAAM,UAAU,WAAW,UAAU;AACrC,aAAW,UAAU;AAErB,eAAa,KAAK;AAClB,WAAS,KAAK;AAEd,MAAI;GACH,MAAM,SAAS,MAAM,WAAW,QAAQ,QAAQ,SAAS;AAEzD,OAAI,CAAC,aAAa,WAAW,YAAY,WAAW,QACnD,QAAO,QAAQ;AAGhB,WAAQ,UAAU;AAClB,WAAQ,OAAO;AACf,YAAS,KAAK;AACd,gBAAa,MAAM;AACnB,iBAAc,UAAU;AAExB,UAAO;WACCC,KAAc;AACtB,OAAI,CAAC,aAAa,WAAW,YAAY,WAAW,QACnD,QAAO,QAAQ;GAGhB,MAAM,aAAa,QAAQ,IAAI;AAC/B,YAAS,WAAW;AACpB,gBAAa,MAAM;AAEnB,SAAM;;IAGR,CAAC,QAAQ,QAAQ,CACjB;AAED,iBAAgB;AACf,MAAI,CAAC,SAAS;AACb,gBAAa,MAAM;AACnB;;EAGD,MAAM,uBAAuB,cAAc,UACxC,OACA,kBAAkB,CAAC,cAAc;AAEpC,gBAAc,UAAU;AAExB,MAAI,CAAC,qBACJ;AAGD,EAAK,QAAQ,QAAQ,QAAQ;IAC3B;EAAC;EAAS;EAAS;EAAgB,GAAG;EAAa,CAAC;AAEvD,iBAAgB;AACf,MAAI,CAAC,QACJ;AAGD,MACC,oBAAoB,SACpB,oBAAoB,QACpB,mBAAmB,KACnB,OAAO,WAAW,YAElB;EAGD,MAAM,QAAQ,OAAO,kBAAkB;AACtC,GAAK,QAAQ,QAAQ,QAAQ;KAC3B,gBAAgB;AAEnB,eAAa;AACZ,UAAO,cAAc,MAAM;;IAE1B;EAAC;EAAS;EAAS;EAAgB,CAAC;AAEvC,iBAAgB;AACf,MACC,CAAC,wBACD,OAAO,WAAW,eAClB,OAAO,aAAa,YAEpB;EAGD,MAAM,sBAAsB;AAC3B,OAAI,CAAC,QACJ;AAGD,GAAK,QAAQ,QAAQ,QAAQ;;EAG9B,MAAM,gBAAgB;AACrB,GAAK,eAAe;;EAGrB,MAAM,2BAA2B;AAChC,OAAI,SAAS,oBAAoB,UAChC,CAAK,eAAe;;AAItB,SAAO,iBAAiB,SAAS,QAAQ;AACzC,WAAS,iBAAiB,oBAAoB,mBAAmB;AAEjE,eAAa;AACZ,UAAO,oBAAoB,SAAS,QAAQ;AAC5C,YAAS,oBAAoB,oBAAoB,mBAAmB;;IAEnE;EAAC;EAAS;EAAS;EAAqB,CAAC;CAE5C,MAAM,UAAU,YACf,OAAO,SAAiB,QAAQ,MAAM,KAAK,EAC3C,CAAC,QAAQ,CACT;AAED,QAAO,eACC;EACN;EACA;EACA;EACA;EACA,GACD;EAAC;EAAM;EAAO;EAAW;EAAQ,CACjC"}
|