@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,255 @@
1
+ /*
2
+ ADOBE CONFIDENTIAL
3
+ Copyright 2023 Adobe
4
+ All Rights Reserved.
5
+ NOTICE: All information contained herein is, and remains
6
+ the property of Adobe and its suppliers, if any. The intellectual
7
+ and technical concepts contained herein are proprietary to Adobe
8
+ and its suppliers and are protected by all applicable intellectual
9
+ property laws, including trade secret and copyright laws.
10
+ Dissemination of this information or reproduction of this material
11
+ is strictly forbidden unless prior written permission is obtained
12
+ from Adobe.
13
+ */
14
+
15
+ import { Meta, StoryObj } from '@storybook/preact';
16
+ import { Modal as component, ModalProps } from './Modal';
17
+ import { useState } from 'preact/hooks';
18
+ import { Button } from '../Button';
19
+ import { expect, userEvent, within } from '@storybook/test';
20
+
21
+ const meta: Meta<ModalProps> = {
22
+ title: 'Components/Modal',
23
+ component,
24
+ parameters: {
25
+ layout: 'centered',
26
+ },
27
+ tags: ['autodocs'],
28
+ argTypes: {
29
+ children: {
30
+ description: 'Content',
31
+ control: { type: 'text' },
32
+ defaultValue: { summary: '<empty string>' },
33
+ },
34
+ size: {
35
+ description: 'Modal size',
36
+ control: { type: 'radio' },
37
+ options: ['small', 'medium', 'full'],
38
+ defaultValue: { summary: 'small' },
39
+ },
40
+ title: {
41
+ description: 'Title',
42
+ control: { type: 'text' },
43
+ defaultValue: { summary: '<empty string>' },
44
+ },
45
+ centered: {
46
+ description: 'Content inside modal is centered',
47
+ type: 'boolean',
48
+ defaultValue: { summary: 'false' },
49
+ },
50
+ onClose: {
51
+ description: 'On close modal callback',
52
+ control: { type: 'null' },
53
+ defaultValue: { summary: 'null' },
54
+ },
55
+ backgroundDim: {
56
+ description: 'Background behind modal content is dimmed',
57
+ type: 'boolean',
58
+ defaultValue: { summary: 'true' },
59
+ },
60
+ clickToDismiss: {
61
+ description: 'Enable click on background to dismiss the modal',
62
+ type: 'boolean',
63
+ defaultValue: { summary: 'true' },
64
+ },
65
+ escapeToDismiss: {
66
+ description: 'Enable ESCAPE key press to dismiss the modal',
67
+ type: 'boolean',
68
+ defaultValue: { summary: 'true' },
69
+ },
70
+ showCloseButton: {
71
+ description: 'Show close button',
72
+ type: 'boolean',
73
+ defaultValue: { summary: 'true' },
74
+ },
75
+ },
76
+ decorators: [
77
+ (Story, attrs) => {
78
+ const [active, setActive] = useState(false);
79
+
80
+ attrs.args.onClose = () => setActive(false);
81
+
82
+ return (
83
+ <div>
84
+ <Button onClick={() => setActive(true)}>Open Modal</Button>
85
+
86
+ {active && Story()}
87
+ </div>
88
+ );
89
+ },
90
+ ],
91
+ };
92
+
93
+ type Story = StoryObj<ModalProps>;
94
+
95
+ /**
96
+ * ```ts
97
+ * import { Modal } from '@/elsie/components/Modal';
98
+ *
99
+ * <Modal size="small" title={<h4>Modal Title</h4>}>
100
+ * <div>👋 Howdy, I'm Howdy!</div>
101
+ * </Modal>
102
+ * ```
103
+ */
104
+
105
+ export const SmallModal: Story = {
106
+ args: {
107
+ size: 'small',
108
+ children: "👋 Howdy, I'm Howdy!",
109
+ title: <h4>Small modal</h4>,
110
+ },
111
+ play: async ({ canvasElement }) => {
112
+ const canvas = within(canvasElement);
113
+ await userEvent.click(canvas.getByRole('button'));
114
+
115
+ const modal = document.querySelector(
116
+ '.dropin-modal__body'
117
+ ) as HTMLDivElement;
118
+
119
+ await expect(modal).toBeVisible();
120
+
121
+ await expect(await canvas.findByText('Small modal')).toBeVisible();
122
+
123
+ const closeButton = document.querySelector(
124
+ '.dropin-modal__header-close-button'
125
+ ) as HTMLButtonElement;
126
+
127
+ await userEvent.click(closeButton);
128
+
129
+ await expect(modal).not.toBeVisible();
130
+
131
+ await expect(canvas.getByText('Open Modal')).toBeVisible();
132
+ },
133
+ };
134
+
135
+ /**
136
+ * ```ts
137
+ * import { Modal } from '@/elsie/components/Modal';
138
+ *
139
+ * <Modal size="medium" centered={true} title={<h3>Medium modal</h3>}>
140
+ * <div>👋 Howdy, I'm Howdy!</div>
141
+ * </Modal>
142
+ * ```
143
+ */
144
+
145
+ export const MediumModal: Story = {
146
+ args: {
147
+ size: 'medium',
148
+ centered: true,
149
+ children: "👋 Howdy, I'm Howdy!",
150
+ title: <h3>Medium modal</h3>,
151
+ },
152
+ play: async ({ canvasElement }) => {
153
+ const canvas = within(canvasElement);
154
+ await userEvent.click(canvas.getByRole('button'));
155
+
156
+ const modal = document.querySelector(
157
+ '.dropin-modal__body'
158
+ ) as HTMLDivElement;
159
+
160
+ await expect(modal).toBeVisible();
161
+
162
+ await expect(await canvas.findByText('Medium modal')).toBeVisible();
163
+
164
+ const closeButton = document.querySelector(
165
+ '.dropin-modal__header-close-button'
166
+ ) as HTMLButtonElement;
167
+
168
+ await userEvent.click(closeButton);
169
+
170
+ await expect(modal).not.toBeVisible();
171
+
172
+ await expect(canvas.getByText('Open Modal')).toBeVisible();
173
+ },
174
+ };
175
+
176
+ /**
177
+ * ```ts
178
+ * import { Modal } from '@/elsie/components/Modal';
179
+ *
180
+ * <Modal size="full">
181
+ * <div>👋 Howdy, I'm Howdy!</div>
182
+ * </Modal>
183
+ * ```
184
+ */
185
+
186
+ export const FullModal: Story = {
187
+ args: {
188
+ size: 'full',
189
+ children: "👋 Howdy, I'm Howdy!",
190
+ },
191
+ play: async ({ canvasElement }) => {
192
+ const canvas = within(canvasElement);
193
+ await userEvent.click(canvas.getByRole('button'));
194
+
195
+ const modal = document.querySelector(
196
+ '.dropin-modal__body'
197
+ ) as HTMLDivElement;
198
+
199
+ await expect(modal).toBeVisible();
200
+
201
+ const closeButton = document.querySelector(
202
+ '.dropin-modal__header-close-button'
203
+ ) as HTMLButtonElement;
204
+
205
+ await userEvent.click(closeButton);
206
+
207
+ await expect(modal).not.toBeVisible();
208
+
209
+ await expect(canvas.getByText('Open Modal')).toBeVisible();
210
+ },
211
+ };
212
+
213
+ /**
214
+ * ```ts
215
+ * import { Modal } from '@/elsie/components/Modal';
216
+ *
217
+ * <Modal size="full" centered={true}>
218
+ * Lorem ipsum...
219
+ * </Modal>
220
+ * ```
221
+ */
222
+
223
+ export const OverflowingChildren: Story = {
224
+ args: {
225
+ size: 'full',
226
+ centered: true,
227
+ children: `
228
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras tincidunt neque gravida ligula malesuada bibendum et quis enim. Mauris sed nunc odio. Sed ornare nec nulla at fringilla. Cras egestas laoreet mi, sit amet tristique ipsum. Quisque facilisis ante et nisi hendrerit, et cursus est iaculis. Vestibulum nec erat eleifend, convallis velit quis, pharetra est. Nam augue dolor, blandit ac suscipit pretium, efficitur ut mi. Donec et suscipit ipsum, vel ultricies felis. Maecenas vestibulum velit mauris, ut sagittis arcu auctor maximus. Nullam gravida eget felis ac iaculis. Ut a consectetur ipsum, ac cursus magna. Quisque tempus tempus magna at vehicula. Duis ac imperdiet purus, finibus aliquet enim. Sed vel diam pretium, blandit risus vel, convallis mauris. Mauris consectetur iaculis diam.
229
+ `.repeat(15),
230
+ },
231
+ };
232
+
233
+ /**
234
+ * ```ts
235
+ * import { Modal } from '@/elsie/components/Modal';
236
+ *
237
+ * <Modal size="medium" title={<h3 style={{marginTop: 0}}>{`Howdy! This is the modal title`.repeat(5)}</h3>}>
238
+ * Howdy! This is the modal content.
239
+ * </Modal>
240
+ * ```
241
+ */
242
+
243
+ export const OverflowingTitle: Story = {
244
+ args: {
245
+ size: 'medium',
246
+ children: `Howdy! This is the modal content.`,
247
+ title: (
248
+ <h3 style={{ marginTop: 0 }}>
249
+ {`Howdy! This is the modal title`.repeat(5)}
250
+ </h3>
251
+ ),
252
+ },
253
+ };
254
+
255
+ export default meta;
@@ -0,0 +1,162 @@
1
+ /*
2
+ ADOBE CONFIDENTIAL
3
+ Copyright 2023 Adobe
4
+ All Rights Reserved.
5
+ NOTICE: All information contained herein is, and remains
6
+ the property of Adobe and its suppliers, if any. The intellectual
7
+ and technical concepts contained herein are proprietary to Adobe
8
+ and its suppliers and are protected by all applicable intellectual
9
+ property laws, including trade secret and copyright laws.
10
+ Dissemination of this information or reproduction of this material
11
+ is strictly forbidden unless prior written permission is obtained
12
+ from Adobe.
13
+ */
14
+
15
+ import { useText } from '@adobe/elsie/i18n';
16
+ import { classes } from '@adobe/elsie/lib';
17
+ import {
18
+ FunctionComponent,
19
+ HTMLAttributes,
20
+ useCallback,
21
+ useEffect,
22
+ } from 'preact/compat';
23
+ import { Button } from '../Button';
24
+ import { Close as CloseSVG } from '@adobe/elsie/icons';
25
+ import { VNode } from 'preact';
26
+
27
+ import '@adobe/elsie/components/Modal/Modal.css';
28
+
29
+ export interface ModalProps
30
+ extends Omit<HTMLAttributes<HTMLDivElement>, 'size' | 'title'> {
31
+ size?: 'small' | 'medium' | 'full';
32
+ title?: VNode;
33
+ centered?: boolean;
34
+ onClose?: () => void;
35
+ backgroundDim?: boolean;
36
+ clickToDismiss?: boolean;
37
+ escapeToDismiss?: boolean;
38
+ showCloseButton?: boolean;
39
+ }
40
+
41
+ export const Modal: FunctionComponent<ModalProps> = ({
42
+ size = 'small',
43
+ title = null,
44
+ centered = false,
45
+ backgroundDim = true,
46
+ clickToDismiss = true,
47
+ escapeToDismiss = true,
48
+ onClose,
49
+ showCloseButton = true,
50
+ className,
51
+ children = null,
52
+ ...props
53
+ }) => {
54
+ const handleOnClose = useCallback(() => {
55
+ onClose?.();
56
+ }, [onClose]);
57
+
58
+ const translations = useText({
59
+ modalCloseLabel: 'Dropin.Modal.Close.label',
60
+ });
61
+
62
+ // Close on background click
63
+ useEffect(() => {
64
+ const handleOutsideClick = (event: MouseEvent) => {
65
+ const modal = document.querySelector('.dropin-modal');
66
+ const modalBody = document.querySelector('.dropin-modal__body');
67
+
68
+ if (
69
+ clickToDismiss &&
70
+ modal &&
71
+ modalBody &&
72
+ !modalBody.contains(event.target as Node)
73
+ ) {
74
+ handleOnClose();
75
+ }
76
+ };
77
+
78
+ document.addEventListener('mousedown', handleOutsideClick);
79
+
80
+ return () => {
81
+ document.removeEventListener('mousedown', handleOutsideClick);
82
+ };
83
+ }, [handleOnClose, clickToDismiss]);
84
+
85
+ // Close on ESC
86
+ useEffect(() => {
87
+ const handleKeyDown = (event: KeyboardEvent) => {
88
+ if (event.key === 'Escape' && escapeToDismiss) {
89
+ handleOnClose();
90
+ }
91
+ };
92
+
93
+ document.addEventListener('keydown', handleKeyDown);
94
+
95
+ return () => {
96
+ document.removeEventListener('keydown', handleKeyDown);
97
+ };
98
+ }, [handleOnClose, escapeToDismiss]);
99
+
100
+ // Prevent document scrolling
101
+ useEffect(() => {
102
+ const scrollingElement = document.scrollingElement as HTMLElement;
103
+
104
+ const defaultOverflowValue = scrollingElement.style.overflow;
105
+
106
+ scrollingElement.style.overflow = 'hidden';
107
+
108
+ return () => {
109
+ scrollingElement.style.overflow = defaultOverflowValue;
110
+ };
111
+ }, []);
112
+
113
+ return (
114
+ <div
115
+ className={classes([
116
+ 'dropin-modal',
117
+ ['dropin-modal--dim', backgroundDim],
118
+ ])}
119
+ >
120
+ <div
121
+ {...props}
122
+ className={classes([
123
+ 'dropin-modal__body',
124
+ [`dropin-modal__body--${size}`, size],
125
+ className,
126
+ ])}
127
+ >
128
+ <div
129
+ className={classes([
130
+ 'dropin-modal__header',
131
+ ['dropin-modal__header-title', !!title],
132
+ ])}
133
+ >
134
+ {title && (
135
+ <div className={classes(['dropin-modal__header-title-content'])}>
136
+ {title}
137
+ </div>
138
+ )}
139
+
140
+ {showCloseButton && (
141
+ <Button
142
+ aria-label={translations.modalCloseLabel}
143
+ variant="tertiary"
144
+ className="dropin-modal__header-close-button"
145
+ onClick={handleOnClose}
146
+ icon={<CloseSVG />}
147
+ />
148
+ )}
149
+ </div>
150
+
151
+ <div
152
+ className={classes([
153
+ 'dropin-modal__content',
154
+ ['dropin-modal__body--centered', centered],
155
+ ])}
156
+ >
157
+ {children}
158
+ </div>
159
+ </div>
160
+ </div>
161
+ );
162
+ };
@@ -0,0 +1,15 @@
1
+ /*
2
+ ADOBE CONFIDENTIAL
3
+ Copyright 2023 Adobe
4
+ All Rights Reserved.
5
+ NOTICE: All information contained herein is, and remains
6
+ the property of Adobe and its suppliers, if any. The intellectual
7
+ and technical concepts contained herein are proprietary to Adobe
8
+ and its suppliers and are protected by all applicable intellectual
9
+ property laws, including trade secret and copyright laws.
10
+ Dissemination of this information or reproduction of this material
11
+ is strictly forbidden unless prior written permission is obtained
12
+ from Adobe.
13
+ */
14
+
15
+ export * from '@adobe/elsie/components/Modal/Modal';
@@ -0,0 +1,86 @@
1
+ .dropin-pagination {
2
+ display: flex;
3
+ justify-content: center;
4
+ align-items: center;
5
+ gap: 0 var(--grid-2-gutters);
6
+ }
7
+
8
+ .dropin-pagination-arrow {
9
+ margin: 0;
10
+ padding: 0;
11
+ box-sizing: border-box;
12
+ background-color: transparent;
13
+ border: none;
14
+ display: flex;
15
+ justify-content: center;
16
+ align-items: center;
17
+ cursor: pointer;
18
+ }
19
+
20
+ .dropin-pagination-arrow--backward svg {
21
+ transform: rotate(90deg);
22
+ }
23
+
24
+ .dropin-pagination-arrow--forward svg {
25
+ transform: rotate(-90deg);
26
+ }
27
+
28
+ .dropin-pagination_list {
29
+ list-style: none;
30
+ display: flex;
31
+ justify-content: center;
32
+ align-items: center;
33
+ gap: 0 var(--grid-2-gutters);
34
+ margin: 0;
35
+ padding: 0;
36
+ }
37
+
38
+ .dropin-pagination_list-item {
39
+ display: flex;
40
+ justify-content: center;
41
+ align-items: center;
42
+ margin: 0;
43
+ padding: 0;
44
+ width: 16px;
45
+ height: 16px;
46
+ }
47
+
48
+ .dropin-pagination_list-item--active {
49
+ background-color: var(--color-neutral-300);
50
+ width: 16px;
51
+ height: 16px;
52
+ border-radius: 50%;
53
+ display: flex;
54
+ justify-content: center;
55
+ align-items: center;
56
+ }
57
+
58
+ .dropin-pagination_list-item button {
59
+ cursor: pointer;
60
+ margin: 0;
61
+ padding: 0;
62
+ background-color: transparent;
63
+ border: none;
64
+ font: var(--type-details-caption-1-font);
65
+ letter-spacing: var(--type-details-caption-1-letter-spacing);
66
+ }
67
+
68
+ .dropin-pagination_list-item--active button {
69
+ cursor: default;
70
+ }
71
+
72
+ .dropin-pagination_list-item--active button:disabled,
73
+ .dropin-pagination_list-item--ellipsis button,
74
+ .dropin-pagination-arrow--backward:disabled,
75
+ .dropin-pagination-arrow--forward:disabled {
76
+ cursor: default;
77
+ }
78
+
79
+ .dropin-pagination button:not(:disabled) {
80
+ color: var(--color-neutral-800);
81
+ }
82
+
83
+ .dropin-pagination button {
84
+ appearance: none;
85
+ -webkit-appearance: none;
86
+ }
@@ -0,0 +1,108 @@
1
+ // https://storybook.js.org/docs/7.0/preact/writing-stories/introduction
2
+ import type { Meta, StoryObj } from '@storybook/preact';
3
+
4
+ import {
5
+ Pagination,
6
+ PaginationProps,
7
+ } from '@adobe/elsie/components/Pagination';
8
+ import { expect, userEvent, within } from '@storybook/test';
9
+ import { useState } from 'preact/hooks';
10
+
11
+ /**
12
+ * A component that divides large content sets into multiple pages, allowing users to navigate through the data with controls like "Next," "Previous," or page numbers, enhancing performance and usability by limiting the number of items displayed per page.
13
+ */
14
+
15
+ const meta: Meta<PaginationProps> = {
16
+ title: 'Components/Pagination',
17
+ component: Pagination,
18
+ argTypes: {
19
+ totalPages: {
20
+ control: { type: 'number' },
21
+ description: 'The total number of pages in the pagination component.',
22
+ defaultValue: 10,
23
+ },
24
+ currentPage: {
25
+ control: { type: 'number' },
26
+ description: 'The current active page in the pagination.',
27
+ defaultValue: 1,
28
+ },
29
+ onChange: {
30
+ action: 'pageChanged',
31
+ description:
32
+ 'Called when the page number is changed, and it takes the resulting page number.',
33
+ },
34
+ },
35
+ };
36
+
37
+ export default meta;
38
+
39
+ type Story = StoryObj<PaginationProps>;
40
+
41
+ /**
42
+ * ```ts
43
+ * import { Pagination } from '@adobe/elsie/components/Pagination';
44
+ * ```
45
+ */
46
+
47
+ export const ShortPagination: Story = {
48
+ name: 'Short pagination list',
49
+ args: { totalPages: 5 },
50
+ play: async ({ canvasElement }) => {
51
+ const canvas = within(canvasElement);
52
+
53
+ const item1 = canvas.getByTestId('dropin-pagination_list-item--1');
54
+ const item2 = canvas.getByTestId('dropin-pagination_list-item--2');
55
+ const item5 = canvas.getByTestId('dropin-pagination_list-item--5');
56
+ const nextButton = canvas.getByTestId('next-button');
57
+
58
+ expect(item1).toHaveClass('dropin-pagination_list-item--active');
59
+ expect(item2).not.toHaveClass('dropin-pagination_list-item--active');
60
+
61
+ await userEvent.click(nextButton);
62
+
63
+ expect(item1).not.toHaveClass('dropin-pagination_list-item--active');
64
+ expect(item2).toHaveClass('dropin-pagination_list-item--active');
65
+
66
+ await userEvent.click(nextButton);
67
+ await userEvent.click(nextButton);
68
+ await userEvent.click(nextButton);
69
+
70
+ expect(item5).toHaveClass('dropin-pagination_list-item--active');
71
+ },
72
+ render: (args) => {
73
+ const [currentPage, setCurrentPage] = useState(1);
74
+ const totalPages = args.totalPages;
75
+
76
+ const handlePageChange = (newPage: number) => {
77
+ setCurrentPage(newPage);
78
+ };
79
+
80
+ return (
81
+ <Pagination
82
+ totalPages={totalPages}
83
+ currentPage={currentPage}
84
+ onChange={handlePageChange}
85
+ />
86
+ );
87
+ },
88
+ };
89
+
90
+ export const LongPagination: Story = {
91
+ name: 'Long pagination list',
92
+ render: () => {
93
+ const [currentPage, setCurrentPage] = useState(1);
94
+ const totalPages = 20;
95
+
96
+ const handlePageChange = (newPage: number) => {
97
+ setCurrentPage(newPage);
98
+ };
99
+
100
+ return (
101
+ <Pagination
102
+ totalPages={totalPages}
103
+ currentPage={currentPage}
104
+ onChange={handlePageChange}
105
+ />
106
+ );
107
+ },
108
+ };