@box/threaded-annotations 4.13.0 → 4.13.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/text-message2.css';var text_message_module_default={textMessage:`_textMessage_qsyra_29`,contentWrapper:`_contentWrapper_qsyra_38`,threadedIndicator:`_threadedIndicator_qsyra_43`,threadedIndicatorHidden:`_threadedIndicatorHidden_qsyra_59`,messageContent:`_messageContent_qsyra_62`,inlineEditSlot:`_inlineEditSlot_qsyra_100`,annotationBadgeWrapper:`_annotationBadgeWrapper_qsyra_103`,messageFooter:`_messageFooter_qsyra_111`,readableTimeWrapper:`_readableTimeWrapper_qsyra_117`,replyButton:`_replyButton_qsyra_121`,seeMoreButton:`_seeMoreButton_qsyra_136`,richTextList:`_richTextList_qsyra_140`};export{text_message_module_default as t};
1
+ import '../styles/text-message2.css';var text_message_module_default={textMessage:`_textMessage_1wvil_29`,contentWrapper:`_contentWrapper_1wvil_38`,threadedIndicator:`_threadedIndicator_1wvil_43`,threadedIndicatorHidden:`_threadedIndicatorHidden_1wvil_59`,messageContent:`_messageContent_1wvil_62`,richTextList:`_richTextList_1wvil_103`,inlineEditSlot:`_inlineEditSlot_1wvil_107`,annotationBadgeWrapper:`_annotationBadgeWrapper_1wvil_110`,messageFooter:`_messageFooter_1wvil_118`,readableTimeWrapper:`_readableTimeWrapper_1wvil_124`,replyButton:`_replyButton_1wvil_128`,seeMoreButton:`_seeMoreButton_1wvil_143`};export{text_message_module_default as t};
@@ -1,2 +1,2 @@
1
- import{underlineMarkdownItPlugin}from"./underline-markdown-it-plugin.js";import{v4}from"uuid";import MarkdownIt from"markdown-it";var MARKDOWN_IT_DISABLE=[`autolink`,`backticks`,`blockquote`,`code`,`fence`,`heading`,`hr`,`html_block`,`html_inline`,`image`,`lheading`,`link`,`reference`],UAA_MENTION_RE=/^@\[([^:\]]+):([^\]]+)\]/,tokenizeUaaMention=(state,silent)=>{if(state.src.charCodeAt(state.pos)!==64)return!1;let match=UAA_MENTION_RE.exec(state.src.slice(state.pos));if(!match)return!1;if(!silent){let token=state.push(`mention`,`mention`,0);token.content=match[0],token.meta={userId:match[1],userName:match[2]}}return state.pos+=match[0].length,!0},tokenizer=(()=>{let tokenizer=new MarkdownIt(`commonmark`,{html:!1,linkify:!1,breaks:!1});return MARKDOWN_IT_DISABLE.forEach(rule=>{tokenizer.disable(rule)}),tokenizer.inline.ruler.before(`escape`,`uaa_mention`,tokenizeUaaMention),tokenizer.use(underlineMarkdownItPlugin),tokenizer})(),createEmptyDoc=()=>({type:`doc`,content:[]}),createMention=(userId,userName)=>({attrs:{authorId:userId,mentionId:v4(),mentionedUserId:userId,mentionedUserName:userName},type:`mention`}),marksFromStack=stack=>stack.length>0?stack.map(type=>({type})):void 0,OPEN_MARK={em_open:`italic`,strong_open:`bold`,underline_open:`underline`},CLOSE_MARK={em_close:`italic`,strong_close:`bold`,underline_close:`underline`},parseInline=tokens=>{if(!tokens?.length)return;let content=[],markStack=[],pushText=text=>{text&&content.push({type:`text`,text,marks:marksFromStack(markStack)})};return tokens.forEach(token=>{if(token.type===`mention`){let meta=token.meta;meta&&content.push(createMention(meta.userId,meta.userName));return}if(token.type===`text`){pushText(token.content);return}if(token.type===`softbreak`||token.type===`hardbreak`){pushText(`
1
+ import{splitListsOnBlankLinePlugin}from"./split-lists-on-blank-line-plugin.js";import{underlineMarkdownItPlugin}from"./underline-markdown-it-plugin.js";import{v4}from"uuid";import MarkdownIt from"markdown-it";var MARKDOWN_IT_DISABLE=[`autolink`,`backticks`,`blockquote`,`code`,`fence`,`heading`,`hr`,`html_block`,`html_inline`,`image`,`lheading`,`link`,`reference`],UAA_MENTION_RE=/^@\[([^:\]]+):([^\]]+)\]/,tokenizeUaaMention=(state,silent)=>{if(state.src.charCodeAt(state.pos)!==64)return!1;let match=UAA_MENTION_RE.exec(state.src.slice(state.pos));if(!match)return!1;if(!silent){let token=state.push(`mention`,`mention`,0);token.content=match[0],token.meta={userId:match[1],userName:match[2]}}return state.pos+=match[0].length,!0},tokenizer=(()=>{let tokenizer=new MarkdownIt(`commonmark`,{html:!1,linkify:!1,breaks:!1});return MARKDOWN_IT_DISABLE.forEach(rule=>{tokenizer.disable(rule)}),tokenizer.inline.ruler.before(`escape`,`uaa_mention`,tokenizeUaaMention),tokenizer.use(underlineMarkdownItPlugin),tokenizer.use(splitListsOnBlankLinePlugin),tokenizer})(),createEmptyDoc=()=>({type:`doc`,content:[]}),createMention=(userId,userName)=>({attrs:{authorId:userId,mentionId:v4(),mentionedUserId:userId,mentionedUserName:userName},type:`mention`}),marksFromStack=stack=>stack.length>0?stack.map(type=>({type})):void 0,OPEN_MARK={em_open:`italic`,strong_open:`bold`,underline_open:`underline`},CLOSE_MARK={em_close:`italic`,strong_close:`bold`,underline_close:`underline`},parseInline=tokens=>{if(!tokens?.length)return;let content=[],markStack=[],pushText=text=>{text&&content.push({type:`text`,text,marks:marksFromStack(markStack)})};return tokens.forEach(token=>{if(token.type===`mention`){let meta=token.meta;meta&&content.push(createMention(meta.userId,meta.userName));return}if(token.type===`text`){pushText(token.content);return}if(token.type===`softbreak`||token.type===`hardbreak`){pushText(`
2
2
  `);return}let openMark=OPEN_MARK[token.type];if(openMark){markStack.push(openMark);return}let closeMark=CLOSE_MARK[token.type];if(closeMark){let index=markStack.lastIndexOf(closeMark);index>=0&&markStack.splice(index,1)}}),content.length>0?content:void 0},parseListItem=(tokens,openIndex)=>{let content=[],index=openIndex+1;for(;index<tokens.length&&tokens[index].type!==`list_item_close`;){let token=tokens[index];if(token.type===`paragraph_open`){let{paragraph,closeIndex}=parseParagraph(tokens,index);content.push(paragraph),index=closeIndex+1}else if(token.type===`bullet_list_open`||token.type===`ordered_list_open`){let{list,closeIndex}=parseList(tokens,index);content.push(list),index=closeIndex+1}else index+=1}return{closeIndex:index,item:{type:`listItem`,content:content.length>0?content:void 0}}},parseList=(tokens,openIndex)=>{let open=tokens[openIndex],isOrdered=open.type===`ordered_list_open`,closeType=isOrdered?`ordered_list_close`:`bullet_list_close`,items=[],index=openIndex+1;for(;index<tokens.length&&tokens[index].type!==closeType;)if(tokens[index].type===`list_item_open`){let parsed=parseListItem(tokens,index);items.push(parsed.item),index=parsed.closeIndex+1}else index+=1;if(!isOrdered)return{closeIndex:index,list:{type:`bulletList`,content:items}};let startRaw=open.attrGet(`start`),start=startRaw==null?void 0:Number(startRaw);return{closeIndex:index,list:Number.isFinite(start)&&start!==1?{type:`orderedList`,content:items,attrs:{start}}:{type:`orderedList`,content:items}}},parseParagraph=(tokens,openIndex)=>{let index=openIndex+1,inline;for(;index<tokens.length&&tokens[index].type!==`paragraph_close`;)tokens[index].type===`inline`&&(inline=tokens[index]),index+=1;return{closeIndex:index,paragraph:{type:`paragraph`,content:parseInline(inline?.children)}}},parseBlocks=tokens=>{let blocks=[],index=0;for(;index<tokens.length;){let token=tokens[index];if(token.type===`paragraph_open`){let{paragraph,closeIndex}=parseParagraph(tokens,index);blocks.push(paragraph),index=closeIndex+1}else if(token.type===`bullet_list_open`||token.type===`ordered_list_open`){let{list,closeIndex}=parseList(tokens,index);blocks.push(list),index=closeIndex+1}else index+=1}return blocks},parseMessageMarkdown=markdown=>markdown?{type:`doc`,content:parseBlocks(tokenizer.parse(markdown,{}))}:createEmptyDoc();export{parseMessageMarkdown};
@@ -1,4 +1,3 @@
1
- import{isListNode}from"./document-node-guards.js";var MARK_WRAP_ORDER=[`italic`,`bold`,`underline`],MARK_WRAPPER={bold:text=>`**${text}**`,italic:text=>`_${text}_`,underline:text=>`++${text}++`},ESCAPE_RE=/([\\*_[\]+\-@])/g,escapeText=text=>text.replace(ESCAPE_RE,`\\$1`),escapeOrderedListMarker=text=>text.replace(/(^|\n)(\d{1,9})([.)])(\s)/g,`$1$2\\$3$4`),wrapMarks=(text,marks)=>{let types=new Set((marks??[]).map(mark=>mark.type));if(types.size===0)return text;let[,leadingWhitespace,content,trailingWhitespace]=text.match(/^(\s*)([\s\S]*?)(\s*)$/)??[``,``,text,``];if(!content)return text;let wrapped=content;return MARK_WRAP_ORDER.forEach(type=>{types.has(type)&&(wrapped=MARK_WRAPPER[type](wrapped))}),`${leadingWhitespace}${wrapped}${trailingWhitespace}`},serializeMention=node=>`@[${node.attrs.mentionedUserId}:${node.attrs.mentionedUserName}]`,serializeText=node=>wrapMarks(escapeText(node.text),node.marks),serializeInline=nodes=>(nodes??[]).map(node=>node.type===`mention`?serializeMention(node):serializeText(node)).join(``),serializeParagraph=paragraph=>escapeOrderedListMarker(serializeInline(paragraph.content)),serializeListItem=(item,indent,marker)=>{let content=item.content??[],lines=[],usedMarker=!1,continuationIndent=`${indent}${` `.repeat(marker.length)}`;return content.forEach(child=>{if(child.type===`paragraph`){let inline=serializeParagraph(child);usedMarker?(lines.push(``),lines.push(`${continuationIndent}${inline}`)):(lines.push(`${indent}${marker}${inline}`),usedMarker=!0);return}isListNode(child)&&(usedMarker||=(lines.push(`${indent}${marker}`.trimEnd()),!0),lines.push(...serializeList(child,continuationIndent)))}),usedMarker||lines.push(`${indent}${marker}`.trimEnd()),lines},serializeList=(list,indent)=>{if(list.type===`bulletList`)return(list.content??[]).flatMap(item=>serializeListItem(item,indent,`- `));let start=typeof list.attrs?.start==`number`?list.attrs.start:1;return(list.content??[]).flatMap((item,index)=>serializeListItem(item,indent,`${start+index}. `))},serializeBlock=block=>block.type===`paragraph`?serializeParagraph(block):isListNode(block)?serializeList(block,``).join(`
2
- `):``,serializeMessageToMarkdown=doc=>doc?.content?.length?doc.content.map(serializeBlock).filter(block=>block.length>0).join(`
3
-
4
- `):``;export{serializeMessageToMarkdown};
1
+ import{isKnownBlockNode,isListNode}from"./document-node-guards.js";var isWordChar=char=>char!==void 0&&/\w/.test(char),isWhitespaceChar=char=>char===void 0||/\s/.test(char),isPunctuationChar=char=>char!==void 0&&!isWordChar(char)&&!/\s/.test(char),canFormUnderlineSpan=(text,start,end)=>{let lastChar=start>0?text[start-1]:void 0,nextChar=end<text.length?text[end]:void 0,isLastWhiteSpace=isWhitespaceChar(lastChar),isNextWhiteSpace=isWhitespaceChar(nextChar),isLastPunctChar=isPunctuationChar(lastChar),isNextPunctChar=isPunctuationChar(nextChar),leftFlanking=!isNextWhiteSpace&&(!isNextPunctChar||isLastWhiteSpace||isLastPunctChar),rightFlanking=!isLastWhiteSpace&&(!isLastPunctChar||isNextWhiteSpace||isNextPunctChar),isIncrementRun=isWordChar(lastChar)&&isWhitespaceChar(nextChar);return(leftFlanking||rightFlanking)&&!isIncrementRun},escapeText=text=>{let result=``,index=0;for(;index<text.length;){let char=text[index];if(char===`\\`||char===`*`)result+=`\\${char}`,index+=1;else if(char===`_`){let isMidWord=isWordChar(text[index-1])&&isWordChar(text[index+1]);result+=isMidWord?char:`\\${char}`,index+=1}else if(char===`@`&&text[index+1]===`[`)result+=`\\@`,index+=1;else if(char===`+`){let end=index;for(;end<text.length&&text[end]===`+`;)end+=1;let run=text.slice(index,end);result+=run.length>=2&&canFormUnderlineSpan(text,index,end)?run.replace(/\+/g,`\\+`):run,index=end}else result+=char,index+=1}return result},escapeStartOfLine=text=>text.replace(/(^|\n)([ \t]*)(\d{1,9})([.)])(\s|$)/g,`$1$2$3\\$4$5`).replace(/(^|\n)([ \t]*)([-+])(\s|$)/g,`$1$2\\$3$4`),wrapMarks=(text,marks)=>{let types=new Set((marks??[]).map(mark=>mark.type));if(types.size===0)return text;let[,leadingWhitespace,content,trailingWhitespace]=text.match(/^(\s*)([\s\S]*?)(\s*)$/)??[``,``,text,``];if(!content)return text;let stars=`*`.repeat(+!!types.has(`italic`)+(types.has(`bold`)?2:0)),wrapped=stars?`${stars}${content}${stars}`:content;return types.has(`underline`)?`++${leadingWhitespace}${wrapped}${trailingWhitespace}++`:`${leadingWhitespace}${wrapped}${trailingWhitespace}`},serializeMention=node=>`@[${node.attrs.mentionedUserId}:${node.attrs.mentionedUserName}]`,serializeText=node=>wrapMarks(escapeText(node.text),node.marks),serializeInline=nodes=>(nodes??[]).map(node=>node.type===`mention`?serializeMention(node):serializeText(node)).join(``),serializeParagraph=paragraph=>escapeStartOfLine(serializeInline(paragraph.content)),leadingWhitespaceLength=text=>text.match(/^[ \t]*/)?.[0].length??0,serializeListItem=(item,indent,marker)=>{let content=item.content??[],lines=[],usedMarker=!1,firstParagraph=content.find(child=>child.type===`paragraph`),leadingWs=leadingWhitespaceLength(firstParagraph?serializeParagraph(firstParagraph):``),continuationIndent=`${indent}${` `.repeat(marker.length+leadingWs)}`;return content.forEach(child=>{if(child.type===`paragraph`){let inline=serializeParagraph(child);usedMarker?(lines.push(``),lines.push(`${continuationIndent}${inline}`)):(lines.push(`${indent}${marker}${inline}`),usedMarker=!0);return}isListNode(child)&&(usedMarker||=(lines.push(`${indent}${marker}`.trimEnd()),!0),lines.push(...serializeList(child,continuationIndent)))}),usedMarker||lines.push(`${indent}${marker}`.trimEnd()),lines},serializeList=(list,indent)=>{if(list.type===`bulletList`)return(list.content??[]).flatMap(item=>serializeListItem(item,indent,`- `));let start=typeof list.attrs?.start==`number`?list.attrs.start:1;return(list.content??[]).flatMap((item,index)=>serializeListItem(item,indent,`${start+index}. `))},serializeBlock=block=>block.type===`paragraph`?serializeParagraph(block):isListNode(block)?serializeList(block,``).join(`
2
+ `):``,joinSerializedBlocks=parts=>{let result=``,pendingEmpties=0;return parts.forEach(part=>{if(part.length===0){pendingEmpties+=1;return}result.length>0&&(result+=`
3
+ `.repeat(2+pendingEmpties)),result+=part,pendingEmpties=0}),result},serializeMessageToMarkdown=doc=>doc?.content?.length?joinSerializedBlocks(doc.content.filter(isKnownBlockNode).map(serializeBlock)):``;export{serializeMessageToMarkdown};
@@ -0,0 +1,2 @@
1
+ var isListOpen=type=>type===`bullet_list_open`||type===`ordered_list_open`,extraEmptyParagraphsBefore=(lines,startLine)=>{if(typeof startLine!=`number`||startLine<=0)return 0;let blanks=0;for(let line=startLine-1;line>=0&&lines[line].trim()===``;--line)blanks+=1;return Math.max(0,blanks-1)},createEmptyParagraphTokens=state=>{let open=new state.Token(`paragraph_open`,`p`,1);open.block=!0;let inline=new state.Token(`inline`,``,0);inline.content=``,inline.children=[];let close=new state.Token(`paragraph_close`,`p`,-1);return close.block=!0,[open,inline,close]},isTopLevelBlockClose=token=>token.level===0&&token.nesting===-1&&(token.type===`paragraph_close`||token.type===`bullet_list_close`||token.type===`ordered_list_close`),isTopLevelBlockOpen=token=>token.level===0&&token.nesting===1&&(token.type===`paragraph_open`||isListOpen(token.type)),restoreEmptyParagraphs=state=>{let lines=state.src.split(`
2
+ `),{tokens}=state,inserts=[];for(let index=0;index<tokens.length-1;index+=1)if(isTopLevelBlockClose(tokens[index])&&isTopLevelBlockOpen(tokens[index+1])){let count=extraEmptyParagraphsBefore(lines,tokens[index+1].map?.[0]);count>0&&inserts.push({count,index:index+1})}for(let offset=inserts.length-1;offset>=0;--offset){let{count,index}=inserts[offset],emptyParagraphs=Array.from({length:count},()=>createEmptyParagraphTokens(state)).flat();tokens.splice(index,0,...emptyParagraphs)}},splitListsOnBlankLinePlugin=md=>{md.core.ruler.after(`block`,`restore_empty_paragraphs`,restoreEmptyParagraphs)};export{splitListsOnBlankLinePlugin};
@@ -1 +1 @@
1
- var PLUS_CHAR_CODE=43,tokenize=(state,silent)=>{if(silent)return!1;let start=state.pos;if(state.src.charCodeAt(start)!==PLUS_CHAR_CODE)return!1;let scanned=state.scanDelims(start,!0),len=scanned.length;if(len<2)return!1;let ch=String.fromCharCode(PLUS_CHAR_CODE);if(len%2){let token=state.push(`text`,``,0);token.content=ch,--len}for(let i=0;i<len;i+=2){let token=state.push(`text`,``,0);token.content=`++`,(scanned.can_open||scanned.can_close)&&state.delimiters.push({close:scanned.can_close,end:-1,length:0,marker:PLUS_CHAR_CODE,open:scanned.can_open,token:state.tokens.length-1})}return state.pos+=scanned.length,!0},postProcess=(state,delimiters)=>{delimiters.forEach(startDelim=>{if(startDelim.marker!==PLUS_CHAR_CODE||startDelim.end===-1)return;let endDelim=delimiters[startDelim.end],tokenOpen=state.tokens[startDelim.token];tokenOpen.type=`underline_open`,tokenOpen.tag=`underline`,tokenOpen.nesting=1,tokenOpen.markup=`++`,tokenOpen.content=``;let tokenClose=state.tokens[endDelim.token];tokenClose.type=`underline_close`,tokenClose.tag=`underline`,tokenClose.nesting=-1,tokenClose.markup=`++`,tokenClose.content=``})},underlineMarkdownItPlugin=md=>{md.inline.ruler.before(`emphasis`,`underline`,tokenize),md.inline.ruler2.after(`emphasis`,`underline`,state=>(postProcess(state,state.delimiters),state.tokens_meta.forEach(meta=>{meta?.delimiters&&postProcess(state,meta.delimiters)}),!0))};export{underlineMarkdownItPlugin};
1
+ var PLUS_CHAR_CODE=43,ASTERISK_CHAR_CODE=42,UNDERSCORE_CHAR_CODE=95,SPACE_CHAR_CODE=32,isOwnEmphasisDelimiter=charCode=>charCode===ASTERISK_CHAR_CODE||charCode===UNDERSCORE_CHAR_CODE,scanTransparentDelims=(state,start,length)=>{let{isMdAsciiPunct,isPunctChar,isWhiteSpace}=state.md.utils,before=start-1;for(;before>=0&&isOwnEmphasisDelimiter(state.src.charCodeAt(before));)--before;let after=start+length;for(;after<state.posMax&&isOwnEmphasisDelimiter(state.src.charCodeAt(after));)after+=1;let lastChar=before>=0?state.src.charCodeAt(before):SPACE_CHAR_CODE,nextChar=after<state.posMax?state.src.charCodeAt(after):SPACE_CHAR_CODE,isLastPunctChar=isMdAsciiPunct(lastChar)||isPunctChar(String.fromCharCode(lastChar)),isNextPunctChar=isMdAsciiPunct(nextChar)||isPunctChar(String.fromCharCode(nextChar)),isLastWhiteSpace=isWhiteSpace(lastChar),isNextWhiteSpace=isWhiteSpace(nextChar),leftFlanking=!0,rightFlanking=!0;return(isNextWhiteSpace||isNextPunctChar&&!(isLastWhiteSpace||isLastPunctChar))&&(leftFlanking=!1),(isLastWhiteSpace||isLastPunctChar&&!(isNextWhiteSpace||isNextPunctChar))&&(rightFlanking=!1),{canClose:rightFlanking||isLastWhiteSpace,canOpen:leftFlanking||isNextWhiteSpace}},lastTextCharCode=token=>{if(!(token?.type!==`text`||token.content.length===0))return token.content.charCodeAt(token.content.length-1)},firstTextCharCode=token=>{if(!(token?.type!==`text`||token.content.length===0))return token.content.charCodeAt(0)},isWordLikeChar=(state,charCode)=>{let{isMdAsciiPunct,isPunctChar,isWhiteSpace}=state.md.utils;return!isWhiteSpace(charCode)&&!isMdAsciiPunct(charCode)&&!isPunctChar(String.fromCharCode(charCode))},isIncrementPair=(state,startDelim,endDelim)=>{let beforeOpen=lastTextCharCode(state.tokens[startDelim.token-1]),afterOpen=firstTextCharCode(state.tokens[startDelim.token+1]),beforeClose=lastTextCharCode(state.tokens[endDelim.token-1]);return beforeOpen===void 0||afterOpen===void 0||beforeClose===void 0?!1:isWordLikeChar(state,beforeOpen)&&state.md.utils.isWhiteSpace(afterOpen)&&isWordLikeChar(state,beforeClose)},tokenize=(state,silent)=>{if(silent)return!1;let start=state.pos;if(state.src.charCodeAt(start)!==PLUS_CHAR_CODE)return!1;let scanned=state.scanDelims(start,!0),len=scanned.length;if(len<2)return!1;let{canClose,canOpen}=scanTransparentDelims(state,start,scanned.length),ch=String.fromCharCode(PLUS_CHAR_CODE);if(len%2){let token=state.push(`text`,``,0);token.content=ch,--len}for(let i=0;i<len;i+=2){let token=state.push(`text`,``,0);token.content=`++`,(canOpen||canClose)&&state.delimiters.push({close:canClose,end:-1,length:0,marker:PLUS_CHAR_CODE,open:canOpen,token:state.tokens.length-1})}return state.pos+=scanned.length,!0},postProcess=(state,delimiters)=>{let loneMarkers=[];for(delimiters.forEach(startDelim=>{if(startDelim.marker!==PLUS_CHAR_CODE||startDelim.end===-1)return;let endDelim=delimiters[startDelim.end];if(isIncrementPair(state,startDelim,endDelim))return;let tokenOpen=state.tokens[startDelim.token];tokenOpen.type=`underline_open`,tokenOpen.tag=`underline`,tokenOpen.nesting=1,tokenOpen.markup=`++`,tokenOpen.content=``;let tokenClose=state.tokens[endDelim.token];tokenClose.type=`underline_close`,tokenClose.tag=`underline`,tokenClose.nesting=-1,tokenClose.markup=`++`,tokenClose.content=``;let beforeClose=state.tokens[endDelim.token-1];beforeClose?.type===`text`&&beforeClose.content===`+`&&loneMarkers.push(endDelim.token-1)});loneMarkers.length>0;){let markerIndex=loneMarkers.pop(),target=markerIndex+1;for(;target<state.tokens.length&&state.tokens[target].type===`underline_close`;)target+=1;if(--target,markerIndex!==target){let token=state.tokens[target];state.tokens[target]=state.tokens[markerIndex],state.tokens[markerIndex]=token}}},underlineMarkdownItPlugin=md=>{md.inline.ruler.before(`emphasis`,`underline`,tokenize),md.inline.ruler2.before(`emphasis`,`underline`,state=>(postProcess(state,state.delimiters),state.tokens_meta.forEach(meta=>{meta?.delimiters&&postProcess(state,meta.delimiters)}),!0))};export{underlineMarkdownItPlugin};
@@ -1 +1 @@
1
- ._textMessage_qsyra_29{flex-direction:column;flex:1;width:100%;height:100%;display:flex;position:relative;overflow:visible}._textMessage_qsyra_29 ._contentWrapper_qsyra_38{gap:var(--space-2);margin-top:.125rem;display:flex}._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._threadedIndicator_qsyra_43{width:var(--space-7);flex-shrink:0;position:relative}._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._threadedIndicator_qsyra_43:after{content:"";left:50%;top:var(--space-05);bottom:var(--space-05);width:var(--border-2);background-color:var(--border-divider-border);border-radius:var(--radius-1);position:absolute;transform:translate(-50%)}._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._threadedIndicatorHidden_qsyra_59:after{visibility:hidden}._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageContent_qsyra_62{overflow-wrap:break-word;row-gap:var(--bp-space-010);flex-direction:column;flex:1;min-width:0;display:flex}._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageContent_qsyra_62 strong{font-weight:var(--bp-font-weight-bold);font-style:inherit}._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageContent_qsyra_62 em{font-style:italic;font-weight:inherit}._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageContent_qsyra_62 ul,._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageContent_qsyra_62 ol{margin:0;padding-inline-start:var(--bp-space-060)}._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageContent_qsyra_62 ul,._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageContent_qsyra_62 ul>li{list-style-type:disc}._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageContent_qsyra_62 ol,._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageContent_qsyra_62 ol>li{list-style-type:decimal}._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageContent_qsyra_62 ul ul,._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageContent_qsyra_62 ul ol,._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageContent_qsyra_62 ol ul,._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageContent_qsyra_62 ol ol{margin-block-start:var(--bp-space-005)}._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageContent_qsyra_62 li p{margin:0}._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageContent_qsyra_62 ._inlineEditSlot_qsyra_100{margin-top:var(--space-2)}._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageContent_qsyra_62 ._annotationBadgeWrapper_qsyra_103{flex-direction:column;align-items:flex-start;min-width:0;max-width:100%;display:flex;overflow:hidden}._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageFooter_qsyra_111{align-items:center;gap:var(--space-1);flex-direction:row;display:flex}._textMessage_qsyra_29 ._contentWrapper_qsyra_38 ._messageFooter_qsyra_111 ._readableTimeWrapper_qsyra_117{cursor:auto}._replyButton_qsyra_121{padding-top:var(--space-05);padding-bottom:var(--space-05);opacity:0;transition:opacity .1s}[data-message-wrapper]:hover ._replyButton_qsyra_121,[data-message-wrapper]:focus-within ._replyButton_qsyra_121{opacity:1}@media (pointer:coarse),(hover:none){._replyButton_qsyra_121{opacity:1}}._seeMoreButton_qsyra_136{margin-inline-start:var(--bp-space-010)}._richTextList_qsyra_140 li{margin:0;padding:0}._richTextList_qsyra_140 li+li{margin-block-start:var(--bp-space-005)}
1
+ ._textMessage_1wvil_29{flex-direction:column;flex:1;width:100%;height:100%;display:flex;position:relative;overflow:visible}._textMessage_1wvil_29 ._contentWrapper_1wvil_38{gap:var(--space-2);margin-top:.125rem;display:flex}._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._threadedIndicator_1wvil_43{width:var(--space-7);flex-shrink:0;position:relative}._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._threadedIndicator_1wvil_43:after{content:"";left:50%;top:var(--space-05);bottom:var(--space-05);width:var(--border-2);background-color:var(--border-divider-border);border-radius:var(--radius-1);position:absolute;transform:translate(-50%)}._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._threadedIndicatorHidden_1wvil_59:after{visibility:hidden}._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62{overflow-wrap:break-word;row-gap:var(--bp-space-010);flex-direction:column;flex:1;min-width:0;display:flex}._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 strong{font-weight:var(--bp-font-weight-bold);font-style:inherit}._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 em{font-style:italic;font-weight:inherit}._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 ul,._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 ol{margin:0;padding-inline-start:var(--bp-space-060)}._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 ul,._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 ul>li{list-style-type:disc}._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 ol,._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 ol>li{list-style-type:decimal}._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 ul ul,._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 ul ol,._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 ol ul,._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 ol ol{margin-block-start:var(--bp-space-005)}._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 li p{margin:0}._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 [data-message-body]{white-space:break-spaces}._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 [data-message-body]>ol._richTextList_1wvil_103+ol._richTextList_1wvil_103,._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 [data-message-body]>ul._richTextList_1wvil_103+ul._richTextList_1wvil_103{margin-block-start:var(--bp-space-050)}._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 ._inlineEditSlot_1wvil_107{margin-top:var(--space-2)}._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageContent_1wvil_62 ._annotationBadgeWrapper_1wvil_110{flex-direction:column;align-items:flex-start;min-width:0;max-width:100%;display:flex;overflow:hidden}._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageFooter_1wvil_118{align-items:center;gap:var(--space-1);flex-direction:row;display:flex}._textMessage_1wvil_29 ._contentWrapper_1wvil_38 ._messageFooter_1wvil_118 ._readableTimeWrapper_1wvil_124{cursor:auto}._replyButton_1wvil_128{padding-top:var(--space-05);padding-bottom:var(--space-05);opacity:0;transition:opacity .1s}[data-message-wrapper]:hover ._replyButton_1wvil_128,[data-message-wrapper]:focus-within ._replyButton_1wvil_128{opacity:1}@media (pointer:coarse),(hover:none){._replyButton_1wvil_128{opacity:1}}._seeMoreButton_1wvil_143{margin-inline-start:var(--bp-space-010)}._richTextList_1wvil_103 li{margin:0;padding:0}._richTextList_1wvil_103 li+li{margin-block-start:var(--bp-space-005)}
@@ -2,10 +2,10 @@ import { JSONContent } from '@tiptap/core';
2
2
  import { CollaborationPopoverProps } from '@box/collaboration-popover';
3
3
  import { MentionContextData } from '../../components/mention-component/mention-context';
4
4
  import { ThreadedAnnotationsProps } from '../threaded-annotations';
5
- import { AnnotationBadgeTargetType } from '../types/annotation-badge-types';
6
- import { TextMessageType } from '../types';
5
+ import { AnnotationBadgeTargetType, TextMessageType } from '../types';
7
6
  export declare const defaultUserSelectorProps: Omit<import('@box/user-selector').HeadlessUserSelectorProps, "open" | "value" | "rootElement" | "onSelectedUserChange" | "inputElementRef">;
8
- export declare const DefaultThreadedAnnotations: (props: ThreadedAnnotationsProps) => import("react/jsx-runtime").JSX.Element;
7
+ export declare const MOCK_HIGHLIGHT_TARGET: AnnotationBadgeTargetType;
8
+ export declare const RICH_TEXT_INITIAL_MESSAGES: TextMessageType[];
9
9
  interface InteractiveModuleBaseProps {
10
10
  initialMessages?: TextMessageType[];
11
11
  defaultExpanded?: boolean;
@@ -16,6 +16,7 @@ interface InteractiveModuleBaseProps {
16
16
  maxCharacterCount?: number;
17
17
  onCopyLink?: (id: string) => void;
18
18
  onEditSpy?: (id: string, content: JSONContent | null) => void;
19
+ onFormatToggle?: ThreadedAnnotationsProps['onFormatToggle'];
19
20
  onPostSpy?: (content: JSONContent | null) => void;
20
21
  }
21
22
  type InteractiveModuleProps = (InteractiveModuleBaseProps & {
@@ -2,6 +2,7 @@ export * from './button-utils';
2
2
  export * from './default-user-selector-props';
3
3
  export * from './interaction-utils';
4
4
  export * from './rich-text-initial-content';
5
+ export * from './rich-text-test-cases';
5
6
  export * from './test-selectors';
6
7
  export * from './text-utils';
7
8
  export * from './verify-mention-elements';
@@ -0,0 +1,61 @@
1
+ import { DocumentNode, InlineNode, ListItemNode, TextMark, TextNode } from '../types';
2
+ /**
3
+ * Shared rich-text fixtures. Optional `doc` (author), `parsed` (reader;
4
+ * defaults to `doc`), `normalized` (`serialize(parsed)`; defaults to `wire`).
5
+ * `plaintext` is the rich-text-disabled client. Strip clones copy
6
+ * `STRIP_CONTRACT_CASES` by row name; do not import across repos.
7
+ */
8
+ type RichTextGroup = 'paragraphs' | 'isolatedToolbar' | 'isolatedTyped' | 'isolatedPasted' | 'midWord' | 'midSentence' | 'mentionThenMark' | 'mentionThenBlock' | 'siblingLists' | 'nestedLists';
9
+ type RichTextCase = {
10
+ group: RichTextGroup;
11
+ name: string;
12
+ wire: string;
13
+ doc?: DocumentNode;
14
+ parsed?: DocumentNode;
15
+ normalized?: string;
16
+ plaintext: string;
17
+ /** Typed/pasted source when it differs from `wire`. */
18
+ input?: string;
19
+ /** Why strip may differ from `plaintext`. */
20
+ stripDivergence?: {
21
+ reason: string;
22
+ strip: string;
23
+ };
24
+ };
25
+ export declare const documentNode: (...content: DocumentNode["content"]) => DocumentNode;
26
+ export declare const paragraphNode: (...content: InlineNode[]) => {
27
+ type: "paragraph";
28
+ content: InlineNode[];
29
+ };
30
+ export declare const textNode: (text: string, ...marks: TextMark["type"][]) => TextNode;
31
+ export declare const mentionNode: (mentionedUserId: string, mentionedUserName: string) => InlineNode;
32
+ export declare const listItemNode: (...content: NonNullable<ListItemNode["content"]>) => ListItemNode;
33
+ export declare const unorderedListNode: (...content: ListItemNode[]) => {
34
+ type: "bulletList";
35
+ content: ListItemNode[];
36
+ };
37
+ export declare const orderedListNode: (start: number, ...content: ListItemNode[]) => {
38
+ content: ListItemNode[];
39
+ attrs?: {
40
+ start: number;
41
+ };
42
+ type: "orderedList";
43
+ };
44
+ export declare const RICH_TEXT_CASES: RichTextCase[];
45
+ export declare const expectedParse: (richTextCase: RichTextCase) => DocumentNode;
46
+ /**
47
+ * `RICH_TEXT_CASES` reader docs in order. Shared by editor and text-message render table.
48
+ * Blank paragraph between rows so adjacent same-type lists stay split.
49
+ */
50
+ export declare const RICH_TEXT_RENDER_DOCUMENT: DocumentNode;
51
+ export declare const expectedNormalized: (richTextCase: RichTextCase) => string;
52
+ export declare const CASES_BY_GROUP: Record<string, RichTextCase[]>;
53
+ export declare const CASES_WITH_DOC: (RichTextCase & {
54
+ doc: DocumentNode;
55
+ })[];
56
+ export declare const STRIP_CONTRACT_CASES: {
57
+ name: string;
58
+ strip: string;
59
+ wire: string;
60
+ }[];
61
+ export type { RichTextCase, RichTextGroup };
@@ -1,6 +1,2 @@
1
1
  import { DocumentNode } from '../types';
2
- /**
3
- * Parses a v1 rich-text wire string into a v2 DocumentNode.
4
- * Always returns a valid `doc` — empty string / null → `{ type: 'doc', content: [] }`.
5
- */
6
2
  export declare const parseMessageMarkdown: (markdown: string | null | undefined) => DocumentNode;
@@ -1,9 +1,3 @@
1
1
  import { DocumentNode } from '../types';
2
- /**
3
- * Serializes a v2 DocumentNode to a rich-text markdown string:
4
- * `**bold**`, `_italic_`, `++underline++`, `-` / `1.` lists, `@[id:name]` mentions.
5
- *
6
- * Empty / null documents return `''`. Hosts still use `serializeMentionMarkup`
7
- * for the plain tagged path.
8
- */
2
+ /** Rich-text wire. Empty/null → `''`. Plain tagged path is `serializeMentionMarkup`. */
9
3
  export declare const serializeMessageToMarkdown: (doc: DocumentNode | null | undefined) => string;
@@ -0,0 +1,2 @@
1
+ import { MarkdownIt } from 'markdown-it';
2
+ export declare const splitListsOnBlankLinePlugin: (md: MarkdownIt) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@box/threaded-annotations",
3
- "version": "4.13.0",
3
+ "version": "4.13.1",
4
4
  "license": "SEE LICENSE IN LICENSE",
5
5
  "dependencies": {
6
6
  "@floating-ui/dom": "^1.6.0",