@liveblocks/react 2.25.0-aiprivatebeta6 → 2.25.0-aiprivatebeta8
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/_private.cjs +5 -5
- package/dist/_private.d.cts +1 -1
- package/dist/_private.d.ts +1 -1
- package/dist/_private.js +1 -1
- package/dist/chunk-CP5NPU7C.cjs +60 -0
- package/dist/chunk-CP5NPU7C.cjs.map +1 -0
- package/dist/chunk-EAKXSMWI.js +60 -0
- package/dist/chunk-EAKXSMWI.js.map +1 -0
- package/dist/{chunk-LADHIK2J.cjs → chunk-G2EOFP6S.cjs} +60 -4
- package/dist/chunk-G2EOFP6S.cjs.map +1 -0
- package/dist/{chunk-6ZW6CNWG.js → chunk-MT7DJTSL.js} +59 -3
- package/dist/chunk-MT7DJTSL.js.map +1 -0
- package/dist/index.cjs +6 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +30 -3
- package/dist/index.d.ts +30 -3
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/{room-DnGQ1o0B.d.cts → room-BSt58hY4.d.cts} +33 -2
- package/dist/{room-DnGQ1o0B.d.ts → room-BSt58hY4.d.ts} +33 -2
- package/dist/suspense.cjs +8 -4
- package/dist/suspense.cjs.map +1 -1
- package/dist/suspense.d.cts +2 -2
- package/dist/suspense.d.ts +2 -2
- package/dist/suspense.js +7 -3
- package/dist/suspense.js.map +1 -1
- package/package.json +3 -3
- package/dist/chunk-6ZW6CNWG.js.map +0 -1
- package/dist/chunk-G44PSSNE.js +0 -23
- package/dist/chunk-G44PSSNE.js.map +0 -1
- package/dist/chunk-LADHIK2J.cjs.map +0 -1
- package/dist/chunk-PI43B26Z.cjs +0 -23
- package/dist/chunk-PI43B26Z.cjs.map +0 -1
package/dist/_private.cjs
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
var
|
|
27
|
+
var _chunkG2EOFP6Scjs = require('./chunk-G2EOFP6S.cjs');
|
|
28
28
|
|
|
29
29
|
// src/lib/use-layout-effect.ts
|
|
30
30
|
var _react = require('react');
|
|
@@ -37,8 +37,8 @@ var MENTION_SUGGESTIONS_DEBOUNCE = 500;
|
|
|
37
37
|
function useMentionSuggestions(roomId, search) {
|
|
38
38
|
const [mentionSuggestions, setMentionSuggestions] = _react.useState.call(void 0, );
|
|
39
39
|
const lastInvokedAt = _react.useRef.call(void 0, );
|
|
40
|
-
const resolveMentionSuggestions =
|
|
41
|
-
const mentionSuggestionsCache =
|
|
40
|
+
const resolveMentionSuggestions = _chunkG2EOFP6Scjs.useResolveMentionSuggestions.call(void 0, );
|
|
41
|
+
const mentionSuggestionsCache = _chunkG2EOFP6Scjs.useMentionSuggestionsCache.call(void 0, );
|
|
42
42
|
_react.useEffect.call(void 0, () => {
|
|
43
43
|
if (search === void 0 || !resolveMentionSuggestions) {
|
|
44
44
|
return;
|
|
@@ -89,7 +89,7 @@ function useMentionSuggestions(roomId, search) {
|
|
|
89
89
|
|
|
90
90
|
|
|
91
91
|
function useSyncSource() {
|
|
92
|
-
const client =
|
|
92
|
+
const client = _chunkG2EOFP6Scjs.useClient.call(void 0, );
|
|
93
93
|
const createSyncSource = client[_core.kInternal].createSyncSource;
|
|
94
94
|
const [syncSource, setSyncSource] = _react.useState.call(void 0, );
|
|
95
95
|
_react.useEffect.call(void 0, () => {
|
|
@@ -127,5 +127,5 @@ function useSyncSource() {
|
|
|
127
127
|
|
|
128
128
|
|
|
129
129
|
|
|
130
|
-
exports.getUmbrellaStoreForClient =
|
|
130
|
+
exports.getUmbrellaStoreForClient = _chunkG2EOFP6Scjs.getUmbrellaStoreForClient; exports.useAddRoomCommentReaction = _chunkG2EOFP6Scjs.useAddRoomCommentReaction; exports.useClientOrNull = _chunkG2EOFP6Scjs.useClientOrNull; exports.useCreateRoomComment = _chunkG2EOFP6Scjs.useCreateRoomComment; exports.useCreateRoomThread = _chunkG2EOFP6Scjs.useCreateRoomThread; exports.useCreateTextMention = _chunkG2EOFP6Scjs.useCreateTextMention; exports.useDeleteRoomComment = _chunkG2EOFP6Scjs.useDeleteRoomComment; exports.useDeleteRoomThread = _chunkG2EOFP6Scjs.useDeleteRoomThread; exports.useDeleteTextMention = _chunkG2EOFP6Scjs.useDeleteTextMention; exports.useEditRoomComment = _chunkG2EOFP6Scjs.useEditRoomComment; exports.useEditRoomThreadMetadata = _chunkG2EOFP6Scjs.useEditRoomThreadMetadata; exports.useLayoutEffect = useLayoutEffect; exports.useMarkRoomThreadAsRead = _chunkG2EOFP6Scjs.useMarkRoomThreadAsRead; exports.useMarkRoomThreadAsResolved = _chunkG2EOFP6Scjs.useMarkRoomThreadAsResolved; exports.useMarkRoomThreadAsUnresolved = _chunkG2EOFP6Scjs.useMarkRoomThreadAsUnresolved; exports.useMentionSuggestions = useMentionSuggestions; exports.useMentionSuggestionsCache = _chunkG2EOFP6Scjs.useMentionSuggestionsCache; exports.useRemoveRoomCommentReaction = _chunkG2EOFP6Scjs.useRemoveRoomCommentReaction; exports.useReportTextEditor = _chunkG2EOFP6Scjs.useReportTextEditor; exports.useResolveMentionSuggestions = _chunkG2EOFP6Scjs.useResolveMentionSuggestions; exports.useRoomAttachmentUrl = _chunkG2EOFP6Scjs.useRoomAttachmentUrl; exports.useRoomPermissions = _chunkG2EOFP6Scjs.useRoomPermissions; exports.useRoomThreadSubscription = _chunkG2EOFP6Scjs.useRoomThreadSubscription; exports.useSignal = _chunkG2EOFP6Scjs.useSignal; exports.useSyncExternalStoreWithSelector = _chunkG2EOFP6Scjs.useSyncExternalStoreWithSelector; exports.useSyncSource = useSyncSource; exports.useYjsProvider = _chunkG2EOFP6Scjs.useYjsProvider;
|
|
131
131
|
//# sourceMappingURL=_private.cjs.map
|
package/dist/_private.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useLayoutEffect as useLayoutEffect$1 } from 'react';
|
|
2
|
-
export { g as getUmbrellaStoreForClient, a as useAddRoomCommentReaction, u as useClientOrNull, b as useCreateRoomComment, c as useCreateRoomThread, d as useCreateTextMention, e as useDeleteRoomComment, f as useDeleteRoomThread, h as useDeleteTextMention, i as useEditRoomComment, j as useEditRoomThreadMetadata, k as useMarkRoomThreadAsRead, l as useMarkRoomThreadAsResolved, m as useMarkRoomThreadAsUnresolved, n as useMentionSuggestionsCache, o as useRemoveRoomCommentReaction, p as useReportTextEditor, q as useResolveMentionSuggestions, r as useRoomAttachmentUrl, s as useRoomPermissions, t as useRoomThreadSubscription, v as useYjsProvider } from './room-
|
|
2
|
+
export { g as getUmbrellaStoreForClient, a as useAddRoomCommentReaction, u as useClientOrNull, b as useCreateRoomComment, c as useCreateRoomThread, d as useCreateTextMention, e as useDeleteRoomComment, f as useDeleteRoomThread, h as useDeleteTextMention, i as useEditRoomComment, j as useEditRoomThreadMetadata, k as useMarkRoomThreadAsRead, l as useMarkRoomThreadAsResolved, m as useMarkRoomThreadAsUnresolved, n as useMentionSuggestionsCache, o as useRemoveRoomCommentReaction, p as useReportTextEditor, q as useResolveMentionSuggestions, r as useRoomAttachmentUrl, s as useRoomPermissions, t as useRoomThreadSubscription, v as useYjsProvider } from './room-BSt58hY4.cjs';
|
|
3
3
|
import { ISignal, SyncSource } from '@liveblocks/core';
|
|
4
4
|
import 'react/jsx-runtime';
|
|
5
5
|
import '@liveblocks/client';
|
package/dist/_private.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useLayoutEffect as useLayoutEffect$1 } from 'react';
|
|
2
|
-
export { g as getUmbrellaStoreForClient, a as useAddRoomCommentReaction, u as useClientOrNull, b as useCreateRoomComment, c as useCreateRoomThread, d as useCreateTextMention, e as useDeleteRoomComment, f as useDeleteRoomThread, h as useDeleteTextMention, i as useEditRoomComment, j as useEditRoomThreadMetadata, k as useMarkRoomThreadAsRead, l as useMarkRoomThreadAsResolved, m as useMarkRoomThreadAsUnresolved, n as useMentionSuggestionsCache, o as useRemoveRoomCommentReaction, p as useReportTextEditor, q as useResolveMentionSuggestions, r as useRoomAttachmentUrl, s as useRoomPermissions, t as useRoomThreadSubscription, v as useYjsProvider } from './room-
|
|
2
|
+
export { g as getUmbrellaStoreForClient, a as useAddRoomCommentReaction, u as useClientOrNull, b as useCreateRoomComment, c as useCreateRoomThread, d as useCreateTextMention, e as useDeleteRoomComment, f as useDeleteRoomThread, h as useDeleteTextMention, i as useEditRoomComment, j as useEditRoomThreadMetadata, k as useMarkRoomThreadAsRead, l as useMarkRoomThreadAsResolved, m as useMarkRoomThreadAsUnresolved, n as useMentionSuggestionsCache, o as useRemoveRoomCommentReaction, p as useReportTextEditor, q as useResolveMentionSuggestions, r as useRoomAttachmentUrl, s as useRoomPermissions, t as useRoomThreadSubscription, v as useYjsProvider } from './room-BSt58hY4.js';
|
|
3
3
|
import { ISignal, SyncSource } from '@liveblocks/core';
|
|
4
4
|
import 'react/jsx-runtime';
|
|
5
5
|
import '@liveblocks/client';
|
package/dist/_private.js
CHANGED
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
useSignal,
|
|
25
25
|
useSyncExternalStoreWithSelector,
|
|
26
26
|
useYjsProvider
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-MT7DJTSL.js";
|
|
28
28
|
|
|
29
29
|
// src/lib/use-layout-effect.ts
|
|
30
30
|
import { useEffect, useLayoutEffect as useOriginalLayoutEffect } from "react";
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
|
|
2
|
+
|
|
3
|
+
var _chunkG2EOFP6Scjs = require('./chunk-G2EOFP6S.cjs');
|
|
4
|
+
|
|
5
|
+
// src/version.ts
|
|
6
|
+
var PKG_NAME = "@liveblocks/react";
|
|
7
|
+
var PKG_VERSION = "2.25.0-aiprivatebeta8";
|
|
8
|
+
var PKG_FORMAT = "cjs";
|
|
9
|
+
|
|
10
|
+
// src/ClientSideSuspense.tsx
|
|
11
|
+
var _react = require('react');
|
|
12
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
13
|
+
function ClientSideSuspense(props) {
|
|
14
|
+
const [mounted, setMounted] = _react.useState.call(void 0, false);
|
|
15
|
+
_react.useEffect.call(void 0, () => {
|
|
16
|
+
setMounted(true);
|
|
17
|
+
}, []);
|
|
18
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _react.Suspense, { fallback: props.fallback, children: mounted ? typeof props.children === "function" ? props.children() : props.children : props.fallback });
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// src/ai.tsx
|
|
22
|
+
var _core = require('@liveblocks/core');
|
|
23
|
+
|
|
24
|
+
function useAi() {
|
|
25
|
+
return _chunkG2EOFP6Scjs.useClient.call(void 0, )[_core.kInternal].ai;
|
|
26
|
+
}
|
|
27
|
+
function useRandom() {
|
|
28
|
+
return _react.useState.call(void 0, _core.nanoid)[0];
|
|
29
|
+
}
|
|
30
|
+
var RegisterAiKnowledge = _react.memo.call(void 0, function RegisterAiKnowledge2(props) {
|
|
31
|
+
const layerId = _react.useId.call(void 0, );
|
|
32
|
+
const ai = useAi();
|
|
33
|
+
const { description, value } = props;
|
|
34
|
+
const [layerKey, setLayerKey] = _react.useState.call(void 0, );
|
|
35
|
+
_react.useEffect.call(void 0, () => {
|
|
36
|
+
const layerKey2 = ai.registerKnowledgeLayer(layerId);
|
|
37
|
+
setLayerKey(layerKey2);
|
|
38
|
+
return () => {
|
|
39
|
+
ai.deregisterKnowledgeLayer(layerKey2);
|
|
40
|
+
setLayerKey(void 0);
|
|
41
|
+
};
|
|
42
|
+
}, [ai, layerId]);
|
|
43
|
+
const randomKey = useRandom();
|
|
44
|
+
const knowledgeKey = _nullishCoalesce(props.id, () => ( randomKey));
|
|
45
|
+
_react.useEffect.call(void 0, () => {
|
|
46
|
+
if (layerKey !== void 0) {
|
|
47
|
+
ai.updateKnowledge(layerKey, { description, value }, knowledgeKey);
|
|
48
|
+
}
|
|
49
|
+
}, [ai, layerKey, knowledgeKey, description, value]);
|
|
50
|
+
return null;
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
exports.PKG_NAME = PKG_NAME; exports.PKG_VERSION = PKG_VERSION; exports.PKG_FORMAT = PKG_FORMAT; exports.ClientSideSuspense = ClientSideSuspense; exports.RegisterAiKnowledge = RegisterAiKnowledge;
|
|
60
|
+
//# sourceMappingURL=chunk-CP5NPU7C.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/liveblocks/liveblocks/packages/liveblocks-react/dist/chunk-CP5NPU7C.cjs","../src/version.ts","../src/ClientSideSuspense.tsx","../src/ai.tsx"],"names":["useState","RegisterAiKnowledge","useEffect","layerKey"],"mappings":"AAAA;AACE;AACF,wDAA6B;AAC7B;AACA;ACDO,IAAM,SAAA,EAAW,mBAAA;AACjB,IAAM,YAAA,EAAiD,uBAAA;AACvD,IAAM,WAAA,EAAgD,KAAA;ADG7D;AACA;AERA,8BAA8C;AAkC1C,+CAAA;AAVG,SAAS,kBAAA,CAAmB,KAAA,EAAc;AAC/C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,EAAA,EAAI,6BAAA,KAAc,CAAA;AAE5C,EAAA,8BAAA,CAAU,EAAA,GAAM;AAGd,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA,EAAG,CAAC,CAAC,CAAA;AAEL,EAAA,uBACE,6BAAA,eAAC,EAAA,EAAS,QAAA,EAAU,KAAA,CAAM,QAAA,EACvB,QAAA,EAAA,QAAA,EACG,OAAO,KAAA,CAAM,SAAA,IAAa,WAAA,EACxB,KAAA,CAAM,QAAA,CAAS,EAAA,EACf,KAAA,CAAM,SAAA,EACR,KAAA,CAAM,SAAA,CACZ,CAAA;AAEJ;AFxBA;AACA;AGnBA,wCAAkC;AAClC;AAIA,SAAS,KAAA,CAAA,EAAQ;AACf,EAAA,OAAO,yCAAA,CAAU,CAAE,eAAS,CAAA,CAAE,EAAA;AAChC;AAEA,SAAS,SAAA,CAAA,EAAY;AACnB,EAAA,OAAOA,6BAAAA,YAAe,CAAA,CAAE,CAAC,CAAA;AAC3B;AAoBO,IAAM,oBAAA,EAAsB,yBAAA,SAAcC,oBAAAA,CAC/C,KAAA,EAQA;AACA,EAAA,MAAM,QAAA,EAAU,0BAAA,CAAM;AACtB,EAAA,MAAM,GAAA,EAAK,KAAA,CAAM,CAAA;AACjB,EAAA,MAAM,EAAE,WAAA,EAAa,MAAM,EAAA,EAAI,KAAA;AAE/B,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,EAAA,EAAID,6BAAAA,CAE9B;AAGF,EAAAE,8BAAAA,CAAU,EAAA,GAAM;AACd,IAAA,MAAMC,UAAAA,EAAW,EAAA,CAAG,sBAAA,CAAuB,OAAO,CAAA;AAClD,IAAA,WAAA,CAAYA,SAAQ,CAAA;AACpB,IAAA,OAAO,CAAA,EAAA,GAAM;AACX,MAAA,EAAA,CAAG,wBAAA,CAAyBA,SAAQ,CAAA;AACpC,MAAA,WAAA,CAAY,KAAA,CAAS,CAAA;AAAA,IACvB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,EAAA,EAAI,OAAO,CAAC,CAAA;AAGhB,EAAA,MAAM,UAAA,EAAY,SAAA,CAAU,CAAA;AAC5B,EAAA,MAAM,aAAA,mBAAe,KAAA,CAAM,EAAA,UAAM,WAAA;AACjC,EAAAD,8BAAAA,CAAU,EAAA,GAAM;AACd,IAAA,GAAA,CAAI,SAAA,IAAa,KAAA,CAAA,EAAW;AAC1B,MAAA,EAAA,CAAG,eAAA,CAAgB,QAAA,EAAU,EAAE,WAAA,EAAa,MAAM,CAAA,EAAG,YAAY,CAAA;AAAA,IACnE;AAAA,EACF,CAAA,EAAG,CAAC,EAAA,EAAI,QAAA,EAAU,YAAA,EAAc,WAAA,EAAa,KAAK,CAAC,CAAA;AAEnD,EAAA,OAAO,IAAA;AACT,CAAC,CAAA;AHnBD;AACA;AACE;AACA;AACA;AACA;AACA;AACF,oMAAC","file":"/home/runner/work/liveblocks/liveblocks/packages/liveblocks-react/dist/chunk-CP5NPU7C.cjs","sourcesContent":[null,"declare const __VERSION__: string;\ndeclare const TSUP_FORMAT: string;\n\nexport const PKG_NAME = \"@liveblocks/react\";\nexport const PKG_VERSION = typeof __VERSION__ === \"string\" && __VERSION__;\nexport const PKG_FORMAT = typeof TSUP_FORMAT === \"string\" && TSUP_FORMAT;\n","import type { ReactNode } from \"react\";\nimport { Suspense, useEffect, useState } from \"react\";\n\ntype Props = {\n fallback: ReactNode;\n children: (() => ReactNode | undefined) | ReactNode | undefined;\n};\n\n/**\n * Almost like a normal <Suspense> component, except that for server-side\n * renders, the fallback will be used.\n *\n * The child props will have to be provided in a function, i.e. change:\n *\n * <Suspense fallback={<Loading />}>\n * <MyRealComponent a={1} />\n * </Suspense>\n *\n * To:\n *\n * <ClientSideSuspense fallback={<Loading />}>\n * <MyRealComponent a={1} />\n * </ClientSideSuspense>\n *\n */\nexport function ClientSideSuspense(props: Props) {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n // Effects are never executed on the server side. The point of this is to\n // delay the flipping of this boolean until after hydration has happened.\n setMounted(true);\n }, []);\n\n return (\n <Suspense fallback={props.fallback}>\n {mounted\n ? typeof props.children === \"function\"\n ? props.children()\n : props.children\n : props.fallback}\n </Suspense>\n );\n}\n","import type { AiKnowledgeSource } from \"@liveblocks/core\";\nimport { kInternal, nanoid } from \"@liveblocks/core\";\nimport { memo, useEffect, useId, useState } from \"react\";\n\nimport { useClient } from \"./liveblocks\";\n\nfunction useAi() {\n return useClient()[kInternal].ai;\n}\n\nfunction useRandom() {\n return useState(nanoid)[0];\n}\n\n/**\n * Make knowledge about your application state available to any AI used in\n * a chat or a one-off request.\n *\n * For example:\n *\n * <RegisterAiKnowledge\n * description=\"The current mode of my application\"\n * value=\"dark\" />\n *\n * <RegisterAiKnowledge\n * description=\"The current list of todos\"\n * value={todos} />\n *\n * By mounting this component, the AI will get access to this knwoledge.\n * By unmounting this component, the AI will no longer have access to it.\n * It can choose to use or ignore this knowledge in its responses.\n */\nexport const RegisterAiKnowledge = memo(function RegisterAiKnowledge(\n props: AiKnowledgeSource & {\n /**\n * An optional unique key for this knowledge source. If multiple components\n * register knowledge under the same key, the last one to mount takes\n * precedence.\n */\n id?: string;\n }\n) {\n const layerId = useId();\n const ai = useAi();\n const { description, value } = props;\n\n const [layerKey, setLayerKey] = useState<\n ReturnType<typeof ai.registerKnowledgeLayer> | undefined\n >();\n\n // Executes at mount / unmount\n useEffect(() => {\n const layerKey = ai.registerKnowledgeLayer(layerId);\n setLayerKey(layerKey);\n return () => {\n ai.deregisterKnowledgeLayer(layerKey);\n setLayerKey(undefined);\n };\n }, [ai, layerId]);\n\n // Executes every render (if the props have changed)\n const randomKey = useRandom();\n const knowledgeKey = props.id ?? randomKey;\n useEffect(() => {\n if (layerKey !== undefined) {\n ai.updateKnowledge(layerKey, { description, value }, knowledgeKey);\n }\n }, [ai, layerKey, knowledgeKey, description, value]);\n\n return null;\n});\n"]}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import {
|
|
2
|
+
useClient
|
|
3
|
+
} from "./chunk-MT7DJTSL.js";
|
|
4
|
+
|
|
5
|
+
// src/version.ts
|
|
6
|
+
var PKG_NAME = "@liveblocks/react";
|
|
7
|
+
var PKG_VERSION = "2.25.0-aiprivatebeta8";
|
|
8
|
+
var PKG_FORMAT = "esm";
|
|
9
|
+
|
|
10
|
+
// src/ClientSideSuspense.tsx
|
|
11
|
+
import { Suspense, useEffect, useState } from "react";
|
|
12
|
+
import { jsx } from "react/jsx-runtime";
|
|
13
|
+
function ClientSideSuspense(props) {
|
|
14
|
+
const [mounted, setMounted] = useState(false);
|
|
15
|
+
useEffect(() => {
|
|
16
|
+
setMounted(true);
|
|
17
|
+
}, []);
|
|
18
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: props.fallback, children: mounted ? typeof props.children === "function" ? props.children() : props.children : props.fallback });
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// src/ai.tsx
|
|
22
|
+
import { kInternal, nanoid } from "@liveblocks/core";
|
|
23
|
+
import { memo, useEffect as useEffect2, useId, useState as useState2 } from "react";
|
|
24
|
+
function useAi() {
|
|
25
|
+
return useClient()[kInternal].ai;
|
|
26
|
+
}
|
|
27
|
+
function useRandom() {
|
|
28
|
+
return useState2(nanoid)[0];
|
|
29
|
+
}
|
|
30
|
+
var RegisterAiKnowledge = memo(function RegisterAiKnowledge2(props) {
|
|
31
|
+
const layerId = useId();
|
|
32
|
+
const ai = useAi();
|
|
33
|
+
const { description, value } = props;
|
|
34
|
+
const [layerKey, setLayerKey] = useState2();
|
|
35
|
+
useEffect2(() => {
|
|
36
|
+
const layerKey2 = ai.registerKnowledgeLayer(layerId);
|
|
37
|
+
setLayerKey(layerKey2);
|
|
38
|
+
return () => {
|
|
39
|
+
ai.deregisterKnowledgeLayer(layerKey2);
|
|
40
|
+
setLayerKey(void 0);
|
|
41
|
+
};
|
|
42
|
+
}, [ai, layerId]);
|
|
43
|
+
const randomKey = useRandom();
|
|
44
|
+
const knowledgeKey = props.id ?? randomKey;
|
|
45
|
+
useEffect2(() => {
|
|
46
|
+
if (layerKey !== void 0) {
|
|
47
|
+
ai.updateKnowledge(layerKey, { description, value }, knowledgeKey);
|
|
48
|
+
}
|
|
49
|
+
}, [ai, layerKey, knowledgeKey, description, value]);
|
|
50
|
+
return null;
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
export {
|
|
54
|
+
PKG_NAME,
|
|
55
|
+
PKG_VERSION,
|
|
56
|
+
PKG_FORMAT,
|
|
57
|
+
ClientSideSuspense,
|
|
58
|
+
RegisterAiKnowledge
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=chunk-EAKXSMWI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/version.ts","../src/ClientSideSuspense.tsx","../src/ai.tsx"],"sourcesContent":["declare const __VERSION__: string;\ndeclare const TSUP_FORMAT: string;\n\nexport const PKG_NAME = \"@liveblocks/react\";\nexport const PKG_VERSION = typeof __VERSION__ === \"string\" && __VERSION__;\nexport const PKG_FORMAT = typeof TSUP_FORMAT === \"string\" && TSUP_FORMAT;\n","import type { ReactNode } from \"react\";\nimport { Suspense, useEffect, useState } from \"react\";\n\ntype Props = {\n fallback: ReactNode;\n children: (() => ReactNode | undefined) | ReactNode | undefined;\n};\n\n/**\n * Almost like a normal <Suspense> component, except that for server-side\n * renders, the fallback will be used.\n *\n * The child props will have to be provided in a function, i.e. change:\n *\n * <Suspense fallback={<Loading />}>\n * <MyRealComponent a={1} />\n * </Suspense>\n *\n * To:\n *\n * <ClientSideSuspense fallback={<Loading />}>\n * <MyRealComponent a={1} />\n * </ClientSideSuspense>\n *\n */\nexport function ClientSideSuspense(props: Props) {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n // Effects are never executed on the server side. The point of this is to\n // delay the flipping of this boolean until after hydration has happened.\n setMounted(true);\n }, []);\n\n return (\n <Suspense fallback={props.fallback}>\n {mounted\n ? typeof props.children === \"function\"\n ? props.children()\n : props.children\n : props.fallback}\n </Suspense>\n );\n}\n","import type { AiKnowledgeSource } from \"@liveblocks/core\";\nimport { kInternal, nanoid } from \"@liveblocks/core\";\nimport { memo, useEffect, useId, useState } from \"react\";\n\nimport { useClient } from \"./liveblocks\";\n\nfunction useAi() {\n return useClient()[kInternal].ai;\n}\n\nfunction useRandom() {\n return useState(nanoid)[0];\n}\n\n/**\n * Make knowledge about your application state available to any AI used in\n * a chat or a one-off request.\n *\n * For example:\n *\n * <RegisterAiKnowledge\n * description=\"The current mode of my application\"\n * value=\"dark\" />\n *\n * <RegisterAiKnowledge\n * description=\"The current list of todos\"\n * value={todos} />\n *\n * By mounting this component, the AI will get access to this knwoledge.\n * By unmounting this component, the AI will no longer have access to it.\n * It can choose to use or ignore this knowledge in its responses.\n */\nexport const RegisterAiKnowledge = memo(function RegisterAiKnowledge(\n props: AiKnowledgeSource & {\n /**\n * An optional unique key for this knowledge source. If multiple components\n * register knowledge under the same key, the last one to mount takes\n * precedence.\n */\n id?: string;\n }\n) {\n const layerId = useId();\n const ai = useAi();\n const { description, value } = props;\n\n const [layerKey, setLayerKey] = useState<\n ReturnType<typeof ai.registerKnowledgeLayer> | undefined\n >();\n\n // Executes at mount / unmount\n useEffect(() => {\n const layerKey = ai.registerKnowledgeLayer(layerId);\n setLayerKey(layerKey);\n return () => {\n ai.deregisterKnowledgeLayer(layerKey);\n setLayerKey(undefined);\n };\n }, [ai, layerId]);\n\n // Executes every render (if the props have changed)\n const randomKey = useRandom();\n const knowledgeKey = props.id ?? randomKey;\n useEffect(() => {\n if (layerKey !== undefined) {\n ai.updateKnowledge(layerKey, { description, value }, knowledgeKey);\n }\n }, [ai, layerKey, knowledgeKey, description, value]);\n\n return null;\n});\n"],"mappings":";;;;;AAGO,IAAM,WAAW;AACjB,IAAM,cAAiD;AACvD,IAAM,aAAgD;;;ACJ7D,SAAS,UAAU,WAAW,gBAAgB;AAkC1C;AAVG,SAAS,mBAAmB,OAAc;AAC/C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAE5C,YAAU,MAAM;AAGd,eAAW,IAAI;AAAA,EACjB,GAAG,CAAC,CAAC;AAEL,SACE,oBAAC,YAAS,UAAU,MAAM,UACvB,oBACG,OAAO,MAAM,aAAa,aACxB,MAAM,SAAS,IACf,MAAM,WACR,MAAM,UACZ;AAEJ;;;AC1CA,SAAS,WAAW,cAAc;AAClC,SAAS,MAAM,aAAAA,YAAW,OAAO,YAAAC,iBAAgB;AAIjD,SAAS,QAAQ;AACf,SAAO,UAAU,EAAE,SAAS,EAAE;AAChC;AAEA,SAAS,YAAY;AACnB,SAAOC,UAAS,MAAM,EAAE,CAAC;AAC3B;AAoBO,IAAM,sBAAsB,KAAK,SAASC,qBAC/C,OAQA;AACA,QAAM,UAAU,MAAM;AACtB,QAAM,KAAK,MAAM;AACjB,QAAM,EAAE,aAAa,MAAM,IAAI;AAE/B,QAAM,CAAC,UAAU,WAAW,IAAID,UAE9B;AAGF,EAAAE,WAAU,MAAM;AACd,UAAMC,YAAW,GAAG,uBAAuB,OAAO;AAClD,gBAAYA,SAAQ;AACpB,WAAO,MAAM;AACX,SAAG,yBAAyBA,SAAQ;AACpC,kBAAY,MAAS;AAAA,IACvB;AAAA,EACF,GAAG,CAAC,IAAI,OAAO,CAAC;AAGhB,QAAM,YAAY,UAAU;AAC5B,QAAM,eAAe,MAAM,MAAM;AACjC,EAAAD,WAAU,MAAM;AACd,QAAI,aAAa,QAAW;AAC1B,SAAG,gBAAgB,UAAU,EAAE,aAAa,MAAM,GAAG,YAAY;AAAA,IACnE;AAAA,EACF,GAAG,CAAC,IAAI,UAAU,cAAc,aAAa,KAAK,CAAC;AAEnD,SAAO;AACT,CAAC;","names":["useEffect","useState","useState","RegisterAiKnowledge","useEffect","layerKey"]}
|
|
@@ -1157,6 +1157,31 @@ var UmbrellaStore = class {
|
|
|
1157
1157
|
}
|
|
1158
1158
|
);
|
|
1159
1159
|
});
|
|
1160
|
+
const aiChatById = new (0, _core.DefaultMap)((chatId) => {
|
|
1161
|
+
const resource = new SinglePageResource(async () => {
|
|
1162
|
+
await this.#client[_core.kInternal].ai.getOrCreateChat(chatId);
|
|
1163
|
+
});
|
|
1164
|
+
const signal = _core.DerivedSignal.from(() => {
|
|
1165
|
+
const chat = this.#client[_core.kInternal].ai.signals.getChatById(chatId);
|
|
1166
|
+
if (chat === void 0) {
|
|
1167
|
+
const result = resource.get();
|
|
1168
|
+
if (result.isLoading || result.error) {
|
|
1169
|
+
return result;
|
|
1170
|
+
} else {
|
|
1171
|
+
return ASYNC_OK(
|
|
1172
|
+
"chat",
|
|
1173
|
+
_core.nn.call(void 0, this.#client[_core.kInternal].ai.signals.getChatById(chatId))
|
|
1174
|
+
);
|
|
1175
|
+
}
|
|
1176
|
+
} else {
|
|
1177
|
+
return ASYNC_OK(
|
|
1178
|
+
"chat",
|
|
1179
|
+
_core.nn.call(void 0, this.#client[_core.kInternal].ai.signals.getChatById(chatId))
|
|
1180
|
+
);
|
|
1181
|
+
}
|
|
1182
|
+
}, _core.shallow);
|
|
1183
|
+
return { signal, waitUntilLoaded: resource.waitUntilLoaded };
|
|
1184
|
+
});
|
|
1160
1185
|
this.outputs = {
|
|
1161
1186
|
threadifications,
|
|
1162
1187
|
threads,
|
|
@@ -1169,7 +1194,8 @@ var UmbrellaStore = class {
|
|
|
1169
1194
|
notificationSettings,
|
|
1170
1195
|
threadSubscriptions,
|
|
1171
1196
|
aiChats,
|
|
1172
|
-
messagesByChatId
|
|
1197
|
+
messagesByChatId,
|
|
1198
|
+
aiChatById
|
|
1173
1199
|
};
|
|
1174
1200
|
autobind(this);
|
|
1175
1201
|
}
|
|
@@ -2049,6 +2075,7 @@ function makeLiveblocksContextBundle(client) {
|
|
|
2049
2075
|
useInboxNotificationThread: useInboxNotificationThread2,
|
|
2050
2076
|
useUserThreads_experimental,
|
|
2051
2077
|
useAiChats,
|
|
2078
|
+
useAiChat,
|
|
2052
2079
|
useAiChatMessages,
|
|
2053
2080
|
useCreateAiChat,
|
|
2054
2081
|
useDeleteAiChat,
|
|
@@ -2066,6 +2093,7 @@ function makeLiveblocksContextBundle(client) {
|
|
|
2066
2093
|
useUpdateNotificationSettings: useUpdateNotificationSettings2,
|
|
2067
2094
|
useUserThreads_experimental: useUserThreadsSuspense_experimental,
|
|
2068
2095
|
useAiChats: useAiChatsSuspense,
|
|
2096
|
+
useAiChat: useAiChatSuspense,
|
|
2069
2097
|
useAiChatMessages: useAiChatMessagesSuspense,
|
|
2070
2098
|
useCreateAiChat,
|
|
2071
2099
|
useDeleteAiChat,
|
|
@@ -2497,11 +2525,37 @@ function useAiChatMessagesSuspense(chatId, branch) {
|
|
|
2497
2525
|
_core.assert.call(void 0, !result.isLoading, "Did not expect loading");
|
|
2498
2526
|
return result;
|
|
2499
2527
|
}
|
|
2528
|
+
function useAiChat(chatId) {
|
|
2529
|
+
const client = useClient();
|
|
2530
|
+
const store = getUmbrellaStoreForClient(client);
|
|
2531
|
+
_react.useEffect.call(void 0,
|
|
2532
|
+
() => void store.outputs.aiChatById.getOrCreate(chatId).waitUntilLoaded()
|
|
2533
|
+
// NOTE: Deliberately *not* using a dependency array here!
|
|
2534
|
+
//
|
|
2535
|
+
// It is important to call waitUntil on *every* render.
|
|
2536
|
+
// This is harmless though, on most renders, except:
|
|
2537
|
+
// 1. The very first render, in which case we'll want to trigger the initial page fetch.
|
|
2538
|
+
// 2. All other subsequent renders now "just" return the same promise (a quick operation).
|
|
2539
|
+
// 3. If ever the promise would fail, then after 5 seconds it would reset, and on the very
|
|
2540
|
+
// *next* render after that, a *new* fetch/promise will get created.
|
|
2541
|
+
);
|
|
2542
|
+
return useSignal(store.outputs.aiChatById.getOrCreate(chatId).signal);
|
|
2543
|
+
}
|
|
2544
|
+
function useAiChatSuspense(chatId) {
|
|
2545
|
+
ensureNotServerSide();
|
|
2546
|
+
const client = useClient();
|
|
2547
|
+
const store = getUmbrellaStoreForClient(client);
|
|
2548
|
+
use(store.outputs.aiChatById.getOrCreate(chatId).waitUntilLoaded());
|
|
2549
|
+
const result = useAiChat(chatId);
|
|
2550
|
+
_core.assert.call(void 0, !result.error, "Did not expect error");
|
|
2551
|
+
_core.assert.call(void 0, !result.isLoading, "Did not expect loading");
|
|
2552
|
+
return result;
|
|
2553
|
+
}
|
|
2500
2554
|
function useCreateAiChat() {
|
|
2501
2555
|
const client = useClient();
|
|
2502
2556
|
return _react.useCallback.call(void 0,
|
|
2503
2557
|
(options) => {
|
|
2504
|
-
client[_core.kInternal].ai.
|
|
2558
|
+
client[_core.kInternal].ai.getOrCreateChat(options.id, options).catch((err) => {
|
|
2505
2559
|
console.error(
|
|
2506
2560
|
`Failed to create chat with ID "${options.id}": ${String(err)}`
|
|
2507
2561
|
);
|
|
@@ -2701,6 +2755,7 @@ var _useUserThreads_experimental = useUserThreads_experimental;
|
|
|
2701
2755
|
var _useUserThreadsSuspense_experimental = useUserThreadsSuspense_experimental;
|
|
2702
2756
|
var _useAiChats = useAiChats;
|
|
2703
2757
|
var _useAiChatsSuspense = useAiChatsSuspense;
|
|
2758
|
+
var _useAiChatSuspense = useAiChatSuspense;
|
|
2704
2759
|
var _useAiChatMessages = useAiChatMessages;
|
|
2705
2760
|
var _useAiChatMessagesSuspense = useAiChatMessagesSuspense;
|
|
2706
2761
|
function useSyncStatus_withClient(client, options) {
|
|
@@ -4620,5 +4675,6 @@ var _useUpdateMyPresence = useUpdateMyPresence;
|
|
|
4620
4675
|
|
|
4621
4676
|
|
|
4622
4677
|
|
|
4623
|
-
|
|
4624
|
-
|
|
4678
|
+
|
|
4679
|
+
exports.RoomContext = RoomContext; exports.useSyncExternalStoreWithSelector = useSyncExternalStoreWithSelector; exports.useSignal = useSignal; exports.ClientContext = ClientContext; exports.getUmbrellaStoreForClient = getUmbrellaStoreForClient; exports.useCreateAiChat = useCreateAiChat; exports.useDeleteAiChat = useDeleteAiChat; exports.useClientOrNull = useClientOrNull; exports.useClient = useClient; exports.LiveblocksProvider = LiveblocksProvider; exports.createLiveblocksContext = createLiveblocksContext; exports.useInboxNotifications = useInboxNotifications; exports.useInboxNotificationsSuspense = useInboxNotificationsSuspense; exports.useMarkAllInboxNotificationsAsRead = useMarkAllInboxNotificationsAsRead; exports.useMarkInboxNotificationAsRead = useMarkInboxNotificationAsRead; exports.useDeleteAllInboxNotifications = useDeleteAllInboxNotifications; exports.useDeleteInboxNotification = useDeleteInboxNotification; exports.useUnreadInboxNotificationsCount = useUnreadInboxNotificationsCount; exports.useUnreadInboxNotificationsCountSuspense = useUnreadInboxNotificationsCountSuspense; exports.useNotificationSettings = useNotificationSettings; exports.useNotificationSettingsSuspense = useNotificationSettingsSuspense; exports.useUpdateNotificationSettings = useUpdateNotificationSettings; exports.useRoomInfo = useRoomInfo; exports.useRoomInfoSuspense = useRoomInfoSuspense; exports._useInboxNotificationThread = _useInboxNotificationThread; exports._useUser = _useUser; exports._useUserSuspense = _useUserSuspense; exports._useUserThreads_experimental = _useUserThreads_experimental; exports._useUserThreadsSuspense_experimental = _useUserThreadsSuspense_experimental; exports._useAiChats = _useAiChats; exports._useAiChatsSuspense = _useAiChatsSuspense; exports._useAiChatSuspense = _useAiChatSuspense; exports._useAiChatMessages = _useAiChatMessages; exports._useAiChatMessagesSuspense = _useAiChatMessagesSuspense; exports.useSyncStatus = useSyncStatus; exports.useErrorListener = useErrorListener; exports.useStatus = useStatus; exports.useReportTextEditor = useReportTextEditor; exports.useYjsProvider = useYjsProvider; exports.useCreateTextMention = useCreateTextMention; exports.useDeleteTextMention = useDeleteTextMention; exports.useResolveMentionSuggestions = useResolveMentionSuggestions; exports.useMentionSuggestionsCache = useMentionSuggestionsCache; exports.useStorageStatus = useStorageStatus; exports.useBatch = useBatch; exports.useLostConnectionListener = useLostConnectionListener; exports.useHistory = useHistory; exports.useUndo = useUndo; exports.useRedo = useRedo; exports.useCanUndo = useCanUndo; exports.useCanRedo = useCanRedo; exports.useOthersConnectionIds = useOthersConnectionIds; exports.useCreateRoomThread = useCreateRoomThread; exports.useDeleteRoomThread = useDeleteRoomThread; exports.useEditRoomThreadMetadata = useEditRoomThreadMetadata; exports.useCreateComment = useCreateComment; exports.useCreateRoomComment = useCreateRoomComment; exports.useEditComment = useEditComment; exports.useEditRoomComment = useEditRoomComment; exports.useDeleteComment = useDeleteComment; exports.useDeleteRoomComment = useDeleteRoomComment; exports.useAddRoomCommentReaction = useAddRoomCommentReaction; exports.useRemoveReaction = useRemoveReaction; exports.useRemoveRoomCommentReaction = useRemoveRoomCommentReaction; exports.useMarkThreadAsRead = useMarkThreadAsRead; exports.useMarkRoomThreadAsRead = useMarkRoomThreadAsRead; exports.useMarkThreadAsResolved = useMarkThreadAsResolved; exports.useMarkRoomThreadAsResolved = useMarkRoomThreadAsResolved; exports.useMarkThreadAsUnresolved = useMarkThreadAsUnresolved; exports.useMarkRoomThreadAsUnresolved = useMarkRoomThreadAsUnresolved; exports.useSubscribeToThread = useSubscribeToThread; exports.useUnsubscribeFromThread = useUnsubscribeFromThread; exports.useThreadSubscription = useThreadSubscription; exports.useRoomThreadSubscription = useRoomThreadSubscription; exports.useHistoryVersionData = useHistoryVersionData; exports.useUpdateRoomNotificationSettings = useUpdateRoomNotificationSettings; exports.useUpdateRoomSubscriptionSettings = useUpdateRoomSubscriptionSettings; exports.useOthersConnectionIdsSuspense = useOthersConnectionIdsSuspense; exports.useStorageStatusSuspense = useStorageStatusSuspense; exports.useAttachmentUrl = useAttachmentUrl; exports.useRoomAttachmentUrl = useRoomAttachmentUrl; exports.useAttachmentUrlSuspense = useAttachmentUrlSuspense; exports.useRoomPermissions = useRoomPermissions; exports.createRoomContext = createRoomContext; exports._RoomProvider = _RoomProvider; exports._useBroadcastEvent = _useBroadcastEvent; exports._useOthersListener = _useOthersListener; exports._useRoom = _useRoom; exports._useIsInsideRoom = _useIsInsideRoom; exports._useAddReaction = _useAddReaction; exports._useMutation = _useMutation; exports._useCreateThread = _useCreateThread; exports._useDeleteThread = _useDeleteThread; exports._useEditThreadMetadata = _useEditThreadMetadata; exports._useEventListener = _useEventListener; exports._useMyPresence = _useMyPresence; exports._useOthersMapped = _useOthersMapped; exports._useOthersMappedSuspense = _useOthersMappedSuspense; exports._useThreads = _useThreads; exports._useThreadsSuspense = _useThreadsSuspense; exports._useRoomNotificationSettings = _useRoomNotificationSettings; exports._useRoomSubscriptionSettings = _useRoomSubscriptionSettings; exports._useRoomNotificationSettingsSuspense = _useRoomNotificationSettingsSuspense; exports._useRoomSubscriptionSettingsSuspense = _useRoomSubscriptionSettingsSuspense; exports._useHistoryVersions = _useHistoryVersions; exports._useHistoryVersionsSuspense = _useHistoryVersionsSuspense; exports._useOther = _useOther; exports._useOthers = _useOthers; exports._useOtherSuspense = _useOtherSuspense; exports._useOthersSuspense = _useOthersSuspense; exports._useStorage = _useStorage; exports._useStorageSuspense = _useStorageSuspense; exports._useSelf = _useSelf; exports._useSelfSuspense = _useSelfSuspense; exports._useStorageRoot = _useStorageRoot; exports._useUpdateMyPresence = _useUpdateMyPresence;
|
|
4680
|
+
//# sourceMappingURL=chunk-G2EOFP6S.cjs.map
|