@box/threaded-annotations 4.1.9 → 4.1.10
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/chunks/annotation-badge.js +1 -64
- package/dist/chunks/custom-placeholder.js +1 -72
- package/dist/chunks/delete-annotations-message-popover.js +1 -46
- package/dist/chunks/delete-confirmation-popover.js +1 -67
- package/dist/chunks/dist.js +2 -1757
- package/dist/chunks/mention-component.js +1 -106
- package/dist/chunks/message-editor.module.js +1 -12
- package/dist/chunks/message-editor2.module.js +1 -29
- package/dist/chunks/message-header.js +1 -49
- package/dist/chunks/messages-view.js +1 -99
- package/dist/chunks/resolved-state.js +1 -55
- package/dist/chunks/show-replies-button.js +1 -60
- package/dist/chunks/text-message.js +1 -21
- package/dist/chunks/text-message.module.js +1 -14
- package/dist/chunks/threaded-annotations.js +1 -71
- package/dist/chunks/threaded-annotations2.js +1 -87
- package/dist/chunks/timestamp-toggle.js +1 -36
- package/dist/chunks/virtualized-messages.js +1 -30
- package/dist/esm/index.js +1 -8
- package/dist/esm/lib/components/mention-component/mention-component.js +1 -2
- package/dist/esm/lib/components/mention-component/mention-context.js +1 -26
- package/dist/esm/lib/components/message-editor/editor-extensions/custom-mention/custom-mention-suggestions.js +1 -23
- package/dist/esm/lib/components/message-editor/editor-extensions/custom-mention/custom-mention.js +1 -59
- package/dist/esm/lib/components/message-editor/editor-extensions/custom-mention/useMentionState.js +1 -24
- package/dist/esm/lib/components/message-editor/editor-extensions/custom-paragraph.js +1 -13
- package/dist/esm/lib/components/message-editor/editor-extensions/custom-placeholder/custom-placeholder-utils.js +1 -26
- package/dist/esm/lib/components/message-editor/editor-extensions/custom-placeholder/custom-placeholder.js +1 -2
- package/dist/esm/lib/components/message-editor/error-message.js +1 -17
- package/dist/esm/lib/components/message-editor/hooks/useMessageEditor.js +1 -69
- package/dist/esm/lib/components/message-editor/hooks/useMessagePost.js +1 -35
- package/dist/esm/lib/components/message-editor/message-editor-actions.js +1 -29
- package/dist/esm/lib/components/message-editor/message-editor-context.js +1 -7
- package/dist/esm/lib/components/message-editor/message-editor.js +1 -74
- package/dist/esm/lib/components/message-editor/messages.js +1 -44
- package/dist/esm/lib/components/message-editor/utils/getMessageEditorState.js +1 -9
- package/dist/esm/lib/components/message-header/delete-annotations-message-popover.js +1 -2
- package/dist/esm/lib/components/message-header/message-header.js +1 -2
- package/dist/esm/lib/components/message-header/messages.js +1 -32
- package/dist/esm/lib/components/messages-view/consts.js +1 -2
- package/dist/esm/lib/components/messages-view/hooks/useAutoScroll.js +1 -43
- package/dist/esm/lib/components/messages-view/hooks/useShowMoreReplies.js +1 -26
- package/dist/esm/lib/components/messages-view/hooks/useVirtualizedMessages.js +1 -17
- package/dist/esm/lib/components/messages-view/messages-view.js +1 -61
- package/dist/esm/lib/components/messages-view/messages.js +1 -12
- package/dist/esm/lib/components/messages-view/virtualized-messages.js +1 -2
- package/dist/esm/lib/components/text-message/message-renderer.js +1 -58
- package/dist/esm/lib/components/text-message/text-message.js +1 -2
- package/dist/esm/lib/components/user-avatar/getInitials.js +1 -5
- package/dist/esm/lib/components/user-avatar/messages.js +1 -12
- package/dist/esm/lib/components/user-avatar/user-avatar.js +1 -31
- package/dist/esm/lib/components/v2/annotation-badge/annotation-badge.js +1 -2
- package/dist/esm/lib/components/v2/annotation-badge/index.js +1 -2
- package/dist/esm/lib/components/v2/annotation-badge/messages.js +1 -12
- package/dist/esm/lib/components/v2/message-editor/editor-extensions/custom-mention/custom-mention-suggestions.js +1 -23
- package/dist/esm/lib/components/v2/message-editor/editor-extensions/custom-mention/custom-mention.js +1 -59
- package/dist/esm/lib/components/v2/message-editor/editor-extensions/custom-mention/mention-trigger-normalization.js +1 -2
- package/dist/esm/lib/components/v2/message-editor/editor-extensions/custom-mention/useMentionState.js +1 -27
- package/dist/esm/lib/components/v2/message-editor/editor-extensions/custom-paragraph.js +1 -13
- package/dist/esm/lib/components/v2/message-editor/hooks/useCharacterLimit.js +1 -24
- package/dist/esm/lib/components/v2/message-editor/hooks/useEditorContainerState.js +1 -21
- package/dist/esm/lib/components/v2/message-editor/hooks/useMentionUserSelection.js +1 -21
- package/dist/esm/lib/components/v2/message-editor/hooks/useMessageSubmit.js +1 -24
- package/dist/esm/lib/components/v2/message-editor/message-editor-context.js +1 -19
- package/dist/esm/lib/components/v2/message-editor/message-editor.js +1 -187
- package/dist/esm/lib/components/v2/message-editor/message-editor.types.js +1 -4
- package/dist/esm/lib/components/v2/message-editor/messages.js +1 -52
- package/dist/esm/lib/components/v2/message-editor/subcomponents/character-limit-counter.js +1 -26
- package/dist/esm/lib/components/v2/message-editor/subcomponents/edit-buttons.js +1 -32
- package/dist/esm/lib/components/v2/message-editor/subcomponents/error-message.js +1 -22
- package/dist/esm/lib/components/v2/message-editor/subcomponents/post-button.js +1 -29
- package/dist/esm/lib/components/v2/message-editor/subcomponents/timestamp-toggle.js +1 -2
- package/dist/esm/lib/components/v2/message-header/delete-confirmation-popover.js +1 -2
- package/dist/esm/lib/components/v2/message-header/message-header.js +1 -90
- package/dist/esm/lib/components/v2/message-header/message-options-menu.js +1 -49
- package/dist/esm/lib/components/v2/message-header/messages.js +2 -48
- package/dist/esm/lib/components/v2/messages-view/hooks/useAutoScroll.js +1 -69
- package/dist/esm/lib/components/v2/messages-view/messages-view.js +1 -2
- package/dist/esm/lib/components/v2/resolved-state/messages.js +1 -12
- package/dist/esm/lib/components/v2/resolved-state/resolved-state.js +1 -2
- package/dist/esm/lib/components/v2/show-replies-button/messages.js +1 -12
- package/dist/esm/lib/components/v2/show-replies-button/show-replies-button.js +1 -2
- package/dist/esm/lib/components/v2/text-message/constants.js +1 -2
- package/dist/esm/lib/components/v2/text-message/messages.js +1 -32
- package/dist/esm/lib/components/v2/text-message/subcomponents/message-footer.js +1 -64
- package/dist/esm/lib/components/v2/text-message/subcomponents/message-renderer.js +1 -87
- package/dist/esm/lib/components/v2/text-message/subcomponents/truncate-document.js +1 -113
- package/dist/esm/lib/components/v2/text-message/subcomponents/url-segments.js +1 -38
- package/dist/esm/lib/components/v2/text-message/text-message.js +1 -79
- package/dist/esm/lib/components/v2/user-avatar/getInitials.js +1 -5
- package/dist/esm/lib/components/v2/user-avatar/messages.js +1 -12
- package/dist/esm/lib/components/v2/user-avatar/user-avatar.js +1 -37
- package/dist/esm/lib/messages.js +1 -24
- package/dist/esm/lib/threaded-annotations.js +1 -2
- package/dist/esm/lib/utils/getErrorMessage.js +1 -2
- package/dist/esm/lib/v2/constants.js +1 -2
- package/dist/esm/lib/v2/messages.js +1 -6
- package/dist/esm/lib/v2/resin-targets.js +1 -25
- package/dist/esm/lib/v2/threaded-annotations-context.js +1 -61
- package/dist/esm/lib/v2/threaded-annotations.js +1 -2
- package/dist/esm/lib/v2/types/annotation-badge-types.js +1 -4
- package/dist/esm/lib/v2/types/index.js +1 -2
- package/dist/esm/lib/v2/utils/build-mention-content.js +1 -20
- package/dist/esm/lib/v2/utils/serialize-mention-markup.js +2 -12
- package/package.json +12 -12
|
@@ -1,44 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
var t = e({
|
|
3
|
-
postCancel: {
|
|
4
|
-
id: "groupSharedFeatures.threadedAnnotations.messageEditor.cancel",
|
|
5
|
-
defaultMessage: "Cancel"
|
|
6
|
-
},
|
|
7
|
-
post: {
|
|
8
|
-
id: "groupSharedFeatures.threadedAnnotations.messageEditor.post",
|
|
9
|
-
defaultMessage: "Post"
|
|
10
|
-
},
|
|
11
|
-
postLoading: {
|
|
12
|
-
id: "groupSharedFeatures.threadedAnnotations.messageEditor.postLoading",
|
|
13
|
-
defaultMessage: "Loading..."
|
|
14
|
-
},
|
|
15
|
-
placeholderPrefix: {
|
|
16
|
-
id: "groupSharedFeatures.threadedAnnotations.messageEditor.placeholderPrefix",
|
|
17
|
-
defaultMessage: "Write a comment or"
|
|
18
|
-
},
|
|
19
|
-
placeholderPrefixReply: {
|
|
20
|
-
id: "groupSharedFeatures.threadedAnnotations.messageEditor.placeholderPrefixReply",
|
|
21
|
-
defaultMessage: "Write a reply or"
|
|
22
|
-
},
|
|
23
|
-
placeholderSuffix: {
|
|
24
|
-
id: "groupSharedFeatures.threadedAnnotations.messageEditor.placeholderSuffix",
|
|
25
|
-
defaultMessage: "to mention"
|
|
26
|
-
},
|
|
27
|
-
cancelButtonAriaLabel: {
|
|
28
|
-
id: "groupSharedFeatures.threadedAnnotations.messageEditor.cancelButtonAriaLabel",
|
|
29
|
-
defaultMessage: "Cancel button"
|
|
30
|
-
},
|
|
31
|
-
postButtonAriaLabel: {
|
|
32
|
-
id: "groupSharedFeatures.threadedAnnotations.messageEditor.postButtonAriaLabel",
|
|
33
|
-
defaultMessage: "Post button"
|
|
34
|
-
},
|
|
35
|
-
editorContentAriaLabel: {
|
|
36
|
-
id: "groupSharedFeatures.threadedAnnotations.messageEditor.editorContentAriaLabel",
|
|
37
|
-
defaultMessage: "Message editor"
|
|
38
|
-
},
|
|
39
|
-
placeholderAriaLabel: {
|
|
40
|
-
id: "groupSharedFeatures.threadedAnnotations.messageEditor.placeholderAriaLabel",
|
|
41
|
-
defaultMessage: "Message input placeholder"
|
|
42
|
-
}
|
|
43
|
-
});
|
|
44
|
-
export { t as default };
|
|
1
|
+
import{defineMessages}from"react-intl";var messages=defineMessages({postCancel:{id:`groupSharedFeatures.threadedAnnotations.messageEditor.cancel`,defaultMessage:`Cancel`},post:{id:`groupSharedFeatures.threadedAnnotations.messageEditor.post`,defaultMessage:`Post`},postLoading:{id:`groupSharedFeatures.threadedAnnotations.messageEditor.postLoading`,defaultMessage:`Loading...`},placeholderPrefix:{id:`groupSharedFeatures.threadedAnnotations.messageEditor.placeholderPrefix`,defaultMessage:`Write a comment or`},placeholderPrefixReply:{id:`groupSharedFeatures.threadedAnnotations.messageEditor.placeholderPrefixReply`,defaultMessage:`Write a reply or`},placeholderSuffix:{id:`groupSharedFeatures.threadedAnnotations.messageEditor.placeholderSuffix`,defaultMessage:`to mention`},cancelButtonAriaLabel:{id:`groupSharedFeatures.threadedAnnotations.messageEditor.cancelButtonAriaLabel`,defaultMessage:`Cancel button`},postButtonAriaLabel:{id:`groupSharedFeatures.threadedAnnotations.messageEditor.postButtonAriaLabel`,defaultMessage:`Post button`},editorContentAriaLabel:{id:`groupSharedFeatures.threadedAnnotations.messageEditor.editorContentAriaLabel`,defaultMessage:`Message editor`},placeholderAriaLabel:{id:`groupSharedFeatures.threadedAnnotations.messageEditor.placeholderAriaLabel`,defaultMessage:`Message input placeholder`}});export{messages as default};
|
|
@@ -1,9 +1 @@
|
|
|
1
|
-
var
|
|
2
|
-
let a = n || i;
|
|
3
|
-
return {
|
|
4
|
-
disableEditor: a,
|
|
5
|
-
isPostDisabled: e || r || a,
|
|
6
|
-
isCancelDisabled: t || a
|
|
7
|
-
};
|
|
8
|
-
};
|
|
9
|
-
export { e as getMessageEditorState };
|
|
1
|
+
var getMessageEditorState=({disablePost=!1,disableCancel=!1,disableComponent=!1,isEditorEmpty,isLoading})=>{let disableEditor=disableComponent||isLoading;return{disableEditor,isPostDisabled:disablePost||isEditorEmpty||disableEditor,isCancelDisabled:disableCancel||disableEditor}};export{getMessageEditorState};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
export { e as DeleteAnnotationMessagePopover };
|
|
1
|
+
import{t as DeleteAnnotationMessagePopover}from"../../../../chunks/delete-annotations-message-popover.js";export{DeleteAnnotationMessagePopover};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
export { e as MessageHeader };
|
|
1
|
+
import{t as MessageHeader}from"../../../../chunks/message-header.js";export{MessageHeader};
|
|
@@ -1,32 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
var t = e({
|
|
3
|
-
deleteConfirmation: {
|
|
4
|
-
id: "groupSharedFeatures.threadedAnnotations.deleteConfirmation",
|
|
5
|
-
defaultMessage: "Delete confirmation"
|
|
6
|
-
},
|
|
7
|
-
deleteCommentQuestion: {
|
|
8
|
-
id: "groupSharedFeatures.threadedAnnotations.deleteCommentQuestion",
|
|
9
|
-
defaultMessage: "Do you want to delete this comment?"
|
|
10
|
-
},
|
|
11
|
-
deleteCancel: {
|
|
12
|
-
id: "groupSharedFeatures.threadedAnnotations.deleteCancel",
|
|
13
|
-
defaultMessage: "Cancel"
|
|
14
|
-
},
|
|
15
|
-
delete: {
|
|
16
|
-
id: "groupSharedFeatures.threadedAnnotations.delete",
|
|
17
|
-
defaultMessage: "Delete"
|
|
18
|
-
},
|
|
19
|
-
moreOptionsAriaLabel: {
|
|
20
|
-
id: "groupSharedFeatures.threadedAnnotations.moreOptionsAriaLabel",
|
|
21
|
-
defaultMessage: "More options button"
|
|
22
|
-
},
|
|
23
|
-
cancelDeleteButtonAriaLabel: {
|
|
24
|
-
id: "groupSharedFeatures.threadedAnnotations.cancelDeleteButtonAriaLabel",
|
|
25
|
-
defaultMessage: "Cancel delete button"
|
|
26
|
-
},
|
|
27
|
-
deleteButtonAriaLabel: {
|
|
28
|
-
id: "groupSharedFeatures.threadedAnnotations.deleteButtonAriaLabel",
|
|
29
|
-
defaultMessage: "Delete button"
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
export { t as default };
|
|
1
|
+
import{defineMessages}from"react-intl";var messages=defineMessages({deleteConfirmation:{id:`groupSharedFeatures.threadedAnnotations.deleteConfirmation`,defaultMessage:`Delete confirmation`},deleteCommentQuestion:{id:`groupSharedFeatures.threadedAnnotations.deleteCommentQuestion`,defaultMessage:`Do you want to delete this comment?`},deleteCancel:{id:`groupSharedFeatures.threadedAnnotations.deleteCancel`,defaultMessage:`Cancel`},delete:{id:`groupSharedFeatures.threadedAnnotations.delete`,defaultMessage:`Delete`},moreOptionsAriaLabel:{id:`groupSharedFeatures.threadedAnnotations.moreOptionsAriaLabel`,defaultMessage:`More options button`},cancelDeleteButtonAriaLabel:{id:`groupSharedFeatures.threadedAnnotations.cancelDeleteButtonAriaLabel`,defaultMessage:`Cancel delete button`},deleteButtonAriaLabel:{id:`groupSharedFeatures.threadedAnnotations.deleteButtonAriaLabel`,defaultMessage:`Delete button`}});export{messages as default};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
var
|
|
2
|
-
export { t as DEFAULT_AUTO_SCROLL_THRESHOLD, e as DEFAULT_MESSAGE_HEIGHT, n as DEFAULT_OVERSCAN, r as MAXIMUM_VISIBLE_REPLIES_COUNT };
|
|
1
|
+
var DEFAULT_MESSAGE_HEIGHT=80,DEFAULT_AUTO_SCROLL_THRESHOLD=150,DEFAULT_OVERSCAN=2,MAXIMUM_VISIBLE_REPLIES_COUNT=3;export{DEFAULT_AUTO_SCROLL_THRESHOLD,DEFAULT_MESSAGE_HEIGHT,DEFAULT_OVERSCAN,MAXIMUM_VISIBLE_REPLIES_COUNT};
|
|
@@ -1,43 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { useCallback as e, useEffect as t, useRef as n } from "react";
|
|
3
|
-
var r = ({ messageCount: r, containerRef: i }) => {
|
|
4
|
-
let a = n(!0), o = n(!1), s = e(() => {
|
|
5
|
-
i.current && a.current && i.current.scrollTo({
|
|
6
|
-
top: i.current.scrollHeight,
|
|
7
|
-
behavior: "smooth"
|
|
8
|
-
});
|
|
9
|
-
}, [i]);
|
|
10
|
-
return t(() => {
|
|
11
|
-
if (o.current = !0, r > 0) {
|
|
12
|
-
let e = requestAnimationFrame(() => {
|
|
13
|
-
requestAnimationFrame(() => {
|
|
14
|
-
s(), o.current = !1;
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
return () => {
|
|
18
|
-
cancelAnimationFrame(e), o.current = !1;
|
|
19
|
-
};
|
|
20
|
-
}
|
|
21
|
-
o.current = !1;
|
|
22
|
-
}, [r, s]), {
|
|
23
|
-
handleScroll: () => {
|
|
24
|
-
if (i.current) {
|
|
25
|
-
let { scrollTop: e, clientHeight: t, scrollHeight: n } = i.current, r = n - (e + t);
|
|
26
|
-
if (o.current) {
|
|
27
|
-
if (r === 0) {
|
|
28
|
-
o.current = !1;
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
return;
|
|
32
|
-
}
|
|
33
|
-
if (r > 150) {
|
|
34
|
-
a.current = !1;
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
a.current = !0;
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
handleScrollToBottom: s
|
|
41
|
-
};
|
|
42
|
-
};
|
|
43
|
-
export { r as useAutoScroll };
|
|
1
|
+
import"../consts.js";import{useCallback,useEffect,useRef}from"react";var useAutoScroll=({messageCount,containerRef})=>{let isAutoScrollEnabled=useRef(!0),isResizing=useRef(!1),handleScrollToBottom=useCallback(()=>{containerRef.current&&isAutoScrollEnabled.current&&containerRef.current.scrollTo({top:containerRef.current.scrollHeight,behavior:`smooth`})},[containerRef]);return useEffect(()=>{if(isResizing.current=!0,messageCount>0){let animationId=requestAnimationFrame(()=>{requestAnimationFrame(()=>{handleScrollToBottom(),isResizing.current=!1})});return()=>{cancelAnimationFrame(animationId),isResizing.current=!1}}isResizing.current=!1},[messageCount,handleScrollToBottom]),{handleScroll:()=>{if(containerRef.current){let{scrollTop,clientHeight,scrollHeight}=containerRef.current,threshold=scrollHeight-(scrollTop+clientHeight);if(isResizing.current){if(threshold===0){isResizing.current=!1;return}return}if(threshold>150){isAutoScrollEnabled.current=!1;return}isAutoScrollEnabled.current=!0}},handleScrollToBottom}};export{useAutoScroll};
|
|
@@ -1,26 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import e from "../messages.js";
|
|
3
|
-
import { useCallback as t, useEffect as n, useMemo as r, useState as i } from "react";
|
|
4
|
-
import { useIntl as a } from "react-intl";
|
|
5
|
-
var o = ({ repliesLength: o }) => {
|
|
6
|
-
let [s, c] = i(!1), [l, u] = i(!1), d = a();
|
|
7
|
-
return n(() => {
|
|
8
|
-
if (o >= 3) {
|
|
9
|
-
c(!0), u((e) => e);
|
|
10
|
-
return;
|
|
11
|
-
}
|
|
12
|
-
c(!1), u(!0);
|
|
13
|
-
}, [o]), {
|
|
14
|
-
showMoreRepliesButton: s,
|
|
15
|
-
showMoreReplies: l,
|
|
16
|
-
toggleReplies: t(() => {
|
|
17
|
-
u((e) => !e);
|
|
18
|
-
}, []),
|
|
19
|
-
buttonText: r(() => l ? d.formatMessage(e.hideReplies) : d.formatMessage(e.showMoreReplies, { count: o - 1 }), [
|
|
20
|
-
l,
|
|
21
|
-
d,
|
|
22
|
-
o
|
|
23
|
-
])
|
|
24
|
-
};
|
|
25
|
-
};
|
|
26
|
-
export { o as useShowMoreReplies };
|
|
1
|
+
import"../consts.js";import messages from"../messages.js";import{useCallback,useEffect,useMemo,useState}from"react";import{useIntl}from"react-intl";var useShowMoreReplies=({repliesLength})=>{let[showMoreRepliesButton,setShowMoreRepliesButton]=useState(!1),[showMoreReplies,setShowMoreReplies]=useState(!1),intl=useIntl();return useEffect(()=>{if(repliesLength>=3){setShowMoreRepliesButton(!0),setShowMoreReplies(prev=>prev);return}setShowMoreRepliesButton(!1),setShowMoreReplies(!0)},[repliesLength]),{showMoreRepliesButton,showMoreReplies,toggleReplies:useCallback(()=>{setShowMoreReplies(prev=>!prev)},[]),buttonText:useMemo(()=>showMoreReplies?intl.formatMessage(messages.hideReplies):intl.formatMessage(messages.showMoreReplies,{count:repliesLength-1}),[showMoreReplies,intl,repliesLength])}};export{useShowMoreReplies};
|
|
@@ -1,17 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
var t = ({ overscan: t, replies: n, parentRef: r, estimateMessageHeight: i }) => {
|
|
3
|
-
let a = e({
|
|
4
|
-
count: n.length,
|
|
5
|
-
getScrollElement: () => r.current,
|
|
6
|
-
getItemKey: (e) => `message-${e}-${n[e]?.id}`,
|
|
7
|
-
estimateSize: () => i,
|
|
8
|
-
measureElement: (e) => e.getBoundingClientRect().height,
|
|
9
|
-
overscan: t
|
|
10
|
-
});
|
|
11
|
-
return {
|
|
12
|
-
virtualItems: a.getVirtualItems(),
|
|
13
|
-
totalSize: a.getTotalSize(),
|
|
14
|
-
measureElement: a.measureElement
|
|
15
|
-
};
|
|
16
|
-
};
|
|
17
|
-
export { t as useVirtualizedMessages };
|
|
1
|
+
import{useVirtualizer}from"@tanstack/react-virtual";var useVirtualizedMessages=({overscan,replies,parentRef,estimateMessageHeight})=>{let virtualizer=useVirtualizer({count:replies.length,getScrollElement:()=>parentRef.current,getItemKey:index=>`message-${index}-${replies[index]?.id}`,estimateSize:()=>estimateMessageHeight,measureElement:element=>element.getBoundingClientRect().height,overscan});return{virtualItems:virtualizer.getVirtualItems(),totalSize:virtualizer.getTotalSize(),measureElement:virtualizer.measureElement}};export{useVirtualizedMessages};
|
|
@@ -1,61 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import "./consts.js";
|
|
3
|
-
import { useAutoScroll as t } from "./hooks/useAutoScroll.js";
|
|
4
|
-
import { useShowMoreReplies as n } from "./hooks/useShowMoreReplies.js";
|
|
5
|
-
import { useVirtualizedMessages as r } from "./hooks/useVirtualizedMessages.js";
|
|
6
|
-
import { n as i, t as a } from "../../../../chunks/virtualized-messages.js";
|
|
7
|
-
import { TextButton as o, useIsEllipsized as s } from "@box/blueprint-web";
|
|
8
|
-
import { useEffect as c, useMemo as l, useRef as u } from "react";
|
|
9
|
-
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
10
|
-
var p = ({ messages: p, onDelete: m, onAvatarClick: h, onOverflowChange: g, isDeleteAllowed: _ = !0 }) => {
|
|
11
|
-
let v = u(null), y = s(v), b = l(() => p[0], [p]), x = l(() => p.slice(1), [p]), { handleScroll: S } = t({
|
|
12
|
-
messageCount: p.length,
|
|
13
|
-
containerRef: v
|
|
14
|
-
}), { showMoreRepliesButton: C, showMoreReplies: w, toggleReplies: T, buttonText: E } = n({ repliesLength: x.length }), { virtualItems: D, totalSize: O, measureElement: k } = r({
|
|
15
|
-
overscan: 2,
|
|
16
|
-
replies: x,
|
|
17
|
-
parentRef: v,
|
|
18
|
-
estimateMessageHeight: 80
|
|
19
|
-
});
|
|
20
|
-
return c(() => {
|
|
21
|
-
g(y);
|
|
22
|
-
}, [y, g]), /* @__PURE__ */ f("div", {
|
|
23
|
-
ref: v,
|
|
24
|
-
className: i.messagesView,
|
|
25
|
-
onScroll: S,
|
|
26
|
-
children: [
|
|
27
|
-
b && /* @__PURE__ */ d(e, {
|
|
28
|
-
textMessageData: b,
|
|
29
|
-
isDeleteAllowed: _,
|
|
30
|
-
onAvatarClick: h,
|
|
31
|
-
onDelete: m
|
|
32
|
-
}),
|
|
33
|
-
C && /* @__PURE__ */ d(o, {
|
|
34
|
-
className: i.moreRepliesButton,
|
|
35
|
-
onClick: T,
|
|
36
|
-
children: E
|
|
37
|
-
}),
|
|
38
|
-
x.length > 0 && /* @__PURE__ */ f("div", {
|
|
39
|
-
className: i.repliesContainer,
|
|
40
|
-
children: [/* @__PURE__ */ d("div", { className: i.threadIndicator }), w ? /* @__PURE__ */ d(a, {
|
|
41
|
-
isDeleteAllowed: _,
|
|
42
|
-
measureElement: k,
|
|
43
|
-
messages: x,
|
|
44
|
-
onAvatarClick: h,
|
|
45
|
-
onDelete: m,
|
|
46
|
-
totalSize: O,
|
|
47
|
-
virtualItems: D
|
|
48
|
-
}) : /* @__PURE__ */ d("div", {
|
|
49
|
-
className: i.singleMessageWrapper,
|
|
50
|
-
children: /* @__PURE__ */ d(e, {
|
|
51
|
-
textMessageData: x[x.length - 1],
|
|
52
|
-
isDeleteAllowed: _,
|
|
53
|
-
onAvatarClick: h,
|
|
54
|
-
onDelete: m
|
|
55
|
-
})
|
|
56
|
-
})]
|
|
57
|
-
})
|
|
58
|
-
]
|
|
59
|
-
});
|
|
60
|
-
};
|
|
61
|
-
export { p as MessagesView };
|
|
1
|
+
import{t as TextMessage}from"../../../../chunks/text-message.js";import"./consts.js";import{useAutoScroll}from"./hooks/useAutoScroll.js";import{useShowMoreReplies}from"./hooks/useShowMoreReplies.js";import{useVirtualizedMessages}from"./hooks/useVirtualizedMessages.js";import{n as messages_view_module_default,t as VirtualizedMessages}from"../../../../chunks/virtualized-messages.js";import{TextButton,useIsEllipsized}from"@box/blueprint-web";import{useEffect,useMemo,useRef}from"react";import{jsx,jsxs}from"react/jsx-runtime";var MessagesView=({messages,onDelete,onAvatarClick,onOverflowChange,isDeleteAllowed=!0})=>{let containerRef=useRef(null),isOverflowing=useIsEllipsized(containerRef),rootMessage=useMemo(()=>messages[0],[messages]),replies=useMemo(()=>messages.slice(1),[messages]),{handleScroll}=useAutoScroll({messageCount:messages.length,containerRef}),{showMoreRepliesButton,showMoreReplies,toggleReplies,buttonText}=useShowMoreReplies({repliesLength:replies.length}),{virtualItems,totalSize,measureElement}=useVirtualizedMessages({overscan:2,replies,parentRef:containerRef,estimateMessageHeight:80});return useEffect(()=>{onOverflowChange(isOverflowing)},[isOverflowing,onOverflowChange]),jsxs(`div`,{ref:containerRef,className:messages_view_module_default.messagesView,onScroll:handleScroll,children:[rootMessage&&jsx(TextMessage,{textMessageData:rootMessage,isDeleteAllowed,onAvatarClick,onDelete}),showMoreRepliesButton&&jsx(TextButton,{className:messages_view_module_default.moreRepliesButton,onClick:toggleReplies,children:buttonText}),replies.length>0&&jsxs(`div`,{className:messages_view_module_default.repliesContainer,children:[jsx(`div`,{className:messages_view_module_default.threadIndicator}),showMoreReplies?jsx(VirtualizedMessages,{isDeleteAllowed,measureElement,messages:replies,onAvatarClick,onDelete,totalSize,virtualItems}):jsx(`div`,{className:messages_view_module_default.singleMessageWrapper,children:jsx(TextMessage,{textMessageData:replies[replies.length-1],isDeleteAllowed,onAvatarClick,onDelete})})]})]})};export{MessagesView};
|
|
@@ -1,12 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
var t = e({
|
|
3
|
-
hideReplies: {
|
|
4
|
-
id: "groupSharedFeatures.threadedAnnotations.hideReplies",
|
|
5
|
-
defaultMessage: "Hide replies"
|
|
6
|
-
},
|
|
7
|
-
showMoreReplies: {
|
|
8
|
-
id: "groupSharedFeatures.threadedAnnotations.showMoreReplies",
|
|
9
|
-
defaultMessage: "{count, plural, one {# more reply} other {# more replies}}"
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
export { t as default };
|
|
1
|
+
import{defineMessages}from"react-intl";var messages=defineMessages({hideReplies:{id:`groupSharedFeatures.threadedAnnotations.hideReplies`,defaultMessage:`Hide replies`},showMoreReplies:{id:`groupSharedFeatures.threadedAnnotations.showMoreReplies`,defaultMessage:`{count, plural, one {# more reply} other {# more replies}}`}});export{messages as default};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
export { e as VirtualizedMessages };
|
|
1
|
+
import{t as VirtualizedMessages}from"../../../../chunks/virtualized-messages.js";export{VirtualizedMessages};
|
|
@@ -1,58 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { t } from "../../../../chunks/mention-component.js";
|
|
3
|
-
import { Text as n } from "@box/blueprint-web";
|
|
4
|
-
import { useIntl as r } from "react-intl";
|
|
5
|
-
import { jsx as i } from "react/jsx-runtime";
|
|
6
|
-
var a = ({ node: e, index: n, paragraphIndex: r }) => {
|
|
7
|
-
let a = `mention-${e.attrs.mentionedUserId}-${r}-${n}`;
|
|
8
|
-
return /* @__PURE__ */ i(t, {
|
|
9
|
-
authorId: e.attrs.authorId,
|
|
10
|
-
mentionedUserEmail: e.attrs.mentionedUserEmail,
|
|
11
|
-
mentionedUserId: e.attrs.mentionedUserId,
|
|
12
|
-
mentionedUserName: e.attrs.mentionedUserName,
|
|
13
|
-
mentionId: e.attrs.mentionId
|
|
14
|
-
}, a);
|
|
15
|
-
}, o = ({ node: t, index: r, paragraphIndex: a, intl: o }) => {
|
|
16
|
-
let s = `text-${t.text.substring(0, 20)}-${a}-${r}`;
|
|
17
|
-
return /* @__PURE__ */ i(n, {
|
|
18
|
-
"aria-label": o.formatMessage(e.textMessageAriaLabel),
|
|
19
|
-
as: "span",
|
|
20
|
-
color: "textOnLightDefault",
|
|
21
|
-
variant: "bodyDefault",
|
|
22
|
-
children: t.text
|
|
23
|
-
}, s);
|
|
24
|
-
}, s = ({ content: e, paragraphIndex: t, intl: n }) => e.map((e, r) => {
|
|
25
|
-
switch (e.type) {
|
|
26
|
-
case "mention": return a({
|
|
27
|
-
node: e,
|
|
28
|
-
index: r,
|
|
29
|
-
paragraphIndex: t
|
|
30
|
-
});
|
|
31
|
-
case "text": return o({
|
|
32
|
-
node: e,
|
|
33
|
-
index: r,
|
|
34
|
-
paragraphIndex: t,
|
|
35
|
-
intl: n
|
|
36
|
-
});
|
|
37
|
-
default: return [];
|
|
38
|
-
}
|
|
39
|
-
}), c = ({ paragraph: e, index: t, intl: r }) => {
|
|
40
|
-
let a = e.content || [], o = `paragraph-${t}`;
|
|
41
|
-
return /* @__PURE__ */ i(n, {
|
|
42
|
-
as: "p",
|
|
43
|
-
variant: "bodyDefault",
|
|
44
|
-
children: a.length > 0 ? s({
|
|
45
|
-
content: a,
|
|
46
|
-
paragraphIndex: t,
|
|
47
|
-
intl: r
|
|
48
|
-
}) : /* @__PURE__ */ i("br", {})
|
|
49
|
-
}, o);
|
|
50
|
-
}, l = ({ messageObject: e }) => {
|
|
51
|
-
let t = r(), { content: n } = e;
|
|
52
|
-
return !n && n.length === 0 ? null : n.map((e, n) => c({
|
|
53
|
-
paragraph: e,
|
|
54
|
-
index: n,
|
|
55
|
-
intl: t
|
|
56
|
-
}));
|
|
57
|
-
};
|
|
58
|
-
export { l as MessageRenderer };
|
|
1
|
+
import messages from"../../messages.js";import{t as MentionComponent}from"../../../../chunks/mention-component.js";import{Text}from"@box/blueprint-web";import{useIntl}from"react-intl";import{jsx}from"react/jsx-runtime";var renderMentionNode=({node,index,paragraphIndex})=>{let key=`mention-${node.attrs.mentionedUserId}-${paragraphIndex}-${index}`;return jsx(MentionComponent,{authorId:node.attrs.authorId,mentionedUserEmail:node.attrs.mentionedUserEmail,mentionedUserId:node.attrs.mentionedUserId,mentionedUserName:node.attrs.mentionedUserName,mentionId:node.attrs.mentionId},key)},renderTextNode=({node,index,paragraphIndex,intl})=>{let key=`text-${node.text.substring(0,20)}-${paragraphIndex}-${index}`;return jsx(Text,{"aria-label":intl.formatMessage(messages.textMessageAriaLabel),as:`span`,color:`textOnLightDefault`,variant:`bodyDefault`,children:node.text},key)},renderParagraphContent=({content,paragraphIndex,intl})=>content.map((node,index)=>{switch(node.type){case`mention`:return renderMentionNode({node,index,paragraphIndex});case`text`:return renderTextNode({node,index,paragraphIndex,intl});default:return[]}}),renderParagraphNode=({paragraph,index,intl})=>{let content=paragraph.content||[],key=`paragraph-${index}`;return jsx(Text,{as:`p`,variant:`bodyDefault`,children:content.length>0?renderParagraphContent({content,paragraphIndex:index,intl}):jsx(`br`,{})},key)},MessageRenderer=({messageObject})=>{let intl=useIntl(),{content}=messageObject;return!content&&content.length===0?null:content.map((paragraph,index)=>renderParagraphNode({paragraph,index,intl}))};export{MessageRenderer};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
export { e as TextMessage };
|
|
1
|
+
import{t as TextMessage}from"../../../../chunks/text-message.js";export{TextMessage};
|
|
@@ -1,5 +1 @@
|
|
|
1
|
-
var
|
|
2
|
-
let t = e.replace(/[[({<]+.*[\])}>]+/g, "").trim();
|
|
3
|
-
return (t.slice(0, 1) + t.slice(t.lastIndexOf(" ") + 1, t.lastIndexOf(" ") + 2)).toUpperCase();
|
|
4
|
-
};
|
|
5
|
-
export { e as getInitials };
|
|
1
|
+
var getInitials=name=>{let cleanedName=name.replace(/[[({<]+.*[\])}>]+/g,``).trim();return(cleanedName.slice(0,1)+cleanedName.slice(cleanedName.lastIndexOf(` `)+1,cleanedName.lastIndexOf(` `)+2)).toUpperCase()};export{getInitials};
|
|
@@ -1,12 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
var t = e({
|
|
3
|
-
userAvatar: {
|
|
4
|
-
id: "groupSharedFeatures.threadedAnnotations.userAvatar",
|
|
5
|
-
defaultMessage: "User avatar"
|
|
6
|
-
},
|
|
7
|
-
userAvatarButtonAriaLabel: {
|
|
8
|
-
id: "groupSharedFeatures.threadedAnnotations.userAvatarButtonAriaLabel",
|
|
9
|
-
defaultMessage: "View user profile button"
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
export { t as default };
|
|
1
|
+
import{defineMessages}from"react-intl";var messages=defineMessages({userAvatar:{id:`groupSharedFeatures.threadedAnnotations.userAvatar`,defaultMessage:`User avatar`},userAvatarButtonAriaLabel:{id:`groupSharedFeatures.threadedAnnotations.userAvatarButtonAriaLabel`,defaultMessage:`View user profile button`}});export{messages as default};
|
|
@@ -1,31 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import t from "./messages.js";
|
|
3
|
-
import { Avatar as n, ButtonWrapper as r, IconBadge as i } from "@box/blueprint-web";
|
|
4
|
-
import { useIntl as a } from "react-intl";
|
|
5
|
-
import { jsx as o } from "react/jsx-runtime";
|
|
6
|
-
var s = ({ user: r }) => {
|
|
7
|
-
let { name: s, isExternalUser: c, id: l, avatarUrl: u } = r, { formatMessage: d } = a(), f = e(s), p = /* @__PURE__ */ o(n, {
|
|
8
|
-
alt: d(t.userAvatar),
|
|
9
|
-
colorIndex: l,
|
|
10
|
-
size: "large",
|
|
11
|
-
src: u,
|
|
12
|
-
text: f
|
|
13
|
-
});
|
|
14
|
-
return c ? /* @__PURE__ */ o(i, {
|
|
15
|
-
offset: {
|
|
16
|
-
right: -4,
|
|
17
|
-
bottom: -2
|
|
18
|
-
},
|
|
19
|
-
size: "medium",
|
|
20
|
-
variant: "collaborator-external",
|
|
21
|
-
children: p
|
|
22
|
-
}) : p;
|
|
23
|
-
}, c = ({ user: e, onClick: n }) => {
|
|
24
|
-
let { formatMessage: i } = a();
|
|
25
|
-
return /* @__PURE__ */ o(r, {
|
|
26
|
-
"aria-label": i(t.userAvatarButtonAriaLabel),
|
|
27
|
-
onClick: () => n(e.id),
|
|
28
|
-
children: /* @__PURE__ */ o(s, { user: e })
|
|
29
|
-
});
|
|
30
|
-
};
|
|
31
|
-
export { s as UserAvatar, c as UserAvatarButton };
|
|
1
|
+
import{getInitials}from"./getInitials.js";import messages from"./messages.js";import{Avatar,ButtonWrapper,IconBadge}from"@box/blueprint-web";import{useIntl}from"react-intl";import{jsx}from"react/jsx-runtime";var UserAvatar=({user})=>{let{name,isExternalUser,id,avatarUrl}=user,{formatMessage}=useIntl(),initials=getInitials(name),avatar=jsx(Avatar,{alt:formatMessage(messages.userAvatar),colorIndex:id,size:`large`,src:avatarUrl,text:initials});return isExternalUser?jsx(IconBadge,{offset:{right:-4,bottom:-2},size:`medium`,variant:`collaborator-external`,children:avatar}):avatar},UserAvatarButton=({user,onClick})=>{let{formatMessage}=useIntl();return jsx(ButtonWrapper,{"aria-label":formatMessage(messages.userAvatarButtonAriaLabel),onClick:()=>onClick(user.id),children:jsx(UserAvatar,{user})})};export{UserAvatar,UserAvatarButton};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
export { e as AnnotationBadge };
|
|
1
|
+
import{t as AnnotationBadge}from"../../../../../chunks/annotation-badge.js";export{AnnotationBadge};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
export { e as AnnotationBadge };
|
|
1
|
+
import{t as AnnotationBadge}from"../../../../../chunks/annotation-badge.js";export{AnnotationBadge};
|
|
@@ -1,12 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
var t = e({
|
|
3
|
-
annotationPage: {
|
|
4
|
-
id: "groupSharedFeatures.threadedAnnotations.annotationPage",
|
|
5
|
-
defaultMessage: "Page {number}"
|
|
6
|
-
},
|
|
7
|
-
originalContentDeleted: {
|
|
8
|
-
id: "groupSharedFeatures.threadedAnnotations.originalContentDeleted",
|
|
9
|
-
defaultMessage: "Original content was deleted"
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
|
-
export { t as default };
|
|
1
|
+
import{defineMessages}from"react-intl";var messages=defineMessages({annotationPage:{id:`groupSharedFeatures.threadedAnnotations.annotationPage`,defaultMessage:`Page {number}`},originalContentDeleted:{id:`groupSharedFeatures.threadedAnnotations.originalContentDeleted`,defaultMessage:`Original content was deleted`}});export{messages as default};
|
|
@@ -1,23 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
var t = (t, n, r) => ({
|
|
3
|
-
char: n,
|
|
4
|
-
pluginKey: new e(t),
|
|
5
|
-
allowSpaces: !0,
|
|
6
|
-
allow: (e) => {
|
|
7
|
-
let { from: t, to: n } = e.range, r = e.state.doc.textBetween(t + 1, n, null, ""), i = r.startsWith(" "), a = r.includes(" ");
|
|
8
|
-
return !i && !a;
|
|
9
|
-
},
|
|
10
|
-
render: () => ({
|
|
11
|
-
onStart: (e) => {
|
|
12
|
-
r?.onSuggestionStart(e);
|
|
13
|
-
},
|
|
14
|
-
onUpdate: (e) => {
|
|
15
|
-
r?.onSuggestionUpdate(e);
|
|
16
|
-
},
|
|
17
|
-
onKeyDown: (e) => e.event.key === "Escape" ? (r?.onSuggestionExit(), !0) : r?.onSuggestionKeyDown(e) ?? !1,
|
|
18
|
-
onExit: () => {
|
|
19
|
-
r?.onSuggestionExit();
|
|
20
|
-
}
|
|
21
|
-
})
|
|
22
|
-
});
|
|
23
|
-
export { t as createSuggestionOptions };
|
|
1
|
+
import{t as PluginKey}from"../../../../../../../chunks/dist.js";var createSuggestionOptions=(pluginKeyName,char,callbacks)=>({char,pluginKey:new PluginKey(pluginKeyName),allowSpaces:!0,allow:props=>{let{from,to}=props.range,text=props.state.doc.textBetween(from+1,to,null,``),isSpaceFirstCharacter=text.startsWith(` `),hasDoubleSpace=text.includes(` `);return!isSpaceFirstCharacter&&!hasDoubleSpace},render:()=>({onStart:props=>{callbacks?.onSuggestionStart(props)},onUpdate:props=>{callbacks?.onSuggestionUpdate(props)},onKeyDown:props=>props.event.key===`Escape`?(callbacks?.onSuggestionExit(),!0):callbacks?.onSuggestionKeyDown(props)??!1,onExit:()=>{callbacks?.onSuggestionExit()}})});export{createSuggestionOptions};
|
package/dist/esm/lib/components/v2/message-editor/editor-extensions/custom-mention/custom-mention.js
CHANGED
|
@@ -1,59 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { jsx as t } from "react/jsx-runtime";
|
|
3
|
-
import { NodeViewWrapper as n, ReactNodeViewRenderer as r } from "@tiptap/react";
|
|
4
|
-
import { mergeAttributes as i } from "@tiptap/core";
|
|
5
|
-
import a from "@tiptap/extension-mention";
|
|
6
|
-
var o = ({ node: r }) => {
|
|
7
|
-
let { mentionedUserName: i, mentionedUserId: a, mentionedUserEmail: o, mentionId: s } = r.attrs;
|
|
8
|
-
return /* @__PURE__ */ t(n, {
|
|
9
|
-
as: "span",
|
|
10
|
-
children: /* @__PURE__ */ t(e, {
|
|
11
|
-
mentionedUserEmail: o,
|
|
12
|
-
mentionedUserId: a,
|
|
13
|
-
mentionedUserName: i,
|
|
14
|
-
mentionId: s
|
|
15
|
-
})
|
|
16
|
-
});
|
|
17
|
-
}, s = a.extend({
|
|
18
|
-
addAttributes() {
|
|
19
|
-
return {
|
|
20
|
-
mentionedUserId: {
|
|
21
|
-
default: null,
|
|
22
|
-
parseHTML: (e) => e.getAttribute("data-mentioned-user-id"),
|
|
23
|
-
renderHTML: (e) => e.mentionedUserId ? { "data-mentioned-user-id": e.mentionedUserId } : {}
|
|
24
|
-
},
|
|
25
|
-
mentionedUserName: {
|
|
26
|
-
default: null,
|
|
27
|
-
parseHTML: (e) => e.getAttribute("data-mentioned-user-name"),
|
|
28
|
-
renderHTML: (e) => e.mentionedUserName ? { "data-mentioned-user-name": e.mentionedUserName } : {}
|
|
29
|
-
},
|
|
30
|
-
mentionedUserEmail: {
|
|
31
|
-
default: null,
|
|
32
|
-
parseHTML: (e) => e.getAttribute("data-mentioned-user-email"),
|
|
33
|
-
renderHTML: (e) => e.mentionedUserEmail ? { "data-mentioned-user-email": e.mentionedUserEmail } : {}
|
|
34
|
-
},
|
|
35
|
-
mentionId: {
|
|
36
|
-
default: null,
|
|
37
|
-
parseHTML: (e) => e.getAttribute("data-mention-id"),
|
|
38
|
-
renderHTML: (e) => ({ "data-mention-id": e.mentionId })
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
},
|
|
42
|
-
addNodeView() {
|
|
43
|
-
return r(o);
|
|
44
|
-
},
|
|
45
|
-
renderHTML({ HTMLAttributes: e, node: t }) {
|
|
46
|
-
return [
|
|
47
|
-
"span",
|
|
48
|
-
i(this.options.HTMLAttributes, e, {
|
|
49
|
-
"data-component-type": "mention",
|
|
50
|
-
"data-mentioned-user-id": t.attrs.mentionedUserId,
|
|
51
|
-
"data-mentioned-user-name": t.attrs.mentionedUserName,
|
|
52
|
-
"data-mentioned-user-email": t.attrs.mentionedUserEmail,
|
|
53
|
-
"data-mention-id": t.attrs.mentionId
|
|
54
|
-
}),
|
|
55
|
-
`@${t.attrs.mentionedUserName}`
|
|
56
|
-
];
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
export { s as CustomMention };
|
|
1
|
+
import{t as MentionComponent}from"../../../../../../../chunks/mention-component.js";import{jsx}from"react/jsx-runtime";import{NodeViewWrapper,ReactNodeViewRenderer}from"@tiptap/react";import{mergeAttributes}from"@tiptap/core";import Mention from"@tiptap/extension-mention";var MentionNodeView=({node})=>{let{mentionedUserName,mentionedUserId,mentionedUserEmail,mentionId}=node.attrs;return jsx(NodeViewWrapper,{as:`span`,children:jsx(MentionComponent,{mentionedUserEmail,mentionedUserId,mentionedUserName,mentionId})})},CustomMention=Mention.extend({addAttributes(){return{mentionedUserId:{default:null,parseHTML:element=>element.getAttribute(`data-mentioned-user-id`),renderHTML:attributes=>attributes.mentionedUserId?{"data-mentioned-user-id":attributes.mentionedUserId}:{}},mentionedUserName:{default:null,parseHTML:element=>element.getAttribute(`data-mentioned-user-name`),renderHTML:attributes=>attributes.mentionedUserName?{"data-mentioned-user-name":attributes.mentionedUserName}:{}},mentionedUserEmail:{default:null,parseHTML:element=>element.getAttribute(`data-mentioned-user-email`),renderHTML:attributes=>attributes.mentionedUserEmail?{"data-mentioned-user-email":attributes.mentionedUserEmail}:{}},mentionId:{default:null,parseHTML:element=>element.getAttribute(`data-mention-id`),renderHTML:attributes=>({"data-mention-id":attributes.mentionId})}}},addNodeView(){return ReactNodeViewRenderer(MentionNodeView)},renderHTML({HTMLAttributes,node}){return[`span`,mergeAttributes(this.options.HTMLAttributes,HTMLAttributes,{"data-component-type":`mention`,"data-mentioned-user-id":node.attrs.mentionedUserId,"data-mentioned-user-name":node.attrs.mentionedUserName,"data-mentioned-user-email":node.attrs.mentionedUserEmail,"data-mention-id":node.attrs.mentionId}),`@${node.attrs.mentionedUserName}`]}});export{CustomMention};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
var
|
|
2
|
-
export { t as MENTION_CHAR, e as MENTION_PLUGIN_KEY, i as normalizeMentionPastedText, r as normalizeMentionTextInput };
|
|
1
|
+
var MENTION_PLUGIN_KEY=`mentionAt`,MENTION_CHAR=`@`,MENTION_JAPANESE_CHAR=`@`,normalizeMentionTextInput=(view,from,to,text)=>text===MENTION_JAPANESE_CHAR?(view.dispatch(view.state.tr.insertText(`@`,from,to)),!0):!1,normalizeMentionPastedText=text=>text.replaceAll(MENTION_JAPANESE_CHAR,`@`);export{MENTION_CHAR,MENTION_PLUGIN_KEY,normalizeMentionPastedText,normalizeMentionTextInput};
|
|
@@ -1,27 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
var r = /* @__PURE__ */ function(e) {
|
|
3
|
-
return e.ARROW_DOWN = "ArrowDown", e.ARROW_UP = "ArrowUp", e.ENTER = "Enter", e;
|
|
4
|
-
}({}), i = (r) => {
|
|
5
|
-
let [i, a] = n(!1), [o, s] = n(""), [c, l] = n(null);
|
|
6
|
-
return {
|
|
7
|
-
isActive: i,
|
|
8
|
-
query: o,
|
|
9
|
-
command: c,
|
|
10
|
-
suggestionCallbacks: t(() => ({
|
|
11
|
-
onSuggestionStart: (e) => {
|
|
12
|
-
a(!0), s(e.query), l(() => e.command);
|
|
13
|
-
},
|
|
14
|
-
onSuggestionUpdate: (e) => {
|
|
15
|
-
a(!0), s(e.query), l(() => e.command);
|
|
16
|
-
},
|
|
17
|
-
onSuggestionKeyDown: (e) => r.current ? e.event.key === "ArrowDown" ? (r.current.selectNext(), !0) : e.event.key === "ArrowUp" ? (r.current.selectPrevious(), !0) : e.event.key === "Enter" ? (r.current.selectItem(), !0) : !1 : !1,
|
|
18
|
-
onSuggestionExit: () => {
|
|
19
|
-
a(!1);
|
|
20
|
-
}
|
|
21
|
-
}), [r]),
|
|
22
|
-
close: e(() => {
|
|
23
|
-
a(!1), s(""), l(null);
|
|
24
|
-
}, [])
|
|
25
|
-
};
|
|
26
|
-
};
|
|
27
|
-
export { r as KeyEvents, i as useMentionState };
|
|
1
|
+
import{useCallback,useMemo,useState}from"react";var KeyEvents=function(KeyEvents){return KeyEvents.ARROW_DOWN=`ArrowDown`,KeyEvents.ARROW_UP=`ArrowUp`,KeyEvents.ENTER=`Enter`,KeyEvents}({}),useMentionState=userSelectorRef=>{let[isActive,setIsActive]=useState(!1),[query,setQuery]=useState(``),[command,setCommand]=useState(null);return{isActive,query,command,suggestionCallbacks:useMemo(()=>({onSuggestionStart:startParams=>{setIsActive(!0),setQuery(startParams.query),setCommand(()=>startParams.command)},onSuggestionUpdate:updateParams=>{setIsActive(!0),setQuery(updateParams.query),setCommand(()=>updateParams.command)},onSuggestionKeyDown:keyParams=>userSelectorRef.current?keyParams.event.key===`ArrowDown`?(userSelectorRef.current.selectNext(),!0):keyParams.event.key===`ArrowUp`?(userSelectorRef.current.selectPrevious(),!0):keyParams.event.key===`Enter`?(userSelectorRef.current.selectItem(),!0):!1:!1,onSuggestionExit:()=>{setIsActive(!1)}}),[userSelectorRef]),close:useCallback(()=>{setIsActive(!1),setQuery(``),setCommand(null)},[])}};export{KeyEvents,useMentionState};
|
|
@@ -1,13 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { jsx as t } from "react/jsx-runtime";
|
|
3
|
-
import { NodeViewContent as n, NodeViewWrapper as r, ReactNodeViewRenderer as i } from "@tiptap/react";
|
|
4
|
-
import a from "@tiptap/extension-paragraph";
|
|
5
|
-
var o = () => /* @__PURE__ */ t(r, { children: /* @__PURE__ */ t(e, {
|
|
6
|
-
as: "div",
|
|
7
|
-
color: "textOnLightDefault",
|
|
8
|
-
variant: "bodyDefault",
|
|
9
|
-
children: /* @__PURE__ */ t(n, {})
|
|
10
|
-
}) }), s = a.extend({ addNodeView() {
|
|
11
|
-
return i(o);
|
|
12
|
-
} });
|
|
13
|
-
export { s as CustomParagraph };
|
|
1
|
+
import{Text}from"@box/blueprint-web";import{jsx}from"react/jsx-runtime";import{NodeViewContent,NodeViewWrapper,ReactNodeViewRenderer}from"@tiptap/react";import Paragraph from"@tiptap/extension-paragraph";var ParagraphComponent=()=>jsx(NodeViewWrapper,{children:jsx(Text,{as:`div`,color:`textOnLightDefault`,variant:`bodyDefault`,children:jsx(NodeViewContent,{})})}),CustomParagraph=Paragraph.extend({addNodeView(){return ReactNodeViewRenderer(ParagraphComponent)}});export{CustomParagraph};
|
|
@@ -1,24 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
var r = 5e3, i = (i, a, o = r) => {
|
|
3
|
-
let [s, c] = n(null), l = e(() => {
|
|
4
|
-
if (!i || i.isDestroyed) return;
|
|
5
|
-
let e = i.getText().length;
|
|
6
|
-
c({
|
|
7
|
-
count: e,
|
|
8
|
-
excess: Math.max(0, e - o),
|
|
9
|
-
maxCount: o
|
|
10
|
-
});
|
|
11
|
-
}, [i, o]);
|
|
12
|
-
return t(() => {
|
|
13
|
-
if (!i) {
|
|
14
|
-
c(null);
|
|
15
|
-
return;
|
|
16
|
-
}
|
|
17
|
-
return l(), i.on("update", l), () => {
|
|
18
|
-
i.off("update", l);
|
|
19
|
-
};
|
|
20
|
-
}, [i, l]), t(() => {
|
|
21
|
-
!i || a === void 0 || queueMicrotask(l);
|
|
22
|
-
}, [a]), s;
|
|
23
|
-
};
|
|
24
|
-
export { i as useCharacterLimit };
|
|
1
|
+
import{useCallback,useEffect,useState}from"react";var CHARACTER_LIMIT=5e3,useCharacterLimit=(editor,initialContent,maxCount=CHARACTER_LIMIT)=>{let[state,setState]=useState(null),updateCount=useCallback(()=>{if(!editor||editor.isDestroyed)return;let count=editor.getText().length;setState({count,excess:Math.max(0,count-maxCount),maxCount})},[editor,maxCount]);return useEffect(()=>{if(!editor){setState(null);return}return updateCount(),editor.on(`update`,updateCount),()=>{editor.off(`update`,updateCount)}},[editor,updateCount]),useEffect(()=>{!editor||initialContent===void 0||queueMicrotask(updateCount)},[initialContent]),state};export{useCharacterLimit};
|
|
@@ -1,21 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
var r = 32, i = 10, a = 2, o = 2, s = (s, c) => {
|
|
3
|
-
let [l, u] = n(!1), [d, f] = n(!1), [p, m] = n(!0), h = t(!1);
|
|
4
|
-
return e(() => {
|
|
5
|
-
if (!s.current) return;
|
|
6
|
-
let e = s.current, t = e.firstElementChild ?? e, n = () => {
|
|
7
|
-
let n = t.scrollHeight, s = h.current, l = (c?.state.doc.childCount ?? 0) > 1 || n > (s ? r - i : 42);
|
|
8
|
-
l !== h.current && (h.current = l, u(l)), f(e.scrollHeight - e.clientHeight > a), m(e.scrollTop + e.clientHeight >= e.scrollHeight - o);
|
|
9
|
-
}, l = () => requestAnimationFrame(n);
|
|
10
|
-
n();
|
|
11
|
-
let d = new ResizeObserver(n);
|
|
12
|
-
return d.observe(t), e.addEventListener("scroll", n), c?.on("update", l), () => {
|
|
13
|
-
c?.off("update", l), d.disconnect(), e.removeEventListener("scroll", n);
|
|
14
|
-
};
|
|
15
|
-
}, [s, c]), {
|
|
16
|
-
exceedsSingleLine: l,
|
|
17
|
-
hasScroll: d,
|
|
18
|
-
isAtBottom: p
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
export { s as useEditorContainerState };
|
|
1
|
+
import{useEffect,useRef,useState}from"react";var SINGLE_LINE_HEIGHT=32,HYSTERESIS=10,SCROLL_THRESHOLD=2,SCROLL_BOTTOM_THRESHOLD=2,useEditorContainerState=(containerRef,editor)=>{let[exceedsSingleLine,setExceedsSingleLine]=useState(!1),[hasScroll,setHasScroll]=useState(!1),[isAtBottom,setIsAtBottom]=useState(!0),exceedsRef=useRef(!1);return useEffect(()=>{if(!containerRef.current)return;let container=containerRef.current,contentEl=container.firstElementChild??container,check=()=>{let contentHeight=contentEl.scrollHeight,currentlyExceeds=exceedsRef.current,nextExceeds=(editor?.state.doc.childCount??0)>1||contentHeight>(currentlyExceeds?SINGLE_LINE_HEIGHT-HYSTERESIS:42);nextExceeds!==exceedsRef.current&&(exceedsRef.current=nextExceeds,setExceedsSingleLine(nextExceeds)),setHasScroll(container.scrollHeight-container.clientHeight>SCROLL_THRESHOLD),setIsAtBottom(container.scrollTop+container.clientHeight>=container.scrollHeight-SCROLL_BOTTOM_THRESHOLD)},onEditorUpdate=()=>requestAnimationFrame(check);check();let observer=new ResizeObserver(check);return observer.observe(contentEl),container.addEventListener(`scroll`,check),editor?.on(`update`,onEditorUpdate),()=>{editor?.off(`update`,onEditorUpdate),observer.disconnect(),container.removeEventListener(`scroll`,check)}},[containerRef,editor]),{exceedsSingleLine,hasScroll,isAtBottom}};export{useEditorContainerState};
|