@adobe-commerce/elsie 1.0.0-alpha1
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 +12 -0
- package/.eslintrc.js +9 -0
- package/README.md +52 -0
- package/__mocks__/svg.js +1 -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 +19 -0
- package/bin/lib/write-file.js +21 -0
- package/bin/lib/write-parent-index.js +36 -0
- package/config/eslint.js +103 -0
- package/config/jest.js +81 -0
- package/config/prettier.js +7 -0
- package/config/setEnvVars.js +5 -0
- package/config/storybook/addon.js +121 -0
- package/config/storybook/components/FileTree/FileTree.jsx +183 -0
- package/config/storybook/components/FileTree/index.js +1 -0
- package/config/storybook/components/Flex/Flex.jsx +12 -0
- package/config/storybook/components/Flex/Flex.module.css +20 -0
- package/config/storybook/components/Flex/index.js +1 -0
- package/config/storybook/components/OptionsTable/OptionsTable.jsx +79 -0
- package/config/storybook/components/OptionsTable/OptionsTable.module.css +95 -0
- package/config/storybook/components/OptionsTable/index.js +1 -0
- package/config/storybook/components/Panel/Panel.module.css +47 -0
- package/config/storybook/components/Panel/Panel.tsx +37 -0
- package/config/storybook/components/Panel/index.ts +1 -0
- package/config/storybook/components/Screenshot/Screenshot.jsx +14 -0
- package/config/storybook/components/Screenshot/Screenshot.module.css +19 -0
- package/config/storybook/components/Screenshot/index.js +1 -0
- package/config/storybook/components/Steps/Steps.jsx +12 -0
- package/config/storybook/components/Steps/Steps.module.css +34 -0
- package/config/storybook/components/Steps/index.js +1 -0
- package/config/storybook/components/StoryWrapper/StoryWrapper.jsx +9 -0
- package/config/storybook/components/StoryWrapper/StoryWrapper.module.css +13 -0
- package/config/storybook/components/StoryWrapper/index.js +1 -0
- package/config/storybook/components/Summary/Summary.jsx +10 -0
- package/config/storybook/components/Summary/Summary.module.css +11 -0
- package/config/storybook/components/Summary/index.js +1 -0
- package/config/storybook/components/Variants/Variants.js +48 -0
- package/config/storybook/components/Variants/docs.css +39 -0
- package/config/storybook/components/Variants/index.js +1 -0
- package/config/storybook/components/video/index.jsx +19 -0
- package/config/storybook/manager.js +14 -0
- package/config/storybook/preview.jsx +79 -0
- package/config/storybook/theming/fonts.css +59 -0
- package/config/storybook/theming/logo.svg +19 -0
- package/config/storybook/theming/manager.css +54 -0
- package/config/storybook/theming/preview.css +84 -0
- package/config/storybook/theming/theme.js +52 -0
- package/config/tsconfig-base.json +16 -0
- package/config/tsconfig-preact.json +15 -0
- package/config/vite.mjs +297 -0
- package/dist/chunks/deviceUtils.js +14 -0
- package/dist/chunks/icons/Add.js +3 -0
- package/dist/chunks/icons/AddressBook.js +3 -0
- package/dist/chunks/icons/Bulk.js +3 -0
- package/dist/chunks/icons/Burger.js +3 -0
- package/dist/chunks/icons/Card.js +3 -0
- package/dist/chunks/icons/Cart.js +3 -0
- package/dist/chunks/icons/Check.js +3 -0
- package/dist/chunks/icons/CheckWithCircle.js +3 -0
- package/dist/chunks/icons/ChevronDown.js +3 -0
- package/dist/chunks/icons/ChevronRight.js +3 -0
- package/dist/chunks/icons/ChevronUp.js +3 -0
- package/dist/chunks/icons/Close.js +3 -0
- package/dist/chunks/icons/Coupon.js +3 -0
- package/dist/chunks/icons/Date.js +3 -0
- package/dist/chunks/icons/Delivery.js +3 -0
- package/dist/chunks/icons/EmptyBox.js +3 -0
- package/dist/chunks/icons/Eye.js +3 -0
- package/dist/chunks/icons/EyeClose.js +3 -0
- package/dist/chunks/icons/Gift.js +3 -0
- package/dist/chunks/icons/GiftCard.js +3 -0
- package/dist/chunks/icons/Heart.js +3 -0
- package/dist/chunks/icons/HeartFilled.js +3 -0
- package/dist/chunks/icons/InfoFilled.js +3 -0
- package/dist/chunks/icons/Locker.js +3 -0
- package/dist/chunks/icons/Minus.js +3 -0
- package/dist/chunks/icons/Order.js +3 -0
- package/dist/chunks/icons/OrderError.js +3 -0
- package/dist/chunks/icons/OrderSuccess.js +3 -0
- package/dist/chunks/icons/PaymentError.js +3 -0
- package/dist/chunks/icons/Placeholder.js +3 -0
- package/dist/chunks/icons/PlaceholderFilled.js +3 -0
- package/dist/chunks/icons/Search.js +3 -0
- package/dist/chunks/icons/SearchFilled.js +3 -0
- package/dist/chunks/icons/Sort.js +3 -0
- package/dist/chunks/icons/Star.js +3 -0
- package/dist/chunks/icons/Trash.js +3 -0
- package/dist/chunks/icons/User.js +3 -0
- package/dist/chunks/icons/View.js +3 -0
- package/dist/chunks/icons/Wallet.js +3 -0
- package/dist/chunks/icons/Warning.js +3 -0
- package/dist/chunks/icons/WarningFilled.js +3 -0
- package/dist/chunks/icons/WarningWithCircle.js +3 -0
- package/dist/chunks/image-params-keymap.js +3 -0
- package/dist/chunks/initializer.js +5 -0
- package/dist/components.d.ts +1 -0
- package/dist/components.js +3 -0
- package/dist/event-bus.d.ts +1 -0
- package/dist/event-bus.js +3 -0
- package/dist/fetch-graphql.d.ts +1 -0
- package/dist/fetch-graphql.js +3 -0
- package/dist/i18n.d.ts +1 -0
- package/dist/i18n.js +5 -0
- package/dist/initializer.d.ts +1 -0
- package/dist/initializer.js +5 -0
- package/dist/lib.d.ts +1 -0
- package/dist/lib.js +3 -0
- package/dist/preact-compat.d.ts +1 -0
- package/dist/preact-compat.js +3 -0
- package/dist/preact-hooks.d.ts +1 -0
- package/dist/preact-hooks.js +3 -0
- package/dist/preact-jsx-runtime.d.ts +1 -0
- package/dist/preact-jsx-runtime.js +3 -0
- package/dist/preact.d.ts +1 -0
- package/dist/preact.js +3 -0
- package/dist/recaptcha.d.ts +1 -0
- package/dist/recaptcha.js +14 -0
- package/dist/signals.d.ts +1 -0
- package/dist/signals.js +3 -0
- package/dist/types/elsie/src/components/Accordion/Accordion.d.ts +27 -0
- package/dist/types/elsie/src/components/Accordion/index.d.ts +3 -0
- package/dist/types/elsie/src/components/ActionButton/ActionButton.d.ts +11 -0
- package/dist/types/elsie/src/components/ActionButton/index.d.ts +2 -0
- package/dist/types/elsie/src/components/ActionButtonGroup/ActionButtonGroup.d.ts +20 -0
- package/dist/types/elsie/src/components/ActionButtonGroup/index.d.ts +2 -0
- package/dist/types/elsie/src/components/AlertBanner/AlertBanner.d.ts +15 -0
- package/dist/types/elsie/src/components/AlertBanner/index.d.ts +3 -0
- package/dist/types/elsie/src/components/Breadcrumbs/Breadcrumbs.d.ts +9 -0
- package/dist/types/elsie/src/components/Breadcrumbs/index.d.ts +3 -0
- package/dist/types/elsie/src/components/Button/Button.d.ts +15 -0
- package/dist/types/elsie/src/components/Button/index.d.ts +3 -0
- package/dist/types/elsie/src/components/Card/Card.d.ts +9 -0
- package/dist/types/elsie/src/components/Card/index.d.ts +2 -0
- package/dist/types/elsie/src/components/CartItem/CartItem.d.ts +36 -0
- package/dist/types/elsie/src/components/CartItem/CartItemSkeleton.d.ts +4 -0
- package/dist/types/elsie/src/components/CartItem/index.d.ts +4 -0
- package/dist/types/elsie/src/components/CartList/CartList.d.ts +7 -0
- package/dist/types/elsie/src/components/CartList/index.d.ts +3 -0
- package/dist/types/elsie/src/components/Checkbox/Checkbox.d.ts +13 -0
- package/dist/types/elsie/src/components/Checkbox/index.d.ts +2 -0
- package/dist/types/elsie/src/components/ColorSwatch/ColorSwatch.d.ts +20 -0
- package/dist/types/elsie/src/components/ColorSwatch/index.d.ts +3 -0
- package/dist/types/elsie/src/components/ContentGrid/ContentGrid.d.ts +10 -0
- package/dist/types/elsie/src/components/ContentGrid/index.d.ts +19 -0
- package/dist/types/elsie/src/components/Divider/Divider.d.ts +8 -0
- package/dist/types/elsie/src/components/Divider/index.d.ts +3 -0
- package/dist/types/elsie/src/components/Field/Field.d.ts +14 -0
- package/dist/types/elsie/src/components/Field/index.d.ts +2 -0
- package/dist/types/elsie/src/components/Header/Header.d.ts +11 -0
- package/dist/types/elsie/src/components/Header/index.d.ts +3 -0
- package/dist/types/elsie/src/components/Icon/Icon.d.ts +18 -0
- package/dist/types/elsie/src/components/Icon/index.d.ts +2 -0
- package/dist/types/elsie/src/components/IllustratedMessage/IllustratedMessage.d.ts +13 -0
- package/dist/types/elsie/src/components/IllustratedMessage/index.d.ts +3 -0
- package/dist/types/elsie/src/components/Image/Image.d.ts +11 -0
- package/dist/types/elsie/src/components/Image/index.d.ts +2 -0
- package/dist/types/elsie/src/components/ImageSwatch/ImageSwatch.d.ts +20 -0
- package/dist/types/elsie/src/components/ImageSwatch/index.d.ts +3 -0
- package/dist/types/elsie/src/components/InLineAlert/InLineAlert.d.ts +19 -0
- package/dist/types/elsie/src/components/InLineAlert/index.d.ts +3 -0
- package/dist/types/elsie/src/components/Incrementer/Incrementer.d.ts +17 -0
- package/dist/types/elsie/src/components/Incrementer/index.d.ts +2 -0
- package/dist/types/elsie/src/components/Input/Input.d.ts +19 -0
- package/dist/types/elsie/src/components/Input/index.d.ts +3 -0
- package/dist/types/elsie/src/components/InputDate/InputDate.d.ts +11 -0
- package/dist/types/elsie/src/components/InputDate/index.d.ts +3 -0
- package/dist/types/elsie/src/components/InputPassword/InputPassword.d.ts +19 -0
- package/dist/types/elsie/src/components/InputPassword/PasswordStatusIndicator/PasswordStatusIndicator.d.ts +18 -0
- package/dist/types/elsie/src/components/InputPassword/PasswordStatusIndicator/index.d.ts +3 -0
- package/dist/types/elsie/src/components/InputPassword/index.d.ts +3 -0
- package/dist/types/elsie/src/components/Modal/Modal.d.ts +15 -0
- package/dist/types/elsie/src/components/Modal/index.d.ts +2 -0
- package/dist/types/elsie/src/components/Pagination/Pagination.d.ts +15 -0
- package/dist/types/elsie/src/components/Pagination/index.d.ts +3 -0
- package/dist/types/elsie/src/components/Picker/Picker.d.ts +28 -0
- package/dist/types/elsie/src/components/Picker/index.d.ts +2 -0
- package/dist/types/elsie/src/components/Price/Price.d.ts +17 -0
- package/dist/types/elsie/src/components/Price/index.d.ts +2 -0
- package/dist/types/elsie/src/components/PriceRange/PriceRange.d.ts +17 -0
- package/dist/types/elsie/src/components/PriceRange/index.d.ts +3 -0
- package/dist/types/elsie/src/components/ProgressSpinner/ProgressSpinner.d.ts +14 -0
- package/dist/types/elsie/src/components/ProgressSpinner/index.d.ts +3 -0
- package/dist/types/elsie/src/components/RadioButton/RadioButton.d.ts +16 -0
- package/dist/types/elsie/src/components/RadioButton/index.d.ts +3 -0
- package/dist/types/elsie/src/components/Skeleton/Skeleton.d.ts +17 -0
- package/dist/types/elsie/src/components/Skeleton/index.d.ts +2 -0
- package/dist/types/elsie/src/components/Tag/Tag.d.ts +9 -0
- package/dist/types/elsie/src/components/Tag/index.d.ts +3 -0
- package/dist/types/elsie/src/components/TextArea/TextArea.d.ts +11 -0
- package/dist/types/elsie/src/components/TextArea/index.d.ts +3 -0
- package/dist/types/elsie/src/components/TextSwatch/TextSwatch.d.ts +18 -0
- package/dist/types/elsie/src/components/TextSwatch/index.d.ts +3 -0
- package/dist/types/elsie/src/components/ToggleButton/ToggleButton.d.ts +14 -0
- package/dist/types/elsie/src/components/ToggleButton/index.d.ts +3 -0
- package/dist/types/elsie/src/components/UIProvider/UIProvider.d.ts +19 -0
- package/dist/types/elsie/src/components/UIProvider/index.d.ts +2 -0
- package/dist/types/elsie/src/components/index.d.ts +41 -0
- package/dist/types/elsie/src/i18n/en_US.json.d.ts +149 -0
- package/dist/types/elsie/src/i18n/index.d.ts +443 -0
- package/dist/types/elsie/src/icons/index.d.ts +43 -0
- package/dist/types/elsie/src/lib/classes.d.ts +6 -0
- package/dist/types/elsie/src/lib/config.d.ts +7 -0
- package/dist/types/elsie/src/lib/debounce.d.ts +2 -0
- package/dist/types/elsie/src/lib/deepmerge.d.ts +5 -0
- package/dist/types/elsie/src/lib/deviceUtils.d.ts +2 -0
- package/dist/types/elsie/src/lib/form-values.d.ts +5 -0
- package/dist/types/elsie/src/lib/i18n.d.ts +8 -0
- package/dist/types/elsie/src/lib/image-params-keymap.d.ts +4 -0
- package/dist/types/elsie/src/lib/index.d.ts +16 -0
- package/dist/types/elsie/src/lib/initializer.d.ts +81 -0
- package/dist/types/elsie/src/lib/is-number.d.ts +2 -0
- package/dist/types/elsie/src/lib/render.d.ts +42 -0
- package/dist/types/elsie/src/lib/resolve-image.d.ts +10 -0
- package/dist/types/elsie/src/lib/signals.d.ts +2 -0
- package/dist/types/elsie/src/lib/slot.d.ts +45 -0
- package/dist/types/elsie/src/lib/tests.d.ts +5 -0
- package/dist/types/elsie/src/lib/types.d.ts +10 -0
- package/dist/types/elsie/src/lib/vcomponent.d.ts +9 -0
- package/package.json +114 -0
- package/src/components/Accordion/Accordion.css +79 -0
- package/src/components/Accordion/Accordion.stories.tsx +566 -0
- package/src/components/Accordion/Accordion.tsx +166 -0
- package/src/components/Accordion/index.ts +2 -0
- package/src/components/ActionButton/ActionButton.css +91 -0
- package/src/components/ActionButton/ActionButton.stories.tsx +160 -0
- package/src/components/ActionButton/ActionButton.tsx +44 -0
- package/src/components/ActionButton/index.ts +1 -0
- package/src/components/ActionButtonGroup/ActionButtonGroup.css +68 -0
- package/src/components/ActionButtonGroup/ActionButtonGroup.stories.tsx +88 -0
- package/src/components/ActionButtonGroup/ActionButtonGroup.tsx +82 -0
- package/src/components/ActionButtonGroup/index.ts +1 -0
- package/src/components/AlertBanner/AlertBanner.css +135 -0
- package/src/components/AlertBanner/AlertBanner.stories.tsx +156 -0
- package/src/components/AlertBanner/AlertBanner.tsx +81 -0
- package/src/components/AlertBanner/index.ts +2 -0
- package/src/components/Breadcrumbs/Breadcrumbs.css +51 -0
- package/src/components/Breadcrumbs/Breadcrumbs.stories.tsx +186 -0
- package/src/components/Breadcrumbs/Breadcrumbs.tsx +62 -0
- package/src/components/Breadcrumbs/index.ts +2 -0
- package/src/components/Button/Button.css +204 -0
- package/src/components/Button/Button.mdx +133 -0
- package/src/components/Button/Button.stories.tsx +389 -0
- package/src/components/Button/Button.tsx +112 -0
- package/src/components/Button/index.ts +2 -0
- package/src/components/Card/Card.css +25 -0
- package/src/components/Card/Card.stories.tsx +67 -0
- package/src/components/Card/Card.tsx +25 -0
- package/src/components/Card/index.ts +1 -0
- package/src/components/CartItem/CartItem.css +474 -0
- package/src/components/CartItem/CartItem.stories.tsx +588 -0
- package/src/components/CartItem/CartItem.tsx +444 -0
- package/src/components/CartItem/CartItemSkeleton.tsx +29 -0
- package/src/components/CartItem/index.ts +3 -0
- package/src/components/CartList/CartList.css +26 -0
- package/src/components/CartList/CartList.stories.tsx +102 -0
- package/src/components/CartList/CartList.tsx +31 -0
- package/src/components/CartList/index.ts +2 -0
- package/src/components/Checkbox/Checkbox.css +246 -0
- package/src/components/Checkbox/Checkbox.stories.tsx +281 -0
- package/src/components/Checkbox/Checkbox.tsx +129 -0
- package/src/components/Checkbox/index.ts +1 -0
- package/src/components/ColorSwatch/ColorSwatch.css +123 -0
- package/src/components/ColorSwatch/ColorSwatch.stories.tsx +265 -0
- package/src/components/ColorSwatch/ColorSwatch.tsx +118 -0
- package/src/components/ColorSwatch/index.ts +2 -0
- package/src/components/ContentGrid/ContentGrid.css +62 -0
- package/src/components/ContentGrid/ContentGrid.stories.tsx +145 -0
- package/src/components/ContentGrid/ContentGrid.tsx +65 -0
- package/src/components/ContentGrid/index.ts +19 -0
- package/src/components/Divider/Divider.css +13 -0
- package/src/components/Divider/Divider.stories.tsx +53 -0
- package/src/components/Divider/Divider.tsx +24 -0
- package/src/components/Divider/index.ts +2 -0
- package/src/components/Field/Field.css +74 -0
- package/src/components/Field/Field.stories.tsx +229 -0
- package/src/components/Field/Field.tsx +75 -0
- package/src/components/Field/index.ts +1 -0
- package/src/components/Header/Header.css +47 -0
- package/src/components/Header/Header.stories.tsx +128 -0
- package/src/components/Header/Header.tsx +53 -0
- package/src/components/Header/index.ts +2 -0
- package/src/components/Icon/Icon.css +17 -0
- package/src/components/Icon/Icon.stories.helpers.jsx +12 -0
- package/src/components/Icon/Icon.stories.tsx +88 -0
- package/src/components/Icon/Icon.tsx +103 -0
- package/src/components/Icon/index.ts +1 -0
- package/src/components/IllustratedMessage/IllustratedMessage.css +52 -0
- package/src/components/IllustratedMessage/IllustratedMessage.stories.tsx +117 -0
- package/src/components/IllustratedMessage/IllustratedMessage.tsx +69 -0
- package/src/components/IllustratedMessage/index.ts +2 -0
- package/src/components/Image/Image.css +43 -0
- package/src/components/Image/Image.stories.tsx +80 -0
- package/src/components/Image/Image.tsx +57 -0
- package/src/components/Image/index.ts +1 -0
- package/src/components/ImageSwatch/ImageSwatch.css +145 -0
- package/src/components/ImageSwatch/ImageSwatch.stories.tsx +252 -0
- package/src/components/ImageSwatch/ImageSwatch.tsx +111 -0
- package/src/components/ImageSwatch/index.ts +2 -0
- package/src/components/InLineAlert/InLineAlert.css +107 -0
- package/src/components/InLineAlert/InLineAlert.stories.tsx +317 -0
- package/src/components/InLineAlert/InLineAlert.tsx +119 -0
- package/src/components/InLineAlert/index.ts +2 -0
- package/src/components/Incrementer/Incrementer.css +156 -0
- package/src/components/Incrementer/Incrementer.stories.tsx +163 -0
- package/src/components/Incrementer/Incrementer.tsx +183 -0
- package/src/components/Incrementer/index.ts +1 -0
- package/src/components/Input/Input.css +295 -0
- package/src/components/Input/Input.stories.tsx +146 -0
- package/src/components/Input/Input.tsx +157 -0
- package/src/components/Input/index.ts +2 -0
- package/src/components/InputDate/InputDate.css +47 -0
- package/src/components/InputDate/InputDate.stories.tsx +108 -0
- package/src/components/InputDate/InputDate.tsx +111 -0
- package/src/components/InputDate/index.ts +2 -0
- package/src/components/InputPassword/InputPassword.css +22 -0
- package/src/components/InputPassword/InputPassword.stories.tsx +139 -0
- package/src/components/InputPassword/InputPassword.tsx +126 -0
- package/src/components/InputPassword/PasswordStatusIndicator/PasswordStatusIndicator.css +22 -0
- package/src/components/InputPassword/PasswordStatusIndicator/PasswordStatusIndicator.tsx +87 -0
- package/src/components/InputPassword/PasswordStatusIndicator/index.ts +2 -0
- package/src/components/InputPassword/index.ts +2 -0
- package/src/components/Modal/Modal.css +130 -0
- package/src/components/Modal/Modal.stories.tsx +255 -0
- package/src/components/Modal/Modal.tsx +162 -0
- package/src/components/Modal/index.ts +15 -0
- package/src/components/Pagination/Pagination.css +86 -0
- package/src/components/Pagination/Pagination.stories.tsx +108 -0
- package/src/components/Pagination/Pagination.tsx +140 -0
- package/src/components/Pagination/index.ts +2 -0
- package/src/components/Picker/Picker.css +211 -0
- package/src/components/Picker/Picker.stories.tsx +309 -0
- package/src/components/Picker/Picker.tsx +194 -0
- package/src/components/Picker/index.ts +1 -0
- package/src/components/Price/Price.css +48 -0
- package/src/components/Price/Price.stories.tsx +101 -0
- package/src/components/Price/Price.tsx +66 -0
- package/src/components/Price/index.ts +1 -0
- package/src/components/PriceRange/PriceRange.css +57 -0
- package/src/components/PriceRange/PriceRange.stories.tsx +231 -0
- package/src/components/PriceRange/PriceRange.tsx +239 -0
- package/src/components/PriceRange/index.ts +2 -0
- package/src/components/ProgressSpinner/ProgressSpinner.css +82 -0
- package/src/components/ProgressSpinner/ProgressSpinner.stories.tsx +291 -0
- package/src/components/ProgressSpinner/ProgressSpinner.tsx +77 -0
- package/src/components/ProgressSpinner/index.ts +2 -0
- package/src/components/RadioButton/RadioButton.css +125 -0
- package/src/components/RadioButton/RadioButton.stories.tsx +117 -0
- package/src/components/RadioButton/RadioButton.tsx +77 -0
- package/src/components/RadioButton/index.ts +2 -0
- package/src/components/Skeleton/Skeleton.css +136 -0
- package/src/components/Skeleton/Skeleton.stories.tsx +256 -0
- package/src/components/Skeleton/Skeleton.tsx +124 -0
- package/src/components/Skeleton/index.ts +1 -0
- package/src/components/Tag/Tag.css +17 -0
- package/src/components/Tag/Tag.stories.tsx +94 -0
- package/src/components/Tag/Tag.tsx +29 -0
- package/src/components/Tag/index.ts +2 -0
- package/src/components/TextArea/TextArea.css +131 -0
- package/src/components/TextArea/TextArea.stories.tsx +121 -0
- package/src/components/TextArea/TextArea.tsx +80 -0
- package/src/components/TextArea/index.ts +2 -0
- package/src/components/TextSwatch/TextSwatch.css +143 -0
- package/src/components/TextSwatch/TextSwatch.stories.tsx +268 -0
- package/src/components/TextSwatch/TextSwatch.tsx +122 -0
- package/src/components/TextSwatch/index.ts +2 -0
- package/src/components/ToggleButton/ToggleButton.css +77 -0
- package/src/components/ToggleButton/ToggleButton.stories.tsx +146 -0
- package/src/components/ToggleButton/ToggleButton.tsx +67 -0
- package/src/components/ToggleButton/index.ts +2 -0
- package/src/components/UIProvider/UIProvider.css +131 -0
- package/src/components/UIProvider/UIProvider.tsx +52 -0
- package/src/components/UIProvider/debugger.css +38 -0
- package/src/components/UIProvider/index.ts +1 -0
- package/src/components/UIProvider/normalize.css +17 -0
- package/src/components/index.ts +40 -0
- package/src/docs/API/event-bus.mdx +52 -0
- package/src/docs/API/graphql.mdx +214 -0
- package/src/docs/API/initializer.mdx +110 -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 +17 -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 +25 -0
- package/src/lib/config.ts +15 -0
- package/src/lib/debounce.ts +7 -0
- package/src/lib/deepmerge.ts +36 -0
- package/src/lib/deviceUtils.ts +7 -0
- package/src/lib/form-values.ts +22 -0
- package/src/lib/i18n.ts +9 -0
- package/src/lib/image-params-keymap.ts +25 -0
- package/src/lib/index.ts +15 -0
- package/src/lib/initializer.ts +122 -0
- package/src/lib/is-number.ts +3 -0
- package/src/lib/render.tsx +129 -0
- package/src/lib/resolve-image.ts +77 -0
- package/src/lib/signals.ts +2 -0
- package/src/lib/slot.tsx +425 -0
- package/src/lib/tests.tsx +38 -0
- package/src/lib/types.ts +7 -0
- package/src/lib/vcomponent.tsx +47 -0
- package/static/assets/images/Card.png +0 -0
- package/static/assets/images/example.jpg +0 -0
- package/static/assets/images/index.ts +2 -0
- package/static/dropin.png +0 -0
- package/static/favicon.svg +14 -0
- package/storybook-stories.js +12 -0
- package/tests/__mocks__/browserMocks.ts +19 -0
- package/tests/__mocks__/fileMocks.ts +3 -0
- package/tests/__mocks__/styleMock.ts +0 -0
- package/types/icons.d.ts +9 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { Meta, Unstyled } from '@storybook/blocks';
|
|
2
|
+
|
|
3
|
+
<Meta title="Build Tools/GraphQL API" />
|
|
4
|
+
<Unstyled>
|
|
5
|
+
|
|
6
|
+
# GraphQL Extensibility API
|
|
7
|
+
|
|
8
|
+
The GraphQL Extensibility API allows developers to extend existing GraphQL operations used by a Drop-in to meet additional data requirements without increasing code complexity or negatively impacting performance.
|
|
9
|
+
This API provides a flexible and efficient way to customize GraphQL Fragments by integrating build-time modifications into the storefront's development pipeline.
|
|
10
|
+
|
|
11
|
+
## Extend your Drop-in GraphQL Fragments
|
|
12
|
+
|
|
13
|
+
To enable GraphQL Fragments to be extensible in your Drop-in, follow these steps:
|
|
14
|
+
|
|
15
|
+
### Step 1: Define Your Fragments
|
|
16
|
+
|
|
17
|
+
Create the content for the fragments you are exporting.
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
// ./src/api/fragments/MyFragment.ts
|
|
21
|
+
|
|
22
|
+
export const MY_FRAGMENT = `
|
|
23
|
+
fragment MY_FRAGMENT on FragmentInterface {
|
|
24
|
+
firstname
|
|
25
|
+
lastname
|
|
26
|
+
|
|
27
|
+
favorites {
|
|
28
|
+
uid
|
|
29
|
+
name
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
`;
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Step 2: Create Fragments Manifest File
|
|
36
|
+
|
|
37
|
+
Next, create a new file for your project to list all the fragments you want to expose.
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
// ./src/api/fragments.ts
|
|
41
|
+
|
|
42
|
+
export { MY_FRAGMENT } from '@/my-dropin/api/graphql/MyFragment';
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Step 3: Update the API Configuration
|
|
46
|
+
|
|
47
|
+
Finally, add the new file reference to the API configuration in `./.elsie.js`.
|
|
48
|
+
|
|
49
|
+
```js
|
|
50
|
+
// ./.elsie.js
|
|
51
|
+
|
|
52
|
+
module.exports = {
|
|
53
|
+
name: 'MyDropin',
|
|
54
|
+
api: {
|
|
55
|
+
root: './src/api',
|
|
56
|
+
importAliasRoot: '@/my-dropin/api',
|
|
57
|
+
fragments: './fragments.ts', // 👈 add this line
|
|
58
|
+
},
|
|
59
|
+
components: [
|
|
60
|
+
{
|
|
61
|
+
id: 'Components',
|
|
62
|
+
root: './src/components',
|
|
63
|
+
importAliasRoot: '@/my-dropin/components',
|
|
64
|
+
cssPrefix: 'my-dropin',
|
|
65
|
+
default: true,
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
containers: {
|
|
69
|
+
root: './src/containers',
|
|
70
|
+
importAliasRoot: '@/my-dropin/containers',
|
|
71
|
+
},
|
|
72
|
+
schema: {
|
|
73
|
+
endpoint: process.env.ENDPOINT,
|
|
74
|
+
headers: {}
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Extend the Data module
|
|
80
|
+
|
|
81
|
+
Now that we have made our fragments extensible, we must extend the data model used in our Drop-ins.
|
|
82
|
+
|
|
83
|
+
### Step 1: Define Typing to the Initializer API
|
|
84
|
+
|
|
85
|
+
First, add the typing to your initializer API in `./src/api/initialize/initialize.ts`.
|
|
86
|
+
|
|
87
|
+
```ts
|
|
88
|
+
// ./src/api/initialize/initialize.ts
|
|
89
|
+
|
|
90
|
+
import { Initializer, Model } from '@adobe/elsie/lib';
|
|
91
|
+
import { Lang } from '@adobe/elsie/i18n';
|
|
92
|
+
import { MyModel } from '@/my-dropin/data/models';
|
|
93
|
+
|
|
94
|
+
type ConfigProps = {
|
|
95
|
+
langDefinitions?: Lang;
|
|
96
|
+
|
|
97
|
+
// 👇 add your models configuration
|
|
98
|
+
models?: {
|
|
99
|
+
MyModel?: Model<MyModel>;
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
export const initialize = new Initializer<ConfigProps>({
|
|
104
|
+
init: async (config) => {
|
|
105
|
+
const defaultConfig = {};
|
|
106
|
+
initialize.config.setConfig({ ...defaultConfig, ...config });
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
listeners: () => [],
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
export const config = initialize.config;
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Step 2: Extend the Data Transformer
|
|
116
|
+
|
|
117
|
+
Then, use the configuration to extend the data transformer the model uses by deep merging the existing data transformation with the new configuration.
|
|
118
|
+
|
|
119
|
+
```ts
|
|
120
|
+
// ./src/data/transforms/transform-my-model.ts
|
|
121
|
+
import { merge } from '@adobe/elsie/lib';
|
|
122
|
+
import { MyModel } from '@/my-dropin/data/models';
|
|
123
|
+
|
|
124
|
+
export function transformMyModel(data: any): MyModel {
|
|
125
|
+
const model = {
|
|
126
|
+
name: `${data.firstname} ${data.lastname}`,
|
|
127
|
+
favorites: data.favorites,
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
// Merge custom transformer, if provided
|
|
131
|
+
return merge(
|
|
132
|
+
model, // default transformer
|
|
133
|
+
config.getConfig().models?.MyModel?.transformer?.(data) // custom transformer
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
# Using the GraphQL Extensibility Feature in Your Storefront
|
|
141
|
+
|
|
142
|
+
By extending the GraphQL Fragments and Models of drop-ins, you can leverage the drop-in's existing GraphQL operations and add extra fields needed to meet your specific business requirements.
|
|
143
|
+
This approach enhances the user experience while maintaining code simplicity and performance efficiency since all modifications are integrated into the storefront's development build-time pipeline.
|
|
144
|
+
|
|
145
|
+
## Extend Drop-in's Fragments and Models
|
|
146
|
+
|
|
147
|
+
Follow these steps to extend the GraphQL Fragment and Model in your Drop-in:
|
|
148
|
+
|
|
149
|
+
### Step 1: Extend the GraphQL Fragment
|
|
150
|
+
|
|
151
|
+
Use the `overrideGQLOperations` function to extend the existing GraphQL Fragment, allowing you to add fields to the fragment as needed.
|
|
152
|
+
|
|
153
|
+
The `overrideGQLOperations` functions accept an array of configuration objects where you must specify:
|
|
154
|
+
|
|
155
|
+
#### npm: string
|
|
156
|
+
|
|
157
|
+
The node module name of the drop-in. i.e. "@dropins/my-dropin".
|
|
158
|
+
|
|
159
|
+
#### operations: string[]
|
|
160
|
+
|
|
161
|
+
An array of string or template literal with operations.
|
|
162
|
+
|
|
163
|
+
- Only one definition can be provided in the operation.
|
|
164
|
+
- These must match the operation name as provided by the drop-in. i.e. `MY_FRAGMENT`.
|
|
165
|
+
- The operations must be valid GraphQL operations, such as Fragment. i.e. `fragment MY_FRAGMENT on FragmentInterface { ... }`.
|
|
166
|
+
- In the case of a Fragment, the fragment name must match the same interface as the drop-in. i.e. `FragmentInterface`.
|
|
167
|
+
- If an existing field that has variables is used:
|
|
168
|
+
- If not variables are provided, the existing variables will be used. i.e. `favorites(page: 1) { ... }`.
|
|
169
|
+
- If new variables are provided, the new variable will be added. i.e. `favorites(page: 1, offset: 5) { ... }`.
|
|
170
|
+
- If the existing variables are changed, the new variables will be used. i.e. `favorites(page: 2) { ... }`.
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
```js
|
|
174
|
+
import overrideGQLOperations from '@dropins/build-tools/gql-extend.js';
|
|
175
|
+
|
|
176
|
+
overrideGQLOperations([
|
|
177
|
+
{
|
|
178
|
+
npm: '@dropins/my-dropin',
|
|
179
|
+
operations: [`
|
|
180
|
+
fragment MY_FRAGMENT on FragmentInterface {
|
|
181
|
+
age
|
|
182
|
+
|
|
183
|
+
favorites {
|
|
184
|
+
quantity
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
`],
|
|
188
|
+
},
|
|
189
|
+
]);
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
### Step 2: Extend the Data Model
|
|
193
|
+
|
|
194
|
+
Next, update the data models to include the new fields added to the fragment, ensuring that the additional data is correctly processed and available for use in the drop-in. i.e., Slots, Event Bus, etc.
|
|
195
|
+
|
|
196
|
+
```js
|
|
197
|
+
import * as api from '@dropins/storefront-cart/api.js';
|
|
198
|
+
|
|
199
|
+
initializers.register(api.initialize, {
|
|
200
|
+
models: {
|
|
201
|
+
MyModel: {
|
|
202
|
+
transformer: (data) => ({
|
|
203
|
+
age: data?.age,
|
|
204
|
+
favorites: data.favorites.map((favorite) => ({
|
|
205
|
+
quantity: favorite.quantity,
|
|
206
|
+
})),
|
|
207
|
+
}),
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
</Unstyled>
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { Meta, Unstyled } from '@storybook/blocks';
|
|
2
|
+
|
|
3
|
+
<Meta title="API/Initializer" />
|
|
4
|
+
<Unstyled>
|
|
5
|
+
|
|
6
|
+
# Initializer
|
|
7
|
+
|
|
8
|
+
```typescript
|
|
9
|
+
// my-dropin/initializer.ts
|
|
10
|
+
|
|
11
|
+
import { Initializer } from '@adobe/elsie/lib';
|
|
12
|
+
// import { events } from '@adobe/event-bus';
|
|
13
|
+
|
|
14
|
+
type ConfigProps = {};
|
|
15
|
+
|
|
16
|
+
export const initialize = new Initializer<ConfigProps>({
|
|
17
|
+
init: async (config) => {
|
|
18
|
+
const defaultConfig = {};
|
|
19
|
+
initialize.config.setConfig({ ...defaultConfig, ...config });
|
|
20
|
+
},
|
|
21
|
+
|
|
22
|
+
listeners: () => [
|
|
23
|
+
// events.on('authenticated', (authenticated) => {
|
|
24
|
+
// console.log('authenticated', authenticated);
|
|
25
|
+
// }),
|
|
26
|
+
],
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
export const config = initialize.config;
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
```typescript
|
|
33
|
+
// Host Site
|
|
34
|
+
import { initializers } from '@dropins/tools/initializer.js';
|
|
35
|
+
import { initialize as pkg } from 'my-dropin/initializer.js';
|
|
36
|
+
|
|
37
|
+
// Register Packages
|
|
38
|
+
initializers.register(pkg, { ...config });
|
|
39
|
+
|
|
40
|
+
// Mount Initializers
|
|
41
|
+
window.addEventListener('load', initializers.mount);
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
</Unstyled>
|
|
45
|
+
|
|
46
|
+
## `setImageParamKeys(params)`
|
|
47
|
+
|
|
48
|
+
This method is part of the initializers module in the @dropins/tools package.
|
|
49
|
+
It allows you to set image parameters globally for all drop-ins that use the Image component.
|
|
50
|
+
|
|
51
|
+
The default behavior is to utilize Fastly parameters if setImageParamKeys() is not called or if no parameters are provided.
|
|
52
|
+
|
|
53
|
+
The setImageParamKeys() method accepts a mapping of image parameter keys to URL parameters.
|
|
54
|
+
The provided image parameters are set globally and used by all drop-ins utilizing the Image component.
|
|
55
|
+
|
|
56
|
+
If a parameter key is provided via setImageParamKeys(), it is used in generating image URLs instead of the default Fastly parameters.
|
|
57
|
+
If a parameter key is not provided via setImageParamKeys(), it is completely omitted from the generated image URLs.
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
### Parameters
|
|
61
|
+
|
|
62
|
+
- `params` - `{ [key: string]: string }` - An object of key-value pairs to map image parameters to their respective keys in the URL.
|
|
63
|
+
|
|
64
|
+
### Usage
|
|
65
|
+
|
|
66
|
+
Call the setImageParamKeys() function before the register() and mount() functions in the application layer.
|
|
67
|
+
|
|
68
|
+
```javascript
|
|
69
|
+
// Set global image parameters
|
|
70
|
+
initializers.setImageParamKeys({
|
|
71
|
+
width: 'imgWidth',
|
|
72
|
+
quality: 'imgQuality',
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
// Register Initializers
|
|
76
|
+
initializers.register(pkg.initialize, {
|
|
77
|
+
langDefinitions,
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
// Mount Initializers
|
|
81
|
+
initializers.mount();
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Now, when a dropin uses the Image component to render an image with a width of 300 pixels:
|
|
85
|
+
|
|
86
|
+
```jsx
|
|
87
|
+
<Image
|
|
88
|
+
loading={'lazy'}
|
|
89
|
+
src={'https://example.com/image.jpg'}
|
|
90
|
+
alt={'Example Image'}
|
|
91
|
+
width="300"
|
|
92
|
+
height="300"
|
|
93
|
+
params={{ width: 300, quality: 80}}
|
|
94
|
+
/>
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
It renders the following image element:
|
|
98
|
+
|
|
99
|
+
```html
|
|
100
|
+
<img
|
|
101
|
+
loading="lazy"
|
|
102
|
+
src="https://example.com/image.jpg?imgWidth=300&imgQuality=80"
|
|
103
|
+
srcset="https://example.com/image.jpg?imgWidth=300&imgQuality=80 768w, https://example.com/image.jpg?imgWidth=300&imgQuality=80 1024w, https://example.com/image.jpg?imgWidth=300&imgQuality=80 1366w, https://example.com/image.jpg?imgWidth=300&imgQuality=80 1920w"
|
|
104
|
+
alt="Example Image"
|
|
105
|
+
width="300"
|
|
106
|
+
height="300"
|
|
107
|
+
/>
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
In this example, the width parameter is mapped to imgWidth and the quality parameter is mapped to imgQuality.
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { Meta, Unstyled } from '@storybook/blocks';
|
|
2
|
+
|
|
3
|
+
<Meta title="API/Render" />
|
|
4
|
+
<Unstyled>
|
|
5
|
+
|
|
6
|
+
# Render
|
|
7
|
+
|
|
8
|
+
## Implementing a new render in your dropin
|
|
9
|
+
|
|
10
|
+
To implement a new render in your dropin, you must create an instance of the `Render` class from the `@adobe/elsie/lib` library, passing in a `Provider` component.
|
|
11
|
+
This setup initializes the rendering context with the specified provider, which can manage state, context, or other dependencies required by your components.
|
|
12
|
+
By exporting this `render` instance, you enable different parts of your application to render components within the defined context, ensuring consistent behavior and integration across your application.
|
|
13
|
+
|
|
14
|
+
```ts
|
|
15
|
+
// Dropin
|
|
16
|
+
|
|
17
|
+
import { Render } from '@adobe/elsie/lib';
|
|
18
|
+
import { Provider } from './Provider';
|
|
19
|
+
|
|
20
|
+
export const render = new Render(<Provider />);
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Rendering a dropin's container in a storefront
|
|
24
|
+
|
|
25
|
+
The render function mounts a drop-in container or component into the DOM and manages its lifecycle.
|
|
26
|
+
It returns a Promise that resolves to an object containing methods for updating and removing the component instance.
|
|
27
|
+
|
|
28
|
+
```js
|
|
29
|
+
// Storefront
|
|
30
|
+
import { render as provider } from 'my-domain-pkg/render.js';
|
|
31
|
+
import { MyContainer } from 'my-domain-pkg/containers/MyContainer.js';
|
|
32
|
+
|
|
33
|
+
const wrapper = document.getElementById('my-container-root');
|
|
34
|
+
|
|
35
|
+
provider.render(MyContainer, { ...props })(wrapper);
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Using VNode as a property
|
|
39
|
+
|
|
40
|
+
Some components may require VNodes as properties. If you are using another component from the library, provide the VNode by executing the component as a function.
|
|
41
|
+
|
|
42
|
+
```js
|
|
43
|
+
// Storefront
|
|
44
|
+
|
|
45
|
+
import { Button, Icon, provider } from '@dropins/tools/components.js';
|
|
46
|
+
|
|
47
|
+
const wrapper = document.getElementById('my-container-root');
|
|
48
|
+
|
|
49
|
+
provider.render(Button, {
|
|
50
|
+
children: 'My Button',
|
|
51
|
+
icon: Icon({ source: 'Heart' }),
|
|
52
|
+
})(wrapper);
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
You may also create your VNode using the `h` function from the Preact library.
|
|
56
|
+
|
|
57
|
+
```js
|
|
58
|
+
// Storefront
|
|
59
|
+
|
|
60
|
+
import { Button, provider } from '@dropins/tools/components.js';
|
|
61
|
+
import { h } from '@dropins/tools/preact.js';
|
|
62
|
+
|
|
63
|
+
const wrapper = document.getElementById('my-container-root');
|
|
64
|
+
|
|
65
|
+
provider.render(Button, { icon: h('div', { id: 'my-vnode' }) })(wrapper);
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Update properties of a rendered component
|
|
69
|
+
|
|
70
|
+
The `setProps` method is provided by the instance returned from the `render` function.
|
|
71
|
+
It allows for dynamic updates to the properties of a rendered component.
|
|
72
|
+
By accepting an updater function, `setProps` lets you modify the component's props based on its previous state.
|
|
73
|
+
This method is particularly useful for making incremental changes or responding to user interactions
|
|
74
|
+
without re-rendering the entire component. It ensures that the component's state remains consistent
|
|
75
|
+
and up-to-date with the latest data or user inputs.
|
|
76
|
+
|
|
77
|
+
#### Example
|
|
78
|
+
|
|
79
|
+
```js
|
|
80
|
+
// Storefront
|
|
81
|
+
|
|
82
|
+
import { render as provider } from 'my-domain-pkg/render.js';
|
|
83
|
+
import { MyContainer } from 'my-domain-pkg/containers/MyContainer.js';
|
|
84
|
+
|
|
85
|
+
const wrapper = document.getElementById('my-container-root');
|
|
86
|
+
const myContainer = await provider.render(MyContainer, { ...props })(wrapper);
|
|
87
|
+
|
|
88
|
+
const button = document.getElementById('my-button');
|
|
89
|
+
|
|
90
|
+
button.addEventListener('click', () => {
|
|
91
|
+
// Update the component's props
|
|
92
|
+
myContainer.setProps((prevProps) => ({
|
|
93
|
+
...prevProps,
|
|
94
|
+
newProp: 'new value',
|
|
95
|
+
}));
|
|
96
|
+
});
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Remove a rendered component from the DOM
|
|
100
|
+
|
|
101
|
+
The `remove` method is provided by the instance returned from the `render` function.
|
|
102
|
+
It allows for the complete removal of a rendered component from the DOM.
|
|
103
|
+
When invoked, `remove` ensures that the component and its associated resources are properly cleaned up,
|
|
104
|
+
preventing memory leaks and maintaining the application's overall performance.
|
|
105
|
+
This method is essential for managing the lifecycle of dynamic components,
|
|
106
|
+
especially in applications where components need to be frequently added and removed based
|
|
107
|
+
on user interactions or other events.
|
|
108
|
+
|
|
109
|
+
```js
|
|
110
|
+
import { render as provider } from 'my-domain-pkg/render.js';
|
|
111
|
+
import { MyContainer } from 'my-domain-pkg/containers/MyContainer.js';
|
|
112
|
+
|
|
113
|
+
const wrapper = document.getElementById('my-container-root');
|
|
114
|
+
const myContainer = await provider.render(MyContainer, { ...props })(wrapper);
|
|
115
|
+
|
|
116
|
+
const button = document.getElementById('my-button');
|
|
117
|
+
|
|
118
|
+
button.addEventListener('click', () => {
|
|
119
|
+
// Remove the component from the DOM
|
|
120
|
+
myContainer.remove();
|
|
121
|
+
});
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
</Unstyled>
|
|
125
|
+
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { Meta, Unstyled } from '@storybook/blocks';
|
|
2
|
+
import { Block, DesignSwatchGroup, TokenDefinitions } from './designBlocks';
|
|
3
|
+
import colorsData from '@adobe/storefront-design/base/colors/colors.json';
|
|
4
|
+
import { getTokenData } from './getTokenData';
|
|
5
|
+
|
|
6
|
+
export const tokenData = getTokenData(colorsData);
|
|
7
|
+
export const tokenNames = tokenData.map((token) => token.name);
|
|
8
|
+
|
|
9
|
+
<Meta title="Design/Colors" />
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
<Unstyled>
|
|
13
|
+
|
|
14
|
+
# Color Design tokens
|
|
15
|
+
|
|
16
|
+
Use color to create meaningful experiences while also expressing hierarchy, state, and brand identity.
|
|
17
|
+
Add as many colors and shades as you need, here you have the basics.
|
|
18
|
+
|
|
19
|
+
## Available Design tokens
|
|
20
|
+
|
|
21
|
+
### Brand
|
|
22
|
+
|
|
23
|
+
export const colorBrandPrefix = '--color-brand';
|
|
24
|
+
|
|
25
|
+
<TokenDefinitions
|
|
26
|
+
tokenData={tokenData.filter((data) => data.name.startsWith(colorBrandPrefix))}
|
|
27
|
+
/>
|
|
28
|
+
|
|
29
|
+
<Block>
|
|
30
|
+
<DesignSwatchGroup
|
|
31
|
+
property="background"
|
|
32
|
+
prefix={colorBrandPrefix}
|
|
33
|
+
tokens={tokenNames}
|
|
34
|
+
groupStyles={{ margin: 'none' }}
|
|
35
|
+
swatchStyles={{ border: 'none' }}
|
|
36
|
+
/>
|
|
37
|
+
</Block>
|
|
38
|
+
|
|
39
|
+
### Neutrals
|
|
40
|
+
|
|
41
|
+
export const colorNeutralPrefix = '--color-neutral';
|
|
42
|
+
|
|
43
|
+
<TokenDefinitions
|
|
44
|
+
tokenData={tokenData.filter((data) =>
|
|
45
|
+
data.name.startsWith(colorNeutralPrefix)
|
|
46
|
+
)}
|
|
47
|
+
/>
|
|
48
|
+
|
|
49
|
+
<Block>
|
|
50
|
+
<DesignSwatchGroup
|
|
51
|
+
property="background"
|
|
52
|
+
prefix={colorNeutralPrefix}
|
|
53
|
+
tokens={tokenNames}
|
|
54
|
+
groupStyles={{ margin: 'none' }}
|
|
55
|
+
swatchStyles={{ border: 'none' }}
|
|
56
|
+
/>
|
|
57
|
+
</Block>
|
|
58
|
+
|
|
59
|
+
### Positive
|
|
60
|
+
|
|
61
|
+
export const colorPositivePrefix = '--color-positive';
|
|
62
|
+
|
|
63
|
+
<TokenDefinitions
|
|
64
|
+
tokenData={tokenData.filter((data) =>
|
|
65
|
+
data.name.startsWith(colorPositivePrefix)
|
|
66
|
+
)}
|
|
67
|
+
/>
|
|
68
|
+
|
|
69
|
+
<Block>
|
|
70
|
+
<DesignSwatchGroup
|
|
71
|
+
property="background"
|
|
72
|
+
prefix={colorPositivePrefix}
|
|
73
|
+
tokens={tokenNames}
|
|
74
|
+
groupStyles={{ margin: 'none' }}
|
|
75
|
+
swatchStyles={{ border: 'none' }}
|
|
76
|
+
/>
|
|
77
|
+
</Block>
|
|
78
|
+
|
|
79
|
+
### Informational
|
|
80
|
+
|
|
81
|
+
export const colorInformationalPrefix = '--color-informational';
|
|
82
|
+
|
|
83
|
+
<TokenDefinitions
|
|
84
|
+
tokenData={tokenData.filter((data) =>
|
|
85
|
+
data.name.startsWith(colorInformationalPrefix)
|
|
86
|
+
)}
|
|
87
|
+
/>
|
|
88
|
+
|
|
89
|
+
<Block>
|
|
90
|
+
<DesignSwatchGroup
|
|
91
|
+
property="background"
|
|
92
|
+
prefix={colorInformationalPrefix}
|
|
93
|
+
tokens={tokenNames}
|
|
94
|
+
groupStyles={{ margin: 'none' }}
|
|
95
|
+
swatchStyles={{ border: 'none' }}
|
|
96
|
+
/>
|
|
97
|
+
</Block>
|
|
98
|
+
|
|
99
|
+
### Warning
|
|
100
|
+
|
|
101
|
+
export const colorWarningPrefix = '--color-warning';
|
|
102
|
+
|
|
103
|
+
<TokenDefinitions
|
|
104
|
+
tokenData={tokenData.filter((data) =>
|
|
105
|
+
data.name.startsWith(colorWarningPrefix)
|
|
106
|
+
)}
|
|
107
|
+
/>
|
|
108
|
+
|
|
109
|
+
<Block>
|
|
110
|
+
<DesignSwatchGroup
|
|
111
|
+
property="background"
|
|
112
|
+
prefix={colorWarningPrefix}
|
|
113
|
+
tokens={tokenNames}
|
|
114
|
+
groupStyles={{ margin: 'none' }}
|
|
115
|
+
swatchStyles={{ border: 'none' }}
|
|
116
|
+
/>
|
|
117
|
+
</Block>
|
|
118
|
+
|
|
119
|
+
### Alert
|
|
120
|
+
|
|
121
|
+
export const colorAlertPrefix = '--color-alert';
|
|
122
|
+
|
|
123
|
+
<TokenDefinitions
|
|
124
|
+
tokenData={tokenData.filter((data) => data.name.startsWith(colorAlertPrefix))}
|
|
125
|
+
/>
|
|
126
|
+
|
|
127
|
+
<Block>
|
|
128
|
+
<DesignSwatchGroup
|
|
129
|
+
property="background"
|
|
130
|
+
prefix={colorAlertPrefix}
|
|
131
|
+
tokens={tokenNames}
|
|
132
|
+
groupStyles={{ margin: 'none' }}
|
|
133
|
+
swatchStyles={{ border: 'none' }}
|
|
134
|
+
/>
|
|
135
|
+
</Block>
|
|
136
|
+
|
|
137
|
+
### Opacity
|
|
138
|
+
|
|
139
|
+
export const colorOpacityPrefix = '--color-opacity';
|
|
140
|
+
|
|
141
|
+
<TokenDefinitions
|
|
142
|
+
tokenData={tokenData.filter((data) =>
|
|
143
|
+
data.name.startsWith(colorOpacityPrefix)
|
|
144
|
+
)}
|
|
145
|
+
/>
|
|
146
|
+
|
|
147
|
+
<Block
|
|
148
|
+
style={{
|
|
149
|
+
background: 'var(--color-neutral-900)',
|
|
150
|
+
color: 'var(--color-neutral-50)',
|
|
151
|
+
}}
|
|
152
|
+
>
|
|
153
|
+
<DesignSwatchGroup
|
|
154
|
+
property="background"
|
|
155
|
+
prefix={colorOpacityPrefix}
|
|
156
|
+
tokens={tokenNames}
|
|
157
|
+
groupStyles={{ margin: 'none' }}
|
|
158
|
+
swatchStyles={{ border: 'none' }}
|
|
159
|
+
/>
|
|
160
|
+
</Block>
|
|
161
|
+
|
|
162
|
+
### Button States
|
|
163
|
+
|
|
164
|
+
export const colorButtonState = '--color-button';
|
|
165
|
+
|
|
166
|
+
<TokenDefinitions
|
|
167
|
+
tokenData={tokenData.filter((data) =>
|
|
168
|
+
data.name.startsWith(colorButtonState)
|
|
169
|
+
)}
|
|
170
|
+
/>
|
|
171
|
+
|
|
172
|
+
<Block>
|
|
173
|
+
<DesignSwatchGroup
|
|
174
|
+
property="background"
|
|
175
|
+
prefix={colorButtonState}
|
|
176
|
+
tokens={tokenNames}
|
|
177
|
+
groupStyles={{ margin: 'none' }}
|
|
178
|
+
swatchStyles={{ border: 'none' }}
|
|
179
|
+
/>
|
|
180
|
+
</Block>
|
|
181
|
+
|
|
182
|
+
### Action Button States
|
|
183
|
+
|
|
184
|
+
export const colorActionButtonState = '--color-action-button';
|
|
185
|
+
|
|
186
|
+
<TokenDefinitions
|
|
187
|
+
tokenData={tokenData.filter((data) =>
|
|
188
|
+
data.name.startsWith(colorActionButtonState)
|
|
189
|
+
)}
|
|
190
|
+
/>
|
|
191
|
+
|
|
192
|
+
<Block>
|
|
193
|
+
<DesignSwatchGroup
|
|
194
|
+
property="background"
|
|
195
|
+
prefix={colorActionButtonState}
|
|
196
|
+
tokens={tokenNames}
|
|
197
|
+
groupStyles={{ margin: 'none' }}
|
|
198
|
+
swatchStyles={{ border: 'none' }}
|
|
199
|
+
/>
|
|
200
|
+
</Block>
|
|
201
|
+
|
|
202
|
+
</Unstyled>
|