@box/threaded-annotations 4.6.6 → 4.7.1

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.
@@ -1 +1 @@
1
- import '../styles/message-editor2.css';var message_editor_module_default={messageEditorWrapper:`_messageEditorWrapper_1roda_29`,editActionsColumn:`_editActionsColumn_1roda_34`,editActionsRow:`_editActionsRow_1roda_41`,characterLimitCounter:`_characterLimitCounter_1roda_47`,messageEditor:`_messageEditor_1roda_29`,editorEditMode:`_editorEditMode_1roda_65`,editorFirstAnnotation:`_editorFirstAnnotation_1roda_72`,editorError:`_editorError_1roda_72`,editorViewport:`_editorViewport_1roda_80`,editorContainer:`_editorContainer_1roda_86`,editor:`_editor_1roda_65`,editorFade:`_editorFade_1roda_146`,editorFadeHidden:`_editorFadeHidden_1roda_157`,editorFullWidth:`_editorFullWidth_1roda_160`,actionsWrapper:`_actionsWrapper_1roda_164`,actionsWrapperInner:`_actionsWrapperInner_1roda_174`,timestampToggle:`_timestampToggle_1roda_181`,errorMessage:`_errorMessage_1roda_184`,errorText:`_errorText_1roda_193`,editorHasScroll:`_editorHasScroll_1roda_202`,editorCharacterLimitExceeded:`_editorCharacterLimitExceeded_1roda_213`,characterLimitExceeded:`_characterLimitExceeded_1roda_235`,scrolledToBottom:`_scrolledToBottom_1roda_238`,anchorElement:`_anchorElement_1roda_242`,withTimestampToggle:`_withTimestampToggle_1roda_251`};export{message_editor_module_default as t};
1
+ import '../styles/message-editor2.css';var message_editor_module_default={messageEditorWrapper:`_messageEditorWrapper_ihey1_29`,editActionsColumn:`_editActionsColumn_ihey1_34`,editActionsRow:`_editActionsRow_ihey1_41`,characterLimitCounter:`_characterLimitCounter_ihey1_47`,messageEditor:`_messageEditor_ihey1_29`,editorEditMode:`_editorEditMode_ihey1_65`,editorFirstAnnotation:`_editorFirstAnnotation_ihey1_72`,editorError:`_editorError_ihey1_72`,editorViewport:`_editorViewport_ihey1_80`,editorContainer:`_editorContainer_ihey1_86`,editor:`_editor_ihey1_65`,editorFade:`_editorFade_ihey1_146`,editorFadeHidden:`_editorFadeHidden_ihey1_157`,editorFullWidth:`_editorFullWidth_ihey1_160`,actionsWrapper:`_actionsWrapper_ihey1_164`,actionsWrapperInner:`_actionsWrapperInner_ihey1_174`,timestampToggle:`_timestampToggle_ihey1_181`,errorMessage:`_errorMessage_ihey1_184`,errorText:`_errorText_ihey1_193`,editorHasScroll:`_editorHasScroll_ihey1_202`,editorCharacterLimitExceeded:`_editorCharacterLimitExceeded_ihey1_213`,characterLimitExceeded:`_characterLimitExceeded_ihey1_235`,scrolledToBottom:`_scrolledToBottom_ihey1_238`,anchorElement:`_anchorElement_ihey1_242`,withTimestampToggle:`_withTimestampToggle_ihey1_251`};export{message_editor_module_default as t};
@@ -1 +1 @@
1
- import{t as MentionComponent}from"../../../../../../chunks/mention-component.js";import{isParagraphNode}from"../../../../v2/types/document-node-types.js";import messages from"../messages.js";import{t as text_message_module_default}from"../../../../../../chunks/text-message.module.js";import"../constants.js";import{splitTextIntoSegments}from"./url-segments.js";import{getDocumentLength,truncateDocument}from"./truncate-document.js";import{Link,Text,TextButton}from"@box/blueprint-web";import{useState}from"react";import{useIntl}from"react-intl";import{jsx,jsxs}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)},handleMessageLinkClick=event=>{event.currentTarget.closest(`[data-thread-expandable]`)&&event.preventDefault()},renderTextNode=({node,index,paragraphIndex,intl})=>{let key=`text-${node.text.substring(0,20)}-${paragraphIndex}-${index}`,segments=splitTextIntoSegments(node.text);return jsx(Text,{"aria-label":intl.formatMessage(messages.textMessageAriaLabel),as:`span`,color:`textOnLightDefault`,variant:`bodyDefault`,children:segments.map((segment,segmentIndex)=>segment.type===`url`?jsx(Link,{href:segment.value,inheritFont:!0,rel:`noopener noreferrer`,target:`_blank`,onClick:handleMessageLinkClick,children:segment.value},`${key}-segment-${segmentIndex}`):segment.value)},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,inlineSuffix})=>{let content=paragraph.content||[],key=`paragraph-${index}`;return jsxs(Text,{as:`p`,variant:`bodyDefault`,children:[content.length>0?renderParagraphContent({content,paragraphIndex:index,intl}):jsx(`br`,{}),inlineSuffix]},key)},MessageRenderer=({messageObject})=>{let intl=useIntl(),[isExpanded,setIsExpanded]=useState(!1);if(!messageObject.content||messageObject.content.length===0)return null;let totalLength=getDocumentLength(messageObject),isTruncated=!isExpanded&&totalLength>450,paragraphsToRender=(isTruncated?truncateDocument(messageObject,450):messageObject).content.filter(isParagraphNode),suffixAnchorIndex=paragraphsToRender.length-1;for(let i=paragraphsToRender.length-1;i>=0;--i)if((paragraphsToRender[i].content?.length??0)>0){suffixAnchorIndex=i;break}let seeMoreButton=isTruncated?jsx(TextButton,{className:text_message_module_default.seeMoreButton,color:`textOnLightLink`,"data-no-expand":!0,onClick:()=>setIsExpanded(!0),variant:`bodyDefaultBold`,children:intl.formatMessage(messages.seeMore)}):null;return paragraphsToRender.map((paragraph,index)=>renderParagraphNode({paragraph,index,intl,inlineSuffix:index===suffixAnchorIndex?seeMoreButton:null}))};export{MessageRenderer};
1
+ import{t as MentionComponent}from"../../../../../../chunks/mention-component.js";import{isParagraphNode}from"../../../../v2/types/document-node-types.js";import messages from"../messages.js";import{t as text_message_module_default}from"../../../../../../chunks/text-message.module.js";import"../constants.js";import{groupInlineNodes,segmentTextNodes}from"./text-node-segments.js";import{getDocumentLength,truncateDocument}from"./truncate-document.js";import{Link,Text,TextButton}from"@box/blueprint-web";import React,{useState}from"react";import{useIntl}from"react-intl";import{jsx,jsxs}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)},handleMessageLinkClick=event=>{event.currentTarget.closest(`[data-thread-expandable]`)&&event.preventDefault()},applyTextMarks=(content,node)=>node.marks?.reduce((markedContent,mark)=>{switch(mark.type){case`bold`:return jsx(`strong`,{children:markedContent});case`italic`:return jsx(`em`,{children:markedContent});case`underline`:return jsx(`u`,{children:markedContent});default:return markedContent}},content)??content,renderTextNodes=({nodes,paragraphIndex,index,intl,isRichTextEnabled})=>{let key=`text-nodes-${paragraphIndex}-${index}`,segments=segmentTextNodes(nodes);return jsx(Text,{"aria-label":intl.formatMessage(messages.textMessageAriaLabel),as:`span`,color:`textOnLightDefault`,variant:`bodyDefault`,children:segments.map((segment,segmentIndex)=>segment.type===`url`?jsx(Link,{href:segment.value,inheritFont:!0,rel:`noopener noreferrer`,target:`_blank`,onClick:handleMessageLinkClick,children:segment.fragments.map((fragment,fragmentIndex)=>jsx(React.Fragment,{children:isRichTextEnabled?applyTextMarks(fragment.value,fragment.sourceNode):fragment.value},`${key}-segment-${segmentIndex}-fragment-${fragmentIndex}`))},`${key}-segment-${segmentIndex}`):segment.fragments.map((fragment,fragmentIndex)=>jsx(React.Fragment,{children:isRichTextEnabled?applyTextMarks(fragment.value,fragment.sourceNode):fragment.value},`${key}-segment-${segmentIndex}-fragment-${fragmentIndex}`)))},key)},renderParagraphContent=({content,paragraphIndex,intl,isRichTextEnabled})=>groupInlineNodes(content).map((group,groupIndex)=>group.kind===`mention`?renderMentionNode({node:group.node,index:groupIndex,paragraphIndex}):renderTextNodes({nodes:group.nodes,paragraphIndex,index:groupIndex,intl,isRichTextEnabled})),renderParagraphNode=({paragraph,index,intl,inlineSuffix,isRichTextEnabled})=>{let content=paragraph.content||[],key=`paragraph-${index}`;return jsxs(Text,{as:`p`,variant:`bodyDefault`,children:[content.length>0?renderParagraphContent({content,paragraphIndex:index,intl,isRichTextEnabled}):jsx(`br`,{}),inlineSuffix]},key)},MessageRenderer=({isRichTextEnabled=!1,messageObject})=>{let intl=useIntl(),[isExpanded,setIsExpanded]=useState(!1);if(!messageObject.content||messageObject.content.length===0)return null;let totalLength=getDocumentLength(messageObject),isTruncated=!isExpanded&&totalLength>450,paragraphsToRender=(isTruncated?truncateDocument(messageObject,450):messageObject).content.filter(isParagraphNode),suffixAnchorIndex=paragraphsToRender.length-1;for(let i=paragraphsToRender.length-1;i>=0;--i)if((paragraphsToRender[i].content?.length??0)>0){suffixAnchorIndex=i;break}let seeMoreButton=isTruncated?jsx(TextButton,{className:text_message_module_default.seeMoreButton,color:`textOnLightLink`,"data-no-expand":!0,onClick:()=>setIsExpanded(!0),variant:`bodyDefaultBold`,children:intl.formatMessage(messages.seeMore)}):null;return paragraphsToRender.map((paragraph,index)=>renderParagraphNode({paragraph,index,intl,inlineSuffix:index===suffixAnchorIndex?seeMoreButton:null,isRichTextEnabled}))};export{MessageRenderer};
@@ -0,0 +1 @@
1
+ import{splitTextIntoSegments}from"./url-segments.js";var groupInlineNodes=nodes=>{let groups=[],currentTextNodes=[],flushTextNodes=()=>{currentTextNodes.length>0&&(groups.push({kind:`text`,nodes:currentTextNodes}),currentTextNodes=[])};for(let node of nodes||[])node.type===`text`?currentTextNodes.push(node):node.type===`mention`?(flushTextNodes(),groups.push({kind:`mention`,node})):flushTextNodes();return flushTextNodes(),groups},getFragments=(nodes,start,end)=>{let fragments=[],nodeStart=0;for(let node of nodes){let nodeEnd=nodeStart+node.text.length,overlapStart=Math.max(start,nodeStart),overlapEnd=Math.min(end,nodeEnd);overlapStart<overlapEnd&&fragments.push({sourceNode:node,value:node.text.slice(overlapStart-nodeStart,overlapEnd-nodeStart)}),nodeStart=nodeEnd}return fragments},segmentTextNodes=nodes=>{let text=nodes.map(node=>node.text).join(``),offset=0;return splitTextIntoSegments(text).map(segment=>{let start=offset,end=start+segment.value.length;return offset=end,{...segment,fragments:getFragments(nodes,start,end)}})};export{groupInlineNodes,segmentTextNodes};
@@ -1 +1 @@
1
- import{THREADED_ANNOTATIONS_RESIN_COMPONENTS}from"../../../v2/resin-targets.js";import{MessageEditorVariant}from"../message-editor/message-editor.types.js";import{MessageEditor}from"../message-editor/message-editor.js";import{useThreadedAnnotationsContext}from"../../../v2/threaded-annotations-context.js";import{t as AnnotationBadge}from"../../../../../chunks/annotation-badge.js";import{MessageHeader}from"../message-header/message-header.js";import messages from"./messages.js";import{t as text_message_module_default}from"../../../../../chunks/text-message.module.js";import{MessageFooter}from"./subcomponents/message-footer.js";import{MessageRenderer}from"./subcomponents/message-renderer.js";import clsx from"clsx";import{useIntl}from"react-intl";import{Fragment,jsx,jsxs}from"react/jsx-runtime";var TextMessage=({id,author,message,createdAt,updatedAt,permissions,showThreadedIndicator=!0,isResolved=!1,isFirstMessage=!1,hasReplies=!1,maxCharacterCount,onAvatarClick,onCopyLink,onDelete,onThreadDelete,onEdit,onEditError,onResolve,onUnresolve,isRichTextEnabled=!1,onFormatToggle,userSelectorProps,annotationTarget,onAnnotationBadgeClick,originalContentDeleted})=>{let{canResolve,canEdit,canDelete}=permissions,intl=useIntl(),{dispatch,isReplyDisabled,isEditDisabled,isAnnotations,editingMessageId}=useThreadedAnnotationsContext(),isEditing=editingMessageId===id,canOpenEdit=!!onEdit&&!isEditDisabled&&canEdit;return jsxs(`div`,{"aria-label":intl.formatMessage(messages.annotationMessageAriaLabel),className:text_message_module_default.textMessage,"data-message-wrapper":!0,"data-message-id":id,"data-resin-component":THREADED_ANNOTATIONS_RESIN_COMPONENTS.COMMENT_CARD,children:[jsx(MessageHeader,{author,canResolve,isResolved,canDelete,canEdit:canOpenEdit,hasReplies,isFirstMessage,onAvatarClick,onCopyLink:onCopyLink?()=>onCopyLink(id):void 0,onDelete:()=>onDelete(id),onThreadDelete,onEdit:canOpenEdit?()=>dispatch({type:`EDIT`,id}):void 0,onResolve:onResolve?()=>onResolve(id):void 0,onUnresolve:onUnresolve?()=>onUnresolve(id):void 0}),jsxs(`div`,{className:text_message_module_default.contentWrapper,children:[jsx(`div`,{className:clsx(text_message_module_default.threadedIndicator,!showThreadedIndicator&&text_message_module_default.threadedIndicatorHidden)}),jsxs(`div`,{className:text_message_module_default.messageContent,children:[annotationTarget&&!isAnnotations&&jsx(`div`,{className:text_message_module_default.annotationBadgeWrapper,children:jsx(AnnotationBadge,{annotationTarget,onClick:()=>onAnnotationBadgeClick?.(id),originalContentDeleted})}),isEditing&&onEdit?jsx(`div`,{className:text_message_module_default.inlineEditSlot,children:jsx(MessageEditor,{initialContent:message,isRichTextEnabled,maxCharacterCount,onFormatToggle,onEditCancel:()=>dispatch({type:`CLEAR_EDIT`}),onEditSuccess:()=>dispatch({type:`CLEAR_EDIT`}),onSave:content=>onEdit(id,content),onSaveError:onEditError,userSelectorProps,variant:MessageEditorVariant.EDIT_MESSAGE})}):jsxs(Fragment,{children:[jsx(`div`,{"data-message-body":!0,children:jsx(MessageRenderer,{messageObject:message})}),jsx(MessageFooter,{createdAt,onReply:isReplyDisabled?void 0:()=>dispatch({type:`REPLY`,author}),updatedAt})]})]})]})]})};export{TextMessage};
1
+ import{THREADED_ANNOTATIONS_RESIN_COMPONENTS}from"../../../v2/resin-targets.js";import{MessageEditorVariant}from"../message-editor/message-editor.types.js";import{MessageEditor}from"../message-editor/message-editor.js";import{useThreadedAnnotationsContext}from"../../../v2/threaded-annotations-context.js";import{t as AnnotationBadge}from"../../../../../chunks/annotation-badge.js";import{MessageHeader}from"../message-header/message-header.js";import messages from"./messages.js";import{t as text_message_module_default}from"../../../../../chunks/text-message.module.js";import{MessageFooter}from"./subcomponents/message-footer.js";import{MessageRenderer}from"./subcomponents/message-renderer.js";import clsx from"clsx";import{useIntl}from"react-intl";import{Fragment,jsx,jsxs}from"react/jsx-runtime";var TextMessage=({id,author,message,createdAt,updatedAt,permissions,showThreadedIndicator=!0,isResolved=!1,isFirstMessage=!1,hasReplies=!1,maxCharacterCount,onAvatarClick,onCopyLink,onDelete,onThreadDelete,onEdit,onEditError,onResolve,onUnresolve,isRichTextEnabled=!1,onFormatToggle,userSelectorProps,annotationTarget,onAnnotationBadgeClick,originalContentDeleted})=>{let{canResolve,canEdit,canDelete}=permissions,intl=useIntl(),{dispatch,isReplyDisabled,isEditDisabled,isAnnotations,editingMessageId}=useThreadedAnnotationsContext(),isEditing=editingMessageId===id,canOpenEdit=!!onEdit&&!isEditDisabled&&canEdit;return jsxs(`div`,{"aria-label":intl.formatMessage(messages.annotationMessageAriaLabel),className:text_message_module_default.textMessage,"data-message-wrapper":!0,"data-message-id":id,"data-resin-component":THREADED_ANNOTATIONS_RESIN_COMPONENTS.COMMENT_CARD,children:[jsx(MessageHeader,{author,canResolve,isResolved,canDelete,canEdit:canOpenEdit,hasReplies,isFirstMessage,onAvatarClick,onCopyLink:onCopyLink?()=>onCopyLink(id):void 0,onDelete:()=>onDelete(id),onThreadDelete,onEdit:canOpenEdit?()=>dispatch({type:`EDIT`,id}):void 0,onResolve:onResolve?()=>onResolve(id):void 0,onUnresolve:onUnresolve?()=>onUnresolve(id):void 0}),jsxs(`div`,{className:text_message_module_default.contentWrapper,children:[jsx(`div`,{className:clsx(text_message_module_default.threadedIndicator,!showThreadedIndicator&&text_message_module_default.threadedIndicatorHidden)}),jsxs(`div`,{className:text_message_module_default.messageContent,children:[annotationTarget&&!isAnnotations&&jsx(`div`,{className:text_message_module_default.annotationBadgeWrapper,children:jsx(AnnotationBadge,{annotationTarget,onClick:()=>onAnnotationBadgeClick?.(id),originalContentDeleted})}),isEditing&&onEdit?jsx(`div`,{className:text_message_module_default.inlineEditSlot,children:jsx(MessageEditor,{initialContent:message,isRichTextEnabled,maxCharacterCount,onFormatToggle,onEditCancel:()=>dispatch({type:`CLEAR_EDIT`}),onEditSuccess:()=>dispatch({type:`CLEAR_EDIT`}),onSave:content=>onEdit(id,content),onSaveError:onEditError,userSelectorProps,variant:MessageEditorVariant.EDIT_MESSAGE})}):jsxs(Fragment,{children:[jsx(`div`,{"data-message-body":!0,children:jsx(MessageRenderer,{isRichTextEnabled,messageObject:message})}),jsx(MessageFooter,{createdAt,onReply:isReplyDisabled?void 0:()=>dispatch({type:`REPLY`,author}),updatedAt})]})]})]})]})};export{TextMessage};
@@ -20,6 +20,11 @@ export default {
20
20
  "groupSharedFeatures.threadedAnnotations.messageEditor.cancelButtonAriaLabel": "[キャンセル] ボタン",
21
21
  "groupSharedFeatures.threadedAnnotations.messageEditor.characterLimitExceeded": "コメントが{excess,plural,one{#文字} other{#文字}}超過しています",
22
22
  "groupSharedFeatures.threadedAnnotations.messageEditor.editorContentAriaLabel": "メッセージ編集者",
23
+ "groupSharedFeatures.threadedAnnotations.messageEditor.formatBold": "太字",
24
+ "groupSharedFeatures.threadedAnnotations.messageEditor.formatBulletList": "箇条書きリスト",
25
+ "groupSharedFeatures.threadedAnnotations.messageEditor.formatItalic": "斜体",
26
+ "groupSharedFeatures.threadedAnnotations.messageEditor.formatNumberedList": "番号付きリスト",
27
+ "groupSharedFeatures.threadedAnnotations.messageEditor.formatUnderline": "下線",
23
28
  "groupSharedFeatures.threadedAnnotations.messageEditor.placeholderAddComment": "コメントを追加してください。@を使用してメンションできます",
24
29
  "groupSharedFeatures.threadedAnnotations.messageEditor.placeholderAriaLabel": "メッセージ入力プレースホルダ",
25
30
  "groupSharedFeatures.threadedAnnotations.messageEditor.placeholderPrefix": "コメントを入力するか、",
@@ -1 +1 @@
1
- ._messageEditorWrapper_1roda_29{cursor:auto;width:100%}._editActionsColumn_1roda_34{align-items:flex-end;gap:var(--bp-space-010);flex-direction:column;display:flex}._editActionsRow_1roda_41{align-items:center;gap:var(--bp-space-020);display:flex}._characterLimitCounter_1roda_47{white-space:nowrap}._messageEditor_1roda_29{--gradient-fade-height:var(--bp-size-040);box-sizing:border-box;padding:.625rem var(--bp-space-005) .625rem var(--bp-space-040);background-color:var(--surface-surface);outline:var(--bp-border-01) solid var(--border-divider-border);border-radius:var(--bp-radius-10);gap:var(--bp-space-020) var(--bp-space-010);cursor:auto;flex-wrap:wrap;width:100%;display:flex;position:relative}._messageEditor_1roda_29._editorEditMode_1roda_65{--gradient-fade-height:var(--bp-size-050)}._messageEditor_1roda_29:focus-within{outline-width:var(--bp-border-02);outline-color:var(--border-input-border-focus)}._messageEditor_1roda_29._editorFirstAnnotation_1roda_72:not(._editorError_1roda_72):focus-within{outline-width:var(--bp-border-01);outline-color:var(--border-divider-border)}._messageEditor_1roda_29._editorError_1roda_72{outline-color:var(--bp-border-message-border-error);outline-width:var(--bp-border-02)}._messageEditor_1roda_29 ._editorViewport_1roda_80{width:fit-content;min-width:calc(100% - 2.875rem);margin:auto 0;position:relative}._messageEditor_1roda_29 ._editorViewport_1roda_80 ._editorContainer_1roda_86{box-sizing:border-box;scrollbar-width:thin;scrollbar-color:var(--black-opacity-50) transparent;position:relative;overflow-y:scroll}@supports not (scrollbar-color:gray transparent){._messageEditor_1roda_29 ._editorViewport_1roda_80 ._editorContainer_1roda_86{scrollbar-width:initial}._messageEditor_1roda_29 ._editorViewport_1roda_80 ._editorContainer_1roda_86::-webkit-scrollbar{width:var(--size-2);background-color:#0000}._messageEditor_1roda_29 ._editorViewport_1roda_80 ._editorContainer_1roda_86::-webkit-scrollbar-thumb{background:var(--black-opacity-50);border-radius:var(--radius-2)}._messageEditor_1roda_29 ._editorViewport_1roda_80 ._editorContainer_1roda_86::-webkit-scrollbar-thumb:hover{background:var(--black-opacity-50)}}._messageEditor_1roda_29 ._editorViewport_1roda_80 ._editorContainer_1roda_86{max-height:10rem;padding:.375rem .625rem .375rem 0}._messageEditor_1roda_29 ._editorViewport_1roda_80 ._editorContainer_1roda_86 ._editor_1roda_65{outline:none;width:100%}._messageEditor_1roda_29 ._editorViewport_1roda_80 ._editorContainer_1roda_86 ._editor_1roda_65 [data-placeholder]:first-child:before{font-weight:var(--bp-font-weight-regular);font-size:var(--bp-font-size-05);font-family:var(--bp-font-font-family), -apple-system, BlinkMacSystemFont, "San Francisco", "Segoe UI", Roboto, "Helvetica Neue", sans-serif;font-style:normal;line-height:var(--bp-font-line-height-04);letter-spacing:var(--bp-font-letter-spacing-01)}:where(body.is-inter-font) ._messageEditor_1roda_29 ._editorViewport_1roda_80 ._editorContainer_1roda_86 ._editor_1roda_65 [data-placeholder]:first-child:before{letter-spacing:.00625rem;text-transform:none;font-family:InterVariable,-apple-system,BlinkMacSystemFont,San Francisco,Segoe UI,Roboto,Helvetica Neue,sans-serif;font-size:.875rem;font-style:normal;font-weight:450;line-height:1.375rem;text-decoration:none}._messageEditor_1roda_29 ._editorViewport_1roda_80 ._editorContainer_1roda_86 ._editor_1roda_65 [data-placeholder]:first-child:before{color:var(--text-text-on-light-tertiary);content:attr(data-placeholder);float:left;pointer-events:none;height:0}._messageEditor_1roda_29 ._editorViewport_1roda_80 ._editorFade_1roda_146{height:var(--bp-size-060);background:linear-gradient(to bottom, transparent, var(--bp-canvas-background,var(--surface-surface)));pointer-events:none;opacity:1;transition:opacity .15s ease-out;position:absolute;bottom:0;left:0;right:0}._messageEditor_1roda_29 ._editorViewport_1roda_80 ._editorFade_1roda_146._editorFadeHidden_1roda_157{opacity:0}._messageEditor_1roda_29 ._editorFullWidth_1roda_160{width:100%;min-width:100%}._messageEditor_1roda_29 ._actionsWrapper_1roda_164{min-height:var(--bp-size-080);width:fit-content;padding-right:var(--bp-space-020);flex:1;justify-content:flex-end;align-items:center;display:flex;position:relative}._messageEditor_1roda_29 ._actionsWrapper_1roda_164 ._actionsWrapperInner_1roda_174{align-items:center;gap:var(--bp-space-020);width:fit-content;display:flex;position:relative}._messageEditor_1roda_29 ._timestampToggle_1roda_181{margin-right:auto}._messageEditor_1roda_29 ._errorMessage_1roda_184{gap:var(--bp-space-010);align-items:center;min-width:0;display:flex}._messageEditor_1roda_29 ._errorMessage_1roda_184>:first-child{flex-shrink:0}._messageEditor_1roda_29 ._errorMessage_1roda_184 ._errorText_1roda_193{color:var(--bp-text-text-destructive-on-light);-webkit-line-clamp:1;-webkit-box-orient:vertical;min-width:0;display:-webkit-box;overflow:hidden}._editorHasScroll_1roda_202{gap:unset;padding-bottom:0}._editorHasScroll_1roda_202 ._editorViewport_1roda_80 ._editorContainer_1roda_86{padding-bottom:var(--bp-space-040);scroll-padding-bottom:var(--bp-space-040)}._editorHasScroll_1roda_202 ._editorViewport_1roda_80 ._editorFade_1roda_146{display:none}._editorHasScroll_1roda_202._editorCharacterLimitExceeded_1roda_213 ._editorViewport_1roda_80 ._editorContainer_1roda_86{padding-bottom:calc(var(--gradient-fade-height,var(--bp-size-040)) + var(--bp-space-040));scroll-padding-bottom:calc(var(--gradient-fade-height,var(--bp-size-040)) + var(--bp-space-040))}._editorHasScroll_1roda_202 ._actionsWrapper_1roda_164{min-width:100%;height:1.875rem;padding-right:0}._editorHasScroll_1roda_202 ._actionsWrapper_1roda_164 ._actionsWrapperInner_1roda_174{bottom:.625rem;left:0;right:var(--bp-space-020);pointer-events:none;background:linear-gradient(to bottom, #fff0 10%, #ffffffbf 18%, #fffffff7 28%, var(--bp-canvas-background,var(--surface-surface)) 71%);justify-content:flex-end;width:auto;position:absolute}._editorHasScroll_1roda_202 ._actionsWrapper_1roda_164 ._actionsWrapperInner_1roda_174>*{pointer-events:auto}._editorHasScroll_1roda_202 ._actionsWrapper_1roda_164 ._actionsWrapperInner_1roda_174._characterLimitExceeded_1roda_235{padding-top:var(--gradient-fade-height,var(--bp-size-040))}._editorHasScroll_1roda_202 ._actionsWrapper_1roda_164 ._actionsWrapperInner_1roda_174._scrolledToBottom_1roda_238{background:0 0}._anchorElement_1roda_242{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0}._messageEditor_1roda_29 ._actionsWrapper_1roda_164._withTimestampToggle_1roda_251,._messageEditor_1roda_29 ._actionsWrapper_1roda_164._withTimestampToggle_1roda_251 ._actionsWrapperInner_1roda_174{width:100%}
1
+ ._messageEditorWrapper_ihey1_29{cursor:auto;width:100%}._editActionsColumn_ihey1_34{align-items:flex-end;gap:var(--bp-space-010);flex-direction:column;display:flex}._editActionsRow_ihey1_41{align-items:center;gap:var(--bp-space-020);display:flex}._characterLimitCounter_ihey1_47{white-space:nowrap}._messageEditor_ihey1_29{--gradient-fade-height:var(--bp-size-040);box-sizing:border-box;padding:.625rem var(--bp-space-005) .625rem var(--bp-space-040);background-color:var(--surface-surface);outline:var(--bp-border-01) solid var(--border-divider-border);border-radius:var(--bp-radius-10);gap:var(--bp-space-020) var(--bp-space-010);cursor:auto;flex-wrap:wrap;width:100%;display:flex;position:relative}._messageEditor_ihey1_29._editorEditMode_ihey1_65{--gradient-fade-height:var(--bp-size-050)}._messageEditor_ihey1_29:focus-within{outline-width:var(--bp-border-02);outline-color:var(--border-input-border-focus)}._messageEditor_ihey1_29._editorFirstAnnotation_ihey1_72:not(._editorError_ihey1_72):focus-within{outline-width:var(--bp-border-01);outline-color:var(--border-divider-border)}._messageEditor_ihey1_29._editorError_ihey1_72{outline-color:var(--bp-border-message-border-error);outline-width:var(--bp-border-02)}._messageEditor_ihey1_29 ._editorViewport_ihey1_80{width:fit-content;min-width:calc(100% - 2.875rem);margin:auto 0;position:relative}._messageEditor_ihey1_29 ._editorViewport_ihey1_80 ._editorContainer_ihey1_86{box-sizing:border-box;scrollbar-width:thin;scrollbar-color:var(--black-opacity-50) transparent;position:relative;overflow-y:scroll}@supports not (scrollbar-color:gray transparent){._messageEditor_ihey1_29 ._editorViewport_ihey1_80 ._editorContainer_ihey1_86{scrollbar-width:initial}._messageEditor_ihey1_29 ._editorViewport_ihey1_80 ._editorContainer_ihey1_86::-webkit-scrollbar{width:var(--size-2);background-color:#0000}._messageEditor_ihey1_29 ._editorViewport_ihey1_80 ._editorContainer_ihey1_86::-webkit-scrollbar-thumb{background:var(--black-opacity-50);border-radius:var(--radius-2)}._messageEditor_ihey1_29 ._editorViewport_ihey1_80 ._editorContainer_ihey1_86::-webkit-scrollbar-thumb:hover{background:var(--black-opacity-50)}}._messageEditor_ihey1_29 ._editorViewport_ihey1_80 ._editorContainer_ihey1_86{max-height:10rem;padding:.375rem .625rem .375rem 0}._messageEditor_ihey1_29 ._editorViewport_ihey1_80 ._editorContainer_ihey1_86 ._editor_ihey1_65{outline:none;width:100%}._messageEditor_ihey1_29 ._editorViewport_ihey1_80 ._editorContainer_ihey1_86 ._editor_ihey1_65 [data-placeholder]:first-child:before{font-weight:var(--bp-font-weight-regular);font-size:var(--bp-font-size-05);font-family:var(--bp-font-font-family), -apple-system, BlinkMacSystemFont, "San Francisco", "Segoe UI", Roboto, "Helvetica Neue", sans-serif;font-style:normal;line-height:var(--bp-font-line-height-04);letter-spacing:var(--bp-font-letter-spacing-01)}:where(body.is-inter-font) ._messageEditor_ihey1_29 ._editorViewport_ihey1_80 ._editorContainer_ihey1_86 ._editor_ihey1_65 [data-placeholder]:first-child:before{letter-spacing:.00625rem;text-transform:none;font-family:Inter Variable,-apple-system,BlinkMacSystemFont,San Francisco,Segoe UI,Roboto,Helvetica Neue,sans-serif;font-size:.875rem;font-style:normal;font-weight:450;line-height:1.375rem;text-decoration:none}._messageEditor_ihey1_29 ._editorViewport_ihey1_80 ._editorContainer_ihey1_86 ._editor_ihey1_65 [data-placeholder]:first-child:before{color:var(--text-text-on-light-tertiary);content:attr(data-placeholder);float:left;pointer-events:none;height:0}._messageEditor_ihey1_29 ._editorViewport_ihey1_80 ._editorFade_ihey1_146{height:var(--bp-size-060);background:linear-gradient(to bottom, transparent, var(--bp-canvas-background,var(--surface-surface)));pointer-events:none;opacity:1;transition:opacity .15s ease-out;position:absolute;bottom:0;left:0;right:0}._messageEditor_ihey1_29 ._editorViewport_ihey1_80 ._editorFade_ihey1_146._editorFadeHidden_ihey1_157{opacity:0}._messageEditor_ihey1_29 ._editorFullWidth_ihey1_160{width:100%;min-width:100%}._messageEditor_ihey1_29 ._actionsWrapper_ihey1_164{min-height:var(--bp-size-080);width:fit-content;padding-right:var(--bp-space-020);flex:1;justify-content:flex-end;align-items:center;display:flex;position:relative}._messageEditor_ihey1_29 ._actionsWrapper_ihey1_164 ._actionsWrapperInner_ihey1_174{align-items:center;gap:var(--bp-space-020);width:fit-content;display:flex;position:relative}._messageEditor_ihey1_29 ._timestampToggle_ihey1_181{margin-right:auto}._messageEditor_ihey1_29 ._errorMessage_ihey1_184{gap:var(--bp-space-010);align-items:center;min-width:0;display:flex}._messageEditor_ihey1_29 ._errorMessage_ihey1_184>:first-child{flex-shrink:0}._messageEditor_ihey1_29 ._errorMessage_ihey1_184 ._errorText_ihey1_193{color:var(--bp-text-text-destructive-on-light);-webkit-line-clamp:1;-webkit-box-orient:vertical;min-width:0;display:-webkit-box;overflow:hidden}._editorHasScroll_ihey1_202{gap:unset;padding-bottom:0}._editorHasScroll_ihey1_202 ._editorViewport_ihey1_80 ._editorContainer_ihey1_86{padding-bottom:var(--bp-space-040);scroll-padding-bottom:var(--bp-space-040)}._editorHasScroll_ihey1_202 ._editorViewport_ihey1_80 ._editorFade_ihey1_146{display:none}._editorHasScroll_ihey1_202._editorCharacterLimitExceeded_ihey1_213 ._editorViewport_ihey1_80 ._editorContainer_ihey1_86{padding-bottom:calc(var(--gradient-fade-height,var(--bp-size-040)) + var(--bp-space-040));scroll-padding-bottom:calc(var(--gradient-fade-height,var(--bp-size-040)) + var(--bp-space-040))}._editorHasScroll_ihey1_202 ._actionsWrapper_ihey1_164{min-width:100%;height:1.875rem;padding-right:0}._editorHasScroll_ihey1_202 ._actionsWrapper_ihey1_164 ._actionsWrapperInner_ihey1_174{bottom:.625rem;left:0;right:var(--bp-space-020);pointer-events:none;background:linear-gradient(to bottom, #fff0 10%, #ffffffbf 18%, #fffffff7 28%, var(--bp-canvas-background,var(--surface-surface)) 71%);justify-content:flex-end;width:auto;position:absolute}._editorHasScroll_ihey1_202 ._actionsWrapper_ihey1_164 ._actionsWrapperInner_ihey1_174>*{pointer-events:auto}._editorHasScroll_ihey1_202 ._actionsWrapper_ihey1_164 ._actionsWrapperInner_ihey1_174._characterLimitExceeded_ihey1_235{padding-top:var(--gradient-fade-height,var(--bp-size-040))}._editorHasScroll_ihey1_202 ._actionsWrapper_ihey1_164 ._actionsWrapperInner_ihey1_174._scrolledToBottom_ihey1_238{background:0 0}._anchorElement_ihey1_242{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0}._messageEditor_ihey1_29 ._actionsWrapper_ihey1_164._withTimestampToggle_ihey1_251,._messageEditor_ihey1_29 ._actionsWrapper_ihey1_164._withTimestampToggle_ihey1_251 ._actionsWrapperInner_ihey1_174{width:100%}
@@ -1,6 +1,7 @@
1
1
  import { DocumentNode } from '../../../../v2/types';
2
2
  interface MessageRendererProps {
3
+ isRichTextEnabled?: boolean;
3
4
  messageObject: DocumentNode;
4
5
  }
5
- export declare const MessageRenderer: ({ messageObject }: MessageRendererProps) => import("react/jsx-runtime").JSX.Element[];
6
+ export declare const MessageRenderer: ({ isRichTextEnabled, messageObject }: MessageRendererProps) => import("react/jsx-runtime").JSX.Element[];
6
7
  export {};
@@ -0,0 +1,9 @@
1
+ import { InlineNode, TextNode } from '../../../../v2/types';
2
+ import { InlineGroup, TextNodeSegment } from './types';
3
+ /**
4
+ * Groups paragraph content into adjacent TextNodes, split by mentions.
5
+ * Mentions are hard boundaries: a URL never spans across one, so consumers
6
+ * segment each group independently.
7
+ */
8
+ export declare const groupInlineNodes: (nodes: InlineNode[] | undefined) => InlineGroup[];
9
+ export declare const segmentTextNodes: (nodes: TextNode[]) => TextNodeSegment[];
@@ -0,0 +1,24 @@
1
+ import { MentionNode, TextNode } from '../../../../v2/types';
2
+ export type TextSegment = {
3
+ type: 'text' | 'url';
4
+ value: string;
5
+ };
6
+ /**
7
+ * A mention, or a maximal sequence of adjacent TextNodes. Continuously reading
8
+ * text can still arrive as several nodes split on mark boundaries (e.g. a bold
9
+ * word), so consumers that scan text work on a whole group at a time.
10
+ */
11
+ export type InlineGroup = {
12
+ kind: 'text';
13
+ nodes: TextNode[];
14
+ } | {
15
+ kind: 'mention';
16
+ node: MentionNode;
17
+ };
18
+ export interface TextNodeFragment {
19
+ sourceNode: TextNode;
20
+ value: string;
21
+ }
22
+ export interface TextNodeSegment extends TextSegment {
23
+ fragments: TextNodeFragment[];
24
+ }
@@ -1,7 +1,4 @@
1
+ import { TextSegment } from './types';
1
2
  export declare const URL_REGEX: RegExp;
2
3
  export declare const trimTrailingChars: (url: string) => string;
3
- export type TextSegment = {
4
- type: 'text' | 'url';
5
- value: string;
6
- };
7
4
  export declare const splitTextIntoSegments: (text: string) => TextSegment[];
@@ -12,13 +12,15 @@ export type MentionRenderAttributes = {
12
12
  authorId: string;
13
13
  mentionId: string;
14
14
  };
15
+ export type TextMarkType = 'bold' | 'italic' | 'underline';
16
+ export type TextMark = {
17
+ type: TextMarkType;
18
+ attrs?: Record<string, unknown>;
19
+ };
15
20
  export type TextNode = {
16
21
  type: 'text';
17
22
  text: string;
18
- marks?: Array<{
19
- type: string;
20
- attrs?: Record<string, unknown>;
21
- }>;
23
+ marks?: TextMark[];
22
24
  };
23
25
  export type ParagraphNode = {
24
26
  type: 'paragraph';
@@ -45,8 +47,10 @@ export type DocumentNode = {
45
47
  content: (BulletListNode | OrderedListNode | ParagraphNode)[];
46
48
  attrs?: Record<string, unknown>;
47
49
  };
50
+ /** Nodes that can appear inside a paragraph. */
51
+ export type InlineNode = MentionNode | TextNode;
48
52
  /** Formats toggleable from the rich text formatting bar (or their keyboard shortcuts). */
49
- export type RichTextFormat = 'bold' | 'italic' | 'underline' | 'bulletList' | 'orderedList';
53
+ export type RichTextFormat = TextMarkType | 'bulletList' | 'orderedList';
50
54
  /**
51
55
  * Narrows a top-level document block to a paragraph. Consumers that only
52
56
  * support paragraph blocks (renderer, truncation — dedicated list support
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@box/threaded-annotations",
3
- "version": "4.6.6",
3
+ "version": "4.7.1",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "dependencies": {
6
6
  "@floating-ui/dom": "^1.6.0",
@@ -21,23 +21,23 @@
21
21
  "uuid": "^9.0.1"
22
22
  },
23
23
  "peerDependencies": {
24
- "@box/blueprint-web": "^16.19.1",
25
- "@box/blueprint-web-assets": "^5.7.5",
26
- "@box/collaboration-popover": "^2.2.14",
27
- "@box/readable-time": "^2.2.14",
28
- "@box/user-selector": "^2.2.14",
24
+ "@box/blueprint-web": "^16.19.2",
25
+ "@box/blueprint-web-assets": "^5.7.6",
26
+ "@box/collaboration-popover": "^2.2.15",
27
+ "@box/readable-time": "^2.2.15",
28
+ "@box/user-selector": "^2.2.15",
29
29
  "clsx": "^1.2.1",
30
30
  "react": "^18.0.0",
31
31
  "react-dom": "^18.0.0",
32
32
  "react-intl": "^6.4.2"
33
33
  },
34
34
  "devDependencies": {
35
- "@box/blueprint-web": "^16.19.1",
36
- "@box/blueprint-web-assets": "^5.7.5",
35
+ "@box/blueprint-web": "^16.19.2",
36
+ "@box/blueprint-web-assets": "^5.7.6",
37
37
  "@box/eslint-plugin-blueprint": "2.2.3",
38
- "@box/readable-time": "^2.2.14",
39
- "@box/storybook-utils": "^1.2.14",
40
- "@box/user-selector": "^2.2.14",
38
+ "@box/readable-time": "^2.2.15",
39
+ "@box/storybook-utils": "^1.2.15",
40
+ "@box/user-selector": "^2.2.15",
41
41
  "react": "^18.0.0",
42
42
  "react-dom": "^18.0.0"
43
43
  },