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