@darqlabs/curator-sdk-react 0.3.3 → 0.3.4
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/cjs/useCuratorChat.d.ts +21 -2
- package/dist/cjs/useCuratorChat.d.ts.map +1 -1
- package/dist/cjs/useCuratorChat.js +19 -4
- package/dist/cjs/useCuratorChat.js.map +1 -1
- package/dist/esm/useCuratorChat.d.ts +21 -2
- package/dist/esm/useCuratorChat.d.ts.map +1 -1
- package/dist/esm/useCuratorChat.js +19 -4
- package/dist/esm/useCuratorChat.js.map +1 -1
- package/package.json +3 -3
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
* `Chat` instance from the SDK, exposes the rolling message list, a
|
|
6
6
|
* `send()` action, and the various pending/error states the UI needs.
|
|
7
7
|
*
|
|
8
|
-
* Bring your own UI on top of this hook, or use `<CuratorChat />` for
|
|
9
|
-
*
|
|
8
|
+
* Bring your own UI on top of this hook, or use `<CuratorChat />` for the
|
|
9
|
+
* drop-in styled widget. The two are independent: the widget drives
|
|
10
|
+
* assistant-ui's `useLocalRuntime` through `CuratorAdapter`, not this hook.
|
|
10
11
|
*/
|
|
11
12
|
import type { AssistantMessage, AuthorizationDetails, Chat, Curator, Environment, FileAttachment } from "@darqlabs/curator-sdk";
|
|
12
13
|
import { CuratorError } from "@darqlabs/curator-sdk";
|
|
@@ -15,6 +16,22 @@ import { CuratorError } from "@darqlabs/curator-sdk";
|
|
|
15
16
|
export type ChatBubble = {
|
|
16
17
|
kind: "user";
|
|
17
18
|
content: string;
|
|
19
|
+
/**
|
|
20
|
+
* Files the person attached to this message.
|
|
21
|
+
*
|
|
22
|
+
* `content` is the text as typed — the server renders the file-reference
|
|
23
|
+
* envelope into the prompt the model sees, but not into the stored
|
|
24
|
+
* message. So a message that is *only* an attachment has empty `content`,
|
|
25
|
+
* and this field is the only thing a transcript can draw a chip from.
|
|
26
|
+
* Absent when the message had no attachments.
|
|
27
|
+
*/
|
|
28
|
+
attachments?: FileAttachment[];
|
|
29
|
+
/**
|
|
30
|
+
* ISO-8601 send time, from the client clock — the send response carries
|
|
31
|
+
* the assistant reply's timestamp, not the user message's, so this is a
|
|
32
|
+
* local approximation of the value the server persists.
|
|
33
|
+
*/
|
|
34
|
+
createdAt: string;
|
|
18
35
|
/** Stable local id; not persisted to the server. */
|
|
19
36
|
localId: string;
|
|
20
37
|
} | {
|
|
@@ -27,6 +44,8 @@ export type ChatBubble = {
|
|
|
27
44
|
} | {
|
|
28
45
|
kind: "error";
|
|
29
46
|
message: string;
|
|
47
|
+
/** ISO-8601 time the error surfaced, from the client clock. */
|
|
48
|
+
createdAt: string;
|
|
30
49
|
localId: string;
|
|
31
50
|
};
|
|
32
51
|
export interface UseCuratorChatOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCuratorChat.d.ts","sourceRoot":"","sources":["../../src/useCuratorChat.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"useCuratorChat.d.ts","sourceRoot":"","sources":["../../src/useCuratorChat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,IAAI,EACJ,OAAO,EACP,WAAW,EACX,cAAc,EACf,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAEL,YAAY,EAEb,MAAM,uBAAuB,CAAA;AAG9B;yDACyD;AACzD,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,cAAc,EAAE,CAAA;IAC9B;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAA;CAChB,GACD;IACE,IAAI,EAAE,WAAW,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;CACd,GACD;IACE,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAEL,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAA;IAC/C,iEAAiE;IACjE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,KAAK,IAAI,CAAA;CAChD;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAA;IACxB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,2CAA2C;IAC3C,QAAQ,EAAE,UAAU,EAAE,CAAA;IACtB,2DAA2D;IAC3D,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAA;IAChB,uEAAuE;IACvE,KAAK,EAAE,YAAY,GAAG,KAAK,GAAG,IAAI,CAAA;IAClC,gEAAgE;IAChE,IAAI,EAAE,IAAI,CAAA;IACV,iEAAiE;IACjE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B;sCACkC;IAClC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB;;;;OAIG;IACH,oBAAoB,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACjD;;;;;OAKG;IACH,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD;;;;OAIG;IACH,eAAe,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACzD;AAQD,wBAAgB,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,oBAAoB,CAyJhF"}
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
* `Chat` instance from the SDK, exposes the rolling message list, a
|
|
7
7
|
* `send()` action, and the various pending/error states the UI needs.
|
|
8
8
|
*
|
|
9
|
-
* Bring your own UI on top of this hook, or use `<CuratorChat />` for
|
|
10
|
-
*
|
|
9
|
+
* Bring your own UI on top of this hook, or use `<CuratorChat />` for the
|
|
10
|
+
* drop-in styled widget. The two are independent: the widget drives
|
|
11
|
+
* assistant-ui's `useLocalRuntime` through `CuratorAdapter`, not this hook.
|
|
11
12
|
*/
|
|
12
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
14
|
exports.useCuratorChat = useCuratorChat;
|
|
@@ -56,7 +57,18 @@ function useCuratorChat(opts) {
|
|
|
56
57
|
const trimmed = content.trim();
|
|
57
58
|
if (!trimmed && !args.files?.length)
|
|
58
59
|
return;
|
|
59
|
-
|
|
60
|
+
// Bind the attachments to the bubble, not just to the request. The
|
|
61
|
+
// server stores them structurally and keeps `content` as typed, so a
|
|
62
|
+
// file-only send leaves `content` empty — without this the message
|
|
63
|
+
// renders as an empty bubble the moment the composer's own preview
|
|
64
|
+
// clears.
|
|
65
|
+
const userBubble = {
|
|
66
|
+
kind: "user",
|
|
67
|
+
content: trimmed,
|
|
68
|
+
...(args.files?.length ? { attachments: args.files } : {}),
|
|
69
|
+
createdAt: new Date().toISOString(),
|
|
70
|
+
localId: localId(),
|
|
71
|
+
};
|
|
60
72
|
setMessages((prev) => [...prev, userBubble]);
|
|
61
73
|
setSending(true);
|
|
62
74
|
setError(null);
|
|
@@ -85,7 +97,10 @@ function useCuratorChat(opts) {
|
|
|
85
97
|
}
|
|
86
98
|
const message = renderError(err);
|
|
87
99
|
setError(err);
|
|
88
|
-
setMessages((prev) => [
|
|
100
|
+
setMessages((prev) => [
|
|
101
|
+
...prev,
|
|
102
|
+
{ kind: "error", message, createdAt: new Date().toISOString(), localId: localId() },
|
|
103
|
+
]);
|
|
89
104
|
onError?.(err);
|
|
90
105
|
}
|
|
91
106
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCuratorChat.js","sourceRoot":"","sources":["../../src/useCuratorChat.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"useCuratorChat.js","sourceRoot":"","sources":["../../src/useCuratorChat.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
* `Chat` instance from the SDK, exposes the rolling message list, a
|
|
6
6
|
* `send()` action, and the various pending/error states the UI needs.
|
|
7
7
|
*
|
|
8
|
-
* Bring your own UI on top of this hook, or use `<CuratorChat />` for
|
|
9
|
-
*
|
|
8
|
+
* Bring your own UI on top of this hook, or use `<CuratorChat />` for the
|
|
9
|
+
* drop-in styled widget. The two are independent: the widget drives
|
|
10
|
+
* assistant-ui's `useLocalRuntime` through `CuratorAdapter`, not this hook.
|
|
10
11
|
*/
|
|
11
12
|
import type { AssistantMessage, AuthorizationDetails, Chat, Curator, Environment, FileAttachment } from "@darqlabs/curator-sdk";
|
|
12
13
|
import { CuratorError } from "@darqlabs/curator-sdk";
|
|
@@ -15,6 +16,22 @@ import { CuratorError } from "@darqlabs/curator-sdk";
|
|
|
15
16
|
export type ChatBubble = {
|
|
16
17
|
kind: "user";
|
|
17
18
|
content: string;
|
|
19
|
+
/**
|
|
20
|
+
* Files the person attached to this message.
|
|
21
|
+
*
|
|
22
|
+
* `content` is the text as typed — the server renders the file-reference
|
|
23
|
+
* envelope into the prompt the model sees, but not into the stored
|
|
24
|
+
* message. So a message that is *only* an attachment has empty `content`,
|
|
25
|
+
* and this field is the only thing a transcript can draw a chip from.
|
|
26
|
+
* Absent when the message had no attachments.
|
|
27
|
+
*/
|
|
28
|
+
attachments?: FileAttachment[];
|
|
29
|
+
/**
|
|
30
|
+
* ISO-8601 send time, from the client clock — the send response carries
|
|
31
|
+
* the assistant reply's timestamp, not the user message's, so this is a
|
|
32
|
+
* local approximation of the value the server persists.
|
|
33
|
+
*/
|
|
34
|
+
createdAt: string;
|
|
18
35
|
/** Stable local id; not persisted to the server. */
|
|
19
36
|
localId: string;
|
|
20
37
|
} | {
|
|
@@ -27,6 +44,8 @@ export type ChatBubble = {
|
|
|
27
44
|
} | {
|
|
28
45
|
kind: "error";
|
|
29
46
|
message: string;
|
|
47
|
+
/** ISO-8601 time the error surfaced, from the client clock. */
|
|
48
|
+
createdAt: string;
|
|
30
49
|
localId: string;
|
|
31
50
|
};
|
|
32
51
|
export interface UseCuratorChatOptions {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCuratorChat.d.ts","sourceRoot":"","sources":["../../src/useCuratorChat.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"useCuratorChat.d.ts","sourceRoot":"","sources":["../../src/useCuratorChat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,IAAI,EACJ,OAAO,EACP,WAAW,EACX,cAAc,EACf,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAEL,YAAY,EAEb,MAAM,uBAAuB,CAAA;AAG9B;yDACyD;AACzD,MAAM,MAAM,UAAU,GAClB;IACE,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf;;;;;;;;OAQG;IACH,WAAW,CAAC,EAAE,cAAc,EAAE,CAAA;IAC9B;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAA;IACjB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAA;CAChB,GACD;IACE,IAAI,EAAE,WAAW,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;CACd,GACD;IACE,IAAI,EAAE,OAAO,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAEL,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,4DAA4D;IAC5D,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAA;IAC/C,iEAAiE;IACjE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,KAAK,IAAI,CAAA;CAChD;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAA;IACxB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,2CAA2C;IAC3C,QAAQ,EAAE,UAAU,EAAE,CAAA;IACtB,2DAA2D;IAC3D,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAA;IAChB,uEAAuE;IACvE,KAAK,EAAE,YAAY,GAAG,KAAK,GAAG,IAAI,CAAA;IAClC,gEAAgE;IAChE,IAAI,EAAE,IAAI,CAAA;IACV,iEAAiE;IACjE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B;sCACkC;IAClC,KAAK,EAAE,MAAM,IAAI,CAAA;IACjB;;;;OAIG;IACH,oBAAoB,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACjD;;;;;OAKG;IACH,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzD;;;;OAIG;IACH,eAAe,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACzD;AAQD,wBAAgB,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,oBAAoB,CAyJhF"}
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
* `Chat` instance from the SDK, exposes the rolling message list, a
|
|
6
6
|
* `send()` action, and the various pending/error states the UI needs.
|
|
7
7
|
*
|
|
8
|
-
* Bring your own UI on top of this hook, or use `<CuratorChat />` for
|
|
9
|
-
*
|
|
8
|
+
* Bring your own UI on top of this hook, or use `<CuratorChat />` for the
|
|
9
|
+
* drop-in styled widget. The two are independent: the widget drives
|
|
10
|
+
* assistant-ui's `useLocalRuntime` through `CuratorAdapter`, not this hook.
|
|
10
11
|
*/
|
|
11
12
|
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
12
13
|
import { CuratorAuthorizationRequiredError, CuratorError, DEFAULT_USER_MESSAGE, } from "@darqlabs/curator-sdk";
|
|
@@ -53,7 +54,18 @@ export function useCuratorChat(opts) {
|
|
|
53
54
|
const trimmed = content.trim();
|
|
54
55
|
if (!trimmed && !args.files?.length)
|
|
55
56
|
return;
|
|
56
|
-
|
|
57
|
+
// Bind the attachments to the bubble, not just to the request. The
|
|
58
|
+
// server stores them structurally and keeps `content` as typed, so a
|
|
59
|
+
// file-only send leaves `content` empty — without this the message
|
|
60
|
+
// renders as an empty bubble the moment the composer's own preview
|
|
61
|
+
// clears.
|
|
62
|
+
const userBubble = {
|
|
63
|
+
kind: "user",
|
|
64
|
+
content: trimmed,
|
|
65
|
+
...(args.files?.length ? { attachments: args.files } : {}),
|
|
66
|
+
createdAt: new Date().toISOString(),
|
|
67
|
+
localId: localId(),
|
|
68
|
+
};
|
|
57
69
|
setMessages((prev) => [...prev, userBubble]);
|
|
58
70
|
setSending(true);
|
|
59
71
|
setError(null);
|
|
@@ -82,7 +94,10 @@ export function useCuratorChat(opts) {
|
|
|
82
94
|
}
|
|
83
95
|
const message = renderError(err);
|
|
84
96
|
setError(err);
|
|
85
|
-
setMessages((prev) => [
|
|
97
|
+
setMessages((prev) => [
|
|
98
|
+
...prev,
|
|
99
|
+
{ kind: "error", message, createdAt: new Date().toISOString(), localId: localId() },
|
|
100
|
+
]);
|
|
86
101
|
onError?.(err);
|
|
87
102
|
}
|
|
88
103
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCuratorChat.js","sourceRoot":"","sources":["../../src/useCuratorChat.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"useCuratorChat.js","sourceRoot":"","sources":["../../src/useCuratorChat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AASzE,OAAO,EACL,iCAAiC,EACjC,YAAY,EACZ,oBAAoB,GACrB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAgHvD,IAAI,OAAO,GAAG,CAAC,CAAA;AACf,SAAS,OAAO;IACd,OAAO,IAAI,CAAC,CAAA;IACZ,OAAO,SAAS,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAA2B;IACxD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAExF,wEAAwE;IACxE,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAA;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,aAAa,CAAA;IAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,+EAA+E;YAC7E,yDAAyD,CAC5D,CAAA;IACH,CAAC;IAED,uEAAuE;IACvE,yEAAyE;IACzE,wDAAwD;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE;QACxB,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAA;QAC1E,OAAO,cAAc,CAAC,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA;QACrF,uDAAuD;IACzD,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAA;IAElE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAe,EAAE,CAAC,CAAA;IAC1D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAA8B,IAAI,CAAC,CAAA;IACrE,MAAM,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,GAAG,QAAQ,CAC5D,cAAc,IAAI,IAAI,CACvB,CAAA;IACD,MAAM,CAAC,oBAAoB,EAAE,uBAAuB,CAAC,GACnD,QAAQ,CAA8B,IAAI,CAAC,CAAA;IAE7C,qEAAqE;IACrE,gEAAgE;IAChE,MAAM,WAAW,GAAG,MAAM,CAAc,IAAI,CAAC,CAAA;IAC7C,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,WAAW,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACjC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAA;YAC1B,WAAW,CAAC,EAAE,CAAC,CAAA;YACf,QAAQ,CAAC,IAAI,CAAC,CAAA;YACd,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACjC,CAAC;IACH,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,MAAM,IAAI,GAAG,WAAW,CACtB,KAAK,EAAE,OAAe,EAAE,OAAiB,EAAE,EAAE,EAAE;QAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;QAC9B,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM;YAAE,OAAM;QAE3C,mEAAmE;QACnE,qEAAqE;QACrE,mEAAmE;QACnE,mEAAmE;QACnE,UAAU;QACV,MAAM,UAAU,GAAe;YAC7B,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,OAAO;YAChB,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,OAAO,EAAE,OAAO,EAAE;SACnB,CAAA;QACD,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAA;QAC5C,UAAU,CAAC,IAAI,CAAC,CAAA;QAChB,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,uBAAuB,CAAC,IAAI,CAAC,CAAA;QAE7B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YAC5C,sBAAsB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;YAC5C,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACpB,GAAG,IAAI;gBACP;oBACE,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,KAAK,EAAE,KAAK,CAAC,KAAK;iBACnB;aACF,CAAC,CAAA;YACF,SAAS,EAAE,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mEAAmE;YACnE,4CAA4C;YAC5C,IAAI,GAAG,YAAY,iCAAiC,EAAE,CAAC;gBACrD,uBAAuB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;YAC5C,CAAC;YACD,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;YAChC,QAAQ,CAAC,GAA2B,CAAC,CAAA;YACrC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACpB,GAAG,IAAI;gBACP,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;aACpF,CAAC,CAAA;YACF,OAAO,EAAE,CAAC,GAA2B,CAAC,CAAA;QACxC,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAA;QACnB,CAAC;IACH,CAAC,EACD,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAC3B,CAAA;IAED,MAAM,OAAO,GAAG,WAAW,CACzB,KAAK,EAAE,cAAsC,EAAE,EAAE,EAAE;QACjD,MAAM,SAAS,GACb,WAAW,CAAC,SAAS;YACrB,CAAC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;QACpE,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAA;QAC9E,CAAC;QACD,mDAAmD;QACnD,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAA;QACnF,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QACpC,CAAC;QACD,OAAM;IACR,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAA;IAED,MAAM,eAAe,GAAG,WAAW,CACjC,KAAK,EAAE,YAAoB,EAAE,EAAE;QAC7B,MAAM,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;QACtD,oEAAoE;QACpE,4DAA4D;QAC5D,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QACtB,uBAAuB,CAAC,IAAI,CAAC,CAAA;QAC7B,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAA;IAC/D,CAAC,EACD,CAAC,OAAO,EAAE,IAAI,CAAC,CAChB,CAAA;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC7B,wEAAwE;QACxE,kEAAkE;QAClE,qEAAqE;QACrE,WAAW,CAAC,EAAE,CAAC,CAAA;QACf,QAAQ,CAAC,IAAI,CAAC,CAAA;QACd,uBAAuB,CAAC,IAAI,CAAC,CAAA;QAC7B,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACjC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAEV,OAAO;QACL,QAAQ;QACR,IAAI;QACJ,OAAO;QACP,KAAK;QACL,IAAI;QACJ,cAAc,EAAE,mBAAmB;QACnC,KAAK;QACL,oBAAoB;QACpB,OAAO;QACP,eAAe;KAChB,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,SAAS,WAAW,CAAC,GAAY;IAC/B,IAAI,GAAG,YAAY,iCAAiC,EAAE,CAAC;QACrD,oEAAoE;QACpE,kDAAkD;QAClD,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,CAAA;QAC9C,OAAO,MAAM,IAAI,gBAAgB,QAAQ,uBAAuB,CAAA;IAClE,CAAC;IACD,IAAI,GAAG,YAAY,YAAY;QAAE,OAAO,GAAG,CAAC,WAAW,CAAA;IACvD,OAAO,oBAAoB,CAAA;AAC7B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@darqlabs/curator-sdk-react",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "Official React components for Curator — drop-in chat widget and headless hook backed by @darqlabs/curator-sdk.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "./dist/cjs/index.js",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"react": "^18.0.0 || ^19.0.0",
|
|
35
35
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
36
|
-
"@darqlabs/curator-sdk": "^0.3.
|
|
36
|
+
"@darqlabs/curator-sdk": "^0.3.4"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@testing-library/react": "^16.1.0",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"react-dom": "^18.3.0",
|
|
47
47
|
"ts-jest": "^29.4.9",
|
|
48
48
|
"typescript": "^5.9.3",
|
|
49
|
-
"@darqlabs/curator-sdk": "^0.3.
|
|
49
|
+
"@darqlabs/curator-sdk": "^0.3.4"
|
|
50
50
|
},
|
|
51
51
|
"keywords": [
|
|
52
52
|
"curator",
|