From 29ec1b552e5c71916129f8cc5a4f71431a192b96 Mon Sep 17 00:00:00 2001 From: Steven VAIDIE Date: Fri, 11 Sep 2020 15:30:07 +0200 Subject: [PATCH] RAC-225: DSM checkbox (#12686) RAC-225: Add Checkbox component Co-authored-by: StevenVAIDIE Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: StevenVAIDIE --- .github/workflows/dsm-test.yml | 12 +- akeneo-design-system/.storybook/main.js | 3 +- akeneo-design-system/.storybook/preview.tsx | 10 +- akeneo-design-system/package.json | 7 +- .../components/Checkbox/Checkbox.stories.mdx | 87 ++++++++++ .../src/components/Checkbox/Checkbox.tsx | 131 +++++++++++++++ .../src/components/Checkbox/Checkbox.unit.tsx | 33 ++++ .../components/Checkbox/Checkbox.visual.tsx | 37 ++++ ...kbox-component-varying-by-state-1-snap.png | Bin 0 -> 7052 bytes ...x-component-varying-on-disabled-1-snap.png | Bin 0 -> 6108 bytes ...rd-checkbox-component-correctly-1-snap.png | Bin 0 -> 1875 bytes .../src/components/Dummy/Dummy.stories.mdx | 8 +- .../src/components/Dummy/Dummy.tsx | 2 +- ...onent-varying-by-size-correctly-1-snap.png | Bin 6156 -> 6310 bytes ...onent-varying-by-type-correctly-1-snap.png | Bin 4381 -> 4472 bytes akeneo-design-system/src/components/index.ts | 1 + akeneo-design-system/src/icons/CheckIcon.tsx | 19 +++ .../src/icons/PartialCheckIcon.tsx | 25 +++ akeneo-design-system/src/icons/index.ts | 2 + akeneo-design-system/src/index.ts | 1 + akeneo-design-system/src/shared/global.ts | 4 + akeneo-design-system/src/shared/test-util.tsx | 14 ++ akeneo-design-system/src/theme/index.ts | 1 + akeneo-design-system/src/theme/pim/index.ts | 54 ++++++ akeneo-design-system/src/theme/theme.ts | 60 +++++++ akeneo-design-system/yarn.lock | 159 +++++++++++++++++- 26 files changed, 650 insertions(+), 20 deletions(-) create mode 100644 akeneo-design-system/src/components/Checkbox/Checkbox.stories.mdx create mode 100644 akeneo-design-system/src/components/Checkbox/Checkbox.tsx create mode 100644 akeneo-design-system/src/components/Checkbox/Checkbox.unit.tsx create mode 100644 akeneo-design-system/src/components/Checkbox/Checkbox.visual.tsx create mode 100644 akeneo-design-system/src/components/Checkbox/__image_snapshots__/checkbox-visual-tsx-checkbox-visual-tests-renders-checkbox-component-varying-by-state-1-snap.png create mode 100644 akeneo-design-system/src/components/Checkbox/__image_snapshots__/checkbox-visual-tsx-checkbox-visual-tests-renders-checkbox-component-varying-on-disabled-1-snap.png create mode 100644 akeneo-design-system/src/components/Checkbox/__image_snapshots__/checkbox-visual-tsx-checkbox-visual-tests-renders-standard-checkbox-component-correctly-1-snap.png create mode 100644 akeneo-design-system/src/icons/CheckIcon.tsx create mode 100644 akeneo-design-system/src/icons/PartialCheckIcon.tsx create mode 100644 akeneo-design-system/src/icons/index.ts create mode 100644 akeneo-design-system/src/shared/test-util.tsx create mode 100644 akeneo-design-system/src/theme/index.ts create mode 100644 akeneo-design-system/src/theme/pim/index.ts create mode 100644 akeneo-design-system/src/theme/theme.ts diff --git a/.github/workflows/dsm-test.yml b/.github/workflows/dsm-test.yml index 063c9f2edce5..66057a057686 100644 --- a/.github/workflows/dsm-test.yml +++ b/.github/workflows/dsm-test.yml @@ -25,6 +25,12 @@ jobs: run: cd akeneo-design-system && yarn test:visual:run id: visual_test_execution + - uses: actions/upload-artifact@v2 + if: failure() + with: + name: test-folder + path: akeneo-design-system/src + # Update visual by doing a pull request - name: Update visual tests if: failure() && steps.visual_test_execution.outcome == 'failure' @@ -74,9 +80,3 @@ jobs: A new version of the staging env has been deployed :tada: Check it out here: https://samirboulil.github.io/dsm/${{ github.event.number }}/ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - - uses: actions/upload-artifact@v2 - if: failure() - with: - name: test-folder - path: akeneo-design-system/src diff --git a/akeneo-design-system/.storybook/main.js b/akeneo-design-system/.storybook/main.js index c5a0a7a627d4..cc1d43b88338 100644 --- a/akeneo-design-system/.storybook/main.js +++ b/akeneo-design-system/.storybook/main.js @@ -5,6 +5,7 @@ module.exports = { ], "addons": [ "@storybook/addon-links", - "@storybook/addon-essentials" + "@storybook/addon-essentials", + "themeprovider-storybook/register" ] } diff --git a/akeneo-design-system/.storybook/preview.tsx b/akeneo-design-system/.storybook/preview.tsx index 2da5ad0db47f..bd6de2b7c0f7 100644 --- a/akeneo-design-system/.storybook/preview.tsx +++ b/akeneo-design-system/.storybook/preview.tsx @@ -1,9 +1,17 @@ import React from 'react'; -import {addDecorator} from '@storybook/react'; +import {addDecorator, addParameters} from '@storybook/react'; +import { withThemesProvider } from "themeprovider-storybook"; import {StoryStyle} from '../src/shared/global'; +import {pimTheme} from '../src/theme/pim'; addDecorator(story => ( <> {story()} )); + +addDecorator(withThemesProvider([pimTheme])) + +addParameters({ + viewMode: 'docs', +}); diff --git a/akeneo-design-system/package.json b/akeneo-design-system/package.json index 9d72f483201a..d5a6b0000520 100644 --- a/akeneo-design-system/package.json +++ b/akeneo-design-system/package.json @@ -15,8 +15,8 @@ "test:visual:run": "jest --config ./jest.visual.config.js", "test:unit:watch": "jest --watch", "eslint": "eslint --config .eslintrc.json --quiet src/**/*.tsx", - "lint:fix": "prettier --config .prettierrc.json --parser typescript --write \"./src/**/*.ts\";", - "lint:check": "prettier --config .prettierrc.json --parser typescript --check \"./src/**/*.ts\" && eslint --config .eslintrc.json --quiet src/**/*.{ts,tsx}", + "lint:fix": "prettier --config .prettierrc.json --parser typescript --write \"./src/**/*.{ts,tsx}\";", + "lint:check": "prettier --config .prettierrc.json --parser typescript --check \"./src/**/*.{ts,tsx}\" && eslint --config .eslintrc.json --quiet src/**/*.{ts,tsx}", "storybook:start": "start-storybook -p 6006", "storybook:ci": "start-storybook -p 6006 --ci", "storybook:build": "build-storybook", @@ -41,7 +41,7 @@ "@storybook/addon-actions": "^6.0.4", "@storybook/addon-essentials": "^6.0.4", "@storybook/addon-links": "^6.0.4", - "@storybook/react": "^6.0.4", + "@storybook/react": "^6.0.21", "@testing-library/jest-dom": "^5.11.3", "@testing-library/react": "^10.4.8", "@types/expect-puppeteer": "^4.4.3", @@ -67,6 +67,7 @@ "rollup-plugin-babel": "^4.4.0", "rollup-plugin-commonjs": "^10.1.0", "rollup-plugin-node-resolve": "^5.2.0", + "themeprovider-storybook": "^1.6.2", "ts-jest": "^26.2.0", "typescript": "^4.0.2" } diff --git a/akeneo-design-system/src/components/Checkbox/Checkbox.stories.mdx b/akeneo-design-system/src/components/Checkbox/Checkbox.stories.mdx new file mode 100644 index 000000000000..3772a5f1a239 --- /dev/null +++ b/akeneo-design-system/src/components/Checkbox/Checkbox.stories.mdx @@ -0,0 +1,87 @@ +import { useState } from 'react'; +import { Meta, Story, ArgsTable, Canvas } from '@storybook/addon-docs/blocks'; +import { action } from "@storybook/addon-actions"; +import { Checkbox } from "./Checkbox.tsx"; + + + +# Checkbox + +## Usage +The checkboxes are applied when users can select all, several, or none of the options from a given list. + +### Checkbox states +The checkbox control allows three states: selected, unselected, and undetermined. The undetermined state comes into play when the checkbox contains a sublist of selections, some of which are selected, and others aren't. + +Users must be able to check the box by clicking directly on the box or by clicking on its label. + +### Content +#### Title + +If necessary, a header can accompany a set of checkboxes to provide more context or clarity. + +#### Labels + +Always use clear and concise labels for the checkboxes. The labels appears on the right of the checkboxes. + +## Playground + +Use this playground to test the checkbox component + + + + {(args) => { + return ; + }} + + + + + +## Variation on state + + {(args) => { + return ( + <> + + + + + ) + }} + + +## Variation on disabled + + {(args) => { + return ( + <> + + + + + ) + }} + + +## Animation + + {(args) => { + const [checked, setChecked] = useState(true); + return ( + setChecked(newCheck)}/> + ) + }} + diff --git a/akeneo-design-system/src/components/Checkbox/Checkbox.tsx b/akeneo-design-system/src/components/Checkbox/Checkbox.tsx new file mode 100644 index 000000000000..0973087e89ae --- /dev/null +++ b/akeneo-design-system/src/components/Checkbox/Checkbox.tsx @@ -0,0 +1,131 @@ +import React from 'react'; +import styled, {css, keyframes} from 'styled-components'; +import {AkeneoThemedProps, getColor} from '../../theme'; +import {CheckIcon, PartialCheckIcon} from '../../icons'; + +const checkTick = keyframes` + to { + stroke-dashoffset: 0; + } +`; + +const uncheckTick = keyframes` +to { + stroke-dashoffset: 20px; + } +`; + +const Container = styled.div` + display: flex; +`; + +const TickIcon = styled(CheckIcon)` + animation: ${uncheckTick} 0.2s ease-in forwards; + opacity: 0; + stroke-dasharray: 0px; + stroke-dashoffset: 0; + transition-delay: 0.2s; + transition: opacity 0.1s ease-out; +`; + +const CheckboxContainer = styled.div<{checked: boolean; readOnly: boolean} & AkeneoThemedProps>` + background-color: transparent; + height: 20px; + width: 20px; + border: 1px solid ${getColor('grey80')}; + border-radius: 3px; + outline: none; + background-color: ${getColor('grey20')}; + + ${(props) => + props.checked && + css` + background-color: ${getColor('blue100')}; + ${TickIcon} { + animation-delay: 0.2s; + animation: ${checkTick} 0.2s ease-out forwards; + stroke-dashoffset: 20px; + opacity: 1; + transition-delay: 0s; + } + `} + + ${(props) => + props.checked && + props.readOnly && + css` + background-color: ${getColor('blue20')}; + border-color: ${getColor('blue40')}; + `} + + ${(props) => + !props.checked && + props.readOnly && + css` + background-color: ${getColor('grey60')}; + border-color: ${getColor('grey100')}; + `} +`; + +const LabelContainer = styled.div<{readOnly: boolean} & AkeneoThemedProps>` + color: ${getColor('grey140')}; + font-weight: 400; + font-size: 15px; + padding-left: 10px; + + ${(props) => + props.readOnly && + css` + color: ${getColor('grey100')}; + `} +`; + +type CheckboxProps = { + /** + * State of the Checkbox + */ + checked: boolean; + + /** + * Displays the value of the input, but does not allow changes.s + */ + readOnly?: boolean; + + /** + * The undetermined state comes into play when the checkbox contains a sublist of selections, + * some of which are selected, and others aren't. + */ + undetermined?: boolean; + + /** + * Provide a description of the Checkbox, the label appears on the right of the checkboxes. + */ + label?: string; + + /** + * The handler called when clicking on Checkbox + */ + onChange?: (value: boolean) => void; +}; + +/** + * The checkboxes are applied when users can select all, several, or none of the options from a given list. + */ +const Checkbox = ({label, checked, onChange, undetermined = false, readOnly = false}: CheckboxProps) => { + if (undefined === onChange && false === readOnly) { + throw new Error('A Checkbox element expect an onChange attribute if not readOnly'); + } + + const handleChange = () => onChange && !readOnly && onChange(!checked); + + return ( + + + {undetermined ? : } + + {label ? {label} : null} + + ); +}; + +export {Checkbox}; diff --git a/akeneo-design-system/src/components/Checkbox/Checkbox.unit.tsx b/akeneo-design-system/src/components/Checkbox/Checkbox.unit.tsx new file mode 100644 index 000000000000..9bdc9b20f6a4 --- /dev/null +++ b/akeneo-design-system/src/components/Checkbox/Checkbox.unit.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import {fireEvent, render} from '../../shared/test-util'; +import {Checkbox} from './Checkbox'; + +it('it calls onChange handler when user clicks on checkbox', () => { + const onChange = jest.fn(); + const {getByText} = render(); + + const checkbox = getByText('Checkbox'); + fireEvent.click(checkbox); + + expect(onChange).toBeCalledWith(false); +}); + +it('it does not call onChange handler when read-only', () => { + const onChange = jest.fn(); + const {getByText} = render(); + + const checkbox = getByText('Checkbox'); + fireEvent.click(checkbox); + + expect(onChange).not.toBeCalled(); +}); + +it('it cannot be instantiated without handler when not readonly', () => { + jest.spyOn(console, 'error').mockImplementation(() => { + // do nothing. + }); + + expect(() => { + render(); + }).toThrow('A Checkbox element expect an onChange attribute if not readOnly'); +}); diff --git a/akeneo-design-system/src/components/Checkbox/Checkbox.visual.tsx b/akeneo-design-system/src/components/Checkbox/Checkbox.visual.tsx new file mode 100644 index 000000000000..962ecf280b42 --- /dev/null +++ b/akeneo-design-system/src/components/Checkbox/Checkbox.visual.tsx @@ -0,0 +1,37 @@ +import 'expect-puppeteer'; + +import {toMatchImageSnapshot} from 'jest-image-snapshot'; + +expect.extend({toMatchImageSnapshot}); + +describe('Checkbox visual tests', () => { + it('Renders standard checkbox component correctly', async () => { + await page.goto('http://localhost:6006/iframe.html?id=components-checkbox--standard'); + const root = await page.$('#root'); + if (null === root) return; + + const image = await root.screenshot(); + + expect(image).toMatchImageSnapshot(); + }); + + it('Renders checkbox component varying by state', async () => { + await page.goto('http://localhost:6006/iframe.html?id=components-checkbox--state'); + const root = await page.$('#root'); + if (null === root) return; + + const image = await root.screenshot(); + + expect(image).toMatchImageSnapshot(); + }); + + it('Renders checkbox component varying on disabled', async () => { + await page.goto('http://localhost:6006/iframe.html?id=components-checkbox--disabled'); + const root = await page.$('#root'); + if (null === root) return; + + const image = await root.screenshot(); + + expect(image).toMatchImageSnapshot(); + }); +}); diff --git a/akeneo-design-system/src/components/Checkbox/__image_snapshots__/checkbox-visual-tsx-checkbox-visual-tests-renders-checkbox-component-varying-by-state-1-snap.png b/akeneo-design-system/src/components/Checkbox/__image_snapshots__/checkbox-visual-tsx-checkbox-visual-tests-renders-checkbox-component-varying-by-state-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..0db830488c1f9de0b0fa6701a93dad83ea8e7239 GIT binary patch literal 7052 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 RCZs>x)K$RBr4OuL{2NHK*K7a) literal 0 HcmV?d00001 diff --git a/akeneo-design-system/src/components/Checkbox/__image_snapshots__/checkbox-visual-tsx-checkbox-visual-tests-renders-checkbox-component-varying-on-disabled-1-snap.png b/akeneo-design-system/src/components/Checkbox/__image_snapshots__/checkbox-visual-tsx-checkbox-visual-tests-renders-checkbox-component-varying-on-disabled-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..5841452d56d9d274626a40c0456600a6abc83373 GIT binary patch literal 6108 zcma)AcT^MIwogQ{A*g^L=7Uc_ilFo+B`Q^=Nk_UgQCdK0p@{<01*AkEu>m3o(o5(F z7zji}YN%2oLg)}6lzW2S`_^0U-nZ`jkxb@H&YZLN>|faty4va|j&U4=Kp-b>XsGBx zAavjqVswNaeEQTbZGtbTr=I$CNPZ`51_EJAzM*o>z$cwNZ0c#CzC~JcOS*4Wx^T}b zkM&0I(+0B%G<=t$sk1tysrgw2Pp*FK3tchFa#QH;V$>-iBPQVVGS+9#o_~6^NctH0 zRc1*KU($z8b8EZf=Wp64#SCo)a6dbljwdPjR^Zh6CE{?R47MI(cxTa@!stm+n305i zrS`?+L*bD;+_a;Pp?&gh>ShwVucf?n)TVAjSy>{!;InA(MONtk4eGJJ((D&nZRJ-d zx#}In5+@49*rFZ&mO4c{a3y(rTcdledw9yA1lw2VyH2)IzZzFZAnaicKR-))&!0e) z?;$xEbVQ}742d`u*D|(5+~-z|Ws7TZLdq<`q*i46bm881O5Mat6>bUHeSZOg-Kg7J z;7Cg|d%-gG*TryyiLF^jV=hR$v*D{5* zn3`Ko!MCxV8`bbyxkcaM?|m=0uo0h{6Phu*iz8{;$|~U4J!=0BB8qy&OKcdrDNL>n zvk_I0zM)Kxut?nFvRy!Lw@wg;DprDXP>!-N>8inVIah8oTop&X3v!QMs%HqZ(Y=$d z?AjdA z_w08udig8YQhwfm4By;7$MHbup34X57;aU69uDJSiG5C{d>bB6u?b{^6t6@vFvKvM z57bYUcot>G4t^-gFu~a+fT?{HBSjRG0dE&tn!e8$o&KQD&oQ%(f)#D0 zW^|LJttF}gM1kX|`_`mciB!*`j|Vz!RFRiRx&U`us14SP)2HPrHd&c#M?alBHgkWg zZZpVcB|IXp!$DD(nt17vf$@tmFS(!hKJud^L8$E&S;j#WJ1HfJnAz4@L|1o@ru(Ce z(lt@A#nwd6)%5$X-w804w>OwQVl{ZdN{-yKz84aKGu@qf;+h^yN_(r{%&30%VAix; zcb5vn=CV>jnnZ>cHTL}Qde=|BFq^qai`$kZiRA;%KQho>7u%!Uu`q*Vwh4s1Z`H}6 znNb5P)v1WPLznqow505)iqUY?fG6gk`#>w#Kn0fNO-A~8<0S*V7^qCldmSG)9uKB< zOk2Rsii-M&B8#iap!IB4!$UoR^6}O@EKoGbWaDMGs~ka z1*2a=XOz!j7Yv33DkHegqUxHxuUM&}Jqz3Pyg8HlU4}R%n?M_s25-x>k$>MxiAj-H z^9ohrX(Mv9-_9?cRy-c7b1V?)DAYSBG2%(UiHdqhN2$~N=#9<9pkU`Zwx|nHm7A(< zOo(rBHVUIri>*;4%G^13xxesA7Mf?@)>Ov2^WNMW6PU^jm2bvfvrWSvCg!C}Mwbkx zY4R!gQ&^(fa}V;7Hnz4b?r`MJfIP9pE)N)w>fL#v<7h^w6c;7bN3}dB60cz$kRuR` z|C4cahE=wk3qOuB_{mJa;8@#Q|B>dhpxy{L^0a8$z4wX@KPQ}eWg3zBphS6@7Q@bq zw1(SUl`M;BB@eB&I!njzH2H0WW+nyL%FapqRlP*?ll_VEK4bkNBWLnHhI?)CTIy?L z5_dyGs-3H_FK6yQ;1!i(s{f9cNN1E^z|6j?emAzM_Ny=br5!tcL(-!nD}+N(R;wT_ zV(Ntaf!*#NcFSSLDhhz-rV09@&&RhX>JbC${CKgOfab`PIPOF!$)XXuC8cGC*XZ32 zLwASSex;!mk&t9*X`GkYk|WAAYR)oc!BYv&D8WMPbUtlrYQAm3r2H1j8FR2=m~ygs zK(lOA8R~HKQ3K^=gO{SBKC7ko!-kX3v{&={>+%Z4q~?1QT6pvScW#TpjFjhz9A*W z%|;w0AlR9W%{?3ZD^ky4nyvET8l!f2MrRp4UgT1j(|fsVZhI$%9-P~#;k>+?k0hB8 z9%5{&{$OJB>e`sZ+bZ`3xed zpOqu4(=MotR4WG^HQ7H6l*cpXZhqxj*~;;0tVaa99eqYSz7!D5lV|NNRO5Qr$KgLq zN;7!b2j5Bdp&ozV{~K?&aMB@H2J6f07tX-VPmO(gDcJEy&+rq)wTQhr zaFuq?B>QdX-@m6Zf$*_4;pyLg{()0IS2cd@wlp`>Ar%1J*Ch3FG{GG2^a1;L#960S=mlMjx@X>tAvoQZVf-fOwtl-$T#h;1F!#u-?NbnpO|KP#xgt1>&l*7}5v)T{Z zp*m7EQ9_@^XWonvTc?|g@p&Gmipj^Qcn_P>(8CaF(2K_r}5CiItJtMV6l!3M( zx<#wq?u9}-6opK;SO>4cSI$d^sq>qf+!=53)&a##@y*6&yzb%`K4hFDAoOEy#>j8s zgqYk8OL$XD&br#gpfA)!Lfz}avXI`amvk{Jk0xZlc>0)rSQjBt?6w3cT(PH)sef5V z&dfW%5rrQP9@tc+4{JG^?>y!)C^w*|?qWEQzxU)niU+y*K+i*v`ZamF^qG5aa%SK2&d zlpD&gzp_mo#n9C|l)969cLJyo_WF$4^M2Y=E4!79uys;mHxNW4Gfu4z#qMh@ikB@a zwS1kXZWcMeuNs>7PCW z!M(d?eIK3N!m;eR1438n^&oiL93F@{9IVa*)yDWom1S{o>U4UpV8iXG)sv)6%FrLV z1a_Q=gbb$L&&d~PAbWi6x}ziR^r@ocrtE1RQ7Hl{mM`+S=aTPm`i%47OgU%dB8V~x zIfx^yO{`V?oVm|eQPnxDr(c% zPkISON@HIBZ*6h)n&rBXZB4~)voThObx@nP|A^`$bv+O}_9~#7vu^~k!|RsT9Ma)1 zyoqg22*n*tGg~sA_Ir+)Pw9>#&QoBP$-gRVgy94o(;Ltr?87H*%XjbRwh3Iu4_9)= zerD$kXxwfTkJpF>!X_VaN7xkmV>5vB`go0ctHW=_v7C6I-dP;cuWZRcm(UWZzqum^ zlWr_Xg&a_MBbL5yEE4ZK5QR*`7jQna3C0}^s`d%gxjpW2MZA}kl6*0HAUmplmoRRh zgC@3X@-cJOA|sop3=brF`UmV>z7*2~;>&zYeRD3?P4H4%cJW6jrnNa~HlQFTMT7TK ztpUr`>EARC7lafI8_k7pvzrK`0SqU3)kPL@*OLFT3*d<+P$%5RmB$6z8>BiP!kkUR zTgeBlT@*`-&r8K`ETtXvl~ZD%dsEnvF`KiUu2ffIAeZUK81Axn{hFopA>RQXMb}y` z%)7UxXqtEU%WDMQw`AMYXOJ9bbJE;2yLS4sh|<32*}MTg$&d+05MI1&(`%uVFt7DW z0eW+Cqb4suyaKt0^ziim-dDZ#G&N;vqh`{9`tuz7IJx_ybqJD4%_|T&hmg<7y-b?+ zW}2C~-$Hs+TwT=SV;$yA@Ukwo8~;Rn)*@|s$CBrC%i7xr8yy94q{J`u&8qEXwv57HhwH?`CH1kVO%f3 zHW3H>)(wsWltO?KPBTMnE6ISA$un<$U~bk_KuzVk`3Zg@WW5s*vB$`qH`LBSH?@Cr zT3D-i29SSw`4UL@h33tN-coeB7Ps5*+uSMnBMmd3x(9kck@gB+Pamw=QO?VA8Kd}B zY+&aDbgsAkE{RzA?!G64=wFRBX;w@;pH5C+e_*3#OXG-VU&eR%;-IWFQj5o^|7Si- z{mV#VNo9*`VNgfGX6)04{NF4ai3jG}s4>mig=?4YrWx@@$ZM^eo*8E~v}k;)BHp2A zI@SW24!M1IsfiWJn2Y*m&Tn`KrD$aEd%VexU2VE|kG7I$U*fZxxBh#E{%?r>&=_!Z zT@g;w*W;BBt@xQsen-E`EWE;l`%T0Sra;T3qRd{^WS)s5K6-Ec+WqNLYcb^Ff&JCR z{=EV$|C$s(qvGb_#R>~xqb070W&BH_;Lp82;#w|Y3mtZK9K01#TkVmSD>GlSJXmT* z+1ws=b>Nm#+Fe~1F-rf_5&&$egAD+Jjvo`Gyf^mqwWo$ueqEqf(s&ntc$NAewT972 z3*I}53KlLtn}}P@(%;VwPs?%^^K*Q$Nzq0(*9fxPX+L78R?~za;2Gjv>9ckUqD`xF z2N=U+^4HZqXtU5g*W?&F2eaW8z2%QgYuq*myfZfAme;qWSt52NC1|14D0oZxsLMFC2qH!AraUijsW#{0pD0#9n(~2wjjp4bV;*T~uqvyOiPXg#$tmy^~29Vf|X$Lr$#ZRclS!!tQ<5Sb<%S#1Z=w^q2 z-DgavkqFrMzI0DX7U%<5O(@QF(4+_F8f zSs9odl538Yx*C|zRY#yxfb*@d;>zzm_%OaSsUTB_)F>m|3PcAHYQz=yu??3uI>{Nl zo^|Jg&`scy0WK$Ma)6+oKBn%gAg4~qIdd~|84Oe#8eda2?b03vcD`T^`=2Ow<7y$4 zlR-;VOs>7o|7%RQ&0&qR^00_gsV_+&TFs%A8`Z9z52eZSyAO%#Z`0Vr3KP9meY>np>>+ab>`T?v-{E-N3I_NxrhKuN~odY4@pKGt?S)#9h zdej#4fPQWOe_uMyd&e2qcGpv=^Vc9fB-D3+IwE8^DpETb@Z+l&_fk`inp#^w03Y5& zdJ>knxIJl?X;5gzP%tJ{81zfE`bimqu%d6IR}Y-vtD@@E!4Kj27FlFqZl&Zik?wd|WtlsE4&2+*DztjsrqH6+8jUFCJtcOswB ztx46}g}^Np>axfFtt;<$=`FbnT)BKHzZ1JtsSHZfe`8+oOp5VQ&CaE@HEfBbQ8&;$ z0ZZ?e_2!8Pe|(pr42)+}@I7bdIAY~&+<@~HUFYy&H63FKMr?)~@-P#O z+Dr@qtt4%X3U}o~z_;I|No!1%O3kNZ;ZiFMKx$G+R|G@^>q(EA9>g+9F+3S-yD|{C zfPR4D{O3{xAV6aYUi>n?T#D5sTmmmX3S~73eoRhpyf5%wi;xfjcn5kj-9$LPxcP6; z0BRUNN*~Uzx4u@9@!c?mCI<0vGd@^^m=rZyNM;Lg3?q!_EKSp<=u5&93evu>`hjk% z98lV#S2M9VURcHXgR6XtqSy)_Ucc2K1*AE+beD(4#v$-=HH-`5g-yCA*`ntjvlb%? z8l|TqTD;b{{vW?BzMvrtJ+QHZbYzF2Ur|O*#{c94mKMAn+GXEuv~6);Hs_`18T|=B zz_8P^uugkqO?;$VQ$&6Ur82cv1R{ewKFS7S(vn+#WlUW@97A5KkoC@rIak9ZaPiA| z8Dfg~`eBm%W*G%)WnLRWn4JdF;VDm{Vxg5rc1_;|cWuU4dwaPkO7jH^se8DG;p!t* zL5Y0813L^9d;`u`Zrf6*7-GA>G2HlZ;1wfn(>)}%t8 zeF{vFn+_Xfj@H84y*qLwln0!A)kSjukAq}r5(N+ktd#@L!wT+t(CgDhhJZjYWbRu# dZq(`?^!ZAs6L%lwDrnb3Zm4Rj%;&6 literal 0 HcmV?d00001 diff --git a/akeneo-design-system/src/components/Checkbox/__image_snapshots__/checkbox-visual-tsx-checkbox-visual-tests-renders-standard-checkbox-component-correctly-1-snap.png b/akeneo-design-system/src/components/Checkbox/__image_snapshots__/checkbox-visual-tsx-checkbox-visual-tests-renders-standard-checkbox-component-correctly-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..b35718917ca175ab838f66da2271dd01deaf0f06 GIT binary patch literal 1875 zcmZWqdpy(YAOE795{Yw&g=)l!j{7C!D6GbDNyEX$$THXE7RFA7PLX?rHgZXED$)<3^Le(yh?&*zWl`Mf^Q`~7}C&mAX6n3M!a0ssIhTN@}G z0K^0-Ab&tyu*S@7=Lv#HBphZ1JRek=2Y{cXY@wDexT3}JSeLvgm7Wy}J;K4>nz;@t zO=!HLQdid2`yi6^mJOFh)G7F$hG_qtOZsei*;(d_AtgNBUcbQJ%rw)`fMoaZNuz%H zKfk7>fVGb{;y78UBLnsquT7><8Va_w!c`Gq}>gS;X%(SB2 z+&z;jn}e%$c10w`HOwcxPHSqDEd#+q_y$L-JKu89-X-|xo}CzhgKL{oXXlagdLc^P z+3kkXicm@!db95~*2Q%~v~8PsvdVqq)x!G@zH2Isb#43_p^Hmhk9KhVB({rOV z3v7pEt{;joT9q&`Gsx173+-=bHAMhEqge-((9}1~jQPAzF>q~#7ldk= zWHg(0Zt*%;yJe6n#~+RFC3|@t^)YrMUmfs=9+s?q`F*eblFn|;M5FEcy-fvc@sTIo zFyoMq9>4#Iy8Qayeyx>7nM6kI6jjBf@S&aC(;h9&0sCT_=%k7aZl84NUP_E z+h3$V_KM4(mx!?T4Qb`9B1p-^Pg(yO2WpyG6v0&e{lOZ8RTjpWIDKU6Sm!G7XC^KD zAdS1L#;gnt1uE35)zDl@71A){qSP@Lu6JFWSlI)!Wu8V_3TV~5oSn-g%%}mvNJX3U z$#&P`y(AdBOW_@;j8mM2{QyewO>*hsYQ=(ViMDn$^HBvB?1zxdJiO7Bp&)EL7I+&g z<^)HGx0Ppr-Uq}l6i!J>;6dfdTHJKpoj)SwCY3BK2bqULMjLYP1)>iGakH|9a+&1I zN~W=-+)76HH>;Dul&iXC#;N|rpHqf9^Gr~RN`FW(lePy#G0c|UKar&nrNtsv#*=P3U7j`b|M&XU* ztXj<4q=FIlq-yfFN@pYuQEd5xbJDXlTJbTH>*AkQ^PU-z_SmN^9WxKVjft3vm^aGg z6p57L>F&=qP3&i9=Hz_H?f?$_VnDf;J$L5uaEN-;m;yCJg_7}M@AbzV{tZMnzBPeu z>MtU=VyF?T$vQatxH+O_5xf2=OEp=>04;+W7{7DFfU17ZL+DI8<_lFM;4A0C%`Nc; z!i@x$SMzw}U^P;HVPWBWPtPGT;ni06?Mmd&4cuOSd|yOQ`oT_bwVF?01NfgKmB9tg zth~lR&7RGvt#<<#9A@M^AB9`{OK9hZkstk14jTa-*AhM}I5Mhr->Y_3@vFouRfxS) z%qC9gFKmrKz_ee5)UToW{coFh zwS^SRAfK*@11Gd0No@)F>lq~InEyx90&jW~A8f(gk}K26^qn7La7k0|#vi1#{;sG@ z%cgP7peRc{r2e-f78r=%htO&C`Xg_~5f*Vrq*=fAY-DS8tky7*0-n(9c|DYvcZa;t zYu=G#R9M|TY>f5ima+L?`(xGBv@7ZsAa}(&mxGoDOJ7tH?>FA}B6bJ|`_}CC!AD^B(GaC@C9dB{b zSjVBQ+7=DuRCenIufV9FLYqKllwjj(*D91xrQz%6xBEu)++1Z$z@h*lR2A)g3_4!) z_`38GlnpDwhN)i=x-8zKWn%KG2c#hsJMzZbL*wAm_+SN5=nOC%ztJUo;)hC`*ndQh z2(#FP|4&90i + {(args) => Coucou} - + - + ## Variation on size diff --git a/akeneo-design-system/src/components/Dummy/Dummy.tsx b/akeneo-design-system/src/components/Dummy/Dummy.tsx index 067fb66f5de9..745c82fb02da 100644 --- a/akeneo-design-system/src/components/Dummy/Dummy.tsx +++ b/akeneo-design-system/src/components/Dummy/Dummy.tsx @@ -1,7 +1,7 @@ import React, {ReactNode} from 'react'; import styled from 'styled-components'; -const DummyContainer = styled.div<{size: number, type: Type}>` +const DummyContainer = styled.div<{size: number; type: Type}>` font-size: ${({size}) => size}px; line-height: ${({size}) => size + 5}px; color: ${({type}) => (type === 'primary' ? 'blue' : 'green')}; diff --git a/akeneo-design-system/src/components/Dummy/__image_snapshots__/dummy-visual-tsx-dummy-visual-tests-renders-standard-dummy-component-varying-by-size-correctly-1-snap.png b/akeneo-design-system/src/components/Dummy/__image_snapshots__/dummy-visual-tsx-dummy-visual-tests-renders-standard-dummy-component-varying-by-size-correctly-1-snap.png index e529a0e4eb9c4520e90a887a2eafc270833a5048..1d89aa0d41e15c7e87e3654f75c06d80a29288c3 100644 GIT binary patch literal 6310 zcmc(D`B&0g^fp;pH?LVa-L%s3nmM31E6stlEEUZx917pXe=7?5igXWAmXMu*M z7K3Oi+TfIlhO;PIIfN6YCMp8&hx`5m?^^G7t?w`F1B>&Vea_iuKhNHeu3xi|+^4V) z1OiDyEic1Bpq;=F6uDO%_#|Ib^8?I|P?*IfP&NGs8wC2x1A6(Q{hh+a@yI*&4ubYy zJ@-vb&1}<8iV;n5drv77PcURZ${KlT4luTlD*}6APBDkwu%C= z8G{dG4qi4CE0vz%wsZCAV|h^BtgDyuxbsmn(51YX9!TzT`(|+rom)2+NOczZ^WxH% zq(IRiVa!ZqK$kQA+?jCBA9vykZUWO&H6!}11A031Y-pK1wc5V?DZfy+mDc#noSm$M zgW-vom#K>Qm1#Ve6^hk?pEwtAYM{cK>->4*$1kJ^-&wP|>`#DRE$K4G~pOgumObDCHrare< zSA3LL=BqeoV&-*p<2d&a$1m`zV!7s!r5v6)tcEy{n_|9HM_a zuq$hD6n{Lu2!A0?tR{|!BEax1D<6{Z=BbVC!mZq}`6}4g7a39KMS$1dYUiE}enGx< z&t@QM?FMqmWjef8$?QK}vF~;(@b!NXhrvGMEkmX$Y?hY})L8LYS=b3qNw&|hi? zFkSgrjX8ZKi$~<3WS`Sn}qgJf~sZ${%_Rph#hj5idxBgIE zo620I^`?qEPB+pW`{OTQ&@!DQ`VM+{VwcF6${ZIN(2Kny$3O?J>=l`WQ

rbornN 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 Zg1`^w3xDT&5JiyCE7vYpU-G#7e*lh*6%qgd literal 6156 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 Lq+Nc?F6O@gFLHbj delta 3846 zcma)9XFS`{*H7$Klq!nQrNbUIN~v8f)l!ratEFm-+7eW$QKM;%7^&UbYF6zLd)JN` zqE=8df;@?Sp6A8$fAc?Ye&?QhKKIP~J@B*D~jU!6>ss1rh&|FKYc1mFXiq_6xRGfIE|IoEUHN+NnX z{jCF+G~J9hr8{H|8kBX7j!wM2!FAp@RP+j&-Y)GAhfcYKrQPd2`0{0I+AB7NNx@6i zQP^>ks?JXV7BrGS-^0BFo88~oYGof2@;FbX??S)m8@J}gUDBMU4rW{a48|tXu_!Yo zB@GlLK{&Z&nJb;&?{CZp(H3cSoSAViOz8r?9%Ghq49wA;UpIMPhQc$dYc_v3*lOb( z__0(Gdh1MY?A@?-Qt7t`0Zf^s|l(zSz00VbDxFniW0=<1yysMMK z<{p64nKL(jfo0_; z7xO7hR_10m)g7oB#s7RbP%FQ?xrt6h`cnuQBQ^>GU7>ofow7D-=U!kL z8{C|d8zyYG`oO8QVJjG4<2;=$qJ77xSmp-s>C=I9wdwjYat}XHD@_KpwvH>&6+Ghf zUK80t9aoH5cCryvYCM9boPSjU(7cYS3{1xoa-5L$?g|$d6t(MVEo6+2LDB-^zD_8* z;8zUBdVY;y@IEk~s(;npGq#NM5~U&65*EkP#KBL6#W~00)+dJ1@xysvFe<|FYdoLx z*RtKrc?+KYE;lrsIQWu~3|rBA^bUR_{o9|R(d%0679#sA!@Y{ZOWnOrTBHQ34GsSp8I0Qo-KqERq**V2T<#qQ(DSO$wlW4Zx-v$W}!@&7p z1$IqXr8@urvMJ8Z5S@o?EW848rFPA3;)B~w9-5*tZlB^-?01A289ZZGCXr^we#H9+Psu+hd28;keCr*v82O*u$f2^ zz^tIQW8q$;34ZC}5zW5SfThO2ILrW*{Ih-GFf@C};d}Ar8Trv<7(h%`47^HU)5?q) z%CS$TVSM)Q?0#y2oiH6hu>ZRfOZ$PqGvVSghGGDnDG%tJ=*)s9nC1ebmqB(5*l-Wu zTz1fo;_DMz2M}RSqQ2uaV-ym7;uFn|y*X1@Rn!i*bn5J9 zBbV}wtch3%D+lF(~y9Bm<$Oxbo*X%~zyz(0RcxAM6haCg^g4gO+#Z>u62 z85`G_$*oT0*xVjGA zy!9fd#Bo#7b~m{xmu5!`bJx_Zdc zer}V?rNtpFp>$(hCb_4~Ggzvybi@_~bGn@k%sh64)DkvUz#=1p)70 zy+>s%YM>@E%1|+Iw#vziSg)n3 z8QkO;l_R11v35xDS2ZaH%|pL=6bmP;grM7Az;7eYW7Bga;Tb^vidwS_-^)~`{F8eE zKjC?DhAe$0@jyP`x3Du&lx$RRryfcrX$)6(FPUYre zm{t^9bHvJD-Q2+?YiYct&L1)|nZoE}Zr&Eluy~>j#vMqC#y^U=yk)=8vJ=<;g8d`s zb+L?++E^7nS_u(rMDL+Uo#|g(iC3wmmHE-#Xfru$*;4xbbG9en_R8T~43~k5a5hE} z>b-Q$-Y&R0V;Zm(j$t&kybJuMopo{$4zt*%C=yM07?IYaK!4w^q0ji7u#ht2T!arD z-wThI#FdkjF6Fl)+XdUl&lk$`YPu%(b#bx)kH2e+yK;BB^1H}gT`pyx(xagL)aQJd zJM)BjCTc_wp2!4Ja1JEH-G?&X#{kg-%RldGp~N+vBX71OPRYUzP!Z^}@fV2n(M@wx zPq$TTn$Y2(5njJ+9^1&JqtEbdCO+UrILkS1SWFb<2BL!UYm%0f!;4;{OIlN~H|*nz ztm55)VBJ_3R?B!`p>A)4YH#USp5W%3&%CEh;A+b}IB*QX( z*VsSWj<_dG&rKirlXE6FoCS$IM%Pg1Xgb@AvdijaO@6a&b-MZnrknTHNcZoiGV}4f z)&lk9`n|BRoz>;y$?}obfYOC48cQ0Z`?oVAI0(ii3JzX%3)`etJp^NS*o~kSY%X3d zYj$Uo`N)-$3+*HR$RI&7V9EoFLp<^(xGGL7cFG}DP#}5-*xl;Pcjl8OTD5h6nq{mU*=8mkG)j~ z%blBFZ6c{$v%O9l+&o~O!%JE@pme=3C7I=@IvZg>Xjxd?wB{!ZgdS;{()RIMju*B( z@D=RL!Jd}92y=5CQV|T*&H7REDJI&#l@zmw%XDgWy4(8Etohgm%DdOb;lod{&^~CY zwgOyJ-;-^AqXq9fG^T^Q$4x4qQZhz1dZwdVp?!XJp^M~4O2<7F(nur-u4BHZ>CNL7 zz{TFA*8|=DIaKg_`?%pEXz@0nR30O&x^ z)JYAJxoK0ce6ROc&zhv$p2C&Vw8RhSEb83DD_)kab|$vqUi#lZQBxo*S!Ay+{U6LJ af97!ZxYM<8HPVkRKwIOndXcJS@c#fAc4R03 diff --git a/akeneo-design-system/src/components/index.ts b/akeneo-design-system/src/components/index.ts index 35ca50babd94..421f991e0d47 100644 --- a/akeneo-design-system/src/components/index.ts +++ b/akeneo-design-system/src/components/index.ts @@ -1 +1,2 @@ +export * from './Checkbox/Checkbox'; export * from './Dummy/Dummy'; diff --git a/akeneo-design-system/src/icons/CheckIcon.tsx b/akeneo-design-system/src/icons/CheckIcon.tsx new file mode 100644 index 000000000000..03e7b9d95abd --- /dev/null +++ b/akeneo-design-system/src/icons/CheckIcon.tsx @@ -0,0 +1,19 @@ +import React from 'react'; + +const CheckIcon = ({width = 24, height = 24, className = ''}: {width: number; height: number; className?: string}) => ( + + + +); + +export {CheckIcon}; diff --git a/akeneo-design-system/src/icons/PartialCheckIcon.tsx b/akeneo-design-system/src/icons/PartialCheckIcon.tsx new file mode 100644 index 000000000000..9ad7e8727495 --- /dev/null +++ b/akeneo-design-system/src/icons/PartialCheckIcon.tsx @@ -0,0 +1,25 @@ +import React from 'react'; + +const PartialCheckIcon = ({ + width = 24, + height = 24, + className = '', +}: { + width: number; + height: number; + className?: string; +}) => ( + + + +); + +export {PartialCheckIcon}; diff --git a/akeneo-design-system/src/icons/index.ts b/akeneo-design-system/src/icons/index.ts new file mode 100644 index 000000000000..8c6558d8ce00 --- /dev/null +++ b/akeneo-design-system/src/icons/index.ts @@ -0,0 +1,2 @@ +export * from './CheckIcon'; +export * from './PartialCheckIcon'; diff --git a/akeneo-design-system/src/index.ts b/akeneo-design-system/src/index.ts index 07635cbbc8e7..95d58a76aed3 100644 --- a/akeneo-design-system/src/index.ts +++ b/akeneo-design-system/src/index.ts @@ -1 +1,2 @@ export * from './components'; +export * from './icons'; diff --git a/akeneo-design-system/src/shared/global.ts b/akeneo-design-system/src/shared/global.ts index 60fb51ac2492..738485941f9c 100644 --- a/akeneo-design-system/src/shared/global.ts +++ b/akeneo-design-system/src/shared/global.ts @@ -11,6 +11,10 @@ const StoryStyle = styled.div` color: #67768a; font-size: 13px; line-height: 20px; + + & > * { + margin: 10px 0px; + } `; export {StoryStyle}; diff --git a/akeneo-design-system/src/shared/test-util.tsx b/akeneo-design-system/src/shared/test-util.tsx new file mode 100644 index 000000000000..b4d951d91ace --- /dev/null +++ b/akeneo-design-system/src/shared/test-util.tsx @@ -0,0 +1,14 @@ +import React, {ComponentType, ReactElement, ReactNode} from 'react'; +import {render, RenderOptions} from '@testing-library/react'; +import {ThemeProvider} from 'styled-components'; +import {pimTheme} from '../theme/pim'; + +const AllTheProviders = ({children}: {children: ReactNode}) => { + return {children}; +}; + +const customRender = (ui: ReactElement, options?: Omit) => + render(ui, {wrapper: AllTheProviders as ComponentType, ...options}); + +export * from '@testing-library/react'; +export {customRender as render}; diff --git a/akeneo-design-system/src/theme/index.ts b/akeneo-design-system/src/theme/index.ts new file mode 100644 index 000000000000..7b1f54ecf901 --- /dev/null +++ b/akeneo-design-system/src/theme/index.ts @@ -0,0 +1 @@ +export * from './theme'; diff --git a/akeneo-design-system/src/theme/pim/index.ts b/akeneo-design-system/src/theme/pim/index.ts new file mode 100644 index 000000000000..47fdfd404232 --- /dev/null +++ b/akeneo-design-system/src/theme/pim/index.ts @@ -0,0 +1,54 @@ +import {Theme, Color} from '../theme'; + +const color: Color = { + blue10: '#f5f9fc', + blue100: '#5992c7', + blue120: '#47749f', + blue140: '#355777', + blue20: '#dee9f4', + blue40: '#bdd3e9', + blue60: '#9bbddd', + blue80: '#7aa7d2', + green100: '#67b373', + green120: '#528f5c', + green140: '#3d6b45', + green20: '#e1f0e3', + green40: '#c2e1c7', + green60: '#a3d1ab', + green80: '#85c28f', + grey140: '#11324d', + grey120: '#67768a', + grey100: '#a1a9b7', + grey80: '#c7cbd4', + grey60: '#e8ebee', + grey40: '#f0f1f3', + grey20: '#f6f7fb', + purple100: '#9452ba', + purple120: '#764194', + purple140: '#58316f', + purple20: '#eadcf1', + purple40: '#d4bae3', + purple60: '#be97d5', + purple80: '#a974c7', + red100: '#d4604f', + red120: '#a94c3f', + red140: '#7f392f', + red20: '#f6dfdc', + red40: '#eebfb9', + red60: '#e59f95', + red80: '#dc7f72', + white: '#ffffff', + yellow100: '#f9b53f', + yellow120: '#c79032', + yellow140: '#956c25', + yellow20: '#fef0d9', + yellow40: '#fde1b2', + yellow60: '#fbd28b', + yellow80: '#fac365', +}; + +const pimTheme: Theme = { + color, +}; + +export {pimTheme}; diff --git a/akeneo-design-system/src/theme/theme.ts b/akeneo-design-system/src/theme/theme.ts new file mode 100644 index 000000000000..f619571703e3 --- /dev/null +++ b/akeneo-design-system/src/theme/theme.ts @@ -0,0 +1,60 @@ +import {ThemedStyledProps} from 'styled-components'; + +type Color = { + blue10: string; + blue100: string; + blue120: string; + blue140: string; + blue20: string; + blue40: string; + blue60: string; + blue80: string; + green100: string; + green120: string; + green140: string; + green20: string; + green40: string; + green60: string; + green80: string; + grey100: string; + grey120: string; + grey140: string; + grey20: string; + grey40: string; + grey60: string; + grey80: string; + purple100: string; + purple120: string; + purple140: string; + purple20: string; + purple40: string; + purple60: string; + purple80: string; + red100: string; + red120: string; + red140: string; + red20: string; + red40: string; + red60: string; + red80: string; + white: string; + yellow100: string; + yellow120: string; + yellow140: string; + yellow20: string; + yellow40: string; + yellow60: string; + yellow80: string; +}; + +type Theme = { + color: Color; +}; + +const getColor = (color: string): ((props: AkeneoThemedProps) => string) => ({theme}: AkeneoThemedProps): string => { + return theme.color[color] as string; +}; + +export type AkeneoThemedProps

> = ThemedStyledProps; +export type {Theme, Color}; +export {getColor}; diff --git a/akeneo-design-system/yarn.lock b/akeneo-design-system/yarn.lock index 7854d1e1cb4c..deb343d4822f 100644 --- a/akeneo-design-system/yarn.lock +++ b/akeneo-design-system/yarn.lock @@ -2063,7 +2063,7 @@ dependencies: core-js "^3.0.1" -"@storybook/react@^6.0.4": +"@storybook/react@^6.0.21": version "6.0.21" resolved "https://registry.yarnpkg.com/@storybook/react/-/react-6.0.21.tgz#68f8a318e9940305b06eb894896624a35a9868b0" integrity sha512-L3PcoBJq5aK1aTaJNfwsSJ8Kxgcyk0WknN4TDqhP7a+oXmuMY1YEi96hEvQVIm0TBCkQxs61K70/T7vlilEtHg== @@ -3283,6 +3283,11 @@ arrify@^1.0.1: resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + asn1.js@^5.2.0: version "5.4.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" @@ -3773,6 +3778,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= + base64-js@^1.0.2: version "1.3.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" @@ -4639,6 +4649,11 @@ core-js-pure@^3.0.0, core-js-pure@^3.0.1: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= + core-js@^2.6.5: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" @@ -5356,6 +5371,13 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= +encoding@^0.1.11: + version "0.1.13" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -5958,6 +5980,26 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fbemitter@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-2.1.1.tgz#523e14fdaf5248805bb02f62efc33be703f51865" + integrity sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU= + dependencies: + fbjs "^0.8.4" + +fbjs@^0.8.0, fbjs@^0.8.4: + version "0.8.17" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd" + integrity sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90= + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + fd-slicer@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" @@ -6132,6 +6174,14 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +flux@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/flux/-/flux-3.1.3.tgz#d23bed515a79a22d933ab53ab4ada19d05b2f08a" + integrity sha1-0jvtUVp5oi2TOrU6tK2hnQWy8Io= + dependencies: + fbemitter "^2.0.0" + fbjs "^0.8.0" + for-in@^0.1.3: version "0.1.8" resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" @@ -6889,6 +6939,13 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" + integrity sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + icss-utils@^4.0.0, icss-utils@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" @@ -6926,6 +6983,11 @@ immer@1.10.0: resolved "https://registry.yarnpkg.com/immer/-/immer-1.10.0.tgz#bad67605ba9c810275d91e1c2a47d4582e98286d" integrity sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg== +immutable@^4.0.0-rc.12: + version "4.0.0-rc.12" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0-rc.12.tgz#ca59a7e4c19ae8d9bf74a97bdf0f6e2f2a5d0217" + integrity sha512-0M2XxkZLx/mi3t8NVwIm1g8nHoEmM9p9UBl/G9k4+hm0kBgOVdMV/B3CY5dQ8qG8qc80NN4gDV4HQv6FTJ5q7A== + import-cwd@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" @@ -7389,7 +7451,7 @@ is-set@^2.0.1: resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43" integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA== -is-stream@^1.1.0: +is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= @@ -7490,6 +7552,14 @@ isobject@^4.0.0: resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -8386,6 +8456,16 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA= + +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= + lodash.memoize@4.x: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -8942,6 +9022,14 @@ node-dir@^0.1.10: dependencies: minimatch "^3.0.2" +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + node-fetch@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" @@ -9777,6 +9865,13 @@ promise.prototype.finally@^3.1.0: es-abstract "^1.17.0-next.0" function-bind "^1.1.1" +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + prompts@^2.0.1, prompts@^2.3.0: version "2.3.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" @@ -9894,6 +9989,11 @@ puppeteer@^5.2.1: unbzip2-stream "^1.3.3" ws "^7.2.3" +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4= + q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -9967,6 +10067,16 @@ raw-loader@^4.0.1: loader-utils "^2.0.0" schema-utils "^2.6.5" +react-base16-styling@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" + integrity sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw= + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + react-color@^2.17.0: version "2.18.1" resolved "https://registry.yarnpkg.com/react-color/-/react-color-2.18.1.tgz#2cda8cc8e06a9e2c52ad391a30ddad31972472f4" @@ -10117,6 +10227,16 @@ react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react- resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== +react-json-view@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.19.1.tgz#95d8e59e024f08a25e5dc8f076ae304eed97cf5c" + integrity sha512-u5e0XDLIs9Rj43vWkKvwL8G3JzvXSl6etuS5G42a8klMohZuYFQzSN6ri+/GiBptDqlrXPTdExJVU7x9rrlXhg== + dependencies: + flux "^3.1.3" + react-base16-styling "^0.6.0" + react-lifecycles-compat "^3.0.4" + react-textarea-autosize "^6.1.0" + react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" @@ -10164,6 +10284,13 @@ react-syntax-highlighter@^12.2.1: prismjs "^1.8.4" refractor "^2.4.1" +react-textarea-autosize@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz#df91387f8a8f22020b77e3833c09829d706a09a5" + integrity sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A== + dependencies: + prop-types "^15.6.0" + react-textarea-autosize@^8.1.1: version "8.2.0" resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.2.0.tgz#fae38653f5ec172a855fd5fffb39e466d56aebdb" @@ -10730,7 +10857,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -10875,7 +11002,7 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4: +setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -11439,6 +11566,11 @@ styled-components@^4.3.2: stylis-rule-sheet "^0.0.10" supports-color "^5.5.0" +styled-react-modal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/styled-react-modal/-/styled-react-modal-2.0.1.tgz#513d47bdbdba67f474a8a4dfeb13d072a172c7fc" + integrity sha512-uoyPlwdM8FLmdOE8dvA3iv2IOnlqMsygPxLAZy8WaK0pEcon67+SWJY/osAWZuBvRKtSo/VXn1fRCYVgbD0KUQ== + stylis-rule-sheet@^0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430" @@ -11658,6 +11790,15 @@ text-table@0.2.0, text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +themeprovider-storybook@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/themeprovider-storybook/-/themeprovider-storybook-1.6.2.tgz#c33f9845b12036029afb76060181aff3e727f503" + integrity sha512-ESzcjuZhKBNdckxGjLzGT4iq3cdRxeTOvxjfjZNAVprdlhfiiTLCExoC5gAHO2ssdlj7c3Ejm4KjwtjPvc5SBg== + dependencies: + immutable "^4.0.0-rc.12" + react-json-view "^1.19.1" + styled-react-modal "^2.0.1" + throat@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" @@ -11951,6 +12092,11 @@ typescript@^4.0.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.2.tgz#7ea7c88777c723c681e33bf7988be5d008d05ac2" integrity sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ== +ua-parser-js@^0.7.18: + version "0.7.21" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.21.tgz#853cf9ce93f642f67174273cc34565ae6f308777" + integrity sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ== + unbzip2-stream@^1.3.3: version "1.4.3" resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7" @@ -12468,6 +12614,11 @@ whatwg-encoding@^1.0.5: dependencies: iconv-lite "0.4.24" +whatwg-fetch@>=0.10.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz#e5f871572d6879663fa5674c8f833f15a8425ab3" + integrity sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ== + whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf"