@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.
Files changed (507) hide show
  1. package/.elsie.js +12 -0
  2. package/.eslintrc.js +9 -0
  3. package/README.md +52 -0
  4. package/__mocks__/svg.js +1 -0
  5. package/bin/builders/build/index.js +20 -0
  6. package/bin/builders/generate/api/index.js +65 -0
  7. package/bin/builders/generate/api/templates/function.js +9 -0
  8. package/bin/builders/generate/api/templates/index.js +7 -0
  9. package/bin/builders/generate/api/templates/story.js +23 -0
  10. package/bin/builders/generate/api/templates/unit-test.js +15 -0
  11. package/bin/builders/generate/component/index.js +87 -0
  12. package/bin/builders/generate/component/templates/Component.js +43 -0
  13. package/bin/builders/generate/component/templates/css.js +24 -0
  14. package/bin/builders/generate/component/templates/index.js +8 -0
  15. package/bin/builders/generate/component/templates/stories.js +46 -0
  16. package/bin/builders/generate/component/templates/unit-test.js +19 -0
  17. package/bin/builders/generate/config/index.js +54 -0
  18. package/bin/builders/generate/config/templates/elsie.js +29 -0
  19. package/bin/builders/generate/container/index.js +65 -0
  20. package/bin/builders/generate/container/templates/Component.js +18 -0
  21. package/bin/builders/generate/container/templates/index.js +8 -0
  22. package/bin/builders/generate/container/templates/stories.js +34 -0
  23. package/bin/builders/generate/container/templates/unit-test.js +19 -0
  24. package/bin/builders/generate/index.js +283 -0
  25. package/bin/builders/gql/createOrClearDirectory.js +33 -0
  26. package/bin/builders/gql/getSchemaRef.js +25 -0
  27. package/bin/builders/gql/index.js +71 -0
  28. package/bin/builders/lint/index.js +5 -0
  29. package/bin/builders/serve/index.js +44 -0
  30. package/bin/builders/storybook/index.js +5 -0
  31. package/bin/builders/test/index.js +5 -0
  32. package/bin/index.js +26 -0
  33. package/bin/lib/cli.js +8 -0
  34. package/bin/lib/config.js +12 -0
  35. package/bin/lib/log-message.js +11 -0
  36. package/bin/lib/string.js +26 -0
  37. package/bin/lib/validate-typeof.js +19 -0
  38. package/bin/lib/write-file.js +21 -0
  39. package/bin/lib/write-parent-index.js +36 -0
  40. package/config/eslint.js +103 -0
  41. package/config/jest.js +81 -0
  42. package/config/prettier.js +7 -0
  43. package/config/setEnvVars.js +5 -0
  44. package/config/storybook/addon.js +121 -0
  45. package/config/storybook/components/FileTree/FileTree.jsx +183 -0
  46. package/config/storybook/components/FileTree/index.js +1 -0
  47. package/config/storybook/components/Flex/Flex.jsx +12 -0
  48. package/config/storybook/components/Flex/Flex.module.css +20 -0
  49. package/config/storybook/components/Flex/index.js +1 -0
  50. package/config/storybook/components/OptionsTable/OptionsTable.jsx +79 -0
  51. package/config/storybook/components/OptionsTable/OptionsTable.module.css +95 -0
  52. package/config/storybook/components/OptionsTable/index.js +1 -0
  53. package/config/storybook/components/Panel/Panel.module.css +47 -0
  54. package/config/storybook/components/Panel/Panel.tsx +37 -0
  55. package/config/storybook/components/Panel/index.ts +1 -0
  56. package/config/storybook/components/Screenshot/Screenshot.jsx +14 -0
  57. package/config/storybook/components/Screenshot/Screenshot.module.css +19 -0
  58. package/config/storybook/components/Screenshot/index.js +1 -0
  59. package/config/storybook/components/Steps/Steps.jsx +12 -0
  60. package/config/storybook/components/Steps/Steps.module.css +34 -0
  61. package/config/storybook/components/Steps/index.js +1 -0
  62. package/config/storybook/components/StoryWrapper/StoryWrapper.jsx +9 -0
  63. package/config/storybook/components/StoryWrapper/StoryWrapper.module.css +13 -0
  64. package/config/storybook/components/StoryWrapper/index.js +1 -0
  65. package/config/storybook/components/Summary/Summary.jsx +10 -0
  66. package/config/storybook/components/Summary/Summary.module.css +11 -0
  67. package/config/storybook/components/Summary/index.js +1 -0
  68. package/config/storybook/components/Variants/Variants.js +48 -0
  69. package/config/storybook/components/Variants/docs.css +39 -0
  70. package/config/storybook/components/Variants/index.js +1 -0
  71. package/config/storybook/components/video/index.jsx +19 -0
  72. package/config/storybook/manager.js +14 -0
  73. package/config/storybook/preview.jsx +79 -0
  74. package/config/storybook/theming/fonts.css +59 -0
  75. package/config/storybook/theming/logo.svg +19 -0
  76. package/config/storybook/theming/manager.css +54 -0
  77. package/config/storybook/theming/preview.css +84 -0
  78. package/config/storybook/theming/theme.js +52 -0
  79. package/config/tsconfig-base.json +16 -0
  80. package/config/tsconfig-preact.json +15 -0
  81. package/config/vite.mjs +297 -0
  82. package/dist/chunks/deviceUtils.js +14 -0
  83. package/dist/chunks/icons/Add.js +3 -0
  84. package/dist/chunks/icons/AddressBook.js +3 -0
  85. package/dist/chunks/icons/Bulk.js +3 -0
  86. package/dist/chunks/icons/Burger.js +3 -0
  87. package/dist/chunks/icons/Card.js +3 -0
  88. package/dist/chunks/icons/Cart.js +3 -0
  89. package/dist/chunks/icons/Check.js +3 -0
  90. package/dist/chunks/icons/CheckWithCircle.js +3 -0
  91. package/dist/chunks/icons/ChevronDown.js +3 -0
  92. package/dist/chunks/icons/ChevronRight.js +3 -0
  93. package/dist/chunks/icons/ChevronUp.js +3 -0
  94. package/dist/chunks/icons/Close.js +3 -0
  95. package/dist/chunks/icons/Coupon.js +3 -0
  96. package/dist/chunks/icons/Date.js +3 -0
  97. package/dist/chunks/icons/Delivery.js +3 -0
  98. package/dist/chunks/icons/EmptyBox.js +3 -0
  99. package/dist/chunks/icons/Eye.js +3 -0
  100. package/dist/chunks/icons/EyeClose.js +3 -0
  101. package/dist/chunks/icons/Gift.js +3 -0
  102. package/dist/chunks/icons/GiftCard.js +3 -0
  103. package/dist/chunks/icons/Heart.js +3 -0
  104. package/dist/chunks/icons/HeartFilled.js +3 -0
  105. package/dist/chunks/icons/InfoFilled.js +3 -0
  106. package/dist/chunks/icons/Locker.js +3 -0
  107. package/dist/chunks/icons/Minus.js +3 -0
  108. package/dist/chunks/icons/Order.js +3 -0
  109. package/dist/chunks/icons/OrderError.js +3 -0
  110. package/dist/chunks/icons/OrderSuccess.js +3 -0
  111. package/dist/chunks/icons/PaymentError.js +3 -0
  112. package/dist/chunks/icons/Placeholder.js +3 -0
  113. package/dist/chunks/icons/PlaceholderFilled.js +3 -0
  114. package/dist/chunks/icons/Search.js +3 -0
  115. package/dist/chunks/icons/SearchFilled.js +3 -0
  116. package/dist/chunks/icons/Sort.js +3 -0
  117. package/dist/chunks/icons/Star.js +3 -0
  118. package/dist/chunks/icons/Trash.js +3 -0
  119. package/dist/chunks/icons/User.js +3 -0
  120. package/dist/chunks/icons/View.js +3 -0
  121. package/dist/chunks/icons/Wallet.js +3 -0
  122. package/dist/chunks/icons/Warning.js +3 -0
  123. package/dist/chunks/icons/WarningFilled.js +3 -0
  124. package/dist/chunks/icons/WarningWithCircle.js +3 -0
  125. package/dist/chunks/image-params-keymap.js +3 -0
  126. package/dist/chunks/initializer.js +5 -0
  127. package/dist/components.d.ts +1 -0
  128. package/dist/components.js +3 -0
  129. package/dist/event-bus.d.ts +1 -0
  130. package/dist/event-bus.js +3 -0
  131. package/dist/fetch-graphql.d.ts +1 -0
  132. package/dist/fetch-graphql.js +3 -0
  133. package/dist/i18n.d.ts +1 -0
  134. package/dist/i18n.js +5 -0
  135. package/dist/initializer.d.ts +1 -0
  136. package/dist/initializer.js +5 -0
  137. package/dist/lib.d.ts +1 -0
  138. package/dist/lib.js +3 -0
  139. package/dist/preact-compat.d.ts +1 -0
  140. package/dist/preact-compat.js +3 -0
  141. package/dist/preact-hooks.d.ts +1 -0
  142. package/dist/preact-hooks.js +3 -0
  143. package/dist/preact-jsx-runtime.d.ts +1 -0
  144. package/dist/preact-jsx-runtime.js +3 -0
  145. package/dist/preact.d.ts +1 -0
  146. package/dist/preact.js +3 -0
  147. package/dist/recaptcha.d.ts +1 -0
  148. package/dist/recaptcha.js +14 -0
  149. package/dist/signals.d.ts +1 -0
  150. package/dist/signals.js +3 -0
  151. package/dist/types/elsie/src/components/Accordion/Accordion.d.ts +27 -0
  152. package/dist/types/elsie/src/components/Accordion/index.d.ts +3 -0
  153. package/dist/types/elsie/src/components/ActionButton/ActionButton.d.ts +11 -0
  154. package/dist/types/elsie/src/components/ActionButton/index.d.ts +2 -0
  155. package/dist/types/elsie/src/components/ActionButtonGroup/ActionButtonGroup.d.ts +20 -0
  156. package/dist/types/elsie/src/components/ActionButtonGroup/index.d.ts +2 -0
  157. package/dist/types/elsie/src/components/AlertBanner/AlertBanner.d.ts +15 -0
  158. package/dist/types/elsie/src/components/AlertBanner/index.d.ts +3 -0
  159. package/dist/types/elsie/src/components/Breadcrumbs/Breadcrumbs.d.ts +9 -0
  160. package/dist/types/elsie/src/components/Breadcrumbs/index.d.ts +3 -0
  161. package/dist/types/elsie/src/components/Button/Button.d.ts +15 -0
  162. package/dist/types/elsie/src/components/Button/index.d.ts +3 -0
  163. package/dist/types/elsie/src/components/Card/Card.d.ts +9 -0
  164. package/dist/types/elsie/src/components/Card/index.d.ts +2 -0
  165. package/dist/types/elsie/src/components/CartItem/CartItem.d.ts +36 -0
  166. package/dist/types/elsie/src/components/CartItem/CartItemSkeleton.d.ts +4 -0
  167. package/dist/types/elsie/src/components/CartItem/index.d.ts +4 -0
  168. package/dist/types/elsie/src/components/CartList/CartList.d.ts +7 -0
  169. package/dist/types/elsie/src/components/CartList/index.d.ts +3 -0
  170. package/dist/types/elsie/src/components/Checkbox/Checkbox.d.ts +13 -0
  171. package/dist/types/elsie/src/components/Checkbox/index.d.ts +2 -0
  172. package/dist/types/elsie/src/components/ColorSwatch/ColorSwatch.d.ts +20 -0
  173. package/dist/types/elsie/src/components/ColorSwatch/index.d.ts +3 -0
  174. package/dist/types/elsie/src/components/ContentGrid/ContentGrid.d.ts +10 -0
  175. package/dist/types/elsie/src/components/ContentGrid/index.d.ts +19 -0
  176. package/dist/types/elsie/src/components/Divider/Divider.d.ts +8 -0
  177. package/dist/types/elsie/src/components/Divider/index.d.ts +3 -0
  178. package/dist/types/elsie/src/components/Field/Field.d.ts +14 -0
  179. package/dist/types/elsie/src/components/Field/index.d.ts +2 -0
  180. package/dist/types/elsie/src/components/Header/Header.d.ts +11 -0
  181. package/dist/types/elsie/src/components/Header/index.d.ts +3 -0
  182. package/dist/types/elsie/src/components/Icon/Icon.d.ts +18 -0
  183. package/dist/types/elsie/src/components/Icon/index.d.ts +2 -0
  184. package/dist/types/elsie/src/components/IllustratedMessage/IllustratedMessage.d.ts +13 -0
  185. package/dist/types/elsie/src/components/IllustratedMessage/index.d.ts +3 -0
  186. package/dist/types/elsie/src/components/Image/Image.d.ts +11 -0
  187. package/dist/types/elsie/src/components/Image/index.d.ts +2 -0
  188. package/dist/types/elsie/src/components/ImageSwatch/ImageSwatch.d.ts +20 -0
  189. package/dist/types/elsie/src/components/ImageSwatch/index.d.ts +3 -0
  190. package/dist/types/elsie/src/components/InLineAlert/InLineAlert.d.ts +19 -0
  191. package/dist/types/elsie/src/components/InLineAlert/index.d.ts +3 -0
  192. package/dist/types/elsie/src/components/Incrementer/Incrementer.d.ts +17 -0
  193. package/dist/types/elsie/src/components/Incrementer/index.d.ts +2 -0
  194. package/dist/types/elsie/src/components/Input/Input.d.ts +19 -0
  195. package/dist/types/elsie/src/components/Input/index.d.ts +3 -0
  196. package/dist/types/elsie/src/components/InputDate/InputDate.d.ts +11 -0
  197. package/dist/types/elsie/src/components/InputDate/index.d.ts +3 -0
  198. package/dist/types/elsie/src/components/InputPassword/InputPassword.d.ts +19 -0
  199. package/dist/types/elsie/src/components/InputPassword/PasswordStatusIndicator/PasswordStatusIndicator.d.ts +18 -0
  200. package/dist/types/elsie/src/components/InputPassword/PasswordStatusIndicator/index.d.ts +3 -0
  201. package/dist/types/elsie/src/components/InputPassword/index.d.ts +3 -0
  202. package/dist/types/elsie/src/components/Modal/Modal.d.ts +15 -0
  203. package/dist/types/elsie/src/components/Modal/index.d.ts +2 -0
  204. package/dist/types/elsie/src/components/Pagination/Pagination.d.ts +15 -0
  205. package/dist/types/elsie/src/components/Pagination/index.d.ts +3 -0
  206. package/dist/types/elsie/src/components/Picker/Picker.d.ts +28 -0
  207. package/dist/types/elsie/src/components/Picker/index.d.ts +2 -0
  208. package/dist/types/elsie/src/components/Price/Price.d.ts +17 -0
  209. package/dist/types/elsie/src/components/Price/index.d.ts +2 -0
  210. package/dist/types/elsie/src/components/PriceRange/PriceRange.d.ts +17 -0
  211. package/dist/types/elsie/src/components/PriceRange/index.d.ts +3 -0
  212. package/dist/types/elsie/src/components/ProgressSpinner/ProgressSpinner.d.ts +14 -0
  213. package/dist/types/elsie/src/components/ProgressSpinner/index.d.ts +3 -0
  214. package/dist/types/elsie/src/components/RadioButton/RadioButton.d.ts +16 -0
  215. package/dist/types/elsie/src/components/RadioButton/index.d.ts +3 -0
  216. package/dist/types/elsie/src/components/Skeleton/Skeleton.d.ts +17 -0
  217. package/dist/types/elsie/src/components/Skeleton/index.d.ts +2 -0
  218. package/dist/types/elsie/src/components/Tag/Tag.d.ts +9 -0
  219. package/dist/types/elsie/src/components/Tag/index.d.ts +3 -0
  220. package/dist/types/elsie/src/components/TextArea/TextArea.d.ts +11 -0
  221. package/dist/types/elsie/src/components/TextArea/index.d.ts +3 -0
  222. package/dist/types/elsie/src/components/TextSwatch/TextSwatch.d.ts +18 -0
  223. package/dist/types/elsie/src/components/TextSwatch/index.d.ts +3 -0
  224. package/dist/types/elsie/src/components/ToggleButton/ToggleButton.d.ts +14 -0
  225. package/dist/types/elsie/src/components/ToggleButton/index.d.ts +3 -0
  226. package/dist/types/elsie/src/components/UIProvider/UIProvider.d.ts +19 -0
  227. package/dist/types/elsie/src/components/UIProvider/index.d.ts +2 -0
  228. package/dist/types/elsie/src/components/index.d.ts +41 -0
  229. package/dist/types/elsie/src/i18n/en_US.json.d.ts +149 -0
  230. package/dist/types/elsie/src/i18n/index.d.ts +443 -0
  231. package/dist/types/elsie/src/icons/index.d.ts +43 -0
  232. package/dist/types/elsie/src/lib/classes.d.ts +6 -0
  233. package/dist/types/elsie/src/lib/config.d.ts +7 -0
  234. package/dist/types/elsie/src/lib/debounce.d.ts +2 -0
  235. package/dist/types/elsie/src/lib/deepmerge.d.ts +5 -0
  236. package/dist/types/elsie/src/lib/deviceUtils.d.ts +2 -0
  237. package/dist/types/elsie/src/lib/form-values.d.ts +5 -0
  238. package/dist/types/elsie/src/lib/i18n.d.ts +8 -0
  239. package/dist/types/elsie/src/lib/image-params-keymap.d.ts +4 -0
  240. package/dist/types/elsie/src/lib/index.d.ts +16 -0
  241. package/dist/types/elsie/src/lib/initializer.d.ts +81 -0
  242. package/dist/types/elsie/src/lib/is-number.d.ts +2 -0
  243. package/dist/types/elsie/src/lib/render.d.ts +42 -0
  244. package/dist/types/elsie/src/lib/resolve-image.d.ts +10 -0
  245. package/dist/types/elsie/src/lib/signals.d.ts +2 -0
  246. package/dist/types/elsie/src/lib/slot.d.ts +45 -0
  247. package/dist/types/elsie/src/lib/tests.d.ts +5 -0
  248. package/dist/types/elsie/src/lib/types.d.ts +10 -0
  249. package/dist/types/elsie/src/lib/vcomponent.d.ts +9 -0
  250. package/package.json +114 -0
  251. package/src/components/Accordion/Accordion.css +79 -0
  252. package/src/components/Accordion/Accordion.stories.tsx +566 -0
  253. package/src/components/Accordion/Accordion.tsx +166 -0
  254. package/src/components/Accordion/index.ts +2 -0
  255. package/src/components/ActionButton/ActionButton.css +91 -0
  256. package/src/components/ActionButton/ActionButton.stories.tsx +160 -0
  257. package/src/components/ActionButton/ActionButton.tsx +44 -0
  258. package/src/components/ActionButton/index.ts +1 -0
  259. package/src/components/ActionButtonGroup/ActionButtonGroup.css +68 -0
  260. package/src/components/ActionButtonGroup/ActionButtonGroup.stories.tsx +88 -0
  261. package/src/components/ActionButtonGroup/ActionButtonGroup.tsx +82 -0
  262. package/src/components/ActionButtonGroup/index.ts +1 -0
  263. package/src/components/AlertBanner/AlertBanner.css +135 -0
  264. package/src/components/AlertBanner/AlertBanner.stories.tsx +156 -0
  265. package/src/components/AlertBanner/AlertBanner.tsx +81 -0
  266. package/src/components/AlertBanner/index.ts +2 -0
  267. package/src/components/Breadcrumbs/Breadcrumbs.css +51 -0
  268. package/src/components/Breadcrumbs/Breadcrumbs.stories.tsx +186 -0
  269. package/src/components/Breadcrumbs/Breadcrumbs.tsx +62 -0
  270. package/src/components/Breadcrumbs/index.ts +2 -0
  271. package/src/components/Button/Button.css +204 -0
  272. package/src/components/Button/Button.mdx +133 -0
  273. package/src/components/Button/Button.stories.tsx +389 -0
  274. package/src/components/Button/Button.tsx +112 -0
  275. package/src/components/Button/index.ts +2 -0
  276. package/src/components/Card/Card.css +25 -0
  277. package/src/components/Card/Card.stories.tsx +67 -0
  278. package/src/components/Card/Card.tsx +25 -0
  279. package/src/components/Card/index.ts +1 -0
  280. package/src/components/CartItem/CartItem.css +474 -0
  281. package/src/components/CartItem/CartItem.stories.tsx +588 -0
  282. package/src/components/CartItem/CartItem.tsx +444 -0
  283. package/src/components/CartItem/CartItemSkeleton.tsx +29 -0
  284. package/src/components/CartItem/index.ts +3 -0
  285. package/src/components/CartList/CartList.css +26 -0
  286. package/src/components/CartList/CartList.stories.tsx +102 -0
  287. package/src/components/CartList/CartList.tsx +31 -0
  288. package/src/components/CartList/index.ts +2 -0
  289. package/src/components/Checkbox/Checkbox.css +246 -0
  290. package/src/components/Checkbox/Checkbox.stories.tsx +281 -0
  291. package/src/components/Checkbox/Checkbox.tsx +129 -0
  292. package/src/components/Checkbox/index.ts +1 -0
  293. package/src/components/ColorSwatch/ColorSwatch.css +123 -0
  294. package/src/components/ColorSwatch/ColorSwatch.stories.tsx +265 -0
  295. package/src/components/ColorSwatch/ColorSwatch.tsx +118 -0
  296. package/src/components/ColorSwatch/index.ts +2 -0
  297. package/src/components/ContentGrid/ContentGrid.css +62 -0
  298. package/src/components/ContentGrid/ContentGrid.stories.tsx +145 -0
  299. package/src/components/ContentGrid/ContentGrid.tsx +65 -0
  300. package/src/components/ContentGrid/index.ts +19 -0
  301. package/src/components/Divider/Divider.css +13 -0
  302. package/src/components/Divider/Divider.stories.tsx +53 -0
  303. package/src/components/Divider/Divider.tsx +24 -0
  304. package/src/components/Divider/index.ts +2 -0
  305. package/src/components/Field/Field.css +74 -0
  306. package/src/components/Field/Field.stories.tsx +229 -0
  307. package/src/components/Field/Field.tsx +75 -0
  308. package/src/components/Field/index.ts +1 -0
  309. package/src/components/Header/Header.css +47 -0
  310. package/src/components/Header/Header.stories.tsx +128 -0
  311. package/src/components/Header/Header.tsx +53 -0
  312. package/src/components/Header/index.ts +2 -0
  313. package/src/components/Icon/Icon.css +17 -0
  314. package/src/components/Icon/Icon.stories.helpers.jsx +12 -0
  315. package/src/components/Icon/Icon.stories.tsx +88 -0
  316. package/src/components/Icon/Icon.tsx +103 -0
  317. package/src/components/Icon/index.ts +1 -0
  318. package/src/components/IllustratedMessage/IllustratedMessage.css +52 -0
  319. package/src/components/IllustratedMessage/IllustratedMessage.stories.tsx +117 -0
  320. package/src/components/IllustratedMessage/IllustratedMessage.tsx +69 -0
  321. package/src/components/IllustratedMessage/index.ts +2 -0
  322. package/src/components/Image/Image.css +43 -0
  323. package/src/components/Image/Image.stories.tsx +80 -0
  324. package/src/components/Image/Image.tsx +57 -0
  325. package/src/components/Image/index.ts +1 -0
  326. package/src/components/ImageSwatch/ImageSwatch.css +145 -0
  327. package/src/components/ImageSwatch/ImageSwatch.stories.tsx +252 -0
  328. package/src/components/ImageSwatch/ImageSwatch.tsx +111 -0
  329. package/src/components/ImageSwatch/index.ts +2 -0
  330. package/src/components/InLineAlert/InLineAlert.css +107 -0
  331. package/src/components/InLineAlert/InLineAlert.stories.tsx +317 -0
  332. package/src/components/InLineAlert/InLineAlert.tsx +119 -0
  333. package/src/components/InLineAlert/index.ts +2 -0
  334. package/src/components/Incrementer/Incrementer.css +156 -0
  335. package/src/components/Incrementer/Incrementer.stories.tsx +163 -0
  336. package/src/components/Incrementer/Incrementer.tsx +183 -0
  337. package/src/components/Incrementer/index.ts +1 -0
  338. package/src/components/Input/Input.css +295 -0
  339. package/src/components/Input/Input.stories.tsx +146 -0
  340. package/src/components/Input/Input.tsx +157 -0
  341. package/src/components/Input/index.ts +2 -0
  342. package/src/components/InputDate/InputDate.css +47 -0
  343. package/src/components/InputDate/InputDate.stories.tsx +108 -0
  344. package/src/components/InputDate/InputDate.tsx +111 -0
  345. package/src/components/InputDate/index.ts +2 -0
  346. package/src/components/InputPassword/InputPassword.css +22 -0
  347. package/src/components/InputPassword/InputPassword.stories.tsx +139 -0
  348. package/src/components/InputPassword/InputPassword.tsx +126 -0
  349. package/src/components/InputPassword/PasswordStatusIndicator/PasswordStatusIndicator.css +22 -0
  350. package/src/components/InputPassword/PasswordStatusIndicator/PasswordStatusIndicator.tsx +87 -0
  351. package/src/components/InputPassword/PasswordStatusIndicator/index.ts +2 -0
  352. package/src/components/InputPassword/index.ts +2 -0
  353. package/src/components/Modal/Modal.css +130 -0
  354. package/src/components/Modal/Modal.stories.tsx +255 -0
  355. package/src/components/Modal/Modal.tsx +162 -0
  356. package/src/components/Modal/index.ts +15 -0
  357. package/src/components/Pagination/Pagination.css +86 -0
  358. package/src/components/Pagination/Pagination.stories.tsx +108 -0
  359. package/src/components/Pagination/Pagination.tsx +140 -0
  360. package/src/components/Pagination/index.ts +2 -0
  361. package/src/components/Picker/Picker.css +211 -0
  362. package/src/components/Picker/Picker.stories.tsx +309 -0
  363. package/src/components/Picker/Picker.tsx +194 -0
  364. package/src/components/Picker/index.ts +1 -0
  365. package/src/components/Price/Price.css +48 -0
  366. package/src/components/Price/Price.stories.tsx +101 -0
  367. package/src/components/Price/Price.tsx +66 -0
  368. package/src/components/Price/index.ts +1 -0
  369. package/src/components/PriceRange/PriceRange.css +57 -0
  370. package/src/components/PriceRange/PriceRange.stories.tsx +231 -0
  371. package/src/components/PriceRange/PriceRange.tsx +239 -0
  372. package/src/components/PriceRange/index.ts +2 -0
  373. package/src/components/ProgressSpinner/ProgressSpinner.css +82 -0
  374. package/src/components/ProgressSpinner/ProgressSpinner.stories.tsx +291 -0
  375. package/src/components/ProgressSpinner/ProgressSpinner.tsx +77 -0
  376. package/src/components/ProgressSpinner/index.ts +2 -0
  377. package/src/components/RadioButton/RadioButton.css +125 -0
  378. package/src/components/RadioButton/RadioButton.stories.tsx +117 -0
  379. package/src/components/RadioButton/RadioButton.tsx +77 -0
  380. package/src/components/RadioButton/index.ts +2 -0
  381. package/src/components/Skeleton/Skeleton.css +136 -0
  382. package/src/components/Skeleton/Skeleton.stories.tsx +256 -0
  383. package/src/components/Skeleton/Skeleton.tsx +124 -0
  384. package/src/components/Skeleton/index.ts +1 -0
  385. package/src/components/Tag/Tag.css +17 -0
  386. package/src/components/Tag/Tag.stories.tsx +94 -0
  387. package/src/components/Tag/Tag.tsx +29 -0
  388. package/src/components/Tag/index.ts +2 -0
  389. package/src/components/TextArea/TextArea.css +131 -0
  390. package/src/components/TextArea/TextArea.stories.tsx +121 -0
  391. package/src/components/TextArea/TextArea.tsx +80 -0
  392. package/src/components/TextArea/index.ts +2 -0
  393. package/src/components/TextSwatch/TextSwatch.css +143 -0
  394. package/src/components/TextSwatch/TextSwatch.stories.tsx +268 -0
  395. package/src/components/TextSwatch/TextSwatch.tsx +122 -0
  396. package/src/components/TextSwatch/index.ts +2 -0
  397. package/src/components/ToggleButton/ToggleButton.css +77 -0
  398. package/src/components/ToggleButton/ToggleButton.stories.tsx +146 -0
  399. package/src/components/ToggleButton/ToggleButton.tsx +67 -0
  400. package/src/components/ToggleButton/index.ts +2 -0
  401. package/src/components/UIProvider/UIProvider.css +131 -0
  402. package/src/components/UIProvider/UIProvider.tsx +52 -0
  403. package/src/components/UIProvider/debugger.css +38 -0
  404. package/src/components/UIProvider/index.ts +1 -0
  405. package/src/components/UIProvider/normalize.css +17 -0
  406. package/src/components/index.ts +40 -0
  407. package/src/docs/API/event-bus.mdx +52 -0
  408. package/src/docs/API/graphql.mdx +214 -0
  409. package/src/docs/API/initializer.mdx +110 -0
  410. package/src/docs/API/render.mdx +125 -0
  411. package/src/docs/Design/colors.mdx +202 -0
  412. package/src/docs/Design/designBlocks.jsx +87 -0
  413. package/src/docs/Design/getTokenData.ts +28 -0
  414. package/src/docs/Design/grid.mdx +365 -0
  415. package/src/docs/Design/overview.mdx +69 -0
  416. package/src/docs/Design/shapes.mdx +100 -0
  417. package/src/docs/Design/spacing.mdx +22 -0
  418. package/src/docs/Design/typography.mdx +126 -0
  419. package/src/docs/Utilities/classList.mdx +52 -0
  420. package/src/docs/Utilities/debounce.mdx +49 -0
  421. package/src/docs/Utilities/deepmerge.mdx +12 -0
  422. package/src/docs/Utilities/getFormErrors.mdx +41 -0
  423. package/src/docs/Utilities/getFormValues.mdx +38 -0
  424. package/src/docs/assets/Banner.png +0 -0
  425. package/src/docs/assets/Colors.png +0 -0
  426. package/src/docs/assets/DropinBanner.png +0 -0
  427. package/src/docs/assets/ShapeStyles.png +0 -0
  428. package/src/docs/assets/Spacing.png +0 -0
  429. package/src/docs/assets/Typography.png +0 -0
  430. package/src/docs/cli-usage.mdx +181 -0
  431. package/src/docs/components/overview.mdx +124 -0
  432. package/src/docs/quick-start.mdx +245 -0
  433. package/src/docs/slots.mdx +211 -0
  434. package/src/docs/welcome.mdx +52 -0
  435. package/src/i18n/en_US.json +146 -0
  436. package/src/i18n/index.ts +17 -0
  437. package/src/icons/Add.svg +9 -0
  438. package/src/icons/AddressBook.svg +3 -0
  439. package/src/icons/Bulk.svg +24 -0
  440. package/src/icons/Burger.svg +5 -0
  441. package/src/icons/Card.svg +7 -0
  442. package/src/icons/Cart.svg +11 -0
  443. package/src/icons/Check.svg +8 -0
  444. package/src/icons/CheckWithCircle.svg +4 -0
  445. package/src/icons/ChevronDown.svg +3 -0
  446. package/src/icons/ChevronRight.svg +8 -0
  447. package/src/icons/ChevronUp.svg +3 -0
  448. package/src/icons/Close.svg +4 -0
  449. package/src/icons/Coupon.svg +3 -0
  450. package/src/icons/Date.svg +4 -0
  451. package/src/icons/Delivery.svg +11 -0
  452. package/src/icons/EmptyBox.svg +3 -0
  453. package/src/icons/Eye.svg +3 -0
  454. package/src/icons/EyeClose.svg +3 -0
  455. package/src/icons/Gift.svg +3 -0
  456. package/src/icons/GiftCard.svg +3 -0
  457. package/src/icons/Heart.svg +3 -0
  458. package/src/icons/HeartFilled.svg +3 -0
  459. package/src/icons/InfoFilled.svg +3 -0
  460. package/src/icons/Locker.svg +11 -0
  461. package/src/icons/Minus.svg +3 -0
  462. package/src/icons/Order.svg +6 -0
  463. package/src/icons/OrderError.svg +15 -0
  464. package/src/icons/OrderSuccess.svg +15 -0
  465. package/src/icons/PaymentError.svg +16 -0
  466. package/src/icons/Placeholder.svg +3 -0
  467. package/src/icons/PlaceholderFilled.svg +4 -0
  468. package/src/icons/Search.svg +9 -0
  469. package/src/icons/SearchFilled.svg +10 -0
  470. package/src/icons/Sort.svg +12 -0
  471. package/src/icons/Star.svg +8 -0
  472. package/src/icons/Trash.svg +7 -0
  473. package/src/icons/User.svg +5 -0
  474. package/src/icons/View.svg +14 -0
  475. package/src/icons/Wallet.svg +6 -0
  476. package/src/icons/Warning.svg +12 -0
  477. package/src/icons/WarningFilled.svg +3 -0
  478. package/src/icons/WarningWithCircle.svg +4 -0
  479. package/src/icons/index.ts +42 -0
  480. package/src/lib/classes.ts +25 -0
  481. package/src/lib/config.ts +15 -0
  482. package/src/lib/debounce.ts +7 -0
  483. package/src/lib/deepmerge.ts +36 -0
  484. package/src/lib/deviceUtils.ts +7 -0
  485. package/src/lib/form-values.ts +22 -0
  486. package/src/lib/i18n.ts +9 -0
  487. package/src/lib/image-params-keymap.ts +25 -0
  488. package/src/lib/index.ts +15 -0
  489. package/src/lib/initializer.ts +122 -0
  490. package/src/lib/is-number.ts +3 -0
  491. package/src/lib/render.tsx +129 -0
  492. package/src/lib/resolve-image.ts +77 -0
  493. package/src/lib/signals.ts +2 -0
  494. package/src/lib/slot.tsx +425 -0
  495. package/src/lib/tests.tsx +38 -0
  496. package/src/lib/types.ts +7 -0
  497. package/src/lib/vcomponent.tsx +47 -0
  498. package/static/assets/images/Card.png +0 -0
  499. package/static/assets/images/example.jpg +0 -0
  500. package/static/assets/images/index.ts +2 -0
  501. package/static/dropin.png +0 -0
  502. package/static/favicon.svg +14 -0
  503. package/storybook-stories.js +12 -0
  504. package/tests/__mocks__/browserMocks.ts +19 -0
  505. package/tests/__mocks__/fileMocks.ts +3 -0
  506. package/tests/__mocks__/styleMock.ts +0 -0
  507. 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
+ &nbsp;
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
+ &nbsp;
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>