@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,245 @@
|
|
|
1
|
+
import { Meta, Unstyled } from '@storybook/blocks';
|
|
2
|
+
import { Steps } from '@adobe/elsie/config/storybook/components/Steps';
|
|
3
|
+
import { FileTree } from '@adobe/elsie/config/storybook/components/FileTree';
|
|
4
|
+
import { Screenshot } from '@adobe/elsie/config/storybook/components/Screenshot';
|
|
5
|
+
import dropinDevEnv from '../../static/dropin.png';
|
|
6
|
+
|
|
7
|
+
<Meta title="Quick start" />
|
|
8
|
+
<Unstyled>
|
|
9
|
+
|
|
10
|
+
# Quick start
|
|
11
|
+
|
|
12
|
+
Use the steps below to build your first composable drop-in using this SDK.
|
|
13
|
+
|
|
14
|
+
<Steps>
|
|
15
|
+
|
|
16
|
+
### Create your composable drop-in project
|
|
17
|
+
|
|
18
|
+
The first step is visiting our GitHub Enterprise drop-in project template. You must be logged into Adobe's VPN for this link to work: [Commerce-Storefront/my-dropin](https://git.corp.adobe.com/Commerce-Storefront/my-dropin).
|
|
19
|
+
|
|
20
|
+
From the GitHub page, click the **Use this template** button. You can name your new drop-in repo whatever you want, but we recommend naming it to reflect the drop-in you want to build. For example, if you want to build a drop-in to show a customer's purchase history, naming your drop-in project/repo `purchase-history` would be reasonable.
|
|
21
|
+
|
|
22
|
+
### Clone your new project
|
|
23
|
+
|
|
24
|
+
Follow the standard process: Click your repo's **Code** button, copy the SSH link, open your terminal, change directories to where you want it on your workstation, and run:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
git clone <your-repository-ssh-url>
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Install the project dependencies
|
|
31
|
+
|
|
32
|
+
Open your project and install dependencies with your choice of package managers.
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
yarn
|
|
36
|
+
npm install
|
|
37
|
+
pnpm install
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Generate the project config file
|
|
41
|
+
|
|
42
|
+
Before you can start developing, you need to generate the `.elsie.js` config file. The elsie CLI uses this file to generate new components, containers, and API functions to specified directories within your projects. Run the following command, replacing `<your-dropin-name>` with the name of your drop-in component. For example, `npx elsie generate config --name purchase-history`.
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npx elsie generate config --name <your-dropin-name>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
After generating the `.elsie.js` config, open it and take a look. Below is an annotated version describing the main properties:
|
|
49
|
+
|
|
50
|
+
```js
|
|
51
|
+
module.exports = {
|
|
52
|
+
name: 'purchase-history', // The name of your drop-in. This name can be changed at any time.
|
|
53
|
+
api: {
|
|
54
|
+
root: './src/api', // Directory where the CLI will add all your generated API functions.
|
|
55
|
+
importAliasRoot: '@/purchase-history/api',
|
|
56
|
+
},
|
|
57
|
+
components: [
|
|
58
|
+
{
|
|
59
|
+
id: 'Components',
|
|
60
|
+
root: './src/components', // Directory where the CLI will add all your generated components.
|
|
61
|
+
importAliasRoot: '@/purchase-history/components',
|
|
62
|
+
cssPrefix: 'dropin',
|
|
63
|
+
default: true,
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
containers: {
|
|
67
|
+
root: './src/containers', // Directory where the CLI will add all your generated containers.
|
|
68
|
+
importAliasRoot: '@/purchase-history/containers',
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Explore the project structure
|
|
74
|
+
|
|
75
|
+
In future versions of the docs, we will provide a detailed explanation of each folder and file in the project structure. For now, these are the highlights:
|
|
76
|
+
|
|
77
|
+
<FileTree>
|
|
78
|
+
<FileTree.Folder
|
|
79
|
+
name=".storybook"
|
|
80
|
+
description="— Best-practice Storybook configurations right out of the box"
|
|
81
|
+
/>
|
|
82
|
+
<FileTree.Folder name="examples" defaultOpen>
|
|
83
|
+
<FileTree.Folder
|
|
84
|
+
name="html-host"
|
|
85
|
+
defaultOpen
|
|
86
|
+
description="— Preconfigured HTML UI for testing your composable drop-in"
|
|
87
|
+
>
|
|
88
|
+
<FileTree.File name="example.css" />
|
|
89
|
+
<FileTree.File name="favicon.ico" />
|
|
90
|
+
<FileTree.File name="index.html" />
|
|
91
|
+
<FileTree.File name="styles.css" />
|
|
92
|
+
</FileTree.Folder>
|
|
93
|
+
</FileTree.Folder>
|
|
94
|
+
<FileTree.Folder name="src" defaultOpen>
|
|
95
|
+
<FileTree.Folder
|
|
96
|
+
name="api"
|
|
97
|
+
description="— By default, the elsie CLI adds your API functions here"
|
|
98
|
+
/>
|
|
99
|
+
<FileTree.Folder
|
|
100
|
+
name="docs"
|
|
101
|
+
description="— Provides an MDX template to document your drop-in"
|
|
102
|
+
/>
|
|
103
|
+
<FileTree.Folder
|
|
104
|
+
name="i18n"
|
|
105
|
+
description="— Internationalization setup with starter en_US.json file"
|
|
106
|
+
/>
|
|
107
|
+
<FileTree.Folder name="render" />
|
|
108
|
+
</FileTree.Folder>
|
|
109
|
+
<FileTree.File
|
|
110
|
+
name=".elsie.js"
|
|
111
|
+
description="— Configuration file for creating components, containers and functions"
|
|
112
|
+
/>
|
|
113
|
+
<FileTree.File
|
|
114
|
+
name=".env.local"
|
|
115
|
+
description="— Preconfigured settings for a development-only mesh endpoint"
|
|
116
|
+
/>
|
|
117
|
+
<FileTree.File name=".eslintrc.js" description="— Preconfigured linting" />
|
|
118
|
+
<FileTree.File name=".gitignore" />
|
|
119
|
+
<FileTree.File
|
|
120
|
+
name=".jest.config.js"
|
|
121
|
+
description="— Preconfigured unit testing"
|
|
122
|
+
/>
|
|
123
|
+
<FileTree.File
|
|
124
|
+
name="package.json"
|
|
125
|
+
description="— Preconfigured dependencies"
|
|
126
|
+
/>
|
|
127
|
+
<FileTree.File
|
|
128
|
+
name="prettier.config.js"
|
|
129
|
+
description="— Preconfigured formatting"
|
|
130
|
+
/>
|
|
131
|
+
<FileTree.File
|
|
132
|
+
name="README.md"
|
|
133
|
+
description="— Quick instructional overview of drop-in development tasks"
|
|
134
|
+
/>
|
|
135
|
+
<FileTree.File
|
|
136
|
+
name="storybook-stories.js"
|
|
137
|
+
description="— A few more storybook settings"
|
|
138
|
+
/>
|
|
139
|
+
<FileTree.File
|
|
140
|
+
name="tsconfig.js"
|
|
141
|
+
description="— Preconfigured for TypeScript!"
|
|
142
|
+
/>
|
|
143
|
+
<FileTree.File name="vite.config.mjs" />
|
|
144
|
+
</FileTree>
|
|
145
|
+
|
|
146
|
+
### Update the mesh endpoint
|
|
147
|
+
|
|
148
|
+
By default, the drop-in project is configured to use a development-only mesh endpoint. This endpoint is only available when running the project locally. To use a different mesh endpoint, update the following file:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
.env.local
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### Launch development environment
|
|
155
|
+
|
|
156
|
+
Let's take it for a spin! Run the following command to launch your project's development environment in its default state:
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
yarn dev
|
|
160
|
+
npm run dev
|
|
161
|
+
pnpm run dev
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Congrats! You just launched your first composable drop-in! Actually, no... What you're seeing is our drop-in development environment. It's a preconfigured HTML page (`examples > html-host > index.html`) that loads your drop-in for testing during development.
|
|
165
|
+
|
|
166
|
+
<Screenshot src={dropinDevEnv} alt={'Drop-in development environment'} />
|
|
167
|
+
|
|
168
|
+
Now we're ready to start building a composable drop-in. Stop the server with `ctrl + c` and let's get started.
|
|
169
|
+
|
|
170
|
+
### Generate a new UI Component
|
|
171
|
+
|
|
172
|
+
Start by executing the following command, replacing `<MyUiComponent>` with the name of the component you want to add. For example, if you were building a drop-in for a customer's purchase history, you might want a part of the drop-in to show a list of date ranges to filter their product purchases. In that case, you might generate something like this: `npx elsie generate component --pathname DateFilter` to create the scaffolding for a component called `DateFilter`, in which you would implement the UI component as a list of buttons representing data-range filters that would filter a customer's product purchases when clicked: last month, last three months, last year, and so on.
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
npx elsie generate component --pathname <MyUiComponent>
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
After running this command, the drop-in CLI generates the following files:
|
|
179
|
+
|
|
180
|
+
```console
|
|
181
|
+
🆕 src/components/DateFilter/DateFilter.css created
|
|
182
|
+
🆕 src/components/DateFilter/DateFilter.stories.tsx created
|
|
183
|
+
🆕 src/components/DateFilter/DateFilter.test.tsx created
|
|
184
|
+
🆕 src/components/DateFilter/DateFilter.tsx created
|
|
185
|
+
🆕 src/components/DateFilter/index.ts created
|
|
186
|
+
🆕 src/components/index.ts created
|
|
187
|
+
~/purchase-history [main] »
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
These files are not only generated with the appropriate names, but they are completely preconfigured to work together as a unit. For example, the `DateFilter` component is automatically imported into `src/components/index.ts` so you can start referencing the component throughout your project.
|
|
191
|
+
|
|
192
|
+
And if you run `npm run dev` again, you'll see your new component in the Storybook UI, configured with an example and best practices to help you get started with Storybook.
|
|
193
|
+
|
|
194
|
+
### Generate a new API Function
|
|
195
|
+
|
|
196
|
+
Start by executing the following command, replacing `<myApiFunction>` with the name of the API function you want to add:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
npx elsie generate api --pathname <myApiFunction>
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
For the `purchase-history` example drop-in, you might want to add a filter function that handles filtering the purchase history by date-ranges, such as `filterByDateRange`. In this case, you would run the following command:
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
npx elsie generate api --pathname filterByDateRange
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
This generates a new API function in the `src/api` directory, preconfigured with a test file and a default implementation. Full details about API function development will be documented as soon as possible.
|
|
210
|
+
|
|
211
|
+
### Generate a drop-in Container
|
|
212
|
+
|
|
213
|
+
Start by executing the following command, replacing `<MyDropinContainer>` with the name of the container you want to add:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
npx elsie generate container --pathname <MyDropinContainer>
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
For the `purchase-history` example drop-in, the command used to generate its container could be: `npx elsie generate container --pathname PurchaseHistoryContainer`.
|
|
220
|
+
|
|
221
|
+
This generates a new Container in the `src/containers` directory, preconfigured with a test file and a default implementation. Full details about container development will be documented as soon as possible.
|
|
222
|
+
|
|
223
|
+
### Run unit tests
|
|
224
|
+
|
|
225
|
+
Unit tests are also preconfigured for you. Run the following command to execute the basic default tests, and add to them as you build your frontend.
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
yarn test
|
|
229
|
+
npm run test
|
|
230
|
+
pnpm run test
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Build production bundles
|
|
234
|
+
|
|
235
|
+
When you're ready to deploy your frontend, run the following command to build production bundles. Like everything else in the SDK, the basic process is configured for you, but you can customize it as you develop.
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
yarn build
|
|
239
|
+
npm run build
|
|
240
|
+
pnpm run build
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
</Steps>
|
|
244
|
+
|
|
245
|
+
</Unstyled>
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { Meta, Unstyled } from '@storybook/blocks';
|
|
2
|
+
|
|
3
|
+
<Meta title="Utilities/Slots" />
|
|
4
|
+
<Unstyled>
|
|
5
|
+
|
|
6
|
+
# Slots
|
|
7
|
+
|
|
8
|
+
A Slot is a high-level interface for developers to define and manage dynamic content insertion within drop-in components.
|
|
9
|
+
|
|
10
|
+
## Context
|
|
11
|
+
|
|
12
|
+
The context is defined during implementation of a drop-in and can be used to pass data and functions to the slot.
|
|
13
|
+
|
|
14
|
+
### Pre-built Methods
|
|
15
|
+
|
|
16
|
+
- **dictionary**: The dictionary of the selected language.
|
|
17
|
+
- **replaceWith**: A function to replace the slot's content with a new HTML element.
|
|
18
|
+
- **appendChild**: A function to append a new HTML element to the slot's content.
|
|
19
|
+
- **prependChild**: A function to prepend a new HTML element to the slot's content.
|
|
20
|
+
- **appendSibling**: A function to append a new HTML element after the slot's content.
|
|
21
|
+
- **prependSibling**: A function to prepend a new HTML element **before** the slot's content.
|
|
22
|
+
- **getSlotElement**: A function to get a slot element.
|
|
23
|
+
- **onChange**: A function to listen to changes in the slot's context.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Implementing a new slot
|
|
28
|
+
|
|
29
|
+
The `<Slot />` component is used to define a slot in a container. It receives a name and a slot object with the following properties:
|
|
30
|
+
|
|
31
|
+
### name
|
|
32
|
+
|
|
33
|
+
The name of the slot in _PascalCase_. `string` (required).
|
|
34
|
+
|
|
35
|
+
### slot (required)
|
|
36
|
+
|
|
37
|
+
- `ctx`: An object representing the context of the slot, including methods for manipulating the slot's content.
|
|
38
|
+
|
|
39
|
+
The slot property, which is implemented as a promise function, provides developers with the flexibility to dynamically generate and manipulate content within slots.
|
|
40
|
+
However, it's important to note that this promise is render-blocking, meaning that the component will not render until the promise is resolved.
|
|
41
|
+
|
|
42
|
+
### context
|
|
43
|
+
|
|
44
|
+
The context property in the Slot component lets developers pass extra information or functionality to customize how the slot
|
|
45
|
+
behaves or interacts with the application. This information is accessible within the slot's rendering logic, allowing for
|
|
46
|
+
tailored slot behavior based on specific needs or application states.
|
|
47
|
+
|
|
48
|
+
### render
|
|
49
|
+
|
|
50
|
+
The render property in the Slot component lets developers define how the content within the slot should be displayed and should be used when developers
|
|
51
|
+
need fine-grained control over what content appears within the slot.
|
|
52
|
+
It's particularly useful when using custom slot methods (see Privates below) in scenarios where the content to be displayed within the slot is dynamic and may depend on
|
|
53
|
+
properties passed to another component.
|
|
54
|
+
|
|
55
|
+
### children
|
|
56
|
+
|
|
57
|
+
The children property in the Slot component represents the content that is passed directly within the opening and closing tags of the Slot component.
|
|
58
|
+
It allows developers to include static content directly within the slot, which will be rendered as part of the slot's contents.
|
|
59
|
+
This property is useful for cases where the content within the slot is static or does not need to be dynamically generated by the slot.
|
|
60
|
+
|
|
61
|
+
```tsx
|
|
62
|
+
// MyContainer.tsx (Drop-in)
|
|
63
|
+
|
|
64
|
+
import { HTMLAttributes } from 'preact/compat';
|
|
65
|
+
import { Container, Slot, SlotProps } from '@adobe/elsie/lib';
|
|
66
|
+
|
|
67
|
+
export interface MyContainerProps extends HTMLAttributes<HTMLDivElement> {
|
|
68
|
+
slots?: {
|
|
69
|
+
MyOpenSlot?: SlotProps<{
|
|
70
|
+
// MyOpenSlot Context
|
|
71
|
+
data: MyContainerData;
|
|
72
|
+
}>;
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export const MyContainer: Container<MyContainerProps> = ({
|
|
77
|
+
slots,
|
|
78
|
+
children,
|
|
79
|
+
...props
|
|
80
|
+
}) => {
|
|
81
|
+
// ...
|
|
82
|
+
|
|
83
|
+
return (
|
|
84
|
+
<div {...props}>
|
|
85
|
+
<Slot name="MyOpenSlot" slot={slots?.MyOpenSlot} context={{ data }} />
|
|
86
|
+
</div>
|
|
87
|
+
);
|
|
88
|
+
};
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
```js
|
|
94
|
+
// blocks/my-block.js (storefront)
|
|
95
|
+
|
|
96
|
+
provider.render(MyContainer, {
|
|
97
|
+
slots: {
|
|
98
|
+
MyOpenSlot: async (ctx) => {
|
|
99
|
+
// create a new HTML element
|
|
100
|
+
const element = document.createElement('div');
|
|
101
|
+
// set the innerHTML of the new element to the text from the context's data
|
|
102
|
+
element.innerHTML = ctx.data.text;
|
|
103
|
+
|
|
104
|
+
// append the new element to the slot's content
|
|
105
|
+
ctx.appendChild(element);
|
|
106
|
+
|
|
107
|
+
// ...or you could also use any of the other slot methods to manipulate the slot's content
|
|
108
|
+
// ctx.replaceWith(element);
|
|
109
|
+
// ctx.prependChild(element);
|
|
110
|
+
// ctx.appendSibling(element);
|
|
111
|
+
// ctx.prependSibling(element);
|
|
112
|
+
|
|
113
|
+
// to listen and react to changes in the slot's context (lifecycle)
|
|
114
|
+
ctx.onChange((next) => {
|
|
115
|
+
// update the innerHTML of the new element to the new text from the context's data
|
|
116
|
+
element.innerHTML = ctx.data.text;
|
|
117
|
+
});
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Privates
|
|
124
|
+
|
|
125
|
+
The `<Slot />` component has a private interface that serves as a mechanism for managing internal
|
|
126
|
+
complexity and promoting clean, modular design within the Slot component or related components.
|
|
127
|
+
|
|
128
|
+
### \_registerMethod
|
|
129
|
+
|
|
130
|
+
The `_registerMethod` private function is used to register a method in the slot's context which is particularly helpful in scenarios
|
|
131
|
+
where dynamic behavior or interactions need to be incorporated into the Slot component.
|
|
132
|
+
|
|
133
|
+
Slot Methods also include the ability to modify the slot's state or content based on external interactions or changes in application state.
|
|
134
|
+
|
|
135
|
+
### \_setProps
|
|
136
|
+
|
|
137
|
+
The `_setProps` private function within the Slot component is responsible for dynamically updating the properties of the slot.
|
|
138
|
+
It allows developers to modify the slot's state or content based on external interactions or changes in application state,
|
|
139
|
+
triggering re-renders of the slot component with updated properties.
|
|
140
|
+
|
|
141
|
+
### \_htmlElementToVNode
|
|
142
|
+
|
|
143
|
+
The `_htmlElementToVNode` private function in the Slot component converts HTML elements into virtual DOM nodes (VNodes),
|
|
144
|
+
enabling their integration into Preact components. This conversion facilitates the dynamic insertion of HTML content
|
|
145
|
+
into slots while benefiting from Preact's virtual DOM reconciliation and rendering.
|
|
146
|
+
|
|
147
|
+
```tsx
|
|
148
|
+
// MyContainer.tsx (Drop-in)
|
|
149
|
+
|
|
150
|
+
<Slot
|
|
151
|
+
name="MyOpenSlot"
|
|
152
|
+
slot={slots?.MyOpenSlot}
|
|
153
|
+
context={{
|
|
154
|
+
// custom slot method
|
|
155
|
+
appendButton(callback) {
|
|
156
|
+
// use _registerMethod to register a method in the slot's context
|
|
157
|
+
this._registerMethod((...attrs) => {
|
|
158
|
+
// callback return the values provided by the storefront developer
|
|
159
|
+
const { text, ...buttonProps } = callback(...attrs);
|
|
160
|
+
|
|
161
|
+
const button = (
|
|
162
|
+
<Button type="button" {...buttonProps}>
|
|
163
|
+
{text}
|
|
164
|
+
</Button>
|
|
165
|
+
);
|
|
166
|
+
|
|
167
|
+
// use _setProps to update the slot's properties
|
|
168
|
+
this._setProps((prev: any) => ({
|
|
169
|
+
children: [...(prev.children || []), button],
|
|
170
|
+
}));
|
|
171
|
+
});
|
|
172
|
+
},
|
|
173
|
+
}}
|
|
174
|
+
render={(props) => {
|
|
175
|
+
// render the slot's content using props mutated by the slot's methods
|
|
176
|
+
return <Buttons>{props.children}</Buttons>;
|
|
177
|
+
}}
|
|
178
|
+
/>
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
```js
|
|
184
|
+
// blocks/my-block.js (storefront)
|
|
185
|
+
|
|
186
|
+
provider.render(MyContainer, {
|
|
187
|
+
slots: {
|
|
188
|
+
// Available Slots
|
|
189
|
+
MyOpenSlot: (ctx) => {
|
|
190
|
+
ctx.appendButton: (next, state) => {
|
|
191
|
+
// use state to get the current state of the slot
|
|
192
|
+
const loading = state.get('loading');
|
|
193
|
+
|
|
194
|
+
return {
|
|
195
|
+
text: loading ? 'Loading' : 'Click me!',
|
|
196
|
+
onClick: async () => {
|
|
197
|
+
// use state to update the state of the slot
|
|
198
|
+
state.set('loading', true);
|
|
199
|
+
|
|
200
|
+
await doSomething().finally(() => {
|
|
201
|
+
state.set('loading', false);
|
|
202
|
+
});
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
</Unstyled>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Meta, Unstyled } from '@storybook/blocks';
|
|
2
|
+
import { Flex } from '@adobe/elsie/config/storybook/components/Flex';
|
|
3
|
+
import { Panel } from '@adobe/elsie/config/storybook/components/Panel';
|
|
4
|
+
import { Screenshot } from '@adobe/elsie/config/storybook/components/Screenshot';
|
|
5
|
+
import { Summary } from '@adobe/elsie/config/storybook/components/Summary';
|
|
6
|
+
import banner from './assets/DropinBanner.png';
|
|
7
|
+
|
|
8
|
+
<Meta title="Welcome" />
|
|
9
|
+
<Unstyled>
|
|
10
|
+
|
|
11
|
+
<Screenshot src={banner} alt="dropin SDK Banner" />
|
|
12
|
+
|
|
13
|
+
<Summary>
|
|
14
|
+
The **drop-in SDK** is deployed as a set of **npm packages** assembled into a completely pre-configured **starter template** to provide everything you need to build **composable** Commerce frontends.
|
|
15
|
+
</Summary>
|
|
16
|
+
|
|
17
|
+
**For the frontend**, the drop-in SDK includes our design system, which provides the components and design tokens that make merchant rebranding quick and easy.
|
|
18
|
+
|
|
19
|
+
**For everything else**, the drop-in SDK provides a complete framework for mounting, rendering, eventing, testing, and hydrating drop-ins with data from the Commerce backend.
|
|
20
|
+
|
|
21
|
+
## Get started
|
|
22
|
+
|
|
23
|
+
<Summary>
|
|
24
|
+
Use our [Quick-Start tutorial](/docs/quick-start--overview) to create a fully-configured drop-in and render it in less than 10 minutes.
|
|
25
|
+
</Summary>
|
|
26
|
+
|
|
27
|
+
## Get to know drop-ins
|
|
28
|
+
|
|
29
|
+
<Flex itemsPerRow={3}>
|
|
30
|
+
<Panel footer>
|
|
31
|
+
### Quick start
|
|
32
|
+
Follow the quick-start guide to start building a new Commerce drop-in.
|
|
33
|
+
|
|
34
|
+
[Read more](/docs/quick-start--overview)
|
|
35
|
+
</Panel>
|
|
36
|
+
|
|
37
|
+
<Panel footer>
|
|
38
|
+
### Drop-in library components
|
|
39
|
+
Explore the library of components available for your drop-in user interface.
|
|
40
|
+
|
|
41
|
+
[Read more](/docs/components-overview--overview)
|
|
42
|
+
</Panel>
|
|
43
|
+
|
|
44
|
+
<Panel footer>
|
|
45
|
+
### Drop-in Design System
|
|
46
|
+
Learn how to rebrand your drop-ins using the drop-in design system.
|
|
47
|
+
|
|
48
|
+
[Read more](/docs/design-overview--overview)
|
|
49
|
+
</Panel>
|
|
50
|
+
</Flex>
|
|
51
|
+
|
|
52
|
+
</Unstyled>
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
{
|
|
2
|
+
"Dropin": {
|
|
3
|
+
"ExampleComponentName": {
|
|
4
|
+
"item": {
|
|
5
|
+
"label": "string"
|
|
6
|
+
}
|
|
7
|
+
},
|
|
8
|
+
"Pagination": {
|
|
9
|
+
"backwardButton": {
|
|
10
|
+
"ariaLabel": "Go to previous page"
|
|
11
|
+
},
|
|
12
|
+
"forwardButton": {
|
|
13
|
+
"ariaLabel": "Go to next page"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"Incrementer": {
|
|
17
|
+
"decreaseLabel": "Decrease Quantity",
|
|
18
|
+
"increaseLabel": "Increase Quantity",
|
|
19
|
+
"label": "Quantity",
|
|
20
|
+
"errorMessage": "Enter a valid quantity",
|
|
21
|
+
"minQuantityMessage": "Enter at least {{minQuantity}}",
|
|
22
|
+
"maxQuantityMessage": "Maximum quantity is {{maxQuantity}}"
|
|
23
|
+
},
|
|
24
|
+
"Modal": {
|
|
25
|
+
"Close": {
|
|
26
|
+
"label": "Close"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"InputPassword": {
|
|
30
|
+
"placeholder": "Password",
|
|
31
|
+
"floatingLabel": "Password",
|
|
32
|
+
"buttonShowTitle": "Click to show password",
|
|
33
|
+
"buttonHideTitle": "Click to hide password"
|
|
34
|
+
},
|
|
35
|
+
"PasswordStatusIndicator": {
|
|
36
|
+
"chartTwoSymbols": "Use characters and numbers or symbols",
|
|
37
|
+
"chartThreeSymbols": "Use characters, numbers and symbols",
|
|
38
|
+
"chartFourSymbols": "Use uppercase characters, lowercase characters, numbers and symbols",
|
|
39
|
+
"messageLengthPassword": "At least {minLength} characters long"
|
|
40
|
+
},
|
|
41
|
+
"InlineAlert": {
|
|
42
|
+
"dismissLabel": "Dismiss Alert"
|
|
43
|
+
},
|
|
44
|
+
"PriceSummary": {
|
|
45
|
+
"subTotal": {
|
|
46
|
+
"label": "Subtotal",
|
|
47
|
+
"withTaxes": "Including taxes",
|
|
48
|
+
"withoutTaxes": "excluding taxes"
|
|
49
|
+
},
|
|
50
|
+
"shipping": {
|
|
51
|
+
"label": "Shipping",
|
|
52
|
+
"editZipAction": "Apply",
|
|
53
|
+
"estimated": "Estimated Shipping",
|
|
54
|
+
"estimatedDestination": "Estimated Shipping to ",
|
|
55
|
+
"destinationLinkAriaLabel": "Change destination",
|
|
56
|
+
"zipPlaceholder": "Zip Code",
|
|
57
|
+
"withTaxes": "Including taxes",
|
|
58
|
+
"withoutTaxes": "excluding taxes",
|
|
59
|
+
"alternateField": {
|
|
60
|
+
"zip": "Estimate using country/zip",
|
|
61
|
+
"state": "Estimate using country/state"
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
"taxes": {
|
|
65
|
+
"total": "Tax Total",
|
|
66
|
+
"totalOnly": "Tax",
|
|
67
|
+
"breakdown": "Taxes",
|
|
68
|
+
"showBreakdown": "Show Tax Breakdown",
|
|
69
|
+
"hideBreakdown": "Hide Tax Breakdown",
|
|
70
|
+
"estimated": "Estimated Tax"
|
|
71
|
+
},
|
|
72
|
+
"total": {
|
|
73
|
+
"estimated": "Estimated Total",
|
|
74
|
+
"label": "Total",
|
|
75
|
+
"withoutTax": "Total excluding taxes"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"ProgressSpinner": {
|
|
79
|
+
"updating": {
|
|
80
|
+
"label": "Item is updating"
|
|
81
|
+
},
|
|
82
|
+
"updatingChildren": {
|
|
83
|
+
"label": "Items are updating"
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"PriceRange": {
|
|
87
|
+
"from": {
|
|
88
|
+
"label": "From"
|
|
89
|
+
},
|
|
90
|
+
"to": {
|
|
91
|
+
"label": "to"
|
|
92
|
+
},
|
|
93
|
+
"asLowAs": {
|
|
94
|
+
"label": "As low as"
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"Swatches": {
|
|
98
|
+
"outOfStock": {
|
|
99
|
+
"label": "out of stock swatch"
|
|
100
|
+
},
|
|
101
|
+
"selected": {
|
|
102
|
+
"label": "swatch selected"
|
|
103
|
+
},
|
|
104
|
+
"swatch": {
|
|
105
|
+
"label": "swatch"
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
"Accordion": {
|
|
109
|
+
"open": {
|
|
110
|
+
"label": "Open"
|
|
111
|
+
},
|
|
112
|
+
"close": {
|
|
113
|
+
"label": "Close"
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
"CartItem": {
|
|
117
|
+
"each": {
|
|
118
|
+
"label": "each"
|
|
119
|
+
},
|
|
120
|
+
"pricePerItem": {
|
|
121
|
+
"label": "price per item"
|
|
122
|
+
},
|
|
123
|
+
"quantity": {
|
|
124
|
+
"label": "Quantity"
|
|
125
|
+
},
|
|
126
|
+
"remove": {
|
|
127
|
+
"label": "Remove {product} from the cart"
|
|
128
|
+
},
|
|
129
|
+
"removeDefault": {
|
|
130
|
+
"label": "Remove item from the cart"
|
|
131
|
+
},
|
|
132
|
+
"taxIncluded": {
|
|
133
|
+
"label": "incl. VAT"
|
|
134
|
+
},
|
|
135
|
+
"taxExcluded": {
|
|
136
|
+
"label": "excl. tax"
|
|
137
|
+
},
|
|
138
|
+
"updating": {
|
|
139
|
+
"label": "{product} is updating"
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
"InputDate": {
|
|
143
|
+
"picker": "Select a date"
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { deepmerge } from '@adobe/elsie/lib';
|
|
2
|
+
import en_US from '@adobe/elsie/i18n/en_US.json';
|
|
3
|
+
|
|
4
|
+
export type Lang = 'en_US';
|
|
5
|
+
|
|
6
|
+
export const definition = {
|
|
7
|
+
default: en_US,
|
|
8
|
+
en_US,
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
// https://github.com/synacor/preact-i18n
|
|
12
|
+
// eslint-disable-next-line no-restricted-imports
|
|
13
|
+
export * from 'preact-i18n';
|
|
14
|
+
|
|
15
|
+
export const getDefinitionByLanguage = (lang: Lang) => {
|
|
16
|
+
return deepmerge(definition.default, definition[lang] || {});
|
|
17
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<svg id="Icon_Add_Base" data-name="Icon – Add – Base" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
|
|
2
|
+
<g id="Large">
|
|
3
|
+
<rect id="Placement_area" data-name="Placement area" width="24" height="24" fill="#fff" opacity="0"/>
|
|
4
|
+
<g id="Add_icon" data-name="Add icon" transform="translate(9.734 9.737)">
|
|
5
|
+
<line vector-effect="non-scaling-stroke" id="Line_579" data-name="Line 579" y2="12.7" transform="translate(2.216 -4.087)" fill="none" stroke="currentColor"/>
|
|
6
|
+
<line vector-effect="non-scaling-stroke" id="Line_580" data-name="Line 580" x2="12.7" transform="translate(-4.079 2.263)" fill="none" stroke="currentColor"/>
|
|
7
|
+
</g>
|
|
8
|
+
</g>
|
|
9
|
+
</svg>
|