From 509f942984e9b011ccaf8d5d2093711c323667a2 Mon Sep 17 00:00:00 2001 From: David Newell Date: Tue, 11 Feb 2025 16:33:43 +0000 Subject: [PATCH 1/5] messy --- .../scenes/error-tracking/issue/Metadata.tsx | 54 +++++++++++++- .../error-tracking/issue/panels/MetaPanel.tsx | 71 ------------------- 2 files changed, 52 insertions(+), 73 deletions(-) delete mode 100644 frontend/src/scenes/error-tracking/issue/panels/MetaPanel.tsx diff --git a/frontend/src/scenes/error-tracking/issue/Metadata.tsx b/frontend/src/scenes/error-tracking/issue/Metadata.tsx index d196fa7d1d631..1f2efa94f0aab 100644 --- a/frontend/src/scenes/error-tracking/issue/Metadata.tsx +++ b/frontend/src/scenes/error-tracking/issue/Metadata.tsx @@ -1,8 +1,11 @@ import { IconInfo } from '@posthog/icons' -import { LemonSkeleton, Tooltip } from '@posthog/lemon-ui' +import { LemonSkeleton, Link, Tooltip } from '@posthog/lemon-ui' +import clsx from 'clsx' import { useValues } from 'kea' import { TZLabel } from 'lib/components/TZLabel' +import { useResizeObserver } from 'lib/hooks/useResizeObserver' import { humanFriendlyLargeNumber } from 'lib/utils' +import { useEffect, useRef, useState } from 'react' import { errorTrackingIssueSceneLogic } from 'scenes/error-tracking/errorTrackingIssueSceneLogic' export const Metadata = (): JSX.Element => { @@ -32,7 +35,16 @@ export const Metadata = (): JSX.Element => { return (
- {issue ?
{issue.description}
: } + {issue && issue.description ? ( + + ) : ( + + )}
@@ -73,3 +85,41 @@ export const Metadata = (): JSX.Element => {
) } + +const ClampedText = ({ text, maxLines }: { text: string; maxLines: number }): JSX.Element => { + const [needsClamping, setNeedsClamping] = useState(false) + const [expanded, setExpanded] = useState(false) + const textRef = useRef(null) + const { height } = useResizeObserver({ ref: textRef }) + + useEffect(() => { + // debugger + if (textRef.current && height) { + const computedStyle = window.getComputedStyle(textRef.current) + const lineHeight = parseInt(computedStyle.lineHeight) + const maxHeight = maxLines * lineHeight + + const shouldClamp = height > maxHeight + setNeedsClamping(shouldClamp) + + if (shouldClamp && shouldClamp != needsClamping) { + setExpanded(false) + } + + // if (shouldClamp) { + // setExpanded(textRef.current.scrollHeight >= maxHeight) + // } else { + // setExpanded(false) + // } + } + }, [text, maxLines, height]) + + return ( +
+
+ {text} +
+ {needsClamping && setExpanded(!expanded)}>{expanded ? 'See less' : 'See more'}} +
+ ) +} diff --git a/frontend/src/scenes/error-tracking/issue/panels/MetaPanel.tsx b/frontend/src/scenes/error-tracking/issue/panels/MetaPanel.tsx deleted file mode 100644 index 1b4579a22696f..0000000000000 --- a/frontend/src/scenes/error-tracking/issue/panels/MetaPanel.tsx +++ /dev/null @@ -1,71 +0,0 @@ -import { IconInfo } from '@posthog/icons' -import { LemonSkeleton, Tooltip } from '@posthog/lemon-ui' -import { useValues } from 'kea' -import { TZLabel } from 'lib/components/TZLabel' -import { humanFriendlyLargeNumber, isString } from 'lib/utils' -import { errorTrackingIssueSceneLogic } from 'scenes/error-tracking/errorTrackingIssueSceneLogic' - -export const MetaPanel = (): JSX.Element => { - const { issue } = useValues(errorTrackingIssueSceneLogic) - - const sessions = issue?.aggregations?.sessions - - return ( -
- {issue ?
{issue.description}
: } -
-
-
First seen
- {issue ? : } -
-
-
Last seen
- {issue?.last_seen ? ( - - ) : ( - - )} -
-
-
- - 0 ? sessions : '-'} - /> - -
-
- ) -} - -const Count = ({ - label, - value, - tooltip, -}: { - label: string - value?: number | string - tooltip?: string -}): JSX.Element => { - const Component = ( -
-
- {label} - {tooltip && } -
-
- {value ? isString(value) ? value : humanFriendlyLargeNumber(value) : } -
-
- ) - - return tooltip ? ( - Component - ) : ( - - {Component} - - ) -} From ec6dd08f5bb88313221ee01bf1ea7752da5e871c Mon Sep 17 00:00:00 2001 From: David Newell Date: Thu, 13 Feb 2025 13:24:42 +0000 Subject: [PATCH 2/5] feat: expanding text --- .../ClampedText/ClampedText.stories.tsx | 29 +++++++ .../lib/lemon-ui/ClampedText/ClampedText.tsx | 78 +++++++++++++++++++ .../src/lib/lemon-ui/ClampedText/index.ts | 1 + .../scenes/error-tracking/issue/Metadata.tsx | 55 +------------ 4 files changed, 111 insertions(+), 52 deletions(-) create mode 100644 frontend/src/lib/lemon-ui/ClampedText/ClampedText.stories.tsx create mode 100644 frontend/src/lib/lemon-ui/ClampedText/ClampedText.tsx create mode 100644 frontend/src/lib/lemon-ui/ClampedText/index.ts diff --git a/frontend/src/lib/lemon-ui/ClampedText/ClampedText.stories.tsx b/frontend/src/lib/lemon-ui/ClampedText/ClampedText.stories.tsx new file mode 100644 index 0000000000000..bb32ead7e744e --- /dev/null +++ b/frontend/src/lib/lemon-ui/ClampedText/ClampedText.stories.tsx @@ -0,0 +1,29 @@ +import { Meta, StoryFn, StoryObj } from '@storybook/react' + +import { ClampedText, ClampedTextProps } from './ClampedText' + +type Story = StoryObj +const meta: Meta = { + title: 'Lemon UI/ClampedText', + component: ClampedText, + parameters: { + testOptions: { + waitForLoadersToDisappear: false, + }, + }, + tags: ['autodocs'], +} +export default meta + +const MediaTemplate: StoryFn = (props: ClampedTextProps) => { + return +} + +export const Base: Story = MediaTemplate.bind({}) +Base.args = { lines: 2, text: 'One line of text' } + +export const MultiLine: Story = MediaTemplate.bind({}) +MultiLine.args = { + lines: 2, + text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', +} diff --git a/frontend/src/lib/lemon-ui/ClampedText/ClampedText.tsx b/frontend/src/lib/lemon-ui/ClampedText/ClampedText.tsx new file mode 100644 index 0000000000000..a84842237c9e3 --- /dev/null +++ b/frontend/src/lib/lemon-ui/ClampedText/ClampedText.tsx @@ -0,0 +1,78 @@ +import React, { useEffect, useState } from 'react' + +import { Link } from '../Link' + +export interface ClampedTextProps { + lines: number + text: string +} + +const isCssEllipsisApplied = (elem: HTMLDivElement): boolean => elem.scrollHeight > elem.clientHeight + +export const ClampedText = React.forwardRef(function ClampedText( + { lines, text }, + ref +) { + const [localLines, setLocalLines] = useState(lines) + const [isExpanded, setIsExpanded] = useState(false) + const [showMore, setShowMore] = useState(false) + + const handleToggleShowMore = (show: boolean): void => { + setShowMore(!showMore) + setIsExpanded(!isExpanded) + setLocalLines(show ? undefined : lines) + } + + const handleConfigElement = (elem: HTMLDivElement): void => { + if (!elem) { + return + } + + if (isCssEllipsisApplied(elem)) { + if (!(showMore && isExpanded)) { + setShowMore(true) + } + } else { + setShowMore(false) + } + } + + useEffect(() => setLocalLines(lines), [lines]) + + return ( +
+ +
+ {isExpanded || showMore ? ( + handleToggleShowMore(!isExpanded)}> + {isExpanded ? 'Show less' : 'Show more'} + + ) : null} +
+
+ ) +}) + +const TruncatedElement = React.forwardRef(function TruncatedElement( + { text, lines }, + ref +) { + return ( + + {text} + + ) +}) diff --git a/frontend/src/lib/lemon-ui/ClampedText/index.ts b/frontend/src/lib/lemon-ui/ClampedText/index.ts new file mode 100644 index 0000000000000..32b2390223770 --- /dev/null +++ b/frontend/src/lib/lemon-ui/ClampedText/index.ts @@ -0,0 +1 @@ +export { ClampedText } from './ClampedText' diff --git a/frontend/src/scenes/error-tracking/issue/Metadata.tsx b/frontend/src/scenes/error-tracking/issue/Metadata.tsx index 1f2efa94f0aab..c019c3bac4cf3 100644 --- a/frontend/src/scenes/error-tracking/issue/Metadata.tsx +++ b/frontend/src/scenes/error-tracking/issue/Metadata.tsx @@ -1,11 +1,9 @@ import { IconInfo } from '@posthog/icons' -import { LemonSkeleton, Link, Tooltip } from '@posthog/lemon-ui' -import clsx from 'clsx' +import { LemonSkeleton, Tooltip } from '@posthog/lemon-ui' import { useValues } from 'kea' import { TZLabel } from 'lib/components/TZLabel' -import { useResizeObserver } from 'lib/hooks/useResizeObserver' +import { ClampedText } from 'lib/lemon-ui/ClampedText' import { humanFriendlyLargeNumber } from 'lib/utils' -import { useEffect, useRef, useState } from 'react' import { errorTrackingIssueSceneLogic } from 'scenes/error-tracking/errorTrackingIssueSceneLogic' export const Metadata = (): JSX.Element => { @@ -35,16 +33,7 @@ export const Metadata = (): JSX.Element => { return (
- {issue && issue.description ? ( - - ) : ( - - )} + {issue && issue.description ? : }
@@ -85,41 +74,3 @@ export const Metadata = (): JSX.Element => {
) } - -const ClampedText = ({ text, maxLines }: { text: string; maxLines: number }): JSX.Element => { - const [needsClamping, setNeedsClamping] = useState(false) - const [expanded, setExpanded] = useState(false) - const textRef = useRef(null) - const { height } = useResizeObserver({ ref: textRef }) - - useEffect(() => { - // debugger - if (textRef.current && height) { - const computedStyle = window.getComputedStyle(textRef.current) - const lineHeight = parseInt(computedStyle.lineHeight) - const maxHeight = maxLines * lineHeight - - const shouldClamp = height > maxHeight - setNeedsClamping(shouldClamp) - - if (shouldClamp && shouldClamp != needsClamping) { - setExpanded(false) - } - - // if (shouldClamp) { - // setExpanded(textRef.current.scrollHeight >= maxHeight) - // } else { - // setExpanded(false) - // } - } - }, [text, maxLines, height]) - - return ( -
-
- {text} -
- {needsClamping && setExpanded(!expanded)}>{expanded ? 'See less' : 'See more'}} -
- ) -} From 785a4917c8ff7fcc80478016f2a7ce1329b1ab35 Mon Sep 17 00:00:00 2001 From: David Newell Date: Thu, 13 Feb 2025 13:31:42 +0000 Subject: [PATCH 3/5] fixes --- .../src/lib/lemon-ui/ClampedText/ClampedText.stories.tsx | 8 ++++---- frontend/src/lib/lemon-ui/ClampedText/ClampedText.tsx | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/src/lib/lemon-ui/ClampedText/ClampedText.stories.tsx b/frontend/src/lib/lemon-ui/ClampedText/ClampedText.stories.tsx index bb32ead7e744e..ee336c2143aed 100644 --- a/frontend/src/lib/lemon-ui/ClampedText/ClampedText.stories.tsx +++ b/frontend/src/lib/lemon-ui/ClampedText/ClampedText.stories.tsx @@ -15,14 +15,14 @@ const meta: Meta = { } export default meta -const MediaTemplate: StoryFn = (props: ClampedTextProps) => { +const Template: StoryFn = (props: ClampedTextProps) => { return } -export const Base: Story = MediaTemplate.bind({}) -Base.args = { lines: 2, text: 'One line of text' } +export const SingleLine: Story = Template.bind({}) +SingleLine.args = { lines: 2, text: 'One line of text' } -export const MultiLine: Story = MediaTemplate.bind({}) +export const MultiLine: Story = Template.bind({}) MultiLine.args = { lines: 2, text: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', diff --git a/frontend/src/lib/lemon-ui/ClampedText/ClampedText.tsx b/frontend/src/lib/lemon-ui/ClampedText/ClampedText.tsx index a84842237c9e3..a3031b731d8e5 100644 --- a/frontend/src/lib/lemon-ui/ClampedText/ClampedText.tsx +++ b/frontend/src/lib/lemon-ui/ClampedText/ClampedText.tsx @@ -29,7 +29,7 @@ export const ClampedText = React.forwardRef(fu } if (isCssEllipsisApplied(elem)) { - if (!(showMore && isExpanded)) { + if (!showMore || !isExpanded) { setShowMore(true) } } else { From 9b6fe11a38ad85c37a526aa9e3a741c185836845 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 13 Feb 2025 13:45:07 +0000 Subject: [PATCH 4/5] Update UI snapshots for `chromium` (1) --- .../lemon-ui-clampedtext--base--dark.png | Bin 0 -> 1237 bytes .../lemon-ui-clampedtext--base--light.png | Bin 0 -> 1253 bytes .../lemon-ui-clampedtext--multi-line--dark.png | Bin 0 -> 10800 bytes .../lemon-ui-clampedtext--multi-line--light.png | Bin 0 -> 10704 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 frontend/__snapshots__/lemon-ui-clampedtext--base--dark.png create mode 100644 frontend/__snapshots__/lemon-ui-clampedtext--base--light.png create mode 100644 frontend/__snapshots__/lemon-ui-clampedtext--multi-line--dark.png create mode 100644 frontend/__snapshots__/lemon-ui-clampedtext--multi-line--light.png diff --git a/frontend/__snapshots__/lemon-ui-clampedtext--base--dark.png b/frontend/__snapshots__/lemon-ui-clampedtext--base--dark.png new file mode 100644 index 0000000000000000000000000000000000000000..5aaaed0252264f9f5c1a10ff85ef09f6869dc68e GIT binary patch literal 1237 zcmV;`1SPx(k4Z#9R9J=Wm~TuPXB@{LE;@BIgyaN7WYTPDaedKr*}#N`>N>I7+KKBLQ9E=) zYMfQOh>kkrmL^kbB9z)SwX?=;!DeyIx~MO@S*1d&PRz8g)TAl`ia89LNHws#y}0H= z)t&XES(fn4^WvW0^W5kAJm0$~{Gq`x8-%rcLI3pv{;vuLM^WM6C@LHrMLiFWPJg|w z?yIq}Kj-IXEf%v%^;xJ4ghC;LxB&nR2BW{fFH~3(DV3i*dGgoz_!tDe!q)-<07OSe z-@Es#SS+fn{6Zp;HZgsA*T6$=iTNN7{+tj4fYHLrNIEkWY@DT9` zDJz%|0RX71ET_?Ea`{JozaIc#x7&w@N37O|nVFfry}f(e$O{St0wJVrD;S0$2t}*vvXW77Ywr{5~<(s zzkmOCnJnYjvDDGg(Vm`Od`?xBW_fw}+_}QThu={s^4;#G>gq2yaU>EchGF`FgqjTq}S^e3J+~10Ffve!!Qmfe$(PoQr`FZe8kR^lO=dvEC+jt zy2NI)X*AW_5+c0b6#xK}$wUw&_}ykQnO?7#=uS^h;}=UyOLRIN0Knt%I2^Xg^kX3K z_w!>9(P%Up$!QH1Wgw5ogJF1RXqc$<_4TXO#V_egKuEkcHa4`{OSf--KQ%So-rlh- zA;RPFIGs+hSk%+=!smckEFK@9*l`8NkIObT)`>2LVY}KusDRXbNxU!&i;0OL!9oCl z&dxg*FIGlIMiNyRhE=LhO{O~}t}d4gL6G=(?##?A-T(lRk*`tMz^;H!r_dQp*bTLJ_CFc^#w1a)=&eDtV<&*x`mW^{M| zHZWi&|1N@}Xmhi{Xf$MHok~bZkV>VUou>2WcXwnc08tb*8e4R_#*FsmQWXylT6TncJRXgv#$agf?;j{FE&DgG#Kgq%^0KpMb5Rr>7%*F{*2|Z_DJd!4 zM4*NLkE5pWk9>*>2S-ui;3z5_97TnLqo{uX>)_7xc{v4}00000NkvXXu0mjf^GZ-3 literal 0 HcmV?d00001 diff --git a/frontend/__snapshots__/lemon-ui-clampedtext--base--light.png b/frontend/__snapshots__/lemon-ui-clampedtext--base--light.png new file mode 100644 index 0000000000000000000000000000000000000000..5e07ffd249cb959bb292d5926f68bb70df9c9313 GIT binary patch literal 1253 zcmVPx(pGibPR9J;${QTtu!zdsfFb%W=hAJ2hI5NR#z>x_?1CC4p4Y)5~zO=V@T3Ont zscO17yU(A$;Q#;sRI%X3jT>^ZiVO@4A3uKbaQC8$nfSqy#Y@dhEiKHg|Ni|;J6o6- z7#O~P{~jI|dFIU7uI|n~dv_HV7cQ8;Fh8%5x;F9i^KIU;k-BDLf;Vs8R9DwFG}NtI zznYnu8CeP*g=7O{6Id7+7^Y60{{R2~<;$0_v9U2QFv!Wtnwpt7JG<@JzSG0goidN0 z09IC3Dw>8BynXxj|NsA}dd z`@n&NcD4?xDjE^tQO}+|gR5M=Y=xtvi<+vYlauT6Wh?O5bmPVi1$kv^88~~FIwX2;=#bcATOtsn2?ODe(RQPZmymT3=DFzibaJbc8!z%)HzJEG9g7a92=J@cx54pTB%SMmu(H)6~@b{N=;xGbcnuM1q5Z4jkNf z;^Z+WC&#exFo>FI)21jYDy&|;^7@S{>o=@bRaKolWg?n6r_Y=a6cmIogoTAEH}Lb9 z4_)1z>gwtnHm)8qIOXPaKt$l!W{I+_}>b z@on3;$ji%r{_^4Dr*~>Om<^$RZg_RZS`3l@ci zh2pVQQc_Y#Na*?V7mA7s5X8X1@EgexQUQ?$N=Zoy3JIP*bp|eS_|Rb;9UX$^BZmTh zyMFxmQD4_kTUYb-+qWf)mtr-6iGhJ3J3I5=zkkuuamS7wfBg8#&KzxXW^i(HB_$;^G}Lu=U zS4^5XxwxqG&6_u}a&24-ZW zv9hw%*EPI+`AS7adFr&u*49=84Hp&>Zf$KYE3L4zvz<7pAD3MZA3mBsZN}oo3z(Ui z?d|O>EG?RwS|?4OfMx>Y=y)7?V6>A@CKwGkGQnuTkqJfvj!ZBbaAX1iF!p97R!^R= P00000NkvXXu0mjf))jJx literal 0 HcmV?d00001 diff --git a/frontend/__snapshots__/lemon-ui-clampedtext--multi-line--dark.png b/frontend/__snapshots__/lemon-ui-clampedtext--multi-line--dark.png new file mode 100644 index 0000000000000000000000000000000000000000..3507e66ab1acbca07a968ae3b700b8c3ae9b52bf GIT binary patch literal 10800 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 literal 0 HcmV?d00001 diff --git a/frontend/__snapshots__/lemon-ui-clampedtext--multi-line--light.png b/frontend/__snapshots__/lemon-ui-clampedtext--multi-line--light.png new file mode 100644 index 0000000000000000000000000000000000000000..2d52cc9971fd13b1e06abc50a41c38270e5bd55e GIT binary patch literal 10704 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 Date: Thu, 13 Feb 2025 14:06:54 +0000 Subject: [PATCH 5/5] Update UI snapshots for `chromium` (1) --- .../lemon-ui-clampedtext--single-line--dark.png | Bin 0 -> 1237 bytes .../lemon-ui-clampedtext--single-line--light.png | Bin 0 -> 1253 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 frontend/__snapshots__/lemon-ui-clampedtext--single-line--dark.png create mode 100644 frontend/__snapshots__/lemon-ui-clampedtext--single-line--light.png diff --git a/frontend/__snapshots__/lemon-ui-clampedtext--single-line--dark.png b/frontend/__snapshots__/lemon-ui-clampedtext--single-line--dark.png new file mode 100644 index 0000000000000000000000000000000000000000..5aaaed0252264f9f5c1a10ff85ef09f6869dc68e GIT binary patch literal 1237 zcmV;`1SPx(k4Z#9R9J=Wm~TuPXB@{LE;@BIgyaN7WYTPDaedKr*}#N`>N>I7+KKBLQ9E=) zYMfQOh>kkrmL^kbB9z)SwX?=;!DeyIx~MO@S*1d&PRz8g)TAl`ia89LNHws#y}0H= z)t&XES(fn4^WvW0^W5kAJm0$~{Gq`x8-%rcLI3pv{;vuLM^WM6C@LHrMLiFWPJg|w z?yIq}Kj-IXEf%v%^;xJ4ghC;LxB&nR2BW{fFH~3(DV3i*dGgoz_!tDe!q)-<07OSe z-@Es#SS+fn{6Zp;HZgsA*T6$=iTNN7{+tj4fYHLrNIEkWY@DT9` zDJz%|0RX71ET_?Ea`{JozaIc#x7&w@N37O|nVFfry}f(e$O{St0wJVrD;S0$2t}*vvXW77Ywr{5~<(s zzkmOCnJnYjvDDGg(Vm`Od`?xBW_fw}+_}QThu={s^4;#G>gq2yaU>EchGF`FgqjTq}S^e3J+~10Ffve!!Qmfe$(PoQr`FZe8kR^lO=dvEC+jt zy2NI)X*AW_5+c0b6#xK}$wUw&_}ykQnO?7#=uS^h;}=UyOLRIN0Knt%I2^Xg^kX3K z_w!>9(P%Up$!QH1Wgw5ogJF1RXqc$<_4TXO#V_egKuEkcHa4`{OSf--KQ%So-rlh- zA;RPFIGs+hSk%+=!smckEFK@9*l`8NkIObT)`>2LVY}KusDRXbNxU!&i;0OL!9oCl z&dxg*FIGlIMiNyRhE=LhO{O~}t}d4gL6G=(?##?A-T(lRk*`tMz^;H!r_dQp*bTLJ_CFc^#w1a)=&eDtV<&*x`mW^{M| zHZWi&|1N@}Xmhi{Xf$MHok~bZkV>VUou>2WcXwnc08tb*8e4R_#*FsmQWXylT6TncJRXgv#$agf?;j{FE&DgG#Kgq%^0KpMb5Rr>7%*F{*2|Z_DJd!4 zM4*NLkE5pWk9>*>2S-ui;3z5_97TnLqo{uX>)_7xc{v4}00000NkvXXu0mjf^GZ-3 literal 0 HcmV?d00001 diff --git a/frontend/__snapshots__/lemon-ui-clampedtext--single-line--light.png b/frontend/__snapshots__/lemon-ui-clampedtext--single-line--light.png new file mode 100644 index 0000000000000000000000000000000000000000..5e07ffd249cb959bb292d5926f68bb70df9c9313 GIT binary patch literal 1253 zcmVPx(pGibPR9J;${QTtu!zdsfFb%W=hAJ2hI5NR#z>x_?1CC4p4Y)5~zO=V@T3Ont zscO17yU(A$;Q#;sRI%X3jT>^ZiVO@4A3uKbaQC8$nfSqy#Y@dhEiKHg|Ni|;J6o6- z7#O~P{~jI|dFIU7uI|n~dv_HV7cQ8;Fh8%5x;F9i^KIU;k-BDLf;Vs8R9DwFG}NtI zznYnu8CeP*g=7O{6Id7+7^Y60{{R2~<;$0_v9U2QFv!Wtnwpt7JG<@JzSG0goidN0 z09IC3Dw>8BynXxj|NsA}dd z`@n&NcD4?xDjE^tQO}+|gR5M=Y=xtvi<+vYlauT6Wh?O5bmPVi1$kv^88~~FIwX2;=#bcATOtsn2?ODe(RQPZmymT3=DFzibaJbc8!z%)HzJEG9g7a92=J@cx54pTB%SMmu(H)6~@b{N=;xGbcnuM1q5Z4jkNf z;^Z+WC&#exFo>FI)21jYDy&|;^7@S{>o=@bRaKolWg?n6r_Y=a6cmIogoTAEH}Lb9 z4_)1z>gwtnHm)8qIOXPaKt$l!W{I+_}>b z@on3;$ji%r{_^4Dr*~>Om<^$RZg_RZS`3l@ci zh2pVQQc_Y#Na*?V7mA7s5X8X1@EgexQUQ?$N=Zoy3JIP*bp|eS_|Rb;9UX$^BZmTh zyMFxmQD4_kTUYb-+qWf)mtr-6iGhJ3J3I5=zkkuuamS7wfBg8#&KzxXW^i(HB_$;^G}Lu=U zS4^5XxwxqG&6_u}a&24-ZW zv9hw%*EPI+`AS7adFr&u*49=84Hp&>Zf$KYE3L4zvz<7pAD3MZA3mBsZN}oo3z(Ui z?d|O>EG?RwS|?4OfMx>Y=y)7?V6>A@CKwGkGQnuTkqJfvj!ZBbaAX1iF!p97R!^R= P00000NkvXXu0mjf))jJx literal 0 HcmV?d00001