From 38df35e18491b6b11ac9fbc58de20f9d91cde3ea Mon Sep 17 00:00:00 2001 From: Nik Tverd Date: Tue, 10 Sep 2024 22:27:16 +0500 Subject: [PATCH 1/3] feat: add multiline property to Label component --- src/components/Label/Label.scss | 49 ++++++++++- src/components/Label/Label.tsx | 11 ++- ...er-story-Multiline-dark-chromium-linux.png | Bin 0 -> 4051 bytes ...nder-story-Multiline-dark-webkit-linux.png | Bin 0 -> 3080 bytes ...r-story-Multiline-light-chromium-linux.png | Bin 0 -> 4120 bytes ...der-story-Multiline-light-webkit-linux.png | Bin 0 -> 3103 bytes .../Label/__stories__/Label.stories.tsx | 12 +++ .../Label/__stories__/LabelShowcase.scss | 4 - .../Label/__stories__/LabelShowcase.tsx | 78 +++++++++++++++++- .../Label/__tests__/Label.visual.test.tsx | 6 ++ 10 files changed, 151 insertions(+), 9 deletions(-) create mode 100644 src/components/Label/__snapshots__/Label.visual.test.tsx-snapshots/Label-render-story-Multiline-dark-chromium-linux.png create mode 100644 src/components/Label/__snapshots__/Label.visual.test.tsx-snapshots/Label-render-story-Multiline-dark-webkit-linux.png create mode 100644 src/components/Label/__snapshots__/Label.visual.test.tsx-snapshots/Label-render-story-Multiline-light-chromium-linux.png create mode 100644 src/components/Label/__snapshots__/Label.visual.test.tsx-snapshots/Label-render-story-Multiline-light-webkit-linux.png diff --git a/src/components/Label/Label.scss b/src/components/Label/Label.scss index deec1e89d0..8309e35328 100644 --- a/src/components/Label/Label.scss +++ b/src/components/Label/Label.scss @@ -26,7 +26,7 @@ $transition-timing-function: ease-in-out; &__text { @include mixins.text-body-1(); - display: flex; + display: inline-flex; align-items: baseline; margin: 0 var(--_--margin-inline); width: 100%; @@ -64,12 +64,13 @@ $transition-timing-function: ease-in-out; } &__addon { - display: flex; + display: inline-flex; align-items: center; justify-content: center; width: var(--_--height); - height: var(--_--height); + height: 100%; border-radius: var(--_--border-radius); + box-sizing: border-box; &_side_start, &_side_end { @@ -115,6 +116,11 @@ $transition-timing-function: ease-in-out; --_--margin-addon-end: 22px; } + &_xs.g-label_multiline { + --_--addon-padding-on-multiline: 5px; + --_--label-padding-on-multiline: 2px; + } + &_s { --_--height: 24px; --_--border-radius: var(--g-border-radius-s); @@ -123,6 +129,11 @@ $transition-timing-function: ease-in-out; --_--margin-addon-end: 26px; } + &_s.g-label_multiline { + --_--addon-padding-on-multiline: 5px; + --_--label-padding-on-multiline: 3px; + } + &_m { --_--height: 28px; --_--border-radius: var(--g-border-radius-m); @@ -130,6 +141,11 @@ $transition-timing-function: ease-in-out; --_--margin-addon-start: 32px; --_--margin-addon-end: 32px; } + + &_m.g-label_multiline { + --_--addon-padding-on-multiline: 6px; + --_--label-padding-on-multiline: 5px; + } } &_disabled { @@ -212,4 +228,31 @@ $transition-timing-function: ease-in-out; &__addon_type_button:focus-visible { outline: 2px solid var(--g-color-line-focus); } + + &_multiline { + height: min-content; + padding-block: var(--_--label-padding-on-multiline); + + #{$block}__text { + white-space: normal; + overflow: inherit; + text-align: start; + line-height: 18px; + } + + #{$block}__addon_side_end, + #{$block}__addon_side_start { + padding: var(--_--addon-padding-on-multiline); + width: auto; + align-items: start; + } + + #{$block}__addon_side_start { + inset-inline-start: 2px; + } + + #{$block}__addon_side_end { + inset-inline-end: 0; + } + } } diff --git a/src/components/Label/Label.tsx b/src/components/Label/Label.tsx index f217390805..8b9f95d4ae 100644 --- a/src/components/Label/Label.tsx +++ b/src/components/Label/Label.tsx @@ -56,6 +56,8 @@ export interface LabelProps extends QAProps { size?: 'xs' | 's' | 'm'; /** Browser title for Label */ title?: string; + /** Multiline available */ + multiline?: boolean; } export const Label = React.forwardRef(function Label( @@ -80,6 +82,7 @@ export const Label = React.forwardRef(function Label( onCopy, onClick, qa, + multiline, } = props; const hasContent = Boolean(children !== '' && React.Children.count(children) > 0); @@ -92,7 +95,12 @@ export const Label = React.forwardRef(function Label( const {copyIconSize, closeIconSize} = sizeMap[size]; const startIcon = icon && ( -
+
{icon}
); @@ -152,6 +160,7 @@ export const Label = React.forwardRef(function Label( size, interactive: isInteractive, disabled, + multiline, }, className, )} diff --git a/src/components/Label/__snapshots__/Label.visual.test.tsx-snapshots/Label-render-story-Multiline-dark-chromium-linux.png b/src/components/Label/__snapshots__/Label.visual.test.tsx-snapshots/Label-render-story-Multiline-dark-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..a289ae84dde106b0076e22d2df1cd9d69d95b9d3 GIT binary patch literal 4051 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 xLgf3+N#6KgnVKZ5)UShlGTL zj=;^JHiAeO?AHhP2~M2opSgk{>~3KS725l2y{43;3kiu);85cmVL7acv0y32@%9z( zB4=t97->3|rrxQu3IseHekgqCnt~`CE~TH2?n5ivv(Vd>=weLn!fd{OasOTAE^Vnk z_}Fzbn}d&SpPp+oeUIuCp_-29`xUWTW7|`)_dkYlA5SvOk?#s|^NWLQ$M5z&oC^{{ z^7`*Ygg6rlNH<~XzVl|sUKm$>Je+pG>zUfwN1hLlD~WymM^dMJcUEH+60W9uYKw+j zOYHX-0mxmKhEb^_Xd8seQCM%FlB2TfJQ{qA?DAaucK|9);b83P<1n~ZrZSF^5$RH% z>O=BSIJhr-&P*jq`H9Kr6lho4QLOUXm*)s+SOJ`9Ph-Y`S^O@}ymsWyhp}@#evz{x zDOWz%San7r-?_+wCemv)#W;cgefW>}QBfL|%N)OZz~1&{z6LH`*MXQ{%#LSB@Ab@AuMB`IqoJb4nJOZ*ij+39JU7*;ys zXw4F@H21y`V*vr)v4NXVZ}QXHkaN!D>)l=j#8j+&?aL6ibO%s0?8+(V?7fLY|c z2IzunL-bymx6E|*iWvCj>elYGr9fah8@m}lp|kJ& z#$$H5X?<0rnd^CMRjAUzW095Ml&T_56e zs%s7n4J@!LJO~haF==zntk*qfX?y^Ry8j79j9|){eCDB-(My|dmH9sF?dVB69lKhV zn%mi|gbq*Ai?5kG?@k@JAcZ-=p5Cv5N-r(ny%bnmaR=j5>uPwy0$Kpjtp?F<+QjU} z*H^ANZ8|Lyqz_c=RFx4vWhdp=`t25LS;SR#-|#{vSgLn@GitF-+*ag`Q7zBFpv79m zA;2HU8q%+|dQ7bVjU@!%{ldeW;XTSX4bRH#zkNqDFs^kfGIAzTy0`8iFax3rs-;WC zVyd9pqnJktXQH^Ey<{g18QIbK!*`T3uHSQLa=t78V+I<|7qO!cm`aeiF{1+=5gevSG|Dm^;uXEDf`c0iY`1j^-2YnTJJs8X3T#xu#abP8q75s*xc(uOde1WzP?{ zv3^gXhsj3+1+*bAw`5nN{fRGB=T{A&^mh@j;#H1=s?ysj>W(Q^Z?oSl#YOyNGL4zk9I3UK^yh?j=g! z&X-phjV%O%l~TL#S_sJDT7momKM+t%C32pE6i(ATOz}PY8lKWPoD{{Gsv~Skr!HH zs`Xpi%J7XqpC8QDjPi!^v%1E;?)bMgc?&OPqVxL~W>KMc1Fl+kxCe*HWf^d>&aQlw zVN8KrlvR`mgCI3xsSk2~W^Utf5J}_rqcg=-II)Ce{I+`d15Qa^GHITE35? zoeLO?F{2PdT>!4Hi`?LL{s3UnG-0z(QP83McF0Ivhc<9I_8_g60KrlZ$OEw!|*& z%{8wTzNSG`%kSt#@drezyIAXoteh7?>2(IfwA@b5gwyzMu6vUU-5x5AkXKlk3>K`M zO*WT!+&aQ>qk*}4|G6|5h1LjS&oots{vH(Gz?O~CB1tbTg6gBe$6Y~7^*7jo$J|FZ!&Wm)KqW`IN1cK-b5{${h3&#NA*d2 zs%)%T5m|IJ=~@2iBsK5zRFr<{?aD$PPW&i1+uYMu6#M5dkv|&#S(o~Ej`-`|FD0|F VxT+v4H-WVmg2NEdiYsoh{{{%N{Y(G= literal 0 HcmV?d00001 diff --git a/src/components/Label/__snapshots__/Label.visual.test.tsx-snapshots/Label-render-story-Multiline-light-chromium-linux.png b/src/components/Label/__snapshots__/Label.visual.test.tsx-snapshots/Label-render-story-Multiline-light-chromium-linux.png new file mode 100644 index 0000000000000000000000000000000000000000..523e67346d7c20d94def8b20aea4aa78a1dea13b GIT binary patch literal 4120 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 , name: 'Showcase', }; + +export const Multiline: Story = { + render: (args) => ( +
+
+ ), + args: { + children: 'Multiline label', + multiline: true, + }, +}; diff --git a/src/components/Label/__stories__/LabelShowcase.scss b/src/components/Label/__stories__/LabelShowcase.scss index 506ce99bf0..9978a6563a 100644 --- a/src/components/Label/__stories__/LabelShowcase.scss +++ b/src/components/Label/__stories__/LabelShowcase.scss @@ -14,9 +14,5 @@ display: grid; grid-template-columns: 1fr 1fr; gap: 10px; - & > * { - width: min-content; - margin-inline-start: unset; - } } } diff --git a/src/components/Label/__stories__/LabelShowcase.tsx b/src/components/Label/__stories__/LabelShowcase.tsx index 838ac5a8ca..be201b9d0a 100644 --- a/src/components/Label/__stories__/LabelShowcase.tsx +++ b/src/components/Label/__stories__/LabelShowcase.tsx @@ -79,8 +79,84 @@ export function LabelShowcase(args: LabelProps) { }, {children: 'Key', value: 'Value', type: 'close', closeButtonLabel: 'Close'}, {icon: icons('TickIcon', props.size)}, + { + children: 'Multiline ', + type: 'default', + multiline: true, + }, + { + children: 'Multiline', + icon: icons('TickIcon', props.size), + type: 'default', + multiline: true, + }, + { + children: 'Multiline', + type: 'close', + closeButtonLabel: 'Close', + multiline: true, + }, + { + children: 'Multiline', + icon: icons('TickIcon', props.size), + type: 'close', + closeButtonLabel: 'Close', + multiline: true, + }, + { + children: 'Multiline label short', + type: 'default', + multiline: true, + }, + { + children: 'Multiline label short', + icon: icons('TickIcon', props.size), + type: 'default', + multiline: true, + }, + { + children: 'Multiline label short', + type: 'close', + closeButtonLabel: 'Close', + multiline: true, + }, + { + children: 'Multiline label short', + icon: icons('TickIcon', props.size), + type: 'close', + closeButtonLabel: 'Close', + multiline: true, + }, + { + children: 'Multiline label very-very long', + type: 'default', + multiline: true, + }, + { + children: 'Multiline label very-very long', + icon: icons('TickIcon', props.size), + type: 'default', + multiline: true, + }, + { + children: 'Multiline label very-very long', + type: 'close', + closeButtonLabel: 'Close', + multiline: true, + }, + { + children: 'Multiline label very-very long', + icon: icons('TickIcon', props.size), + type: 'close', + closeButtonLabel: 'Close', + multiline: true, + }, ]; - return cases.map((label, i) => getLabel({key: i, ...props, ...label})); + return cases.map((label, i) => ( +
+ {getLabel({key: i, ...props, ...label})} +
+ )); }; return ( diff --git a/src/components/Label/__tests__/Label.visual.test.tsx b/src/components/Label/__tests__/Label.visual.test.tsx index b13df3ea33..ddc2876905 100644 --- a/src/components/Label/__tests__/Label.visual.test.tsx +++ b/src/components/Label/__tests__/Label.visual.test.tsx @@ -64,4 +64,10 @@ test.describe('Label', () => { await expectScreenshot(); }); + + test('render story: ', async ({mount, expectScreenshot}) => { + await mount(); + + await expectScreenshot(); + }); }); From 2563816976ad367e2e5723d2cdda00d4f3b9195d Mon Sep 17 00:00:00 2001 From: Nik Tverd Date: Tue, 1 Oct 2024 20:59:55 +0500 Subject: [PATCH 2/3] feat: add key-value for multiline --- src/components/Label/Label.scss | 4 +- .../Label/__stories__/Label.stories.tsx | 15 +++++--- .../Label/__stories__/LabelShowcase.scss | 1 + .../Label/__stories__/LabelShowcase.tsx | 38 +++++++++++++------ 4 files changed, 39 insertions(+), 19 deletions(-) diff --git a/src/components/Label/Label.scss b/src/components/Label/Label.scss index 8309e35328..cd45ddefba 100644 --- a/src/components/Label/Label.scss +++ b/src/components/Label/Label.scss @@ -117,8 +117,8 @@ $transition-timing-function: ease-in-out; } &_xs.g-label_multiline { - --_--addon-padding-on-multiline: 5px; - --_--label-padding-on-multiline: 2px; + --_--addon-padding-on-multiline: 4px; + --_--label-padding-on-multiline: 1px; } &_s { diff --git a/src/components/Label/__stories__/Label.stories.tsx b/src/components/Label/__stories__/Label.stories.tsx index 61fbf923b4..056de726cd 100644 --- a/src/components/Label/__stories__/Label.stories.tsx +++ b/src/components/Label/__stories__/Label.stories.tsx @@ -155,11 +155,6 @@ export const LinkWrapper: Story = { }, }; -export const ShowcaseStory: Story = { - render: () => , - name: 'Showcase', -}; - export const Multiline: Story = { render: (args) => (
@@ -171,3 +166,13 @@ export const Multiline: Story = { multiline: true, }, }; + +export const ShowcaseStory: Story = { + render: () => , + name: 'Showcase', +}; + +export const MultilineShowcaseStory: Story = { + render: () => , + name: 'Showcase (multiline)', +}; diff --git a/src/components/Label/__stories__/LabelShowcase.scss b/src/components/Label/__stories__/LabelShowcase.scss index 9978a6563a..adca29cf9e 100644 --- a/src/components/Label/__stories__/LabelShowcase.scss +++ b/src/components/Label/__stories__/LabelShowcase.scss @@ -4,6 +4,7 @@ .grid { display: grid; gap: 30px; + width: min-content; } .header { diff --git a/src/components/Label/__stories__/LabelShowcase.tsx b/src/components/Label/__stories__/LabelShowcase.tsx index be201b9d0a..71d91b7f69 100644 --- a/src/components/Label/__stories__/LabelShowcase.tsx +++ b/src/components/Label/__stories__/LabelShowcase.tsx @@ -22,17 +22,21 @@ const icons = (id: 'TickIcon' | 'GearIcon' | '-', size: 'xs' | 's' | 'm' = 'xs') }[id]; }; -export function LabelShowcase(args: LabelProps) { - const themes = [ - 'normal', - 'info', - 'success', - 'warning', - 'danger', - 'utility', - 'unknown', - 'clear', - ] as const; +type LabelShowcaseProps = LabelProps & {multiline?: boolean}; + +export function LabelShowcase({multiline, ...args}: LabelShowcaseProps) { + const themes = multiline + ? (['normal'] as const) + : ([ + 'normal', + 'info', + 'success', + 'warning', + 'danger', + 'utility', + 'unknown', + 'clear', + ] as const); const sizes = ['xs', 's', 'm'] as const; const getLabel = ({...props}: WithKey) =>