@bikdotai/bik-component-library 0.0.814-2 → 0.0.814-4
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.
- package/dist/cjs/components/BikGiftedChat/GiftedChat/Day.js +1 -1
- package/dist/cjs/components/BikGiftedChat/GiftedChat/Day.js.map +1 -1
- package/dist/cjs/components/BikGiftedChat/GiftedChat/GiftedChat.js +1 -1
- package/dist/cjs/components/BikGiftedChat/GiftedChat/GiftedChat.js.map +1 -1
- package/dist/cjs/editor/extensions/editorDropdown.styles.js +9 -11
- package/dist/cjs/editor/extensions/editorDropdown.styles.js.map +1 -1
- package/dist/cjs/src/components/BikGiftedChat/GiftedChat/Day.d.ts +6 -0
- package/dist/cjs/src/editor/extensions/editorDropdown.styles.d.ts +8 -2
- package/dist/esm/components/BikGiftedChat/GiftedChat/Day.js +1 -1
- package/dist/esm/components/BikGiftedChat/GiftedChat/Day.js.map +1 -1
- package/dist/esm/components/BikGiftedChat/GiftedChat/GiftedChat.js +1 -1
- package/dist/esm/components/BikGiftedChat/GiftedChat/GiftedChat.js.map +1 -1
- package/dist/esm/editor/extensions/editorDropdown.styles.js +19 -21
- package/dist/esm/editor/extensions/editorDropdown.styles.js.map +1 -1
- package/dist/esm/src/components/BikGiftedChat/GiftedChat/Day.d.ts +6 -0
- package/dist/esm/src/editor/extensions/editorDropdown.styles.d.ts +8 -2
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("date-fns"),r=require("react"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react/jsx-runtime"),t=require("date-fns"),r=require("react"),n=require("../../../constants/Theme.js"),s=require("../../TypographyStyle.js"),a=require("../Bubble/types.js");function i(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}const o=i=>{let{createdAt:o,dateFormat:d="D MMMM YY",dateFormatCalendar:l,appType:c=a.GiftedChatAppType.Bik,scrollRootRef:u}=i;const f=r.useRef(null),[p,y]=r.useState(!1),g=r.useMemo((()=>{if(null==o)return null;let e;if("number"==typeof o)e=t.startOfDay(new Date(o));else if(o instanceof Date)e=t.startOfDay(o);else{if("string"!=typeof o)return null;e=t.startOfDay(new Date(o))}if(c===a.GiftedChatAppType.Manifest)return t.format(e,"MMM d, yyyy");const r=t.startOfDay(new Date);if(!t.isSameYear(r,e))return t.format(e,"EEEE, d MMMM yy");const n=t.differenceInDays(r,e);return n<1?(null==l?void 0:l.sameDay)?l.sameDay.replace(/\[|\]/g,""):"Today":1===n?"Yesterday":t.format(e,"EEEE, d MMMM yy")}),[o,d,l,c]);if(r.useEffect((()=>{var e;const t=f.current;if(!t||"undefined"==typeof IntersectionObserver)return;const r=null!==(e=null==u?void 0:u.current)&&void 0!==e?e:null,n=new IntersectionObserver((e=>{let[t]=e;const n=r?r.getBoundingClientRect().top:0;y(!t.isIntersecting&&t.boundingClientRect.top<=n)}),{root:r,threshold:[0,1]});return n.observe(t),()=>n.disconnect()}),[u,g]),!g)return null;const x=e.jsx("div",{ref:f,"aria-hidden":!0,style:{height:1,marginBottom:-1}});return c===a.GiftedChatAppType.Manifest?e.jsxs(e.Fragment,{children:[x,e.jsx("div",Object.assign({style:{position:"sticky",top:0,zIndex:2,display:"flex",alignItems:"center",justifyContent:"center",marginTop:5,marginBottom:10}},{children:e.jsx("span",Object.assign({style:{background:p?n.COLORS.surface.standard:"transparent",color:"#b2b2b2",fontSize:12,fontWeight:600,padding:"2px 8px",borderRadius:12}},{children:g}))}))]}):e.jsxs(e.Fragment,{children:[x,e.jsxs("div",Object.assign({style:{position:"sticky",top:0,zIndex:2,display:"flex",alignItems:"center",justifyContent:"center"}},{children:[!p&&e.jsx("div",{style:{flex:1,height:"1px",backgroundColor:n.COLORS.stroke.primary}}),e.jsx("div",Object.assign({style:{border:`1px solid ${n.COLORS.stroke.primary}`,borderRadius:"16px",padding:"4px 12px",background:p?n.COLORS.surface.standard:"transparent"}},{children:e.jsx(s.BodyCaption,Object.assign({style:{color:n.COLORS.content.secondary}},{children:g}))})),!p&&e.jsx("div",{style:{flex:1,height:"1px",backgroundColor:n.COLORS.stroke.primary}})]}))]})},d=i(r).default.memo(o);exports.Day=d,exports.default=d;
|
|
2
2
|
//# sourceMappingURL=Day.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Day.js","sources":["../../../../../src/components/BikGiftedChat/GiftedChat/Day.tsx"],"sourcesContent":["import { differenceInDays, format, isSameYear, startOfDay } from 'date-fns';\nimport React, { useMemo } from 'react';\nimport { COLORS } from '../../../constants/Theme';\nimport { BodyCaption } from '../../TypographyStyle';\nimport { GiftedChatAppType } from '../Bubble/types';\n\n// Props for Day component\nexport interface DayProps {\n\tcreatedAt?: Date | number | string;\n\tdateFormat?: string;\n\tdateFormatCalendar?: {\n\t\tsameDay?: string;\n\t\tnextDay?: string;\n\t\tnextWeek?: string;\n\t\tlastDay?: string;\n\t\tlastWeek?: string;\n\t\tsameElse?: string;\n\t};\n\tappType?: GiftedChatAppType;\n}\n\n// Day component - renders date separator in chat\n// Shows formatted date with smart labeling (Today, Yesterday, etc.)\nconst DayComponent: React.FC<DayProps> = ({\n\tcreatedAt,\n\tdateFormat = 'D MMMM YY',\n\tdateFormatCalendar,\n\tappType = GiftedChatAppType.Bik,\n}) => {\n\t// Format date for display with smart labeling\n\tconst dateStr = useMemo(() => {\n\t\tif (createdAt == null) return null;\n\n\t\tlet date: Date;\n\t\tif (typeof createdAt === 'number') {\n\t\t\tdate = startOfDay(new Date(createdAt));\n\t\t} else if (createdAt instanceof Date) {\n\t\t\tdate = startOfDay(createdAt);\n\t\t} else if (typeof createdAt === 'string') {\n\t\t\tdate = startOfDay(new Date(createdAt));\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\n\t\t// For manifest, always show 'Jan 9, 2026' format\n\t\tif (appType === GiftedChatAppType.Manifest) {\n\t\t\treturn format(date, 'MMM d, yyyy');\n\t\t}\n\n\t\tconst now = startOfDay(new Date());\n\t\t// If not same year, show full date with day of week\n\t\tif (!isSameYear(now, date)) {\n\t\t\treturn format(date, 'EEEE, d MMMM yy');\n\t\t}\n\n\t\tconst daysDiff = differenceInDays(now, date);\n\n\t\t// If today\n\t\tif (daysDiff < 1) {\n\t\t\tif (dateFormatCalendar?.sameDay) {\n\t\t\t\treturn dateFormatCalendar.sameDay.replace(/\\[|\\]/g, '');\n\t\t\t}\n\t\t\treturn 'Today';\n\t\t}\n\n\t\t// If yesterday\n\t\tif (daysDiff === 1) {\n\t\t\treturn 'Yesterday';\n\t\t}\n\n\t\t// Format: \"Friday, 7 November 25\"\n\t\treturn format(date, 'EEEE, d MMMM yy');\n\t}, [createdAt, dateFormat, dateFormatCalendar, appType]);\n\n\tif (!dateStr) return null;\n\n\tif (appType === GiftedChatAppType.Manifest) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\tmarginTop: 5,\n\t\t\t\t\tmarginBottom: 10,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackground: 'transparent',\n\t\t\t\t\t\tcolor: '#b2b2b2',\n\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\tpadding: '2px 8px',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{dateStr}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tstyle={{\n\t\t\t\tdisplay: 'flex',\n\t\t\t\talignItems: 'center',\n\t\t\t\tjustifyContent: 'center',\n\t\t\t}}\n\t\t>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tflex: 1,\n\t\t\t\t\theight: '1px',\n\t\t\t\t\tbackgroundColor: COLORS.stroke.primary,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tborder: `1px solid ${COLORS.stroke.primary}`,\n\t\t\t\t\tborderRadius: '16px',\n\t\t\t\t\tpadding: '4px 12px',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<BodyCaption style={{ color: COLORS.content.secondary }}>\n\t\t\t\t\t{dateStr}\n\t\t\t\t</BodyCaption>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tflex: 1,\n\t\t\t\t\theight: '1px',\n\t\t\t\t\tbackgroundColor: COLORS.stroke.primary,\n\t\t\t\t}}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n\n// Export memoized version for performance\nexport const Day = React.memo(DayComponent);\n\nexport default Day;\n"],"names":["DayComponent","_ref","createdAt","dateFormat","dateFormatCalendar","appType","GiftedChatAppType","Bik","dateStr","useMemo","date","startOfDay","Date","Manifest","format","now","isSameYear","daysDiff","differenceInDays","sameDay","replace","_jsx","Object","assign","
|
|
1
|
+
{"version":3,"file":"Day.js","sources":["../../../../../src/components/BikGiftedChat/GiftedChat/Day.tsx"],"sourcesContent":["import { differenceInDays, format, isSameYear, startOfDay } from 'date-fns';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { COLORS } from '../../../constants/Theme';\nimport { BodyCaption } from '../../TypographyStyle';\nimport { GiftedChatAppType } from '../Bubble/types';\n\n// Props for Day component\nexport interface DayProps {\n\tcreatedAt?: Date | number | string;\n\tdateFormat?: string;\n\tdateFormatCalendar?: {\n\t\tsameDay?: string;\n\t\tnextDay?: string;\n\t\tnextWeek?: string;\n\t\tlastDay?: string;\n\t\tlastWeek?: string;\n\t\tsameElse?: string;\n\t};\n\tappType?: GiftedChatAppType;\n\t/**\n\t * Scroll container the separator sticks within. When provided, the\n\t * separator pins to the top while its day's messages scroll past, and the\n\t * divider lines are hidden while pinned (floating-pill look).\n\t */\n\tscrollRootRef?: React.RefObject<HTMLElement | null>;\n}\n\n// Day component - renders date separator in chat\n// Shows formatted date with smart labeling (Today, Yesterday, etc.)\nconst DayComponent: React.FC<DayProps> = ({\n\tcreatedAt,\n\tdateFormat = 'D MMMM YY',\n\tdateFormatCalendar,\n\tappType = GiftedChatAppType.Bik,\n\tscrollRootRef,\n}) => {\n\t// Tracks whether the separator is currently pinned to the top of the\n\t// scroll container. A zero-layout sentinel rendered just above the sticky\n\t// header scrolls normally; once it leaves the top edge the header is pinned.\n\tconst sentinelRef = useRef<HTMLDivElement>(null);\n\tconst [isStuck, setIsStuck] = useState(false);\n\t// Format date for display with smart labeling\n\tconst dateStr = useMemo(() => {\n\t\tif (createdAt == null) return null;\n\n\t\tlet date: Date;\n\t\tif (typeof createdAt === 'number') {\n\t\t\tdate = startOfDay(new Date(createdAt));\n\t\t} else if (createdAt instanceof Date) {\n\t\t\tdate = startOfDay(createdAt);\n\t\t} else if (typeof createdAt === 'string') {\n\t\t\tdate = startOfDay(new Date(createdAt));\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\n\t\t// For manifest, always show 'Jan 9, 2026' format\n\t\tif (appType === GiftedChatAppType.Manifest) {\n\t\t\treturn format(date, 'MMM d, yyyy');\n\t\t}\n\n\t\tconst now = startOfDay(new Date());\n\t\t// If not same year, show full date with day of week\n\t\tif (!isSameYear(now, date)) {\n\t\t\treturn format(date, 'EEEE, d MMMM yy');\n\t\t}\n\n\t\tconst daysDiff = differenceInDays(now, date);\n\n\t\t// If today\n\t\tif (daysDiff < 1) {\n\t\t\tif (dateFormatCalendar?.sameDay) {\n\t\t\t\treturn dateFormatCalendar.sameDay.replace(/\\[|\\]/g, '');\n\t\t\t}\n\t\t\treturn 'Today';\n\t\t}\n\n\t\t// If yesterday\n\t\tif (daysDiff === 1) {\n\t\t\treturn 'Yesterday';\n\t\t}\n\n\t\t// Format: \"Friday, 7 November 25\"\n\t\treturn format(date, 'EEEE, d MMMM yy');\n\t}, [createdAt, dateFormat, dateFormatCalendar, appType]);\n\n\t// Detect the pinned state. The sentinel scrolls with the content; once it\n\t// crosses above the scroll container's top edge the header is pinned.\n\tuseEffect(() => {\n\t\tconst sentinel = sentinelRef.current;\n\t\tif (!sentinel || typeof IntersectionObserver === 'undefined') return;\n\t\tconst root = scrollRootRef?.current ?? null;\n\t\tconst observer = new IntersectionObserver(\n\t\t\t([entry]) => {\n\t\t\t\tconst rootTop = root ? root.getBoundingClientRect().top : 0;\n\t\t\t\t// Pinned only when the sentinel has left via the TOP edge — not\n\t\t\t\t// when it's simply offscreen below (yet to be scrolled into view).\n\t\t\t\tsetIsStuck(\n\t\t\t\t\t!entry.isIntersecting && entry.boundingClientRect.top <= rootTop,\n\t\t\t\t);\n\t\t\t},\n\t\t\t{ root, threshold: [0, 1] },\n\t\t);\n\t\tobserver.observe(sentinel);\n\t\treturn () => observer.disconnect();\n\t}, [scrollRootRef, dateStr]);\n\n\tif (!dateStr) return null;\n\n\t// Zero-layout sentinel sitting just above the sticky header.\n\tconst sentinel = (\n\t\t<div\n\t\t\tref={sentinelRef}\n\t\t\taria-hidden\n\t\t\tstyle={{ height: 1, marginBottom: -1 }}\n\t\t/>\n\t);\n\n\tif (appType === GiftedChatAppType.Manifest) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{sentinel}\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: 'sticky',\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tzIndex: 2,\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\tmarginTop: 5,\n\t\t\t\t\t\tmarginBottom: 10,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackground: isStuck ? COLORS.surface.standard : 'transparent',\n\t\t\t\t\t\t\tcolor: '#b2b2b2',\n\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\tpadding: '2px 8px',\n\t\t\t\t\t\t\tborderRadius: 12,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{dateStr}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{sentinel}\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: 'sticky',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tzIndex: 2,\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{!isStuck && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\theight: '1px',\n\t\t\t\t\t\t\tbackgroundColor: COLORS.stroke.primary,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tborder: `1px solid ${COLORS.stroke.primary}`,\n\t\t\t\t\t\tborderRadius: '16px',\n\t\t\t\t\t\tpadding: '4px 12px',\n\t\t\t\t\t\tbackground: isStuck ? COLORS.surface.standard : 'transparent',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<BodyCaption style={{ color: COLORS.content.secondary }}>\n\t\t\t\t\t\t{dateStr}\n\t\t\t\t\t</BodyCaption>\n\t\t\t\t</div>\n\t\t\t\t{!isStuck && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\theight: '1px',\n\t\t\t\t\t\t\tbackgroundColor: COLORS.stroke.primary,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\n// Export memoized version for performance\nexport const Day = React.memo(DayComponent);\n\nexport default Day;\n"],"names":["DayComponent","_ref","createdAt","dateFormat","dateFormatCalendar","appType","GiftedChatAppType","Bik","scrollRootRef","sentinelRef","useRef","isStuck","setIsStuck","useState","dateStr","useMemo","date","startOfDay","Date","Manifest","format","now","isSameYear","daysDiff","differenceInDays","sameDay","replace","useEffect","sentinel","current","IntersectionObserver","root","_a","observer","_ref2","entry","rootTop","getBoundingClientRect","top","isIntersecting","boundingClientRect","threshold","observe","disconnect","_jsx","jsx","ref","style","height","marginBottom","_jsxs","_Fragment","children","Object","assign","position","zIndex","display","alignItems","justifyContent","marginTop","background","COLORS","surface","standard","color","fontSize","fontWeight","padding","borderRadius","flex","backgroundColor","stroke","primary","border","BodyCaption","content","secondary","Day","React","memo"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../_virtual/_tslib.js"),t=require("react/jsx-runtime"),s=require("react"),r=require("../../../constants/Theme.js"),i=require("../../../hooks/useWindowSize.js"),n=require("../../button/Button.js"),l=require("../../TypographyStyle.js"),a=require("../Bubble/types.js"),o=require("./Day.js"),d=require("./messageHelpers.js"),u=require("./scrollHooks.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../_virtual/_tslib.js"),t=require("react/jsx-runtime"),s=require("react"),r=require("../../../constants/Theme.js"),i=require("../../../hooks/useWindowSize.js"),n=require("../../button/Button.js"),l=require("../../TypographyStyle.js"),a=require("../Bubble/types.js"),o=require("./Day.js"),d=require("./messageHelpers.js"),u=require("./scrollHooks.js"),c=require("./types.js"),g=require("./utils.js");function h(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var p=h(s);const v=e=>{let{text:r,isExpanded:i,onToggle:a}=e;const o=s.useRef(null),[d,u]=s.useState(!1);return s.useEffect((()=>{const e=o.current;if(e){e.style.maxHeight="none";const t=e.scrollHeight>204;e.style.maxHeight=i?"none":"204px",u(t)}}),[r,i]),t.jsxs(t.Fragment,{children:[t.jsx("div",Object.assign({ref:o,style:{maxHeight:i?"none":204,overflow:"hidden"}},{children:t.jsx(l.BodySecondary,{children:r})})),d&&t.jsx(n.Button,{buttonType:"text",size:"xs",buttonText:i?"Show less":"Read more",onClick:a})]})},f=(n,l)=>{var h;const f=n||{},{messages:x=[],user:y,renderBubble:b,renderAvatar:j,renderDay:m,renderLoading:O,renderChatEmpty:T,listViewProps:A={},renderAvatarOnTop:S=!1,showUserAvatar:C=!1,showAvatarForEveryMessage:M=!1,inverted:R=!1,messageIdGenerator:w,topThreshold:_=g.TOP_THRESHOLD,appType:E=a.GiftedChatAppType.Bik,maxHeight:k,isActivityMessage:L}=f,H=e.__rest(f,["messages","user","renderBubble","renderAvatar","renderDay","renderLoading","renderChatEmpty","listViewProps","renderAvatarOnTop","showUserAvatar","showAvatarForEveryMessage","inverted","messageIdGenerator","topThreshold","appType","maxHeight","isActivityMessage"]),B=i.useWindowSize(),q=s.useRef(null),G=g.normalizeRef(A.ref||l,q),I=s.useRef({isInitialMount:!0,isUserScrolling:!1,isLoadingOldMessages:!1,isAtBottom:!0,hasTriggeredEndReached:!1,lastMessagesLength:null!==(h=null==x?void 0:x.length)&&void 0!==h?h:0,previousScrollHeight:0,previousScrollTop:0,scrollTimeout:null}),[P,D]=s.useState(new Set),F=s.useMemo((()=>x&&0!==x.length?[...x].reverse():[]),[x]),N=s.useMemo((()=>{const e=[];return F.forEach(((t,s)=>{const r=F[s-1];0!==s&&g.isSameDay(t,r)?e[e.length-1].indices.push(s):e.push({createdAt:t.createdAt,indices:[s]})})),e}),[F]),z=u.useScrollToBottom(G,I);s.useImperativeHandle(l,(()=>G.current)),u.useInitialMountScroll(G,I,F.length,z),u.useScrollCleanup(I),u.useRestoreScrollPosition(G,I,F.length),u.useAutoScrollOnNewMessages(G,I,x.length,z),u.useResizeObserverForFirstMessage(null==x?void 0:x[0],I,z,w);const $=u.useScrollHandler(I,A.onEndReached,A.onScroll,_),W=s.useCallback((e=>{var t;return Boolean(e&&y&&(null===(t=e.user)||void 0===t?void 0:t._id)===y._id)}),[y]),U=s.useCallback(((e,t)=>!!C&&(!!M||(!t||!!L&&L(e)||!!L&&L(t)||t.user._id!==e.user._id))),[C,M,L]),V=s.useCallback(((e,s,i)=>{var n,l,o,d,u;const c=W(e)?"right":"left",g=(null===(n=null==s?void 0:s.user)||void 0===n?void 0:n._id)!==(null===(l=null==e?void 0:e.user)||void 0===l?void 0:l._id),h=(null===(o=null==i?void 0:i.user)||void 0===o?void 0:o._id)!==(null===(d=null==e?void 0:e.user)||void 0===d?void 0:d._id),p=Object.assign({currentMessage:e,previousMessage:s,nextMessage:i,position:c,user:y},H);if(b)return b(p);const f=e._id,x=P.has(f);return t.jsx("div",Object.assign({style:Object.assign(Object.assign({maxWidth:E===a.GiftedChatAppType.Manifest?"50%":"70%",width:"fit-content"},E===a.GiftedChatAppType.Manifest?{minWidth:"130px"}:{}),{padding:"8px 12px",borderTopLeftRadius:"left"===c?g?12:2:12,borderTopRightRadius:"right"===c?g?12:2:12,borderBottomLeftRadius:"left"===c?h?12:2:12,borderBottomRightRadius:"right"===c?h?12:2:12,border:"left"===c&&E===a.GiftedChatAppType.Manifest?"1px solid rgb(224, 224, 224)":"none",backgroundColor:"right"===c?E===a.GiftedChatAppType.Manifest?r.COLORS.background.brandTint:r.COLORS.background.brandLight:E===a.GiftedChatAppType.Manifest?r.COLORS.background.pureWhite:r.COLORS.background.inactive,color:r.COLORS.content.primary,wordBreak:"break-word"})},{children:t.jsx(v,{text:null!==(u=e.text)&&void 0!==u?u:"",isExpanded:x,onToggle:()=>D((e=>{const t=new Set(e);return x?t.delete(f):t.add(f),t}))})}))}),[W,y,b,H,P]),Y=s.useCallback(((e,t,s)=>{if(!U(e,t))return null;const r=W(e)?"right":"left";return j?j({currentMessage:e,previousMessage:t,nextMessage:s,position:r,user:y,renderAvatarOnTop:S,showUserAvatar:C,showAvatarForEveryMessage:M}):null}),[U,W,y,S,C,M,j]);return x&&0!==x.length?t.jsxs("div",Object.assign({ref:G,style:Object.assign(Object.assign({flex:1,overflowY:"auto",overflowX:"hidden",display:"flex",flexDirection:"column"},k?{maxHeight:k,height:k}:{}),A.style),onScroll:$},{children:[t.jsx("div",{style:{flex:"1 0 auto"}}),t.jsx("div",Object.assign({style:{display:"flex",flexDirection:"column",flex:"0 0 auto"}},{children:N.map(((e,s)=>t.jsxs("div",{children:[m?t.jsx("div",Object.assign({style:{position:"sticky",top:0,zIndex:2}},{children:m({createdAt:e.createdAt})})):t.jsx(o.Day,{createdAt:e.createdAt,appType:E,scrollRootRef:G}),e.indices.map((e=>{var s,r,i,n,l,o;const u=F[e],h=(null==u?void 0:u.channelId)===c.MESSAGE_CHANNELS.SMTP||(null==u?void 0:u.channelName)===c.MESSAGE_CHANNELS.SMTP,v=h?"left":W(u)?"right":"left",f=F[e-1],x=F[e+1],y=d.getMessagePlacement(u,v),b=d.shouldCenterAlign(u),j=u.category===g.Constants.ChatActivity.Category.ACTIVITY&&u.activityType===g.Constants.ChatActivity.Type.PRIVATE_NOTE;return t.jsx(p.default.Fragment,{children:t.jsxs("div",Object.assign({style:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},B?{margin:"0 4px"}:{}),b?{}:{display:"flex",alignItems:"flex-start"}),E!==a.GiftedChatAppType.Manifest?B||"right"!==v?{marginRight:8}:{marginLeft:8}:{}),h&&!j&&B?{marginLeft:8,marginRight:8}:{}),{justifyContent:y,marginBottom:x?(null===(s=null==x?void 0:x.user)||void 0===s?void 0:s._id)===(null===(r=null==u?void 0:u.user)||void 0===r?void 0:r._id)?4:20:0})},{children:[!B&&"left"===v&&t.jsx("div",Object.assign({style:{marginRight:"4px",width:"24px",flexShrink:0}},{children:Y(u,f,x)})),t.jsx("div",Object.assign({id:`message-bubble-${null!==(i=u._id)&&void 0!==i?i:`${e}-${null!==(n=null==w?void 0:w())&&void 0!==n?n:"id"}`}`,style:E===a.GiftedChatAppType.Manifest?{width:"100%"}:B||h?{display:"flex",flexGrow:1,width:"100%"}:{}},{children:V(u,f,x)})),!B&&"right"===v&&t.jsx("div",Object.assign({style:{marginLeft:"4px",width:"24px",flexShrink:0,alignSelf:"flex-start"}},{children:Y(u,f,x)}))]}))},null!==(l=u._id)&&void 0!==l?l:`${e}-${null!==(o=null==w?void 0:w())&&void 0!==o?o:"id"}`)}))]},`day-group-${s}`)))}))]})):T?t.jsx(t.Fragment,{children:T()}):null};var x=s.forwardRef(f);exports.default=x;
|
|
2
2
|
//# sourceMappingURL=GiftedChat.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GiftedChat.js","sources":["../../../../../src/components/BikGiftedChat/GiftedChat/GiftedChat.tsx"],"sourcesContent":["import React, {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport { COLORS } from '../../../constants/Theme';\nimport { useWindowSize } from '../../../hooks/useWindowSize';\nimport { Button } from '../../button';\nimport { BodySecondary } from '../../TypographyStyle';\nimport { BubbleProps, GiftedChatAppType } from '../Bubble/types';\nimport { IMessage } from '../types';\nimport { Day } from './Day';\nimport { getMessagePlacement, shouldCenterAlign } from './messageHelpers';\nimport {\n\tuseAutoScrollOnNewMessages,\n\tuseInitialMountScroll,\n\tuseResizeObserverForFirstMessage,\n\tuseRestoreScrollPosition,\n\tuseScrollCleanup,\n\tuseScrollHandler,\n\tuseScrollToBottom,\n} from './scrollHooks';\nimport { AvatarProps, GiftedChatProps, MESSAGE_CHANNELS } from './types';\nimport { isSameDay, normalizeRef } from './utils';\nimport { Constants, TOP_THRESHOLD } from './utils';\n\nconst COLLAPSED_MAX_HEIGHT = 204;\n\nconst CollapsibleBubbleText: React.FC<{\n\ttext: string;\n\tisExpanded: boolean;\n\tonToggle: () => void;\n}> = ({ text, isExpanded, onToggle }) => {\n\tconst textRef = useRef<HTMLDivElement>(null);\n\tconst [isOverflowing, setIsOverflowing] = useState(false);\n\n\tuseEffect(() => {\n\t\tconst el = textRef.current;\n\t\tif (el) {\n\t\t\t// Temporarily remove max-height to measure true scroll height\n\t\t\tel.style.maxHeight = 'none';\n\t\t\tconst overflows = el.scrollHeight > COLLAPSED_MAX_HEIGHT;\n\t\t\tel.style.maxHeight = isExpanded ? 'none' : `${COLLAPSED_MAX_HEIGHT}px`;\n\t\t\tsetIsOverflowing(overflows);\n\t\t}\n\t}, [text, isExpanded]);\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\tref={textRef}\n\t\t\t\tstyle={{\n\t\t\t\t\tmaxHeight: isExpanded ? 'none' : COLLAPSED_MAX_HEIGHT,\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<BodySecondary>{text}</BodySecondary>\n\t\t\t</div>\n\t\t\t{isOverflowing && (\n\t\t\t\t<Button\n\t\t\t\t\tbuttonType=\"text\"\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\tbuttonText={isExpanded ? 'Show less' : 'Read more'}\n\t\t\t\t\tonClick={onToggle}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t);\n};\n\nconst GiftedChatInner = (\n\tprops: Omit<GiftedChatProps<IMessage>, 'ref'>,\n\tforwardedRef: React.Ref<HTMLDivElement>,\n) => {\n\tconst {\n\t\tmessages = [],\n\t\tuser,\n\t\trenderBubble,\n\t\trenderAvatar,\n\t\trenderDay,\n\t\trenderLoading,\n\t\trenderChatEmpty,\n\t\tlistViewProps = {},\n\t\trenderAvatarOnTop = false,\n\t\tshowUserAvatar = false,\n\t\tshowAvatarForEveryMessage = false,\n\t\tinverted = false,\n\t\tmessageIdGenerator,\n\t\ttopThreshold = TOP_THRESHOLD,\n\t\tappType = GiftedChatAppType.Bik,\n\t\tmaxHeight,\n\t\tisActivityMessage,\n\t\t...extraProps\n\t} = props || {};\n\n\tconst isMobile = useWindowSize();\n\n\tconst internalScrollRef = useRef<HTMLDivElement | null>(null);\n\tconst scrollRef = normalizeRef(\n\t\tlistViewProps.ref || forwardedRef,\n\t\tinternalScrollRef,\n\t);\n\n\tconst scrollState = useRef({\n\t\tisInitialMount: true,\n\t\tisUserScrolling: false,\n\t\tisLoadingOldMessages: false,\n\t\tisAtBottom: true,\n\t\thasTriggeredEndReached: false,\n\t\tlastMessagesLength: messages?.length ?? 0,\n\t\tpreviousScrollHeight: 0,\n\t\tpreviousScrollTop: 0,\n\t\tscrollTimeout: null,\n\t});\n\n\tconst [expandedMessages, setExpandedMessages] = useState<\n\t\tSet<string | number>\n\t>(new Set());\n\n\t// Reverse messages so newest appears last in DOM (natural reading order)\n\tconst reversedMessages = useMemo(() => {\n\t\tif (!messages || messages.length === 0) return [] as IMessage[];\n\t\treturn [...messages].reverse() as IMessage[];\n\t}, [messages]);\n\n\tconst scrollToBottom = useScrollToBottom(scrollRef, scrollState);\n\n\tuseImperativeHandle(forwardedRef, () => scrollRef.current!);\n\n\tuseInitialMountScroll(\n\t\tscrollRef,\n\t\tscrollState,\n\t\treversedMessages.length,\n\t\tscrollToBottom,\n\t);\n\n\tuseScrollCleanup(scrollState);\n\n\tuseRestoreScrollPosition(scrollRef, scrollState, reversedMessages.length);\n\n\tuseAutoScrollOnNewMessages(\n\t\tscrollRef,\n\t\tscrollState,\n\t\tmessages.length,\n\t\tscrollToBottom,\n\t);\n\n\tuseResizeObserverForFirstMessage(\n\t\tmessages?.[0],\n\t\tscrollState,\n\t\tscrollToBottom,\n\t\tmessageIdGenerator,\n\t);\n\n\tconst handleScroll = useScrollHandler(\n\t\tscrollState,\n\t\tlistViewProps.onEndReached,\n\t\tlistViewProps.onScroll,\n\t\ttopThreshold,\n\t);\n\n\t// Check if a message belongs to the current user\n\tconst isUserMessage = useCallback(\n\t\t(message: IMessage) => {\n\t\t\treturn Boolean(message && user && message.user?._id === user._id);\n\t\t},\n\t\t[user],\n\t);\n\n\t// Determine if avatar should be shown for this message\n\tconst shouldShowAvatar = useCallback(\n\t\t(message: IMessage, previousMessage?: IMessage) => {\n\t\t\tif (!showUserAvatar) return false;\n\t\t\tif (showAvatarForEveryMessage) return true;\n\n\t\t\t// Show avatar on the first message in a consecutive sender stack,\n\t\t\t// or when an activity interrupts the stack, or when the current message itself is an activity\n\t\t\treturn (\n\t\t\t\t!previousMessage ||\n\t\t\t\t(isActivityMessage ? isActivityMessage(message) : false) ||\n\t\t\t\t(isActivityMessage ? isActivityMessage(previousMessage) : false) ||\n\t\t\t\tpreviousMessage.user._id !== message.user._id\n\t\t\t);\n\t\t},\n\t\t[showUserAvatar, showAvatarForEveryMessage, isActivityMessage],\n\t);\n\n\t// Render a message bubble (or call custom renderBubble)\n\tconst renderMessageBubble = useCallback(\n\t\t(message: IMessage, previousMessage?: IMessage, nextMessage?: IMessage) => {\n\t\t\tconst position = isUserMessage(message) ? 'right' : 'left';\n\t\t\tconst isTopOfStack = previousMessage?.user?._id !== message?.user?._id;\n\t\t\tconst isBottomOfStack = nextMessage?.user?._id !== message?.user?._id;\n\n\t\t\tconst bubbleProps: BubbleProps<IMessage> = {\n\t\t\t\tcurrentMessage: message,\n\t\t\t\tpreviousMessage,\n\t\t\t\tnextMessage,\n\t\t\t\tposition,\n\t\t\t\tuser,\n\t\t\t\t...extraProps,\n\t\t\t};\n\n\t\t\t// Use custom render function if provided\n\t\t\tif (renderBubble) {\n\t\t\t\treturn renderBubble(bubbleProps);\n\t\t\t}\n\n\t\t\t// Default bubble rendering\n\t\t\tconst messageId = message._id;\n\t\t\tconst isExpanded = expandedMessages.has(messageId);\n\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmaxWidth: appType === GiftedChatAppType.Manifest ? '50%' : '70%',\n\t\t\t\t\t\twidth: 'fit-content',\n\t\t\t\t\t\t...(appType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t? { minWidth: '130px' }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\tpadding: '8px 12px',\n\t\t\t\t\t\tborderTopLeftRadius:\n\t\t\t\t\t\t\tposition === 'left' ? (isTopOfStack ? 12 : 2) : 12,\n\t\t\t\t\t\tborderTopRightRadius:\n\t\t\t\t\t\t\tposition === 'right' ? (isTopOfStack ? 12 : 2) : 12,\n\t\t\t\t\t\tborderBottomLeftRadius:\n\t\t\t\t\t\t\tposition === 'left' ? (isBottomOfStack ? 12 : 2) : 12,\n\t\t\t\t\t\tborderBottomRightRadius:\n\t\t\t\t\t\t\tposition === 'right' ? (isBottomOfStack ? 12 : 2) : 12,\n\t\t\t\t\t\tborder:\n\t\t\t\t\t\t\tposition === 'left' && appType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t? '1px solid rgb(224, 224, 224)'\n\t\t\t\t\t\t\t\t: 'none',\n\t\t\t\t\t\tbackgroundColor:\n\t\t\t\t\t\t\tposition === 'right'\n\t\t\t\t\t\t\t\t? appType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t\t? COLORS.background.brandTint\n\t\t\t\t\t\t\t\t\t: COLORS.background.brandLight\n\t\t\t\t\t\t\t\t: appType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t? COLORS.background.pureWhite\n\t\t\t\t\t\t\t\t: COLORS.background.inactive,\n\t\t\t\t\t\tcolor: COLORS.content.primary,\n\t\t\t\t\t\twordBreak: 'break-word',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<CollapsibleBubbleText\n\t\t\t\t\t\ttext={message.text ?? ''}\n\t\t\t\t\t\tisExpanded={isExpanded}\n\t\t\t\t\t\tonToggle={() =>\n\t\t\t\t\t\t\tsetExpandedMessages((prev) => {\n\t\t\t\t\t\t\t\tconst next = new Set(prev);\n\t\t\t\t\t\t\t\tif (isExpanded) next.delete(messageId);\n\t\t\t\t\t\t\t\telse next.add(messageId);\n\t\t\t\t\t\t\t\treturn next;\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t},\n\t\t[isUserMessage, user, renderBubble, extraProps, expandedMessages],\n\t);\n\n\t// Render a message avatar (or call custom renderAvatar)\n\tconst renderMessageAvatar = useCallback(\n\t\t(message: IMessage, previousMessage?: IMessage, nextMessage?: IMessage) => {\n\t\t\tconst shouldShow = shouldShowAvatar(message, previousMessage);\n\n\t\t\tif (!shouldShow) return null;\n\n\t\t\tconst position = isUserMessage(message) ? 'right' : 'left';\n\n\t\t\tconst avatarProps: AvatarProps<IMessage> = {\n\t\t\t\tcurrentMessage: message,\n\t\t\t\tpreviousMessage,\n\t\t\t\tnextMessage,\n\t\t\t\tposition,\n\t\t\t\tuser,\n\t\t\t\trenderAvatarOnTop,\n\t\t\t\tshowUserAvatar,\n\t\t\t\tshowAvatarForEveryMessage,\n\t\t\t};\n\n\t\t\treturn renderAvatar ? renderAvatar(avatarProps) : null;\n\t\t},\n\t\t[\n\t\t\tshouldShowAvatar,\n\t\t\tisUserMessage,\n\t\t\tuser,\n\t\t\trenderAvatarOnTop,\n\t\t\tshowUserAvatar,\n\t\t\tshowAvatarForEveryMessage,\n\t\t\trenderAvatar,\n\t\t],\n\t);\n\n\t// Render: Empty State\n\tif (!messages || messages.length === 0) {\n\t\treturn renderChatEmpty ? <>{renderChatEmpty()}</> : null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tref={scrollRef as React.RefObject<HTMLDivElement>}\n\t\t\tstyle={{\n\t\t\t\tflex: 1,\n\t\t\t\toverflowY: 'auto',\n\t\t\t\toverflowX: 'hidden',\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tflexDirection: 'column',\n\t\t\t\t...(maxHeight ? { maxHeight, height: maxHeight } : {}),\n\t\t\t\t...listViewProps.style,\n\t\t\t}}\n\t\t\tonScroll={handleScroll}\n\t\t>\n\t\t\t{/* Spacer to push messages to bottom (newest appears last in DOM) */}\n\t\t\t<div style={{ flex: '1 0 auto' }} />\n\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\tflex: '0 0 auto',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{reversedMessages.map((message, index) => {\n\t\t\t\t\tconst isSmtp =\n\t\t\t\t\t\tmessage?.['channelId'] === MESSAGE_CHANNELS.SMTP ||\n\t\t\t\t\t\tmessage?.['channelName'] === MESSAGE_CHANNELS.SMTP;\n\t\t\t\t\tconst position = isSmtp\n\t\t\t\t\t\t? 'left'\n\t\t\t\t\t\t: isUserMessage(message)\n\t\t\t\t\t\t? 'right'\n\t\t\t\t\t\t: 'left';\n\t\t\t\t\tconst previousMessage = reversedMessages[index - 1];\n\t\t\t\t\tconst nextMessage = reversedMessages[index + 1];\n\t\t\t\t\tconst shouldShowDay = !isSameDay(message, previousMessage);\n\t\t\t\t\tconst placement = getMessagePlacement(message, position);\n\t\t\t\t\tconst isCentered = shouldCenterAlign(message);\n\t\t\t\t\t// Check if message is a private note\n\t\t\t\t\tconst isPrivateNote =\n\t\t\t\t\t\tmessage['category'] === Constants.ChatActivity.Category.ACTIVITY &&\n\t\t\t\t\t\tmessage['activityType'] ===\n\t\t\t\t\t\t\tConstants.ChatActivity.Type.PRIVATE_NOTE;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<React.Fragment\n\t\t\t\t\t\t\tkey={message._id ?? `${index}-${messageIdGenerator?.() ?? 'id'}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{/* Day separator */}\n\t\t\t\t\t\t\t{shouldShowDay &&\n\t\t\t\t\t\t\t\t(renderDay ? (\n\t\t\t\t\t\t\t\t\trenderDay({ createdAt: message.createdAt })\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<Day createdAt={message.createdAt} appType={appType} />\n\t\t\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t\t{/* Message container */}\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t...(isMobile ? { margin: '0 4px' } : {}),\n\t\t\t\t\t\t\t\t\t...(isCentered\n\t\t\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t\t\t: { display: 'flex', alignItems: 'flex-start' }),\n\t\t\t\t\t\t\t\t\t...(appType !== GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t\t\t? !isMobile && position === 'right'\n\t\t\t\t\t\t\t\t\t\t\t? { marginLeft: 8 }\n\t\t\t\t\t\t\t\t\t\t\t: { marginRight: 8 }\n\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t...(isSmtp && !isPrivateNote && isMobile\n\t\t\t\t\t\t\t\t\t\t? { marginLeft: 8, marginRight: 8 }\n\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\tjustifyContent: placement,\n\t\t\t\t\t\t\t\t\tmarginBottom: nextMessage\n\t\t\t\t\t\t\t\t\t\t? nextMessage?.user?._id === message?.user?._id\n\t\t\t\t\t\t\t\t\t\t\t? 4\n\t\t\t\t\t\t\t\t\t\t\t: 20\n\t\t\t\t\t\t\t\t\t\t: 0,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* Left avatar or placeholder (for mobile, avatar is hidden) */}\n\t\t\t\t\t\t\t\t{!isMobile && position === 'left' && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tmarginRight: '4px',\n\t\t\t\t\t\t\t\t\t\t\twidth: '24px',\n\t\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{renderMessageAvatar(message, previousMessage, nextMessage)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* Message bubble */}\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tid={`message-bubble-${\n\t\t\t\t\t\t\t\t\t\tmessage._id ?? `${index}-${messageIdGenerator?.() ?? 'id'}`\n\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\t\tappType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t\t\t\t? { width: '100%' }\n\t\t\t\t\t\t\t\t\t\t\t: isMobile || isSmtp\n\t\t\t\t\t\t\t\t\t\t\t? { display: 'flex', flexGrow: 1, width: '100%' }\n\t\t\t\t\t\t\t\t\t\t\t: {}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{renderMessageBubble(message, previousMessage, nextMessage)}\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t{/* Right avatar or placeholder (for mobile, avatar is hidden) */}\n\t\t\t\t\t\t\t\t{!isMobile && position === 'right' && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tmarginLeft: '4px',\n\t\t\t\t\t\t\t\t\t\t\twidth: '24px',\n\t\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\t\t\talignSelf: 'flex-start',\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{renderMessageAvatar(message, previousMessage, nextMessage)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</React.Fragment>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default forwardRef<HTMLDivElement, GiftedChatProps<IMessage>>(\n\tGiftedChatInner,\n);\n"],"names":["CollapsibleBubbleText","_ref","text","isExpanded","onToggle","textRef","useRef","isOverflowing","setIsOverflowing","useState","useEffect","el","current","style","maxHeight","overflows","scrollHeight","_jsxs","_jsx","jsx","Object","assign","ref","overflow","children","BodySecondary","Button","buttonType","size","buttonText","onClick","GiftedChatInner","props","forwardedRef","_b","messages","user","renderBubble","renderAvatar","renderDay","renderLoading","renderChatEmpty","listViewProps","renderAvatarOnTop","showUserAvatar","showAvatarForEveryMessage","inverted","messageIdGenerator","topThreshold","TOP_THRESHOLD","appType","GiftedChatAppType","Bik","isActivityMessage","extraProps","__rest","isMobile","useWindowSize","internalScrollRef","scrollRef","normalizeRef","scrollState","isInitialMount","isUserScrolling","isLoadingOldMessages","isAtBottom","hasTriggeredEndReached","lastMessagesLength","_a","length","previousScrollHeight","previousScrollTop","scrollTimeout","expandedMessages","setExpandedMessages","Set","reversedMessages","useMemo","reverse","scrollToBottom","useScrollToBottom","useImperativeHandle","useInitialMountScroll","useScrollCleanup","useRestoreScrollPosition","useAutoScrollOnNewMessages","useResizeObserverForFirstMessage","handleScroll","useScrollHandler","onEndReached","onScroll","isUserMessage","useCallback","message","Boolean","_id","shouldShowAvatar","previousMessage","renderMessageBubble","nextMessage","position","isTopOfStack","isBottomOfStack","_c","_d","bubbleProps","currentMessage","messageId","has","maxWidth","Manifest","width","minWidth","padding","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","border","backgroundColor","COLORS","background","brandTint","brandLight","pureWhite","inactive","color","content","primary","wordBreak","_e","prev","next","delete","add","renderMessageAvatar","flex","overflowY","overflowX","display","flexDirection","height","map","index","isSmtp","MESSAGE_CHANNELS","SMTP","shouldShowDay","isSameDay","placement","getMessagePlacement","isCentered","shouldCenterAlign","isPrivateNote","Constants","ChatActivity","Category","ACTIVITY","Type","PRIVATE_NOTE","jsxs","React","Fragment","createdAt","Day","margin","alignItems","marginRight","marginLeft","justifyContent","marginBottom","flexShrink","id","flexGrow","alignSelf","_f","_Fragment","GiftedChat","forwardRef"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GiftedChat.js","sources":["../../../../../src/components/BikGiftedChat/GiftedChat/GiftedChat.tsx"],"sourcesContent":["import React, {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport { COLORS } from '../../../constants/Theme';\nimport { useWindowSize } from '../../../hooks/useWindowSize';\nimport { Button } from '../../button';\nimport { BodySecondary } from '../../TypographyStyle';\nimport { BubbleProps, GiftedChatAppType } from '../Bubble/types';\nimport { IMessage } from '../types';\nimport { Day } from './Day';\nimport { getMessagePlacement, shouldCenterAlign } from './messageHelpers';\nimport {\n\tuseAutoScrollOnNewMessages,\n\tuseInitialMountScroll,\n\tuseResizeObserverForFirstMessage,\n\tuseRestoreScrollPosition,\n\tuseScrollCleanup,\n\tuseScrollHandler,\n\tuseScrollToBottom,\n} from './scrollHooks';\nimport { AvatarProps, GiftedChatProps, MESSAGE_CHANNELS } from './types';\nimport { isSameDay, normalizeRef } from './utils';\nimport { Constants, TOP_THRESHOLD } from './utils';\n\nconst COLLAPSED_MAX_HEIGHT = 204;\n\nconst CollapsibleBubbleText: React.FC<{\n\ttext: string;\n\tisExpanded: boolean;\n\tonToggle: () => void;\n}> = ({ text, isExpanded, onToggle }) => {\n\tconst textRef = useRef<HTMLDivElement>(null);\n\tconst [isOverflowing, setIsOverflowing] = useState(false);\n\n\tuseEffect(() => {\n\t\tconst el = textRef.current;\n\t\tif (el) {\n\t\t\t// Temporarily remove max-height to measure true scroll height\n\t\t\tel.style.maxHeight = 'none';\n\t\t\tconst overflows = el.scrollHeight > COLLAPSED_MAX_HEIGHT;\n\t\t\tel.style.maxHeight = isExpanded ? 'none' : `${COLLAPSED_MAX_HEIGHT}px`;\n\t\t\tsetIsOverflowing(overflows);\n\t\t}\n\t}, [text, isExpanded]);\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\tref={textRef}\n\t\t\t\tstyle={{\n\t\t\t\t\tmaxHeight: isExpanded ? 'none' : COLLAPSED_MAX_HEIGHT,\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<BodySecondary>{text}</BodySecondary>\n\t\t\t</div>\n\t\t\t{isOverflowing && (\n\t\t\t\t<Button\n\t\t\t\t\tbuttonType=\"text\"\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\tbuttonText={isExpanded ? 'Show less' : 'Read more'}\n\t\t\t\t\tonClick={onToggle}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t);\n};\n\nconst GiftedChatInner = (\n\tprops: Omit<GiftedChatProps<IMessage>, 'ref'>,\n\tforwardedRef: React.Ref<HTMLDivElement>,\n) => {\n\tconst {\n\t\tmessages = [],\n\t\tuser,\n\t\trenderBubble,\n\t\trenderAvatar,\n\t\trenderDay,\n\t\trenderLoading,\n\t\trenderChatEmpty,\n\t\tlistViewProps = {},\n\t\trenderAvatarOnTop = false,\n\t\tshowUserAvatar = false,\n\t\tshowAvatarForEveryMessage = false,\n\t\tinverted = false,\n\t\tmessageIdGenerator,\n\t\ttopThreshold = TOP_THRESHOLD,\n\t\tappType = GiftedChatAppType.Bik,\n\t\tmaxHeight,\n\t\tisActivityMessage,\n\t\t...extraProps\n\t} = props || {};\n\n\tconst isMobile = useWindowSize();\n\n\tconst internalScrollRef = useRef<HTMLDivElement | null>(null);\n\tconst scrollRef = normalizeRef(\n\t\tlistViewProps.ref || forwardedRef,\n\t\tinternalScrollRef,\n\t);\n\n\tconst scrollState = useRef({\n\t\tisInitialMount: true,\n\t\tisUserScrolling: false,\n\t\tisLoadingOldMessages: false,\n\t\tisAtBottom: true,\n\t\thasTriggeredEndReached: false,\n\t\tlastMessagesLength: messages?.length ?? 0,\n\t\tpreviousScrollHeight: 0,\n\t\tpreviousScrollTop: 0,\n\t\tscrollTimeout: null,\n\t});\n\n\tconst [expandedMessages, setExpandedMessages] = useState<\n\t\tSet<string | number>\n\t>(new Set());\n\n\t// Reverse messages so newest appears last in DOM (natural reading order)\n\tconst reversedMessages = useMemo(() => {\n\t\tif (!messages || messages.length === 0) return [] as IMessage[];\n\t\treturn [...messages].reverse() as IMessage[];\n\t}, [messages]);\n\n\t// Group consecutive same-day messages so each day separator can stick\n\t// within its own section and get pushed out by the next day's separator.\n\tconst dayGroups = useMemo(() => {\n\t\tconst groups: { createdAt: IMessage['createdAt']; indices: number[] }[] =\n\t\t\t[];\n\t\treversedMessages.forEach((message, index) => {\n\t\t\tconst previousMessage = reversedMessages[index - 1];\n\t\t\tif (index === 0 || !isSameDay(message, previousMessage)) {\n\t\t\t\tgroups.push({ createdAt: message.createdAt, indices: [index] });\n\t\t\t} else {\n\t\t\t\tgroups[groups.length - 1].indices.push(index);\n\t\t\t}\n\t\t});\n\t\treturn groups;\n\t}, [reversedMessages]);\n\n\tconst scrollToBottom = useScrollToBottom(scrollRef, scrollState);\n\n\tuseImperativeHandle(forwardedRef, () => scrollRef.current!);\n\n\tuseInitialMountScroll(\n\t\tscrollRef,\n\t\tscrollState,\n\t\treversedMessages.length,\n\t\tscrollToBottom,\n\t);\n\n\tuseScrollCleanup(scrollState);\n\n\tuseRestoreScrollPosition(scrollRef, scrollState, reversedMessages.length);\n\n\tuseAutoScrollOnNewMessages(\n\t\tscrollRef,\n\t\tscrollState,\n\t\tmessages.length,\n\t\tscrollToBottom,\n\t);\n\n\tuseResizeObserverForFirstMessage(\n\t\tmessages?.[0],\n\t\tscrollState,\n\t\tscrollToBottom,\n\t\tmessageIdGenerator,\n\t);\n\n\tconst handleScroll = useScrollHandler(\n\t\tscrollState,\n\t\tlistViewProps.onEndReached,\n\t\tlistViewProps.onScroll,\n\t\ttopThreshold,\n\t);\n\n\t// Check if a message belongs to the current user\n\tconst isUserMessage = useCallback(\n\t\t(message: IMessage) => {\n\t\t\treturn Boolean(message && user && message.user?._id === user._id);\n\t\t},\n\t\t[user],\n\t);\n\n\t// Determine if avatar should be shown for this message\n\tconst shouldShowAvatar = useCallback(\n\t\t(message: IMessage, previousMessage?: IMessage) => {\n\t\t\tif (!showUserAvatar) return false;\n\t\t\tif (showAvatarForEveryMessage) return true;\n\n\t\t\t// Show avatar on the first message in a consecutive sender stack,\n\t\t\t// or when an activity interrupts the stack, or when the current message itself is an activity\n\t\t\treturn (\n\t\t\t\t!previousMessage ||\n\t\t\t\t(isActivityMessage ? isActivityMessage(message) : false) ||\n\t\t\t\t(isActivityMessage ? isActivityMessage(previousMessage) : false) ||\n\t\t\t\tpreviousMessage.user._id !== message.user._id\n\t\t\t);\n\t\t},\n\t\t[showUserAvatar, showAvatarForEveryMessage, isActivityMessage],\n\t);\n\n\t// Render a message bubble (or call custom renderBubble)\n\tconst renderMessageBubble = useCallback(\n\t\t(message: IMessage, previousMessage?: IMessage, nextMessage?: IMessage) => {\n\t\t\tconst position = isUserMessage(message) ? 'right' : 'left';\n\t\t\tconst isTopOfStack = previousMessage?.user?._id !== message?.user?._id;\n\t\t\tconst isBottomOfStack = nextMessage?.user?._id !== message?.user?._id;\n\n\t\t\tconst bubbleProps: BubbleProps<IMessage> = {\n\t\t\t\tcurrentMessage: message,\n\t\t\t\tpreviousMessage,\n\t\t\t\tnextMessage,\n\t\t\t\tposition,\n\t\t\t\tuser,\n\t\t\t\t...extraProps,\n\t\t\t};\n\n\t\t\t// Use custom render function if provided\n\t\t\tif (renderBubble) {\n\t\t\t\treturn renderBubble(bubbleProps);\n\t\t\t}\n\n\t\t\t// Default bubble rendering\n\t\t\tconst messageId = message._id;\n\t\t\tconst isExpanded = expandedMessages.has(messageId);\n\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmaxWidth: appType === GiftedChatAppType.Manifest ? '50%' : '70%',\n\t\t\t\t\t\twidth: 'fit-content',\n\t\t\t\t\t\t...(appType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t? { minWidth: '130px' }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\tpadding: '8px 12px',\n\t\t\t\t\t\tborderTopLeftRadius:\n\t\t\t\t\t\t\tposition === 'left' ? (isTopOfStack ? 12 : 2) : 12,\n\t\t\t\t\t\tborderTopRightRadius:\n\t\t\t\t\t\t\tposition === 'right' ? (isTopOfStack ? 12 : 2) : 12,\n\t\t\t\t\t\tborderBottomLeftRadius:\n\t\t\t\t\t\t\tposition === 'left' ? (isBottomOfStack ? 12 : 2) : 12,\n\t\t\t\t\t\tborderBottomRightRadius:\n\t\t\t\t\t\t\tposition === 'right' ? (isBottomOfStack ? 12 : 2) : 12,\n\t\t\t\t\t\tborder:\n\t\t\t\t\t\t\tposition === 'left' && appType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t? '1px solid rgb(224, 224, 224)'\n\t\t\t\t\t\t\t\t: 'none',\n\t\t\t\t\t\tbackgroundColor:\n\t\t\t\t\t\t\tposition === 'right'\n\t\t\t\t\t\t\t\t? appType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t\t? COLORS.background.brandTint\n\t\t\t\t\t\t\t\t\t: COLORS.background.brandLight\n\t\t\t\t\t\t\t\t: appType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t? COLORS.background.pureWhite\n\t\t\t\t\t\t\t\t: COLORS.background.inactive,\n\t\t\t\t\t\tcolor: COLORS.content.primary,\n\t\t\t\t\t\twordBreak: 'break-word',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<CollapsibleBubbleText\n\t\t\t\t\t\ttext={message.text ?? ''}\n\t\t\t\t\t\tisExpanded={isExpanded}\n\t\t\t\t\t\tonToggle={() =>\n\t\t\t\t\t\t\tsetExpandedMessages((prev) => {\n\t\t\t\t\t\t\t\tconst next = new Set(prev);\n\t\t\t\t\t\t\t\tif (isExpanded) next.delete(messageId);\n\t\t\t\t\t\t\t\telse next.add(messageId);\n\t\t\t\t\t\t\t\treturn next;\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t},\n\t\t[isUserMessage, user, renderBubble, extraProps, expandedMessages],\n\t);\n\n\t// Render a message avatar (or call custom renderAvatar)\n\tconst renderMessageAvatar = useCallback(\n\t\t(message: IMessage, previousMessage?: IMessage, nextMessage?: IMessage) => {\n\t\t\tconst shouldShow = shouldShowAvatar(message, previousMessage);\n\n\t\t\tif (!shouldShow) return null;\n\n\t\t\tconst position = isUserMessage(message) ? 'right' : 'left';\n\n\t\t\tconst avatarProps: AvatarProps<IMessage> = {\n\t\t\t\tcurrentMessage: message,\n\t\t\t\tpreviousMessage,\n\t\t\t\tnextMessage,\n\t\t\t\tposition,\n\t\t\t\tuser,\n\t\t\t\trenderAvatarOnTop,\n\t\t\t\tshowUserAvatar,\n\t\t\t\tshowAvatarForEveryMessage,\n\t\t\t};\n\n\t\t\treturn renderAvatar ? renderAvatar(avatarProps) : null;\n\t\t},\n\t\t[\n\t\t\tshouldShowAvatar,\n\t\t\tisUserMessage,\n\t\t\tuser,\n\t\t\trenderAvatarOnTop,\n\t\t\tshowUserAvatar,\n\t\t\tshowAvatarForEveryMessage,\n\t\t\trenderAvatar,\n\t\t],\n\t);\n\n\t// Render: Empty State\n\tif (!messages || messages.length === 0) {\n\t\treturn renderChatEmpty ? <>{renderChatEmpty()}</> : null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tref={scrollRef as React.RefObject<HTMLDivElement>}\n\t\t\tstyle={{\n\t\t\t\tflex: 1,\n\t\t\t\toverflowY: 'auto',\n\t\t\t\toverflowX: 'hidden',\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tflexDirection: 'column',\n\t\t\t\t...(maxHeight ? { maxHeight, height: maxHeight } : {}),\n\t\t\t\t...listViewProps.style,\n\t\t\t}}\n\t\t\tonScroll={handleScroll}\n\t\t>\n\t\t\t{/* Spacer to push messages to bottom (newest appears last in DOM) */}\n\t\t\t<div style={{ flex: '1 0 auto' }} />\n\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\tflex: '0 0 auto',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{dayGroups.map((group, groupIndex) => (\n\t\t\t\t\t<div key={`day-group-${groupIndex}`}>\n\t\t\t\t\t\t{/* Day separator — sticks to top while this day scrolls past */}\n\t\t\t\t\t\t{renderDay ? (\n\t\t\t\t\t\t\t<div style={{ position: 'sticky', top: 0, zIndex: 2 }}>\n\t\t\t\t\t\t\t\t{renderDay({ createdAt: group.createdAt })}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Day\n\t\t\t\t\t\t\t\tcreatedAt={group.createdAt}\n\t\t\t\t\t\t\t\tappType={appType}\n\t\t\t\t\t\t\t\tscrollRootRef={scrollRef}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{group.indices.map((index) => {\n\t\t\t\t\t\t\tconst message = reversedMessages[index];\n\t\t\t\t\t\t\tconst isSmtp =\n\t\t\t\t\t\t\t\tmessage?.['channelId'] === MESSAGE_CHANNELS.SMTP ||\n\t\t\t\t\t\t\t\tmessage?.['channelName'] === MESSAGE_CHANNELS.SMTP;\n\t\t\t\t\t\t\tconst position = isSmtp\n\t\t\t\t\t\t\t\t? 'left'\n\t\t\t\t\t\t\t\t: isUserMessage(message)\n\t\t\t\t\t\t\t\t? 'right'\n\t\t\t\t\t\t\t\t: 'left';\n\t\t\t\t\t\t\tconst previousMessage = reversedMessages[index - 1];\n\t\t\t\t\t\t\tconst nextMessage = reversedMessages[index + 1];\n\t\t\t\t\t\t\tconst placement = getMessagePlacement(message, position);\n\t\t\t\t\t\t\tconst isCentered = shouldCenterAlign(message);\n\t\t\t\t\t\t\t// Check if message is a private note\n\t\t\t\t\t\t\tconst isPrivateNote =\n\t\t\t\t\t\t\t\tmessage['category'] ===\n\t\t\t\t\t\t\t\t\tConstants.ChatActivity.Category.ACTIVITY &&\n\t\t\t\t\t\t\t\tmessage['activityType'] ===\n\t\t\t\t\t\t\t\t\tConstants.ChatActivity.Type.PRIVATE_NOTE;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<React.Fragment\n\t\t\t\t\t\t\t\t\tkey={\n\t\t\t\t\t\t\t\t\t\tmessage._id ?? `${index}-${messageIdGenerator?.() ?? 'id'}`\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{/* Message container */}\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t...(isMobile ? { margin: '0 4px' } : {}),\n\t\t\t\t\t\t\t\t\t\t\t...(isCentered\n\t\t\t\t\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t\t\t\t\t: { display: 'flex', alignItems: 'flex-start' }),\n\t\t\t\t\t\t\t\t\t\t\t...(appType !== GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t\t\t\t\t? !isMobile && position === 'right'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { marginLeft: 8 }\n\t\t\t\t\t\t\t\t\t\t\t\t\t: { marginRight: 8 }\n\t\t\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t\t\t...(isSmtp && !isPrivateNote && isMobile\n\t\t\t\t\t\t\t\t\t\t\t\t? { marginLeft: 8, marginRight: 8 }\n\t\t\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: placement,\n\t\t\t\t\t\t\t\t\t\t\tmarginBottom: nextMessage\n\t\t\t\t\t\t\t\t\t\t\t\t? nextMessage?.user?._id === message?.user?._id\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 4\n\t\t\t\t\t\t\t\t\t\t\t\t\t: 20\n\t\t\t\t\t\t\t\t\t\t\t\t: 0,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{/* Left avatar or placeholder (for mobile, avatar is hidden) */}\n\t\t\t\t\t\t\t\t\t\t{!isMobile && position === 'left' && (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tmarginRight: '4px',\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: '24px',\n\t\t\t\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{renderMessageAvatar(\n\t\t\t\t\t\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpreviousMessage,\n\t\t\t\t\t\t\t\t\t\t\t\t\tnextMessage,\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t{/* Message bubble */}\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tid={`message-bubble-${\n\t\t\t\t\t\t\t\t\t\t\t\tmessage._id ??\n\t\t\t\t\t\t\t\t\t\t\t\t`${index}-${messageIdGenerator?.() ?? 'id'}`\n\t\t\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\t\t\t\tappType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { width: '100%' }\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isMobile || isSmtp\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { display: 'flex', flexGrow: 1, width: '100%' }\n\t\t\t\t\t\t\t\t\t\t\t\t\t: {}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{renderMessageBubble(\n\t\t\t\t\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\t\t\t\t\tpreviousMessage,\n\t\t\t\t\t\t\t\t\t\t\t\tnextMessage,\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t\t{/* Right avatar or placeholder (for mobile, avatar is hidden) */}\n\t\t\t\t\t\t\t\t\t\t{!isMobile && position === 'right' && (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tmarginLeft: '4px',\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: '24px',\n\t\t\t\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\talignSelf: 'flex-start',\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{renderMessageAvatar(\n\t\t\t\t\t\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpreviousMessage,\n\t\t\t\t\t\t\t\t\t\t\t\t\tnextMessage,\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</React.Fragment>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default forwardRef<HTMLDivElement, GiftedChatProps<IMessage>>(\n\tGiftedChatInner,\n);\n"],"names":["CollapsibleBubbleText","_ref","text","isExpanded","onToggle","textRef","useRef","isOverflowing","setIsOverflowing","useState","useEffect","el","current","style","maxHeight","overflows","scrollHeight","_jsxs","_jsx","jsx","Object","assign","ref","overflow","children","BodySecondary","Button","buttonType","size","buttonText","onClick","GiftedChatInner","props","forwardedRef","_b","messages","user","renderBubble","renderAvatar","renderDay","renderLoading","renderChatEmpty","listViewProps","renderAvatarOnTop","showUserAvatar","showAvatarForEveryMessage","inverted","messageIdGenerator","topThreshold","TOP_THRESHOLD","appType","GiftedChatAppType","Bik","isActivityMessage","extraProps","__rest","isMobile","useWindowSize","internalScrollRef","scrollRef","normalizeRef","scrollState","isInitialMount","isUserScrolling","isLoadingOldMessages","isAtBottom","hasTriggeredEndReached","lastMessagesLength","_a","length","previousScrollHeight","previousScrollTop","scrollTimeout","expandedMessages","setExpandedMessages","Set","reversedMessages","useMemo","reverse","dayGroups","groups","forEach","message","index","previousMessage","isSameDay","indices","push","createdAt","scrollToBottom","useScrollToBottom","useImperativeHandle","useInitialMountScroll","useScrollCleanup","useRestoreScrollPosition","useAutoScrollOnNewMessages","useResizeObserverForFirstMessage","handleScroll","useScrollHandler","onEndReached","onScroll","isUserMessage","useCallback","Boolean","_id","shouldShowAvatar","renderMessageBubble","nextMessage","position","isTopOfStack","isBottomOfStack","_c","_d","bubbleProps","currentMessage","messageId","has","maxWidth","Manifest","width","minWidth","padding","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","border","backgroundColor","COLORS","background","brandTint","brandLight","pureWhite","inactive","color","content","primary","wordBreak","_e","prev","next","delete","add","renderMessageAvatar","flex","overflowY","overflowX","display","flexDirection","height","map","group","groupIndex","jsxs","top","zIndex","Day","scrollRootRef","isSmtp","MESSAGE_CHANNELS","SMTP","placement","getMessagePlacement","isCentered","shouldCenterAlign","isPrivateNote","Constants","ChatActivity","Category","ACTIVITY","Type","PRIVATE_NOTE","React","Fragment","margin","alignItems","marginRight","marginLeft","justifyContent","marginBottom","flexShrink","id","flexGrow","alignSelf","_f","_Fragment","GiftedChat","forwardRef"],"mappings":"2jBA8BA,MAEMA,EAIDC,IAAmC,IAAlCC,KAAEA,EAAIC,WAAEA,EAAUC,SAAEA,GAAUH,EACnC,MAAMI,EAAUC,SAAuB,OAChCC,EAAeC,GAAoBC,EAAQA,UAAC,GAanD,OAXAC,EAAAA,WAAU,KACT,MAAMC,EAAKN,EAAQO,QACnB,GAAID,EAAI,CAEPA,EAAGE,MAAMC,UAAY,OACrB,MAAMC,EAAYJ,EAAGK,aAfK,IAgB1BL,EAAGE,MAAMC,UAAYX,EAAa,OAAY,QAC9CK,EAAiBO,EACjB,IACC,CAACb,EAAMC,IAGTc,EAAAA,2BACCC,EACCC,IAAA,MAAAC,OAAAC,OAAA,CAAAC,IAAKjB,EACLQ,MAAO,CACNC,UAAWX,EAAa,OA1BA,IA2BxBoB,SAAU,WACV,CAAAC,SAEDN,MAACO,gBAAa,CAAAD,SAAEtB,OAEhBK,GACAW,EAAAC,IAACO,SACA,CAAAC,WAAW,OACXC,KAAK,KACLC,WAAY1B,EAAa,YAAc,YACvC2B,QAAS1B,MAGT,EAIC2B,EAAkBA,CACvBC,EACAC,WAEA,MAAMC,EAmBFF,GAAS,CAAE,GAnBTG,SACLA,EAAW,GAAEC,KACbA,EAAIC,aACJA,EAAYC,aACZA,EAAYC,UACZA,EAASC,cACTA,EAAaC,gBACbA,EAAeC,cACfA,EAAgB,CAAE,EAAAC,kBAClBA,GAAoB,EAAKC,eACzBA,GAAiB,EAAKC,0BACtBA,GAA4B,EAAKC,SACjCA,GAAW,EAAKC,mBAChBA,EAAkBC,aAClBA,EAAeC,EAAaA,cAAAC,QAC5BA,EAAUC,EAAiBA,kBAACC,IAAGtC,UAC/BA,EAASuC,kBACTA,GAAiBnB,EACdoB,EAlBEC,EAAAA,OAAArB,EAAA,CAAA,WAAA,OAAA,eAAA,eAAA,YAAA,gBAAA,kBAAA,gBAAA,oBAAA,iBAAA,4BAAA,WAAA,qBAAA,eAAA,UAAA,YAAA,sBAqBAsB,EAAWC,EAAAA,gBAEXC,EAAoBpD,SAA8B,MAClDqD,EAAYC,EAAAA,aACjBlB,EAAcpB,KAAOW,EACrByB,GAGKG,EAAcvD,EAAAA,OAAO,CAC1BwD,gBAAgB,EAChBC,iBAAiB,EACjBC,sBAAsB,EACtBC,YAAY,EACZC,wBAAwB,EACxBC,mBAAoC,QAAhBC,EAAAjC,eAAAA,EAAUkC,cAAM,IAAAD,EAAAA,EAAI,EACxCE,qBAAsB,EACtBC,kBAAmB,EACnBC,cAAe,QAGTC,EAAkBC,GAAuBjE,EAAAA,SAE9C,IAAIkE,KAGAC,EAAmBC,EAAAA,SAAQ,IAC3B1C,GAAgC,IAApBA,EAASkC,OACnB,IAAIlC,GAAU2C,UAD0B,IAE7C,CAAC3C,IAIE4C,EAAYF,EAAAA,SAAQ,KACzB,MAAMG,EACL,GASD,OARAJ,EAAiBK,SAAQ,CAACC,EAASC,KAClC,MAAMC,EAAkBR,EAAiBO,EAAQ,GACnC,IAAVA,GAAgBE,EAASA,UAACH,EAASE,GAGtCJ,EAAOA,EAAOX,OAAS,GAAGiB,QAAQC,KAAKJ,GAFvCH,EAAOO,KAAK,CAAEC,UAAWN,EAAQM,UAAWF,QAAS,CAACH,IAGtD,IAEKH,CAAM,GACX,CAACJ,IAEEa,EAAiBC,EAAAA,kBAAkB/B,EAAWE,GAEpD8B,EAAAA,oBAAoB1D,GAAc,IAAM0B,EAAU/C,UAElDgF,EAAqBA,sBACpBjC,EACAE,EACAe,EAAiBP,OACjBoB,GAGDI,EAAgBA,iBAAChC,GAEjBiC,EAAAA,yBAAyBnC,EAAWE,EAAae,EAAiBP,QAElE0B,EAA0BA,2BACzBpC,EACAE,EACA1B,EAASkC,OACToB,GAGDO,EAAAA,iCACC7D,aAAQ,EAARA,EAAW,GACX0B,EACA4B,EACA1C,GAGD,MAAMkD,EAAeC,EAAgBA,iBACpCrC,EACAnB,EAAcyD,aACdzD,EAAc0D,SACdpD,GAIKqD,EAAgBC,EAAWA,aAC/BpB,UACA,OAAOqB,QAAQrB,GAAW9C,YAAQgC,EAAAc,EAAQ9C,2BAAMoE,OAAQpE,EAAKoE,IAAI,GAElE,CAACpE,IAIIqE,EAAmBH,EAAAA,aACxB,CAACpB,EAAmBE,MACdxC,MACDC,KAKFuC,KACA/B,GAAoBA,EAAkB6B,MACtC7B,GAAoBA,EAAkB+B,IACvCA,EAAgBhD,KAAKoE,MAAQtB,EAAQ9C,KAAKoE,OAG5C,CAAC5D,EAAgBC,EAA2BQ,IAIvCqD,EAAsBJ,EAAWA,aACtC,CAACpB,EAAmBE,EAA4BuB,mBAC/C,MAAMC,EAAWP,EAAcnB,GAAW,QAAU,OAC9C2B,GAAoC,QAArBzC,EAAAgB,aAAe,EAAfA,EAAiBhD,YAAI,IAAAgC,OAAA,EAAAA,EAAEoC,QAAqB,QAAbtE,EAAAgD,aAAO,EAAPA,EAAS9C,YAAI,IAAAF,OAAA,EAAAA,EAAEsE,KAC7DM,GAAmC,QAAjBC,EAAAJ,aAAW,EAAXA,EAAavE,YAAI,IAAA2E,OAAA,EAAAA,EAAEP,QAAqB,QAAbQ,EAAA9B,aAAO,EAAPA,EAAS9C,YAAI,IAAA4E,OAAA,EAAAA,EAAER,KAE5DS,EACL7F,OAAAC,OAAA,CAAA6F,eAAgBhC,EAChBE,kBACAuB,cACAC,WACAxE,QACGkB,GAIJ,GAAIjB,EACH,OAAOA,EAAa4E,GAIrB,MAAME,EAAYjC,EAAQsB,IACpBrG,EAAasE,EAAiB2C,IAAID,GAExC,OACCjG,MAAA,MAAAE,OAAAC,OAAA,CACCR,MAAKO,OAAAC,OAAAD,OAAAC,OAAA,CACJgG,SAAUnE,IAAYC,EAAAA,kBAAkBmE,SAAW,MAAQ,MAC3DC,MAAO,eACHrE,IAAYC,EAAiBA,kBAACmE,SAC/B,CAAEE,SAAU,SACZ,CAAG,GACN,CAAAC,QAAS,WACTC,oBACc,SAAbd,EAAuBC,EAAe,GAAK,EAAK,GACjDc,qBACc,UAAbf,EAAwBC,EAAe,GAAK,EAAK,GAClDe,uBACc,SAAbhB,EAAuBE,EAAkB,GAAK,EAAK,GACpDe,wBACc,UAAbjB,EAAwBE,EAAkB,GAAK,EAAK,GACrDgB,OACc,SAAblB,GAAuB1D,IAAYC,EAAAA,kBAAkBmE,SAClD,+BACA,OACJS,gBACc,UAAbnB,EACG1D,IAAYC,EAAAA,kBAAkBmE,SAC7BU,EAAMA,OAACC,WAAWC,UAClBF,EAAMA,OAACC,WAAWE,WACnBjF,IAAYC,EAAiBA,kBAACmE,SAC9BU,EAAAA,OAAOC,WAAWG,UAClBJ,SAAOC,WAAWI,SACtBC,MAAON,EAAAA,OAAOO,QAAQC,QACtBC,UAAW,gBAAY,CAAAjH,SAGxBN,MAAClB,EAAqB,CACrBE,aAAMwI,EAAAxD,EAAQhF,oBAAQ,GACtBC,WAAYA,EACZC,SAAUA,IACTsE,GAAqBiE,IACpB,MAAMC,EAAO,IAAIjE,IAAIgE,GAGrB,OAFIxI,EAAYyI,EAAKC,OAAO1B,GACvByB,EAAKE,IAAI3B,GACPyB,CAAI,QAIT,GAGR,CAACvC,EAAejE,EAAMC,EAAciB,EAAYmB,IAI3CsE,EAAsBzC,EAAWA,aACtC,CAACpB,EAAmBE,EAA4BuB,KAG/C,IAFmBF,EAAiBvB,EAASE,GAE5B,OAAO,KAExB,MAAMwB,EAAWP,EAAcnB,GAAW,QAAU,OAapD,OAAO5C,EAAeA,EAXqB,CAC1C4E,eAAgBhC,EAChBE,kBACAuB,cACAC,WACAxE,OACAO,oBACAC,iBACAC,8BAGiD,IAAI,GAEvD,CACC4D,EACAJ,EACAjE,EACAO,EACAC,EACAC,EACAP,IAKF,OAAKH,GAAgC,IAApBA,EAASkC,OAKzBpD,OAAA,MAAAG,OAAAC,OAAA,CACCC,IAAKqC,EACL9C,MAAKO,OAAAC,OAAAD,OAAAC,OAAA,CACJ2H,KAAM,EACNC,UAAW,OACXC,UAAW,SACXC,QAAS,OACTC,cAAe,UACXtI,EAAY,CAAEA,YAAWuI,OAAQvI,GAAc,CAAG,GACnD4B,EAAc7B,OAElBuF,SAAUH,GAAY,CAAAzE,SAAA,CAGtBN,EAAKC,IAAA,MAAA,CAAAN,MAAO,CAAEmI,KAAM,cAEpB9H,EAAAC,IAAA,MAAAC,OAAAC,OAAA,CACCR,MAAO,CACNsI,QAAS,OACTC,cAAe,SACfJ,KAAM,aACN,CAAAxH,SAEAuD,EAAUuE,KAAI,CAACC,EAAOC,IACtBvI,EAAAwI,KAAA,MAAA,CAAAjI,SAAA,CAEEe,EACArB,EAAAA,IAAK,MAAAE,OAAAC,OAAA,CAAAR,MAAO,CAAE+F,SAAU,SAAU8C,IAAK,EAAGC,OAAQ,IAChD,CAAAnI,SAAAe,EAAU,CAAEiD,UAAW+D,EAAM/D,eAG/BtE,MAAC0I,MAAG,CACHpE,UAAW+D,EAAM/D,UACjBtC,QAASA,EACT2G,cAAelG,IAGhB4F,EAAMjE,QAAQgE,KAAKnE,oBACnB,MAAMD,EAAUN,EAAiBO,GAC3B2E,GACL5E,aAAO,EAAPA,EAAqB,aAAM6E,EAAgBA,iBAACC,OAC5C9E,aAAO,EAAPA,EAAuB,eAAM6E,EAAAA,iBAAiBC,KACzCpD,EAAWkD,EACd,OACAzD,EAAcnB,GACd,QACA,OACGE,EAAkBR,EAAiBO,EAAQ,GAC3CwB,EAAc/B,EAAiBO,EAAQ,GACvC8E,EAAYC,EAAAA,oBAAoBhF,EAAS0B,GACzCuD,EAAaC,oBAAkBlF,GAE/BmF,EACLnF,EAAkB,WACjBoF,EAASA,UAACC,aAAaC,SAASC,UACjCvF,EAAsB,eACrBoF,EAAAA,UAAUC,aAAaG,KAAKC,aAC9B,OACCzJ,EAACC,IAAAyJ,EAAK,QAACC,SAMN,CAAArJ,SAAAP,EAAAwI,KAAA,MAAArI,OAAAC,OAAA,CACCR,MAAKO,OAAAC,OAAAD,OAAAC,OAAAD,OAAAC,OAAAD,OAAAC,OAAAD,OAAAC,OAAA,CAAA,EACAmC,EAAW,CAAEsH,OAAQ,SAAY,CAAG,GACpCX,EACD,GACA,CAAEhB,QAAS,OAAQ4B,WAAY,eAC9B7H,IAAYC,oBAAkBmE,SAC9B9D,GAAyB,UAAboD,EAEZ,CAAEoE,YAAa,GADf,CAAEC,WAAY,GAEf,CAAG,GACFnB,IAAWO,GAAiB7G,EAC7B,CAAEyH,WAAY,EAAGD,YAAa,GAC9B,CAAG,GACN,CAAAE,eAAgBjB,EAChBkB,aAAcxE,GACM,QAAjBvC,EAAAuC,aAAW,EAAXA,EAAavE,YAAI,IAAAgC,OAAA,EAAAA,EAAEoC,QAAuB,QAAftE,EAAAgD,aAAO,EAAPA,EAAS9C,YAAM,IAAAF,OAAA,EAAAA,EAAAsE,KACzC,EACA,GACD,KAIH,CAAAhF,SAAA,EAACgC,GAAyB,SAAboD,GACb1F,MAAA,MAAAE,OAAAC,OAAA,CACCR,MAAO,CACNmK,YAAa,MACbzD,MAAO,OACP6D,WAAY,IACZ,CAAA5J,SAEAuH,EACA7D,EACAE,EACAuB,MAMHzF,2BACCmK,qBACY,QAAXtE,EAAA7B,EAAQsB,WAAG,IAAAO,EAAAA,EACR,GAAA5B,KAA+B,QAAtB6B,EAAAjE,aAAkB,EAAlBA,WAAsB,IAAAiE,EAAAA,EAAI,SAEvCnG,MACCqC,IAAYC,EAAiBA,kBAACmE,SAC3B,CAAEC,MAAO,QACT/D,GAAYsG,EACZ,CAAEX,QAAS,OAAQmC,SAAU,EAAG/D,MAAO,QACvC,IAGH,CAAA/F,SAAAkF,EACAxB,EACAE,EACAuB,OAKAnD,GAAyB,UAAboD,GACb1F,MACC,MAAAE,OAAAC,OAAA,CAAAR,MAAO,CACNoK,WAAY,MACZ1D,MAAO,OACP6D,WAAY,EACZG,UAAW,eACX,CAAA/J,SAEAuH,EACA7D,EACAE,EACAuB,WA7EY,QAAf+B,EAAAxD,EAAQsB,WAAO,IAAAkC,EAAAA,EAAA,GAAGvD,KAAmC,QAA1BqG,EAAAzI,aAAkB,EAAlBA,WAA0B,IAAAyI,EAAAA,EAAA,OAkFtC,MAtHV,aAAahC,cA5BnB/G,EAAkBvB,EAAGC,IAAAsK,WAAA,CAAAjK,SAAAiB,MAAwB,IAwJ9C,EAIR,IAAAiJ,EAAeC,EAAAA,WACd5J"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("styled-components"),t=require("../../constants/Theme.js");function
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("styled-components"),t=require("../../constants/Theme.js"),r=require("../../components/TypographyStyle.js");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=o(e);const a=n.default.div`
|
|
2
2
|
background: ${t.COLORS.surface.standard};
|
|
3
3
|
border-radius: 4px;
|
|
4
4
|
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
overflow-y: auto;
|
|
8
8
|
font-size: 14px;
|
|
9
9
|
color: ${t.COLORS.content.primary};
|
|
10
|
-
`,
|
|
10
|
+
`,i=n.default.div`
|
|
11
11
|
display: flex;
|
|
12
12
|
align-items: center;
|
|
13
13
|
gap: 8px;
|
|
@@ -16,13 +16,13 @@
|
|
|
16
16
|
cursor: pointer;
|
|
17
17
|
color: ${t.COLORS.content.primary};
|
|
18
18
|
background: ${e=>{let{$isActive:r}=e;return r?t.COLORS.surface.hovered:"transparent"}};
|
|
19
|
-
`,
|
|
19
|
+
`,p=n.default.img`
|
|
20
20
|
width: 24px;
|
|
21
21
|
height: 24px;
|
|
22
22
|
border-radius: 50%;
|
|
23
23
|
object-fit: cover;
|
|
24
24
|
flex-shrink: 0;
|
|
25
|
-
`,s=
|
|
25
|
+
`,s=n.default.div`
|
|
26
26
|
width: 24px;
|
|
27
27
|
height: 24px;
|
|
28
28
|
border-radius: 50%;
|
|
@@ -34,22 +34,20 @@
|
|
|
34
34
|
font-weight: 600;
|
|
35
35
|
color: ${t.COLORS.content.primary};
|
|
36
36
|
flex-shrink: 0;
|
|
37
|
-
`,
|
|
37
|
+
`,d=n.default.span`
|
|
38
38
|
font-weight: 500;
|
|
39
39
|
color: ${t.COLORS.content.primary};
|
|
40
|
-
`,
|
|
40
|
+
`,l=n.default.span`
|
|
41
41
|
width: 8px;
|
|
42
42
|
height: 8px;
|
|
43
43
|
border-radius: 50%;
|
|
44
44
|
background: ${e=>{let{$online:r}=e;return r?t.COLORS.content.positive:t.COLORS.content.placeholder}};
|
|
45
45
|
margin-left: auto;
|
|
46
46
|
flex-shrink: 0;
|
|
47
|
-
`,
|
|
48
|
-
font-weight: 500;
|
|
47
|
+
`,c=n.default(r.BodyCaption)`
|
|
49
48
|
color: ${t.COLORS.content.primary};
|
|
50
|
-
`,
|
|
51
|
-
font-size: 12px;
|
|
49
|
+
`,u=n.default(r.BodyCaption)`
|
|
52
50
|
color: ${t.COLORS.content.secondary};
|
|
53
51
|
margin-left: auto;
|
|
54
|
-
`;exports.DropdownContainer=
|
|
52
|
+
`;exports.DropdownContainer=a,exports.DropdownItem=i,exports.MentionAvatar=p,exports.MentionAvatarFallback=s,exports.MentionLabel=d,exports.MentionPresenceDot=l,exports.SlashDescription=u,exports.SlashLabel=c;
|
|
55
53
|
//# sourceMappingURL=editorDropdown.styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editorDropdown.styles.js","sources":["../../../../src/editor/extensions/editorDropdown.styles.ts"],"sourcesContent":["import styled from 'styled-components';\nimport { COLORS } from '@src/constants/Theme';\n\nexport const DropdownContainer = styled.div`\n\tbackground: ${COLORS.surface.standard};\n\tborder-radius: 4px;\n\tbox-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n\tmin-width: 330px;\n\tmax-height: 260px;\n\toverflow-y: auto;\n\tfont-size: 14px;\n\tcolor: ${COLORS.content.primary};\n`;\n\nexport const DropdownItem = styled.div<{ $isActive?: boolean }>`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tpadding: 8px;\n\tmin-height: 43px;\n\tcursor: pointer;\n\tcolor: ${COLORS.content.primary};\n\tbackground: ${({ $isActive }) =>\n\t\t$isActive ? COLORS.surface.hovered : 'transparent'};\n`;\n\nexport const MentionAvatar = styled.img`\n\twidth: 24px;\n\theight: 24px;\n\tborder-radius: 50%;\n\tobject-fit: cover;\n\tflex-shrink: 0;\n`;\n\nexport const MentionAvatarFallback = styled.div`\n\twidth: 24px;\n\theight: 24px;\n\tborder-radius: 50%;\n\tbackground: ${COLORS.surface.hovered};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tfont-size: 12px;\n\tfont-weight: 600;\n\tcolor: ${COLORS.content.primary};\n\tflex-shrink: 0;\n`;\n\nexport const MentionLabel = styled.span`\n\tfont-weight: 500;\n\tcolor: ${COLORS.content.primary};\n`;\n\nexport const MentionPresenceDot = styled.span<{ $online?: boolean }>`\n\twidth: 8px;\n\theight: 8px;\n\tborder-radius: 50%;\n\tbackground: ${({ $online }) =>\n\t\t$online ? COLORS.content.positive : COLORS.content.placeholder};\n\tmargin-left: auto;\n\tflex-shrink: 0;\n`;\n\nexport const SlashLabel = styled
|
|
1
|
+
{"version":3,"file":"editorDropdown.styles.js","sources":["../../../../src/editor/extensions/editorDropdown.styles.ts"],"sourcesContent":["import { BodyCaption } from '@src/index';\nimport styled from 'styled-components';\nimport { COLORS } from '@src/constants/Theme';\n\nexport const DropdownContainer = styled.div`\n\tbackground: ${COLORS.surface.standard};\n\tborder-radius: 4px;\n\tbox-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n\tmin-width: 330px;\n\tmax-height: 260px;\n\toverflow-y: auto;\n\tfont-size: 14px;\n\tcolor: ${COLORS.content.primary};\n`;\n\nexport const DropdownItem = styled.div<{ $isActive?: boolean }>`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tpadding: 8px;\n\tmin-height: 43px;\n\tcursor: pointer;\n\tcolor: ${COLORS.content.primary};\n\tbackground: ${({ $isActive }) =>\n\t\t$isActive ? COLORS.surface.hovered : 'transparent'};\n`;\n\nexport const MentionAvatar = styled.img`\n\twidth: 24px;\n\theight: 24px;\n\tborder-radius: 50%;\n\tobject-fit: cover;\n\tflex-shrink: 0;\n`;\n\nexport const MentionAvatarFallback = styled.div`\n\twidth: 24px;\n\theight: 24px;\n\tborder-radius: 50%;\n\tbackground: ${COLORS.surface.hovered};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tfont-size: 12px;\n\tfont-weight: 600;\n\tcolor: ${COLORS.content.primary};\n\tflex-shrink: 0;\n`;\n\nexport const MentionLabel = styled.span`\n\tfont-weight: 500;\n\tcolor: ${COLORS.content.primary};\n`;\n\nexport const MentionPresenceDot = styled.span<{ $online?: boolean }>`\n\twidth: 8px;\n\theight: 8px;\n\tborder-radius: 50%;\n\tbackground: ${({ $online }) =>\n\t\t$online ? COLORS.content.positive : COLORS.content.placeholder};\n\tmargin-left: auto;\n\tflex-shrink: 0;\n`;\n\nexport const SlashLabel = styled(BodyCaption)`\n\tcolor: ${COLORS.content.primary};\n`;\n\nexport const SlashDescription = styled(BodyCaption)`\n\tcolor: ${COLORS.content.secondary};\n\tmargin-left: auto;\n`;\n"],"names":["DropdownContainer","styled","div","COLORS","surface","standard","content","primary","DropdownItem","_ref","$isActive","hovered","MentionAvatar","img","MentionAvatarFallback","MentionLabel","span","MentionPresenceDot","_ref2","$online","positive","placeholder","SlashLabel","BodyCaption","SlashDescription","secondary"],"mappings":"iRAIaA,MAAAA,EAAoBC,EAAM,QAACC,GAAG;eAC5BC,EAAMA,OAACC,QAAQC;;;;;;;UAOpBF,EAAMA,OAACG,QAAQC;EAGZC,EAAeP,EAAM,QAACC,GAA4B;;;;;;;UAOrDC,EAAMA,OAACG,QAAQC;eACVE,IAAA,IAACC,UAAEA,GAAWD,EAAA,OAC3BC,EAAYP,EAAMA,OAACC,QAAQO,QAAU,aAAa;EAGvCC,EAAgBX,EAAM,QAACY,GAAG;;;;;;EAQ1BC,EAAwBb,EAAM,QAACC,GAAG;;;;eAIhCC,EAAMA,OAACC,QAAQO;;;;;;UAMpBR,EAAMA,OAACG,QAAQC;;EAIZQ,EAAed,EAAM,QAACe,IAAI;;UAE7Bb,EAAMA,OAACG,QAAQC;EAGZU,EAAqBhB,EAAM,QAACe,IAA2B;;;;eAIrDE,IAAA,IAACC,QAAEA,GAASD,EAAA,OACzBC,EAAUhB,EAAAA,OAAOG,QAAQc,SAAWjB,EAAMA,OAACG,QAAQe,WAAW;;;EAKnDC,EAAarB,EAAAA,QAAOsB,EAAAA,YAAY;UACnCpB,EAAMA,OAACG,QAAQC;EAGZiB,EAAmBvB,EAAAA,QAAOsB,EAAAA,YAAY;UACzCpB,EAAMA,OAACG,QAAQmB;;"}
|
|
@@ -12,6 +12,12 @@ export interface DayProps {
|
|
|
12
12
|
sameElse?: string;
|
|
13
13
|
};
|
|
14
14
|
appType?: GiftedChatAppType;
|
|
15
|
+
/**
|
|
16
|
+
* Scroll container the separator sticks within. When provided, the
|
|
17
|
+
* separator pins to the top while its day's messages scroll past, and the
|
|
18
|
+
* divider lines are hidden while pinned (floating-pill look).
|
|
19
|
+
*/
|
|
20
|
+
scrollRootRef?: React.RefObject<HTMLElement | null>;
|
|
15
21
|
}
|
|
16
22
|
export declare const Day: React.NamedExoticComponent<DayProps>;
|
|
17
23
|
export default Day;
|
|
@@ -8,5 +8,11 @@ export declare const MentionLabel: import("styled-components").StyledComponent<"
|
|
|
8
8
|
export declare const MentionPresenceDot: import("styled-components").StyledComponent<"span", any, {
|
|
9
9
|
$online?: boolean | undefined;
|
|
10
10
|
}, never>;
|
|
11
|
-
export declare const SlashLabel: import("styled-components").StyledComponent<"
|
|
12
|
-
|
|
11
|
+
export declare const SlashLabel: import("styled-components").StyledComponent<"div", any, {
|
|
12
|
+
numberOfLines?: number | undefined;
|
|
13
|
+
color?: string | undefined;
|
|
14
|
+
}, never>;
|
|
15
|
+
export declare const SlashDescription: import("styled-components").StyledComponent<"div", any, {
|
|
16
|
+
numberOfLines?: number | undefined;
|
|
17
|
+
color?: string | undefined;
|
|
18
|
+
}, never>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{jsx as e,jsxs as t}from"react/jsx-runtime";import{startOfDay as r,format as
|
|
1
|
+
import{jsx as e,jsxs as t,Fragment as n}from"react/jsx-runtime";import{startOfDay as r,format as o,isSameYear as i,differenceInDays as s}from"date-fns";import a,{useRef as l,useState as d,useMemo as c,useEffect as p}from"react";import{COLORS as y}from"../../../constants/Theme.js";import{BodyCaption as u}from"../../TypographyStyle.js";import{GiftedChatAppType as f}from"../Bubble/types.js";const m=a=>{let{createdAt:m,dateFormat:g="D MMMM YY",dateFormatCalendar:b,appType:h=f.Bik,scrollRootRef:M}=a;const x=l(null),[v,j]=d(!1),k=c((()=>{if(null==m)return null;let e;if("number"==typeof m)e=r(new Date(m));else if(m instanceof Date)e=r(m);else{if("string"!=typeof m)return null;e=r(new Date(m))}if(h===f.Manifest)return o(e,"MMM d, yyyy");const t=r(new Date);if(!i(t,e))return o(e,"EEEE, d MMMM yy");const n=s(t,e);return n<1?(null==b?void 0:b.sameDay)?b.sameDay.replace(/\[|\]/g,""):"Today":1===n?"Yesterday":o(e,"EEEE, d MMMM yy")}),[m,g,b,h]);if(p((()=>{var e;const t=x.current;if(!t||"undefined"==typeof IntersectionObserver)return;const n=null!==(e=null==M?void 0:M.current)&&void 0!==e?e:null,r=new IntersectionObserver((e=>{let[t]=e;const r=n?n.getBoundingClientRect().top:0;j(!t.isIntersecting&&t.boundingClientRect.top<=r)}),{root:n,threshold:[0,1]});return r.observe(t),()=>r.disconnect()}),[M,k]),!k)return null;const E=e("div",{ref:x,"aria-hidden":!0,style:{height:1,marginBottom:-1}});return h===f.Manifest?t(n,{children:[E,e("div",Object.assign({style:{position:"sticky",top:0,zIndex:2,display:"flex",alignItems:"center",justifyContent:"center",marginTop:5,marginBottom:10}},{children:e("span",Object.assign({style:{background:v?y.surface.standard:"transparent",color:"#b2b2b2",fontSize:12,fontWeight:600,padding:"2px 8px",borderRadius:12}},{children:k}))}))]}):t(n,{children:[E,t("div",Object.assign({style:{position:"sticky",top:0,zIndex:2,display:"flex",alignItems:"center",justifyContent:"center"}},{children:[!v&&e("div",{style:{flex:1,height:"1px",backgroundColor:y.stroke.primary}}),e("div",Object.assign({style:{border:`1px solid ${y.stroke.primary}`,borderRadius:"16px",padding:"4px 12px",background:v?y.surface.standard:"transparent"}},{children:e(u,Object.assign({style:{color:y.content.secondary}},{children:k}))})),!v&&e("div",{style:{flex:1,height:"1px",backgroundColor:y.stroke.primary}})]}))]})},g=a.memo(m);export{g as Day,g as default};
|
|
2
2
|
//# sourceMappingURL=Day.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Day.js","sources":["../../../../../src/components/BikGiftedChat/GiftedChat/Day.tsx"],"sourcesContent":["import { differenceInDays, format, isSameYear, startOfDay } from 'date-fns';\nimport React, { useMemo } from 'react';\nimport { COLORS } from '../../../constants/Theme';\nimport { BodyCaption } from '../../TypographyStyle';\nimport { GiftedChatAppType } from '../Bubble/types';\n\n// Props for Day component\nexport interface DayProps {\n\tcreatedAt?: Date | number | string;\n\tdateFormat?: string;\n\tdateFormatCalendar?: {\n\t\tsameDay?: string;\n\t\tnextDay?: string;\n\t\tnextWeek?: string;\n\t\tlastDay?: string;\n\t\tlastWeek?: string;\n\t\tsameElse?: string;\n\t};\n\tappType?: GiftedChatAppType;\n}\n\n// Day component - renders date separator in chat\n// Shows formatted date with smart labeling (Today, Yesterday, etc.)\nconst DayComponent: React.FC<DayProps> = ({\n\tcreatedAt,\n\tdateFormat = 'D MMMM YY',\n\tdateFormatCalendar,\n\tappType = GiftedChatAppType.Bik,\n}) => {\n\t// Format date for display with smart labeling\n\tconst dateStr = useMemo(() => {\n\t\tif (createdAt == null) return null;\n\n\t\tlet date: Date;\n\t\tif (typeof createdAt === 'number') {\n\t\t\tdate = startOfDay(new Date(createdAt));\n\t\t} else if (createdAt instanceof Date) {\n\t\t\tdate = startOfDay(createdAt);\n\t\t} else if (typeof createdAt === 'string') {\n\t\t\tdate = startOfDay(new Date(createdAt));\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\n\t\t// For manifest, always show 'Jan 9, 2026' format\n\t\tif (appType === GiftedChatAppType.Manifest) {\n\t\t\treturn format(date, 'MMM d, yyyy');\n\t\t}\n\n\t\tconst now = startOfDay(new Date());\n\t\t// If not same year, show full date with day of week\n\t\tif (!isSameYear(now, date)) {\n\t\t\treturn format(date, 'EEEE, d MMMM yy');\n\t\t}\n\n\t\tconst daysDiff = differenceInDays(now, date);\n\n\t\t// If today\n\t\tif (daysDiff < 1) {\n\t\t\tif (dateFormatCalendar?.sameDay) {\n\t\t\t\treturn dateFormatCalendar.sameDay.replace(/\\[|\\]/g, '');\n\t\t\t}\n\t\t\treturn 'Today';\n\t\t}\n\n\t\t// If yesterday\n\t\tif (daysDiff === 1) {\n\t\t\treturn 'Yesterday';\n\t\t}\n\n\t\t// Format: \"Friday, 7 November 25\"\n\t\treturn format(date, 'EEEE, d MMMM yy');\n\t}, [createdAt, dateFormat, dateFormatCalendar, appType]);\n\n\tif (!dateStr) return null;\n\n\tif (appType === GiftedChatAppType.Manifest) {\n\t\treturn (\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\tmarginTop: 5,\n\t\t\t\t\tmarginBottom: 10,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackground: 'transparent',\n\t\t\t\t\t\tcolor: '#b2b2b2',\n\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\tpadding: '2px 8px',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{dateStr}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t);\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tstyle={{\n\t\t\t\tdisplay: 'flex',\n\t\t\t\talignItems: 'center',\n\t\t\t\tjustifyContent: 'center',\n\t\t\t}}\n\t\t>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tflex: 1,\n\t\t\t\t\theight: '1px',\n\t\t\t\t\tbackgroundColor: COLORS.stroke.primary,\n\t\t\t\t}}\n\t\t\t/>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tborder: `1px solid ${COLORS.stroke.primary}`,\n\t\t\t\t\tborderRadius: '16px',\n\t\t\t\t\tpadding: '4px 12px',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<BodyCaption style={{ color: COLORS.content.secondary }}>\n\t\t\t\t\t{dateStr}\n\t\t\t\t</BodyCaption>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tflex: 1,\n\t\t\t\t\theight: '1px',\n\t\t\t\t\tbackgroundColor: COLORS.stroke.primary,\n\t\t\t\t}}\n\t\t\t/>\n\t\t</div>\n\t);\n};\n\n// Export memoized version for performance\nexport const Day = React.memo(DayComponent);\n\nexport default Day;\n"],"names":["DayComponent","_ref","createdAt","dateFormat","dateFormatCalendar","appType","GiftedChatAppType","Bik","dateStr","useMemo","date","startOfDay","Date","Manifest","format","now","isSameYear","daysDiff","differenceInDays","sameDay","replace","_jsx","Object","assign","
|
|
1
|
+
{"version":3,"file":"Day.js","sources":["../../../../../src/components/BikGiftedChat/GiftedChat/Day.tsx"],"sourcesContent":["import { differenceInDays, format, isSameYear, startOfDay } from 'date-fns';\nimport React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { COLORS } from '../../../constants/Theme';\nimport { BodyCaption } from '../../TypographyStyle';\nimport { GiftedChatAppType } from '../Bubble/types';\n\n// Props for Day component\nexport interface DayProps {\n\tcreatedAt?: Date | number | string;\n\tdateFormat?: string;\n\tdateFormatCalendar?: {\n\t\tsameDay?: string;\n\t\tnextDay?: string;\n\t\tnextWeek?: string;\n\t\tlastDay?: string;\n\t\tlastWeek?: string;\n\t\tsameElse?: string;\n\t};\n\tappType?: GiftedChatAppType;\n\t/**\n\t * Scroll container the separator sticks within. When provided, the\n\t * separator pins to the top while its day's messages scroll past, and the\n\t * divider lines are hidden while pinned (floating-pill look).\n\t */\n\tscrollRootRef?: React.RefObject<HTMLElement | null>;\n}\n\n// Day component - renders date separator in chat\n// Shows formatted date with smart labeling (Today, Yesterday, etc.)\nconst DayComponent: React.FC<DayProps> = ({\n\tcreatedAt,\n\tdateFormat = 'D MMMM YY',\n\tdateFormatCalendar,\n\tappType = GiftedChatAppType.Bik,\n\tscrollRootRef,\n}) => {\n\t// Tracks whether the separator is currently pinned to the top of the\n\t// scroll container. A zero-layout sentinel rendered just above the sticky\n\t// header scrolls normally; once it leaves the top edge the header is pinned.\n\tconst sentinelRef = useRef<HTMLDivElement>(null);\n\tconst [isStuck, setIsStuck] = useState(false);\n\t// Format date for display with smart labeling\n\tconst dateStr = useMemo(() => {\n\t\tif (createdAt == null) return null;\n\n\t\tlet date: Date;\n\t\tif (typeof createdAt === 'number') {\n\t\t\tdate = startOfDay(new Date(createdAt));\n\t\t} else if (createdAt instanceof Date) {\n\t\t\tdate = startOfDay(createdAt);\n\t\t} else if (typeof createdAt === 'string') {\n\t\t\tdate = startOfDay(new Date(createdAt));\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\n\t\t// For manifest, always show 'Jan 9, 2026' format\n\t\tif (appType === GiftedChatAppType.Manifest) {\n\t\t\treturn format(date, 'MMM d, yyyy');\n\t\t}\n\n\t\tconst now = startOfDay(new Date());\n\t\t// If not same year, show full date with day of week\n\t\tif (!isSameYear(now, date)) {\n\t\t\treturn format(date, 'EEEE, d MMMM yy');\n\t\t}\n\n\t\tconst daysDiff = differenceInDays(now, date);\n\n\t\t// If today\n\t\tif (daysDiff < 1) {\n\t\t\tif (dateFormatCalendar?.sameDay) {\n\t\t\t\treturn dateFormatCalendar.sameDay.replace(/\\[|\\]/g, '');\n\t\t\t}\n\t\t\treturn 'Today';\n\t\t}\n\n\t\t// If yesterday\n\t\tif (daysDiff === 1) {\n\t\t\treturn 'Yesterday';\n\t\t}\n\n\t\t// Format: \"Friday, 7 November 25\"\n\t\treturn format(date, 'EEEE, d MMMM yy');\n\t}, [createdAt, dateFormat, dateFormatCalendar, appType]);\n\n\t// Detect the pinned state. The sentinel scrolls with the content; once it\n\t// crosses above the scroll container's top edge the header is pinned.\n\tuseEffect(() => {\n\t\tconst sentinel = sentinelRef.current;\n\t\tif (!sentinel || typeof IntersectionObserver === 'undefined') return;\n\t\tconst root = scrollRootRef?.current ?? null;\n\t\tconst observer = new IntersectionObserver(\n\t\t\t([entry]) => {\n\t\t\t\tconst rootTop = root ? root.getBoundingClientRect().top : 0;\n\t\t\t\t// Pinned only when the sentinel has left via the TOP edge — not\n\t\t\t\t// when it's simply offscreen below (yet to be scrolled into view).\n\t\t\t\tsetIsStuck(\n\t\t\t\t\t!entry.isIntersecting && entry.boundingClientRect.top <= rootTop,\n\t\t\t\t);\n\t\t\t},\n\t\t\t{ root, threshold: [0, 1] },\n\t\t);\n\t\tobserver.observe(sentinel);\n\t\treturn () => observer.disconnect();\n\t}, [scrollRootRef, dateStr]);\n\n\tif (!dateStr) return null;\n\n\t// Zero-layout sentinel sitting just above the sticky header.\n\tconst sentinel = (\n\t\t<div\n\t\t\tref={sentinelRef}\n\t\t\taria-hidden\n\t\t\tstyle={{ height: 1, marginBottom: -1 }}\n\t\t/>\n\t);\n\n\tif (appType === GiftedChatAppType.Manifest) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{sentinel}\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tposition: 'sticky',\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tzIndex: 2,\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t\t\tmarginTop: 5,\n\t\t\t\t\t\tmarginBottom: 10,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<span\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tbackground: isStuck ? COLORS.surface.standard : 'transparent',\n\t\t\t\t\t\t\tcolor: '#b2b2b2',\n\t\t\t\t\t\t\tfontSize: 12,\n\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\tpadding: '2px 8px',\n\t\t\t\t\t\t\tborderRadius: 12,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{dateStr}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t</>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t{sentinel}\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tposition: 'sticky',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tzIndex: 2,\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tjustifyContent: 'center',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{!isStuck && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\theight: '1px',\n\t\t\t\t\t\t\tbackgroundColor: COLORS.stroke.primary,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tborder: `1px solid ${COLORS.stroke.primary}`,\n\t\t\t\t\t\tborderRadius: '16px',\n\t\t\t\t\t\tpadding: '4px 12px',\n\t\t\t\t\t\tbackground: isStuck ? COLORS.surface.standard : 'transparent',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<BodyCaption style={{ color: COLORS.content.secondary }}>\n\t\t\t\t\t\t{dateStr}\n\t\t\t\t\t</BodyCaption>\n\t\t\t\t</div>\n\t\t\t\t{!isStuck && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\theight: '1px',\n\t\t\t\t\t\t\tbackgroundColor: COLORS.stroke.primary,\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</>\n\t);\n};\n\n// Export memoized version for performance\nexport const Day = React.memo(DayComponent);\n\nexport default Day;\n"],"names":["DayComponent","_ref","createdAt","dateFormat","dateFormatCalendar","appType","GiftedChatAppType","Bik","scrollRootRef","sentinelRef","useRef","isStuck","setIsStuck","useState","dateStr","useMemo","date","startOfDay","Date","Manifest","format","now","isSameYear","daysDiff","differenceInDays","sameDay","replace","useEffect","sentinel","current","IntersectionObserver","root","_a","observer","_ref2","entry","rootTop","getBoundingClientRect","top","isIntersecting","boundingClientRect","threshold","observe","disconnect","_jsx","ref","style","height","marginBottom","_jsxs","_Fragment","children","Object","assign","position","zIndex","display","alignItems","justifyContent","marginTop","background","COLORS","surface","standard","color","fontSize","fontWeight","padding","borderRadius","flex","backgroundColor","stroke","primary","border","BodyCaption","content","secondary","Day","React","memo"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__rest as e}from"../../../_virtual/_tslib.js";import{jsx as t,Fragment as
|
|
1
|
+
import{__rest as e}from"../../../_virtual/_tslib.js";import{jsx as t,Fragment as i,jsxs as r}from"react/jsx-runtime";import s,{forwardRef as n,useRef as o,useState as l,useMemo as a,useImperativeHandle as d,useCallback as g,useEffect as c}from"react";import{COLORS as u}from"../../../constants/Theme.js";import{useWindowSize as h}from"../../../hooks/useWindowSize.js";import{Button as v}from"../../button/Button.js";import{BodySecondary as p}from"../../TypographyStyle.js";import{GiftedChatAppType as m}from"../Bubble/types.js";import{Day as f}from"./Day.js";import{getMessagePlacement as y,shouldCenterAlign as b}from"./messageHelpers.js";import{useScrollToBottom as x,useInitialMountScroll as j,useScrollCleanup as T,useRestoreScrollPosition as A,useAutoScrollOnNewMessages as O,useResizeObserverForFirstMessage as w,useScrollHandler as M}from"./scrollHooks.js";import{MESSAGE_CHANNELS as _}from"./types.js";import{TOP_THRESHOLD as R,normalizeRef as S,isSameDay as k,Constants as E}from"./utils.js";const B=e=>{let{text:s,isExpanded:n,onToggle:a}=e;const d=o(null),[g,u]=l(!1);return c((()=>{const e=d.current;if(e){e.style.maxHeight="none";const t=e.scrollHeight>204;e.style.maxHeight=n?"none":"204px",u(t)}}),[s,n]),r(i,{children:[t("div",Object.assign({ref:d,style:{maxHeight:n?"none":204,overflow:"hidden"}},{children:t(p,{children:s})})),g&&t(v,{buttonType:"text",size:"xs",buttonText:n?"Show less":"Read more",onClick:a})]})};var H=n(((n,c)=>{var v;const p=n||{},{messages:H=[],user:L,renderBubble:C,renderAvatar:I,renderDay:$,renderLoading:D,renderChatEmpty:P,listViewProps:F={},renderAvatarOnTop:U=!1,showUserAvatar:V=!1,showAvatarForEveryMessage:W=!1,inverted:z=!1,messageIdGenerator:G,topThreshold:N=R,appType:Y=m.Bik,maxHeight:X,isActivityMessage:q}=p,J=e(p,["messages","user","renderBubble","renderAvatar","renderDay","renderLoading","renderChatEmpty","listViewProps","renderAvatarOnTop","showUserAvatar","showAvatarForEveryMessage","inverted","messageIdGenerator","topThreshold","appType","maxHeight","isActivityMessage"]),K=h(),Q=o(null),Z=S(F.ref||c,Q),ee=o({isInitialMount:!0,isUserScrolling:!1,isLoadingOldMessages:!1,isAtBottom:!0,hasTriggeredEndReached:!1,lastMessagesLength:null!==(v=null==H?void 0:H.length)&&void 0!==v?v:0,previousScrollHeight:0,previousScrollTop:0,scrollTimeout:null}),[te,ie]=l(new Set),re=a((()=>H&&0!==H.length?[...H].reverse():[]),[H]),se=a((()=>{const e=[];return re.forEach(((t,i)=>{const r=re[i-1];0!==i&&k(t,r)?e[e.length-1].indices.push(i):e.push({createdAt:t.createdAt,indices:[i]})})),e}),[re]),ne=x(Z,ee);d(c,(()=>Z.current)),j(Z,ee,re.length,ne),T(ee),A(Z,ee,re.length),O(Z,ee,H.length,ne),w(null==H?void 0:H[0],ee,ne,G);const oe=M(ee,F.onEndReached,F.onScroll,N),le=g((e=>{var t;return Boolean(e&&L&&(null===(t=e.user)||void 0===t?void 0:t._id)===L._id)}),[L]),ae=g(((e,t)=>!!V&&(!!W||(!t||!!q&&q(e)||!!q&&q(t)||t.user._id!==e.user._id))),[V,W,q]),de=g(((e,i,r)=>{var s,n,o,l,a;const d=le(e)?"right":"left",g=(null===(s=null==i?void 0:i.user)||void 0===s?void 0:s._id)!==(null===(n=null==e?void 0:e.user)||void 0===n?void 0:n._id),c=(null===(o=null==r?void 0:r.user)||void 0===o?void 0:o._id)!==(null===(l=null==e?void 0:e.user)||void 0===l?void 0:l._id),h=Object.assign({currentMessage:e,previousMessage:i,nextMessage:r,position:d,user:L},J);if(C)return C(h);const v=e._id,p=te.has(v);return t("div",Object.assign({style:Object.assign(Object.assign({maxWidth:Y===m.Manifest?"50%":"70%",width:"fit-content"},Y===m.Manifest?{minWidth:"130px"}:{}),{padding:"8px 12px",borderTopLeftRadius:"left"===d?g?12:2:12,borderTopRightRadius:"right"===d?g?12:2:12,borderBottomLeftRadius:"left"===d?c?12:2:12,borderBottomRightRadius:"right"===d?c?12:2:12,border:"left"===d&&Y===m.Manifest?"1px solid rgb(224, 224, 224)":"none",backgroundColor:"right"===d?Y===m.Manifest?u.background.brandTint:u.background.brandLight:Y===m.Manifest?u.background.pureWhite:u.background.inactive,color:u.content.primary,wordBreak:"break-word"})},{children:t(B,{text:null!==(a=e.text)&&void 0!==a?a:"",isExpanded:p,onToggle:()=>ie((e=>{const t=new Set(e);return p?t.delete(v):t.add(v),t}))})}))}),[le,L,C,J,te]),ge=g(((e,t,i)=>{if(!ae(e,t))return null;const r=le(e)?"right":"left";return I?I({currentMessage:e,previousMessage:t,nextMessage:i,position:r,user:L,renderAvatarOnTop:U,showUserAvatar:V,showAvatarForEveryMessage:W}):null}),[ae,le,L,U,V,W,I]);return H&&0!==H.length?r("div",Object.assign({ref:Z,style:Object.assign(Object.assign({flex:1,overflowY:"auto",overflowX:"hidden",display:"flex",flexDirection:"column"},X?{maxHeight:X,height:X}:{}),F.style),onScroll:oe},{children:[t("div",{style:{flex:"1 0 auto"}}),t("div",Object.assign({style:{display:"flex",flexDirection:"column",flex:"0 0 auto"}},{children:se.map(((e,i)=>r("div",{children:[$?t("div",Object.assign({style:{position:"sticky",top:0,zIndex:2}},{children:$({createdAt:e.createdAt})})):t(f,{createdAt:e.createdAt,appType:Y,scrollRootRef:Z}),e.indices.map((e=>{var i,n,o,l,a,d;const g=re[e],c=(null==g?void 0:g.channelId)===_.SMTP||(null==g?void 0:g.channelName)===_.SMTP,u=c?"left":le(g)?"right":"left",h=re[e-1],v=re[e+1],p=y(g,u),f=b(g),x=g.category===E.ChatActivity.Category.ACTIVITY&&g.activityType===E.ChatActivity.Type.PRIVATE_NOTE;return t(s.Fragment,{children:r("div",Object.assign({style:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},K?{margin:"0 4px"}:{}),f?{}:{display:"flex",alignItems:"flex-start"}),Y!==m.Manifest?K||"right"!==u?{marginRight:8}:{marginLeft:8}:{}),c&&!x&&K?{marginLeft:8,marginRight:8}:{}),{justifyContent:p,marginBottom:v?(null===(i=null==v?void 0:v.user)||void 0===i?void 0:i._id)===(null===(n=null==g?void 0:g.user)||void 0===n?void 0:n._id)?4:20:0})},{children:[!K&&"left"===u&&t("div",Object.assign({style:{marginRight:"4px",width:"24px",flexShrink:0}},{children:ge(g,h,v)})),t("div",Object.assign({id:`message-bubble-${null!==(o=g._id)&&void 0!==o?o:`${e}-${null!==(l=null==G?void 0:G())&&void 0!==l?l:"id"}`}`,style:Y===m.Manifest?{width:"100%"}:K||c?{display:"flex",flexGrow:1,width:"100%"}:{}},{children:de(g,h,v)})),!K&&"right"===u&&t("div",Object.assign({style:{marginLeft:"4px",width:"24px",flexShrink:0,alignSelf:"flex-start"}},{children:ge(g,h,v)}))]}))},null!==(a=g._id)&&void 0!==a?a:`${e}-${null!==(d=null==G?void 0:G())&&void 0!==d?d:"id"}`)}))]},`day-group-${i}`)))}))]})):P?t(i,{children:P()}):null}));export{H as default};
|
|
2
2
|
//# sourceMappingURL=GiftedChat.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GiftedChat.js","sources":["../../../../../src/components/BikGiftedChat/GiftedChat/GiftedChat.tsx"],"sourcesContent":["import React, {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport { COLORS } from '../../../constants/Theme';\nimport { useWindowSize } from '../../../hooks/useWindowSize';\nimport { Button } from '../../button';\nimport { BodySecondary } from '../../TypographyStyle';\nimport { BubbleProps, GiftedChatAppType } from '../Bubble/types';\nimport { IMessage } from '../types';\nimport { Day } from './Day';\nimport { getMessagePlacement, shouldCenterAlign } from './messageHelpers';\nimport {\n\tuseAutoScrollOnNewMessages,\n\tuseInitialMountScroll,\n\tuseResizeObserverForFirstMessage,\n\tuseRestoreScrollPosition,\n\tuseScrollCleanup,\n\tuseScrollHandler,\n\tuseScrollToBottom,\n} from './scrollHooks';\nimport { AvatarProps, GiftedChatProps, MESSAGE_CHANNELS } from './types';\nimport { isSameDay, normalizeRef } from './utils';\nimport { Constants, TOP_THRESHOLD } from './utils';\n\nconst COLLAPSED_MAX_HEIGHT = 204;\n\nconst CollapsibleBubbleText: React.FC<{\n\ttext: string;\n\tisExpanded: boolean;\n\tonToggle: () => void;\n}> = ({ text, isExpanded, onToggle }) => {\n\tconst textRef = useRef<HTMLDivElement>(null);\n\tconst [isOverflowing, setIsOverflowing] = useState(false);\n\n\tuseEffect(() => {\n\t\tconst el = textRef.current;\n\t\tif (el) {\n\t\t\t// Temporarily remove max-height to measure true scroll height\n\t\t\tel.style.maxHeight = 'none';\n\t\t\tconst overflows = el.scrollHeight > COLLAPSED_MAX_HEIGHT;\n\t\t\tel.style.maxHeight = isExpanded ? 'none' : `${COLLAPSED_MAX_HEIGHT}px`;\n\t\t\tsetIsOverflowing(overflows);\n\t\t}\n\t}, [text, isExpanded]);\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\tref={textRef}\n\t\t\t\tstyle={{\n\t\t\t\t\tmaxHeight: isExpanded ? 'none' : COLLAPSED_MAX_HEIGHT,\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<BodySecondary>{text}</BodySecondary>\n\t\t\t</div>\n\t\t\t{isOverflowing && (\n\t\t\t\t<Button\n\t\t\t\t\tbuttonType=\"text\"\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\tbuttonText={isExpanded ? 'Show less' : 'Read more'}\n\t\t\t\t\tonClick={onToggle}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t);\n};\n\nconst GiftedChatInner = (\n\tprops: Omit<GiftedChatProps<IMessage>, 'ref'>,\n\tforwardedRef: React.Ref<HTMLDivElement>,\n) => {\n\tconst {\n\t\tmessages = [],\n\t\tuser,\n\t\trenderBubble,\n\t\trenderAvatar,\n\t\trenderDay,\n\t\trenderLoading,\n\t\trenderChatEmpty,\n\t\tlistViewProps = {},\n\t\trenderAvatarOnTop = false,\n\t\tshowUserAvatar = false,\n\t\tshowAvatarForEveryMessage = false,\n\t\tinverted = false,\n\t\tmessageIdGenerator,\n\t\ttopThreshold = TOP_THRESHOLD,\n\t\tappType = GiftedChatAppType.Bik,\n\t\tmaxHeight,\n\t\tisActivityMessage,\n\t\t...extraProps\n\t} = props || {};\n\n\tconst isMobile = useWindowSize();\n\n\tconst internalScrollRef = useRef<HTMLDivElement | null>(null);\n\tconst scrollRef = normalizeRef(\n\t\tlistViewProps.ref || forwardedRef,\n\t\tinternalScrollRef,\n\t);\n\n\tconst scrollState = useRef({\n\t\tisInitialMount: true,\n\t\tisUserScrolling: false,\n\t\tisLoadingOldMessages: false,\n\t\tisAtBottom: true,\n\t\thasTriggeredEndReached: false,\n\t\tlastMessagesLength: messages?.length ?? 0,\n\t\tpreviousScrollHeight: 0,\n\t\tpreviousScrollTop: 0,\n\t\tscrollTimeout: null,\n\t});\n\n\tconst [expandedMessages, setExpandedMessages] = useState<\n\t\tSet<string | number>\n\t>(new Set());\n\n\t// Reverse messages so newest appears last in DOM (natural reading order)\n\tconst reversedMessages = useMemo(() => {\n\t\tif (!messages || messages.length === 0) return [] as IMessage[];\n\t\treturn [...messages].reverse() as IMessage[];\n\t}, [messages]);\n\n\tconst scrollToBottom = useScrollToBottom(scrollRef, scrollState);\n\n\tuseImperativeHandle(forwardedRef, () => scrollRef.current!);\n\n\tuseInitialMountScroll(\n\t\tscrollRef,\n\t\tscrollState,\n\t\treversedMessages.length,\n\t\tscrollToBottom,\n\t);\n\n\tuseScrollCleanup(scrollState);\n\n\tuseRestoreScrollPosition(scrollRef, scrollState, reversedMessages.length);\n\n\tuseAutoScrollOnNewMessages(\n\t\tscrollRef,\n\t\tscrollState,\n\t\tmessages.length,\n\t\tscrollToBottom,\n\t);\n\n\tuseResizeObserverForFirstMessage(\n\t\tmessages?.[0],\n\t\tscrollState,\n\t\tscrollToBottom,\n\t\tmessageIdGenerator,\n\t);\n\n\tconst handleScroll = useScrollHandler(\n\t\tscrollState,\n\t\tlistViewProps.onEndReached,\n\t\tlistViewProps.onScroll,\n\t\ttopThreshold,\n\t);\n\n\t// Check if a message belongs to the current user\n\tconst isUserMessage = useCallback(\n\t\t(message: IMessage) => {\n\t\t\treturn Boolean(message && user && message.user?._id === user._id);\n\t\t},\n\t\t[user],\n\t);\n\n\t// Determine if avatar should be shown for this message\n\tconst shouldShowAvatar = useCallback(\n\t\t(message: IMessage, previousMessage?: IMessage) => {\n\t\t\tif (!showUserAvatar) return false;\n\t\t\tif (showAvatarForEveryMessage) return true;\n\n\t\t\t// Show avatar on the first message in a consecutive sender stack,\n\t\t\t// or when an activity interrupts the stack, or when the current message itself is an activity\n\t\t\treturn (\n\t\t\t\t!previousMessage ||\n\t\t\t\t(isActivityMessage ? isActivityMessage(message) : false) ||\n\t\t\t\t(isActivityMessage ? isActivityMessage(previousMessage) : false) ||\n\t\t\t\tpreviousMessage.user._id !== message.user._id\n\t\t\t);\n\t\t},\n\t\t[showUserAvatar, showAvatarForEveryMessage, isActivityMessage],\n\t);\n\n\t// Render a message bubble (or call custom renderBubble)\n\tconst renderMessageBubble = useCallback(\n\t\t(message: IMessage, previousMessage?: IMessage, nextMessage?: IMessage) => {\n\t\t\tconst position = isUserMessage(message) ? 'right' : 'left';\n\t\t\tconst isTopOfStack = previousMessage?.user?._id !== message?.user?._id;\n\t\t\tconst isBottomOfStack = nextMessage?.user?._id !== message?.user?._id;\n\n\t\t\tconst bubbleProps: BubbleProps<IMessage> = {\n\t\t\t\tcurrentMessage: message,\n\t\t\t\tpreviousMessage,\n\t\t\t\tnextMessage,\n\t\t\t\tposition,\n\t\t\t\tuser,\n\t\t\t\t...extraProps,\n\t\t\t};\n\n\t\t\t// Use custom render function if provided\n\t\t\tif (renderBubble) {\n\t\t\t\treturn renderBubble(bubbleProps);\n\t\t\t}\n\n\t\t\t// Default bubble rendering\n\t\t\tconst messageId = message._id;\n\t\t\tconst isExpanded = expandedMessages.has(messageId);\n\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmaxWidth: appType === GiftedChatAppType.Manifest ? '50%' : '70%',\n\t\t\t\t\t\twidth: 'fit-content',\n\t\t\t\t\t\t...(appType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t? { minWidth: '130px' }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\tpadding: '8px 12px',\n\t\t\t\t\t\tborderTopLeftRadius:\n\t\t\t\t\t\t\tposition === 'left' ? (isTopOfStack ? 12 : 2) : 12,\n\t\t\t\t\t\tborderTopRightRadius:\n\t\t\t\t\t\t\tposition === 'right' ? (isTopOfStack ? 12 : 2) : 12,\n\t\t\t\t\t\tborderBottomLeftRadius:\n\t\t\t\t\t\t\tposition === 'left' ? (isBottomOfStack ? 12 : 2) : 12,\n\t\t\t\t\t\tborderBottomRightRadius:\n\t\t\t\t\t\t\tposition === 'right' ? (isBottomOfStack ? 12 : 2) : 12,\n\t\t\t\t\t\tborder:\n\t\t\t\t\t\t\tposition === 'left' && appType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t? '1px solid rgb(224, 224, 224)'\n\t\t\t\t\t\t\t\t: 'none',\n\t\t\t\t\t\tbackgroundColor:\n\t\t\t\t\t\t\tposition === 'right'\n\t\t\t\t\t\t\t\t? appType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t\t? COLORS.background.brandTint\n\t\t\t\t\t\t\t\t\t: COLORS.background.brandLight\n\t\t\t\t\t\t\t\t: appType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t? COLORS.background.pureWhite\n\t\t\t\t\t\t\t\t: COLORS.background.inactive,\n\t\t\t\t\t\tcolor: COLORS.content.primary,\n\t\t\t\t\t\twordBreak: 'break-word',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<CollapsibleBubbleText\n\t\t\t\t\t\ttext={message.text ?? ''}\n\t\t\t\t\t\tisExpanded={isExpanded}\n\t\t\t\t\t\tonToggle={() =>\n\t\t\t\t\t\t\tsetExpandedMessages((prev) => {\n\t\t\t\t\t\t\t\tconst next = new Set(prev);\n\t\t\t\t\t\t\t\tif (isExpanded) next.delete(messageId);\n\t\t\t\t\t\t\t\telse next.add(messageId);\n\t\t\t\t\t\t\t\treturn next;\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t},\n\t\t[isUserMessage, user, renderBubble, extraProps, expandedMessages],\n\t);\n\n\t// Render a message avatar (or call custom renderAvatar)\n\tconst renderMessageAvatar = useCallback(\n\t\t(message: IMessage, previousMessage?: IMessage, nextMessage?: IMessage) => {\n\t\t\tconst shouldShow = shouldShowAvatar(message, previousMessage);\n\n\t\t\tif (!shouldShow) return null;\n\n\t\t\tconst position = isUserMessage(message) ? 'right' : 'left';\n\n\t\t\tconst avatarProps: AvatarProps<IMessage> = {\n\t\t\t\tcurrentMessage: message,\n\t\t\t\tpreviousMessage,\n\t\t\t\tnextMessage,\n\t\t\t\tposition,\n\t\t\t\tuser,\n\t\t\t\trenderAvatarOnTop,\n\t\t\t\tshowUserAvatar,\n\t\t\t\tshowAvatarForEveryMessage,\n\t\t\t};\n\n\t\t\treturn renderAvatar ? renderAvatar(avatarProps) : null;\n\t\t},\n\t\t[\n\t\t\tshouldShowAvatar,\n\t\t\tisUserMessage,\n\t\t\tuser,\n\t\t\trenderAvatarOnTop,\n\t\t\tshowUserAvatar,\n\t\t\tshowAvatarForEveryMessage,\n\t\t\trenderAvatar,\n\t\t],\n\t);\n\n\t// Render: Empty State\n\tif (!messages || messages.length === 0) {\n\t\treturn renderChatEmpty ? <>{renderChatEmpty()}</> : null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tref={scrollRef as React.RefObject<HTMLDivElement>}\n\t\t\tstyle={{\n\t\t\t\tflex: 1,\n\t\t\t\toverflowY: 'auto',\n\t\t\t\toverflowX: 'hidden',\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tflexDirection: 'column',\n\t\t\t\t...(maxHeight ? { maxHeight, height: maxHeight } : {}),\n\t\t\t\t...listViewProps.style,\n\t\t\t}}\n\t\t\tonScroll={handleScroll}\n\t\t>\n\t\t\t{/* Spacer to push messages to bottom (newest appears last in DOM) */}\n\t\t\t<div style={{ flex: '1 0 auto' }} />\n\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\tflex: '0 0 auto',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{reversedMessages.map((message, index) => {\n\t\t\t\t\tconst isSmtp =\n\t\t\t\t\t\tmessage?.['channelId'] === MESSAGE_CHANNELS.SMTP ||\n\t\t\t\t\t\tmessage?.['channelName'] === MESSAGE_CHANNELS.SMTP;\n\t\t\t\t\tconst position = isSmtp\n\t\t\t\t\t\t? 'left'\n\t\t\t\t\t\t: isUserMessage(message)\n\t\t\t\t\t\t? 'right'\n\t\t\t\t\t\t: 'left';\n\t\t\t\t\tconst previousMessage = reversedMessages[index - 1];\n\t\t\t\t\tconst nextMessage = reversedMessages[index + 1];\n\t\t\t\t\tconst shouldShowDay = !isSameDay(message, previousMessage);\n\t\t\t\t\tconst placement = getMessagePlacement(message, position);\n\t\t\t\t\tconst isCentered = shouldCenterAlign(message);\n\t\t\t\t\t// Check if message is a private note\n\t\t\t\t\tconst isPrivateNote =\n\t\t\t\t\t\tmessage['category'] === Constants.ChatActivity.Category.ACTIVITY &&\n\t\t\t\t\t\tmessage['activityType'] ===\n\t\t\t\t\t\t\tConstants.ChatActivity.Type.PRIVATE_NOTE;\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<React.Fragment\n\t\t\t\t\t\t\tkey={message._id ?? `${index}-${messageIdGenerator?.() ?? 'id'}`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{/* Day separator */}\n\t\t\t\t\t\t\t{shouldShowDay &&\n\t\t\t\t\t\t\t\t(renderDay ? (\n\t\t\t\t\t\t\t\t\trenderDay({ createdAt: message.createdAt })\n\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t<Day createdAt={message.createdAt} appType={appType} />\n\t\t\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t\t{/* Message container */}\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t...(isMobile ? { margin: '0 4px' } : {}),\n\t\t\t\t\t\t\t\t\t...(isCentered\n\t\t\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t\t\t: { display: 'flex', alignItems: 'flex-start' }),\n\t\t\t\t\t\t\t\t\t...(appType !== GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t\t\t? !isMobile && position === 'right'\n\t\t\t\t\t\t\t\t\t\t\t? { marginLeft: 8 }\n\t\t\t\t\t\t\t\t\t\t\t: { marginRight: 8 }\n\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t...(isSmtp && !isPrivateNote && isMobile\n\t\t\t\t\t\t\t\t\t\t? { marginLeft: 8, marginRight: 8 }\n\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\tjustifyContent: placement,\n\t\t\t\t\t\t\t\t\tmarginBottom: nextMessage\n\t\t\t\t\t\t\t\t\t\t? nextMessage?.user?._id === message?.user?._id\n\t\t\t\t\t\t\t\t\t\t\t? 4\n\t\t\t\t\t\t\t\t\t\t\t: 20\n\t\t\t\t\t\t\t\t\t\t: 0,\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{/* Left avatar or placeholder (for mobile, avatar is hidden) */}\n\t\t\t\t\t\t\t\t{!isMobile && position === 'left' && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tmarginRight: '4px',\n\t\t\t\t\t\t\t\t\t\t\twidth: '24px',\n\t\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{renderMessageAvatar(message, previousMessage, nextMessage)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t{/* Message bubble */}\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tid={`message-bubble-${\n\t\t\t\t\t\t\t\t\t\tmessage._id ?? `${index}-${messageIdGenerator?.() ?? 'id'}`\n\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\t\tappType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t\t\t\t? { width: '100%' }\n\t\t\t\t\t\t\t\t\t\t\t: isMobile || isSmtp\n\t\t\t\t\t\t\t\t\t\t\t? { display: 'flex', flexGrow: 1, width: '100%' }\n\t\t\t\t\t\t\t\t\t\t\t: {}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{renderMessageBubble(message, previousMessage, nextMessage)}\n\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t{/* Right avatar or placeholder (for mobile, avatar is hidden) */}\n\t\t\t\t\t\t\t\t{!isMobile && position === 'right' && (\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\tmarginLeft: '4px',\n\t\t\t\t\t\t\t\t\t\t\twidth: '24px',\n\t\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\t\t\talignSelf: 'flex-start',\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{renderMessageAvatar(message, previousMessage, nextMessage)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</React.Fragment>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default forwardRef<HTMLDivElement, GiftedChatProps<IMessage>>(\n\tGiftedChatInner,\n);\n"],"names":["CollapsibleBubbleText","_ref","text","isExpanded","onToggle","textRef","useRef","isOverflowing","setIsOverflowing","useState","useEffect","el","current","style","maxHeight","overflows","scrollHeight","_jsxs","_jsx","Object","assign","ref","overflow","children","BodySecondary","Button","buttonType","size","buttonText","onClick","GiftedChat","forwardRef","GiftedChatInner","props","forwardedRef","_b","messages","user","renderBubble","renderAvatar","renderDay","renderLoading","renderChatEmpty","listViewProps","renderAvatarOnTop","showUserAvatar","showAvatarForEveryMessage","inverted","messageIdGenerator","topThreshold","TOP_THRESHOLD","appType","GiftedChatAppType","Bik","isActivityMessage","extraProps","__rest","isMobile","useWindowSize","internalScrollRef","scrollRef","normalizeRef","scrollState","isInitialMount","isUserScrolling","isLoadingOldMessages","isAtBottom","hasTriggeredEndReached","lastMessagesLength","_a","length","previousScrollHeight","previousScrollTop","scrollTimeout","expandedMessages","setExpandedMessages","Set","reversedMessages","useMemo","reverse","scrollToBottom","useScrollToBottom","useImperativeHandle","useInitialMountScroll","useScrollCleanup","useRestoreScrollPosition","useAutoScrollOnNewMessages","useResizeObserverForFirstMessage","handleScroll","useScrollHandler","onEndReached","onScroll","isUserMessage","useCallback","message","Boolean","_id","shouldShowAvatar","previousMessage","renderMessageBubble","nextMessage","position","isTopOfStack","isBottomOfStack","_c","_d","bubbleProps","currentMessage","messageId","has","maxWidth","Manifest","width","minWidth","padding","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","border","backgroundColor","COLORS","background","brandTint","brandLight","pureWhite","inactive","color","content","primary","wordBreak","_e","prev","next","delete","add","renderMessageAvatar","flex","overflowY","overflowX","display","flexDirection","height","map","index","isSmtp","MESSAGE_CHANNELS","SMTP","shouldShowDay","isSameDay","placement","getMessagePlacement","isCentered","shouldCenterAlign","isPrivateNote","Constants","ChatActivity","Category","ACTIVITY","Type","PRIVATE_NOTE","React","Fragment","createdAt","Day","margin","alignItems","marginRight","marginLeft","justifyContent","marginBottom","flexShrink","id","flexGrow","alignSelf","_f","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GiftedChat.js","sources":["../../../../../src/components/BikGiftedChat/GiftedChat/GiftedChat.tsx"],"sourcesContent":["import React, {\n\tforwardRef,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseMemo,\n\tuseRef,\n\tuseState,\n} from 'react';\nimport { COLORS } from '../../../constants/Theme';\nimport { useWindowSize } from '../../../hooks/useWindowSize';\nimport { Button } from '../../button';\nimport { BodySecondary } from '../../TypographyStyle';\nimport { BubbleProps, GiftedChatAppType } from '../Bubble/types';\nimport { IMessage } from '../types';\nimport { Day } from './Day';\nimport { getMessagePlacement, shouldCenterAlign } from './messageHelpers';\nimport {\n\tuseAutoScrollOnNewMessages,\n\tuseInitialMountScroll,\n\tuseResizeObserverForFirstMessage,\n\tuseRestoreScrollPosition,\n\tuseScrollCleanup,\n\tuseScrollHandler,\n\tuseScrollToBottom,\n} from './scrollHooks';\nimport { AvatarProps, GiftedChatProps, MESSAGE_CHANNELS } from './types';\nimport { isSameDay, normalizeRef } from './utils';\nimport { Constants, TOP_THRESHOLD } from './utils';\n\nconst COLLAPSED_MAX_HEIGHT = 204;\n\nconst CollapsibleBubbleText: React.FC<{\n\ttext: string;\n\tisExpanded: boolean;\n\tonToggle: () => void;\n}> = ({ text, isExpanded, onToggle }) => {\n\tconst textRef = useRef<HTMLDivElement>(null);\n\tconst [isOverflowing, setIsOverflowing] = useState(false);\n\n\tuseEffect(() => {\n\t\tconst el = textRef.current;\n\t\tif (el) {\n\t\t\t// Temporarily remove max-height to measure true scroll height\n\t\t\tel.style.maxHeight = 'none';\n\t\t\tconst overflows = el.scrollHeight > COLLAPSED_MAX_HEIGHT;\n\t\t\tel.style.maxHeight = isExpanded ? 'none' : `${COLLAPSED_MAX_HEIGHT}px`;\n\t\t\tsetIsOverflowing(overflows);\n\t\t}\n\t}, [text, isExpanded]);\n\n\treturn (\n\t\t<>\n\t\t\t<div\n\t\t\t\tref={textRef}\n\t\t\t\tstyle={{\n\t\t\t\t\tmaxHeight: isExpanded ? 'none' : COLLAPSED_MAX_HEIGHT,\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<BodySecondary>{text}</BodySecondary>\n\t\t\t</div>\n\t\t\t{isOverflowing && (\n\t\t\t\t<Button\n\t\t\t\t\tbuttonType=\"text\"\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\tbuttonText={isExpanded ? 'Show less' : 'Read more'}\n\t\t\t\t\tonClick={onToggle}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</>\n\t);\n};\n\nconst GiftedChatInner = (\n\tprops: Omit<GiftedChatProps<IMessage>, 'ref'>,\n\tforwardedRef: React.Ref<HTMLDivElement>,\n) => {\n\tconst {\n\t\tmessages = [],\n\t\tuser,\n\t\trenderBubble,\n\t\trenderAvatar,\n\t\trenderDay,\n\t\trenderLoading,\n\t\trenderChatEmpty,\n\t\tlistViewProps = {},\n\t\trenderAvatarOnTop = false,\n\t\tshowUserAvatar = false,\n\t\tshowAvatarForEveryMessage = false,\n\t\tinverted = false,\n\t\tmessageIdGenerator,\n\t\ttopThreshold = TOP_THRESHOLD,\n\t\tappType = GiftedChatAppType.Bik,\n\t\tmaxHeight,\n\t\tisActivityMessage,\n\t\t...extraProps\n\t} = props || {};\n\n\tconst isMobile = useWindowSize();\n\n\tconst internalScrollRef = useRef<HTMLDivElement | null>(null);\n\tconst scrollRef = normalizeRef(\n\t\tlistViewProps.ref || forwardedRef,\n\t\tinternalScrollRef,\n\t);\n\n\tconst scrollState = useRef({\n\t\tisInitialMount: true,\n\t\tisUserScrolling: false,\n\t\tisLoadingOldMessages: false,\n\t\tisAtBottom: true,\n\t\thasTriggeredEndReached: false,\n\t\tlastMessagesLength: messages?.length ?? 0,\n\t\tpreviousScrollHeight: 0,\n\t\tpreviousScrollTop: 0,\n\t\tscrollTimeout: null,\n\t});\n\n\tconst [expandedMessages, setExpandedMessages] = useState<\n\t\tSet<string | number>\n\t>(new Set());\n\n\t// Reverse messages so newest appears last in DOM (natural reading order)\n\tconst reversedMessages = useMemo(() => {\n\t\tif (!messages || messages.length === 0) return [] as IMessage[];\n\t\treturn [...messages].reverse() as IMessage[];\n\t}, [messages]);\n\n\t// Group consecutive same-day messages so each day separator can stick\n\t// within its own section and get pushed out by the next day's separator.\n\tconst dayGroups = useMemo(() => {\n\t\tconst groups: { createdAt: IMessage['createdAt']; indices: number[] }[] =\n\t\t\t[];\n\t\treversedMessages.forEach((message, index) => {\n\t\t\tconst previousMessage = reversedMessages[index - 1];\n\t\t\tif (index === 0 || !isSameDay(message, previousMessage)) {\n\t\t\t\tgroups.push({ createdAt: message.createdAt, indices: [index] });\n\t\t\t} else {\n\t\t\t\tgroups[groups.length - 1].indices.push(index);\n\t\t\t}\n\t\t});\n\t\treturn groups;\n\t}, [reversedMessages]);\n\n\tconst scrollToBottom = useScrollToBottom(scrollRef, scrollState);\n\n\tuseImperativeHandle(forwardedRef, () => scrollRef.current!);\n\n\tuseInitialMountScroll(\n\t\tscrollRef,\n\t\tscrollState,\n\t\treversedMessages.length,\n\t\tscrollToBottom,\n\t);\n\n\tuseScrollCleanup(scrollState);\n\n\tuseRestoreScrollPosition(scrollRef, scrollState, reversedMessages.length);\n\n\tuseAutoScrollOnNewMessages(\n\t\tscrollRef,\n\t\tscrollState,\n\t\tmessages.length,\n\t\tscrollToBottom,\n\t);\n\n\tuseResizeObserverForFirstMessage(\n\t\tmessages?.[0],\n\t\tscrollState,\n\t\tscrollToBottom,\n\t\tmessageIdGenerator,\n\t);\n\n\tconst handleScroll = useScrollHandler(\n\t\tscrollState,\n\t\tlistViewProps.onEndReached,\n\t\tlistViewProps.onScroll,\n\t\ttopThreshold,\n\t);\n\n\t// Check if a message belongs to the current user\n\tconst isUserMessage = useCallback(\n\t\t(message: IMessage) => {\n\t\t\treturn Boolean(message && user && message.user?._id === user._id);\n\t\t},\n\t\t[user],\n\t);\n\n\t// Determine if avatar should be shown for this message\n\tconst shouldShowAvatar = useCallback(\n\t\t(message: IMessage, previousMessage?: IMessage) => {\n\t\t\tif (!showUserAvatar) return false;\n\t\t\tif (showAvatarForEveryMessage) return true;\n\n\t\t\t// Show avatar on the first message in a consecutive sender stack,\n\t\t\t// or when an activity interrupts the stack, or when the current message itself is an activity\n\t\t\treturn (\n\t\t\t\t!previousMessage ||\n\t\t\t\t(isActivityMessage ? isActivityMessage(message) : false) ||\n\t\t\t\t(isActivityMessage ? isActivityMessage(previousMessage) : false) ||\n\t\t\t\tpreviousMessage.user._id !== message.user._id\n\t\t\t);\n\t\t},\n\t\t[showUserAvatar, showAvatarForEveryMessage, isActivityMessage],\n\t);\n\n\t// Render a message bubble (or call custom renderBubble)\n\tconst renderMessageBubble = useCallback(\n\t\t(message: IMessage, previousMessage?: IMessage, nextMessage?: IMessage) => {\n\t\t\tconst position = isUserMessage(message) ? 'right' : 'left';\n\t\t\tconst isTopOfStack = previousMessage?.user?._id !== message?.user?._id;\n\t\t\tconst isBottomOfStack = nextMessage?.user?._id !== message?.user?._id;\n\n\t\t\tconst bubbleProps: BubbleProps<IMessage> = {\n\t\t\t\tcurrentMessage: message,\n\t\t\t\tpreviousMessage,\n\t\t\t\tnextMessage,\n\t\t\t\tposition,\n\t\t\t\tuser,\n\t\t\t\t...extraProps,\n\t\t\t};\n\n\t\t\t// Use custom render function if provided\n\t\t\tif (renderBubble) {\n\t\t\t\treturn renderBubble(bubbleProps);\n\t\t\t}\n\n\t\t\t// Default bubble rendering\n\t\t\tconst messageId = message._id;\n\t\t\tconst isExpanded = expandedMessages.has(messageId);\n\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tmaxWidth: appType === GiftedChatAppType.Manifest ? '50%' : '70%',\n\t\t\t\t\t\twidth: 'fit-content',\n\t\t\t\t\t\t...(appType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t? { minWidth: '130px' }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\tpadding: '8px 12px',\n\t\t\t\t\t\tborderTopLeftRadius:\n\t\t\t\t\t\t\tposition === 'left' ? (isTopOfStack ? 12 : 2) : 12,\n\t\t\t\t\t\tborderTopRightRadius:\n\t\t\t\t\t\t\tposition === 'right' ? (isTopOfStack ? 12 : 2) : 12,\n\t\t\t\t\t\tborderBottomLeftRadius:\n\t\t\t\t\t\t\tposition === 'left' ? (isBottomOfStack ? 12 : 2) : 12,\n\t\t\t\t\t\tborderBottomRightRadius:\n\t\t\t\t\t\t\tposition === 'right' ? (isBottomOfStack ? 12 : 2) : 12,\n\t\t\t\t\t\tborder:\n\t\t\t\t\t\t\tposition === 'left' && appType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t? '1px solid rgb(224, 224, 224)'\n\t\t\t\t\t\t\t\t: 'none',\n\t\t\t\t\t\tbackgroundColor:\n\t\t\t\t\t\t\tposition === 'right'\n\t\t\t\t\t\t\t\t? appType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t\t? COLORS.background.brandTint\n\t\t\t\t\t\t\t\t\t: COLORS.background.brandLight\n\t\t\t\t\t\t\t\t: appType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t? COLORS.background.pureWhite\n\t\t\t\t\t\t\t\t: COLORS.background.inactive,\n\t\t\t\t\t\tcolor: COLORS.content.primary,\n\t\t\t\t\t\twordBreak: 'break-word',\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<CollapsibleBubbleText\n\t\t\t\t\t\ttext={message.text ?? ''}\n\t\t\t\t\t\tisExpanded={isExpanded}\n\t\t\t\t\t\tonToggle={() =>\n\t\t\t\t\t\t\tsetExpandedMessages((prev) => {\n\t\t\t\t\t\t\t\tconst next = new Set(prev);\n\t\t\t\t\t\t\t\tif (isExpanded) next.delete(messageId);\n\t\t\t\t\t\t\t\telse next.add(messageId);\n\t\t\t\t\t\t\t\treturn next;\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t},\n\t\t[isUserMessage, user, renderBubble, extraProps, expandedMessages],\n\t);\n\n\t// Render a message avatar (or call custom renderAvatar)\n\tconst renderMessageAvatar = useCallback(\n\t\t(message: IMessage, previousMessage?: IMessage, nextMessage?: IMessage) => {\n\t\t\tconst shouldShow = shouldShowAvatar(message, previousMessage);\n\n\t\t\tif (!shouldShow) return null;\n\n\t\t\tconst position = isUserMessage(message) ? 'right' : 'left';\n\n\t\t\tconst avatarProps: AvatarProps<IMessage> = {\n\t\t\t\tcurrentMessage: message,\n\t\t\t\tpreviousMessage,\n\t\t\t\tnextMessage,\n\t\t\t\tposition,\n\t\t\t\tuser,\n\t\t\t\trenderAvatarOnTop,\n\t\t\t\tshowUserAvatar,\n\t\t\t\tshowAvatarForEveryMessage,\n\t\t\t};\n\n\t\t\treturn renderAvatar ? renderAvatar(avatarProps) : null;\n\t\t},\n\t\t[\n\t\t\tshouldShowAvatar,\n\t\t\tisUserMessage,\n\t\t\tuser,\n\t\t\trenderAvatarOnTop,\n\t\t\tshowUserAvatar,\n\t\t\tshowAvatarForEveryMessage,\n\t\t\trenderAvatar,\n\t\t],\n\t);\n\n\t// Render: Empty State\n\tif (!messages || messages.length === 0) {\n\t\treturn renderChatEmpty ? <>{renderChatEmpty()}</> : null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tref={scrollRef as React.RefObject<HTMLDivElement>}\n\t\t\tstyle={{\n\t\t\t\tflex: 1,\n\t\t\t\toverflowY: 'auto',\n\t\t\t\toverflowX: 'hidden',\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tflexDirection: 'column',\n\t\t\t\t...(maxHeight ? { maxHeight, height: maxHeight } : {}),\n\t\t\t\t...listViewProps.style,\n\t\t\t}}\n\t\t\tonScroll={handleScroll}\n\t\t>\n\t\t\t{/* Spacer to push messages to bottom (newest appears last in DOM) */}\n\t\t\t<div style={{ flex: '1 0 auto' }} />\n\n\t\t\t<div\n\t\t\t\tstyle={{\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\tflexDirection: 'column',\n\t\t\t\t\tflex: '0 0 auto',\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{dayGroups.map((group, groupIndex) => (\n\t\t\t\t\t<div key={`day-group-${groupIndex}`}>\n\t\t\t\t\t\t{/* Day separator — sticks to top while this day scrolls past */}\n\t\t\t\t\t\t{renderDay ? (\n\t\t\t\t\t\t\t<div style={{ position: 'sticky', top: 0, zIndex: 2 }}>\n\t\t\t\t\t\t\t\t{renderDay({ createdAt: group.createdAt })}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Day\n\t\t\t\t\t\t\t\tcreatedAt={group.createdAt}\n\t\t\t\t\t\t\t\tappType={appType}\n\t\t\t\t\t\t\t\tscrollRootRef={scrollRef}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{group.indices.map((index) => {\n\t\t\t\t\t\t\tconst message = reversedMessages[index];\n\t\t\t\t\t\t\tconst isSmtp =\n\t\t\t\t\t\t\t\tmessage?.['channelId'] === MESSAGE_CHANNELS.SMTP ||\n\t\t\t\t\t\t\t\tmessage?.['channelName'] === MESSAGE_CHANNELS.SMTP;\n\t\t\t\t\t\t\tconst position = isSmtp\n\t\t\t\t\t\t\t\t? 'left'\n\t\t\t\t\t\t\t\t: isUserMessage(message)\n\t\t\t\t\t\t\t\t? 'right'\n\t\t\t\t\t\t\t\t: 'left';\n\t\t\t\t\t\t\tconst previousMessage = reversedMessages[index - 1];\n\t\t\t\t\t\t\tconst nextMessage = reversedMessages[index + 1];\n\t\t\t\t\t\t\tconst placement = getMessagePlacement(message, position);\n\t\t\t\t\t\t\tconst isCentered = shouldCenterAlign(message);\n\t\t\t\t\t\t\t// Check if message is a private note\n\t\t\t\t\t\t\tconst isPrivateNote =\n\t\t\t\t\t\t\t\tmessage['category'] ===\n\t\t\t\t\t\t\t\t\tConstants.ChatActivity.Category.ACTIVITY &&\n\t\t\t\t\t\t\t\tmessage['activityType'] ===\n\t\t\t\t\t\t\t\t\tConstants.ChatActivity.Type.PRIVATE_NOTE;\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<React.Fragment\n\t\t\t\t\t\t\t\t\tkey={\n\t\t\t\t\t\t\t\t\t\tmessage._id ?? `${index}-${messageIdGenerator?.() ?? 'id'}`\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{/* Message container */}\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t...(isMobile ? { margin: '0 4px' } : {}),\n\t\t\t\t\t\t\t\t\t\t\t...(isCentered\n\t\t\t\t\t\t\t\t\t\t\t\t? {}\n\t\t\t\t\t\t\t\t\t\t\t\t: { display: 'flex', alignItems: 'flex-start' }),\n\t\t\t\t\t\t\t\t\t\t\t...(appType !== GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t\t\t\t\t? !isMobile && position === 'right'\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { marginLeft: 8 }\n\t\t\t\t\t\t\t\t\t\t\t\t\t: { marginRight: 8 }\n\t\t\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t\t\t...(isSmtp && !isPrivateNote && isMobile\n\t\t\t\t\t\t\t\t\t\t\t\t? { marginLeft: 8, marginRight: 8 }\n\t\t\t\t\t\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t\t\t\t\t\t\tjustifyContent: placement,\n\t\t\t\t\t\t\t\t\t\t\tmarginBottom: nextMessage\n\t\t\t\t\t\t\t\t\t\t\t\t? nextMessage?.user?._id === message?.user?._id\n\t\t\t\t\t\t\t\t\t\t\t\t\t? 4\n\t\t\t\t\t\t\t\t\t\t\t\t\t: 20\n\t\t\t\t\t\t\t\t\t\t\t\t: 0,\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{/* Left avatar or placeholder (for mobile, avatar is hidden) */}\n\t\t\t\t\t\t\t\t\t\t{!isMobile && position === 'left' && (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tmarginRight: '4px',\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: '24px',\n\t\t\t\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{renderMessageAvatar(\n\t\t\t\t\t\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpreviousMessage,\n\t\t\t\t\t\t\t\t\t\t\t\t\tnextMessage,\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\n\t\t\t\t\t\t\t\t\t\t{/* Message bubble */}\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tid={`message-bubble-${\n\t\t\t\t\t\t\t\t\t\t\t\tmessage._id ??\n\t\t\t\t\t\t\t\t\t\t\t\t`${index}-${messageIdGenerator?.() ?? 'id'}`\n\t\t\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t\t\t\t\t\tappType === GiftedChatAppType.Manifest\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { width: '100%' }\n\t\t\t\t\t\t\t\t\t\t\t\t\t: isMobile || isSmtp\n\t\t\t\t\t\t\t\t\t\t\t\t\t? { display: 'flex', flexGrow: 1, width: '100%' }\n\t\t\t\t\t\t\t\t\t\t\t\t\t: {}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{renderMessageBubble(\n\t\t\t\t\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\t\t\t\t\tpreviousMessage,\n\t\t\t\t\t\t\t\t\t\t\t\tnextMessage,\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t\t\t\t\t{/* Right avatar or placeholder (for mobile, avatar is hidden) */}\n\t\t\t\t\t\t\t\t\t\t{!isMobile && position === 'right' && (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\t\t\t\tmarginLeft: '4px',\n\t\t\t\t\t\t\t\t\t\t\t\t\twidth: '24px',\n\t\t\t\t\t\t\t\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\t\t\t\t\t\t\t\talignSelf: 'flex-start',\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{renderMessageAvatar(\n\t\t\t\t\t\t\t\t\t\t\t\t\tmessage,\n\t\t\t\t\t\t\t\t\t\t\t\t\tpreviousMessage,\n\t\t\t\t\t\t\t\t\t\t\t\t\tnextMessage,\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</React.Fragment>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n};\n\nexport default forwardRef<HTMLDivElement, GiftedChatProps<IMessage>>(\n\tGiftedChatInner,\n);\n"],"names":["CollapsibleBubbleText","_ref","text","isExpanded","onToggle","textRef","useRef","isOverflowing","setIsOverflowing","useState","useEffect","el","current","style","maxHeight","overflows","scrollHeight","_jsxs","_jsx","Object","assign","ref","overflow","children","BodySecondary","Button","buttonType","size","buttonText","onClick","GiftedChat","forwardRef","GiftedChatInner","props","forwardedRef","_b","messages","user","renderBubble","renderAvatar","renderDay","renderLoading","renderChatEmpty","listViewProps","renderAvatarOnTop","showUserAvatar","showAvatarForEveryMessage","inverted","messageIdGenerator","topThreshold","TOP_THRESHOLD","appType","GiftedChatAppType","Bik","isActivityMessage","extraProps","__rest","isMobile","useWindowSize","internalScrollRef","scrollRef","normalizeRef","scrollState","isInitialMount","isUserScrolling","isLoadingOldMessages","isAtBottom","hasTriggeredEndReached","lastMessagesLength","_a","length","previousScrollHeight","previousScrollTop","scrollTimeout","expandedMessages","setExpandedMessages","Set","reversedMessages","useMemo","reverse","dayGroups","groups","forEach","message","index","previousMessage","isSameDay","indices","push","createdAt","scrollToBottom","useScrollToBottom","useImperativeHandle","useInitialMountScroll","useScrollCleanup","useRestoreScrollPosition","useAutoScrollOnNewMessages","useResizeObserverForFirstMessage","handleScroll","useScrollHandler","onEndReached","onScroll","isUserMessage","useCallback","Boolean","_id","shouldShowAvatar","renderMessageBubble","nextMessage","position","isTopOfStack","isBottomOfStack","_c","_d","bubbleProps","currentMessage","messageId","has","maxWidth","Manifest","width","minWidth","padding","borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius","border","backgroundColor","COLORS","background","brandTint","brandLight","pureWhite","inactive","color","content","primary","wordBreak","_e","prev","next","delete","add","renderMessageAvatar","flex","overflowY","overflowX","display","flexDirection","height","map","group","groupIndex","top","zIndex","Day","scrollRootRef","isSmtp","MESSAGE_CHANNELS","SMTP","placement","getMessagePlacement","isCentered","shouldCenterAlign","isPrivateNote","Constants","ChatActivity","Category","ACTIVITY","Type","PRIVATE_NOTE","React","Fragment","margin","alignItems","marginRight","marginLeft","justifyContent","marginBottom","flexShrink","id","flexGrow","alignSelf","_f","_Fragment"],"mappings":"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"}
|
|
@@ -1,55 +1,53 @@
|
|
|
1
|
-
import
|
|
2
|
-
background: ${
|
|
1
|
+
import r from"styled-components";import{COLORS as t}from"../../constants/Theme.js";import{BodyCaption as e}from"../../components/TypographyStyle.js";const o=r.div`
|
|
2
|
+
background: ${t.surface.standard};
|
|
3
3
|
border-radius: 4px;
|
|
4
4
|
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
|
|
5
5
|
min-width: 330px;
|
|
6
6
|
max-height: 260px;
|
|
7
7
|
overflow-y: auto;
|
|
8
8
|
font-size: 14px;
|
|
9
|
-
color: ${
|
|
10
|
-
`,
|
|
9
|
+
color: ${t.content.primary};
|
|
10
|
+
`,n=r.div`
|
|
11
11
|
display: flex;
|
|
12
12
|
align-items: center;
|
|
13
13
|
gap: 8px;
|
|
14
14
|
padding: 8px;
|
|
15
15
|
min-height: 43px;
|
|
16
16
|
cursor: pointer;
|
|
17
|
-
color: ${
|
|
18
|
-
background: ${
|
|
19
|
-
`,
|
|
17
|
+
color: ${t.content.primary};
|
|
18
|
+
background: ${r=>{let{$isActive:e}=r;return e?t.surface.hovered:"transparent"}};
|
|
19
|
+
`,i=r.img`
|
|
20
20
|
width: 24px;
|
|
21
21
|
height: 24px;
|
|
22
22
|
border-radius: 50%;
|
|
23
23
|
object-fit: cover;
|
|
24
24
|
flex-shrink: 0;
|
|
25
|
-
`,
|
|
25
|
+
`,a=r.div`
|
|
26
26
|
width: 24px;
|
|
27
27
|
height: 24px;
|
|
28
28
|
border-radius: 50%;
|
|
29
|
-
background: ${
|
|
29
|
+
background: ${t.surface.hovered};
|
|
30
30
|
display: flex;
|
|
31
31
|
align-items: center;
|
|
32
32
|
justify-content: center;
|
|
33
33
|
font-size: 12px;
|
|
34
34
|
font-weight: 600;
|
|
35
|
-
color: ${
|
|
35
|
+
color: ${t.content.primary};
|
|
36
36
|
flex-shrink: 0;
|
|
37
|
-
`,
|
|
37
|
+
`,p=r.span`
|
|
38
38
|
font-weight: 500;
|
|
39
|
-
color: ${
|
|
40
|
-
`,
|
|
39
|
+
color: ${t.content.primary};
|
|
40
|
+
`,c=r.span`
|
|
41
41
|
width: 8px;
|
|
42
42
|
height: 8px;
|
|
43
43
|
border-radius: 50%;
|
|
44
|
-
background: ${
|
|
44
|
+
background: ${r=>{let{$online:e}=r;return e?t.content.positive:t.content.placeholder}};
|
|
45
45
|
margin-left: auto;
|
|
46
46
|
flex-shrink: 0;
|
|
47
|
-
`,s=
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
font-size: 12px;
|
|
52
|
-
color: ${e.content.secondary};
|
|
47
|
+
`,s=r(e)`
|
|
48
|
+
color: ${t.content.primary};
|
|
49
|
+
`,d=r(e)`
|
|
50
|
+
color: ${t.content.secondary};
|
|
53
51
|
margin-left: auto;
|
|
54
|
-
`;export{
|
|
52
|
+
`;export{o as DropdownContainer,n as DropdownItem,i as MentionAvatar,a as MentionAvatarFallback,p as MentionLabel,c as MentionPresenceDot,d as SlashDescription,s as SlashLabel};
|
|
55
53
|
//# sourceMappingURL=editorDropdown.styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editorDropdown.styles.js","sources":["../../../../src/editor/extensions/editorDropdown.styles.ts"],"sourcesContent":["import styled from 'styled-components';\nimport { COLORS } from '@src/constants/Theme';\n\nexport const DropdownContainer = styled.div`\n\tbackground: ${COLORS.surface.standard};\n\tborder-radius: 4px;\n\tbox-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n\tmin-width: 330px;\n\tmax-height: 260px;\n\toverflow-y: auto;\n\tfont-size: 14px;\n\tcolor: ${COLORS.content.primary};\n`;\n\nexport const DropdownItem = styled.div<{ $isActive?: boolean }>`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tpadding: 8px;\n\tmin-height: 43px;\n\tcursor: pointer;\n\tcolor: ${COLORS.content.primary};\n\tbackground: ${({ $isActive }) =>\n\t\t$isActive ? COLORS.surface.hovered : 'transparent'};\n`;\n\nexport const MentionAvatar = styled.img`\n\twidth: 24px;\n\theight: 24px;\n\tborder-radius: 50%;\n\tobject-fit: cover;\n\tflex-shrink: 0;\n`;\n\nexport const MentionAvatarFallback = styled.div`\n\twidth: 24px;\n\theight: 24px;\n\tborder-radius: 50%;\n\tbackground: ${COLORS.surface.hovered};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tfont-size: 12px;\n\tfont-weight: 600;\n\tcolor: ${COLORS.content.primary};\n\tflex-shrink: 0;\n`;\n\nexport const MentionLabel = styled.span`\n\tfont-weight: 500;\n\tcolor: ${COLORS.content.primary};\n`;\n\nexport const MentionPresenceDot = styled.span<{ $online?: boolean }>`\n\twidth: 8px;\n\theight: 8px;\n\tborder-radius: 50%;\n\tbackground: ${({ $online }) =>\n\t\t$online ? COLORS.content.positive : COLORS.content.placeholder};\n\tmargin-left: auto;\n\tflex-shrink: 0;\n`;\n\nexport const SlashLabel = styled
|
|
1
|
+
{"version":3,"file":"editorDropdown.styles.js","sources":["../../../../src/editor/extensions/editorDropdown.styles.ts"],"sourcesContent":["import { BodyCaption } from '@src/index';\nimport styled from 'styled-components';\nimport { COLORS } from '@src/constants/Theme';\n\nexport const DropdownContainer = styled.div`\n\tbackground: ${COLORS.surface.standard};\n\tborder-radius: 4px;\n\tbox-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);\n\tmin-width: 330px;\n\tmax-height: 260px;\n\toverflow-y: auto;\n\tfont-size: 14px;\n\tcolor: ${COLORS.content.primary};\n`;\n\nexport const DropdownItem = styled.div<{ $isActive?: boolean }>`\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 8px;\n\tpadding: 8px;\n\tmin-height: 43px;\n\tcursor: pointer;\n\tcolor: ${COLORS.content.primary};\n\tbackground: ${({ $isActive }) =>\n\t\t$isActive ? COLORS.surface.hovered : 'transparent'};\n`;\n\nexport const MentionAvatar = styled.img`\n\twidth: 24px;\n\theight: 24px;\n\tborder-radius: 50%;\n\tobject-fit: cover;\n\tflex-shrink: 0;\n`;\n\nexport const MentionAvatarFallback = styled.div`\n\twidth: 24px;\n\theight: 24px;\n\tborder-radius: 50%;\n\tbackground: ${COLORS.surface.hovered};\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tfont-size: 12px;\n\tfont-weight: 600;\n\tcolor: ${COLORS.content.primary};\n\tflex-shrink: 0;\n`;\n\nexport const MentionLabel = styled.span`\n\tfont-weight: 500;\n\tcolor: ${COLORS.content.primary};\n`;\n\nexport const MentionPresenceDot = styled.span<{ $online?: boolean }>`\n\twidth: 8px;\n\theight: 8px;\n\tborder-radius: 50%;\n\tbackground: ${({ $online }) =>\n\t\t$online ? COLORS.content.positive : COLORS.content.placeholder};\n\tmargin-left: auto;\n\tflex-shrink: 0;\n`;\n\nexport const SlashLabel = styled(BodyCaption)`\n\tcolor: ${COLORS.content.primary};\n`;\n\nexport const SlashDescription = styled(BodyCaption)`\n\tcolor: ${COLORS.content.secondary};\n\tmargin-left: auto;\n`;\n"],"names":["DropdownContainer","styled","div","COLORS","surface","standard","content","primary","DropdownItem","_ref","$isActive","hovered","MentionAvatar","img","MentionAvatarFallback","MentionLabel","span","MentionPresenceDot","_ref2","$online","positive","placeholder","SlashLabel","BodyCaption","SlashDescription","secondary"],"mappings":"qJAIaA,MAAAA,EAAoBC,EAAOC,GAAG;eAC5BC,EAAOC,QAAQC;;;;;;;UAOpBF,EAAOG,QAAQC;EAGZC,EAAeP,EAAOC,GAA4B;;;;;;;UAOrDC,EAAOG,QAAQC;eACVE,IAAA,IAACC,UAAEA,GAAWD,EAAA,OAC3BC,EAAYP,EAAOC,QAAQO,QAAU,aAAa;EAGvCC,EAAgBX,EAAOY,GAAG;;;;;;EAQ1BC,EAAwBb,EAAOC,GAAG;;;;eAIhCC,EAAOC,QAAQO;;;;;;UAMpBR,EAAOG,QAAQC;;EAIZQ,EAAed,EAAOe,IAAI;;UAE7Bb,EAAOG,QAAQC;EAGZU,EAAqBhB,EAAOe,IAA2B;;;;eAIrDE,IAAA,IAACC,QAAEA,GAASD,EAAA,OACzBC,EAAUhB,EAAOG,QAAQc,SAAWjB,EAAOG,QAAQe,WAAW;;;EAKnDC,EAAarB,EAAOsB,EAAY;UACnCpB,EAAOG,QAAQC;EAGZiB,EAAmBvB,EAAOsB,EAAY;UACzCpB,EAAOG,QAAQmB;;"}
|
|
@@ -12,6 +12,12 @@ export interface DayProps {
|
|
|
12
12
|
sameElse?: string;
|
|
13
13
|
};
|
|
14
14
|
appType?: GiftedChatAppType;
|
|
15
|
+
/**
|
|
16
|
+
* Scroll container the separator sticks within. When provided, the
|
|
17
|
+
* separator pins to the top while its day's messages scroll past, and the
|
|
18
|
+
* divider lines are hidden while pinned (floating-pill look).
|
|
19
|
+
*/
|
|
20
|
+
scrollRootRef?: React.RefObject<HTMLElement | null>;
|
|
15
21
|
}
|
|
16
22
|
export declare const Day: React.NamedExoticComponent<DayProps>;
|
|
17
23
|
export default Day;
|
|
@@ -8,5 +8,11 @@ export declare const MentionLabel: import("styled-components").StyledComponent<"
|
|
|
8
8
|
export declare const MentionPresenceDot: import("styled-components").StyledComponent<"span", any, {
|
|
9
9
|
$online?: boolean | undefined;
|
|
10
10
|
}, never>;
|
|
11
|
-
export declare const SlashLabel: import("styled-components").StyledComponent<"
|
|
12
|
-
|
|
11
|
+
export declare const SlashLabel: import("styled-components").StyledComponent<"div", any, {
|
|
12
|
+
numberOfLines?: number | undefined;
|
|
13
|
+
color?: string | undefined;
|
|
14
|
+
}, never>;
|
|
15
|
+
export declare const SlashDescription: import("styled-components").StyledComponent<"div", any, {
|
|
16
|
+
numberOfLines?: number | undefined;
|
|
17
|
+
color?: string | undefined;
|
|
18
|
+
}, never>;
|