@adobe-commerce/elsie 1.0.0-alpha04071347
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/.elsie.js +21 -0
- package/.eslintrc.js +18 -0
- package/README.md +52 -0
- package/__mocks__/svg.js +11 -0
- package/bin/builders/build/index.js +20 -0
- package/bin/builders/generate/api/index.js +65 -0
- package/bin/builders/generate/api/templates/function.js +9 -0
- package/bin/builders/generate/api/templates/index.js +7 -0
- package/bin/builders/generate/api/templates/story.js +23 -0
- package/bin/builders/generate/api/templates/unit-test.js +15 -0
- package/bin/builders/generate/component/index.js +87 -0
- package/bin/builders/generate/component/templates/Component.js +43 -0
- package/bin/builders/generate/component/templates/css.js +24 -0
- package/bin/builders/generate/component/templates/index.js +8 -0
- package/bin/builders/generate/component/templates/stories.js +46 -0
- package/bin/builders/generate/component/templates/unit-test.js +19 -0
- package/bin/builders/generate/config/index.js +54 -0
- package/bin/builders/generate/config/templates/elsie.js +29 -0
- package/bin/builders/generate/container/index.js +65 -0
- package/bin/builders/generate/container/templates/Component.js +18 -0
- package/bin/builders/generate/container/templates/index.js +8 -0
- package/bin/builders/generate/container/templates/stories.js +34 -0
- package/bin/builders/generate/container/templates/unit-test.js +19 -0
- package/bin/builders/generate/index.js +283 -0
- package/bin/builders/gql/createOrClearDirectory.js +33 -0
- package/bin/builders/gql/getSchemaRef.js +25 -0
- package/bin/builders/gql/index.js +71 -0
- package/bin/builders/lint/index.js +5 -0
- package/bin/builders/serve/index.js +44 -0
- package/bin/builders/storybook/index.js +5 -0
- package/bin/builders/test/index.js +5 -0
- package/bin/index.js +26 -0
- package/bin/lib/cli.js +8 -0
- package/bin/lib/config.js +12 -0
- package/bin/lib/log-message.js +11 -0
- package/bin/lib/string.js +26 -0
- package/bin/lib/validate-typeof.js +28 -0
- package/bin/lib/write-file.js +30 -0
- package/bin/lib/write-parent-index.js +45 -0
- package/config/eslint.js +113 -0
- package/config/jest.js +90 -0
- package/config/prettier.js +16 -0
- package/config/setEnvVars.js +14 -0
- package/config/storybook/addon.js +130 -0
- package/config/storybook/components/FileTree/FileTree.jsx +192 -0
- package/config/storybook/components/FileTree/index.js +10 -0
- package/config/storybook/components/Flex/Flex.jsx +21 -0
- package/config/storybook/components/Flex/Flex.module.css +29 -0
- package/config/storybook/components/Flex/index.js +10 -0
- package/config/storybook/components/OptionsTable/OptionsTable.jsx +88 -0
- package/config/storybook/components/OptionsTable/OptionsTable.module.css +104 -0
- package/config/storybook/components/OptionsTable/index.js +10 -0
- package/config/storybook/components/Panel/Panel.module.css +56 -0
- package/config/storybook/components/Panel/Panel.tsx +46 -0
- package/config/storybook/components/Panel/index.ts +10 -0
- package/config/storybook/components/Screenshot/Screenshot.jsx +23 -0
- package/config/storybook/components/Screenshot/Screenshot.module.css +28 -0
- package/config/storybook/components/Screenshot/index.js +10 -0
- package/config/storybook/components/Steps/Steps.jsx +21 -0
- package/config/storybook/components/Steps/Steps.module.css +43 -0
- package/config/storybook/components/Steps/index.js +10 -0
- package/config/storybook/components/StoryWrapper/StoryWrapper.jsx +18 -0
- package/config/storybook/components/StoryWrapper/StoryWrapper.module.css +22 -0
- package/config/storybook/components/StoryWrapper/index.js +10 -0
- package/config/storybook/components/Summary/Summary.jsx +19 -0
- package/config/storybook/components/Summary/Summary.module.css +20 -0
- package/config/storybook/components/Summary/index.js +10 -0
- package/config/storybook/components/Variants/Variants.js +57 -0
- package/config/storybook/components/Variants/docs.css +48 -0
- package/config/storybook/components/Variants/index.js +10 -0
- package/config/storybook/components/video/index.jsx +28 -0
- package/config/storybook/manager.js +23 -0
- package/config/storybook/preview.jsx +88 -0
- package/config/storybook/theming/fonts.css +68 -0
- package/config/storybook/theming/logo.svg +19 -0
- package/config/storybook/theming/manager.css +63 -0
- package/config/storybook/theming/preview.css +93 -0
- package/config/storybook/theming/theme.js +61 -0
- package/config/tsconfig-base.json +16 -0
- package/config/tsconfig-preact.json +15 -0
- package/config/vite.mjs +306 -0
- package/package.json +113 -0
- package/post-release.sh +5 -0
- package/src/components/Accordion/Accordion.css +88 -0
- package/src/components/Accordion/Accordion.stories.tsx +582 -0
- package/src/components/Accordion/Accordion.tsx +177 -0
- package/src/components/Accordion/index.ts +11 -0
- package/src/components/ActionButton/ActionButton.css +100 -0
- package/src/components/ActionButton/ActionButton.stories.tsx +169 -0
- package/src/components/ActionButton/ActionButton.tsx +53 -0
- package/src/components/ActionButton/index.ts +10 -0
- package/src/components/ActionButtonGroup/ActionButtonGroup.css +77 -0
- package/src/components/ActionButtonGroup/ActionButtonGroup.stories.tsx +97 -0
- package/src/components/ActionButtonGroup/ActionButtonGroup.tsx +91 -0
- package/src/components/ActionButtonGroup/index.ts +10 -0
- package/src/components/AlertBanner/AlertBanner.css +144 -0
- package/src/components/AlertBanner/AlertBanner.stories.tsx +165 -0
- package/src/components/AlertBanner/AlertBanner.tsx +90 -0
- package/src/components/AlertBanner/index.ts +11 -0
- package/src/components/Breadcrumbs/Breadcrumbs.css +60 -0
- package/src/components/Breadcrumbs/Breadcrumbs.stories.tsx +195 -0
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +71 -0
- package/src/components/Breadcrumbs/index.ts +11 -0
- package/src/components/Button/Button.css +213 -0
- package/src/components/Button/Button.mdx +133 -0
- package/src/components/Button/Button.stories.tsx +398 -0
- package/src/components/Button/Button.tsx +121 -0
- package/src/components/Button/index.ts +11 -0
- package/src/components/Card/Card.css +34 -0
- package/src/components/Card/Card.stories.tsx +76 -0
- package/src/components/Card/Card.tsx +34 -0
- package/src/components/Card/index.ts +10 -0
- package/src/components/CartItem/CartItem.css +509 -0
- package/src/components/CartItem/CartItem.stories.tsx +628 -0
- package/src/components/CartItem/CartItem.tsx +467 -0
- package/src/components/CartItem/CartItemSkeleton.tsx +38 -0
- package/src/components/CartItem/index.ts +12 -0
- package/src/components/CartList/CartList.css +35 -0
- package/src/components/CartList/CartList.stories.tsx +111 -0
- package/src/components/CartList/CartList.tsx +40 -0
- package/src/components/CartList/index.ts +11 -0
- package/src/components/Checkbox/Checkbox.css +255 -0
- package/src/components/Checkbox/Checkbox.stories.tsx +290 -0
- package/src/components/Checkbox/Checkbox.tsx +138 -0
- package/src/components/Checkbox/index.ts +10 -0
- package/src/components/ColorSwatch/ColorSwatch.css +132 -0
- package/src/components/ColorSwatch/ColorSwatch.stories.tsx +274 -0
- package/src/components/ColorSwatch/ColorSwatch.tsx +127 -0
- package/src/components/ColorSwatch/index.ts +11 -0
- package/src/components/ContentGrid/ContentGrid.css +54 -0
- package/src/components/ContentGrid/ContentGrid.stories.tsx +137 -0
- package/src/components/ContentGrid/ContentGrid.tsx +57 -0
- package/src/components/ContentGrid/index.ts +11 -0
- package/src/components/Divider/Divider.css +22 -0
- package/src/components/Divider/Divider.stories.tsx +62 -0
- package/src/components/Divider/Divider.tsx +33 -0
- package/src/components/Divider/index.ts +11 -0
- package/src/components/Field/Field.css +83 -0
- package/src/components/Field/Field.stories.tsx +238 -0
- package/src/components/Field/Field.tsx +84 -0
- package/src/components/Field/index.ts +10 -0
- package/src/components/Header/Header.css +56 -0
- package/src/components/Header/Header.stories.tsx +180 -0
- package/src/components/Header/Header.tsx +81 -0
- package/src/components/Header/index.ts +11 -0
- package/src/components/Icon/Icon.css +26 -0
- package/src/components/Icon/Icon.stories.helpers.jsx +21 -0
- package/src/components/Icon/Icon.stories.tsx +98 -0
- package/src/components/Icon/Icon.tsx +112 -0
- package/src/components/Icon/index.ts +10 -0
- package/src/components/IllustratedMessage/IllustratedMessage.css +61 -0
- package/src/components/IllustratedMessage/IllustratedMessage.stories.tsx +126 -0
- package/src/components/IllustratedMessage/IllustratedMessage.tsx +78 -0
- package/src/components/IllustratedMessage/index.ts +11 -0
- package/src/components/Image/Image.css +52 -0
- package/src/components/Image/Image.stories.tsx +89 -0
- package/src/components/Image/Image.tsx +66 -0
- package/src/components/Image/index.ts +10 -0
- package/src/components/ImageSwatch/ImageSwatch.css +154 -0
- package/src/components/ImageSwatch/ImageSwatch.stories.tsx +310 -0
- package/src/components/ImageSwatch/ImageSwatch.tsx +123 -0
- package/src/components/ImageSwatch/index.ts +11 -0
- package/src/components/InLineAlert/InLineAlert.css +116 -0
- package/src/components/InLineAlert/InLineAlert.stories.tsx +326 -0
- package/src/components/InLineAlert/InLineAlert.tsx +128 -0
- package/src/components/InLineAlert/index.ts +11 -0
- package/src/components/Incrementer/Incrementer.css +165 -0
- package/src/components/Incrementer/Incrementer.stories.tsx +172 -0
- package/src/components/Incrementer/Incrementer.tsx +192 -0
- package/src/components/Incrementer/index.ts +10 -0
- package/src/components/Input/Input.css +304 -0
- package/src/components/Input/Input.stories.tsx +155 -0
- package/src/components/Input/Input.tsx +166 -0
- package/src/components/Input/index.ts +11 -0
- package/src/components/InputDate/InputDate.css +56 -0
- package/src/components/InputDate/InputDate.stories.tsx +117 -0
- package/src/components/InputDate/InputDate.tsx +120 -0
- package/src/components/InputDate/index.ts +11 -0
- package/src/components/InputPassword/InputPassword.css +31 -0
- package/src/components/InputPassword/InputPassword.stories.tsx +148 -0
- package/src/components/InputPassword/InputPassword.tsx +135 -0
- package/src/components/InputPassword/PasswordStatusIndicator/PasswordStatusIndicator.css +31 -0
- package/src/components/InputPassword/PasswordStatusIndicator/PasswordStatusIndicator.tsx +96 -0
- package/src/components/InputPassword/PasswordStatusIndicator/index.ts +11 -0
- package/src/components/InputPassword/index.ts +11 -0
- package/src/components/Modal/Modal.css +125 -0
- package/src/components/Modal/Modal.stories.tsx +250 -0
- package/src/components/Modal/Modal.tsx +157 -0
- package/src/components/Modal/index.ts +10 -0
- package/src/components/Pagination/Pagination.css +95 -0
- package/src/components/Pagination/Pagination.stories.tsx +117 -0
- package/src/components/Pagination/Pagination.tsx +149 -0
- package/src/components/Pagination/index.ts +11 -0
- package/src/components/Picker/Picker.css +220 -0
- package/src/components/Picker/Picker.stories.tsx +318 -0
- package/src/components/Picker/Picker.tsx +203 -0
- package/src/components/Picker/index.ts +10 -0
- package/src/components/Price/Price.css +57 -0
- package/src/components/Price/Price.stories.tsx +110 -0
- package/src/components/Price/Price.tsx +75 -0
- package/src/components/Price/index.ts +10 -0
- package/src/components/PriceRange/PriceRange.css +66 -0
- package/src/components/PriceRange/PriceRange.stories.tsx +240 -0
- package/src/components/PriceRange/PriceRange.tsx +248 -0
- package/src/components/PriceRange/index.ts +11 -0
- package/src/components/ProgressSpinner/ProgressSpinner.css +91 -0
- package/src/components/ProgressSpinner/ProgressSpinner.stories.tsx +300 -0
- package/src/components/ProgressSpinner/ProgressSpinner.tsx +86 -0
- package/src/components/ProgressSpinner/index.ts +11 -0
- package/src/components/RadioButton/RadioButton.css +134 -0
- package/src/components/RadioButton/RadioButton.stories.tsx +126 -0
- package/src/components/RadioButton/RadioButton.tsx +86 -0
- package/src/components/RadioButton/index.ts +11 -0
- package/src/components/Skeleton/Skeleton.css +145 -0
- package/src/components/Skeleton/Skeleton.stories.tsx +265 -0
- package/src/components/Skeleton/Skeleton.tsx +133 -0
- package/src/components/Skeleton/index.ts +10 -0
- package/src/components/Tag/Tag.css +26 -0
- package/src/components/Tag/Tag.stories.tsx +103 -0
- package/src/components/Tag/Tag.tsx +38 -0
- package/src/components/Tag/index.ts +11 -0
- package/src/components/TextArea/TextArea.css +140 -0
- package/src/components/TextArea/TextArea.stories.tsx +130 -0
- package/src/components/TextArea/TextArea.tsx +89 -0
- package/src/components/TextArea/index.ts +11 -0
- package/src/components/TextSwatch/TextSwatch.css +152 -0
- package/src/components/TextSwatch/TextSwatch.stories.tsx +277 -0
- package/src/components/TextSwatch/TextSwatch.tsx +131 -0
- package/src/components/TextSwatch/index.ts +11 -0
- package/src/components/ToggleButton/ToggleButton.css +95 -0
- package/src/components/ToggleButton/ToggleButton.stories.tsx +190 -0
- package/src/components/ToggleButton/ToggleButton.tsx +75 -0
- package/src/components/ToggleButton/index.ts +11 -0
- package/src/components/UIProvider/UIProvider.css +140 -0
- package/src/components/UIProvider/UIProvider.tsx +61 -0
- package/src/components/UIProvider/debugger.css +47 -0
- package/src/components/UIProvider/index.ts +10 -0
- package/src/components/UIProvider/normalize.css +26 -0
- package/src/components/index.ts +49 -0
- package/src/docs/API/event-bus.mdx +52 -0
- package/src/docs/API/graphql.mdx +214 -0
- package/src/docs/API/initializer.mdx +119 -0
- package/src/docs/API/render.mdx +125 -0
- package/src/docs/Design/colors.mdx +202 -0
- package/src/docs/Design/designBlocks.jsx +87 -0
- package/src/docs/Design/getTokenData.ts +28 -0
- package/src/docs/Design/grid.mdx +365 -0
- package/src/docs/Design/overview.mdx +69 -0
- package/src/docs/Design/shapes.mdx +100 -0
- package/src/docs/Design/spacing.mdx +22 -0
- package/src/docs/Design/typography.mdx +126 -0
- package/src/docs/Utilities/classList.mdx +52 -0
- package/src/docs/Utilities/debounce.mdx +49 -0
- package/src/docs/Utilities/deepmerge.mdx +12 -0
- package/src/docs/Utilities/getFormErrors.mdx +41 -0
- package/src/docs/Utilities/getFormValues.mdx +38 -0
- package/src/docs/assets/Banner.png +0 -0
- package/src/docs/assets/Colors.png +0 -0
- package/src/docs/assets/DropinBanner.png +0 -0
- package/src/docs/assets/ShapeStyles.png +0 -0
- package/src/docs/assets/Spacing.png +0 -0
- package/src/docs/assets/Typography.png +0 -0
- package/src/docs/cli-usage.mdx +181 -0
- package/src/docs/components/overview.mdx +124 -0
- package/src/docs/quick-start.mdx +245 -0
- package/src/docs/slots.mdx +211 -0
- package/src/docs/welcome.mdx +52 -0
- package/src/i18n/en_US.json +146 -0
- package/src/i18n/index.ts +26 -0
- package/src/icons/Add.svg +9 -0
- package/src/icons/AddressBook.svg +3 -0
- package/src/icons/Bulk.svg +24 -0
- package/src/icons/Burger.svg +5 -0
- package/src/icons/Card.svg +7 -0
- package/src/icons/Cart.svg +11 -0
- package/src/icons/Check.svg +8 -0
- package/src/icons/CheckWithCircle.svg +4 -0
- package/src/icons/ChevronDown.svg +3 -0
- package/src/icons/ChevronRight.svg +8 -0
- package/src/icons/ChevronUp.svg +3 -0
- package/src/icons/Close.svg +4 -0
- package/src/icons/Coupon.svg +3 -0
- package/src/icons/Date.svg +4 -0
- package/src/icons/Delivery.svg +11 -0
- package/src/icons/EmptyBox.svg +3 -0
- package/src/icons/Eye.svg +3 -0
- package/src/icons/EyeClose.svg +3 -0
- package/src/icons/Gift.svg +3 -0
- package/src/icons/GiftCard.svg +3 -0
- package/src/icons/Heart.svg +3 -0
- package/src/icons/HeartFilled.svg +3 -0
- package/src/icons/InfoFilled.svg +3 -0
- package/src/icons/Locker.svg +11 -0
- package/src/icons/Minus.svg +3 -0
- package/src/icons/Order.svg +6 -0
- package/src/icons/OrderError.svg +15 -0
- package/src/icons/OrderSuccess.svg +15 -0
- package/src/icons/PaymentError.svg +16 -0
- package/src/icons/Placeholder.svg +3 -0
- package/src/icons/PlaceholderFilled.svg +4 -0
- package/src/icons/Search.svg +9 -0
- package/src/icons/SearchFilled.svg +10 -0
- package/src/icons/Sort.svg +12 -0
- package/src/icons/Star.svg +8 -0
- package/src/icons/Trash.svg +7 -0
- package/src/icons/User.svg +5 -0
- package/src/icons/View.svg +14 -0
- package/src/icons/Wallet.svg +6 -0
- package/src/icons/Warning.svg +12 -0
- package/src/icons/WarningFilled.svg +3 -0
- package/src/icons/WarningWithCircle.svg +4 -0
- package/src/icons/index.ts +42 -0
- package/src/lib/classes.ts +34 -0
- package/src/lib/config.ts +24 -0
- package/src/lib/debounce.ts +16 -0
- package/src/lib/deepmerge.ts +45 -0
- package/src/lib/deviceUtils.ts +16 -0
- package/src/lib/form-values.ts +31 -0
- package/src/lib/i18n.ts +18 -0
- package/src/lib/image-params-keymap.ts +36 -0
- package/src/lib/index.ts +24 -0
- package/src/lib/initializer.ts +134 -0
- package/src/lib/is-number.ts +12 -0
- package/src/lib/render.tsx +138 -0
- package/src/lib/resolve-image.ts +101 -0
- package/src/lib/signals.ts +11 -0
- package/src/lib/slot.tsx +434 -0
- package/src/lib/tests.tsx +47 -0
- package/src/lib/types.ts +16 -0
- package/src/lib/vcomponent.tsx +42 -0
- package/static/assets/images/Card.png +0 -0
- package/static/assets/images/example.jpg +0 -0
- package/static/assets/images/index.ts +11 -0
- package/static/dropin.png +0 -0
- package/static/favicon.svg +14 -0
- package/storybook-stories.js +21 -0
- package/tests/__mocks__/browserMocks.ts +28 -0
- package/tests/__mocks__/fileMocks.ts +12 -0
- package/tests/__mocks__/styleMock.ts +0 -0
- package/types/icons.d.ts +18 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Source } from '@storybook/blocks';
|
|
2
|
+
|
|
3
|
+
export const Block = ({ style, children }) => (
|
|
4
|
+
// Renders content in a block that has a light background
|
|
5
|
+
<div
|
|
6
|
+
style={{
|
|
7
|
+
background: 'var(--color-neutral-50)',
|
|
8
|
+
color: 'black',
|
|
9
|
+
display: 'grid',
|
|
10
|
+
gridGap: 'var(--spacing-sm)',
|
|
11
|
+
padding: 'var(--spacing-sm)',
|
|
12
|
+
...style,
|
|
13
|
+
}}
|
|
14
|
+
>
|
|
15
|
+
{children}
|
|
16
|
+
</div>
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
export const DesignSwatchGroup = ({
|
|
20
|
+
property,
|
|
21
|
+
prefix,
|
|
22
|
+
tokens,
|
|
23
|
+
swatchStyles,
|
|
24
|
+
groupStyles,
|
|
25
|
+
children,
|
|
26
|
+
}) => {
|
|
27
|
+
// Renders a group of token swatches
|
|
28
|
+
const group = prefix
|
|
29
|
+
? tokens.filter((entry) => entry.startsWith(prefix))
|
|
30
|
+
: tokens;
|
|
31
|
+
return group.map((entry) => {
|
|
32
|
+
const styleOverride = {};
|
|
33
|
+
styleOverride[property] = `var(${entry})`;
|
|
34
|
+
return (
|
|
35
|
+
<div
|
|
36
|
+
key={entry}
|
|
37
|
+
style={{
|
|
38
|
+
display: 'flex',
|
|
39
|
+
alignItems: 'center',
|
|
40
|
+
font: 'var(--type-body-1-strong-font)',
|
|
41
|
+
letterSpacing: 'var(--type-body-1-strong-spacing)',
|
|
42
|
+
margin: 'var(--spacing-xxsmall)',
|
|
43
|
+
...groupStyles,
|
|
44
|
+
}}
|
|
45
|
+
>
|
|
46
|
+
<DesignSwatch style={{ ...swatchStyles, ...styleOverride }}>
|
|
47
|
+
{children}
|
|
48
|
+
</DesignSwatch>
|
|
49
|
+
<pre style={{ marginLeft: 'var(--spacing-small)' }}>var({entry});</pre>
|
|
50
|
+
</div>
|
|
51
|
+
);
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export const DesignSwatch = ({ style, children, ...restProps }) => {
|
|
56
|
+
// Renders a token swatch
|
|
57
|
+
return (
|
|
58
|
+
<div
|
|
59
|
+
style={{
|
|
60
|
+
width: '3rem',
|
|
61
|
+
height: '3rem',
|
|
62
|
+
background: 'var(--color-informational-200)',
|
|
63
|
+
border: '1px solid var(--color-neutral-400)',
|
|
64
|
+
display: 'flex',
|
|
65
|
+
alignItems: 'center',
|
|
66
|
+
justifyContent: 'center',
|
|
67
|
+
...style,
|
|
68
|
+
}}
|
|
69
|
+
>
|
|
70
|
+
{children}
|
|
71
|
+
</div>
|
|
72
|
+
);
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export const TokenDefinitions = ({ tokenData }) => {
|
|
76
|
+
const tokenDefinitions = tokenData.map((token) => {
|
|
77
|
+
const { name, value, comment } = token;
|
|
78
|
+
return `${name}: ${value}; ${comment ? `/* ${comment} */` : ''}`;
|
|
79
|
+
});
|
|
80
|
+
return (
|
|
81
|
+
<Source
|
|
82
|
+
language="css"
|
|
83
|
+
code={`.dropin-design {\n ${tokenDefinitions.join('\n ')}
|
|
84
|
+
}`}
|
|
85
|
+
/>
|
|
86
|
+
);
|
|
87
|
+
};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface TokenData {
|
|
2
|
+
name: string;
|
|
3
|
+
value: string;
|
|
4
|
+
comment?: string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export const getTokenData = (data: any) => {
|
|
8
|
+
const results: TokenData[] = [];
|
|
9
|
+
|
|
10
|
+
walk(results, '-', data);
|
|
11
|
+
|
|
12
|
+
return results;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const walk = (results: TokenData[], currentName: string, data: any) => {
|
|
16
|
+
if (data.value) {
|
|
17
|
+
results.push({
|
|
18
|
+
name: currentName,
|
|
19
|
+
value: data.value,
|
|
20
|
+
comment: data.comment || null,
|
|
21
|
+
});
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
Object.entries(data).forEach((entry) => {
|
|
26
|
+
walk(results, `${currentName}-${entry[0]}`, entry[1]);
|
|
27
|
+
});
|
|
28
|
+
};
|
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
import { Meta, Unstyled } from '@storybook/blocks';
|
|
2
|
+
import { Block, DesignSwatchGroup, TokenDefinitions } from './designBlocks.jsx';
|
|
3
|
+
import gridData from '@adobe-commerce/storefront-design/base/grid/grid.json';
|
|
4
|
+
import { getTokenData } from './getTokenData';
|
|
5
|
+
import { OptionsTable } from '@adobe-commerce/elsie/config/storybook/components/OptionsTable';
|
|
6
|
+
|
|
7
|
+
export const tokenData = getTokenData(gridData);
|
|
8
|
+
export const tokenNames = tokenData.map((token) => token.name);
|
|
9
|
+
|
|
10
|
+
<Meta title="Design/Grid System" />
|
|
11
|
+
<Unstyled>
|
|
12
|
+
|
|
13
|
+
export const SampleColumn = () => {
|
|
14
|
+
return (
|
|
15
|
+
<div
|
|
16
|
+
style={{
|
|
17
|
+
background: `var(--color-informational-200)`,
|
|
18
|
+
padding:`200px 0`,
|
|
19
|
+
}}
|
|
20
|
+
></div>
|
|
21
|
+
);
|
|
22
|
+
};
|
|
23
|
+
export const SampleGrid = ({ prefix, columnNumber }) => {
|
|
24
|
+
return (
|
|
25
|
+
<div>
|
|
26
|
+
<TokenDefinitions
|
|
27
|
+
tokenData={tokenData.filter((data) => data.name.startsWith(prefix))}
|
|
28
|
+
/>
|
|
29
|
+
<Block
|
|
30
|
+
style={{
|
|
31
|
+
display: `grid`,
|
|
32
|
+
gridTemplateColumns: `repeat(var(${prefix}-columns), 1fr)`,
|
|
33
|
+
gridColumnGap: `var(${prefix}-gutters)`,
|
|
34
|
+
margin: `0 var(${prefix}-margins)`,
|
|
35
|
+
}}
|
|
36
|
+
>
|
|
37
|
+
|
|
38
|
+
{Array.from(Array(parseInt(columnNumber)).keys()).map((i) => (
|
|
39
|
+
<SampleColumn key={i} />
|
|
40
|
+
)) }
|
|
41
|
+
|
|
42
|
+
</Block>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
# Grid System
|
|
50
|
+
|
|
51
|
+
The grid system is based on a **12-column responsive grid**, meaning that the number of columns can change depending on the screen width. Let's look first at the breakpoints and tokens we defined for our grid system. Then we'll look at how to use them in your drop-ins.
|
|
52
|
+
|
|
53
|
+
## Grid Breakpoints
|
|
54
|
+
|
|
55
|
+
Breakpoints are the specific widths (in pixels) that define how the drop-in grid changes when displayed on different screen widths. These changes include the number of columns, column widths, column gaps, and grid margins.
|
|
56
|
+
|
|
57
|
+
These are the breakpoints we defined for the drop-in grid:
|
|
58
|
+
|
|
59
|
+
<OptionsTable
|
|
60
|
+
options={[
|
|
61
|
+
['Name', 'Breakpoint (code)', 'Description', 'Devices'],
|
|
62
|
+
['Small (default)', 'n/a', 'Screens up to 767px', 'Phones'],
|
|
63
|
+
[
|
|
64
|
+
'Medium',
|
|
65
|
+
'min-width: 768px',
|
|
66
|
+
'Screens that are 768px or larger',
|
|
67
|
+
'Tablets portrait',
|
|
68
|
+
],
|
|
69
|
+
[
|
|
70
|
+
'Large',
|
|
71
|
+
'min-width: 1024px',
|
|
72
|
+
'Screens that are 1024px or larger',
|
|
73
|
+
'Tablets landscape',
|
|
74
|
+
],
|
|
75
|
+
[
|
|
76
|
+
'XLarge',
|
|
77
|
+
'min-width: 1366px',
|
|
78
|
+
'Screens that are 1366px or larger',
|
|
79
|
+
'Desktops, laptops',
|
|
80
|
+
],
|
|
81
|
+
[
|
|
82
|
+
'XXLarge',
|
|
83
|
+
'min-width: 1920px',
|
|
84
|
+
'Screens that are 1920px or larger',
|
|
85
|
+
'Desktops, laptops',
|
|
86
|
+
],
|
|
87
|
+
]}
|
|
88
|
+
/>
|
|
89
|
+
|
|
90
|
+
## Grid tokens
|
|
91
|
+
|
|
92
|
+
The drop-in grid system provides **five sets of grid tokens** (CSS variables) to lay out your components: `--grid-[1-5]-columns`, `--grid-[1-5]-gutters`, and `--grid-[1-5]-margins`. Each set of tokens can provide a different number of columns, column widths, column-gutter widths, or grid margins. These token sets, values, suggested breakpoints, and the CSS properties they are applied to, are listed below.
|
|
93
|
+
|
|
94
|
+
<OptionsTable
|
|
95
|
+
compact
|
|
96
|
+
options={[
|
|
97
|
+
[
|
|
98
|
+
'Breakpoint',
|
|
99
|
+
'Grid token (code)',
|
|
100
|
+
'Value 100px (code)',
|
|
101
|
+
'CSS property (code)',
|
|
102
|
+
],
|
|
103
|
+
[
|
|
104
|
+
'Small (default) screens',
|
|
105
|
+
'var(--grid-1-columns)',
|
|
106
|
+
'4',
|
|
107
|
+
'grid-template-columns',
|
|
108
|
+
],
|
|
109
|
+
['Small (default)', 'var(--grid-1-gutters)', '16px', 'grid-column-gap'],
|
|
110
|
+
['Small (default)', 'var(--grid-1-margins)', '0', 'margin'],
|
|
111
|
+
[],
|
|
112
|
+
['Medium screens', 'var(--grid-2-columns)', '12', 'grid-template-columns'],
|
|
113
|
+
['Medium', 'var(--grid-2-gutters)', '16px', 'grid-column-gap'],
|
|
114
|
+
['Medium', 'var(--grid-2-margins)', '0', 'margin'],
|
|
115
|
+
[],
|
|
116
|
+
['Large screens', 'var(--grid-3-columns)', '12', 'grid-template-columns'],
|
|
117
|
+
['Large', 'var(--grid-3-gutters)', '24px', 'grid-column-gap'],
|
|
118
|
+
['Large', 'var(--grid-3-margins)', '0', 'margin'],
|
|
119
|
+
[],
|
|
120
|
+
['XLarge screens', 'var(--grid-4-columns)', '12', 'grid-template-columns'],
|
|
121
|
+
['XLarge', 'var(--grid-4-gutters)', '24px', 'grid-column-gap'],
|
|
122
|
+
['XLarge', 'var(--grid-4-margins)', '0', 'margin'],
|
|
123
|
+
[],
|
|
124
|
+
['XXLarge screens', 'var(--grid-5-columns)', '12', 'grid-template-columns'],
|
|
125
|
+
['XXLarge', 'var(--grid-5-gutters)', '24px', 'grid-column-gap'],
|
|
126
|
+
['XXLarge', 'var(--grid-5-margins)', '0', 'margin'],
|
|
127
|
+
]}
|
|
128
|
+
compact={true}
|
|
129
|
+
/>
|
|
130
|
+
|
|
131
|
+
## How to use the grid system
|
|
132
|
+
|
|
133
|
+
To use the grid system in your drop-ins, you need to:
|
|
134
|
+
|
|
135
|
+
- Define your **grid-container** CSS class(es) using the drop-in grid token sets.
|
|
136
|
+
- Define your **grid-item** CSS classes to specify the columns and spans for your drop-in components.
|
|
137
|
+
|
|
138
|
+
You can name your grid-container and grid-item classes whatever you want. For these examples, we will use `grid-container-[size]` and `grid-item-a`, `grid-item-b`, and so on.
|
|
139
|
+
|
|
140
|
+
The grid-container class defines the grid itself, and the grid-item classes define where and how to put your components on the grid. The following example shows a simple usage of these classes:
|
|
141
|
+
|
|
142
|
+
```html
|
|
143
|
+
<div class="grid-container-small">
|
|
144
|
+
<div class="grid-item-a">Item A</div>
|
|
145
|
+
<div class="grid-item-b">Item B</div>
|
|
146
|
+
</div>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## Define a grid container
|
|
150
|
+
|
|
151
|
+
The first step is to define your `grid-container` classes. Use the grid token sets to define values for grid-column CSS properties as shown here:
|
|
152
|
+
|
|
153
|
+
```css
|
|
154
|
+
.grid-container-small {
|
|
155
|
+
display: grid;
|
|
156
|
+
grid-template-columns: repeat(var(--grid-1-columns), 1fr);
|
|
157
|
+
grid-column-gap: var(--grid-1-gutters);
|
|
158
|
+
margin: 0 var(--grid-1-margins);
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**CSS properties**
|
|
163
|
+
|
|
164
|
+
As shown in the previous example, every grid container needs the following CSS properties:
|
|
165
|
+
|
|
166
|
+
- `display: grid` — Creates a grid layout.
|
|
167
|
+
- `grid-template-columns:` — Defines the number and width of columns in the grid.
|
|
168
|
+
- `grid-column-gap:` — Defines the space between columns.
|
|
169
|
+
- `margin:` — Defines the space between the grid container and the edge of the screen.
|
|
170
|
+
|
|
171
|
+
## Define grid items
|
|
172
|
+
|
|
173
|
+
Grid item CSS classes define where (which column) and how (columns span) you want to put the components that make up your drop-in UI. To create grid-item classes, add a `grid-item-x` class to the UI components within your drop-in. You can then use the `grid-column` CSS property to define which column a component starts in and the number of columns it spans.
|
|
174
|
+
|
|
175
|
+
In this example, the `grid-item-a` class starts at column 1 and spans 5 columns:
|
|
176
|
+
|
|
177
|
+
```css
|
|
178
|
+
.grid-item-a {
|
|
179
|
+
grid-column: 1 / span 5;
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Example grids
|
|
184
|
+
|
|
185
|
+
The following examples show which grid token sets we recommend when using the defined breakpoints.
|
|
186
|
+
|
|
187
|
+
### Small (default) layouts (up to 767px)
|
|
188
|
+
|
|
189
|
+
For this breakpoint, we recommend the `grid-1` token set:
|
|
190
|
+
|
|
191
|
+
<SampleGrid prefix="--grid-1" columnNumber="4" />
|
|
192
|
+
|
|
193
|
+
**CSS classes**
|
|
194
|
+
|
|
195
|
+
```css
|
|
196
|
+
.grid-container-small {
|
|
197
|
+
display: grid;
|
|
198
|
+
grid-template-columns: repeat(var(--grid-1-columns), 1fr);
|
|
199
|
+
grid-column-gap: var(--grid-1-gutters);
|
|
200
|
+
margin: 0 var(--grid-1-margins);
|
|
201
|
+
}
|
|
202
|
+
.grid-item-a {
|
|
203
|
+
grid-column: 1 / span 4;
|
|
204
|
+
}
|
|
205
|
+
.grid-item-b {
|
|
206
|
+
grid-column: 3 / span 2;
|
|
207
|
+
}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**HTML additions**
|
|
211
|
+
|
|
212
|
+
```html
|
|
213
|
+
<div class="grid-container-small">
|
|
214
|
+
<div class="grid-item-a">Item A</div>
|
|
215
|
+
<div class="grid-item-b">Item B</div>
|
|
216
|
+
</div>
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### Medium layouts (768px and wider)
|
|
220
|
+
|
|
221
|
+
For this breakpoint, we recommend the `grid-2` token set:
|
|
222
|
+
|
|
223
|
+
<SampleGrid prefix="--grid-2" columnNumber="12" />
|
|
224
|
+
|
|
225
|
+
**CSS classes**
|
|
226
|
+
|
|
227
|
+
```css
|
|
228
|
+
.grid-container-medium {
|
|
229
|
+
display: grid;
|
|
230
|
+
grid-template-columns: repeat(var(--grid-2-columns), 1fr);
|
|
231
|
+
grid-column-gap: var(--grid-2-gutters);
|
|
232
|
+
margin: 0 var(--grid-2-margins);
|
|
233
|
+
}
|
|
234
|
+
.grid-item-a {
|
|
235
|
+
grid-column: 1 / span 4;
|
|
236
|
+
}
|
|
237
|
+
.grid-item-b {
|
|
238
|
+
grid-column: 5 / span 4;
|
|
239
|
+
}
|
|
240
|
+
.grid-item-c {
|
|
241
|
+
grid-column: 9 / span 4;
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
**HTML additions**
|
|
246
|
+
|
|
247
|
+
```html
|
|
248
|
+
<div class="grid-container-medium">
|
|
249
|
+
<div class="grid-item-a">Item A</div>
|
|
250
|
+
<div class="grid-item-b">Item B</div>
|
|
251
|
+
<div class="grid-item-c">Item C</div>
|
|
252
|
+
</div>
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### Large layouts (1024px and wider)
|
|
256
|
+
|
|
257
|
+
For this breakpoint, we recommend the `grid-3` token set:
|
|
258
|
+
|
|
259
|
+
<SampleGrid prefix="--grid-3" columnNumber="12" />
|
|
260
|
+
|
|
261
|
+
**CSS classes**
|
|
262
|
+
|
|
263
|
+
```css
|
|
264
|
+
.grid-container-large {
|
|
265
|
+
display: grid;
|
|
266
|
+
grid-template-columns: repeat(var(--grid-3-columns), 1fr);
|
|
267
|
+
grid-column-gap: var(--grid-3-gutters);
|
|
268
|
+
margin: 0 var(--grid-3-margins);
|
|
269
|
+
}
|
|
270
|
+
.grid-item-a {
|
|
271
|
+
grid-column: 1 / span 12;
|
|
272
|
+
}
|
|
273
|
+
.grid-item-b {
|
|
274
|
+
grid-column: 1 / span 6;
|
|
275
|
+
}
|
|
276
|
+
.grid-item-c {
|
|
277
|
+
grid-column: 7 / span 6;
|
|
278
|
+
}
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
**HTML additions**
|
|
282
|
+
|
|
283
|
+
```html
|
|
284
|
+
<div class="grid-container-large">
|
|
285
|
+
<div class="grid-item-a">Item A</div>
|
|
286
|
+
<div class="grid-item-b">Item B</div>
|
|
287
|
+
<div class="grid-item-c">Item C</div>
|
|
288
|
+
</div>
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### XLarge layouts (1366px and wider)
|
|
292
|
+
|
|
293
|
+
For this breakpoint, we recommend the `grid-4` token set:
|
|
294
|
+
|
|
295
|
+
<SampleGrid prefix="--grid-4" columnNumber="12" />
|
|
296
|
+
|
|
297
|
+
**CSS classes**
|
|
298
|
+
|
|
299
|
+
```css
|
|
300
|
+
.grid-container-x-large {
|
|
301
|
+
display: grid;
|
|
302
|
+
grid-template-columns: repeat(var(--grid-4-columns), 1fr);
|
|
303
|
+
grid-column-gap: var(--grid-4-gutters);
|
|
304
|
+
margin: 0 var(--grid-4-margins);
|
|
305
|
+
}
|
|
306
|
+
.grid-item-a {
|
|
307
|
+
grid-column: 1 / span 5;
|
|
308
|
+
}
|
|
309
|
+
.grid-item-b {
|
|
310
|
+
grid-column: 6 / span 7;
|
|
311
|
+
}
|
|
312
|
+
.grid-item-c {
|
|
313
|
+
grid-column: 1 / span 12;
|
|
314
|
+
}
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
**HTML additions**
|
|
318
|
+
|
|
319
|
+
```html
|
|
320
|
+
<div class="grid-container-x-large">
|
|
321
|
+
<div class="grid-item-a">Item A</div>
|
|
322
|
+
<div class="grid-item-b">Item B</div>
|
|
323
|
+
<div class="grid-item-c">Item C</div>
|
|
324
|
+
</div>
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### XXLarge layouts (1920px and wider)
|
|
328
|
+
|
|
329
|
+
For this breakpoint, we recommend the `grid-5` token set:
|
|
330
|
+
|
|
331
|
+
<SampleGrid prefix="--grid-5" columnNumber="12" />
|
|
332
|
+
|
|
333
|
+
**NOTE:** The `grid-3`, `grid-4`, and `grid-5`token sets are the same. We provide these tokens to make it easier to customize this token set for different layouts or breakpoints.
|
|
334
|
+
|
|
335
|
+
**CSS classes**
|
|
336
|
+
|
|
337
|
+
```css
|
|
338
|
+
.grid-container-xx-large {
|
|
339
|
+
display: grid;
|
|
340
|
+
grid-template-columns: repeat(var(--grid-5-columns), 1fr);
|
|
341
|
+
grid-column-gap: var(--grid-5-gutters);
|
|
342
|
+
margin: 0 var(--grid-5-margins);
|
|
343
|
+
}
|
|
344
|
+
.grid-item-a {
|
|
345
|
+
grid-column: 1 / span 5;
|
|
346
|
+
}
|
|
347
|
+
.grid-item-b {
|
|
348
|
+
grid-column: 6 / span 7;
|
|
349
|
+
}
|
|
350
|
+
.grid-item-c {
|
|
351
|
+
grid-column: 1 / span 12;
|
|
352
|
+
}
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
**HTML additions**
|
|
356
|
+
|
|
357
|
+
```html
|
|
358
|
+
<div class="grid-container-xx-large">
|
|
359
|
+
<div class="grid-item-a">Item A</div>
|
|
360
|
+
<div class="grid-item-b">Item B</div>
|
|
361
|
+
<div class="grid-item-c">Item C</div>
|
|
362
|
+
</div>
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
</Unstyled>
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Meta, Unstyled } from '@storybook/blocks';
|
|
2
|
+
import { Flex } from '@adobe-commerce/elsie/config/storybook/components/Flex';
|
|
3
|
+
import { Panel } from '@adobe-commerce/elsie/config/storybook/components/Panel';
|
|
4
|
+
|
|
5
|
+
import colors from '@adobe-commerce/elsie/src/docs/assets/Colors.png';
|
|
6
|
+
import spacing from '@adobe-commerce/elsie/src/docs/assets/Spacing.png';
|
|
7
|
+
import typography from '@adobe-commerce/elsie/src/docs/assets/Typography.png';
|
|
8
|
+
import shapeStyles from '@adobe-commerce/elsie/src/docs/assets/ShapeStyles.png';
|
|
9
|
+
|
|
10
|
+
<Meta title="Design/Overview" />
|
|
11
|
+
<Unstyled>
|
|
12
|
+
|
|
13
|
+
# Drop-in Design Tokens
|
|
14
|
+
|
|
15
|
+
All of our drop-ins are built with our design tokens baked-in so that you can quickly change their visual appearance to match your brand.
|
|
16
|
+
|
|
17
|
+
## What are design tokens?
|
|
18
|
+
|
|
19
|
+
Design tokens are CSS variables with default values. Our design tokens provide a standard set of CSS properties and default values for colors, typography, spacing, shapes, and layouts. We use them in all of our component CSS classes to avoid hard-coded values that cannot be easily changed. With this strategy, you can restyle our drop-ins to match your brand simply by changing the default values.
|
|
20
|
+
|
|
21
|
+
<Flex itemsPerAxis={2}>
|
|
22
|
+
<Panel header footer>
|
|
23
|
+
<img src={colors} alt="Colors"/>
|
|
24
|
+
### Colors
|
|
25
|
+
Create meaningful experiences while also expressing hierarchy, state, and brand identity.
|
|
26
|
+
|
|
27
|
+
[Read more](/docs/design-colors--overview)
|
|
28
|
+
</Panel>
|
|
29
|
+
|
|
30
|
+
<Panel header footer>
|
|
31
|
+
<img src={typography} alt="Typography" />
|
|
32
|
+
### Typography
|
|
33
|
+
Set your typography scale to present your content as clearly and efficiently as possible.
|
|
34
|
+
|
|
35
|
+
[Read more](/docs/design-typography--overview)
|
|
36
|
+
</Panel>
|
|
37
|
+
|
|
38
|
+
<Panel header footer>
|
|
39
|
+
<img src={spacing} alt="Spacing" />
|
|
40
|
+
### Spacing
|
|
41
|
+
Create harmonious arrangements with consistent visual balance and predictable rhythm.
|
|
42
|
+
|
|
43
|
+
[Read more](/docs/design-spacing--overview)
|
|
44
|
+
</Panel>
|
|
45
|
+
|
|
46
|
+
<Panel header footer>
|
|
47
|
+
<img src={shapeStyles} alt="Shape styles" />
|
|
48
|
+
### Shape styles
|
|
49
|
+
Grab user attention by using shadows or other visual cues, such as strokes, border-radius, and size.
|
|
50
|
+
|
|
51
|
+
[Read more](/docs/design-shape-styles--overview)
|
|
52
|
+
</Panel>
|
|
53
|
+
</Flex>
|
|
54
|
+
|
|
55
|
+
## How to use design tokens
|
|
56
|
+
|
|
57
|
+
To apply design tokens on your project, make use of the UIProvider, which grants components access to the design tokens as CSS variables. Simply specify the desired design token using the var() CSS function to apply its corresponding value.
|
|
58
|
+
|
|
59
|
+
```css
|
|
60
|
+
.myComponent {
|
|
61
|
+
background-color: var(--color-brand-500);
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## How to add new design tokens
|
|
66
|
+
|
|
67
|
+
You can always add new design tokens to the existing categories (color, spacing, etc.) or create new categories to fit your needs. Just follow the simple patterns and conventions we use in our existing design tokens and you can add as many new tokens for your drop-in as you want.
|
|
68
|
+
|
|
69
|
+
</Unstyled>
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { Meta, Unstyled } from '@storybook/blocks';
|
|
2
|
+
|
|
3
|
+
import { Block, DesignSwatchGroup, TokenDefinitions } from './designBlocks.jsx';
|
|
4
|
+
|
|
5
|
+
import shapesData from '@adobe-commerce/storefront-design/base/shapes/shapes.json';
|
|
6
|
+
import { getTokenData } from './getTokenData';
|
|
7
|
+
|
|
8
|
+
import { Icon } from '@adobe-commerce/elsie/src/components';
|
|
9
|
+
import { Placeholder } from '@adobe-commerce/elsie/src/icons';
|
|
10
|
+
|
|
11
|
+
export const tokenData = getTokenData(shapesData);
|
|
12
|
+
export const tokenNames = tokenData.map((token) => token.name);
|
|
13
|
+
|
|
14
|
+
<Meta title="Design/Shape styles" />
|
|
15
|
+
<Unstyled>
|
|
16
|
+
|
|
17
|
+
# Shapes
|
|
18
|
+
|
|
19
|
+
Grab user attention by using shadows or other visual cues, such as strokes, surface fills, or opacities.
|
|
20
|
+
These can serve a number of purposes from aesthetics to functionality.
|
|
21
|
+
Use them to provide visual hierarchy or to focus a user's attention on a specific group.
|
|
22
|
+
|
|
23
|
+
## Border
|
|
24
|
+
|
|
25
|
+
### Radius
|
|
26
|
+
|
|
27
|
+
export const shapeBorderRadiusPrefix = '--shape-border-radius';
|
|
28
|
+
|
|
29
|
+
<TokenDefinitions
|
|
30
|
+
tokenData={tokenData.filter((data) =>
|
|
31
|
+
data.name.startsWith(shapeBorderRadiusPrefix)
|
|
32
|
+
)}
|
|
33
|
+
/>
|
|
34
|
+
|
|
35
|
+
<Block>
|
|
36
|
+
<DesignSwatchGroup
|
|
37
|
+
property="borderRadius"
|
|
38
|
+
prefix={shapeBorderRadiusPrefix}
|
|
39
|
+
tokens={tokenNames}
|
|
40
|
+
/>
|
|
41
|
+
</Block>
|
|
42
|
+
|
|
43
|
+
### Width
|
|
44
|
+
|
|
45
|
+
export const shapeBorderWidthPrefix = '--shape-border-width';
|
|
46
|
+
|
|
47
|
+
<TokenDefinitions
|
|
48
|
+
tokenData={tokenData.filter((data) =>
|
|
49
|
+
data.name.startsWith(shapeBorderWidthPrefix)
|
|
50
|
+
)}
|
|
51
|
+
/>
|
|
52
|
+
|
|
53
|
+
<Block>
|
|
54
|
+
<DesignSwatchGroup
|
|
55
|
+
property="borderWidth"
|
|
56
|
+
prefix={shapeBorderWidthPrefix}
|
|
57
|
+
tokens={tokenNames}
|
|
58
|
+
/>
|
|
59
|
+
</Block>
|
|
60
|
+
|
|
61
|
+
## Drop Shadows
|
|
62
|
+
|
|
63
|
+
export const shapeShadowPrefix = '--shape-shadow';
|
|
64
|
+
|
|
65
|
+
<TokenDefinitions
|
|
66
|
+
tokenData={tokenData.filter((data) =>
|
|
67
|
+
data.name.startsWith(shapeShadowPrefix)
|
|
68
|
+
)}
|
|
69
|
+
/>
|
|
70
|
+
|
|
71
|
+
<Block style={{ background: 'var(--color-neutral-50)' }}>
|
|
72
|
+
<DesignSwatchGroup
|
|
73
|
+
property="boxShadow"
|
|
74
|
+
prefix="--shape-shadow"
|
|
75
|
+
tokens={tokenNames}
|
|
76
|
+
swatchStyles={{ border: 'none', background: 'var(--color-neutral-50)' }}
|
|
77
|
+
/>
|
|
78
|
+
</Block>
|
|
79
|
+
|
|
80
|
+
## Icon Stroke Widths
|
|
81
|
+
|
|
82
|
+
export const shapeIconStrokePrefix = '--shape-icon-stroke-';
|
|
83
|
+
|
|
84
|
+
<TokenDefinitions
|
|
85
|
+
tokenData={tokenData.filter((data) =>
|
|
86
|
+
data.name.startsWith(shapeIconStrokePrefix)
|
|
87
|
+
)}
|
|
88
|
+
/>
|
|
89
|
+
|
|
90
|
+
<Block>
|
|
91
|
+
<DesignSwatchGroup
|
|
92
|
+
property="strokeWidth"
|
|
93
|
+
prefix={shapeIconStrokePrefix}
|
|
94
|
+
tokens={tokenNames}
|
|
95
|
+
>
|
|
96
|
+
<Icon source={Placeholder} size={32} />
|
|
97
|
+
</DesignSwatchGroup>
|
|
98
|
+
</Block>
|
|
99
|
+
|
|
100
|
+
</Unstyled>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Meta, Unstyled } from '@storybook/blocks';
|
|
2
|
+
import { Block, DesignSwatchGroup, TokenDefinitions } from './designBlocks.jsx';
|
|
3
|
+
import spacingData from '@adobe-commerce/storefront-design/base/spacing/spacing.json';
|
|
4
|
+
import { getTokenData } from './getTokenData';
|
|
5
|
+
|
|
6
|
+
export const tokenData = getTokenData(spacingData);
|
|
7
|
+
export const tokenNames = tokenData.map((token) => token.name);
|
|
8
|
+
|
|
9
|
+
<Meta title="Design/Spacing" />
|
|
10
|
+
<Unstyled>
|
|
11
|
+
|
|
12
|
+
# Spacing
|
|
13
|
+
|
|
14
|
+
Use an incremental system to create harmonious arrangements with consistent visual balance and predictable rhythm to make the user interface easier for users to scan and identify relevant groups.
|
|
15
|
+
|
|
16
|
+
<TokenDefinitions tokenData={tokenData} />
|
|
17
|
+
|
|
18
|
+
<Block>
|
|
19
|
+
<DesignSwatchGroup property="width" tokens={tokenNames} />
|
|
20
|
+
</Block>
|
|
21
|
+
|
|
22
|
+
</Unstyled>
|