@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
package/src/lib/i18n.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert locale from Magento standard to react-intl BCP 47 language tag
|
|
3
|
+
*
|
|
4
|
+
* @param {string} locale - A locale (e.g. `fr_FR`).
|
|
5
|
+
* @returns {string} A BCP 47 language tag (e.g. `fr-FR`).
|
|
6
|
+
*/
|
|
7
|
+
export const toLanguageTag = (locale: string) => {
|
|
8
|
+
return locale.replace('_', '-');
|
|
9
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
class ImageParamsKeyMap {
|
|
2
|
+
private _map?: { [key: string]: string } | undefined;
|
|
3
|
+
|
|
4
|
+
get map() {
|
|
5
|
+
return this._map;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
set map(value: typeof this._map) {
|
|
9
|
+
this._map = value;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
public getMethods() {
|
|
13
|
+
return {
|
|
14
|
+
setMap: (value: typeof this._map) => {
|
|
15
|
+
this.map = value;
|
|
16
|
+
},
|
|
17
|
+
getMap: () => this.map,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const keyMap = new ImageParamsKeyMap();
|
|
23
|
+
|
|
24
|
+
export const { setMap: setImageParamsKeyMap, getMap: getImageParamsKeyMap } =
|
|
25
|
+
keyMap.getMethods();
|
package/src/lib/index.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export * from '@adobe/elsie/lib/form-values';
|
|
2
|
+
export * from '@adobe/elsie/lib/classes';
|
|
3
|
+
export * from '@adobe/elsie/lib/deepmerge';
|
|
4
|
+
export * from '@adobe/elsie/lib/debounce';
|
|
5
|
+
export * from '@adobe/elsie/lib/resolve-image';
|
|
6
|
+
export * from '@adobe/elsie/lib/render';
|
|
7
|
+
export * from '@adobe/elsie/lib/i18n';
|
|
8
|
+
export * from '@adobe/elsie/lib/initializer';
|
|
9
|
+
export * from '@adobe/elsie/lib/config';
|
|
10
|
+
export * from '@adobe/elsie/lib/types';
|
|
11
|
+
export * from '@adobe/elsie/lib/slot';
|
|
12
|
+
export * from '@adobe/elsie/lib/vcomponent';
|
|
13
|
+
export * from '@adobe/elsie/lib/image-params-keymap';
|
|
14
|
+
export * from '@adobe/elsie/lib/is-number';
|
|
15
|
+
export * from '@adobe/elsie/lib/deviceUtils';
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { Config, setImageParamsKeyMap } from '@adobe/elsie/lib';
|
|
2
|
+
|
|
3
|
+
type Listener = { off(): void };
|
|
4
|
+
|
|
5
|
+
type Listeners<T> = (config?: T) => Array<Listener | undefined>;
|
|
6
|
+
|
|
7
|
+
type Init<T> = (config?: T) => Promise<void>;
|
|
8
|
+
|
|
9
|
+
type Options<T> = { init: Init<T>; listeners: Listeners<T> };
|
|
10
|
+
|
|
11
|
+
export type Model<T = any, D = any> = {
|
|
12
|
+
transformer?: (data: D) => T & { [key: string]: any };
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* The `Initializer` class is responsible for setting up event listeners and initializing a module with the given configuration.
|
|
17
|
+
*
|
|
18
|
+
* @template T - The type of the configuration object.
|
|
19
|
+
* @class
|
|
20
|
+
*/
|
|
21
|
+
export class Initializer<T> {
|
|
22
|
+
private _listeners: Listener[] = [];
|
|
23
|
+
listeners: Listeners<T>;
|
|
24
|
+
init: Init<T>;
|
|
25
|
+
config = new Config<T>({} as T);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Creates an instance of Initializer.
|
|
29
|
+
* @param options - The initialization options.
|
|
30
|
+
* @param options.init - A function that initializes the module.
|
|
31
|
+
* @param options.listeners - A function that sets up event listeners.
|
|
32
|
+
*/
|
|
33
|
+
constructor({ init, listeners }: Options<T>) {
|
|
34
|
+
this.listeners = (config) => {
|
|
35
|
+
// Unbind existing listeners
|
|
36
|
+
this._listeners.forEach((listener) => listener.off());
|
|
37
|
+
// Bind new listeners
|
|
38
|
+
return (this._listeners = listeners(config) as Listener[]);
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
this.init = (options) => {
|
|
42
|
+
const { imageParamsKeyMap, ...rest } = options as any;
|
|
43
|
+
this.config.setConfig({ ...this.config.getConfig(), ...rest });
|
|
44
|
+
setImageParamsKeyMap(imageParamsKeyMap);
|
|
45
|
+
return init(options);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
type Initializers = [Initializer<any>, { [key: string]: any } | undefined][];
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* The Initializers class provides methods to register, mount, and configure initializers.
|
|
54
|
+
*
|
|
55
|
+
* @class
|
|
56
|
+
*
|
|
57
|
+
* @method register - Registers a new initializer. If the initializers have already been mounted, it immediately binds the event listeners and initializes the API for the new initializer.
|
|
58
|
+
* @method mount - Mounts all registered initializers. This involves binding the event listeners and initializing the APIs for each initializer, in that order.
|
|
59
|
+
* @method setImageParamKeys - Sets the image parameter keys. These keys are used when initializing the APIs for the initializers.
|
|
60
|
+
*/
|
|
61
|
+
export class initializers {
|
|
62
|
+
static _initializers: Initializers = [];
|
|
63
|
+
static _mounted: boolean = false;
|
|
64
|
+
static _imageParamsKeyMap: { [key: string]: string } | undefined = undefined;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Registers a new initializer. If the initializers have already been mounted,it immediately binds the event listeners and initializes the API for the new initializer.
|
|
68
|
+
* @param initializer - The initializer to register.
|
|
69
|
+
* @param options - Optional configuration for the initializer.
|
|
70
|
+
*/
|
|
71
|
+
static register(
|
|
72
|
+
initializer: Initializer<any>,
|
|
73
|
+
options?: { [key: string]: any }
|
|
74
|
+
) {
|
|
75
|
+
if (initializers._mounted) {
|
|
76
|
+
initializer.listeners?.(options);
|
|
77
|
+
initializer.init?.(options);
|
|
78
|
+
}
|
|
79
|
+
initializers._initializers.push([initializer, options]);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Mounts the provided initializer immediately. This involves binding the event listeners and initializing the API for the initializer.
|
|
84
|
+
*/
|
|
85
|
+
static async mountImmediately(
|
|
86
|
+
initializer: Initializer<any>,
|
|
87
|
+
options?: { [key: string]: any }
|
|
88
|
+
) {
|
|
89
|
+
initializer.listeners?.(options);
|
|
90
|
+
await initializer.init?.({
|
|
91
|
+
imageParamsKeyMap: initializers._imageParamsKeyMap,
|
|
92
|
+
...options
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Mounts all registered initializers. This involves binding the event listeners and initializing the APIs for each initializer, in that order.
|
|
98
|
+
*/
|
|
99
|
+
static mount() {
|
|
100
|
+
initializers._mounted = true;
|
|
101
|
+
// In this specific order
|
|
102
|
+
// 1. Bind events
|
|
103
|
+
initializers._initializers?.forEach(([initializer, options]) => {
|
|
104
|
+
initializer.listeners?.(options);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
// 2. Initialize APIs
|
|
108
|
+
initializers._initializers?.forEach(([initializer, options]) => {
|
|
109
|
+
initializer.init?.({
|
|
110
|
+
imageParamsKeyMap: initializers._imageParamsKeyMap,
|
|
111
|
+
...options,
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Sets the image parameter keys. These keys are used when initializing the APIs for the initializers.
|
|
117
|
+
* @param params - The image parameter keys.
|
|
118
|
+
*/
|
|
119
|
+
static setImageParamKeys(params: { [key: string]: any }) {
|
|
120
|
+
initializers._imageParamsKeyMap = params;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { render, VNode, createContext } from 'preact';
|
|
2
|
+
import renderToString from 'preact-render-to-string';
|
|
3
|
+
import { Container, VComponent } from '@adobe/elsie/lib';
|
|
4
|
+
import { Signal, signal } from '@adobe/elsie/lib/signals';
|
|
5
|
+
|
|
6
|
+
export const SlotQueueContext = createContext<Signal<Set<string>> | null>(null);
|
|
7
|
+
|
|
8
|
+
type RenderAPI = {
|
|
9
|
+
remove: () => void;
|
|
10
|
+
setProps: (cb: (prev: any) => any) => void;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* The `Render` class provides methods to render and unmount components, as well as to render components to a string.
|
|
15
|
+
* @class
|
|
16
|
+
*
|
|
17
|
+
* @property {Function} render - Renders a component to a root element.
|
|
18
|
+
* @property {Function} toString - Renders a component to a string.
|
|
19
|
+
*/
|
|
20
|
+
export class Render {
|
|
21
|
+
private _provider: VNode<any>;
|
|
22
|
+
|
|
23
|
+
constructor(provider: VNode<any>) {
|
|
24
|
+
this._provider = provider;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Renders a container to a root element.
|
|
29
|
+
* @param Container - The container to render.
|
|
30
|
+
* @param props - The container parameters.
|
|
31
|
+
* @returns A function to render the component to a root element.
|
|
32
|
+
*/
|
|
33
|
+
render<T>(Component: Container<T>, props: T) {
|
|
34
|
+
/**
|
|
35
|
+
* Renders a component to a root element.
|
|
36
|
+
* @param rootElement - The root element to render the component to.
|
|
37
|
+
* @returns A promise that resolves to an object with methods to control the rendered component.
|
|
38
|
+
*/
|
|
39
|
+
return async (rootElement: HTMLElement): Promise<RenderAPI> => {
|
|
40
|
+
if (!Component) throw new Error('Component is not defined');
|
|
41
|
+
if (!rootElement) throw new Error('Root element is not defined');
|
|
42
|
+
|
|
43
|
+
const initialData = (await Component.getInitialData?.(props)) ?? {};
|
|
44
|
+
|
|
45
|
+
const state = signal<T>({ ...props });
|
|
46
|
+
|
|
47
|
+
const queue = signal<Set<string>>(new Set());
|
|
48
|
+
|
|
49
|
+
const provider = this._provider;
|
|
50
|
+
|
|
51
|
+
const Root = ({ next }: { next: Signal<T> }) => {
|
|
52
|
+
return (
|
|
53
|
+
<SlotQueueContext.Provider value={queue}>
|
|
54
|
+
<VComponent node={provider} {...provider.props}>
|
|
55
|
+
<Component {...next.value} initialData={initialData} />
|
|
56
|
+
</VComponent>
|
|
57
|
+
</SlotQueueContext.Provider>
|
|
58
|
+
);
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
// clear the root element
|
|
62
|
+
rootElement.innerHTML = '';
|
|
63
|
+
|
|
64
|
+
// clone the root element to initialize rendering on the background
|
|
65
|
+
const tmp = document.createElement('div');
|
|
66
|
+
|
|
67
|
+
// apply base design tokens and global styles to the root element
|
|
68
|
+
rootElement.classList.add('dropin-design');
|
|
69
|
+
|
|
70
|
+
render(<Root next={state} />, tmp);
|
|
71
|
+
|
|
72
|
+
// API object to control the rendered component
|
|
73
|
+
const API: RenderAPI = {
|
|
74
|
+
remove: () => {
|
|
75
|
+
render(null, tmp);
|
|
76
|
+
},
|
|
77
|
+
setProps: (cb: (prev: T) => T) => {
|
|
78
|
+
const next = cb(state.peek());
|
|
79
|
+
state.value = next;
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
// wait for all slots to be resolved
|
|
84
|
+
return new Promise((resolve) => {
|
|
85
|
+
queue.subscribe((pending) => {
|
|
86
|
+
if (pending.size === 0) {
|
|
87
|
+
// apply base design tokens and global styles to the root element
|
|
88
|
+
rootElement.classList.add('dropin-design');
|
|
89
|
+
|
|
90
|
+
// append the rendered component to the DOM only when all slots are resolved
|
|
91
|
+
rootElement.appendChild(tmp.firstChild ?? tmp);
|
|
92
|
+
|
|
93
|
+
return resolve(API);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* UnRenders a component from a root element.
|
|
102
|
+
* @param rootElement - The root element to unmount the component from.
|
|
103
|
+
* @deprecated Use `remove` method from the returned object of the `mount` method instead.
|
|
104
|
+
*/
|
|
105
|
+
unmount(rootElement: HTMLElement) {
|
|
106
|
+
if (!rootElement) throw new Error('Root element is not defined');
|
|
107
|
+
rootElement.firstChild?.remove();
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Renders a component to a string.
|
|
112
|
+
* @param Component - The component to render.
|
|
113
|
+
* @param props - The component props.
|
|
114
|
+
* @param options - Optional rendering options.
|
|
115
|
+
*/
|
|
116
|
+
async toString<T>(Component: Container<T>, props: T, options?: T) {
|
|
117
|
+
if (!Component) throw new Error('Component is not defined');
|
|
118
|
+
|
|
119
|
+
const initialData = (await Component.getInitialData?.(props)) ?? {};
|
|
120
|
+
|
|
121
|
+
return renderToString(
|
|
122
|
+
<VComponent node={this._provider} {...this._provider.props}>
|
|
123
|
+
<Component {...props} initialData={initialData} />
|
|
124
|
+
</VComponent>,
|
|
125
|
+
{},
|
|
126
|
+
{ ...options }
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { getImageParamsKeyMap } from '@adobe/elsie/lib/';
|
|
2
|
+
|
|
3
|
+
const BREAKPOINTS = {
|
|
4
|
+
medium: 768,
|
|
5
|
+
large: 1024,
|
|
6
|
+
xlarge: 1366,
|
|
7
|
+
xxlarge: 1920,
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export interface ResolveImageUrlOptions {
|
|
11
|
+
width: number;
|
|
12
|
+
height?: number;
|
|
13
|
+
auto?: string;
|
|
14
|
+
quality?: number;
|
|
15
|
+
crop?: boolean;
|
|
16
|
+
fit?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const resolveImageUrl = (url: string, _opts?: ResolveImageUrlOptions) => {
|
|
20
|
+
const [base, query] = url.split('?');
|
|
21
|
+
const params = new URLSearchParams(query);
|
|
22
|
+
|
|
23
|
+
const keyMapping = getImageParamsKeyMap();
|
|
24
|
+
|
|
25
|
+
let opts = {};
|
|
26
|
+
|
|
27
|
+
if (keyMapping && Object.keys(keyMapping).length > 0 && _opts) {
|
|
28
|
+
opts = Object.entries(_opts).reduce((acc, [key, value]) => {
|
|
29
|
+
const newKey = keyMapping[key];
|
|
30
|
+
if (newKey) {
|
|
31
|
+
acc[newKey] = value;
|
|
32
|
+
}
|
|
33
|
+
return acc;
|
|
34
|
+
}, {} as { [key: string]: any });
|
|
35
|
+
} else {
|
|
36
|
+
opts = {
|
|
37
|
+
auto: 'webp',
|
|
38
|
+
quality: 80,
|
|
39
|
+
crop: false,
|
|
40
|
+
fit: 'cover',
|
|
41
|
+
..._opts,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// Append image optimization parameters
|
|
45
|
+
Object.entries(opts).forEach(([key, value]) => {
|
|
46
|
+
if (value !== undefined && value !== null) {
|
|
47
|
+
params.set(key, String(value));
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
return `${base}?${params.toString()}`;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export const generateSrcset = (
|
|
55
|
+
imageURL: string,
|
|
56
|
+
options: ResolveImageUrlOptions
|
|
57
|
+
) => {
|
|
58
|
+
if (!imageURL || !options?.width) return;
|
|
59
|
+
|
|
60
|
+
const generateSrcsetUrl = (options: ResolveImageUrlOptions) => {
|
|
61
|
+
return resolveImageUrl(imageURL, {
|
|
62
|
+
...options,
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
return Object.entries(BREAKPOINTS)
|
|
67
|
+
.map(([, value]) => {
|
|
68
|
+
// calculate breakpoints width
|
|
69
|
+
const relativeWidth = (options.width * value) / BREAKPOINTS.xxlarge;
|
|
70
|
+
|
|
71
|
+
return `${generateSrcsetUrl({
|
|
72
|
+
...options,
|
|
73
|
+
width: relativeWidth,
|
|
74
|
+
})} ${value}w`;
|
|
75
|
+
})
|
|
76
|
+
.join(',\n');
|
|
77
|
+
};
|