@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.
Files changed (104) hide show
  1. package/dist/chunks/annotation-badge.js +1 -64
  2. package/dist/chunks/custom-placeholder.js +1 -72
  3. package/dist/chunks/delete-annotations-message-popover.js +1 -46
  4. package/dist/chunks/delete-confirmation-popover.js +1 -67
  5. package/dist/chunks/dist.js +2 -1757
  6. package/dist/chunks/mention-component.js +1 -106
  7. package/dist/chunks/message-editor.module.js +1 -12
  8. package/dist/chunks/message-editor2.module.js +1 -29
  9. package/dist/chunks/message-header.js +1 -49
  10. package/dist/chunks/messages-view.js +1 -99
  11. package/dist/chunks/resolved-state.js +1 -55
  12. package/dist/chunks/show-replies-button.js +1 -60
  13. package/dist/chunks/text-message.js +1 -21
  14. package/dist/chunks/text-message.module.js +1 -14
  15. package/dist/chunks/threaded-annotations.js +1 -71
  16. package/dist/chunks/threaded-annotations2.js +1 -87
  17. package/dist/chunks/timestamp-toggle.js +1 -36
  18. package/dist/chunks/virtualized-messages.js +1 -30
  19. package/dist/esm/index.js +1 -8
  20. package/dist/esm/lib/components/mention-component/mention-component.js +1 -2
  21. package/dist/esm/lib/components/mention-component/mention-context.js +1 -26
  22. package/dist/esm/lib/components/message-editor/editor-extensions/custom-mention/custom-mention-suggestions.js +1 -23
  23. package/dist/esm/lib/components/message-editor/editor-extensions/custom-mention/custom-mention.js +1 -59
  24. package/dist/esm/lib/components/message-editor/editor-extensions/custom-mention/useMentionState.js +1 -24
  25. package/dist/esm/lib/components/message-editor/editor-extensions/custom-paragraph.js +1 -13
  26. package/dist/esm/lib/components/message-editor/editor-extensions/custom-placeholder/custom-placeholder-utils.js +1 -26
  27. package/dist/esm/lib/components/message-editor/editor-extensions/custom-placeholder/custom-placeholder.js +1 -2
  28. package/dist/esm/lib/components/message-editor/error-message.js +1 -17
  29. package/dist/esm/lib/components/message-editor/hooks/useMessageEditor.js +1 -69
  30. package/dist/esm/lib/components/message-editor/hooks/useMessagePost.js +1 -35
  31. package/dist/esm/lib/components/message-editor/message-editor-actions.js +1 -29
  32. package/dist/esm/lib/components/message-editor/message-editor-context.js +1 -7
  33. package/dist/esm/lib/components/message-editor/message-editor.js +1 -74
  34. package/dist/esm/lib/components/message-editor/messages.js +1 -44
  35. package/dist/esm/lib/components/message-editor/utils/getMessageEditorState.js +1 -9
  36. package/dist/esm/lib/components/message-header/delete-annotations-message-popover.js +1 -2
  37. package/dist/esm/lib/components/message-header/message-header.js +1 -2
  38. package/dist/esm/lib/components/message-header/messages.js +1 -32
  39. package/dist/esm/lib/components/messages-view/consts.js +1 -2
  40. package/dist/esm/lib/components/messages-view/hooks/useAutoScroll.js +1 -43
  41. package/dist/esm/lib/components/messages-view/hooks/useShowMoreReplies.js +1 -26
  42. package/dist/esm/lib/components/messages-view/hooks/useVirtualizedMessages.js +1 -17
  43. package/dist/esm/lib/components/messages-view/messages-view.js +1 -61
  44. package/dist/esm/lib/components/messages-view/messages.js +1 -12
  45. package/dist/esm/lib/components/messages-view/virtualized-messages.js +1 -2
  46. package/dist/esm/lib/components/text-message/message-renderer.js +1 -58
  47. package/dist/esm/lib/components/text-message/text-message.js +1 -2
  48. package/dist/esm/lib/components/user-avatar/getInitials.js +1 -5
  49. package/dist/esm/lib/components/user-avatar/messages.js +1 -12
  50. package/dist/esm/lib/components/user-avatar/user-avatar.js +1 -31
  51. package/dist/esm/lib/components/v2/annotation-badge/annotation-badge.js +1 -2
  52. package/dist/esm/lib/components/v2/annotation-badge/index.js +1 -2
  53. package/dist/esm/lib/components/v2/annotation-badge/messages.js +1 -12
  54. package/dist/esm/lib/components/v2/message-editor/editor-extensions/custom-mention/custom-mention-suggestions.js +1 -23
  55. package/dist/esm/lib/components/v2/message-editor/editor-extensions/custom-mention/custom-mention.js +1 -59
  56. package/dist/esm/lib/components/v2/message-editor/editor-extensions/custom-mention/mention-trigger-normalization.js +1 -2
  57. package/dist/esm/lib/components/v2/message-editor/editor-extensions/custom-mention/useMentionState.js +1 -27
  58. package/dist/esm/lib/components/v2/message-editor/editor-extensions/custom-paragraph.js +1 -13
  59. package/dist/esm/lib/components/v2/message-editor/hooks/useCharacterLimit.js +1 -24
  60. package/dist/esm/lib/components/v2/message-editor/hooks/useEditorContainerState.js +1 -21
  61. package/dist/esm/lib/components/v2/message-editor/hooks/useMentionUserSelection.js +1 -21
  62. package/dist/esm/lib/components/v2/message-editor/hooks/useMessageSubmit.js +1 -24
  63. package/dist/esm/lib/components/v2/message-editor/message-editor-context.js +1 -19
  64. package/dist/esm/lib/components/v2/message-editor/message-editor.js +1 -187
  65. package/dist/esm/lib/components/v2/message-editor/message-editor.types.js +1 -4
  66. package/dist/esm/lib/components/v2/message-editor/messages.js +1 -52
  67. package/dist/esm/lib/components/v2/message-editor/subcomponents/character-limit-counter.js +1 -26
  68. package/dist/esm/lib/components/v2/message-editor/subcomponents/edit-buttons.js +1 -32
  69. package/dist/esm/lib/components/v2/message-editor/subcomponents/error-message.js +1 -22
  70. package/dist/esm/lib/components/v2/message-editor/subcomponents/post-button.js +1 -29
  71. package/dist/esm/lib/components/v2/message-editor/subcomponents/timestamp-toggle.js +1 -2
  72. package/dist/esm/lib/components/v2/message-header/delete-confirmation-popover.js +1 -2
  73. package/dist/esm/lib/components/v2/message-header/message-header.js +1 -90
  74. package/dist/esm/lib/components/v2/message-header/message-options-menu.js +1 -49
  75. package/dist/esm/lib/components/v2/message-header/messages.js +2 -48
  76. package/dist/esm/lib/components/v2/messages-view/hooks/useAutoScroll.js +1 -69
  77. package/dist/esm/lib/components/v2/messages-view/messages-view.js +1 -2
  78. package/dist/esm/lib/components/v2/resolved-state/messages.js +1 -12
  79. package/dist/esm/lib/components/v2/resolved-state/resolved-state.js +1 -2
  80. package/dist/esm/lib/components/v2/show-replies-button/messages.js +1 -12
  81. package/dist/esm/lib/components/v2/show-replies-button/show-replies-button.js +1 -2
  82. package/dist/esm/lib/components/v2/text-message/constants.js +1 -2
  83. package/dist/esm/lib/components/v2/text-message/messages.js +1 -32
  84. package/dist/esm/lib/components/v2/text-message/subcomponents/message-footer.js +1 -64
  85. package/dist/esm/lib/components/v2/text-message/subcomponents/message-renderer.js +1 -87
  86. package/dist/esm/lib/components/v2/text-message/subcomponents/truncate-document.js +1 -113
  87. package/dist/esm/lib/components/v2/text-message/subcomponents/url-segments.js +1 -38
  88. package/dist/esm/lib/components/v2/text-message/text-message.js +1 -79
  89. package/dist/esm/lib/components/v2/user-avatar/getInitials.js +1 -5
  90. package/dist/esm/lib/components/v2/user-avatar/messages.js +1 -12
  91. package/dist/esm/lib/components/v2/user-avatar/user-avatar.js +1 -37
  92. package/dist/esm/lib/messages.js +1 -24
  93. package/dist/esm/lib/threaded-annotations.js +1 -2
  94. package/dist/esm/lib/utils/getErrorMessage.js +1 -2
  95. package/dist/esm/lib/v2/constants.js +1 -2
  96. package/dist/esm/lib/v2/messages.js +1 -6
  97. package/dist/esm/lib/v2/resin-targets.js +1 -25
  98. package/dist/esm/lib/v2/threaded-annotations-context.js +1 -61
  99. package/dist/esm/lib/v2/threaded-annotations.js +1 -2
  100. package/dist/esm/lib/v2/types/annotation-badge-types.js +1 -4
  101. package/dist/esm/lib/v2/types/index.js +1 -2
  102. package/dist/esm/lib/v2/utils/build-mention-content.js +1 -20
  103. package/dist/esm/lib/v2/utils/serialize-mention-markup.js +2 -12
  104. package/package.json +12 -12
@@ -1,87 +1 @@
1
- import { THREADED_ANNOTATIONS_PORTAL as e } from "../esm/lib/v2/constants.js";
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 e from "../esm/lib/components/v2/message-editor/messages.js";
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 { t as e } from "./text-message.js";
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 "./lib/document-node-types.js";
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 { t as e } from "../../../../chunks/mention-component.js";
2
- export { e as MentionComponent };
1
+ import{t as MentionComponent}from"../../../../chunks/mention-component.js";export{MentionComponent};
@@ -1,26 +1 @@
1
- import { createContext as e, useCallback as t, useContext as n, useMemo as r, useState as i } from "react";
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 { t as e } from "../../../../../../chunks/dist.js";
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};
@@ -1,59 +1 @@
1
- import { t as e } from "../../../../../../chunks/mention-component.js";
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,24 +1 @@
1
- import { useMemo as e, useState as t } from "react";
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 { Text as e } from "@box/blueprint-web";
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 e = /* @__PURE__ */ function(e) {
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 { t as e } from "../../../../../../chunks/custom-placeholder.js";
2
- export { e as CustomPlaceholder };
1
+ import{t as CustomPlaceholder}from"../../../../../../chunks/custom-placeholder.js";export{CustomPlaceholder};
@@ -1,17 +1 @@
1
- import { t as e } from "../../../../chunks/message-editor.module.js";
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 { useMentionContext as e } from "../../mention-component/mention-context.js";
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 { useMentionContext as e } from "../../mention-component/mention-context.js";
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 { t as e } from "../../../../chunks/message-editor.module.js";
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 { createContext as e, useContext as t } from "react";
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 { t as e } from "../../../../chunks/message-editor.module.js";
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};