@box/threaded-annotations 4.1.8 → 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,87 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { MessageEditor as t } from "../esm/lib/components/v2/message-editor/message-editor.js";
|
|
3
|
-
import { ThreadViewState as n, ThreadedAnnotationsProvider as r, useThreadedAnnotationsContext as i } from "../esm/lib/v2/threaded-annotations-context.js";
|
|
4
|
-
import { t as a } from "./messages-view.js";
|
|
5
|
-
import { buildMentionContent as o } from "../esm/lib/v2/utils/build-mention-content.js";
|
|
6
|
-
import s from "clsx";
|
|
7
|
-
import { useCallback as c, useEffect as l, useMemo as u, useRef as d } from "react";
|
|
8
|
-
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
9
|
-
import '../styles/threaded-annotations2.css';var m = {
|
|
10
|
-
threadedAnnotations: "_threadedAnnotations_16hhz_1",
|
|
11
|
-
expandable: "_expandable_16hhz_10",
|
|
12
|
-
annotations: "_annotations_16hhz_18",
|
|
13
|
-
highlighted: "_highlighted_16hhz_18"
|
|
14
|
-
}, h = ({ messages: r, isResolved: h = !1, resolvedBy: g, resolvedAt: _, maxCharacterCount: v, onDelete: y, onThreadDelete: b, onAvatarClick: x, onCopyLink: S, onEdit: C, onEditError: w, onResolve: T, onUnresolve: E, onPost: D, onPostError: O, userSelectorProps: k, onEditorOpenChange: A, annotationTarget: j, onAnnotationBadgeClick: M, originalContentDeleted: N, isHighlighted: P = !1, autoFocusReplyEditor: F = !0 }) => {
|
|
15
|
-
let { viewState: I, dispatch: L, editingMessageId: R, replyMention: z, isReplyDisabled: B, isAnnotations: V } = i(), H = d(null), U = I !== n.Collapsed, W = r.length > 2, G = I === n.Collapsed && (W || !B && !h);
|
|
16
|
-
l(() => {
|
|
17
|
-
R && !r.some((e) => e.id === R) && L({ type: "CLEAR_EDIT" });
|
|
18
|
-
}, [
|
|
19
|
-
R,
|
|
20
|
-
r,
|
|
21
|
-
L
|
|
22
|
-
]), l(() => {
|
|
23
|
-
A?.(U);
|
|
24
|
-
}, [U, A]), l(() => {
|
|
25
|
-
if (!U) return;
|
|
26
|
-
let t = `[${Object.keys(e)[0]}]`, n = (e) => {
|
|
27
|
-
let n = e.target;
|
|
28
|
-
H.current?.contains(n) || document.querySelector(t)?.contains(n) || L({ type: "COLLAPSE" });
|
|
29
|
-
};
|
|
30
|
-
return document.addEventListener("mousedown", n), () => document.removeEventListener("mousedown", n);
|
|
31
|
-
}, [U, L]);
|
|
32
|
-
let K = r.length === 0, q = c(() => L({ type: "CLEAR_MENTION" }), [L]), J = u(() => z ? o(z) : null, [z]), Y = c((e) => {
|
|
33
|
-
if (!G) return;
|
|
34
|
-
let t = e.target;
|
|
35
|
-
!e.currentTarget.contains(t) || t.closest("[data-no-expand]") || L({ type: "EXPAND" });
|
|
36
|
-
}, [G, L]);
|
|
37
|
-
return V && K ? /* @__PURE__ */ f(t, {
|
|
38
|
-
isFirstAnnotation: !0,
|
|
39
|
-
maxCharacterCount: v,
|
|
40
|
-
onPost: D,
|
|
41
|
-
onPostError: O,
|
|
42
|
-
onPostSuccess: q,
|
|
43
|
-
userSelectorProps: k
|
|
44
|
-
}) : /* @__PURE__ */ p("div", {
|
|
45
|
-
ref: H,
|
|
46
|
-
className: s(m.threadedAnnotations, G && m.expandable, V && m.annotations, P && m.highlighted),
|
|
47
|
-
"data-thread-expandable": G ? !0 : void 0,
|
|
48
|
-
"data-thread-highlighted": P ? !0 : void 0,
|
|
49
|
-
onClick: G ? Y : void 0,
|
|
50
|
-
children: [/* @__PURE__ */ f(a, {
|
|
51
|
-
messages: r,
|
|
52
|
-
isResolved: h,
|
|
53
|
-
resolvedBy: g,
|
|
54
|
-
resolvedAt: _,
|
|
55
|
-
maxCharacterCount: v,
|
|
56
|
-
onDelete: y,
|
|
57
|
-
onThreadDelete: b,
|
|
58
|
-
onAvatarClick: x,
|
|
59
|
-
onCopyLink: S,
|
|
60
|
-
onEdit: C,
|
|
61
|
-
onEditError: w,
|
|
62
|
-
onResolve: T,
|
|
63
|
-
onUnresolve: E,
|
|
64
|
-
userSelectorProps: k,
|
|
65
|
-
annotationTarget: j,
|
|
66
|
-
onAnnotationBadgeClick: M,
|
|
67
|
-
originalContentDeleted: N
|
|
68
|
-
}), I === n.Composing && /* @__PURE__ */ f(t, {
|
|
69
|
-
autoFocus: F,
|
|
70
|
-
initialContent: J,
|
|
71
|
-
maxCharacterCount: v,
|
|
72
|
-
onPost: D,
|
|
73
|
-
onPostError: O,
|
|
74
|
-
onPostSuccess: q,
|
|
75
|
-
isReply: !0,
|
|
76
|
-
userSelectorProps: k
|
|
77
|
-
})]
|
|
78
|
-
});
|
|
79
|
-
}, g = (e) => /* @__PURE__ */ f(r, {
|
|
80
|
-
defaultExpanded: e.defaultExpanded || e.messages.length === 0,
|
|
81
|
-
isReplyDisabled: e.isReplyDisabled || e.isResolved,
|
|
82
|
-
isEditDisabled: e.isEditDisabled || e.isResolved,
|
|
83
|
-
isAnnotations: e.isAnnotations,
|
|
84
|
-
collapsed: e.collapsed,
|
|
85
|
-
children: /* @__PURE__ */ f(h, { ...e })
|
|
86
|
-
});
|
|
87
|
-
export { g as t };
|
|
1
|
+
import{THREADED_ANNOTATIONS_PORTAL}from"../esm/lib/v2/constants.js";import{MessageEditor}from"../esm/lib/components/v2/message-editor/message-editor.js";import{ThreadViewState,ThreadedAnnotationsProvider,useThreadedAnnotationsContext}from"../esm/lib/v2/threaded-annotations-context.js";import{t as MessagesView}from"./messages-view.js";import{buildMentionContent}from"../esm/lib/v2/utils/build-mention-content.js";import clsx from"clsx";import{useCallback,useEffect,useMemo,useRef}from"react";import{jsx,jsxs}from"react/jsx-runtime";import '../styles/threaded-annotations2.css';var threaded_annotations_module_default={threadedAnnotations:`_threadedAnnotations_16hhz_1`,expandable:`_expandable_16hhz_10`,annotations:`_annotations_16hhz_18`,highlighted:`_highlighted_16hhz_18`},ThreadedAnnotationsContent=({messages:messageList,isResolved=!1,resolvedBy,resolvedAt,maxCharacterCount,onDelete,onThreadDelete,onAvatarClick,onCopyLink,onEdit,onEditError,onResolve,onUnresolve,onPost,onPostError,userSelectorProps,onEditorOpenChange,annotationTarget,onAnnotationBadgeClick,originalContentDeleted,isHighlighted=!1,autoFocusReplyEditor=!0})=>{let{viewState,dispatch,editingMessageId,replyMention,isReplyDisabled,isAnnotations}=useThreadedAnnotationsContext(),containerRef=useRef(null),isExpanded=viewState!==ThreadViewState.Collapsed,hasHiddenReplies=messageList.length>2,isExpandable=viewState===ThreadViewState.Collapsed&&(hasHiddenReplies||!isReplyDisabled&&!isResolved);useEffect(()=>{editingMessageId&&!messageList.some(message=>message.id===editingMessageId)&&dispatch({type:`CLEAR_EDIT`})},[editingMessageId,messageList,dispatch]),useEffect(()=>{onEditorOpenChange?.(isExpanded)},[isExpanded,onEditorOpenChange]),useEffect(()=>{if(!isExpanded)return;let portalSelector=`[${Object.keys(THREADED_ANNOTATIONS_PORTAL)[0]}]`,handleClickOutside=e=>{let target=e.target;containerRef.current?.contains(target)||document.querySelector(portalSelector)?.contains(target)||dispatch({type:`COLLAPSE`})};return document.addEventListener(`mousedown`,handleClickOutside),()=>document.removeEventListener(`mousedown`,handleClickOutside)},[isExpanded,dispatch]);let hasNoMessages=messageList.length===0,handleClearMention=useCallback(()=>dispatch({type:`CLEAR_MENTION`}),[dispatch]),initialReplyContent=useMemo(()=>replyMention?buildMentionContent(replyMention):null,[replyMention]),handleClick=useCallback(e=>{if(!isExpandable)return;let target=e.target;!e.currentTarget.contains(target)||target.closest(`[data-no-expand]`)||dispatch({type:`EXPAND`})},[isExpandable,dispatch]);return isAnnotations&&hasNoMessages?jsx(MessageEditor,{isFirstAnnotation:!0,maxCharacterCount,onPost,onPostError,onPostSuccess:handleClearMention,userSelectorProps}):jsxs(`div`,{ref:containerRef,className:clsx(threaded_annotations_module_default.threadedAnnotations,isExpandable&&threaded_annotations_module_default.expandable,isAnnotations&&threaded_annotations_module_default.annotations,isHighlighted&&threaded_annotations_module_default.highlighted),"data-thread-expandable":isExpandable?!0:void 0,"data-thread-highlighted":isHighlighted?!0:void 0,onClick:isExpandable?handleClick:void 0,children:[jsx(MessagesView,{messages:messageList,isResolved,resolvedBy,resolvedAt,maxCharacterCount,onDelete,onThreadDelete,onAvatarClick,onCopyLink,onEdit,onEditError,onResolve,onUnresolve,userSelectorProps,annotationTarget,onAnnotationBadgeClick,originalContentDeleted}),viewState===ThreadViewState.Composing&&jsx(MessageEditor,{autoFocus:autoFocusReplyEditor,initialContent:initialReplyContent,maxCharacterCount,onPost,onPostError,onPostSuccess:handleClearMention,isReply:!0,userSelectorProps})]})},ThreadedAnnotations=props=>jsx(ThreadedAnnotationsProvider,{defaultExpanded:props.defaultExpanded||props.messages.length===0,isReplyDisabled:props.isReplyDisabled||props.isResolved,isEditDisabled:props.isEditDisabled||props.isResolved,isAnnotations:props.isAnnotations,collapsed:props.collapsed,children:jsx(ThreadedAnnotationsContent,{...props})});export{ThreadedAnnotations as t};
|
|
@@ -1,36 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Checkbox as t, Text as n } from "@box/blueprint-web";
|
|
3
|
-
import r from "clsx";
|
|
4
|
-
import { useCallback as i } from "react";
|
|
5
|
-
import { useIntl as a } from "react-intl";
|
|
6
|
-
import { jsx as o, jsxs as s } from "react/jsx-runtime";
|
|
7
|
-
import { Play as c } from "@box/blueprint-web-assets/icons/MediumFilled";
|
|
8
|
-
import '../styles/timestamp-toggle.css';var l = {
|
|
9
|
-
timestampToggle: "_timestampToggle_11uz9_1",
|
|
10
|
-
timestampToggleDisabled: "_timestampToggleDisabled_11uz9_8",
|
|
11
|
-
label: "_label_11uz9_20"
|
|
12
|
-
}, u = ({ className: u, disabled: d, formattedTimestamp: f, isPressed: p, onChange: m }) => {
|
|
13
|
-
let h = a(), g = i((e) => {
|
|
14
|
-
m(e === !0);
|
|
15
|
-
}, [m]), _ = /* @__PURE__ */ s(n, {
|
|
16
|
-
as: "span",
|
|
17
|
-
className: l.label,
|
|
18
|
-
color: "textOnLightSecondary",
|
|
19
|
-
variant: "bodyDefaultSemibold",
|
|
20
|
-
children: [/* @__PURE__ */ o(c, {
|
|
21
|
-
color: "currentColor",
|
|
22
|
-
height: 16,
|
|
23
|
-
width: 16
|
|
24
|
-
}), f]
|
|
25
|
-
});
|
|
26
|
-
return /* @__PURE__ */ o(t.Item, {
|
|
27
|
-
"aria-label": h.formatMessage(e.timestampToggleLabel),
|
|
28
|
-
checked: p,
|
|
29
|
-
className: r(l.timestampToggle, { [l.timestampToggleDisabled]: d }, u),
|
|
30
|
-
disabled: d,
|
|
31
|
-
label: _,
|
|
32
|
-
onCheckedChange: g,
|
|
33
|
-
value: "video-timestamp"
|
|
34
|
-
});
|
|
35
|
-
};
|
|
36
|
-
export { u as t };
|
|
1
|
+
import messages from"../esm/lib/components/v2/message-editor/messages.js";import{Checkbox,Text}from"@box/blueprint-web";import clsx from"clsx";import{useCallback}from"react";import{useIntl}from"react-intl";import{jsx,jsxs}from"react/jsx-runtime";import{Play}from"@box/blueprint-web-assets/icons/MediumFilled";import '../styles/timestamp-toggle.css';var timestamp_toggle_module_default={timestampToggle:`_timestampToggle_11uz9_1`,timestampToggleDisabled:`_timestampToggleDisabled_11uz9_8`,label:`_label_11uz9_20`},TimestampToggle=({className,disabled,formattedTimestamp,isPressed,onChange})=>{let intl=useIntl(),handleCheckedChange=useCallback(nextChecked=>{onChange(nextChecked===!0)},[onChange]),label=jsxs(Text,{as:`span`,className:timestamp_toggle_module_default.label,color:`textOnLightSecondary`,variant:`bodyDefaultSemibold`,children:[jsx(Play,{color:`currentColor`,height:16,width:16}),formattedTimestamp]});return jsx(Checkbox.Item,{"aria-label":intl.formatMessage(messages.timestampToggleLabel),checked:isPressed,className:clsx(timestamp_toggle_module_default.timestampToggle,{[timestamp_toggle_module_default.timestampToggleDisabled]:disabled},className),disabled,label,onCheckedChange:handleCheckedChange,value:`video-timestamp`})};export{TimestampToggle as t};
|
|
@@ -1,30 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { jsx as t } from "react/jsx-runtime";
|
|
3
|
-
import '../styles/virtualized-messages.css';var n = {
|
|
4
|
-
messagesView: "_messagesView_h8l31_29",
|
|
5
|
-
moreRepliesButton: "_moreRepliesButton_h8l31_39",
|
|
6
|
-
repliesContainer: "_repliesContainer_h8l31_42",
|
|
7
|
-
threadIndicator: "_threadIndicator_h8l31_49",
|
|
8
|
-
virtualizedMessages: "_virtualizedMessages_h8l31_54",
|
|
9
|
-
messageWrapper: "_messageWrapper_h8l31_59",
|
|
10
|
-
singleMessageWrapper: "_singleMessageWrapper_h8l31_93"
|
|
11
|
-
}, r = ({ messages: r, totalSize: i, virtualItems: a, measureElement: o, onDelete: s, onAvatarClick: c, isDeleteAllowed: l }) => /* @__PURE__ */ t("div", {
|
|
12
|
-
className: n.virtualizedMessages,
|
|
13
|
-
style: { height: `${i}px` },
|
|
14
|
-
children: a.map((i) => {
|
|
15
|
-
let a = r[i.index], u = `message-${i.index}-${a.id}`;
|
|
16
|
-
return /* @__PURE__ */ t("div", {
|
|
17
|
-
ref: o,
|
|
18
|
-
className: n.messageWrapper,
|
|
19
|
-
"data-index": i.index,
|
|
20
|
-
style: { transform: `translateY(${i.start}px)` },
|
|
21
|
-
children: /* @__PURE__ */ t(e, {
|
|
22
|
-
textMessageData: a,
|
|
23
|
-
isDeleteAllowed: l,
|
|
24
|
-
onAvatarClick: c,
|
|
25
|
-
onDelete: s
|
|
26
|
-
})
|
|
27
|
-
}, u);
|
|
28
|
-
})
|
|
29
|
-
});
|
|
30
|
-
export { n, r as t };
|
|
1
|
+
import{t as TextMessage}from"./text-message.js";import{jsx}from"react/jsx-runtime";import '../styles/virtualized-messages.css';var messages_view_module_default={messagesView:`_messagesView_h8l31_29`,moreRepliesButton:`_moreRepliesButton_h8l31_39`,repliesContainer:`_repliesContainer_h8l31_42`,threadIndicator:`_threadIndicator_h8l31_49`,virtualizedMessages:`_virtualizedMessages_h8l31_54`,messageWrapper:`_messageWrapper_h8l31_59`,singleMessageWrapper:`_singleMessageWrapper_h8l31_93`},VirtualizedMessages=({messages,totalSize,virtualItems,measureElement,onDelete,onAvatarClick,isDeleteAllowed})=>jsx(`div`,{className:messages_view_module_default.virtualizedMessages,style:{height:`${totalSize}px`},children:virtualItems.map(virtualItem=>{let reply=messages[virtualItem.index],key=`message-${virtualItem.index}-${reply.id}`;return jsx(`div`,{ref:measureElement,className:messages_view_module_default.messageWrapper,"data-index":virtualItem.index,style:{transform:`translateY(${virtualItem.start}px)`},children:jsx(TextMessage,{textMessageData:reply,isDeleteAllowed,onAvatarClick,onDelete})},key)})});export{messages_view_module_default as n,VirtualizedMessages as t};
|
package/dist/esm/index.js
CHANGED
|
@@ -1,8 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { MentionContextProvider as e, useMentionContext as t } from "./lib/components/mention-component/mention-context.js";
|
|
3
|
-
import { t as n } from "../chunks/threaded-annotations.js";
|
|
4
|
-
import { MessageEditor as r } from "./lib/components/v2/message-editor/message-editor.js";
|
|
5
|
-
import { AnnotationBadgeType as i } from "./lib/v2/types/annotation-badge-types.js";
|
|
6
|
-
import { t as a } from "../chunks/threaded-annotations2.js";
|
|
7
|
-
import { serializeMentionMarkup as o } from "./lib/v2/utils/serialize-mention-markup.js";
|
|
8
|
-
export { i as AnnotationBadgeType, e as MentionContextProvider, r as MessageEditorV2, n as ThreadedAnnotations, a as ThreadedAnnotationsV2, o as serializeMentionMarkup, t as useMentionContext };
|
|
1
|
+
import"./lib/document-node-types.js";import{MentionContextProvider,useMentionContext}from"./lib/components/mention-component/mention-context.js";import{t as ThreadedAnnotations}from"../chunks/threaded-annotations.js";import{MessageEditor}from"./lib/components/v2/message-editor/message-editor.js";import{AnnotationBadgeType}from"./lib/v2/types/annotation-badge-types.js";import{t as ThreadedAnnotations$1}from"../chunks/threaded-annotations2.js";import{serializeMentionMarkup}from"./lib/v2/utils/serialize-mention-markup.js";export{AnnotationBadgeType,MentionContextProvider,MessageEditor as MessageEditorV2,ThreadedAnnotations,ThreadedAnnotations$1 as ThreadedAnnotationsV2,serializeMentionMarkup,useMentionContext};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
export { e as MentionComponent };
|
|
1
|
+
import{t as MentionComponent}from"../../../../chunks/mention-component.js";export{MentionComponent};
|
|
@@ -1,26 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { jsx as a } from "react/jsx-runtime";
|
|
3
|
-
var o = /*#__PURE__*/ e(void 0), s = ({ value: e, children: n }) => {
|
|
4
|
-
let [s, c] = i(null), l = t(async (e, t) => {
|
|
5
|
-
requestAnimationFrame(() => {
|
|
6
|
-
c(e);
|
|
7
|
-
});
|
|
8
|
-
}, []), u = t(() => {
|
|
9
|
-
c(null);
|
|
10
|
-
}, []), d = r(() => ({
|
|
11
|
-
...e,
|
|
12
|
-
openPopoverMentionId: s,
|
|
13
|
-
openPopoverForMentionId: l,
|
|
14
|
-
closeAllPopovers: u
|
|
15
|
-
}), [
|
|
16
|
-
e,
|
|
17
|
-
s,
|
|
18
|
-
l,
|
|
19
|
-
u
|
|
20
|
-
]);
|
|
21
|
-
return /* @__PURE__ */ a(o.Provider, {
|
|
22
|
-
value: d,
|
|
23
|
-
children: n
|
|
24
|
-
});
|
|
25
|
-
}, c = () => n(o) ?? {};
|
|
26
|
-
export { s as MentionContextProvider, c as useMentionContext };
|
|
1
|
+
import{createContext,useCallback,useContext,useMemo,useState}from"react";import{jsx}from"react/jsx-runtime";var MentionContext=createContext(void 0),MentionContextProvider=({value,children})=>{let[openPopoverMentionId,setOpenPopoverMentionId]=useState(null),openPopoverForMentionId=useCallback(async(mentionId,user)=>{requestAnimationFrame(()=>{setOpenPopoverMentionId(mentionId)})},[]),closeAllPopovers=useCallback(()=>{setOpenPopoverMentionId(null)},[]),mergedValue=useMemo(()=>({...value,openPopoverMentionId,openPopoverForMentionId,closeAllPopovers}),[value,openPopoverMentionId,openPopoverForMentionId,closeAllPopovers]);return jsx(MentionContext.Provider,{value:mergedValue,children})},useMentionContext=()=>useContext(MentionContext)??{};export{MentionContextProvider,useMentionContext};
|
|
@@ -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/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};
|
package/dist/esm/lib/components/message-editor/editor-extensions/custom-mention/useMentionState.js
CHANGED
|
@@ -1,24 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
var n = /* @__PURE__ */ function(e) {
|
|
3
|
-
return e.ARROW_DOWN = "ArrowDown", e.ARROW_UP = "ArrowUp", e.ENTER = "Enter", e;
|
|
4
|
-
}({}), r = (n) => {
|
|
5
|
-
let [r, i] = t(!1), [a, o] = t(""), [s, c] = t(null);
|
|
6
|
-
return {
|
|
7
|
-
isActive: r,
|
|
8
|
-
query: a,
|
|
9
|
-
command: s,
|
|
10
|
-
suggestionCallbacks: e(() => ({
|
|
11
|
-
onSuggestionStart: (e) => {
|
|
12
|
-
i(!0), o(e.query), c(() => e.command);
|
|
13
|
-
},
|
|
14
|
-
onSuggestionUpdate: (e) => {
|
|
15
|
-
o(e.query), c(() => e.command);
|
|
16
|
-
},
|
|
17
|
-
onSuggestionKeyDown: (e) => n.current ? e.event.key === "ArrowDown" ? (n.current.selectNext(), !0) : e.event.key === "ArrowUp" ? (n.current.selectPrevious(), !0) : e.event.key === "Enter" ? (n.current.selectItem(), !0) : !1 : !1,
|
|
18
|
-
onSuggestionExit: () => {
|
|
19
|
-
i(!1);
|
|
20
|
-
}
|
|
21
|
-
}), [n])
|
|
22
|
-
};
|
|
23
|
-
};
|
|
24
|
-
export { n as KeyEvents, r as useMentionState };
|
|
1
|
+
import{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=>{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])}};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,26 +1 @@
|
|
|
1
|
-
var
|
|
2
|
-
return e.Placeholder = "placeholder", e;
|
|
3
|
-
}({}), t = 1, n = (e) => {
|
|
4
|
-
let { content: t, paragraphNumber: n } = s(e);
|
|
5
|
-
n === 1 && t.length === 0 && e.commands.setContent([{ type: "placeholder" }], { emitUpdate: !1 });
|
|
6
|
-
}, r = (e, t) => {
|
|
7
|
-
let n = e.getJSON(), r = i(n, t);
|
|
8
|
-
o(n) !== o(r) && e.commands.setContent(r, { emitUpdate: !0 });
|
|
9
|
-
}, i = (e, t) => {
|
|
10
|
-
let n = Array.isArray(t) ? t : [t];
|
|
11
|
-
return a(e, (e) => !n.includes(e.type));
|
|
12
|
-
}, a = (e, t) => {
|
|
13
|
-
if (!e.content) return e;
|
|
14
|
-
let n = e.content?.filter(t).map((e) => a(e, t)) || [];
|
|
15
|
-
return {
|
|
16
|
-
...e,
|
|
17
|
-
content: n
|
|
18
|
-
};
|
|
19
|
-
}, o = (e) => e.content ? e.content.reduce((e, n) => e + t + o(n), 0) : 0, s = (e) => {
|
|
20
|
-
let t = e.getJSON().content || [];
|
|
21
|
-
return {
|
|
22
|
-
content: t.flatMap((e) => e.content || []),
|
|
23
|
-
paragraphNumber: t.length
|
|
24
|
-
};
|
|
25
|
-
};
|
|
26
|
-
export { e as EditorContentType, n as addPlaceholderToContent, r as deleteNode, a as filterContent, s as getEditorContent, i as removeContentOfType };
|
|
1
|
+
var EditorContentType=function(EditorContentType){return EditorContentType.Placeholder=`placeholder`,EditorContentType}({}),NODE_INCREMENT=1,addPlaceholderToContent=editor=>{let{content,paragraphNumber}=getEditorContent(editor);paragraphNumber===1&&content.length===0&&editor.commands.setContent([{type:`placeholder`}],{emitUpdate:!1})},deleteNode=(editor,nodeType)=>{let content=editor.getJSON(),contentWithoutNode=removeContentOfType(content,nodeType);calculateNodesNumber(content)!==calculateNodesNumber(contentWithoutNode)&&editor.commands.setContent(contentWithoutNode,{emitUpdate:!0})},removeContentOfType=(content,type)=>{let typesToRemove=Array.isArray(type)?type:[type];return filterContent(content,childContent=>!typesToRemove.includes(childContent.type))},filterContent=(content,predicate)=>{if(!content.content)return content;let filteredChildren=content.content?.filter(predicate).map(child=>filterContent(child,predicate))||[];return{...content,content:filteredChildren}},calculateNodesNumber=content=>content.content?content.content.reduce((acc,childContent)=>acc+NODE_INCREMENT+calculateNodesNumber(childContent),0):0,getEditorContent=editor=>{let editorContent=editor.getJSON().content||[];return{content:editorContent.flatMap(contentItem=>contentItem.content||[]),paragraphNumber:editorContent.length}};export{EditorContentType,addPlaceholderToContent,deleteNode,filterContent,getEditorContent,removeContentOfType};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
export { e as CustomPlaceholder };
|
|
1
|
+
import{t as CustomPlaceholder}from"../../../../../../chunks/custom-placeholder.js";export{CustomPlaceholder};
|
|
@@ -1,17 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Text as t } from "@box/blueprint-web";
|
|
3
|
-
import { AlertBadge as n } from "@box/blueprint-web-assets/icons/Fill";
|
|
4
|
-
import { jsx as r, jsxs as i } from "react/jsx-runtime";
|
|
5
|
-
var a = ({ errorMessage: a }) => /* @__PURE__ */ i("div", {
|
|
6
|
-
className: e.errorMessage,
|
|
7
|
-
children: [/* @__PURE__ */ r(n, {
|
|
8
|
-
color: "var(--icon-icon-destructive-on-light)",
|
|
9
|
-
height: 16,
|
|
10
|
-
width: 16
|
|
11
|
-
}), /* @__PURE__ */ r(t, {
|
|
12
|
-
as: "span",
|
|
13
|
-
className: e.errorText,
|
|
14
|
-
children: a
|
|
15
|
-
})]
|
|
16
|
-
});
|
|
17
|
-
export { a as ErrorMessage };
|
|
1
|
+
import{t as message_editor_module_default}from"../../../../chunks/message-editor.module.js";import{Text}from"@box/blueprint-web";import{AlertBadge}from"@box/blueprint-web-assets/icons/Fill";import{jsx,jsxs}from"react/jsx-runtime";var ErrorMessage=({errorMessage})=>jsxs(`div`,{className:message_editor_module_default.errorMessage,children:[jsx(AlertBadge,{color:`var(--icon-icon-destructive-on-light)`,height:16,width:16}),jsx(Text,{as:`span`,className:message_editor_module_default.errorText,children:errorMessage})]});export{ErrorMessage};
|
|
@@ -1,69 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { t } from "../../../../../chunks/message-editor.module.js";
|
|
3
|
-
import { CustomMention as n } from "../editor-extensions/custom-mention/custom-mention.js";
|
|
4
|
-
import { createSuggestionOptions as r } from "../editor-extensions/custom-mention/custom-mention-suggestions.js";
|
|
5
|
-
import { useMentionState as i } from "../editor-extensions/custom-mention/useMentionState.js";
|
|
6
|
-
import { CustomParagraph as a } from "../editor-extensions/custom-paragraph.js";
|
|
7
|
-
import { addPlaceholderToContent as o } from "../editor-extensions/custom-placeholder/custom-placeholder-utils.js";
|
|
8
|
-
import { t as s } from "../../../../../chunks/custom-placeholder.js";
|
|
9
|
-
import { useCallback as c, useRef as l, useState as u } from "react";
|
|
10
|
-
import { useEditor as d } from "@tiptap/react";
|
|
11
|
-
import f from "@tiptap/extension-document";
|
|
12
|
-
import p from "@tiptap/extension-text";
|
|
13
|
-
import { v4 as m } from "uuid";
|
|
14
|
-
var h = () => {
|
|
15
|
-
let h = l(null), g = l(null), [_, v] = u(!0), { isActive: y, query: b, command: x, suggestionCallbacks: S } = i(h), { closeAllPopovers: C, openPopoverForMentionId: w, fetchCollaboratorState: T } = e(), E = d({
|
|
16
|
-
shouldRerenderOnTransaction: !0,
|
|
17
|
-
extensions: [
|
|
18
|
-
f,
|
|
19
|
-
a,
|
|
20
|
-
p,
|
|
21
|
-
s,
|
|
22
|
-
...[{
|
|
23
|
-
char: "@",
|
|
24
|
-
pluginKey: "mentionAt"
|
|
25
|
-
}, {
|
|
26
|
-
char: "@",
|
|
27
|
-
pluginKey: "mentionAtJapanese"
|
|
28
|
-
}].map(({ char: e, pluginKey: t }) => n.extend({ name: "mention" }).configure({ suggestion: r(t, e, S) }))
|
|
29
|
-
],
|
|
30
|
-
autofocus: !0,
|
|
31
|
-
editorProps: { attributes: { class: t.editor } },
|
|
32
|
-
onCreate: ({ editor: e }) => {
|
|
33
|
-
g.current = e.view.dom;
|
|
34
|
-
},
|
|
35
|
-
onUpdate: ({ editor: e }) => {
|
|
36
|
-
v(e.isEmpty || e.getText().trim() === ""), C?.();
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
return {
|
|
40
|
-
editor: E,
|
|
41
|
-
editorRef: g,
|
|
42
|
-
isEditorEmpty: _,
|
|
43
|
-
isActive: y,
|
|
44
|
-
query: b,
|
|
45
|
-
userSelectorRef: h,
|
|
46
|
-
cleanEditor: c(() => {
|
|
47
|
-
E && requestAnimationFrame(() => {
|
|
48
|
-
E.isDestroyed || (E.commands.setContent("", { emitUpdate: !1 }), o(E), v(!0));
|
|
49
|
-
});
|
|
50
|
-
}, [E]),
|
|
51
|
-
getEditorJsonContent: c(() => E ? E.getJSON() : null, [E]),
|
|
52
|
-
handleUserSelected: c(async (e) => {
|
|
53
|
-
if (x) {
|
|
54
|
-
let t = m();
|
|
55
|
-
x({
|
|
56
|
-
mentionedUserName: e.name,
|
|
57
|
-
mentionedUserId: e.id.toString(),
|
|
58
|
-
mentionedUserEmail: e.email,
|
|
59
|
-
mentionId: t
|
|
60
|
-
}), (await T?.(e) ?? !1) || w?.(t, e);
|
|
61
|
-
}
|
|
62
|
-
}, [
|
|
63
|
-
x,
|
|
64
|
-
w,
|
|
65
|
-
T
|
|
66
|
-
])
|
|
67
|
-
};
|
|
68
|
-
};
|
|
69
|
-
export { h as useMessageEditor };
|
|
1
|
+
import{useMentionContext}from"../../mention-component/mention-context.js";import{t as message_editor_module_default}from"../../../../../chunks/message-editor.module.js";import{CustomMention}from"../editor-extensions/custom-mention/custom-mention.js";import{createSuggestionOptions}from"../editor-extensions/custom-mention/custom-mention-suggestions.js";import{useMentionState}from"../editor-extensions/custom-mention/useMentionState.js";import{CustomParagraph}from"../editor-extensions/custom-paragraph.js";import{addPlaceholderToContent}from"../editor-extensions/custom-placeholder/custom-placeholder-utils.js";import{t as CustomPlaceholder}from"../../../../../chunks/custom-placeholder.js";import{useCallback,useRef,useState}from"react";import{useEditor}from"@tiptap/react";import Document from"@tiptap/extension-document";import Text from"@tiptap/extension-text";import{v4}from"uuid";var useMessageEditor=()=>{let userSelectorRef=useRef(null),editorRef=useRef(null),[isEditorEmpty,setIsEditorEmpty]=useState(!0),{isActive,query,command,suggestionCallbacks}=useMentionState(userSelectorRef),{closeAllPopovers,openPopoverForMentionId,fetchCollaboratorState}=useMentionContext(),editor=useEditor({shouldRerenderOnTransaction:!0,extensions:[Document,CustomParagraph,Text,CustomPlaceholder,...[{char:`@`,pluginKey:`mentionAt`},{char:`@`,pluginKey:`mentionAtJapanese`}].map(({char,pluginKey})=>CustomMention.extend({name:`mention`}).configure({suggestion:createSuggestionOptions(pluginKey,char,suggestionCallbacks)}))],autofocus:!0,editorProps:{attributes:{class:message_editor_module_default.editor}},onCreate:({editor:editorInstance})=>{editorRef.current=editorInstance.view.dom},onUpdate:({editor:editorInstance})=>{setIsEditorEmpty(editorInstance.isEmpty||editorInstance.getText().trim()===``),closeAllPopovers?.()}});return{editor,editorRef,isEditorEmpty,isActive,query,userSelectorRef,cleanEditor:useCallback(()=>{editor&&requestAnimationFrame(()=>{editor.isDestroyed||(editor.commands.setContent(``,{emitUpdate:!1}),addPlaceholderToContent(editor),setIsEditorEmpty(!0))})},[editor]),getEditorJsonContent:useCallback(()=>editor?editor.getJSON():null,[editor]),handleUserSelected:useCallback(async user=>{if(command){let mentionId=v4();command({mentionedUserName:user.name,mentionedUserId:user.id.toString(),mentionedUserEmail:user.email,mentionId}),(await fetchCollaboratorState?.(user)??!1)||openPopoverForMentionId?.(mentionId,user)}},[command,openPopoverForMentionId,fetchCollaboratorState])}};export{useMessageEditor};
|
|
@@ -1,35 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { getErrorMessage as t } from "../../../utils/getErrorMessage.js";
|
|
3
|
-
import { useState as n } from "react";
|
|
4
|
-
var r = ({ onPost: r, onPostError: i, onPostSuccess: a, defaultErrorMessage: o = null, cleanEditor: s, getEditorJsonContent: c, onCancel: l }) => {
|
|
5
|
-
let [u, d] = n(!1), [f, p] = n(null), { closeAllPopovers: m } = e();
|
|
6
|
-
return {
|
|
7
|
-
isLoading: u,
|
|
8
|
-
errorMessage: f,
|
|
9
|
-
handlePost: async () => {
|
|
10
|
-
let e = c();
|
|
11
|
-
try {
|
|
12
|
-
d(!0), p(null);
|
|
13
|
-
let t = r(e), n = t instanceof Promise ? await t : t;
|
|
14
|
-
a?.(n), s(), l(!1);
|
|
15
|
-
} catch (e) {
|
|
16
|
-
let n = i?.(e);
|
|
17
|
-
if (o) {
|
|
18
|
-
p(o);
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
if (n) {
|
|
22
|
-
p(n);
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
p(t(e));
|
|
26
|
-
} finally {
|
|
27
|
-
d(!1), m?.();
|
|
28
|
-
}
|
|
29
|
-
},
|
|
30
|
-
clearError: () => {
|
|
31
|
-
p(null);
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
};
|
|
35
|
-
export { r as useMessagePost };
|
|
1
|
+
import{useMentionContext}from"../../mention-component/mention-context.js";import{getErrorMessage}from"../../../utils/getErrorMessage.js";import{useState}from"react";var useMessagePost=({onPost,onPostError,onPostSuccess,defaultErrorMessage=null,cleanEditor,getEditorJsonContent,onCancel})=>{let[isLoading,setIsLoading]=useState(!1),[errorMessage,setErrorMessage]=useState(null),{closeAllPopovers}=useMentionContext();return{isLoading,errorMessage,handlePost:async()=>{let content=getEditorJsonContent();try{setIsLoading(!0),setErrorMessage(null);let result=onPost(content),response=result instanceof Promise?await result:result;onPostSuccess?.(response),cleanEditor(),onCancel(!1)}catch(error){let callbackErrorMessage=onPostError?.(error);if(defaultErrorMessage){setErrorMessage(defaultErrorMessage);return}if(callbackErrorMessage){setErrorMessage(callbackErrorMessage);return}setErrorMessage(getErrorMessage(error))}finally{setIsLoading(!1),closeAllPopovers?.()}},clearError:()=>{setErrorMessage(null)}}};export{useMessagePost};
|
|
@@ -1,29 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import t from "./messages.js";
|
|
3
|
-
import { Button as n } from "@box/blueprint-web";
|
|
4
|
-
import { useIntl as r } from "react-intl";
|
|
5
|
-
import { jsx as i, jsxs as a } from "react/jsx-runtime";
|
|
6
|
-
var o = ({ onCancel: o, onPost: s, isLoading: c = !1, disableCancel: l = !1, disablePost: u = !1 }) => {
|
|
7
|
-
let d = r();
|
|
8
|
-
return /* @__PURE__ */ a("div", {
|
|
9
|
-
className: e.actionsContainer,
|
|
10
|
-
children: [/* @__PURE__ */ i(n, {
|
|
11
|
-
"aria-label": d.formatMessage(t.cancelButtonAriaLabel),
|
|
12
|
-
disabled: l,
|
|
13
|
-
onClick: () => o(!0),
|
|
14
|
-
size: "small",
|
|
15
|
-
variant: "secondary",
|
|
16
|
-
children: d.formatMessage(t.postCancel)
|
|
17
|
-
}), /* @__PURE__ */ i(n, {
|
|
18
|
-
"aria-label": d.formatMessage(t.postButtonAriaLabel),
|
|
19
|
-
disabled: u,
|
|
20
|
-
loading: c,
|
|
21
|
-
loadingAriaLabel: d.formatMessage(t.postLoading),
|
|
22
|
-
onClick: s,
|
|
23
|
-
size: "small",
|
|
24
|
-
variant: "primary",
|
|
25
|
-
children: d.formatMessage(t.post)
|
|
26
|
-
})]
|
|
27
|
-
});
|
|
28
|
-
};
|
|
29
|
-
export { o as MessageEditorActions };
|
|
1
|
+
import{t as message_editor_module_default}from"../../../../chunks/message-editor.module.js";import messages from"./messages.js";import{Button}from"@box/blueprint-web";import{useIntl}from"react-intl";import{jsx,jsxs}from"react/jsx-runtime";var MessageEditorActions=({onCancel,onPost,isLoading=!1,disableCancel=!1,disablePost=!1})=>{let intl=useIntl();return jsxs(`div`,{className:message_editor_module_default.actionsContainer,children:[jsx(Button,{"aria-label":intl.formatMessage(messages.cancelButtonAriaLabel),disabled:disableCancel,onClick:()=>onCancel(!0),size:`small`,variant:`secondary`,children:intl.formatMessage(messages.postCancel)}),jsx(Button,{"aria-label":intl.formatMessage(messages.postButtonAriaLabel),disabled:disablePost,loading:isLoading,loadingAriaLabel:intl.formatMessage(messages.postLoading),onClick:onPost,size:`small`,variant:`primary`,children:intl.formatMessage(messages.post)})]})};export{MessageEditorActions};
|
|
@@ -1,7 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { jsx as n } from "react/jsx-runtime";
|
|
3
|
-
var r = /*#__PURE__*/ e(void 0), i = ({ value: e, children: t }) => /* @__PURE__ */ n(r.Provider, {
|
|
4
|
-
value: e,
|
|
5
|
-
children: t
|
|
6
|
-
}), a = () => t(r) ?? {};
|
|
7
|
-
export { i as MessageEditorContextProvider, a as useMessageEditorContext };
|
|
1
|
+
import{createContext,useContext}from"react";import{jsx}from"react/jsx-runtime";var MessageEditorContext=createContext(void 0),MessageEditorContextProvider=({value,children})=>jsx(MessageEditorContext.Provider,{value,children}),useMessageEditorContext=()=>useContext(MessageEditorContext)??{};export{MessageEditorContextProvider,useMessageEditorContext};
|
|
@@ -1,74 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { ErrorMessage as t } from "./error-message.js";
|
|
3
|
-
import { MessageEditorContextProvider as n } from "./message-editor-context.js";
|
|
4
|
-
import r from "./messages.js";
|
|
5
|
-
import { useMessageEditor as i } from "./hooks/useMessageEditor.js";
|
|
6
|
-
import { useMessagePost as a } from "./hooks/useMessagePost.js";
|
|
7
|
-
import { MessageEditorActions as o } from "./message-editor-actions.js";
|
|
8
|
-
import { getMessageEditorState as s } from "./utils/getMessageEditorState.js";
|
|
9
|
-
import c from "clsx";
|
|
10
|
-
import { useEffect as l } from "react";
|
|
11
|
-
import { useIntl as u } from "react-intl";
|
|
12
|
-
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
13
|
-
import { UserSelectorHeadless as p } from "@box/user-selector";
|
|
14
|
-
import { EditorContent as m } from "@tiptap/react";
|
|
15
|
-
var h = ({ messageCount: h, onPost: g, onCancel: _, onPostError: v, onPostSuccess: y, disableCancel: b = !1, disablePost: x = !1, disableComponent: S = !1, defaultErrorMessage: C = "", userSelectorProps: w }) => {
|
|
16
|
-
let T = u(), { editor: E, editorRef: D, isEditorEmpty: O, isActive: k, query: A, userSelectorRef: j, handleUserSelected: M, cleanEditor: N, getEditorJsonContent: P } = i(), { isLoading: F, errorMessage: I, handlePost: L } = a({
|
|
17
|
-
onPost: g,
|
|
18
|
-
onPostError: v,
|
|
19
|
-
onPostSuccess: y,
|
|
20
|
-
defaultErrorMessage: C,
|
|
21
|
-
cleanEditor: N,
|
|
22
|
-
getEditorJsonContent: P,
|
|
23
|
-
onCancel: _
|
|
24
|
-
}), { disableEditor: R, isPostDisabled: z, isCancelDisabled: B } = s({
|
|
25
|
-
disablePost: x,
|
|
26
|
-
disableCancel: b,
|
|
27
|
-
disableComponent: S,
|
|
28
|
-
isEditorEmpty: O,
|
|
29
|
-
isLoading: F
|
|
30
|
-
});
|
|
31
|
-
l(() => {
|
|
32
|
-
E && E.setOptions({ editable: !R });
|
|
33
|
-
}, [E, R]);
|
|
34
|
-
let V = /* @__PURE__ */ d("div", { className: e.anchorElement });
|
|
35
|
-
return E ? /* @__PURE__ */ d(n, {
|
|
36
|
-
value: { messageCount: h },
|
|
37
|
-
children: /* @__PURE__ */ f("div", {
|
|
38
|
-
className: e.messageEditor,
|
|
39
|
-
children: [
|
|
40
|
-
/* @__PURE__ */ f("div", {
|
|
41
|
-
className: c(e.editorContainer, {
|
|
42
|
-
[e.editorError]: I,
|
|
43
|
-
[e.editorDisabled]: R
|
|
44
|
-
}),
|
|
45
|
-
children: [/* @__PURE__ */ d(m, {
|
|
46
|
-
"aria-label": T.formatMessage(r.editorContentAriaLabel),
|
|
47
|
-
editor: E
|
|
48
|
-
}), /* @__PURE__ */ d(p, {
|
|
49
|
-
ref: j,
|
|
50
|
-
inputElementRef: D,
|
|
51
|
-
onSelectedUserChange: M,
|
|
52
|
-
open: k,
|
|
53
|
-
rootElement: V,
|
|
54
|
-
value: A,
|
|
55
|
-
...w,
|
|
56
|
-
popoverContentContainerProps: {
|
|
57
|
-
...w.popoverContentContainerProps,
|
|
58
|
-
avoidCollisions: !1
|
|
59
|
-
}
|
|
60
|
-
})]
|
|
61
|
-
}),
|
|
62
|
-
I && /* @__PURE__ */ d(t, { errorMessage: I }),
|
|
63
|
-
/* @__PURE__ */ d(o, {
|
|
64
|
-
disableCancel: B,
|
|
65
|
-
disablePost: z,
|
|
66
|
-
isLoading: F,
|
|
67
|
-
onCancel: _,
|
|
68
|
-
onPost: L
|
|
69
|
-
})
|
|
70
|
-
]
|
|
71
|
-
})
|
|
72
|
-
}) : null;
|
|
73
|
-
};
|
|
74
|
-
export { h as MessageEditor };
|
|
1
|
+
import{t as message_editor_module_default}from"../../../../chunks/message-editor.module.js";import{ErrorMessage}from"./error-message.js";import{MessageEditorContextProvider}from"./message-editor-context.js";import messages from"./messages.js";import{useMessageEditor}from"./hooks/useMessageEditor.js";import{useMessagePost}from"./hooks/useMessagePost.js";import{MessageEditorActions}from"./message-editor-actions.js";import{getMessageEditorState}from"./utils/getMessageEditorState.js";import clsx from"clsx";import{useEffect}from"react";import{useIntl}from"react-intl";import{jsx,jsxs}from"react/jsx-runtime";import{UserSelectorHeadless}from"@box/user-selector";import{EditorContent}from"@tiptap/react";var MessageEditor=({messageCount,onPost,onCancel,onPostError,onPostSuccess,disableCancel=!1,disablePost=!1,disableComponent=!1,defaultErrorMessage=``,userSelectorProps})=>{let intl=useIntl(),{editor,editorRef,isEditorEmpty,isActive,query,userSelectorRef,handleUserSelected,cleanEditor,getEditorJsonContent}=useMessageEditor(),{isLoading,errorMessage,handlePost}=useMessagePost({onPost,onPostError,onPostSuccess,defaultErrorMessage,cleanEditor,getEditorJsonContent,onCancel}),{disableEditor,isPostDisabled,isCancelDisabled}=getMessageEditorState({disablePost,disableCancel,disableComponent,isEditorEmpty,isLoading});useEffect(()=>{editor&&editor.setOptions({editable:!disableEditor})},[editor,disableEditor]);let anchorElement=jsx(`div`,{className:message_editor_module_default.anchorElement});return editor?jsx(MessageEditorContextProvider,{value:{messageCount},children:jsxs(`div`,{className:message_editor_module_default.messageEditor,children:[jsxs(`div`,{className:clsx(message_editor_module_default.editorContainer,{[message_editor_module_default.editorError]:errorMessage,[message_editor_module_default.editorDisabled]:disableEditor}),children:[jsx(EditorContent,{"aria-label":intl.formatMessage(messages.editorContentAriaLabel),editor}),jsx(UserSelectorHeadless,{ref:userSelectorRef,inputElementRef:editorRef,onSelectedUserChange:handleUserSelected,open:isActive,rootElement:anchorElement,value:query,...userSelectorProps,popoverContentContainerProps:{...userSelectorProps.popoverContentContainerProps,avoidCollisions:!1}})]}),errorMessage&&jsx(ErrorMessage,{errorMessage}),jsx(MessageEditorActions,{disableCancel:isCancelDisabled,disablePost:isPostDisabled,isLoading,onCancel,onPost:handlePost})]})}):null};export{MessageEditor};
|