@cratis/components 4.15.1 → 4.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/compat-manifest.json +11 -11
- package/dist/esm/Chat/ChatConversation.d.ts +10 -1
- package/dist/esm/Chat/ChatConversation.js +4 -3
- package/dist/esm/Chat/ChatConversation.js.map +1 -1
- package/dist/esm/Chat/ChatSidebar.d.ts +7 -2
- package/dist/esm/Chat/ChatSidebar.js +3 -3
- package/dist/esm/Chat/ChatSidebar.js.map +1 -1
- package/dist/esm/Chat/ChatSidebarForObservableQueries.d.ts +2 -2
- package/dist/esm/Chat/ChatSidebarForObservableQueries.js +60 -12
- package/dist/esm/Chat/ChatSidebarForObservableQueries.js.map +1 -1
- package/dist/esm/Chat/ChatStatus.d.ts +12 -0
- package/dist/esm/Chat/ChatStatus.d.ts.map +1 -0
- package/dist/esm/Chat/ChatStatus.js +10 -0
- package/dist/esm/Chat/ChatStatus.js.map +1 -0
- package/dist/esm/Chat/ChatTopicList.d.ts +10 -1
- package/dist/esm/Chat/ChatTopicList.js +3 -2
- package/dist/esm/Chat/ChatTopicList.js.map +1 -1
- package/dist/esm/Chat/Kit/ChatComposer.d.ts +2 -0
- package/dist/esm/Chat/Kit/ChatComposer.js +14 -7
- package/dist/esm/Chat/Kit/ChatComposer.js.map +1 -1
- package/dist/esm/Chat/index.d.ts +1 -0
- package/dist/esm/Chat/index.js +1 -0
- package/dist/esm/Chat/index.js.map +1 -1
- package/dist/esm/CommandDialog/CommandDialog.d.ts +11 -1
- package/dist/esm/CommandDialog/CommandDialog.js +12 -20
- package/dist/esm/CommandDialog/CommandDialog.js.map +1 -1
- package/dist/esm/CommandDialog/CommandStepper.d.ts +8 -1
- package/dist/esm/CommandDialog/CommandStepper.js +11 -19
- package/dist/esm/CommandDialog/CommandStepper.js.map +1 -1
- package/dist/esm/CommandDialog/CommandStepperContent.d.ts +2 -0
- package/dist/esm/CommandDialog/CommandStepperContent.js +2 -2
- package/dist/esm/CommandDialog/CommandStepperContent.js.map +1 -1
- package/dist/esm/CommandDialog/StepperCommandDialog.d.ts +8 -1
- package/dist/esm/CommandDialog/StepperCommandDialog.js +12 -19
- package/dist/esm/CommandDialog/StepperCommandDialog.js.map +1 -1
- package/dist/esm/CommandDialog/commandValuesUnchanged.d.ts +5 -0
- package/dist/esm/CommandDialog/commandValuesUnchanged.d.ts.map +1 -0
- package/dist/esm/CommandDialog/commandValuesUnchanged.js +22 -0
- package/dist/esm/CommandDialog/commandValuesUnchanged.js.map +1 -0
- package/dist/esm/CommandDialog/confirmBeforeExecute.d.ts +9 -0
- package/dist/esm/CommandDialog/confirmBeforeExecute.d.ts.map +1 -0
- package/dist/esm/CommandDialog/confirmBeforeExecute.js +12 -0
- package/dist/esm/CommandDialog/confirmBeforeExecute.js.map +1 -0
- package/dist/esm/CommandDialog/index.d.ts +1 -0
- package/dist/esm/CommandDialog/useCommandExecution.d.ts +9 -0
- package/dist/esm/CommandDialog/useCommandExecution.js +52 -0
- package/dist/esm/CommandDialog/useCommandExecution.js.map +1 -0
- package/dist/esm/CommandDialog/useSubmissionFlight.d.ts +8 -0
- package/dist/esm/CommandDialog/useSubmissionFlight.d.ts.map +1 -0
- package/dist/esm/CommandDialog/useSubmissionFlight.js +30 -0
- package/dist/esm/CommandDialog/useSubmissionFlight.js.map +1 -0
- package/dist/esm/Common/DatePickerInputImplementation.js +16 -7
- package/dist/esm/Common/DatePickerInputImplementation.js.map +1 -1
- package/dist/esm/Common/Tooltip.d.ts +3 -3
- package/dist/esm/Common/Tooltip.d.ts.map +1 -1
- package/dist/esm/Common/TooltipImplementation.js +1 -1
- package/dist/esm/Common/TooltipImplementation.js.map +1 -1
- package/dist/esm/DataTables/DataTableCore.js +1 -1
- package/dist/esm/DataTables/DataTableCore.js.map +1 -1
- package/dist/esm/DataTables/resolveDataTableStatus.d.ts +1 -0
- package/dist/esm/DataTables/resolveDataTableStatus.js +8 -8
- package/dist/esm/DataTables/resolveDataTableStatus.js.map +1 -1
- package/dist/esm/Filter/CheckboxListFilter.d.ts +5 -1
- package/dist/esm/Filter/CheckboxListFilter.js +16 -4
- package/dist/esm/Filter/CheckboxListFilter.js.map +1 -1
- package/dist/esm/Filter/FilterPanel.d.ts +5 -1
- package/dist/esm/Filter/FilterPanel.js +37 -6
- package/dist/esm/Filter/FilterPanel.js.map +1 -1
- package/dist/esm/Filter/types.d.ts +4 -0
- package/dist/esm/Filter/types.d.ts.map +1 -1
- package/dist/esm/PivotViewer/PivotViewer.d.ts +1 -1
- package/dist/esm/PivotViewer/PivotViewer.js +2 -2
- package/dist/esm/PivotViewer/PivotViewer.js.map +1 -1
- package/dist/esm/PivotViewer/PivotViewerLabels.d.ts +32 -0
- package/dist/esm/PivotViewer/PivotViewerLabels.d.ts.map +1 -0
- package/dist/esm/PivotViewer/PivotViewerLabels.js +4 -0
- package/dist/esm/PivotViewer/PivotViewerLabels.js.map +1 -0
- package/dist/esm/PivotViewer/components/FilterPanel.d.ts +6 -1
- package/dist/esm/PivotViewer/components/FilterPanel.js +3 -2
- package/dist/esm/PivotViewer/components/FilterPanel.js.map +1 -1
- package/dist/esm/PivotViewer/components/Toolbar.d.ts +3 -1
- package/dist/esm/PivotViewer/components/Toolbar.js +2 -3
- package/dist/esm/PivotViewer/components/Toolbar.js.map +1 -1
- package/dist/esm/PivotViewer/index.d.ts +1 -0
- package/dist/esm/PivotViewer/types.d.ts +4 -1
- package/dist/esm/PivotViewer/types.js.map +1 -1
- package/dist/esm/QueryStatus/QueryStatus.d.ts +8 -0
- package/dist/esm/QueryStatus/QueryStatus.d.ts.map +1 -0
- package/dist/esm/QueryStatus/QueryStatus.js +10 -0
- package/dist/esm/QueryStatus/QueryStatus.js.map +1 -0
- package/dist/esm/QueryStatus/resolveQueryStatus.d.ts +9 -0
- package/dist/esm/QueryStatus/resolveQueryStatus.js +14 -0
- package/dist/esm/QueryStatus/resolveQueryStatus.js.map +1 -0
- package/dist/esm/styles.Canvas.css +10 -3
- package/dist/esm/styles.Chat.css +10 -3
- package/dist/esm/styles.css +10 -3
- package/dist/esm/types/parts.d.ts +2 -2
- package/dist/esm/types/parts.js +2 -2
- package/dist/esm/types/parts.js.map +1 -1
- package/package.json +1 -1
package/compat-manifest.json
CHANGED
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
{
|
|
69
69
|
"name": "@cratis/components",
|
|
70
70
|
"role": "core",
|
|
71
|
-
"version": "4.
|
|
71
|
+
"version": "4.16.0",
|
|
72
72
|
"releaseMajorRange": ">=4 <5",
|
|
73
73
|
"independentRelease": false,
|
|
74
74
|
"private": false,
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
{
|
|
93
93
|
"name": "@cratis/eslint-plugin-components",
|
|
94
94
|
"role": "eslint",
|
|
95
|
-
"version": "4.
|
|
95
|
+
"version": "4.16.0",
|
|
96
96
|
"releaseMajorRange": ">=4 <5",
|
|
97
97
|
"independentRelease": false,
|
|
98
98
|
"private": false,
|
|
@@ -105,7 +105,7 @@
|
|
|
105
105
|
{
|
|
106
106
|
"name": "@cratis/components.migrator",
|
|
107
107
|
"role": "migrator",
|
|
108
|
-
"version": "4.
|
|
108
|
+
"version": "4.16.0",
|
|
109
109
|
"releaseMajorRange": ">=4 <5",
|
|
110
110
|
"independentRelease": false,
|
|
111
111
|
"private": false,
|
|
@@ -116,13 +116,13 @@
|
|
|
116
116
|
{
|
|
117
117
|
"name": "@cratis/components.conformance",
|
|
118
118
|
"role": "conformance",
|
|
119
|
-
"version": "4.
|
|
119
|
+
"version": "4.16.0",
|
|
120
120
|
"releaseMajorRange": ">=4 <5",
|
|
121
121
|
"independentRelease": false,
|
|
122
122
|
"private": false,
|
|
123
123
|
"packageAccess": "public",
|
|
124
124
|
"peerDependencies": {
|
|
125
|
-
"@cratis/components": "4.
|
|
125
|
+
"@cratis/components": "4.16.0",
|
|
126
126
|
"react": "^19.0.0",
|
|
127
127
|
"react-dom": "^19.0.0"
|
|
128
128
|
},
|
|
@@ -132,13 +132,13 @@
|
|
|
132
132
|
{
|
|
133
133
|
"name": "@cratis/components.mui",
|
|
134
134
|
"role": "renderer-adapter",
|
|
135
|
-
"version": "4.
|
|
135
|
+
"version": "4.16.0",
|
|
136
136
|
"releaseMajorRange": ">=4 <5",
|
|
137
137
|
"independentRelease": false,
|
|
138
138
|
"private": false,
|
|
139
139
|
"packageAccess": "public",
|
|
140
140
|
"peerDependencies": {
|
|
141
|
-
"@cratis/components": "4.
|
|
141
|
+
"@cratis/components": "4.16.0",
|
|
142
142
|
"@emotion/react": ">=11.5 <12",
|
|
143
143
|
"@emotion/styled": ">=11.11 <12",
|
|
144
144
|
"@mui/material": ">=9 <10",
|
|
@@ -188,13 +188,13 @@
|
|
|
188
188
|
{
|
|
189
189
|
"name": "@cratis/components.primereact",
|
|
190
190
|
"role": "renderer-adapter",
|
|
191
|
-
"version": "4.
|
|
191
|
+
"version": "4.16.0",
|
|
192
192
|
"releaseMajorRange": ">=4 <5",
|
|
193
193
|
"independentRelease": false,
|
|
194
194
|
"private": false,
|
|
195
195
|
"packageAccess": "public",
|
|
196
196
|
"peerDependencies": {
|
|
197
|
-
"@cratis/components": "4.
|
|
197
|
+
"@cratis/components": "4.16.0",
|
|
198
198
|
"@primereact/core": ">=11 <12",
|
|
199
199
|
"@primereact/ui": ">=11 <12",
|
|
200
200
|
"@primeuix/themes": ">=3 <4",
|
|
@@ -256,13 +256,13 @@
|
|
|
256
256
|
{
|
|
257
257
|
"name": "@cratis/components.primereact10",
|
|
258
258
|
"role": "renderer-adapter",
|
|
259
|
-
"version": "4.
|
|
259
|
+
"version": "4.16.0",
|
|
260
260
|
"releaseMajorRange": ">=4 <5",
|
|
261
261
|
"independentRelease": false,
|
|
262
262
|
"private": false,
|
|
263
263
|
"packageAccess": "public",
|
|
264
264
|
"peerDependencies": {
|
|
265
|
-
"@cratis/components": "4.
|
|
265
|
+
"@cratis/components": "4.16.0",
|
|
266
266
|
"primereact": ">=10.9.9 <11",
|
|
267
267
|
"react": "^19.0.0",
|
|
268
268
|
"react-dom": "^19.0.0"
|
|
@@ -7,12 +7,19 @@ import type { ChatAuthor } from './ChatAuthor.js';
|
|
|
7
7
|
import { type ChatIdentifier } from './ChatIdentifier.js';
|
|
8
8
|
import type { ChatMention } from './ChatMention.js';
|
|
9
9
|
import type { ChatMessage } from './ChatMessage.js';
|
|
10
|
+
import { ChatStatus } from './ChatStatus.js';
|
|
10
11
|
import type { ChatMessageAction } from './ChatMessageAction.js';
|
|
11
12
|
import { type RelativeTimestampLabels } from './relativeTimestamp.js';
|
|
12
13
|
/** Overrides for every label the {@link ChatConversation} renders. Any field left unset falls
|
|
13
14
|
* back to a literal English default — this library ships no i18n mechanism of its own, so a host
|
|
14
15
|
* that localizes passes its own translated strings through here. */
|
|
15
16
|
export interface ChatConversationLabels {
|
|
17
|
+
/** Shown while loading without messages. Defaults to `'Loading messages…'`. */
|
|
18
|
+
loading?: string;
|
|
19
|
+
/** Shown when loading messages fails, alongside any existing messages. Defaults to `'Could not load messages.'`. */
|
|
20
|
+
failed?: string;
|
|
21
|
+
/** Shown when access is denied; replaces any existing messages. Defaults to `'You are not authorized to view these messages.'`. */
|
|
22
|
+
unauthorized?: string;
|
|
16
23
|
/** Shown when there are no messages yet. Defaults to `'No messages yet. Say hello!'`. */
|
|
17
24
|
empty?: string;
|
|
18
25
|
/** One author typing. `{name}` is substituted. Defaults to `'{name} is typing'`. */
|
|
@@ -38,6 +45,8 @@ export interface ChatConversationProps<TMessage extends ChatMessage = ChatMessag
|
|
|
38
45
|
* (observable) query delivers and the conversation re-renders as it changes.
|
|
39
46
|
*/
|
|
40
47
|
messages: TMessage[];
|
|
48
|
+
/** Query display state. Defaults to {@link ChatStatus.Ready}; existing messages remain visible on loading or failure, and unauthorized disables the composer. */
|
|
49
|
+
status?: ChatStatus;
|
|
41
50
|
/**
|
|
42
51
|
* Invoked when a message is sent, with the trimmed body and who it mentions. Everything else
|
|
43
52
|
* about persisting the message is the host's business.
|
|
@@ -102,4 +111,4 @@ export interface ChatConversationProps<TMessage extends ChatMessage = ChatMessag
|
|
|
102
111
|
* {@link ChatConversationProps.onSendMessage | onSendMessage} without any opinion about the
|
|
103
112
|
* backend behind it. Mentions and the emoji picker come along through the composer.
|
|
104
113
|
*/
|
|
105
|
-
export declare const ChatConversation: <TMessage extends ChatMessage = ChatMessage>({ messages, onSendMessage, authorOf, renderAvatar, renderAuthorName, actions, mentionCandidates, resolveMentionCandidates, typingAuthors, quickReply, buildAvatarUrl, autoFocus, labels, className, }: ChatConversationProps<TMessage>) => import("react").JSX.Element;
|
|
114
|
+
export declare const ChatConversation: <TMessage extends ChatMessage = ChatMessage>({ messages, status, onSendMessage, authorOf, renderAvatar, renderAuthorName, actions, mentionCandidates, resolveMentionCandidates, typingAuthors, quickReply, buildAvatarUrl, autoFocus, labels, className, }: ChatConversationProps<TMessage>) => import("react").JSX.Element;
|
|
@@ -5,6 +5,7 @@ import { ChatAuthorKind } from './Kit/ChatAuthorKind.js';
|
|
|
5
5
|
import { ChatComposer } from './Kit/ChatComposer.js';
|
|
6
6
|
import { TypingIndicator } from './Kit/TypingIndicator.js';
|
|
7
7
|
import { chatIdentifierString } from './ChatIdentifier.js';
|
|
8
|
+
import { ChatStatus } from './ChatStatus.js';
|
|
8
9
|
import { ChatMessageBody } from './ChatMessageBody.js';
|
|
9
10
|
import { relativeTimestamp } from './relativeTimestamp.js';
|
|
10
11
|
|
|
@@ -38,7 +39,7 @@ const typingLabel = (authors, labels) => {
|
|
|
38
39
|
.replace('{second}', authors[1].name);
|
|
39
40
|
return labels?.typingSeveral ?? 'Several people are typing';
|
|
40
41
|
};
|
|
41
|
-
const ChatConversation = ({ messages, onSendMessage, authorOf, renderAvatar, renderAuthorName, actions, mentionCandidates, resolveMentionCandidates, typingAuthors = [], quickReply = true, buildAvatarUrl, autoFocus = false, labels, className, }) => {
|
|
42
|
+
const ChatConversation = ({ messages, status = ChatStatus.Ready, onSendMessage, authorOf, renderAvatar, renderAuthorName, actions, mentionCandidates, resolveMentionCandidates, typingAuthors = [], quickReply = true, buildAvatarUrl, autoFocus = false, labels, className, }) => {
|
|
42
43
|
const composerRef = useRef(null);
|
|
43
44
|
const messagesEndRef = useRef(null);
|
|
44
45
|
const renderInfo = useMemo(() => computeRenderInfo(messages), [messages]);
|
|
@@ -55,7 +56,7 @@ const ChatConversation = ({ messages, onSendMessage, authorOf, renderAvatar, ren
|
|
|
55
56
|
kind: candidate.kind,
|
|
56
57
|
})));
|
|
57
58
|
const quickReplyTo = (name) => composerRef.current?.prefill(`@${name} `);
|
|
58
|
-
return (jsxs("div", { className: `cratis-chat-conversation${className ? ` ${className}` : ''}`, children: [jsxs("div", { className: 'cratis-chat-conversation__messages', children: [messages.length === 0 && (jsx("p", { className: 'cratis-chat-conversation__empty', children: labels?.empty ?? 'No messages yet. Say hello!' })), messages.map((message, index) => {
|
|
59
|
+
return (jsxs("div", { className: `cratis-chat-conversation${className ? ` ${className}` : ''}`, children: [jsxs("div", { className: 'cratis-chat-conversation__messages', "aria-busy": status === ChatStatus.Loading && messages.length > 0 || undefined, children: [(messages.length === 0 || status === ChatStatus.Failed || status === ChatStatus.Unauthorized) && (jsx("p", { className: 'cratis-chat-conversation__empty', children: status === ChatStatus.Loading ? (jsx("span", { role: 'status', children: labels?.loading ?? 'Loading messages…' }, status)) : status === ChatStatus.Failed ? (jsx("span", { role: 'alert', children: labels?.failed ?? 'Could not load messages.' }, status)) : status === ChatStatus.Unauthorized ? (jsx("span", { role: 'alert', children: labels?.unauthorized ?? 'You are not authorized to view these messages.' }, status)) : (labels?.empty ?? 'No messages yet. Say hello!') })), status !== ChatStatus.Unauthorized && messages.map((message, index) => {
|
|
59
60
|
const author = authorFor(message.authorId);
|
|
60
61
|
const { showAuthor, showTimestamp } = renderInfo[index];
|
|
61
62
|
const availableActions = (actions ?? []).filter((action) => action.isAvailable?.(message) ?? true);
|
|
@@ -67,7 +68,7 @@ const ChatConversation = ({ messages, onSendMessage, authorOf, renderAvatar, ren
|
|
|
67
68
|
: author.name })] })), jsxs("div", { className: 'cratis-chat-message__content', children: [jsxs("div", { className: `cratis-chat-message__panel${showActionsRow ? ' cratis-chat-message__panel--with-actions' : ''}`, children: [jsx(ChatMessageBody, { body: message.body, mentions: message.mentions }), showActionsRow && (jsxs("div", { className: 'cratis-chat-message__actions', children: [quickReply && (jsx("button", { type: 'button', className: 'cratis-chat-message__action', title: (labels?.quickReplyTo ??
|
|
68
69
|
'Reply to {name}').replace('{name}', author.name), "aria-label": (labels?.quickReplyTo ??
|
|
69
70
|
'Reply to {name}').replace('{name}', author.name), onClick: () => quickReplyTo(author.name), children: jsx(ReplyIcon, {}) })), availableActions.map((action) => (jsx("button", { type: 'button', className: 'cratis-chat-message__action', title: action.label, "aria-label": action.label, onClick: () => action.onInvoke(message), children: typeof action.icon === 'string' ? (jsx("i", { className: action.icon, "aria-hidden": 'true' })) : (action.icon) }, action.id)))] }))] }), showTimestamp && (jsx("span", { className: 'cratis-chat-message__time', children: relativeTimestamp(timestampOf(message), new Date(), labels?.timestamps) }))] })] }, chatIdentifierString(message.id)));
|
|
70
|
-
}), jsx(TypingIndicator, { authors: typingAuthors, label: typingLabel(typingAuthors, labels), buildAvatarUrl: buildAvatarUrl }), jsx("div", { ref: messagesEndRef })] }), jsx(ChatComposer, { ref: composerRef, mentionCandidates: mentionCandidates, resolveMentionCandidates: resolveMentionCandidates, onSend: send, autoFocus: autoFocus, buildAvatarUrl: buildAvatarUrl, labels: labels?.composer })] }));
|
|
71
|
+
}), status !== ChatStatus.Unauthorized && (jsx(TypingIndicator, { authors: typingAuthors, label: typingLabel(typingAuthors, labels), buildAvatarUrl: buildAvatarUrl })), jsx("div", { ref: messagesEndRef })] }), jsx(ChatComposer, { ref: composerRef, mentionCandidates: mentionCandidates, resolveMentionCandidates: resolveMentionCandidates, onSend: send, disabled: status === ChatStatus.Unauthorized, autoFocus: autoFocus, buildAvatarUrl: buildAvatarUrl, labels: labels?.composer })] }));
|
|
71
72
|
};
|
|
72
73
|
|
|
73
74
|
export { ChatConversation };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatConversation.js","sources":["../../../Chat/ChatConversation.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatConversation.js","sources":["../../../Chat/ChatConversation.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;;AAuBA,MAAM,SAAS,GAAG,OACdA,IAAA,CAAA,KAAA,EAAA,EACI,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EAAA,aAAA,EACL,MAAM,aAElBC,GAAA,CAAA,UAAA,EAAA,EAAU,MAAM,EAAC,eAAe,EAAA,CAAG,EACnCA,GAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,0BAA0B,EAAA,CAAG,CAAA,EAAA,CACnC,CACT;AA0HD,MAAM,WAAW,GAAG,CAAC,OAAoB,KACrC,OAAO,CAAC,SAAS,YAAY,IAAI,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;AAEvF,MAAM,UAAU,GAAG,CAAC,IAAU,EAAE,KAAW,KACvC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE;AAC1C,IAAA,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,QAAQ,EAAE;AACpC,IAAA,IAAI,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,OAAO,EAAE;AAClC,IAAA,IAAI,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,QAAQ,EAAE;IACpC,IAAI,CAAC,UAAU,EAAE,KAAK,KAAK,CAAC,UAAU,EAAE;AAU5C,MAAM,iBAAiB,GAAG,CAAC,QAAuB,KAC9C,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,KAAI;AAC5B,IAAA,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS;IAC5D,MAAM,IAAI,GAAG,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS;IAE1E,MAAM,UAAU,GACZ,CAAC,QAAQ;AACT,QAAA,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnC,YAAA,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC;IAC9C,MAAM,aAAa,GACf,CAAC,IAAI;AACL,QAAA,oBAAoB,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC/B,YAAA,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC;AAC1C,QAAA,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;AAExD,IAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE;AACxC,CAAC,CAAC;AAQN,MAAM,WAAW,GAAG,CAChB,OAA2B,EAC3B,MAA0C,KAClC;AACR,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,EAAE;AACnC,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,QAAA,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,kBAAkB,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACpF,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,QAAA,OAAO,CAAC,MAAM,EAAE,SAAS,IAAI,iCAAiC;aACzD,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI;aAClC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7C,IAAA,OAAO,MAAM,EAAE,aAAa,IAAI,2BAA2B;AAC/D,CAAC;MAWY,gBAAgB,GAAG,CAA6C,EACzE,QAAQ,EACR,MAAM,GAAG,UAAU,CAAC,KAAK,EACzB,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,gBAAgB,EAChB,OAAO,EACP,iBAAiB,EACjB,wBAAwB,EACxB,aAAa,GAAG,EAAE,EAClB,UAAU,GAAG,IAAI,EACjB,cAAc,EACd,SAAS,GAAG,KAAK,EACjB,MAAM,EACN,SAAS,GACqB,KAAI;AAClC,IAAA,MAAM,WAAW,GAAG,MAAM,CAAqB,IAAI,CAAC;AACpD,IAAA,MAAM,cAAc,GAAG,MAAM,CAAiB,IAAI,CAAC;AACnD,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC;IAEzE,SAAS,CAAC,MAAK;AACX,QAAA,cAAc,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IACpF,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;AAEpC,IAAA,MAAM,SAAS,GAAG,CAAC,QAAwB,KACvC,QAAQ,GAAG,QAAQ,CAAC,IAAI;AACpB,QAAA,IAAI,EAAE,oBAAoB,CAAC,QAAQ,CAAC;QACpC,IAAI,EAAE,cAAc,CAAC,IAAI;KAC5B;IAEL,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,SAA6B,KACrD,aAAa,CACT,IAAI,EACJ,SAAS,CAAC,GAAG,CACT,CAAC,SAAS,MACL;QACG,EAAE,EAAE,SAAS,CAAC,EAAE;QAChB,IAAI,EAAE,SAAS,CAAC,IAAI;QACpB,IAAI,EAAE,SAAS,CAAC,IAAI;KACvB,CAAuB,CAC/B,CACJ;AAEL,IAAA,MAAM,YAAY,GAAG,CAAC,IAAY,KAAK,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,CAAA,CAAA,CAAG,CAAC;AAEhF,IAAA,QACID,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAE,CAAA,wBAAA,EAA2B,SAAS,GAAG,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,GAAG,EAAE,EAAE,EAAA,QAAA,EAAA,CACzEA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,oCAAoC,EAAA,WAAA,EAAY,MAAM,KAAK,UAAU,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,EAAA,QAAA,EAAA,CAC3H,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,KAAK,UAAU,CAAC,MAAM,IAAI,MAAM,KAAK,UAAU,CAAC,YAAY,MACzFC,WAAG,SAAS,EAAC,iCAAiC,EAAA,QAAA,EACzC,MAAM,KAAK,UAAU,CAAC,OAAO,IAC1BA,GAAA,CAAA,MAAA,EAAA,EAAmB,IAAI,EAAC,QAAQ,EAAA,QAAA,EAAE,MAAM,EAAE,OAAO,IAAI,mBAAmB,EAAA,EAA7D,MAAM,CAA+D,IAChF,MAAM,KAAK,UAAU,CAAC,MAAM,IAC5BA,cAAmB,IAAI,EAAC,OAAO,EAAA,QAAA,EAAE,MAAM,EAAE,MAAM,IAAI,0BAA0B,EAAA,EAAlE,MAAM,CAAoE,IACrF,MAAM,KAAK,UAAU,CAAC,YAAY,IAClCA,GAAA,CAAA,MAAA,EAAA,EAAmB,IAAI,EAAC,OAAO,EAAA,QAAA,EAAE,MAAM,EAAE,YAAY,IAAI,gDAAgD,EAAA,EAA9F,MAAM,CAAgG,KAEjH,MAAM,EAAE,KAAK,IAAI,6BAA6B,CACjD,GACD,CACP,EACA,MAAM,KAAK,UAAU,CAAC,YAAY,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,KAAK,KAAI;wBACnE,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;wBAC1C,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC;wBACvD,MAAM,gBAAgB,GAAG,CAAC,OAAO,IAAI,EAAE,EAAE,MAAM,CAC3C,CAAC,MAAM,KAAK,MAAM,CAAC,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,CACpD;wBACD,MAAM,cAAc,GAAG,UAAU,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC;AAEhE,wBAAA,QACID,IAAA,CAAA,KAAA,EAAA,EAEI,SAAS,EAAE,CAAA,mBAAA,EAAsB,UAAU,GAAG,EAAE,GAAG,oCAAoC,CAAA,CAAE,EAAA,QAAA,EAAA,CAExF,UAAU,KACPA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,CACvC,YAAY,IACT,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,KAEtCC,IAAC,kBAAkB,EAAA,EACf,MAAM,EAAE,oBAAoB,CACxB,OAAO,CAAC,QAAQ,CACnB,EACD,IAAI,EAAE,MAAM,CAAC,IAAI,EACjB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK,EACpC,IAAI,EAAE,EAAE,EACR,SAAS,EACL,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC;AAC3B,kDAAE;kDACA,OAAO,EAEjB,OAAO,EAAE,MAAM,CAAC,aAAa,EAC7B,cAAc,EAAE,cAAc,EAAA,CAChC,CACL,EACDA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,kCAAkC,YAC7C;kDACK,gBAAgB,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM;AAC3C,kDAAE,MAAM,CAAC,IAAI,GACd,CAAA,EAAA,CACL,CACT,EACDD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,8BAA8B,EAAA,QAAA,EAAA,CACzCA,cACI,SAAS,EAAE,CAAA,0BAAA,EAA6B,cAAc,GAAG,2CAA2C,GAAG,EAAE,CAAA,CAAE,EAAA,QAAA,EAAA,CAE3GC,GAAA,CAAC,eAAe,EAAA,EACZ,IAAI,EAAE,OAAO,CAAC,IAAI,EAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAA,CAC5B,EACD,cAAc,KACXD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,8BAA8B,EAAA,QAAA,EAAA,CACxC,UAAU,KACPC,GAAA,CAAA,QAAA,EAAA,EACI,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,6BAA6B,EACvC,KAAK,EAAE,CACH,MAAM,EAAE,YAAY;AACpB,gEAAA,iBAAiB,EACnB,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,EAAA,YAAA,EACpB,CACR,MAAM,EAAE,YAAY;AACpB,gEAAA,iBAAiB,EACnB,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,EAChC,OAAO,EAAE,MACL,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,YAG7BA,GAAA,CAAC,SAAS,EAAA,EAAA,CAAG,EAAA,CACR,CACZ,EACA,gBAAgB,CAAC,GAAG,CAAC,CAAC,MAAM,MACzBA,GAAA,CAAA,QAAA,EAAA,EAEI,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,6BAA6B,EACvC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAA,YAAA,EACP,MAAM,CAAC,KAAK,EACxB,OAAO,EAAE,MACL,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAG3B,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAC5BA,GAAA,CAAA,GAAA,EAAA,EACI,SAAS,EAAE,MAAM,CAAC,IAAI,EAAA,aAAA,EACV,MAAM,EAAA,CACpB,KAEF,MAAM,CAAC,IAAI,CACd,EAAA,EAhBI,MAAM,CAAC,EAAE,CAiBT,CACZ,CAAC,CAAA,EAAA,CACA,CACT,CAAA,EAAA,CACC,EACL,aAAa,KACVA,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,2BAA2B,EAAA,QAAA,EACtC,iBAAiB,CACd,WAAW,CAAC,OAAO,CAAC,EACpB,IAAI,IAAI,EAAE,EACV,MAAM,EAAE,UAAU,CACrB,EAAA,CACE,CACV,CAAA,EAAA,CACC,CAAA,EAAA,EA7FD,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,CA8FnC;AAEd,oBAAA,CAAC,CAAC,EACD,MAAM,KAAK,UAAU,CAAC,YAAY,KAC/BA,GAAA,CAAC,eAAe,EAAA,EACZ,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,EACzC,cAAc,EAAE,cAAc,EAAA,CAChC,CACL,EACDA,aAAK,GAAG,EAAE,cAAc,EAAA,CAAI,CAAA,EAAA,CAC1B,EAENA,GAAA,CAAC,YAAY,EAAA,EACT,GAAG,EAAE,WAAW,EAChB,iBAAiB,EAAE,iBAAiB,EACpC,wBAAwB,EAAE,wBAAwB,EAClD,MAAM,EAAE,IAAI,EACZ,QAAQ,EAAE,MAAM,KAAK,UAAU,CAAC,YAAY,EAC5C,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,cAAc,EAC9B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAA,CAC1B,CAAA,EAAA,CACA;AAEd;;"}
|
|
@@ -4,6 +4,7 @@ import { type ChatIdentifier } from './ChatIdentifier.js';
|
|
|
4
4
|
import type { ChatMention } from './ChatMention.js';
|
|
5
5
|
import type { ChatMessage } from './ChatMessage.js';
|
|
6
6
|
import type { ChatTopic } from './ChatTopic.js';
|
|
7
|
+
import type { ChatStatus } from './ChatStatus.js';
|
|
7
8
|
import type { ChatTopicListLabels } from './ChatTopicList.js';
|
|
8
9
|
type ChatSidebarPartAttributes<TElement> = HTMLAttributes<TElement> & {
|
|
9
10
|
[attribute: `data-${string}`]: string | number | boolean | undefined;
|
|
@@ -47,7 +48,7 @@ export interface ChatSidebarLabels {
|
|
|
47
48
|
* @typeParam TMessage The host's message type — anything extending {@link ChatMessage}.
|
|
48
49
|
* @typeParam TTopic The host's topic type — anything extending {@link ChatTopic}.
|
|
49
50
|
*/
|
|
50
|
-
export interface ChatSidebarProps<TMessage extends ChatMessage = ChatMessage, TTopic extends ChatTopic = ChatTopic> extends Omit<ChatConversationProps<TMessage>, 'messages' | 'onSendMessage' | 'labels' | 'className'> {
|
|
51
|
+
export interface ChatSidebarProps<TMessage extends ChatMessage = ChatMessage, TTopic extends ChatTopic = ChatTopic> extends Omit<ChatConversationProps<TMessage>, 'messages' | 'onSendMessage' | 'labels' | 'className' | 'status'> {
|
|
51
52
|
/** Whether the sidebar is open. */
|
|
52
53
|
open: boolean;
|
|
53
54
|
/** Invoked when the sidebar asks to close — the host owns {@link open}, so closing means the host flips it. */
|
|
@@ -63,6 +64,10 @@ export interface ChatSidebarProps<TMessage extends ChatMessage = ChatMessage, TT
|
|
|
63
64
|
* (observable) query delivers and the conversation re-renders as it changes.
|
|
64
65
|
*/
|
|
65
66
|
messages: TMessage[];
|
|
67
|
+
/** Topic-list query display state. Defaults to ready when omitted. */
|
|
68
|
+
topicsStatus?: ChatStatus;
|
|
69
|
+
/** Conversation query display state. Defaults to ready when omitted. */
|
|
70
|
+
messagesStatus?: ChatStatus;
|
|
66
71
|
/**
|
|
67
72
|
* The open topic, for hosts that own the selection themselves: an identifier opens that
|
|
68
73
|
* topic's conversation, `null` shows the topic list, and leaving the prop unset lets the
|
|
@@ -133,5 +138,5 @@ export interface ChatSidebarProps<TMessage extends ChatMessage = ChatMessage, TT
|
|
|
133
138
|
* a name through {@link ChatSidebarProps.onRequestTopicName | onRequestTopicName} — rendering a
|
|
134
139
|
* pending placeholder until the name arrives.
|
|
135
140
|
*/
|
|
136
|
-
export declare const ChatSidebar: <TMessage extends ChatMessage = ChatMessage, TTopic extends ChatTopic = ChatTopic>({ open, onClose, topics, messages, selectedTopicId, onTopicSelected, onStartTopic, onSendMessage, onRequestTopicName, isTopicUnnamed, position, width, modal, labels, className, pt, ...conversation }: ChatSidebarProps<TMessage, TTopic>) => false | import("react").JSX.Element | null;
|
|
141
|
+
export declare const ChatSidebar: <TMessage extends ChatMessage = ChatMessage, TTopic extends ChatTopic = ChatTopic>({ open, onClose, topics, messages, topicsStatus, messagesStatus, selectedTopicId, onTopicSelected, onStartTopic, onSendMessage, onRequestTopicName, isTopicUnnamed, position, width, modal, labels, className, pt, ...conversation }: ChatSidebarProps<TMessage, TTopic>) => false | import("react").JSX.Element | null;
|
|
137
142
|
export {};
|
|
@@ -12,7 +12,7 @@ import { unstable_useOverlayEnvironment } from '../renderer/RendererContext.js';
|
|
|
12
12
|
|
|
13
13
|
const classNames = (...values) => values.filter(Boolean).join(' ');
|
|
14
14
|
const BackIcon = () => (jsxs("svg", { width: '14', height: '14', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', strokeWidth: '2.5', "aria-hidden": 'true', children: [jsx("line", { x1: '19', y1: '12', x2: '5', y2: '12' }), jsx("polyline", { points: '12 19 5 12 12 5' })] }));
|
|
15
|
-
const ChatSidebar = ({ open, onClose, topics, messages, selectedTopicId, onTopicSelected, onStartTopic, onSendMessage, onRequestTopicName, isTopicUnnamed: isTopicUnnamed$1, position = 'right', width = '24rem', modal = false, labels, className, pt, ...conversation }) => {
|
|
15
|
+
const ChatSidebar = ({ open, onClose, topics, messages, topicsStatus, messagesStatus, selectedTopicId, onTopicSelected, onStartTopic, onSendMessage, onRequestTopicName, isTopicUnnamed: isTopicUnnamed$1, position = 'right', width = '24rem', modal = false, labels, className, pt, ...conversation }) => {
|
|
16
16
|
const icon = useCratisIcon();
|
|
17
17
|
const overlayEnvironment = unstable_useOverlayEnvironment();
|
|
18
18
|
const [mounted, setMounted] = useState(false);
|
|
@@ -82,14 +82,14 @@ const ChatSidebar = ({ open, onClose, topics, messages, selectedTopicId, onTopic
|
|
|
82
82
|
const titleIsPending = openTopicId !== undefined && (!openTopic || unnamed(openTopic));
|
|
83
83
|
const panel = (jsxs(Fragment, { children: [jsxs("header", { ...pt?.header, className: classNames('cratis-chat-sidebar__header', pt?.header?.className), "data-cratis-part": 'header', children: [openTopicId !== undefined && (jsx("button", { ...pt?.back, type: 'button', className: classNames('cratis-chat-sidebar__back', pt?.back?.className), "data-cratis-part": 'back', title: labels?.back ?? 'Back to topics', "aria-label": labels?.back ?? 'Back to topics', onClick: () => select(undefined), children: jsx(BackIcon, {}) })), jsx("h2", { ...pt?.title, className: classNames('cratis-chat-sidebar__title', titleIsPending
|
|
84
84
|
? 'cratis-chat-sidebar__title--pending'
|
|
85
|
-
: undefined, pt?.title?.className), "data-cratis-part": 'title', children: title }), jsx("button", { ...pt?.close, type: 'button', className: classNames('cratis-chat-sidebar__close', pt?.close?.className), "data-cratis-part": 'close', "aria-label": labels?.close ?? 'Close chat', onClick: onClose, children: jsx("span", { "aria-hidden": 'true', children: icon('close', '×') }) })] }), jsx("div", { ...pt?.content, className: classNames('cratis-chat-sidebar__content', pt?.content?.className), "data-cratis-part": 'content', children: openTopicId === undefined ? (jsx(ChatTopicList, { topics: topics, onOpen: (topic) => select(topic.id, topic), onStart: onStartTopic
|
|
85
|
+
: undefined, pt?.title?.className), "data-cratis-part": 'title', children: title }), jsx("button", { ...pt?.close, type: 'button', className: classNames('cratis-chat-sidebar__close', pt?.close?.className), "data-cratis-part": 'close', "aria-label": labels?.close ?? 'Close chat', onClick: onClose, children: jsx("span", { "aria-hidden": 'true', children: icon('close', '×') }) })] }), jsx("div", { ...pt?.content, className: classNames('cratis-chat-sidebar__content', pt?.content?.className), "data-cratis-part": 'content', children: openTopicId === undefined ? (jsx(ChatTopicList, { topics: topics, status: topicsStatus, onOpen: (topic) => select(topic.id, topic), onStart: onStartTopic
|
|
86
86
|
? () => {
|
|
87
87
|
void startTopic();
|
|
88
88
|
}
|
|
89
89
|
: undefined, authorOf: conversation.authorOf, renderAvatar: conversation.renderAvatar, isTopicUnnamed: isTopicUnnamed$1, buildAvatarUrl: conversation.buildAvatarUrl, labels: {
|
|
90
90
|
unnamedTopic: labels?.unnamedTopic,
|
|
91
91
|
...labels?.topicList,
|
|
92
|
-
} })) : (jsx(ChatConversation, { ...conversation, messages: openMessages, onSendMessage: send, labels: labels?.conversation })) })] }));
|
|
92
|
+
} })) : (jsx(ChatConversation, { ...conversation, messages: openMessages, status: messagesStatus, onSendMessage: send, labels: labels?.conversation })) })] }));
|
|
93
93
|
return modal ? (jsx(ModalOverlay, { ...pt?.backdrop, isOpen: open, onOpenChange: (openState) => {
|
|
94
94
|
if (!openState)
|
|
95
95
|
onClose();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatSidebar.js","sources":["../../../Chat/ChatSidebar.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx","isTopicUnnamed","defaultIsTopicUnnamed","_Fragment"],"mappings":";;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"ChatSidebar.js","sources":["../../../Chat/ChatSidebar.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx","isTopicUnnamed","defaultIsTopicUnnamed","_Fragment"],"mappings":";;;;;;;;;;;;AA+LA,MAAM,UAAU,GAAG,CAAC,GAAG,MAAiC,KACpD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AAEpC,MAAM,QAAQ,GAAG,OACbA,IAAA,CAAA,KAAA,EAAA,EACI,KAAK,EAAC,IAAI,EACV,MAAM,EAAC,IAAI,EACX,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,KAAK,EAAA,aAAA,EACL,MAAM,EAAA,QAAA,EAAA,CAElBC,GAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAA,CAAG,EACvCA,GAAA,CAAA,UAAA,EAAA,EAAU,MAAM,EAAC,iBAAiB,EAAA,CAAG,CAAA,EAAA,CACnC,CACT;AAYM,MAAM,WAAW,GAAG,CAGzB,EACE,IAAI,EACJ,OAAO,EACP,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,YAAY,EACZ,aAAa,EACb,kBAAkB,kBAClBC,gBAAc,EACd,QAAQ,GAAG,OAAO,EAClB,KAAK,GAAG,OAAO,EACf,KAAK,GAAG,KAAK,EACb,MAAM,EACN,SAAS,EACT,EAAE,EACF,GAAG,YAAY,EACkB,KAAI;AACrC,IAAA,MAAM,IAAI,GAAG,aAAa,EAAE;AAC5B,IAAA,MAAM,kBAAkB,GAAG,8BAA8B,EAAE;IAC3D,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AAC7C,IAAA,MAAM,aAAa,GAAG,MAAM,CAAiB,IAAI,CAAC;IAClD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAEhD,QAAQ,CAAC;IAEX,SAAS,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;IACrC,SAAS,CAAC,MAAK;QACX,gBAAgB,CAAC,CAAC,KAAK,KACnB,IAAI,GAAG,UAAU,GAAG,KAAK,KAAK,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAChE;AACL,IAAA,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IACV,MAAM,eAAe,GAAG,CAAC,KAAK,IAAI,OAAO,IAAI,aAAa,KAAK;AAC3D,UAAE,kBAAkB,CAAC,YAAY;UAC/B,IAAI;IACV,SAAS,CAAC,MAAK;AACX,QAAA,IAAI,aAAa,KAAK,UAAU,IAAI,aAAa,KAAK,SAAS;YAAE;AACjE,QAAA,IAAI,CAAC,KAAK,KACN,MAAM,CAAC,UAAU,GAAG,kCAAkC,CAAC,CAAC,OAAO;AAC/D,YAAA,aAAa,CAAC,OAAO,EAAE,aAAa,IAAI,CAAC,MAAM,KAAK,CAAC,CACxD,EAAE;AACC,YAAA,gBAAgB,CAAC,aAAa,KAAK,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;YAClE;QACJ;AACA,QAAA,MAAM,OAAO,GAAG,UAAU,CAAC,MAAK;AAC5B,YAAA,gBAAgB,CAAC,aAAa,KAAK,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;QACtE,CAAC,EAAE,GAAG,CAAC;AACP,QAAA,OAAO,MAAM,YAAY,CAAC,OAAO,CAAC;IACtC,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IAE3C,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,EAEzD;AACH,IAAA,MAAM,YAAY,GAAG,eAAe,KAAK,SAAS;IAClD,MAAM,WAAW,GAAG;AAChB,WAAG,eAAe,IAAI,SAAS;UAC7B,kBAAkB;AACxB,IAAA,MAAM,SAAS,GACX,WAAW,KAAK;AACZ,UAAE;AACF,UAAE,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;AAC3E,IAAA,MAAM,OAAO,GAAGA,gBAAc,IAAIC,cAAqB;AAEvD,IAAA,MAAM,MAAM,GAAG,CAAC,OAAmC,EAAE,KAAc,KAAI;QACnE,IAAI,CAAC,YAAY,EAAE;YACf,qBAAqB,CAAC,OAAO,CAAC;QAClC;AACA,QAAA,eAAe,GACX,OAAO,EACP,KAAK;aACA,OAAO,KAAK;AACT,kBAAE;kBACA,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,KAClB,kBAAkB,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAC5C,CAAC,CACf;AACL,IAAA,CAAC;AAED,IAAA,MAAM,UAAU,GAAG,YAAW;AAC1B,QAAA,MAAM,OAAO,GAAG,MAAM,YAAY,IAAI;AACtC,QAAA,IAAI,OAAO,KAAK,SAAS,EAAE;YACvB,MAAM,CAAC,OAAO,CAAC;QACnB;AACJ,IAAA,CAAC;AAED,IAAA,MAAM,YAAY,GACd,WAAW,KAAK;AACZ,UAAE;AACF,UAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,KACpB,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CACnD;AAEX,IAAA,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,QAAuB,KAAI;QACnD,IAAI,WAAW,KAAK,SAAS;YAAE;AAC/B,QAAA,aAAa,CAAC,WAAW,EAAE,IAAI,EAAE,QAAQ,CAAC;AAC1C,QAAA,IACI,SAAS;YACT,sBAAsB,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,EACjE;AACE,YAAA,kBAAkB,GAAG,SAAS,EAAE,IAAI,CAAC;QACzC;AACJ,IAAA,CAAC;AAED,IAAA,MAAM,KAAK,GACP,WAAW,KAAK;AACZ,WAAG,MAAM,EAAE,MAAM,IAAI,QAAQ;AAC7B,UAAE,SAAS,IAAI,CAAC,OAAO,CAAC,SAAS;cAC7B,SAAS,CAAC;eACT,MAAM,EAAE,YAAY,IAAI,WAAW,CAAC;AACjD,IAAA,MAAM,cAAc,GAChB,WAAW,KAAK,SAAS,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnE,MAAM,KAAK,IACPH,IAAA,CAAAI,QAAA,EAAA,EAAA,QAAA,EAAA,CACIJ,oBACQ,EAAE,EAAE,MAAM,EACd,SAAS,EAAE,UAAU,CACjB,6BAA6B,EAC7B,EAAE,EAAE,MAAM,EAAE,SAAS,CACxB,EAAA,kBAAA,EACgB,QAAQ,EAAA,QAAA,EAAA,CAExB,WAAW,KAAK,SAAS,KACtBC,GAAA,CAAA,QAAA,EAAA,EAAA,GACQ,EAAE,EAAE,IAAI,EACZ,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,UAAU,CACjB,2BAA2B,EAC3B,EAAE,EAAE,IAAI,EAAE,SAAS,CACtB,sBACgB,MAAM,EACvB,KAAK,EAAE,MAAM,EAAE,IAAI,IAAI,gBAAgB,EAAA,YAAA,EAC3B,MAAM,EAAE,IAAI,IAAI,gBAAgB,EAC5C,OAAO,EAAE,MAAM,MAAM,CAAC,SAAS,CAAC,EAAA,QAAA,EAEhCA,IAAC,QAAQ,EAAA,EAAA,CAAG,GACP,CACZ,EACDA,eACQ,EAAE,EAAE,KAAK,EACb,SAAS,EAAE,UAAU,CACjB,4BAA4B,EAC5B;AACI,8BAAE;8BACA,SAAS,EACf,EAAE,EAAE,KAAK,EAAE,SAAS,CACvB,EAAA,kBAAA,EACgB,OAAO,EAAA,QAAA,EAEvB,KAAK,GACL,EACLA,GAAA,CAAA,QAAA,EAAA,EAAA,GACQ,EAAE,EAAE,KAAK,EACb,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,UAAU,CACjB,4BAA4B,EAC5B,EAAE,EAAE,KAAK,EAAE,SAAS,CACvB,EAAA,kBAAA,EACgB,OAAO,EAAA,YAAA,EACZ,MAAM,EAAE,KAAK,IAAI,YAAY,EACzC,OAAO,EAAE,OAAO,EAAA,QAAA,EAEhBA,GAAA,CAAA,MAAA,EAAA,EAAA,aAAA,EAAkB,MAAM,EAAA,QAAA,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,EAAA,CAAQ,GAC/C,CAAA,EAAA,CACJ,EACTA,GAAA,CAAA,KAAA,EAAA,EAAA,GACQ,EAAE,EAAE,OAAO,EACf,SAAS,EAAE,UAAU,CACjB,8BAA8B,EAC9B,EAAE,EAAE,OAAO,EAAE,SAAS,CACzB,EAAA,kBAAA,EACgB,SAAS,EAAA,QAAA,EAEzB,WAAW,KAAK,SAAS,IACtBA,IAAC,aAAa,EAAA,EACV,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,EAC1C,OAAO,EACH;0BACM,MAAK;4BACD,KAAK,UAAU,EAAE;wBACrB;0BACA,SAAS,EAEnB,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAC/B,YAAY,EAAE,YAAY,CAAC,YAAY,EACvC,cAAc,EAAEC,gBAAc,EAC9B,cAAc,EAAE,YAAY,CAAC,cAAc,EAC3C,MAAM,EAAE;wBACJ,YAAY,EAAE,MAAM,EAAE,YAAY;wBAClC,GAAG,MAAM,EAAE,SAAS;AACvB,qBAAA,EAAA,CACH,KAEFD,GAAA,CAAC,gBAAgB,EAAA,EAAA,GACT,YAAY,EAChB,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,cAAc,EACtB,aAAa,EAAE,IAAI,EACnB,MAAM,EAAE,MAAM,EAAE,YAAY,EAAA,CAC9B,CACL,EAAA,CACC,CAAA,EAAA,CACP,CACN;IAED,OAAO,KAAK,IACRA,GAAA,CAAC,YAAY,OACL,EAAE,EAAE,QAAQ,EAChB,MAAM,EAAE,IAAI,EACZ,YAAY,EAAE,CAAC,SAAS,KAAI;AACxB,YAAA,IAAI,CAAC,SAAS;AAAE,gBAAA,OAAO,EAAE;QAC7B,CAAC,EACD,aAAa,EAAE,KAAK,EACpB,yBAAyB,EAAE,CAAC,KAAK,EACjC,SAAS,EAAE,UAAU,CACjB,+BAA+B,EAC/B,EAAE,EAAE,QAAQ,EAAE,SAAS,CAC1B,EAAA,kBAAA,EACgB,UAAU,EAAA,YAAA,EACf,KAAK,eACN,IAAI,IAAI,SAAS,EAAA,eAAA,EACb,WAAW,KAAK,SAAS,IAAI,SAAS,EAAA,QAAA,EAErDA,GAAA,CAAC,KAAK,EAAA,EAAA,GACE,EAAE,EAAE,IAAI,EACZ,SAAS,EAAE,UAAU,CACjB,qBAAqB,EACrB,EAAE,EAAE,IAAI,EAAE,SAAS,EACnB,SAAS,CACZ,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAA,kBAAA,EACnB,MAAM,mBACR,QAAQ,EAAA,WAAA,EACZ,IAAI,IAAI,SAAS,mBACb,WAAW,KAAK,SAAS,IAAI,SAAS,YAEpD,KAAK,EAAA,CACF,GACG,KAMf,aAAa,KAAK,QAAQ;QAC1B,eAAe;QACf,YAAY,CACRA,GAAA,CAAA,KAAA,EAAA,EAAA,GACQ,EAAE,EAAE,QAAQ,EAChB,SAAS,EAAE,UAAU,CACjB,+BAA+B,EAC/B,EAAE,EAAE,QAAQ,EAAE,SAAS,CAC1B,EAAA,kBAAA,EACgB,UAAU,EAAA,YAAA,EACf,KAAK,EAAA,WAAA,EACN,IAAI,IAAI,SAAS,EAAA,eAAA,EACb,WAAW,KAAK,SAAS,IAAI,SAAS,EAAA,eAAA,EACtC,aAAa,KAAK,UAAU,IAAI,SAAS,EAAA,cAAA,EAC1C,aAAa,KAAK,SAAS,IAAI,SAAS,EAAA,QAAA,EAEtDA,GAAA,CAAA,KAAA,EAAA,EAAA,GACQ,EAAE,EAAE,IAAI,EACZ,GAAG,EAAE,aAAa,EAClB,SAAS,EAAE,UAAU,CACjB,qBAAqB,EACrB,EAAE,EAAE,IAAI,EAAE,SAAS,EACnB,SAAS,CACZ,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAA,kBAAA,EACnB,MAAM,EAAA,eAAA,EACR,QAAQ,eACZ,IAAI,IAAI,SAAS,EAAA,eAAA,EACb,WAAW,KAAK,SAAS,IAAI,SAAS,EAAA,eAAA,EACtC,aAAa,KAAK,UAAU,IAAI,SAAS,EAAA,cAAA,EAC1C,aAAa,KAAK,SAAS,IAAI,SAAS,EACtD,cAAc,EAAE,CAAC,KAAK,KAAI;oBACtB,EAAE,EAAE,IAAI,EAAE,cAAc,GAAG,KAAK,CAAC;AACjC,oBAAA,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa;wBAAE;AAC1C,oBAAA,gBAAgB,CAAC,CAAC,KAAK,KACnB,KAAK,KAAK,UAAU,GAAG,MAAM,GAAG,KAAK,KAAK,SAAS,GAAG,QAAQ,GAAG,KAAK,CACzE;gBACL,CAAC,EAAA,QAAA,EAEA,KAAK,EAAA,CACJ,EAAA,CACJ,EACN,eAAe,CAClB,CACJ;AACL;;"}
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import type { Constructor } from '@cratis/fundamentals';
|
|
3
3
|
import type { IObservableQueryFor } from '@cratis/arc/queries';
|
|
4
4
|
import { type ChatSidebarProps } from './ChatSidebar.js';
|
|
5
|
-
import type
|
|
5
|
+
import { type ChatIdentifier } from './ChatIdentifier.js';
|
|
6
6
|
import type { ChatMessage } from './ChatMessage.js';
|
|
7
7
|
import type { ChatTopic } from './ChatTopic.js';
|
|
8
8
|
/**
|
|
@@ -14,7 +14,7 @@ import type { ChatTopic } from './ChatTopic.js';
|
|
|
14
14
|
* @typeParam TTopicsArguments The topics query's argument type.
|
|
15
15
|
* @typeParam TMessagesArguments The messages query's argument type.
|
|
16
16
|
*/
|
|
17
|
-
export interface ChatSidebarForObservableQueriesProps<TMessage extends ChatMessage, TTopic extends ChatTopic, TTopicsQuery extends IObservableQueryFor<TTopic[], TTopicsArguments>, TMessagesQuery extends IObservableQueryFor<TMessage[], TMessagesArguments>, TTopicsArguments extends object = object, TMessagesArguments extends object = object> extends Omit<ChatSidebarProps<TMessage, TTopic>, 'topics' | 'messages' | 'selectedTopicId'> {
|
|
17
|
+
export interface ChatSidebarForObservableQueriesProps<TMessage extends ChatMessage, TTopic extends ChatTopic, TTopicsQuery extends IObservableQueryFor<TTopic[], TTopicsArguments>, TMessagesQuery extends IObservableQueryFor<TMessage[], TMessagesArguments>, TTopicsArguments extends object = object, TMessagesArguments extends object = object> extends Omit<ChatSidebarProps<TMessage, TTopic>, 'topics' | 'messages' | 'selectedTopicId' | 'topicsStatus' | 'messagesStatus'> {
|
|
18
18
|
/** The observable query delivering the topics. */
|
|
19
19
|
topicsQuery: Constructor<TTopicsQuery>;
|
|
20
20
|
/** Arguments for the topics query, when it takes any. */
|
|
@@ -1,21 +1,69 @@
|
|
|
1
|
-
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { useState } from 'react';
|
|
1
|
+
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useCallback, useEffect, useLayoutEffect } from 'react';
|
|
3
3
|
import { useObservableQuery } from '@cratis/arc.react/queries';
|
|
4
|
+
import { QueryStatus } from '../QueryStatus/QueryStatus.js';
|
|
5
|
+
import { resolveQueryStatus } from '../QueryStatus/resolveQueryStatus.js';
|
|
4
6
|
import { ChatSidebar } from './ChatSidebar.js';
|
|
7
|
+
import { chatIdentifierString } from './ChatIdentifier.js';
|
|
8
|
+
import { ChatStatus } from './ChatStatus.js';
|
|
5
9
|
|
|
10
|
+
const chatStatusByQueryStatus = {
|
|
11
|
+
[QueryStatus.Ready]: ChatStatus.Ready,
|
|
12
|
+
[QueryStatus.Loading]: ChatStatus.Loading,
|
|
13
|
+
[QueryStatus.Failed]: ChatStatus.Failed,
|
|
14
|
+
[QueryStatus.Unauthorized]: ChatStatus.Unauthorized,
|
|
15
|
+
};
|
|
16
|
+
const resolveChatStatus = (result) => chatStatusByQueryStatus[resolveQueryStatus(result)];
|
|
17
|
+
const useIsomorphicLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;
|
|
18
|
+
const serializeArguments = (args) => {
|
|
19
|
+
if (!args || Object.keys(args).length === 0)
|
|
20
|
+
return '';
|
|
21
|
+
const sorted = Object.keys(args).sort().reduce((entries, key) => {
|
|
22
|
+
entries[key] = args[key];
|
|
23
|
+
return entries;
|
|
24
|
+
}, {});
|
|
25
|
+
return JSON.stringify(sorted);
|
|
26
|
+
};
|
|
27
|
+
const KeyedQuerySubscriber = ({ query, args, queryKey, onResult, }) => {
|
|
28
|
+
const [result] = useObservableQuery(query, args);
|
|
29
|
+
useIsomorphicLayoutEffect(() => { onResult(queryKey, result); }, [queryKey, result, onResult]);
|
|
30
|
+
return null;
|
|
31
|
+
};
|
|
6
32
|
const ChatSidebarForObservableQueries = ({ topicsQuery, topicsArguments, messagesQuery, messagesArguments, onTopicSelected, ...sidebar }) => {
|
|
7
33
|
const [selectedId, setSelectedId] = useState(undefined);
|
|
8
|
-
const [
|
|
34
|
+
const [topicsSnapshot, setTopicsSnapshot] = useState();
|
|
35
|
+
const onTopicsResult = useCallback((queryKey, result) => {
|
|
36
|
+
const topics = Array.isArray(result.data) ? result.data : [];
|
|
37
|
+
const status = resolveChatStatus(result);
|
|
38
|
+
setTopicsSnapshot((previous) => {
|
|
39
|
+
if (previous?.queryKey === queryKey && previous.status === status &&
|
|
40
|
+
(previous.topics === topics || previous.topics.length === 0 && topics.length === 0)) {
|
|
41
|
+
return previous;
|
|
42
|
+
}
|
|
43
|
+
return { queryKey, topics, status };
|
|
44
|
+
});
|
|
45
|
+
}, []);
|
|
46
|
+
const [messagesSnapshot, setMessagesSnapshot] = useState();
|
|
47
|
+
const onMessagesResult = useCallback((queryKey, result) => {
|
|
48
|
+
setMessagesSnapshot({
|
|
49
|
+
queryKey,
|
|
50
|
+
messages: Array.isArray(result.data) ? result.data : [],
|
|
51
|
+
status: resolveChatStatus(result),
|
|
52
|
+
});
|
|
53
|
+
}, []);
|
|
54
|
+
const topicsQueryKey = serializeArguments(topicsArguments);
|
|
55
|
+
const currentTopics = topicsQueryKey === topicsSnapshot?.queryKey ? topicsSnapshot : undefined;
|
|
9
56
|
const messagesQueryArguments = messagesArguments(selectedId);
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
57
|
+
const messagesQueryKey = selectedId !== undefined && messagesQueryArguments !== undefined
|
|
58
|
+
? JSON.stringify([chatIdentifierString(selectedId), serializeArguments(messagesQueryArguments)])
|
|
59
|
+
: undefined;
|
|
60
|
+
const currentMessages = messagesQueryKey === messagesSnapshot?.queryKey ? messagesSnapshot : undefined;
|
|
61
|
+
return (jsxs(Fragment, { children: [jsx(KeyedQuerySubscriber, { query: topicsQuery, args: topicsArguments, queryKey: topicsQueryKey, onResult: onTopicsResult }, topicsQueryKey), messagesQueryKey !== undefined && messagesQueryArguments !== undefined && (jsx(KeyedQuerySubscriber, { query: messagesQuery, args: messagesQueryArguments, queryKey: messagesQueryKey, onResult: onMessagesResult }, messagesQueryKey)), jsx(ChatSidebar, { ...sidebar, topics: currentTopics?.topics ?? [], messages: currentMessages?.messages ?? [], topicsStatus: currentTopics?.status ?? ChatStatus.Loading, messagesStatus: messagesQueryKey === undefined
|
|
62
|
+
? ChatStatus.Ready
|
|
63
|
+
: currentMessages?.status ?? ChatStatus.Loading, selectedTopicId: selectedId ?? null, onTopicSelected: (topicId, topic) => {
|
|
64
|
+
setSelectedId(topicId);
|
|
65
|
+
onTopicSelected?.(topicId, topic);
|
|
66
|
+
} })] }));
|
|
19
67
|
};
|
|
20
68
|
|
|
21
69
|
export { ChatSidebarForObservableQueries };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatSidebarForObservableQueries.js","sources":["../../../Chat/ChatSidebarForObservableQueries.tsx"],"sourcesContent":[null],"names":["_jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatSidebarForObservableQueries.js","sources":["../../../Chat/ChatSidebarForObservableQueries.tsx"],"sourcesContent":[null],"names":["_jsxs","_Fragment","_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Display state of a chat topic list or conversation. */
|
|
2
|
+
export declare enum ChatStatus {
|
|
3
|
+
/** Shows topics or messages, or the empty state when nothing is pending. */
|
|
4
|
+
Ready = "ready",
|
|
5
|
+
/** Shows a loading message without data, or retains existing content during a refetch. */
|
|
6
|
+
Loading = "loading",
|
|
7
|
+
/** Shows a failure alert, alongside any existing topics or messages kept after a failure. */
|
|
8
|
+
Failed = "failed",
|
|
9
|
+
/** Shows an access-denied message instead of existing content. */
|
|
10
|
+
Unauthorized = "unauthorized"
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=ChatStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatStatus.d.ts","sourceRoot":"","sources":["../../../Chat/ChatStatus.ts"],"names":[],"mappings":"AAGA,0DAA0D;AAC1D,oBAAY,UAAU;IAClB,4EAA4E;IAC5E,KAAK,UAAU;IACf,0FAA0F;IAC1F,OAAO,YAAY;IACnB,6FAA6F;IAC7F,MAAM,WAAW;IACjB,kEAAkE;IAClE,YAAY,iBAAiB;CAChC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
var ChatStatus;
|
|
2
|
+
(function (ChatStatus) {
|
|
3
|
+
ChatStatus["Ready"] = "ready";
|
|
4
|
+
ChatStatus["Loading"] = "loading";
|
|
5
|
+
ChatStatus["Failed"] = "failed";
|
|
6
|
+
ChatStatus["Unauthorized"] = "unauthorized";
|
|
7
|
+
})(ChatStatus || (ChatStatus = {}));
|
|
8
|
+
|
|
9
|
+
export { ChatStatus };
|
|
10
|
+
//# sourceMappingURL=ChatStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChatStatus.js","sources":["../../../Chat/ChatStatus.ts"],"sourcesContent":[null],"names":[],"mappings":"IAIY;AAAZ,CAAA,UAAY,UAAU,EAAA;AAElB,IAAA,UAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AAEf,IAAA,UAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AAEnB,IAAA,UAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AAEjB,IAAA,UAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AACjC,CAAC,EATW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;;"}
|
|
@@ -3,6 +3,7 @@ import { type BuildAvatarUrlParams } from './Kit/Avatar/index.js';
|
|
|
3
3
|
import type { ChatAuthor } from './ChatAuthor.js';
|
|
4
4
|
import { type ChatIdentifier } from './ChatIdentifier.js';
|
|
5
5
|
import type { ChatTopic } from './ChatTopic.js';
|
|
6
|
+
import { ChatStatus } from './ChatStatus.js';
|
|
6
7
|
import { type RelativeTimestampLabels } from './relativeTimestamp.js';
|
|
7
8
|
/** Overrides for every label the {@link ChatTopicList} renders. Any field left unset falls back
|
|
8
9
|
* to a literal English default. */
|
|
@@ -13,6 +14,12 @@ export interface ChatTopicListLabels {
|
|
|
13
14
|
unnamedTopic?: string;
|
|
14
15
|
/** The started-by line under a topic's name. `{name}` is substituted. Defaults to `'Started by {name}'`. */
|
|
15
16
|
startedBy?: string;
|
|
17
|
+
/** Shown while loading without topics. Defaults to `'Loading topics…'`. */
|
|
18
|
+
loading?: string;
|
|
19
|
+
/** Shown when loading topics fails, alongside any existing topics. Defaults to `'Could not load topics.'`. */
|
|
20
|
+
failed?: string;
|
|
21
|
+
/** Shown when access is denied; replaces any existing topics. Defaults to `'You are not authorized to view these topics.'`. */
|
|
22
|
+
unauthorized?: string;
|
|
16
23
|
/** Shown when there are no topics yet. Defaults to `'No topics yet. Start the first one!'`. */
|
|
17
24
|
empty?: string;
|
|
18
25
|
/** Overrides for the relative last-activity timestamps. */
|
|
@@ -28,6 +35,8 @@ export interface ChatTopicListProps<TTopic extends ChatTopic = ChatTopic> {
|
|
|
28
35
|
* the array a live (observable) query delivers and the list re-renders as it changes.
|
|
29
36
|
*/
|
|
30
37
|
topics: TTopic[];
|
|
38
|
+
/** Query display state. Defaults to {@link ChatStatus.Ready}; existing topics remain visible on loading or failure, and unauthorized disables starting a topic. */
|
|
39
|
+
status?: ChatStatus;
|
|
31
40
|
/**
|
|
32
41
|
* Invoked when a topic is picked from the list.
|
|
33
42
|
* @param topic The topic that was picked.
|
|
@@ -73,4 +82,4 @@ export interface ChatTopicListProps<TTopic extends ChatTopic = ChatTopic> {
|
|
|
73
82
|
* host-side auto-naming, the name arrives through the data once the host has produced it, and
|
|
74
83
|
* the placeholder simply stops being needed.
|
|
75
84
|
*/
|
|
76
|
-
export declare const ChatTopicList: <TTopic extends ChatTopic = ChatTopic>({ topics, onOpen, onStart, authorOf, renderAvatar, isTopicUnnamed, buildAvatarUrl, labels, className, }: ChatTopicListProps<TTopic>) => import("react").JSX.Element;
|
|
85
|
+
export declare const ChatTopicList: <TTopic extends ChatTopic = ChatTopic>({ topics, status, onOpen, onStart, authorOf, renderAvatar, isTopicUnnamed, buildAvatarUrl, labels, className, }: ChatTopicListProps<TTopic>) => import("react").JSX.Element;
|
|
@@ -2,18 +2,19 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { PersonAvatarCircle } from './Kit/Avatar/PersonAvatarCircle.js';
|
|
3
3
|
import { ChatAuthorKind } from './Kit/ChatAuthorKind.js';
|
|
4
4
|
import { chatIdentifierString } from './ChatIdentifier.js';
|
|
5
|
+
import { ChatStatus } from './ChatStatus.js';
|
|
5
6
|
import { isTopicUnnamed } from './isTopicUnnamed.js';
|
|
6
7
|
import { relativeTimestamp } from './relativeTimestamp.js';
|
|
7
8
|
import { topicsByActivity } from './topicsByActivity.js';
|
|
8
9
|
|
|
9
10
|
const PlusIcon = () => (jsxs("svg", { width: '14', height: '14', viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', strokeWidth: '2.5', "aria-hidden": 'true', children: [jsx("line", { x1: '12', y1: '5', x2: '12', y2: '19' }), jsx("line", { x1: '5', y1: '12', x2: '19', y2: '12' })] }));
|
|
10
|
-
const ChatTopicList = ({ topics, onOpen, onStart, authorOf, renderAvatar, isTopicUnnamed: isTopicUnnamed$1, buildAvatarUrl, labels, className, }) => {
|
|
11
|
+
const ChatTopicList = ({ topics, status = ChatStatus.Ready, onOpen, onStart, authorOf, renderAvatar, isTopicUnnamed: isTopicUnnamed$1, buildAvatarUrl, labels, className, }) => {
|
|
11
12
|
const unnamed = isTopicUnnamed$1 ?? isTopicUnnamed;
|
|
12
13
|
const authorFor = (authorId) => authorOf?.(authorId) ?? {
|
|
13
14
|
name: chatIdentifierString(authorId),
|
|
14
15
|
kind: ChatAuthorKind.User,
|
|
15
16
|
};
|
|
16
|
-
return (jsxs("div", { className: `cratis-chat-topics${className ? ` ${className}` : ''}`, children: [onStart && (jsxs("button", { type: 'button', className: 'cratis-chat-topics__start', onClick: onStart, children: [jsx(PlusIcon, {}), jsx("span", { children: labels?.newTopic ?? 'New topic' })] })), topics.length === 0 && (jsx("p", { className: 'cratis-chat-topics__empty', children: labels?.empty ?? 'No topics yet. Start the first one!' })), jsx("ul", { className: 'cratis-chat-topics__list', children: topicsByActivity(topics).map((topic) => {
|
|
17
|
+
return (jsxs("div", { className: `cratis-chat-topics${className ? ` ${className}` : ''}`, "aria-busy": status === ChatStatus.Loading && topics.length > 0 || undefined, children: [onStart && (jsxs("button", { type: 'button', className: 'cratis-chat-topics__start', disabled: status === ChatStatus.Unauthorized, onClick: onStart, children: [jsx(PlusIcon, {}), jsx("span", { children: labels?.newTopic ?? 'New topic' })] })), (topics.length === 0 || status === ChatStatus.Failed || status === ChatStatus.Unauthorized) && (jsx("p", { className: 'cratis-chat-topics__empty', children: status === ChatStatus.Loading ? (jsx("span", { role: 'status', children: labels?.loading ?? 'Loading topics…' }, status)) : status === ChatStatus.Failed ? (jsx("span", { role: 'alert', children: labels?.failed ?? 'Could not load topics.' }, status)) : status === ChatStatus.Unauthorized ? (jsx("span", { role: 'alert', children: labels?.unauthorized ?? 'You are not authorized to view these topics.' }, status)) : (labels?.empty ?? 'No topics yet. Start the first one!') })), jsx("ul", { className: 'cratis-chat-topics__list', children: status !== ChatStatus.Unauthorized && topicsByActivity(topics).map((topic) => {
|
|
17
18
|
const starter = topic.startedBy === undefined
|
|
18
19
|
? undefined
|
|
19
20
|
: authorFor(topic.startedBy);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatTopicList.js","sources":["../../../Chat/ChatTopicList.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx","isTopicUnnamed","defaultIsTopicUnnamed"],"mappings":"
|
|
1
|
+
{"version":3,"file":"ChatTopicList.js","sources":["../../../Chat/ChatTopicList.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx","isTopicUnnamed","defaultIsTopicUnnamed"],"mappings":"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"}
|
|
@@ -41,6 +41,8 @@ export interface ChatComposerProps {
|
|
|
41
41
|
onSend: (text: string, mentions: MentionCandidate[]) => void;
|
|
42
42
|
/** Whether to take focus when mounted. */
|
|
43
43
|
autoFocus?: boolean;
|
|
44
|
+
/** Disables drafting, emoji insertion, and sending. Defaults to false. */
|
|
45
|
+
disabled?: boolean;
|
|
44
46
|
/** Builds the avatar image URL for mention candidates. Omit to always show initials. */
|
|
45
47
|
buildAvatarUrl?: (params: BuildAvatarUrlParams) => string;
|
|
46
48
|
/** Overrides for the composer's labels. Unset fields fall back to literal English defaults. */
|