@gemboss/ui 0.44.0 → 0.46.0

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
- (function(y){"use strict";var L=y.gembossUI||(y.gembossUI={});if(L.teamChat)return;var W={reaction:'<path d="M16.5 10a6.5 6.5 0 1 1-6.5-6.5"/><path d="M7.5 11.8s.9 1.2 2.5 1.2 2.5-1.2 2.5-1.2"/><path d="M7.8 8.2h.01M12.2 8.2h.01"/><path d="M15 2.5v4M13 4.5h4"/>',emoji:'<circle cx="10" cy="10" r="6.5"/><path d="M7.5 11.8s.9 1.2 2.5 1.2 2.5-1.2 2.5-1.2"/><path d="M7.8 8.2h.01M12.2 8.2h.01"/>',reply:'<path d="M8 13.5 3.5 9 8 4.5M3.5 9h8a5 5 0 0 1 5 5v2"/>',thread:'<path d="M3 4.5h14v9H8.5L5 16.5v-3H3z"/><path d="M6.5 8h7M6.5 10.5h4.5"/>',chevronsDown:'<path d="M6 5.5l4 4 4-4M6 10.5l4 4 4-4"/>',hash:'<path d="M8 3.5 6.5 16.5M13.5 3.5 12 16.5M4 7.5h12.5M3.5 12.5H16"/>',lock:'<rect x="4.5" y="9" width="11" height="8" rx="1.5"/><path d="M7 9V6.5a3 3 0 0 1 6 0V9"/>',user:'<circle cx="10" cy="7" r="3.2"/><path d="M3.8 16.5c.8-2.8 3.3-4.5 6.2-4.5s5.4 1.7 6.2 4.5"/>',more:'<circle cx="4.5" cy="10" r="1"/><circle cx="10" cy="10" r="1"/><circle cx="15.5" cy="10" r="1"/>'},Y=["\u{1F44D}","\u2705"],G=["\u{1F44D}","\u2705","\u{1F64F}","\u{1F389}","\u{1F602}","\u2764\uFE0F","\u{1F440}","\u{1F64C}","\u{1F525}"],D=[["Smileys",[["\u{1F600}","grin smile happy"],["\u{1F603}","smile happy"],["\u{1F604}","smile laugh happy"],["\u{1F601}","grin beam"],["\u{1F606}","laugh squint"],["\u{1F605}","sweat smile relief"],["\u{1F602}","joy tears laugh lol"],["\u{1F923}","rofl rolling laugh"],["\u{1F60A}","blush smile"],["\u{1F607}","innocent halo"],["\u{1F642}","slight smile ok"],["\u{1F609}","wink"],["\u{1F60D}","heart eyes love"],["\u{1F970}","love hearts"],["\u{1F618}","kiss"],["\u{1F60B}","yum tasty"],["\u{1F61C}","wink tongue"],["\u{1F92A}","zany crazy"],["\u{1F917}","hug"],["\u{1F92D}","oops giggle"],["\u{1F914}","think hmm"],["\u{1F928}","raised eyebrow doubt"],["\u{1F610}","neutral"],["\u{1F636}","no words"],["\u{1F644}","eye roll"],["\u{1F60F}","smirk"],["\u{1F62C}","grimace awkward"],["\u{1F60C}","relieved"],["\u{1F634}","sleep tired"],["\u{1F637}","mask sick"],["\u{1F92F}","mind blown"],["\u{1F973}","party celebrate"],["\u{1F60E}","cool sunglasses"],["\u{1F913}","nerd"],["\u{1F615}","confused"],["\u{1F61F}","worried"],["\u{1F62E}","wow surprised"],["\u{1F632}","astonished"],["\u{1F633}","flushed embarrassed"],["\u{1F97A}","pleading please"],["\u{1F622}","cry sad"],["\u{1F62D}","sob crying"],["\u{1F631}","scream shock"],["\u{1F624}","huff frustrated"],["\u{1F621}","angry mad"],["\u{1F92C}","swear"],["\u{1F480}","dead skull"],["\u{1FAE0}","melting"],["\u{1FAE1}","salute"]]],["Hands",[["\u{1F44D}","like thumbs up yes ok"],["\u{1F44E}","dislike thumbs down no"],["\u{1F44C}","ok perfect"],["\u270C\uFE0F","peace victory"],["\u{1F91E}","fingers crossed luck"],["\u{1F91F}","love you"],["\u{1F918}","rock"],["\u{1F44F}","clap applause"],["\u{1F64C}","raise hands hooray"],["\u{1F450}","open hands"],["\u{1F91D}","handshake deal"],["\u{1F64F}","thanks please pray"],["\u{1F4AA}","strong muscle"],["\u{1F440}","eyes looking"],["\u{1FAF6}","heart hands"],["\u270D\uFE0F","writing"],["\u{1F44B}","wave hi bye"],["\u261D\uFE0F","point up"],["\u{1F447}","point down"],["\u{1F449}","point right"],["\u{1F448}","point left"],["\u{1F919}","call me"],["\u{1F590}\uFE0F","stop hand"],["\u{1F90C}","pinched"]]],["Marks",[["\u2764\uFE0F","heart love red"],["\u{1F9E1}","orange heart"],["\u{1F49B}","yellow heart"],["\u{1F49A}","green heart"],["\u{1F499}","blue heart"],["\u{1F49C}","purple heart"],["\u{1F5A4}","black heart"],["\u{1F4AF}","hundred perfect"],["\u2705","done check yes"],["\u2611\uFE0F","checked box"],["\u2714\uFE0F","check mark"],["\u274C","no cross wrong"],["\u2757","important exclamation"],["\u2753","question"],["\u26A0\uFE0F","warning"],["\u{1F525}","fire hot lit"],["\u2B50","star"],["\u2728","sparkles new"],["\u{1F4A1}","idea"],["\u{1F4CC}","pin"],["\u{1F680}","rocket ship launch"],["\u{1F3AF}","target goal"],["\u{1F197}","ok button"],["\u{1F195}","new"],["\u{1F534}","red circle urgent"],["\u{1F7E2}","green circle"],["\u{1F7E1}","yellow circle"],["\u2795","plus one add"]]],["Work",[["\u{1F389}","party tada celebrate"],["\u{1F38A}","confetti"],["\u{1F3C6}","trophy win"],["\u{1F947}","gold medal first"],["\u{1F381}","gift"],["\u2615","coffee"],["\u{1F37B}","cheers beer"],["\u{1F355}","pizza"],["\u{1F4C8}","chart up growth"],["\u{1F4C9}","chart down"],["\u{1F4B0}","money"],["\u{1F6D2}","cart shop"],["\u{1F4E6}","package order shipping"],["\u{1F9FE}","receipt invoice"],["\u{1F4DD}","note memo"],["\u{1F4C5}","calendar date"],["\u23F0","alarm time"],["\u23F3","waiting hourglass"],["\u{1F527}","fix wrench"],["\u{1F41B}","bug"],["\u{1F9EA}","test"],["\u{1F50D}","search look"],["\u{1F4AC}","comment chat"],["\u{1F4DE}","call phone"],["\u{1F4E7}","email"],["\u{1F512}","lock private"],["\u{1F517}","link"],["\u{1F5BC}\uFE0F","image picture"],["\u{1F4BB}","laptop computer"],["\u{1F4F1}","phone mobile"],["\u{1F648}","see no evil oops"],["\u{1F649}","hear no evil"],["\u{1F916}","robot bot ai"],["\u{1F9E0}","brain"],["\u{1F451}","crown vip"],["\u{1F48E}","gem diamond"]]]],A={channels:"Channels",conversation:"Conversation",back:"Back to channels",members:"Members",hideMembers:"Hide members",showMembers:"Show members",thread:"Thread",closeThread:"Close thread",replies:function(e){return e===1?"1 reply":e+" replies"},newMessages:"New messages",edited:"(edited)",someone:"Someone who has left",actionsFor:function(e){return"Actions for the message from "+e},react:function(e,t,n){return(n?"Remove":"Add")+" "+e+" on the message from "+t},moreReactions:function(e){return"More reactions for the message from "+e},reply:"Reply",replyTo:function(e){return"Reply to the message from "+e},replyInThread:"Reply in thread",replyInThreadTo:function(e){return"Reply in thread to the message from "+e},openThread:function(e,t){return"Open the thread, "+(e===1?"1 reply":e+" replies")+(t?", "+t:"")},jump:"Jump to the latest message",jumpNew:function(e){return"Jump to the latest message, "+e+" new"},message:"Message",send:"Send",attach:"Attach a file",emoji:"Emoji",pickEmoji:"Pick an emoji",stopReplying:"Stop replying",privateChannel:"private channel",directMessage:"direct message",mentioningYou:function(e){return e+" mentioning you"},unread:function(e){return e+" unread"},online:"Online",away:"Away",offline:"Offline"},x=Object.prototype.hasOwnProperty;function S(e){if(!e)return A;var t={},n;for(n in A)t[n]=A[n];for(n in e)x.call(e,n)&&(t[n]=e[n]);return t}var P=function(e){return typeof Node<"u"&&e instanceof Node},k=function(){return[].filter.call(arguments,Boolean).join(" ")};function i(e,t,n){var a=document.createElement(e),r;for(r in t)t[r]!==void 0&&t[r]!==null&&t[r]!==!1&&a.setAttribute(r,String(t[r]));return R(a,n)}function R(e,t){if(t==null||typeof t=="boolean"||t==="")return e;if(Array.isArray(t)){for(var n=0;n<t.length;n++)R(e,t[n]);return e}return e.appendChild(P(t)?t:document.createTextNode(String(t))),e}var pe=function(e){return e==null?void 0:String(e)},b=function(e,t){return t&&e.addEventListener("click",t),e},U=0;function _(e,t){var n=Number(t)||20,a=document.createElement("template");return a.innerHTML='<svg viewBox="0 0 20 20" width="'+n+'" height="'+n+'" aria-hidden="true" focusable="false"><g fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">'+(x.call(W,e)?W[e]:"")+"</g></svg>",a.content.firstChild}function I(e,t){var n=document.createElementNS("http://www.w3.org/2000/svg",e);for(var a in t)n.setAttribute(a,t[a]);return n}var fe=function(){try{return new RegExp("^\\p{L}","u")}catch{return/^[A-Za-zÀ-ɏͰ-ϿЀ-ӿ]/}}();function z(e){var t=String(e).trim().split(/\s+/).filter(Boolean),n=t.filter(function(r){return fe.test(r)}),a=n.length?n:t;return a.length?(a.length===1?a[0].slice(0,2):a[0][0]+a[a.length-1][0]).toUpperCase():"?"}function V(e){var t=0,n=String(e),a,r,l;for(a=0;a<n.length;a++)r=n.charCodeAt(a),r>=55296&&r<=56319&&a+1<n.length&&(l=n.charCodeAt(a+1),l>=56320&&l<=57343&&(r=(r-55296)*1024+(l-56320)+65536,a++)),t=t*31+r>>>0;return t%8}var he={24:"gb-avatar--24",32:"gb-avatar--32",40:"gb-avatar--40",56:"gb-avatar--56"};function E(e,t,n,a){return n=n===void 0?24:n,i("span",{class:k("gb-avatar",he[n],a),"data-tone":V(e),"aria-hidden":"true"},t?i("img",{class:"gb-avatar-img",src:t,alt:"",loading:"lazy",width:n,height:n}):z(e))}var M={},q=[];D.forEach(function(e){e[1].forEach(function(t){M[t[0]]=t[1],q.push(t[0])})});var Q=function(e){return typeof e=="string"&&x.call(M,e)},j=function(e){return x.call(M,e)?M[e]:""};function X(e){var t=String(e).trim().toLowerCase();return t?q.filter(function(n){return M[n].indexOf(t)>-1}):q.slice()}function Z(e){return e.length>2?e.slice(0,2).join(", ")+" +"+(e.length-2):e.join(", ")}var $="gemboss-ui:reactions-recent",B=9;function ee(e){var t=[];return e.concat(G).forEach(function(n){Q(n)&&t.indexOf(n)<0&&t.length<B&&t.push(n)}),t}function te(){try{var e=JSON.parse(y.localStorage&&y.localStorage.getItem($)||"[]");return Array.isArray(e)?e.filter(function(t){return typeof t=="string"&&j(t)!==""}).slice(0,B):[]}catch{return[]}}function ne(e){try{var t=[e].concat(te().filter(function(n){return n!==e})).slice(0,B);y.localStorage&&y.localStorage.setItem($,JSON.stringify(t))}catch{}}var F=function(e,t){return e.some(function(n){return n.emoji===t&&n.mine})};function O(e){var t=e.items,n=ee(te()),a=function(s){var d=t?F(t,s):!1;return b(i("button",{type:"button",class:"ui-reaction-picker__btn",title:j(s).split(" ")[0]||s,"aria-label":((t?(d?"Remove":"Add")+" ":"")+s+" "+j(s)).trim(),"aria-pressed":t?String(d):void 0},s),function(){e.onPick(s)})},r=function(s){return i("div",{class:"ui-reaction-picker__grid"},s.map(a))},l=function(s){return i("p",{class:"ui-reaction-picker__head"},s)},o=i("input",{type:"search",class:"gemboss-field ui-reaction-picker__search",placeholder:"Search emoji","aria-label":"Search emoji",autocomplete:"off",value:""}),u=i("div",{class:"ui-reaction-picker__body"}),g=function(){var s=o.value,d=s.trim()?X(s):null,c=[];d?c.push(d.length?r(d):i("p",{class:"ui-reaction-picker__empty"},"No emoji matches.")):(c.push(l("Frequently used"),r(n)),D.forEach(function(m){c.push(l(m[0]),r(m[1].map(function(v){return v[0]})))})),u.replaceChildren.apply(u,c)},p=i("div",{id:e.id,class:k("ui-reaction-picker",e.className),role:"group","aria-label":e.label==null?"Pick a reaction":e.label},[o,u]);return o.addEventListener("input",g),p.addEventListener("keydown",function(s){if(s.key==="Escape"){s.preventDefault(),s.stopPropagation(),e.onClose();return}var d=[].slice.call(u.querySelectorAll(".ui-reaction-picker__btn"));if(s.target===o){s.key==="Enter"&&(s.preventDefault(),d[0]&&d[0].click()),s.key==="ArrowDown"&&(s.preventDefault(),d[0]&&d[0].focus());return}var c=d.indexOf(document.activeElement);if(!(c<0)){var m=u.querySelector(".ui-reaction-picker__grid"),v=Math.max(1,Math.round((m?m.getBoundingClientRect().width:44)/44)),f={ArrowRight:1,ArrowLeft:-1,ArrowDown:v,ArrowUp:-v}[s.key];if(f){if(s.preventDefault(),c+f<0){o.focus();return}d[Math.min(d.length-1,c+f)]&&d[Math.min(d.length-1,c+f)].focus()}}}),g(),p}function ae(e){var t=e.items||[],n=e.target===void 0?"this":e.target,a=e.canReact===void 0?!0:e.canReact;if(!t.length&&!a)return null;var r=!1,l=null,o="gb-tc-rp"+ ++U,u=null,g=function(c){if(!a){e.onSignIn&&e.onSignIn();return}F(t,c)||ne(c),e.onToggle&&e.onToggle(c)},p=i("div",{class:"ui-reactions__row"},t.map(function(c){return b(i("button",{type:"button",class:"ui-reaction"+(c.mine?" is-mine":""),"aria-pressed":pe(c.mine),title:c.names.join(", "),"aria-label":c.emoji+", "+c.names.join(", ")+". "+(c.mine?"Remove yours":"Add yours")},[i("span",{class:"ui-reaction__emoji"},c.emoji),i("span",{class:"ui-reaction__names"},Z(c.names))]),function(){g(c.emoji)})})),s=i("div",{class:k("ui-reactions",e.className)},p),d=function(c,m){r=c,u.setAttribute("aria-expanded",String(r)),r?(u.setAttribute("aria-controls",o),l=O({id:o,items:t,onPick:function(v){d(!1,!0),g(v),u.focus()},onClose:function(){d(!1,!0),u.focus()}}),s.appendChild(l),m&&l.firstChild.focus()):(u.removeAttribute("aria-controls"),l&&l.remove(),l=null),m&&e.onOpenChange&&e.onOpenChange(r)};return a&&(u=i("button",{type:"button",class:"ui-reaction-add",title:"Add reaction","aria-label":"Add a reaction to "+n,"aria-expanded":"false"},_("reaction",18)),p.appendChild(b(u,function(){d(!r,!0)})),e.open&&d(!0,!1)),s}function re(e,t){var n=e.value.length,a=Math.min(t[0],n),r=Math.min(Math.max(t[1],a),n);return e.focus({preventScroll:!0}),e.setSelectionRange(a,r),[a,r]}function ge(e,t,n){var a=e.value,r=re(e,n),l=r[0],o=r[1];if(e.maxLength>=0&&a.length-(o-l)+t.length>e.maxLength)return!1;try{document.execCommand("insertText",!1,t)}catch{}return e.value===a&&(e.setRangeText(t,l,o,"end"),e.dispatchEvent(new Event("input",{bubbles:!0}))),!0}var me=function(){return typeof y.matchMedia=="function"&&y.matchMedia("(pointer: coarse)").matches};function be(e){var t=S(e.labels),n=e.textarea,a=e.button,r=null,l=[0,0],o=document.activeElement===n,u=e.host||n.closest&&n.closest(".gb-tc-composer__box")||n.parentNode,g="gb-tc-rp"+ ++U;a?(a.setAttribute("aria-expanded","false"),a.hasAttribute("aria-label")||a.setAttribute("aria-label",t.emoji)):a=i("button",{type:"button",class:"ui-btn ui-btn--ghost ui-btn--icon gb-tc-composer__emoji","aria-label":t.emoji,"aria-expanded":"false",disabled:n.disabled?"":void 0},_("emoji",20)),n.addEventListener("focus",function(){o=!0});var p=function(c){r&&!(c.target&&(r.contains(c.target)||a.contains(c.target)))&&s()};function s(){r&&(r.remove(),r=null,a.setAttribute("aria-expanded","false"),a.removeAttribute("aria-controls"),document.removeEventListener("pointerdown",p,!0),document.removeEventListener("focusin",p,!0))}function d(){var c=n.value.length;l=o?[n.selectionStart==null?c:n.selectionStart,n.selectionEnd==null?c:n.selectionEnd]:[c,c],r=O({id:g,className:"gb-tc-composer__emoji-pop",label:t.pickEmoji,onPick:function(v){s(),ne(v),ge(n,v,l)},onClose:function(){s(),re(n,l)}}),a.setAttribute("aria-expanded","true"),a.setAttribute("aria-controls",g),u.appendChild(r);var m=me()?r.querySelector(".ui-reaction-picker__btn"):r.firstChild;m&&m.focus(),document.addEventListener("pointerdown",p,!0),document.addEventListener("focusin",p,!0)}return b(a,function(){r?s():n.disabled||d()}),a}function ve(e){var t=e.read,n=e.of;if(n<=0)return null;var a=t>=n,r=Math.min(t,n)/n*Math.PI*2,l=I("svg",{viewBox:"0 0 14 14",width:"14",height:"14","aria-hidden":"true",focusable:"false"});return l.appendChild(I("circle",{cx:"7",cy:"7",r:"6",fill:a?"currentColor":"none",stroke:"currentColor","stroke-width":"1.4"})),a?l.appendChild(I("path",{class:"gb-tc-receipt__tick",d:"M4.2 7.2l1.9 1.9 3.7-4",fill:"none","stroke-width":"1.6","stroke-linecap":"round","stroke-linejoin":"round"})):t>0&&l.appendChild(I("path",{d:"M7 7 L7 1 A6 6 0 "+(r>Math.PI?1:0)+" 1 "+(7+6*Math.sin(r)).toFixed(2)+" "+(7-6*Math.cos(r)).toFixed(2)+" Z",fill:"currentColor"})),i("span",{class:k("gb-tc-receipt",a&&"gb-tc-receipt--all"),role:"img","aria-label":e.label,title:e.label},l)}function ye(e){var t={ArrowRight:1,ArrowLeft:-1}[e.key],n=[].slice.call(e.currentTarget.querySelectorAll("button:not([disabled]), summary, a[href]")).filter(function(l){return l.offsetParent!==null}),a=n.indexOf(document.activeElement);if(!(a<0)){var r=t?n[(a+t+n.length)%n.length]:e.key==="Home"?n[0]:e.key==="End"?n[n.length-1]:null;r&&(e.preventDefault(),r.focus())}}function _e(e){var t=S(e.labels),n=e.author||t.someone,a=e.reactions||[],r=e.editor!=null,l=!!(e.picking&&e.onReact),o=null,u=null,g=!1,p=function(){var h=e.time;return P(h)&&g?h.cloneNode(!0):(g=!0,h)},s=function(){return k("gb-tc-msg",e.grouped&&"gb-tc-msg--grouped",e.mentionsMe&&"gb-tc-msg--mention",e.highlight&&"gb-tc-msg--highlight",e.sending&&"gb-tc-msg--sending",e.failed&&"gb-tc-msg--failed",l&&"gb-tc-msg--active",r&&"gb-tc-msg--editing",e.className)},d=i("li",{id:e.id,class:s(),"data-msg-id":e.messageId,tabindex:"-1"},e.grouped?i("time",{class:"gb-tc-msg__hover-time",datetime:e.dateTime},p()):e.avatar!=null?e.avatar:E(n,e.avatarSrc,32,"gb-tc-msg__av")),c=i("div",{class:"gb-tc-msg__main"});e.replyTo&&c.appendChild(b(i("button",{type:"button",class:"gb-tc-quote","aria-busy":e.replyTo.busy||void 0},[i("span",{class:"gb-tc-quote__who"},e.replyTo.author||t.someone),i("span",{class:"gb-tc-quote__text"},e.replyTo.excerpt)]),e.replyTo.onOpen)),c.appendChild(e.grouped?i("span",{class:"gb-tc-sr"},[n,", ",p(),": "]):i("div",{class:"gb-tc-msg__who"},[i("span",{class:"gb-tc-msg__name"},n),e.badges,i("time",{class:"gb-tc-msg__time",datetime:e.dateTime},p())])),r?c.appendChild(i("div",{class:"gb-tc-msg__editor"},e.editor)):(e.body!=null||e.edited||e.receipt)&&c.appendChild(i("div",{class:"gb-tc-msg__body"},[e.body,e.edited?i("span",{class:"gb-tc-msg__edited"},t.edited):null,e.receipt])),e.status&&c.appendChild(i("p",{class:"gb-tc-msg__status",role:e.failed?"alert":void 0},e.status)),e.attachments&&c.appendChild(i("div",{class:"gb-tc-msg__files"},e.attachments)),e.extra&&c.appendChild(i("div",{class:"gb-tc-msg__extra"},e.extra));var m=function(h,C){e.onPickingChange&&e.onPickingChange(h,C)},v=a.length?ae({items:a,onToggle:e.onReact,canReact:!!e.onReact,target:"the message from "+n,open:e.reactionsPicking,onOpenChange:function(h){m("reactions",h)}}):null,f=e.thread,H=null;f&&f.count>0&&(H=b(i("button",{type:"button",class:"gb-tc-threadprev","aria-label":t.openThread(f.count,f.last==null?"":f.last)},[f.repliers&&f.repliers.length?i("span",{class:"gb-tc-threadprev__faces","aria-hidden":"true"},f.repliers.slice(0,3).map(function(h){return E(h.name,h.src,24)})):null,i("span",{class:"gb-tc-threadprev__count"},t.replies(f.count)),f.last?i("span",{class:"gb-tc-threadprev__last"},f.last):null]),f.onOpen)),R(c,[v,H]),d.appendChild(c);var N=function(h,C){l=h,d.className=s(),u&&u.setAttribute("aria-expanded",String(l)),l?(o=O({items:a,onPick:function(Re){N(!1,!0),e.onReact(Re),u.focus()},onClose:function(){N(!1,!0),u.focus()}}),c.insertBefore(o,v||H),C&&o.firstChild.focus()):o&&(o.remove(),o=null),C&&m("bar",l)};if(!r&&!e.sending&&(e.onReact||e.onReply||e.onOpenThread||e.moreActions)){var w=i("div",{class:"gb-tc-acts",role:"toolbar","aria-label":t.actionsFor(n)});e.onReact&&(Y.forEach(function(h){var C=F(a,h);w.appendChild(b(i("button",{type:"button",class:"gb-tc-act gb-tc-act--quick","aria-pressed":String(C),"aria-label":t.react(h,n,C)},h),function(){e.onReact(h)}))}),u=i("button",{type:"button",class:"gb-tc-act","aria-expanded":String(l),"aria-label":t.moreReactions(n),title:"Add reaction"},_("reaction",18)),w.appendChild(b(u,function(){N(!l,!0)}))),e.onReply&&w.appendChild(b(i("button",{type:"button",class:"gb-tc-act","aria-label":t.replyTo(n),title:t.reply},_("reply",18)),e.onReply)),e.onOpenThread&&w.appendChild(b(i("button",{type:"button",class:"gb-tc-act","aria-label":t.replyInThreadTo(n),title:t.replyInThread},_("thread",18)),e.onOpenThread)),R(w,e.moreActions),w.addEventListener("keydown",ye),d.appendChild(w)}return l&&N(!0,!1),d}function ke(e,t){return i("li",{class:"gb-tc-day"},t?i("time",{class:"gb-tc-day__label",datetime:t},e):i("span",{class:"gb-tc-day__label"},e))}function we(e){var t=S(e);return i("li",{class:"gb-tc-new"},i("span",{class:"gb-tc-new__label",role:"separator","aria-label":t.newMessages},t.newMessages))}function Ce(e){return e=e||{},ie(b(i("button",{type:"button",class:"gb-tc-jump"},_("chevronsDown",20)),e.onJump),e)}function ie(e,t){t=t||{};var n=S(t.labels),a=t.count===void 0?0:t.count,r=e.querySelector(".gb-tc-jump__n");return t.visible===void 0||t.visible?e.removeAttribute("hidden"):e.setAttribute("hidden",""),e.setAttribute("aria-label",a?n.jumpNew(a):n.jump),a?(r||(r=e.appendChild(i("span",{class:"gb-tc-jump__n","aria-hidden":"true"}))),r.textContent=a>99?"99+":String(a),e):(r&&r.remove(),e)}var Se={channel:"hash",private:"lock",dm:"user"},le={online:"gb-tc-presence gb-tc-presence--online",away:"gb-tc-presence gb-tc-presence--away",offline:"gb-tc-presence gb-tc-presence--offline"};function ce(e){var t=S(e.labels),n=e.kind===void 0?"channel":e.kind,a=e.unread===void 0?0:e.unread,r=e.mentions===void 0?0:e.mentions,l=[e.name,n==="private"?t.privateChannel:n==="dm"?t.directMessage:null,r?t.mentioningYou(r):null,a?t.unread(a):null].filter(Boolean).join(", "),o=[i("span",{class:"gb-tc-channel__glyph","aria-hidden":"true"},[n==="dm"&&e.avatar?E(e.avatar.name==null?e.name:e.avatar.name,e.avatar.src,24,"gb-tc-channel__av"):_(Se[n],16),n==="dm"&&e.online!==void 0?i("span",{class:le[e.online?"online":"offline"]}):null]),i("span",{class:"gb-tc-channel__name"},e.name),r?i("span",{class:"gb-tc-badge gb-tc-badge--mention","aria-hidden":"true"},"@"+r):null,a?i("span",{class:"gb-tc-badge","aria-hidden":"true"},a):null],u=k("gb-tc-channel",a>0&&"gb-tc-channel--unread");return i("li",null,b(e.href!==void 0?i("a",{class:u,href:e.href,"aria-current":e.active?"page":void 0,"aria-label":l},o):i("button",{type:"button",class:u,"aria-current":e.active?"true":void 0,"aria-label":l},o),e.onOpen))}function se(e,t,n,a){var r=(e.id==null?"gb-tc-s"+ ++U:e.id)+"-h";return i("div",{class:t[0],role:"group","aria-labelledby":r},[i("h3",{class:t[1],id:r},n),i("ul",{class:t[2]},(e.items||[]).map(function(l){return l&&!P(l)?a(l):l}))])}function Ee(e){return se(e,["gb-tc-rail__section","gb-tc-rail__heading","gb-tc-rail__list"],e.label,ce)}function Me(e){return se(e,["gb-tc-people__section","gb-tc-people__heading","gb-tc-people__list"],[e.label,e.count!==void 0?" \u2014 "+e.count:null],oe)}function oe(e){var t=S(e.labels),n=[i("span",{class:"gb-tc-person__av"},[e.avatar!=null?e.avatar:E(e.name,e.src,32),e.presence?i("span",{class:le[e.presence]},i("span",{class:"gb-tc-sr"},t[e.presence])):null]),i("span",{class:"gb-tc-person__text"},[i("span",{class:"gb-tc-person__name"},e.name),e.subtitle?i("span",{class:"gb-tc-person__sub"},e.subtitle):null]),e.role?i("span",{class:"gb-tc-person__role"},e.role):null],a=k("gb-tc-person",e.presence==="offline"&&"gb-tc-person--offline");return i("li",null,b(e.href!==void 0?i("a",{class:a,href:e.href,title:e.name},n):e.onSelect?i("button",{type:"button",class:a,title:e.name},n):i("div",{class:a,title:e.name},n),e.onSelect))}var J=function(e){return e instanceof Date?e:new Date(e)},ue={};function K(e,t){var n=J(e),a,r,l,o;if(t){if(a=ue[t],a===void 0){try{a=new Intl.DateTimeFormat("en-US",{timeZone:t,year:"numeric",month:"numeric",day:"numeric"})}catch{a=null}ue[t]=a}if(a&&!isNaN(n.getTime())){for(r={},l=a.formatToParts(n),o=0;o<l.length;o++)l[o].type!=="literal"&&(r[l[o].type]=Number(l[o].value));return[r.year,r.month,r.day]}}return[n.getFullYear(),n.getMonth()+1,n.getDate()]}function T(e,t){var n=K(e,t);return n[0]+"-"+n[1]+"-"+n[2]}function Te(e,t){var n=K(e,t),a=function(r){return(r<10?"0":"")+r};return n[0]+"-"+a(n[1])+"-"+a(n[2])}function Ae(e,t,n){t=t===void 0?new Date:t;var a=T(e,n),r=K(t,n),l;return a===r[0]+"-"+r[1]+"-"+r[2]?"Today":(l=new Date(Date.UTC(r[0],r[1]-1,r[2]-1)),a===l.getUTCFullYear()+"-"+(l.getUTCMonth()+1)+"-"+l.getUTCDate()?"Yesterday":null)}function xe(e,t){t=t||{};var n=t.groupWithinMs==null?5*60*1e3:t.groupWithinMs,a=-1,r=[],l,o=t.timeZone;if(t.isUnread){for(l=0;l<e.length;l++)if(t.isUnread(e[l])&&(t.meId==null||e[l].authorId!==t.meId)){a=l;break}}return e.forEach(function(u,g){var p=g>0?e[g-1]:void 0,s=J(u.at),d=!p||T(p.at,o)!==T(s,o);d&&r.push({kind:"day",key:T(s,o),date:s}),g===a&&r.push({kind:"new"}),r.push({kind:"message",message:u,grouped:!!(p&&!d&&g!==a&&u.authorId!=null&&p.authorId===u.authorId&&u.replyToId==null&&s.getTime()-J(p.at).getTime()<n)})}),r}L.teamChat={message:_e,readReceipt:ve,daySeparator:ke,newMessagesLine:we,jumpToLatest:Ce,updateJump:ie,channelSection:Ee,channelItem:ce,peopleSection:Me,personRow:oe,reactions:ae,reactionPicker:O,emojiButton:be,avatar:function(e){return E(e.name,e.src,e.size,e.className)},icon:_,rows:xe,dayKey:T,dayISO:Te,dayWord:Ae,LABELS:A,initialsOf:z,avatarTone:V,isReactionEmoji:Q,reactionWords:j,searchReactions:X,reactionLabel:Z,frequentReactions:ee,QUICK_REACTIONS:Y,SUGGESTED_REACTIONS:G,REACTION_GROUPS:D};function de(){!L.openModal&&y.console&&document.querySelector('script[src*="kit-plain"]')&&y.console.error("@gemboss/ui team-chat-plain.js: load it after kit-plain.js (kit-plain.js defines nothing when gembossUI exists)")}y.document&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",de,{once:!0}):de())})(typeof globalThis<"u"?globalThis:this);
1
+ (function(y){"use strict";var P=y.gembossUI||(y.gembossUI={});if(P.teamChat)return;var H={reaction:'<path d="M16.5 10a6.5 6.5 0 1 1-6.5-6.5"/><path d="M7.5 11.8s.9 1.2 2.5 1.2 2.5-1.2 2.5-1.2"/><path d="M7.8 8.2h.01M12.2 8.2h.01"/><path d="M15 2.5v4M13 4.5h4"/>',emoji:'<circle cx="10" cy="10" r="6.5"/><path d="M7.5 11.8s.9 1.2 2.5 1.2 2.5-1.2 2.5-1.2"/><path d="M7.8 8.2h.01M12.2 8.2h.01"/>',reply:'<path d="M8 13.5 3.5 9 8 4.5M3.5 9h8a5 5 0 0 1 5 5v2"/>',thread:'<path d="M3 4.5h14v9H8.5L5 16.5v-3H3z"/><path d="M6.5 8h7M6.5 10.5h4.5"/>',chevronsDown:'<path d="M6 5.5l4 4 4-4M6 10.5l4 4 4-4"/>',hash:'<path d="M8 3.5 6.5 16.5M13.5 3.5 12 16.5M4 7.5h12.5M3.5 12.5H16"/>',lock:'<rect x="4.5" y="9" width="11" height="8" rx="1.5"/><path d="M7 9V6.5a3 3 0 0 1 6 0V9"/>',user:'<circle cx="10" cy="7" r="3.2"/><path d="M3.8 16.5c.8-2.8 3.3-4.5 6.2-4.5s5.4 1.7 6.2 4.5"/>',more:'<circle cx="4.5" cy="10" r="1"/><circle cx="10" cy="10" r="1"/><circle cx="15.5" cy="10" r="1"/>'},W=["\u{1F44D}","\u2705"],Y=["\u{1F44D}","\u2705","\u{1F64F}","\u{1F389}","\u{1F602}","\u2764\uFE0F","\u{1F440}","\u{1F64C}","\u{1F525}"],R=[["Smileys",[["\u{1F600}","grin smile happy"],["\u{1F603}","smile happy"],["\u{1F604}","smile laugh happy"],["\u{1F601}","grin beam"],["\u{1F606}","laugh squint"],["\u{1F605}","sweat smile relief"],["\u{1F602}","joy tears laugh lol"],["\u{1F923}","rofl rolling laugh"],["\u{1F60A}","blush smile"],["\u{1F607}","innocent halo"],["\u{1F642}","slight smile ok"],["\u{1F609}","wink"],["\u{1F60D}","heart eyes love"],["\u{1F970}","love hearts"],["\u{1F618}","kiss"],["\u{1F60B}","yum tasty"],["\u{1F61C}","wink tongue"],["\u{1F92A}","zany crazy"],["\u{1F917}","hug"],["\u{1F92D}","oops giggle"],["\u{1F914}","think hmm"],["\u{1F928}","raised eyebrow doubt"],["\u{1F610}","neutral"],["\u{1F636}","no words"],["\u{1F644}","eye roll"],["\u{1F60F}","smirk"],["\u{1F62C}","grimace awkward"],["\u{1F60C}","relieved"],["\u{1F634}","sleep tired"],["\u{1F637}","mask sick"],["\u{1F92F}","mind blown"],["\u{1F973}","party celebrate"],["\u{1F60E}","cool sunglasses"],["\u{1F913}","nerd"],["\u{1F615}","confused"],["\u{1F61F}","worried"],["\u{1F62E}","wow surprised"],["\u{1F632}","astonished"],["\u{1F633}","flushed embarrassed"],["\u{1F97A}","pleading please"],["\u{1F622}","cry sad"],["\u{1F62D}","sob crying"],["\u{1F631}","scream shock"],["\u{1F624}","huff frustrated"],["\u{1F621}","angry mad"],["\u{1F92C}","swear"],["\u{1F480}","dead skull"],["\u{1FAE0}","melting"],["\u{1FAE1}","salute"]]],["Hands",[["\u{1F44D}","like thumbs up yes ok"],["\u{1F44E}","dislike thumbs down no"],["\u{1F44C}","ok perfect"],["\u270C\uFE0F","peace victory"],["\u{1F91E}","fingers crossed luck"],["\u{1F91F}","love you"],["\u{1F918}","rock"],["\u{1F44F}","clap applause"],["\u{1F64C}","raise hands hooray"],["\u{1F450}","open hands"],["\u{1F91D}","handshake deal"],["\u{1F64F}","thanks please pray"],["\u{1F4AA}","strong muscle"],["\u{1F440}","eyes looking"],["\u{1FAF6}","heart hands"],["\u270D\uFE0F","writing"],["\u{1F44B}","wave hi bye"],["\u261D\uFE0F","point up"],["\u{1F447}","point down"],["\u{1F449}","point right"],["\u{1F448}","point left"],["\u{1F919}","call me"],["\u{1F590}\uFE0F","stop hand"],["\u{1F90C}","pinched"]]],["Marks",[["\u2764\uFE0F","heart love red"],["\u{1F9E1}","orange heart"],["\u{1F49B}","yellow heart"],["\u{1F49A}","green heart"],["\u{1F499}","blue heart"],["\u{1F49C}","purple heart"],["\u{1F5A4}","black heart"],["\u{1F4AF}","hundred perfect"],["\u2705","done check yes"],["\u2611\uFE0F","checked box"],["\u2714\uFE0F","check mark"],["\u274C","no cross wrong"],["\u2757","important exclamation"],["\u2753","question"],["\u26A0\uFE0F","warning"],["\u{1F525}","fire hot lit"],["\u2B50","star"],["\u2728","sparkles new"],["\u{1F4A1}","idea"],["\u{1F4CC}","pin"],["\u{1F680}","rocket ship launch"],["\u{1F3AF}","target goal"],["\u{1F197}","ok button"],["\u{1F195}","new"],["\u{1F534}","red circle urgent"],["\u{1F7E2}","green circle"],["\u{1F7E1}","yellow circle"],["\u2795","plus one add"]]],["Work",[["\u{1F389}","party tada celebrate"],["\u{1F38A}","confetti"],["\u{1F3C6}","trophy win"],["\u{1F947}","gold medal first"],["\u{1F381}","gift"],["\u2615","coffee"],["\u{1F37B}","cheers beer"],["\u{1F355}","pizza"],["\u{1F4C8}","chart up growth"],["\u{1F4C9}","chart down"],["\u{1F4B0}","money"],["\u{1F6D2}","cart shop"],["\u{1F4E6}","package order shipping"],["\u{1F9FE}","receipt invoice"],["\u{1F4DD}","note memo"],["\u{1F4C5}","calendar date"],["\u23F0","alarm time"],["\u23F3","waiting hourglass"],["\u{1F527}","fix wrench"],["\u{1F41B}","bug"],["\u{1F9EA}","test"],["\u{1F50D}","search look"],["\u{1F4AC}","comment chat"],["\u{1F4DE}","call phone"],["\u{1F4E7}","email"],["\u{1F512}","lock private"],["\u{1F517}","link"],["\u{1F5BC}\uFE0F","image picture"],["\u{1F4BB}","laptop computer"],["\u{1F4F1}","phone mobile"],["\u{1F648}","see no evil oops"],["\u{1F649}","hear no evil"],["\u{1F916}","robot bot ai"],["\u{1F9E0}","brain"],["\u{1F451}","crown vip"],["\u{1F48E}","gem diamond"]]]],I={channels:"Channels",conversation:"Conversation",back:"Back to channels",members:"Members",hideMembers:"Hide members",showMembers:"Show members",thread:"Thread",closeThread:"Close thread",replies:function(e){return e===1?"1 reply":e+" replies"},newMessages:"New messages",edited:"(edited)",someone:"Someone who has left",actionsFor:function(e){return"Actions for the message from "+e},react:function(e,t,n){return(n?"Remove":"Add")+" "+e+" on the message from "+t},moreReactions:function(e){return"More reactions for the message from "+e},messageFrom:function(e){return"the message from "+e},reply:"Reply",replyTo:function(e){return"Reply to the message from "+e},replyInThread:"Reply in thread",replyInThreadTo:function(e){return"Reply in thread to the message from "+e},openThread:function(e,t){return"Open the thread, "+(e===1?"1 reply":e+" replies")+(t?", "+t:"")},jump:"Jump to the latest message",jumpNew:function(e){return"Jump to the latest message, "+e+" new"},message:"Message",send:"Send",attach:"Attach a file",emoji:"Emoji",pickEmoji:"Pick an emoji",stopReplying:"Stop replying",privateChannel:"private channel",directMessage:"direct message",mentioningYou:function(e){return e+" mentioning you"},unread:function(e){return e+" unread"},online:"Online",away:"Away",offline:"Offline",pickReaction:"Pick a reaction",searchEmoji:"Search emoji",noEmojiMatches:"No emoji matches.",frequentlyUsed:"Frequently used",groupName:function(e){return e},pickReactionEmoji:function(e,t,n){return(n?"Remove":"Add")+" "+e+" "+t},addReaction:"Add reaction",addReactionTo:function(e){return"Add a reaction to "+(e??"this")},reactionChip:function(e,t,n){return e+", "+t+". "+(n?"Remove yours":"Add yours")}},M=Object.prototype.hasOwnProperty;function _(e){if(!e)return I;var t={},n;for(n in I)t[n]=I[n];for(n in e)M.call(e,n)&&(t[n]=e[n]);return t}var U=function(e){return typeof Node<"u"&&e instanceof Node},C=function(){return[].filter.call(arguments,Boolean).join(" ")};function i(e,t,n){var a=document.createElement(e),r;for(r in t)t[r]!==void 0&&t[r]!==null&&t[r]!==!1&&a.setAttribute(r,String(t[r]));return O(a,n)}function O(e,t){if(t==null||typeof t=="boolean"||t==="")return e;if(Array.isArray(t)){for(var n=0;n<t.length;n++)O(e,t[n]);return e}return e.appendChild(U(t)?t:document.createTextNode(String(t))),e}var he=function(e){return e==null?void 0:String(e)},b=function(e,t){return t&&e.addEventListener("click",t),e},q=0;function k(e,t){var n=Number(t)||20,a=document.createElement("template");return a.innerHTML='<svg viewBox="0 0 20 20" width="'+n+'" height="'+n+'" aria-hidden="true" focusable="false"><g fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">'+(M.call(H,e)?H[e]:"")+"</g></svg>",a.content.firstChild}function N(e,t){var n=document.createElementNS("http://www.w3.org/2000/svg",e);for(var a in t)n.setAttribute(a,t[a]);return n}var ge=function(){try{return new RegExp("^\\p{L}","u")}catch{return/^[A-Za-zÀ-ɏͰ-ϿЀ-ӿ]/}}();function z(e){var t=String(e).trim().split(/\s+/).filter(Boolean),n=t.filter(function(r){return ge.test(r)}),a=n.length?n:t;return a.length?(a.length===1?a[0].slice(0,2):a[0][0]+a[a.length-1][0]).toUpperCase():"?"}function V(e){var t=0,n=String(e),a,r,l;for(a=0;a<n.length;a++)r=n.charCodeAt(a),r>=55296&&r<=56319&&a+1<n.length&&(l=n.charCodeAt(a+1),l>=56320&&l<=57343&&(r=(r-55296)*1024+(l-56320)+65536,a++)),t=t*31+r>>>0;return t%8}var me={24:"gb-avatar--24",32:"gb-avatar--32",40:"gb-avatar--40",56:"gb-avatar--56"};function T(e,t,n,a){return n=n===void 0?24:n,i("span",{class:C("gb-avatar",me[n],a),"data-tone":V(e),"aria-hidden":"true"},t?i("img",{class:"gb-avatar-img",src:t,alt:"",loading:"lazy",width:n,height:n}):z(e))}var x={},B=[];R.forEach(function(e){e[1].forEach(function(t){x[t[0]]=t[1],B.push(t[0])})});var Q=function(e){return typeof e=="string"&&M.call(x,e)},A=function(e){return M.call(x,e)?x[e]:""},X={};R.forEach(function(e){e[1].forEach(function(t){X[t[0]]=e[0]})});var Z=function(e){return e.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/\u0111/g,"d")};function $(e,t){var n=String(e).trim().toLowerCase();if(!n)return B.slice();var a=Z(n),r={};return t&&R.forEach(function(l){var o=t(l[0]);o!==l[0]&&Z(String(o)).indexOf(a)>-1&&(r[l[0]]=!0)}),B.filter(function(l){return x[l].indexOf(n)>-1||M.call(r,X[l])})}function ee(e){return e.length>2?e.slice(0,2).join(", ")+" +"+(e.length-2):e.join(", ")}var te="gemboss-ui:reactions-recent",F=9;function ne(e){var t=[];return e.concat(Y).forEach(function(n){Q(n)&&t.indexOf(n)<0&&t.length<F&&t.push(n)}),t}function ae(){try{var e=JSON.parse(y.localStorage&&y.localStorage.getItem(te)||"[]");return Array.isArray(e)?e.filter(function(t){return typeof t=="string"&&A(t)!==""}).slice(0,F):[]}catch{return[]}}function re(e){try{var t=[e].concat(ae().filter(function(n){return n!==e})).slice(0,F);y.localStorage&&y.localStorage.setItem(te,JSON.stringify(t))}catch{}}var J=function(e,t){return e.some(function(n){return n.emoji===t&&n.mine})};function L(e){var t=_(e.labels),n=e.items,a=ne(ae()),r=function(s){var c=n?J(n,s):!1;return b(i("button",{type:"button",class:"ui-reaction-picker__btn",title:A(s).split(" ")[0]||s,"aria-label":(n?t.pickReactionEmoji(s,A(s),c):s+" "+A(s)).trim(),"aria-pressed":n?String(c):void 0},s),function(){e.onPick(s)})},l=function(s){return i("div",{class:"ui-reaction-picker__grid"},s.map(r))},o=function(s){return i("p",{class:"ui-reaction-picker__head"},s)},u=i("input",{type:"search",class:"gemboss-field ui-reaction-picker__search",placeholder:t.searchEmoji,"aria-label":t.searchEmoji,autocomplete:"off",value:""}),p=i("div",{class:"ui-reaction-picker__body"}),d=function(){var s=u.value,c=s.trim()?$(s,t.groupName):null,h=[];c?h.push(c.length?l(c):i("p",{class:"ui-reaction-picker__empty"},t.noEmojiMatches)):(h.push(o(t.frequentlyUsed),l(a)),R.forEach(function(v){h.push(o(t.groupName(v[0])),l(v[1].map(function(g){return g[0]})))})),p.replaceChildren.apply(p,h)},f=i("div",{id:e.id,class:C("ui-reaction-picker",e.className),role:"group","aria-label":e.label==null?t.pickReaction:e.label},[u,p]);return u.addEventListener("input",d),f.addEventListener("keydown",function(s){if(s.key==="Escape"){s.preventDefault(),s.stopPropagation(),e.onClose();return}var c=[].slice.call(p.querySelectorAll(".ui-reaction-picker__btn"));if(s.target===u){s.key==="Enter"&&(s.preventDefault(),c[0]&&c[0].click()),s.key==="ArrowDown"&&(s.preventDefault(),c[0]&&c[0].focus());return}var h=c.indexOf(document.activeElement);if(!(h<0)){var v=p.querySelector(".ui-reaction-picker__grid"),g=Math.max(1,Math.round((v?v.getBoundingClientRect().width:44)/44)),w={ArrowRight:1,ArrowLeft:-1,ArrowDown:g,ArrowUp:-g}[s.key];if(w){if(s.preventDefault(),h+w<0){u.focus();return}c[Math.min(c.length-1,h+w)]&&c[Math.min(c.length-1,h+w)].focus()}}}),d(),f}function ie(e){var t=_(e.labels),n=e.items||[],a=e.canReact===void 0?!0:e.canReact;if(!n.length&&!a)return null;var r=!1,l=null,o="gb-tc-rp"+ ++q,u=null,p=function(c){if(!a){e.onSignIn&&e.onSignIn();return}J(n,c)||re(c),e.onToggle&&e.onToggle(c)},d=i("div",{class:"ui-reactions__row"},n.map(function(c){return b(i("button",{type:"button",class:"ui-reaction"+(c.mine?" is-mine":""),"aria-pressed":he(c.mine),title:c.names.join(", "),"aria-label":t.reactionChip(c.emoji,c.names.join(", "),c.mine)},[i("span",{class:"ui-reaction__emoji"},c.emoji),i("span",{class:"ui-reaction__names"},ee(c.names))]),function(){p(c.emoji)})})),f=i("div",{class:C("ui-reactions",e.className)},d),s=function(c,h){r=c,u.setAttribute("aria-expanded",String(r)),r?(u.setAttribute("aria-controls",o),l=L({id:o,items:n,labels:t,onPick:function(v){s(!1,!0),p(v),u.focus()},onClose:function(){s(!1,!0),u.focus()}}),f.appendChild(l),h&&l.firstChild.focus()):(u.removeAttribute("aria-controls"),l&&l.remove(),l=null),h&&e.onOpenChange&&e.onOpenChange(r)};return a&&(u=i("button",{type:"button",class:"ui-reaction-add",title:t.addReaction,"aria-label":t.addReactionTo(e.target),"aria-expanded":"false"},k("reaction",18)),d.appendChild(b(u,function(){s(!r,!0)})),e.open&&s(!0,!1)),f}function le(e,t){var n=e.value.length,a=Math.min(t[0],n),r=Math.min(Math.max(t[1],a),n);return e.focus({preventScroll:!0}),e.setSelectionRange(a,r),[a,r]}function be(e,t,n){var a=e.value,r=le(e,n),l=r[0],o=r[1];if(e.maxLength>=0&&a.length-(o-l)+t.length>e.maxLength)return!1;try{document.execCommand("insertText",!1,t)}catch{}return e.value===a&&(e.setRangeText(t,l,o,"end"),e.dispatchEvent(new Event("input",{bubbles:!0}))),!0}var ve=function(){return typeof y.matchMedia=="function"&&y.matchMedia("(pointer: coarse)").matches};function ye(e){var t=_(e.labels),n=e.textarea,a=e.button,r=null,l=[0,0],o=document.activeElement===n,u=e.host||n.closest&&n.closest(".gb-tc-composer__box")||n.parentNode,p="gb-tc-rp"+ ++q;a?(a.setAttribute("aria-expanded","false"),a.hasAttribute("aria-label")||a.setAttribute("aria-label",t.emoji)):a=i("button",{type:"button",class:"ui-btn ui-btn--ghost ui-btn--icon gb-tc-composer__emoji","aria-label":t.emoji,"aria-expanded":"false",disabled:n.disabled?"":void 0},k("emoji",20)),n.addEventListener("focus",function(){o=!0});var d=function(c){r&&!(c.target&&(r.contains(c.target)||a.contains(c.target)))&&f()};function f(){r&&(r.remove(),r=null,a.setAttribute("aria-expanded","false"),a.removeAttribute("aria-controls"),document.removeEventListener("pointerdown",d,!0),document.removeEventListener("focusin",d,!0))}function s(){var c=n.value.length;l=o?[n.selectionStart==null?c:n.selectionStart,n.selectionEnd==null?c:n.selectionEnd]:[c,c],r=L({id:p,className:"gb-tc-composer__emoji-pop",label:t.pickEmoji,labels:t,onPick:function(v){f(),re(v),be(n,v,l)},onClose:function(){f(),le(n,l)}}),a.setAttribute("aria-expanded","true"),a.setAttribute("aria-controls",p),u.appendChild(r);var h=ve()?r.querySelector(".ui-reaction-picker__btn"):r.firstChild;h&&h.focus(),document.addEventListener("pointerdown",d,!0),document.addEventListener("focusin",d,!0)}return b(a,function(){r?f():n.disabled||s()}),a}function _e(e){var t=e.read,n=e.of;if(n<=0)return null;var a=t>=n,r=Math.min(t,n)/n*Math.PI*2,l=N("svg",{viewBox:"0 0 14 14",width:"14",height:"14","aria-hidden":"true",focusable:"false"});return l.appendChild(N("circle",{cx:"7",cy:"7",r:"6",fill:a?"currentColor":"none",stroke:"currentColor","stroke-width":"1.4"})),a?l.appendChild(N("path",{class:"gb-tc-receipt__tick",d:"M4.2 7.2l1.9 1.9 3.7-4",fill:"none","stroke-width":"1.6","stroke-linecap":"round","stroke-linejoin":"round"})):t>0&&l.appendChild(N("path",{d:"M7 7 L7 1 A6 6 0 "+(r>Math.PI?1:0)+" 1 "+(7+6*Math.sin(r)).toFixed(2)+" "+(7-6*Math.cos(r)).toFixed(2)+" Z",fill:"currentColor"})),i("span",{class:C("gb-tc-receipt",a&&"gb-tc-receipt--all"),role:"img","aria-label":e.label,title:e.label},l)}function ke(e){var t={ArrowRight:1,ArrowLeft:-1}[e.key],n=[].slice.call(e.currentTarget.querySelectorAll("button:not([disabled]), summary, a[href]")).filter(function(l){return l.offsetParent!==null}),a=n.indexOf(document.activeElement);if(!(a<0)){var r=t?n[(a+t+n.length)%n.length]:e.key==="Home"?n[0]:e.key==="End"?n[n.length-1]:null;r&&(e.preventDefault(),r.focus())}}function we(e){var t=_(e.labels),n=e.author||t.someone,a=e.reactions||[],r=e.editor!=null,l=!!(e.picking&&e.onReact),o=null,u=null,p=!1,d=function(){var m=e.time;return U(m)&&p?m.cloneNode(!0):(p=!0,m)},f=function(){return C("gb-tc-msg",e.grouped&&"gb-tc-msg--grouped",e.mentionsMe&&"gb-tc-msg--mention",e.highlight&&"gb-tc-msg--highlight",e.sending&&"gb-tc-msg--sending",e.failed&&"gb-tc-msg--failed",l&&"gb-tc-msg--active",r&&"gb-tc-msg--editing",e.className)},s=i("li",{id:e.id,class:f(),"data-msg-id":e.messageId,tabindex:"-1"},e.grouped?i("time",{class:"gb-tc-msg__hover-time",datetime:e.dateTime},d()):e.avatar!=null?e.avatar:T(n,e.avatarSrc,32,"gb-tc-msg__av")),c=i("div",{class:"gb-tc-msg__main"});e.replyTo&&c.appendChild(b(i("button",{type:"button",class:"gb-tc-quote","aria-busy":e.replyTo.busy||void 0},[i("span",{class:"gb-tc-quote__who"},e.replyTo.author||t.someone),i("span",{class:"gb-tc-quote__text"},e.replyTo.excerpt)]),e.replyTo.onOpen)),c.appendChild(e.grouped?i("span",{class:"gb-tc-sr"},[n,", ",d(),": "]):i("div",{class:"gb-tc-msg__who"},[i("span",{class:"gb-tc-msg__name"},n),e.badges,i("time",{class:"gb-tc-msg__time",datetime:e.dateTime},d())])),r?c.appendChild(i("div",{class:"gb-tc-msg__editor"},e.editor)):(e.body!=null||e.edited||e.receipt)&&c.appendChild(i("div",{class:"gb-tc-msg__body"},[e.body,e.edited?i("span",{class:"gb-tc-msg__edited"},t.edited):null,e.receipt])),e.status&&c.appendChild(i("p",{class:"gb-tc-msg__status",role:e.failed?"alert":void 0},e.status)),e.attachments&&c.appendChild(i("div",{class:"gb-tc-msg__files"},e.attachments)),e.extra&&c.appendChild(i("div",{class:"gb-tc-msg__extra"},e.extra));var h=function(m,S){e.onPickingChange&&e.onPickingChange(m,S)},v=a.length?ie({items:a,onToggle:e.onReact,canReact:!!e.onReact,target:t.messageFrom(n),labels:t,open:e.reactionsPicking,onOpenChange:function(m){h("reactions",m)}}):null,g=e.thread,w=null;g&&g.count>0&&(w=b(i("button",{type:"button",class:"gb-tc-threadprev","aria-label":t.openThread(g.count,g.last==null?"":g.last)},[g.repliers&&g.repliers.length?i("span",{class:"gb-tc-threadprev__faces","aria-hidden":"true"},g.repliers.slice(0,3).map(function(m){return T(m.name,m.src,24)})):null,i("span",{class:"gb-tc-threadprev__count"},t.replies(g.count)),g.last?i("span",{class:"gb-tc-threadprev__last"},g.last):null]),g.onOpen)),O(c,[v,w]),s.appendChild(c);var D=function(m,S){l=m,s.className=f(),u&&u.setAttribute("aria-expanded",String(l)),l?(o=L({items:a,labels:t,onPick:function(Ie){D(!1,!0),e.onReact(Ie),u.focus()},onClose:function(){D(!1,!0),u.focus()}}),c.insertBefore(o,v||w),S&&o.firstChild.focus()):o&&(o.remove(),o=null),S&&h("bar",l)};if(!r&&!e.sending&&(e.onReact||e.onReply||e.onOpenThread||e.moreActions)){var E=i("div",{class:"gb-tc-acts",role:"toolbar","aria-label":t.actionsFor(n)});e.onReact&&(W.forEach(function(m){var S=J(a,m);E.appendChild(b(i("button",{type:"button",class:"gb-tc-act gb-tc-act--quick","aria-pressed":String(S),"aria-label":t.react(m,n,S)},m),function(){e.onReact(m)}))}),u=i("button",{type:"button",class:"gb-tc-act","aria-expanded":String(l),"aria-label":t.moreReactions(n),title:t.addReaction},k("reaction",18)),E.appendChild(b(u,function(){D(!l,!0)}))),e.onReply&&E.appendChild(b(i("button",{type:"button",class:"gb-tc-act","aria-label":t.replyTo(n),title:t.reply},k("reply",18)),e.onReply)),e.onOpenThread&&E.appendChild(b(i("button",{type:"button",class:"gb-tc-act","aria-label":t.replyInThreadTo(n),title:t.replyInThread},k("thread",18)),e.onOpenThread)),O(E,e.moreActions),E.addEventListener("keydown",ke),s.appendChild(E)}return l&&D(!0,!1),s}function Ce(e,t){return i("li",{class:"gb-tc-day"},t?i("time",{class:"gb-tc-day__label",datetime:t},e):i("span",{class:"gb-tc-day__label"},e))}function Ee(e){var t=_(e);return i("li",{class:"gb-tc-new"},i("span",{class:"gb-tc-new__label",role:"separator","aria-label":t.newMessages},t.newMessages))}function Se(e){return e=e||{},ce(b(i("button",{type:"button",class:"gb-tc-jump"},k("chevronsDown",20)),e.onJump),e)}function ce(e,t){t=t||{};var n=_(t.labels),a=t.count===void 0?0:t.count,r=e.querySelector(".gb-tc-jump__n");return t.visible===void 0||t.visible?e.removeAttribute("hidden"):e.setAttribute("hidden",""),e.setAttribute("aria-label",a?n.jumpNew(a):n.jump),a?(r||(r=e.appendChild(i("span",{class:"gb-tc-jump__n","aria-hidden":"true"}))),r.textContent=a>99?"99+":String(a),e):(r&&r.remove(),e)}var Re={channel:"hash",private:"lock",dm:"user"},se={online:"gb-tc-presence gb-tc-presence--online",away:"gb-tc-presence gb-tc-presence--away",offline:"gb-tc-presence gb-tc-presence--offline"};function oe(e){var t=_(e.labels),n=e.kind===void 0?"channel":e.kind,a=e.unread===void 0?0:e.unread,r=e.mentions===void 0?0:e.mentions,l=[e.name,n==="private"?t.privateChannel:n==="dm"?t.directMessage:null,r?t.mentioningYou(r):null,a?t.unread(a):null].filter(Boolean).join(", "),o=[i("span",{class:"gb-tc-channel__glyph","aria-hidden":"true"},[n==="dm"&&e.avatar?T(e.avatar.name==null?e.name:e.avatar.name,e.avatar.src,24,"gb-tc-channel__av"):k(Re[n],16),n==="dm"&&e.online!==void 0?i("span",{class:se[e.online?"online":"offline"]}):null]),i("span",{class:"gb-tc-channel__name"},e.name),r?i("span",{class:"gb-tc-badge gb-tc-badge--mention","aria-hidden":"true"},"@"+r):null,a?i("span",{class:"gb-tc-badge","aria-hidden":"true"},a):null],u=C("gb-tc-channel",a>0&&"gb-tc-channel--unread");return i("li",null,b(e.href!==void 0?i("a",{class:u,href:e.href,"aria-current":e.active?"page":void 0,"aria-label":l},o):i("button",{type:"button",class:u,"aria-current":e.active?"true":void 0,"aria-label":l},o),e.onOpen))}function ue(e,t,n,a){var r=(e.id==null?"gb-tc-s"+ ++q:e.id)+"-h";return i("div",{class:t[0],role:"group","aria-labelledby":r},[i("h3",{class:t[1],id:r},n),i("ul",{class:t[2]},(e.items||[]).map(function(l){return l&&!U(l)?a(l):l}))])}function Me(e){return ue(e,["gb-tc-rail__section","gb-tc-rail__heading","gb-tc-rail__list"],e.label,oe)}function Te(e){return ue(e,["gb-tc-people__section","gb-tc-people__heading","gb-tc-people__list"],[e.label,e.count!==void 0?" \u2014 "+e.count:null],de)}function de(e){var t=_(e.labels),n=[i("span",{class:"gb-tc-person__av"},[e.avatar!=null?e.avatar:T(e.name,e.src,32),e.presence?i("span",{class:se[e.presence]},i("span",{class:"gb-tc-sr"},t[e.presence])):null]),i("span",{class:"gb-tc-person__text"},[i("span",{class:"gb-tc-person__name"},e.name),e.subtitle?i("span",{class:"gb-tc-person__sub"},e.subtitle):null]),e.role?i("span",{class:"gb-tc-person__role"},e.role):null],a=C("gb-tc-person",e.presence==="offline"&&"gb-tc-person--offline");return i("li",null,b(e.href!==void 0?i("a",{class:a,href:e.href,title:e.name},n):e.onSelect?i("button",{type:"button",class:a,title:e.name},n):i("div",{class:a,title:e.name},n),e.onSelect))}var K=function(e){return e instanceof Date?e:new Date(e)},pe={};function G(e,t){var n=K(e),a,r,l,o;if(t){if(a=pe[t],a===void 0){try{a=new Intl.DateTimeFormat("en-US",{timeZone:t,year:"numeric",month:"numeric",day:"numeric"})}catch{a=null}pe[t]=a}if(a&&!isNaN(n.getTime())){for(r={},l=a.formatToParts(n),o=0;o<l.length;o++)l[o].type!=="literal"&&(r[l[o].type]=Number(l[o].value));return[r.year,r.month,r.day]}}return[n.getFullYear(),n.getMonth()+1,n.getDate()]}function j(e,t){var n=G(e,t);return n[0]+"-"+n[1]+"-"+n[2]}function xe(e,t){var n=G(e,t),a=function(r){return(r<10?"0":"")+r};return n[0]+"-"+a(n[1])+"-"+a(n[2])}function Ae(e,t,n){t=t===void 0?new Date:t;var a=j(e,n),r=G(t,n),l;return a===r[0]+"-"+r[1]+"-"+r[2]?"Today":(l=new Date(Date.UTC(r[0],r[1]-1,r[2]-1)),a===l.getUTCFullYear()+"-"+(l.getUTCMonth()+1)+"-"+l.getUTCDate()?"Yesterday":null)}function je(e,t){t=t||{};var n=t.groupWithinMs==null?5*60*1e3:t.groupWithinMs,a=-1,r=[],l,o=t.timeZone;if(t.isUnread){for(l=0;l<e.length;l++)if(t.isUnread(e[l])&&(t.meId==null||e[l].authorId!==t.meId)){a=l;break}}return e.forEach(function(u,p){var d=p>0?e[p-1]:void 0,f=K(u.at),s=!d||j(d.at,o)!==j(f,o);s&&r.push({kind:"day",key:j(f,o),date:f}),p===a&&r.push({kind:"new"}),r.push({kind:"message",message:u,grouped:!!(d&&!s&&p!==a&&u.authorId!=null&&d.authorId===u.authorId&&u.replyToId==null&&f.getTime()-K(d.at).getTime()<n)})}),r}P.teamChat={message:we,readReceipt:_e,daySeparator:Ce,newMessagesLine:Ee,jumpToLatest:Se,updateJump:ce,channelSection:Me,channelItem:oe,peopleSection:Te,personRow:de,reactions:ie,reactionPicker:L,emojiButton:ye,avatar:function(e){return T(e.name,e.src,e.size,e.className)},icon:k,rows:je,dayKey:j,dayISO:xe,dayWord:Ae,LABELS:I,initialsOf:z,avatarTone:V,isReactionEmoji:Q,reactionWords:A,searchReactions:$,reactionLabel:ee,frequentReactions:ne,QUICK_REACTIONS:W,SUGGESTED_REACTIONS:Y,REACTION_GROUPS:R};function fe(){!P.openModal&&y.console&&document.querySelector('script[src*="kit-plain"]')&&y.console.error("@gemboss/ui team-chat-plain.js: load it after kit-plain.js (kit-plain.js defines nothing when gembossUI exists)")}y.document&&(document.readyState==="loading"?document.addEventListener("DOMContentLoaded",fe,{once:!0}):fe())})(typeof globalThis<"u"?globalThis:this);
package/src/team-chat.tsx CHANGED
@@ -24,15 +24,17 @@ import "./team-chat.css";
24
24
  import React, { useEffect, useId, useLayoutEffect, useRef, useState } from "react";
25
25
  import { Icon } from "./icons";
26
26
  import { Avatar } from "./portal";
27
- import { ReactionPicker, Reactions, rememberRecent } from "./reactions";
27
+ import { REACTION_LABELS, ReactionPicker, Reactions, rememberRecent, type ReactionLabels } from "./reactions";
28
28
  import { QUICK_REACTIONS, type Reaction } from "./reactions-data";
29
29
 
30
30
  const cx = (...c: Array<string | false | null | undefined>) => c.filter(Boolean).join(" ");
31
31
  const useIsoLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
32
32
 
33
33
  // ── Words ──────────────────────────────────────────────────────────────────────────────────────────────────────────
34
- /** Every word the components write themselves. Pass `labels` (any subset) to translate. */
35
- export type TeamChatLabels = {
34
+ /** Every word the components write themselves. Pass `labels` (any subset) to translate. The reactions' and their picker's
35
+ * words (`ReactionLabels`: searchEmoji, noEmojiMatches, frequentlyUsed, groupName…) are here too: a message and the
36
+ * composer pass their `labels` on to the `Reactions` and the `ReactionPicker` they draw. */
37
+ export type TeamChatLabels = ReactionLabels & {
36
38
  channels: string;
37
39
  conversation: string;
38
40
  back: string;
@@ -48,6 +50,8 @@ export type TeamChatLabels = {
48
50
  actionsFor: (author: string) => string;
49
51
  react: (emoji: string, author: string, mine: boolean) => string;
50
52
  moreReactions: (author: string) => string;
53
+ /** What a message's reaction row reacts to, for its "Add reaction" (`addReactionTo`): "the message from Linh". */
54
+ messageFrom: (author: string) => string;
51
55
  reply: string;
52
56
  replyTo: (author: string) => string;
53
57
  replyInThread: string;
@@ -71,6 +75,7 @@ export type TeamChatLabels = {
71
75
  };
72
76
 
73
77
  export const TEAM_CHAT_LABELS: TeamChatLabels = {
78
+ ...REACTION_LABELS,
74
79
  channels: "Channels",
75
80
  conversation: "Conversation",
76
81
  back: "Back to channels",
@@ -86,6 +91,7 @@ export const TEAM_CHAT_LABELS: TeamChatLabels = {
86
91
  actionsFor: (a) => `Actions for the message from ${a}`,
87
92
  react: (e, a, mine) => `${mine ? "Remove" : "Add"} ${e} on the message from ${a}`,
88
93
  moreReactions: (a) => `More reactions for the message from ${a}`,
94
+ messageFrom: (a) => `the message from ${a}`,
89
95
  reply: "Reply",
90
96
  replyTo: (a) => `Reply to the message from ${a}`,
91
97
  replyInThread: "Reply in thread",
@@ -536,11 +542,11 @@ export function Message(props: MessageProps) {
536
542
  {attachments ? <div className="gb-tc-msg__files">{attachments}</div> : null}
537
543
  {extra ? <div className="gb-tc-msg__extra">{extra}</div> : null}
538
544
  {picking && onReact ? (
539
- <ReactionPicker items={reactions}
545
+ <ReactionPicker items={reactions} labels={t}
540
546
  onPick={(e) => { setPicking(false); onReact(e); reactBtn.current?.focus(); }}
541
547
  onClose={() => { setPicking(false); reactBtn.current?.focus(); }} />
542
548
  ) : null}
543
- {reactions.length ? <Reactions items={reactions} onToggle={onReact} canReact={Boolean(onReact)} target={`the message from ${who}`} /> : null}
549
+ {reactions.length ? <Reactions items={reactions} onToggle={onReact} canReact={Boolean(onReact)} target={t.messageFrom(who)} labels={t} /> : null}
544
550
  {thread && thread.count > 0 ? (
545
551
  <button type="button" className="gb-tc-threadprev" aria-label={t.openThread(thread.count, thread.last ?? "")} onClick={thread.onOpen}>
546
552
  {thread.repliers?.length ? (
@@ -559,7 +565,7 @@ export function Message(props: MessageProps) {
559
565
  <button key={e} type="button" className="gb-tc-act gb-tc-act--quick" aria-pressed={mine(e)} aria-label={t.react(e, who, mine(e))} onClick={() => onReact(e)}>{e}</button>
560
566
  )) : null}
561
567
  {onReact ? (
562
- <button ref={reactBtn} type="button" className="gb-tc-act" aria-expanded={picking} aria-label={t.moreReactions(who)} title="Add reaction" onClick={() => setPicking((p) => !p)}>
568
+ <button ref={reactBtn} type="button" className="gb-tc-act" aria-expanded={picking} aria-label={t.moreReactions(who)} title={t.addReaction} onClick={() => setPicking((p) => !p)}>
563
569
  <Icon name="reaction" size={18} />
564
570
  </button>
565
571
  ) : null}
@@ -754,7 +760,7 @@ export function Composer({ onSend, value, defaultValue = "", onValueChange, plac
754
760
  <Icon name="send" />
755
761
  </button>
756
762
  {emoji && emojiOpen ? (
757
- <ReactionPicker id={popId} className="gb-tc-composer__emoji-pop" label={t.pickEmoji} initialFocus={emojiFocus}
763
+ <ReactionPicker id={popId} className="gb-tc-composer__emoji-pop" label={t.pickEmoji} initialFocus={emojiFocus} labels={t}
758
764
  onPick={pickEmoji} onClose={() => { setEmojiOpen(false); backToField(); }} />
759
765
  ) : null}
760
766
  </div>