@faststore/core 22.42.6

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 (475) hide show
  1. package/.babelrc +4 -0
  2. package/.editorconfig +13 -0
  3. package/.eslintignore +8 -0
  4. package/.eslintrc +21 -0
  5. package/.github/CODEOWNERS +2 -0
  6. package/.github/workflows/release.yml +40 -0
  7. package/.husky/pre-commit +4 -0
  8. package/.prettierignore +8 -0
  9. package/.prettierrc +1 -0
  10. package/.release-it.json +31 -0
  11. package/.storybook/components/BestPractices.tsx +18 -0
  12. package/.storybook/components/BestPracticesRule.tsx +43 -0
  13. package/.storybook/components/Callout.tsx +12 -0
  14. package/.storybook/components/SectionItem.tsx +44 -0
  15. package/.storybook/components/SectionList.tsx +27 -0
  16. package/.storybook/components/TokenDivider.tsx +12 -0
  17. package/.storybook/components/TokenRow.tsx +32 -0
  18. package/.storybook/components/TokenTable.tsx +33 -0
  19. package/.storybook/components/index.ts +8 -0
  20. package/.storybook/main.js +59 -0
  21. package/.storybook/manager-head.html +9 -0
  22. package/.storybook/manager.js +6 -0
  23. package/.storybook/mocks/cart-sidebar.js +40 -0
  24. package/.storybook/mocks/filter-slider.js +59 -0
  25. package/.storybook/mocks/index.ts +5 -0
  26. package/.storybook/mocks/product.ts +67 -0
  27. package/.storybook/mocks/productGridItems.ts +334 -0
  28. package/.storybook/mocks/searchHistory.ts +8 -0
  29. package/.storybook/mocks/searchTerms.ts +5 -0
  30. package/.storybook/preview-head.html +1 -0
  31. package/.storybook/preview.js +89 -0
  32. package/.storybook/storybook.css +550 -0
  33. package/.storybook/theme.js +21 -0
  34. package/.stylelintignore +1 -0
  35. package/.vscode/settings.json +7 -0
  36. package/@generated/graphql/index.ts +1133 -0
  37. package/@generated/graphql/persisted.json +12 -0
  38. package/CHANGELOG.md +730 -0
  39. package/LICENSE +21 -0
  40. package/README.md +437 -0
  41. package/bun.lockb +0 -0
  42. package/cms/content-types.json +52 -0
  43. package/cms/sections.json +350 -0
  44. package/cms/translation-keys.json +1 -0
  45. package/cms-webhook-urls.json +5 -0
  46. package/codegen.yml +22 -0
  47. package/cypress/fixtures/example.json +5 -0
  48. package/cypress/global.js +15 -0
  49. package/cypress/integration/a11y.test.js +45 -0
  50. package/cypress/integration/analytics.test.js +381 -0
  51. package/cypress/integration/cart.test.js +100 -0
  52. package/cypress/integration/performance.test.js +65 -0
  53. package/cypress/integration/plp.test.js +224 -0
  54. package/cypress/integration/search.test.js +38 -0
  55. package/cypress/integration/seo.test.js +318 -0
  56. package/cypress/plugins/index.js +41 -0
  57. package/cypress/support/commands.js +70 -0
  58. package/cypress/support/index.js +3 -0
  59. package/cypress.json +9 -0
  60. package/lighthouserc.js +22 -0
  61. package/next-env.d.ts +5 -0
  62. package/next.config.js +35 -0
  63. package/package.json +114 -0
  64. package/postcss.config.js +5 -0
  65. package/public/brandless-negative.png +0 -0
  66. package/public/brandless-neutral.png +0 -0
  67. package/public/brandless-positive.png +0 -0
  68. package/public/brandless-storybook.png +0 -0
  69. package/public/favicon.ico +0 -0
  70. package/public/icons.svg +58 -0
  71. package/public/logo.svg +42 -0
  72. package/public/mockServiceWorker.js +367 -0
  73. package/public/robots.txt +5 -0
  74. package/pull_request_template.md +37 -0
  75. package/renovate.json +5 -0
  76. package/src/Layout.tsx +51 -0
  77. package/src/components/ThirdPartyScripts/GoogleTagManager.tsx +61 -0
  78. package/src/components/ThirdPartyScripts/ThirdPartyScripts.tsx +37 -0
  79. package/src/components/ThirdPartyScripts/index.ts +1 -0
  80. package/src/components/ThirdPartyScripts/vtex.tsx +23 -0
  81. package/src/components/cart/CartItem/CartItem.stories.mdx +134 -0
  82. package/src/components/cart/CartItem/CartItem.tsx +158 -0
  83. package/src/components/cart/CartItem/cart-item.module.scss +68 -0
  84. package/src/components/cart/CartItem/index.ts +1 -0
  85. package/src/components/cart/CartSidebar/CartSidebar.stories.mdx +119 -0
  86. package/src/components/cart/CartSidebar/CartSidebar.tsx +140 -0
  87. package/src/components/cart/CartSidebar/cart-sidebar.module.scss +69 -0
  88. package/src/components/cart/CartSidebar/index.ts +1 -0
  89. package/src/components/cart/CartToggle/CartToggle.tsx +20 -0
  90. package/src/components/cart/CartToggle/index.ts +1 -0
  91. package/src/components/cart/EmptyCart/EmptyCart.tsx +26 -0
  92. package/src/components/cart/EmptyCart/index.ts +1 -0
  93. package/src/components/cart/OrderSummary/OrderSummary.tsx +39 -0
  94. package/src/components/cart/OrderSummary/index.ts +1 -0
  95. package/src/components/cart/OrderSummary/order-summary.module.scss +22 -0
  96. package/src/components/cms/RenderPageSections.tsx +52 -0
  97. package/src/components/cms/SectionBoundary.tsx +34 -0
  98. package/src/components/common/Alert/Alert.tsx +53 -0
  99. package/src/components/common/Alert/index.ts +1 -0
  100. package/src/components/common/Footer/Footer.stories.mdx +158 -0
  101. package/src/components/common/Footer/Footer.tsx +160 -0
  102. package/src/components/common/Footer/FooterLinks.tsx +155 -0
  103. package/src/components/common/Footer/footer.module.scss +246 -0
  104. package/src/components/common/Footer/index.ts +2 -0
  105. package/src/components/common/Navbar/NavLinks.stories.mdx +122 -0
  106. package/src/components/common/Navbar/NavLinks.tsx +58 -0
  107. package/src/components/common/Navbar/Navbar.stories.mdx +179 -0
  108. package/src/components/common/Navbar/Navbar.tsx +97 -0
  109. package/src/components/common/Navbar/NavbarSlider.stories.mdx +108 -0
  110. package/src/components/common/Navbar/NavbarSlider.tsx +62 -0
  111. package/src/components/common/Navbar/index.ts +3 -0
  112. package/src/components/common/Navbar/navbar-slider.module.scss +60 -0
  113. package/src/components/common/Navbar/navbar.module.scss +204 -0
  114. package/src/components/common/Navbar/navlinks.module.scss +96 -0
  115. package/src/components/common/Toast/Toast.tsx +40 -0
  116. package/src/components/common/Toast/index.ts +1 -0
  117. package/src/components/product/OutOfStock/OutOfStock.stories.mdx +127 -0
  118. package/src/components/product/OutOfStock/OutOfStock.tsx +134 -0
  119. package/src/components/product/OutOfStock/index.ts +2 -0
  120. package/src/components/product/OutOfStock/out-of-stock.module.scss +55 -0
  121. package/src/components/product/ProductCard/ProductCard.stories.mdx +412 -0
  122. package/src/components/product/ProductCard/ProductCard.tsx +170 -0
  123. package/src/components/product/ProductCard/index.ts +2 -0
  124. package/src/components/product/ProductCard/product-card.module.scss +254 -0
  125. package/src/components/product/ProductGrid/ProductGrid.stories.mdx +97 -0
  126. package/src/components/product/ProductGrid/ProductGrid.tsx +37 -0
  127. package/src/components/product/ProductGrid/index.ts +1 -0
  128. package/src/components/product/ProductGrid/product-grid.module.scss +39 -0
  129. package/src/components/regionalization/Regionalization.stories.mdx +182 -0
  130. package/src/components/regionalization/RegionalizationBar/RegionalizationBar.stories.mdx +116 -0
  131. package/src/components/regionalization/RegionalizationBar/RegionalizationBar.tsx +40 -0
  132. package/src/components/regionalization/RegionalizationBar/index.ts +1 -0
  133. package/src/components/regionalization/RegionalizationBar/regionalization-bar.module.scss +56 -0
  134. package/src/components/regionalization/RegionalizationButton/RegionalizationButton.tsx +24 -0
  135. package/src/components/regionalization/RegionalizationButton/index.ts +1 -0
  136. package/src/components/regionalization/RegionalizationInput/RegionalizationInput.tsx +61 -0
  137. package/src/components/regionalization/RegionalizationInput/index.ts +1 -0
  138. package/src/components/regionalization/RegionalizationModal/RegionalizationModal.stories.mdx +161 -0
  139. package/src/components/regionalization/RegionalizationModal/RegionalizationModal.tsx +13 -0
  140. package/src/components/regionalization/RegionalizationModal/RegionalizationModalContent.tsx +48 -0
  141. package/src/components/regionalization/RegionalizationModal/index.ts +2 -0
  142. package/src/components/regionalization/RegionalizationModal/regionalization-modal-content.module.scss +79 -0
  143. package/src/components/search/Filter/Facets.stories.mdx +284 -0
  144. package/src/components/search/Filter/Facets.tsx +136 -0
  145. package/src/components/search/Filter/Filter.stories.mdx +209 -0
  146. package/src/components/search/Filter/Filter.tsx +91 -0
  147. package/src/components/search/Filter/FilterSlider.stories.mdx +226 -0
  148. package/src/components/search/Filter/FilterSlider.tsx +109 -0
  149. package/src/components/search/Filter/facets.module.scss +117 -0
  150. package/src/components/search/Filter/filter-slider.module.scss +63 -0
  151. package/src/components/search/Filter/index.ts +2 -0
  152. package/src/components/search/Filter/useFilter.ts +131 -0
  153. package/src/components/search/Search.stories.mdx +169 -0
  154. package/src/components/search/SearchDropdown/SearchDropdown.stories.mdx +62 -0
  155. package/src/components/search/SearchDropdown/SearchDropdown.tsx +44 -0
  156. package/src/components/search/SearchDropdown/index.ts +2 -0
  157. package/src/components/search/SearchHistory/SearchHistory.stories.mdx +59 -0
  158. package/src/components/search/SearchHistory/SearchHistory.tsx +51 -0
  159. package/src/components/search/SearchHistory/index.ts +1 -0
  160. package/src/components/search/SearchInput/SearchInput.stories.mdx +205 -0
  161. package/src/components/search/SearchInput/SearchInput.tsx +128 -0
  162. package/src/components/search/SearchInput/index.ts +2 -0
  163. package/src/components/search/SearchInput/search-input.module.scss +153 -0
  164. package/src/components/search/SearchProductCard/SearchProductCard.stories.mdx +96 -0
  165. package/src/components/search/SearchProductCard/SearchProductCard.tsx +103 -0
  166. package/src/components/search/SearchProductCard/index.ts +1 -0
  167. package/src/components/search/SearchProductCard/search-product-card.module.scss +54 -0
  168. package/src/components/search/SearchSharedTokenTable.mdx +98 -0
  169. package/src/components/search/SearchSuggestions/SearchSuggestions.stories.mdx +58 -0
  170. package/src/components/search/SearchSuggestions/SearchSuggestions.tsx +136 -0
  171. package/src/components/search/SearchSuggestions/index.ts +2 -0
  172. package/src/components/search/SearchTop/SearchTop.stories.mdx +58 -0
  173. package/src/components/search/SearchTop/SearchTop.tsx +78 -0
  174. package/src/components/search/SearchTop/index.ts +2 -0
  175. package/src/components/search/Sort/Sort.tsx +42 -0
  176. package/src/components/search/Sort/index.ts +1 -0
  177. package/src/components/search/search.module.scss +101 -0
  178. package/src/components/search/searchMock.ts +48 -0
  179. package/src/components/sections/BannerNewsletter/BannerNewsletter.tsx +28 -0
  180. package/src/components/sections/BannerNewsletter/banner-newsletter.module.scss +23 -0
  181. package/src/components/sections/BannerText/BannerText.stories.mdx +270 -0
  182. package/src/components/sections/BannerText/BannerText.tsx +87 -0
  183. package/src/components/sections/BannerText/banner-text.module.scss +127 -0
  184. package/src/components/sections/BannerText/index.ts +2 -0
  185. package/src/components/sections/Breadcrumb/Breadcrumb.tsx +24 -0
  186. package/src/components/sections/Breadcrumb/index.ts +1 -0
  187. package/src/components/sections/Hero/Hero.stories.mdx +277 -0
  188. package/src/components/sections/Hero/Hero.tsx +109 -0
  189. package/src/components/sections/Hero/hero.module.scss +180 -0
  190. package/src/components/sections/Hero/index.ts +2 -0
  191. package/src/components/sections/Incentives/Incentives.stories.mdx +159 -0
  192. package/src/components/sections/Incentives/Incentives.tsx +69 -0
  193. package/src/components/sections/Incentives/IncentivesFooter.tsx +8 -0
  194. package/src/components/sections/Incentives/IncentivesHeader.tsx +23 -0
  195. package/src/components/sections/Incentives/incentives.module.scss +122 -0
  196. package/src/components/sections/Incentives/incentivesMock.ts +55 -0
  197. package/src/components/sections/Incentives/index.ts +2 -0
  198. package/src/components/sections/Newsletter/Newsletter.stories.mdx +139 -0
  199. package/src/components/sections/Newsletter/Newsletter.tsx +151 -0
  200. package/src/components/sections/Newsletter/index.ts +2 -0
  201. package/src/components/sections/Newsletter/newsletter.module.scss +135 -0
  202. package/src/components/sections/ProducDetailsContent/ProductDetailsContent.stories.mdx +66 -0
  203. package/src/components/sections/ProducDetailsContent/ProductDetailsContent.tsx +278 -0
  204. package/src/components/sections/ProducDetailsContent/index.ts +1 -0
  205. package/src/components/sections/ProducDetailsContent/product-details-content.module.scss +50 -0
  206. package/src/components/sections/ProductDetails/ProductDetails.tsx +316 -0
  207. package/src/components/sections/ProductDetails/index.ts +1 -0
  208. package/src/components/sections/ProductDetails/product-details.module.scss +194 -0
  209. package/src/components/sections/ProductGallery/EmptyGallery.tsx +38 -0
  210. package/src/components/sections/ProductGallery/ProductGallery.tsx +186 -0
  211. package/src/components/sections/ProductGallery/ProductGalleryPage.tsx +70 -0
  212. package/src/components/sections/ProductGallery/index.ts +1 -0
  213. package/src/components/sections/ProductGallery/product-gallery.module.scss +184 -0
  214. package/src/components/sections/ProductGallery/useDelayedFacets.ts +18 -0
  215. package/src/components/sections/ProductGallery/useDelayedPagination.ts +16 -0
  216. package/src/components/sections/ProductGallery/useGalleryQuery.ts +58 -0
  217. package/src/components/sections/ProductGallery/usePageProducts.ts +48 -0
  218. package/src/components/sections/ProductShelf/ProductShelf.tsx +68 -0
  219. package/src/components/sections/ProductShelf/index.ts +1 -0
  220. package/src/components/sections/ProductShelf/product-shelf.module.scss +41 -0
  221. package/src/components/sections/ProductTiles/ProductTiles.tsx +83 -0
  222. package/src/components/sections/ProductTiles/index.ts +1 -0
  223. package/src/components/sections/ScrollToTopButton/ScrollToTopButton.tsx +45 -0
  224. package/src/components/sections/ScrollToTopButton/index.ts +1 -0
  225. package/src/components/sections/ScrollToTopButton/scroll-to-top-button.module.scss +12 -0
  226. package/src/components/sections/Section/Section.tsx +15 -0
  227. package/src/components/sections/Section/index.ts +1 -0
  228. package/src/components/sections/Section/section.scss +16 -0
  229. package/src/components/skeletons/FilterSkeleton/FilterSkeleton.stories.mdx +97 -0
  230. package/src/components/skeletons/FilterSkeleton/FilterSkeleton.tsx +34 -0
  231. package/src/components/skeletons/FilterSkeleton/filter-skeleton.module.scss +51 -0
  232. package/src/components/skeletons/FilterSkeleton/index.ts +1 -0
  233. package/src/components/skeletons/ProductCardSkeleton/ProductCardSkeleton.stories.mdx +176 -0
  234. package/src/components/skeletons/ProductCardSkeleton/ProductCardSkeleton.tsx +52 -0
  235. package/src/components/skeletons/ProductCardSkeleton/index.ts +1 -0
  236. package/src/components/skeletons/ProductCardSkeleton/product-card-skeleton.module.scss +97 -0
  237. package/src/components/skeletons/ProductGridSkeleton/ProductGridSkeleton.tsx +29 -0
  238. package/src/components/skeletons/ProductGridSkeleton/index.ts +1 -0
  239. package/src/components/skeletons/ProductShelfSkeleton/ProductShelfSkeleton.tsx +32 -0
  240. package/src/components/skeletons/ProductShelfSkeleton/index.ts +1 -0
  241. package/src/components/skeletons/ProductTilesSkeleton/ProductTileSkeleton/ProductTileSkeleton.tsx +57 -0
  242. package/src/components/skeletons/ProductTilesSkeleton/ProductTileSkeleton/index.ts +1 -0
  243. package/src/components/skeletons/ProductTilesSkeleton/ProductTileSkeleton/product-tile-skeleton.module.scss +218 -0
  244. package/src/components/skeletons/ProductTilesSkeleton/ProductTilesSkeleton.tsx +33 -0
  245. package/src/components/skeletons/ProductTilesSkeleton/index.ts +2 -0
  246. package/src/components/skeletons/Shimmer/Shimmer.tsx +11 -0
  247. package/src/components/skeletons/Shimmer/index.ts +1 -0
  248. package/src/components/skeletons/Shimmer/shimmer.module.scss +43 -0
  249. package/src/components/skeletons/Skeleton/Skeleton.tsx +49 -0
  250. package/src/components/skeletons/Skeleton/index.ts +1 -0
  251. package/src/components/skeletons/Skeleton/skeleton.module.scss +77 -0
  252. package/src/components/skeletons/Skeletons.stories.mdx +178 -0
  253. package/src/components/ui/Accordion/Accordion.stories.mdx +219 -0
  254. package/src/components/ui/Accordion/Accordion.tsx +39 -0
  255. package/src/components/ui/Accordion/AccordionItem.stories.mdx +116 -0
  256. package/src/components/ui/Accordion/AccordionItem.tsx +82 -0
  257. package/src/components/ui/Accordion/accordion.module.scss +65 -0
  258. package/src/components/ui/Accordion/index.ts +2 -0
  259. package/src/components/ui/Alert/Alert.stories.mdx +164 -0
  260. package/src/components/ui/Alert/Alert.tsx +78 -0
  261. package/src/components/ui/Alert/alert.module.scss +93 -0
  262. package/src/components/ui/Alert/index.ts +1 -0
  263. package/src/components/ui/Badge/Badge.stories.mdx +465 -0
  264. package/src/components/ui/Badge/Badge.tsx +76 -0
  265. package/src/components/ui/Badge/DiscountBadge.stories.mdx +191 -0
  266. package/src/components/ui/Badge/DiscountBadge.tsx +57 -0
  267. package/src/components/ui/Badge/badge.module.scss +252 -0
  268. package/src/components/ui/Badge/index.ts +4 -0
  269. package/src/components/ui/Breadcrumb/Breadcrumb.stories.mdx +197 -0
  270. package/src/components/ui/Breadcrumb/Breadcrumb.tsx +122 -0
  271. package/src/components/ui/Breadcrumb/breadcrumb.module.scss +144 -0
  272. package/src/components/ui/Breadcrumb/index.ts +2 -0
  273. package/src/components/ui/Button/Button.stories.mdx +685 -0
  274. package/src/components/ui/Button/Button.tsx +85 -0
  275. package/src/components/ui/Button/ButtonBuy/ButtonBuy.tsx +24 -0
  276. package/src/components/ui/Button/ButtonBuy/index.ts +1 -0
  277. package/src/components/ui/Button/ButtonLink/ButtonLink.tsx +49 -0
  278. package/src/components/ui/Button/ButtonLink/ButtonSignIn/ButtonSignIn.tsx +22 -0
  279. package/src/components/ui/Button/ButtonLink/ButtonSignIn/ButtonSignInFallback/ButtonSignInFallback.tsx +18 -0
  280. package/src/components/ui/Button/ButtonLink/ButtonSignIn/ButtonSignInFallback/index.ts +1 -0
  281. package/src/components/ui/Button/ButtonLink/ButtonSignIn/index.ts +1 -0
  282. package/src/components/ui/Button/ButtonLink/index.ts +1 -0
  283. package/src/components/ui/Button/button.module.scss +392 -0
  284. package/src/components/ui/Button/index.ts +6 -0
  285. package/src/components/ui/Checkbox/Checkbox.stories.mdx +268 -0
  286. package/src/components/ui/Checkbox/Checkbox.tsx +20 -0
  287. package/src/components/ui/Checkbox/checkbox.module.scss +157 -0
  288. package/src/components/ui/Checkbox/index.ts +2 -0
  289. package/src/components/ui/Dropdown/Dropdown.stories.mdx +232 -0
  290. package/src/components/ui/Dropdown/Dropdown.tsx +12 -0
  291. package/src/components/ui/Dropdown/DropdownButton.tsx +20 -0
  292. package/src/components/ui/Dropdown/DropdownItem.stories.mdx +139 -0
  293. package/src/components/ui/Dropdown/DropdownItem.tsx +26 -0
  294. package/src/components/ui/Dropdown/DropdownMenu.stories.mdx +115 -0
  295. package/src/components/ui/Dropdown/DropdownMenu.tsx +34 -0
  296. package/src/components/ui/Dropdown/dropdown.module.scss +101 -0
  297. package/src/components/ui/Dropdown/index.ts +4 -0
  298. package/src/components/ui/EmptyState/EmptyState.stories.mdx +146 -0
  299. package/src/components/ui/EmptyState/EmptyState.tsx +26 -0
  300. package/src/components/ui/EmptyState/empty-state.module.scss +63 -0
  301. package/src/components/ui/EmptyState/index.ts +1 -0
  302. package/src/components/ui/Gift/Gift.stories.mdx +99 -0
  303. package/src/components/ui/Gift/Gift.tsx +76 -0
  304. package/src/components/ui/Gift/gift.module.scss +94 -0
  305. package/src/components/ui/Gift/index.ts +2 -0
  306. package/src/components/ui/Icon/Icon.tsx +35 -0
  307. package/src/components/ui/Icon/index.ts +1 -0
  308. package/src/components/ui/Image/Image.tsx +59 -0
  309. package/src/components/ui/Image/index.ts +1 -0
  310. package/src/components/ui/Image/thumborUrlBuilder.ts +101 -0
  311. package/src/components/ui/Image/useImage.ts +46 -0
  312. package/src/components/ui/ImageGallery/ImageGallery.stories.mdx +173 -0
  313. package/src/components/ui/ImageGallery/ImageGallery.tsx +51 -0
  314. package/src/components/ui/ImageGallery/ImageGallerySelector.tsx +116 -0
  315. package/src/components/ui/ImageGallery/ImageZoom.tsx +12 -0
  316. package/src/components/ui/ImageGallery/image-gallery-selector.module.scss +131 -0
  317. package/src/components/ui/ImageGallery/image-gallery.module.scss +56 -0
  318. package/src/components/ui/ImageGallery/index.ts +4 -0
  319. package/src/components/ui/InputText/InputText.stories.mdx +311 -0
  320. package/src/components/ui/InputText/InputText.tsx +128 -0
  321. package/src/components/ui/InputText/index.ts +2 -0
  322. package/src/components/ui/InputText/input-text.module.scss +168 -0
  323. package/src/components/ui/Link/Link.stories.mdx +272 -0
  324. package/src/components/ui/Link/Link.tsx +68 -0
  325. package/src/components/ui/Link/index.ts +2 -0
  326. package/src/components/ui/Link/link.module.scss +98 -0
  327. package/src/components/ui/Logo/Logo.tsx +14 -0
  328. package/src/components/ui/Logo/index.ts +1 -0
  329. package/src/components/ui/Logo/logo.module.scss +12 -0
  330. package/src/components/ui/Modal/Modal.stories.mdx +142 -0
  331. package/src/components/ui/Modal/Modal.tsx +43 -0
  332. package/src/components/ui/Modal/index.ts +1 -0
  333. package/src/components/ui/Modal/modal.module.scss +46 -0
  334. package/src/components/ui/Price/Price.stories.mdx +194 -0
  335. package/src/components/ui/Price/Price.tsx +32 -0
  336. package/src/components/ui/Price/index.ts +1 -0
  337. package/src/components/ui/Price/price.module.scss +27 -0
  338. package/src/components/ui/PriceRange/PriceRange.stories.mdx +192 -0
  339. package/src/components/ui/PriceRange/PriceRange.tsx +138 -0
  340. package/src/components/ui/PriceRange/index.ts +1 -0
  341. package/src/components/ui/PriceRange/price-range.module.scss +176 -0
  342. package/src/components/ui/ProductTitle/ProductTitle.stories.mdx +107 -0
  343. package/src/components/ui/ProductTitle/ProductTitle.tsx +11 -0
  344. package/src/components/ui/ProductTitle/index.ts +1 -0
  345. package/src/components/ui/ProductTitle/product-title.module.scss +48 -0
  346. package/src/components/ui/QuantitySelector/QuantitySelector.stories.mdx +246 -0
  347. package/src/components/ui/QuantitySelector/QuantitySelector.tsx +103 -0
  348. package/src/components/ui/QuantitySelector/index.ts +1 -0
  349. package/src/components/ui/QuantitySelector/quantity-selector.module.scss +160 -0
  350. package/src/components/ui/Radio/Radio.stories.mdx +237 -0
  351. package/src/components/ui/Radio/Radio.tsx +36 -0
  352. package/src/components/ui/Radio/index.ts +2 -0
  353. package/src/components/ui/Radio/radio.module.scss +122 -0
  354. package/src/components/ui/SROnly/SROnly.tsx +20 -0
  355. package/src/components/ui/SROnly/index.ts +1 -0
  356. package/src/components/ui/SROnly/sr-only.module.scss +15 -0
  357. package/src/components/ui/Select/Select.stories.mdx +168 -0
  358. package/src/components/ui/Select/Select.tsx +70 -0
  359. package/src/components/ui/Select/index.ts +2 -0
  360. package/src/components/ui/Select/select.module.scss +85 -0
  361. package/src/components/ui/ShippingSimulation/ShippingSimulation.stories.mdx +140 -0
  362. package/src/components/ui/ShippingSimulation/ShippingSimulation.tsx +109 -0
  363. package/src/components/ui/ShippingSimulation/index.ts +1 -0
  364. package/src/components/ui/ShippingSimulation/shipping-simulation.module.scss +96 -0
  365. package/src/components/ui/ShippingSimulation/useShippingSimulation.ts +225 -0
  366. package/src/components/ui/SkuSelector/Selectors.stories.mdx +82 -0
  367. package/src/components/ui/SkuSelector/Selectors.tsx +87 -0
  368. package/src/components/ui/SkuSelector/SkuSelector.stories.mdx +345 -0
  369. package/src/components/ui/SkuSelector/SkuSelector.tsx +46 -0
  370. package/src/components/ui/SkuSelector/index.ts +3 -0
  371. package/src/components/ui/SkuSelector/sku-selector.module.scss +172 -0
  372. package/src/components/ui/SkuSelector/skuVariants.ts +59 -0
  373. package/src/components/ui/SlideOver/SlideOver.stories.mdx +285 -0
  374. package/src/components/ui/SlideOver/SlideOver.tsx +58 -0
  375. package/src/components/ui/SlideOver/index.ts +1 -0
  376. package/src/components/ui/SlideOver/overlay.scss +14 -0
  377. package/src/components/ui/SlideOver/slide-over.module.scss +63 -0
  378. package/src/components/ui/Tiles/Tiles.stories.mdx +153 -0
  379. package/src/components/ui/Tiles/Tiles.tsx +14 -0
  380. package/src/components/ui/Tiles/index.ts +5 -0
  381. package/src/components/ui/Tiles/tiles.module.scss +60 -0
  382. package/src/components/ui/Toast/Toast.stories.mdx +158 -0
  383. package/src/components/ui/Toast/Toast.tsx +56 -0
  384. package/src/components/ui/Toast/index.ts +1 -0
  385. package/src/components/ui/Toast/toast.module.scss +112 -0
  386. package/src/components/ui/Toggle/Toggle.stories.mdx +604 -0
  387. package/src/components/ui/Toggle/Toggle.tsx +75 -0
  388. package/src/components/ui/Toggle/index.ts +2 -0
  389. package/src/components/ui/Toggle/toggle.module.scss +200 -0
  390. package/src/constants.ts +2 -0
  391. package/src/fonts/WebFonts.tsx +15 -0
  392. package/src/images/icon.png +0 -0
  393. package/src/pages/404.tsx +27 -0
  394. package/src/pages/500.tsx +31 -0
  395. package/src/pages/[...slug].tsx +186 -0
  396. package/src/pages/[slug]/p.tsx +209 -0
  397. package/src/pages/_app.tsx +38 -0
  398. package/src/pages/_document.tsx +22 -0
  399. package/src/pages/account.tsx +20 -0
  400. package/src/pages/api/graphql.ts +72 -0
  401. package/src/pages/api/preview.ts +61 -0
  402. package/src/pages/checkout.tsx +20 -0
  403. package/src/pages/index.tsx +72 -0
  404. package/src/pages/login.tsx +20 -0
  405. package/src/pages/s.tsx +83 -0
  406. package/src/sdk/analytics/hooks/useViewItemListEvent.ts +51 -0
  407. package/src/sdk/analytics/index.tsx +30 -0
  408. package/src/sdk/analytics/platform/vtex/index.ts +11 -0
  409. package/src/sdk/analytics/platform/vtex/search.ts +102 -0
  410. package/src/sdk/analytics/types.ts +22 -0
  411. package/src/sdk/cart/index.ts +187 -0
  412. package/src/sdk/cart/useBuyButton.ts +62 -0
  413. package/src/sdk/cart/useCartToggleButton.ts +23 -0
  414. package/src/sdk/cart/useCheckoutButton.ts +22 -0
  415. package/src/sdk/cart/useRemoveButton.ts +56 -0
  416. package/src/sdk/error/ErrorBoundary/ErrorBoundary.tsx +67 -0
  417. package/src/sdk/error/ErrorBoundary/index.ts +1 -0
  418. package/src/sdk/graphql/prefetchQuery.ts +20 -0
  419. package/src/sdk/graphql/request.ts +25 -0
  420. package/src/sdk/graphql/useLazyQuery.ts +29 -0
  421. package/src/sdk/graphql/useQuery.ts +40 -0
  422. package/src/sdk/newsletter/useNewsletter.ts +31 -0
  423. package/src/sdk/product/useDiscountPercent.ts +10 -0
  424. package/src/sdk/product/useFormattedPrice.ts +27 -0
  425. package/src/sdk/product/useProduct.ts +46 -0
  426. package/src/sdk/product/useProductLink.ts +69 -0
  427. package/src/sdk/product/useProductsQuery.ts +107 -0
  428. package/src/sdk/search/Sentinel.tsx +78 -0
  429. package/src/sdk/search/state.ts +11 -0
  430. package/src/sdk/search/useSearchHistory.ts +40 -0
  431. package/src/sdk/search/useSearchInput.tsx +43 -0
  432. package/src/sdk/search/useSuggestions.ts +49 -0
  433. package/src/sdk/search/useTopSearch.ts +49 -0
  434. package/src/sdk/session/index.ts +71 -0
  435. package/src/sdk/tests/mark.tsx +10 -0
  436. package/src/sdk/ui/Provider.tsx +151 -0
  437. package/src/sdk/ui/useFadeEffect.ts +21 -0
  438. package/src/sdk/ui/useOnClickOutside.ts +39 -0
  439. package/src/sdk/ui/useScrollDirection.ts +31 -0
  440. package/src/sdk/useStore.ts +24 -0
  441. package/src/server/cms.ts +66 -0
  442. package/src/server/index.ts +105 -0
  443. package/src/stories/brandless.stories.mdx +85 -0
  444. package/src/stories/changelog-template.stories.mdx +10 -0
  445. package/src/stories/colors.stories.mdx +306 -0
  446. package/src/stories/customizing.stories.mdx +113 -0
  447. package/src/stories/getting-started.stories.mdx +65 -0
  448. package/src/stories/grid-layout.stories.mdx +53 -0
  449. package/src/stories/icons.stories.mdx +237 -0
  450. package/src/stories/interactive-controls.stories.mdx +50 -0
  451. package/src/stories/midnight.stories.mdx +56 -0
  452. package/src/stories/refinements.stories.mdx +96 -0
  453. package/src/stories/soft-blue.stories.mdx +56 -0
  454. package/src/stories/spacing.stories.mdx +38 -0
  455. package/src/stories/typography.stories.mdx +224 -0
  456. package/src/styles/global/components.scss +5 -0
  457. package/src/styles/global/layout.scss +80 -0
  458. package/src/styles/global/resets.scss +48 -0
  459. package/src/styles/global/storybook-components.scss +5 -0
  460. package/src/styles/global/tokens.scss +276 -0
  461. package/src/styles/global/typography.scss +66 -0
  462. package/src/styles/global/utilities.scss +69 -0
  463. package/src/styles/scaffold.scss +7 -0
  464. package/src/styles/themes/custom-theme.scss +36 -0
  465. package/src/styles/themes/midnight.scss +123 -0
  466. package/src/styles/themes/soft-blue.scss +79 -0
  467. package/src/styles/vendors/include-media.scss +4 -0
  468. package/src/styles/vendors/include-media_overwrite.scss +9 -0
  469. package/src/styles/vendors/modern-normalize.css +270 -0
  470. package/src/typings/global.d.ts +6 -0
  471. package/src/typings/module.css.d.ts +7 -0
  472. package/store.config.js +69 -0
  473. package/stylelint.config.js +82 -0
  474. package/tsconfig.json +25 -0
  475. package/vtex.env +14 -0
@@ -0,0 +1,39 @@
1
+ import type { RefObject } from 'react'
2
+ import { useEffect } from 'react'
3
+
4
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
5
+ type Handler = (event: any) => void
6
+
7
+ export default function useOnClickOutside<T extends HTMLElement = HTMLElement>(
8
+ ref: RefObject<T>,
9
+ handler: Handler
10
+ ) {
11
+ useEffect(
12
+ () => {
13
+ const listener: Handler = (event) => {
14
+ if (!ref.current || ref.current.contains(event.target)) {
15
+ return
16
+ }
17
+
18
+ handler(event)
19
+ }
20
+
21
+ document.addEventListener('mousedown', listener)
22
+ document.addEventListener('touchstart', listener)
23
+
24
+ return () => {
25
+ document.removeEventListener('mousedown', listener)
26
+ document.removeEventListener('touchstart', listener)
27
+ }
28
+ },
29
+ /**
30
+ * Add ref and handler to effect dependencies.
31
+ * It's worth noting that because passed in handler is a new
32
+ * function on every render that will cause this effect
33
+ * callback/cleanup to run every render. It's not a big deal
34
+ * but to optimize you can wrap handler in useCallback before
35
+ * passing it into this hook.
36
+ */
37
+ [ref, handler]
38
+ )
39
+ }
@@ -0,0 +1,31 @@
1
+ import { useEffect, useState, useTransition } from 'react'
2
+
3
+ export default function useScrollDirection() {
4
+ const [scrollDirection, setScrollDirection] = useState<string>('')
5
+ const [isPending, startTransition] = useTransition()
6
+
7
+ useEffect(() => {
8
+ let lastScrollY = window.scrollY
9
+
10
+ const updateScrollDirection = () => {
11
+ const { scrollY } = window
12
+ const direction = scrollY > lastScrollY ? 'down' : 'up'
13
+
14
+ if (
15
+ !isPending &&
16
+ direction !== scrollDirection &&
17
+ (scrollY - lastScrollY > 10 || scrollY - lastScrollY < -10)
18
+ ) {
19
+ startTransition(() => setScrollDirection(direction))
20
+ }
21
+
22
+ lastScrollY = scrollY > 0 ? scrollY : 0
23
+ }
24
+
25
+ window.addEventListener('scroll', updateScrollDirection)
26
+
27
+ return () => window.removeEventListener('scroll', updateScrollDirection)
28
+ }, [isPending, scrollDirection])
29
+
30
+ return scrollDirection
31
+ }
@@ -0,0 +1,24 @@
1
+ import { createBaseStore } from '@faststore/sdk'
2
+ import { useSyncExternalStore } from 'react'
3
+ import type { Store } from '@faststore/sdk'
4
+
5
+ export const useStore = <T>(store: Store<T>) =>
6
+ useSyncExternalStore(store.subscribe, store.read, store.readInitial)
7
+
8
+ type CB<T> = (val: T) => Promise<T | null>
9
+
10
+ export const createValidationStore = <T>(cb: CB<T>) => {
11
+ const store = createBaseStore(false)
12
+
13
+ const onValidate = async (val: T) => {
14
+ try {
15
+ store.set(true)
16
+
17
+ return await cb(val)
18
+ } finally {
19
+ store.set(false)
20
+ }
21
+ }
22
+
23
+ return [store, onValidate] as [Store<boolean>, CB<T>]
24
+ }
@@ -0,0 +1,66 @@
1
+ import ClientCMS from '@vtex/client-cms'
2
+ import type { Locator, ContentData } from '@vtex/client-cms'
3
+
4
+ import config from '../../store.config'
5
+
6
+ export const clientCMS = new ClientCMS({
7
+ workspace: config.api.workspace,
8
+ tenant: config.api.storeId,
9
+ })
10
+
11
+ type Options =
12
+ | Locator
13
+ | {
14
+ contentType: string
15
+ filters?: Record<string, string>
16
+ }
17
+
18
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
19
+ const isLocator = (x: any): x is Locator =>
20
+ typeof x.contentType === 'string' &&
21
+ (typeof x.releaseId === 'string' || typeof x.documentId === 'string')
22
+
23
+ export const getPage = async <T extends ContentData>(options: Options) => {
24
+ const result = await (isLocator(options)
25
+ ? clientCMS.getCMSPage(options).then((page) => ({ data: [page] }))
26
+ : clientCMS.getCMSPagesByContentType(options.contentType, options.filters))
27
+
28
+ const pages = result.data
29
+
30
+ if (!pages[0]) {
31
+ throw new Error(
32
+ `Missing content on the CMS for content type ${
33
+ options.contentType
34
+ }. Add content before proceeding. Context: ${JSON.stringify(
35
+ options,
36
+ null,
37
+ 2
38
+ )}`
39
+ )
40
+ }
41
+
42
+ if (pages.length !== 1) {
43
+ throw new Error(
44
+ `Multiple content defined on the CMS for content type ${
45
+ options.contentType
46
+ }. Remove duplicated content before proceeding. Context: ${JSON.stringify(
47
+ options,
48
+ null,
49
+ 2
50
+ )}`
51
+ )
52
+ }
53
+
54
+ return pages[0] as T
55
+ }
56
+
57
+ export type PageContentType = ContentData & {
58
+ settings: {
59
+ seo: {
60
+ slug: string
61
+ title: string
62
+ description: string
63
+ canonical?: string
64
+ }
65
+ }
66
+ }
@@ -0,0 +1,105 @@
1
+ /* eslint-disable react-hooks/rules-of-hooks */
2
+ import type { FormatErrorHandler } from '@envelop/core'
3
+ import {
4
+ envelop,
5
+ useAsyncSchema,
6
+ useExtendContext,
7
+ useMaskedErrors,
8
+ } from '@envelop/core'
9
+ import { useGraphQlJit } from '@envelop/graphql-jit'
10
+ import { useParserCache } from '@envelop/parser-cache'
11
+ import { useValidationCache } from '@envelop/validation-cache'
12
+ import { getContextFactory, getSchema, isFastStoreError } from '@faststore/api'
13
+ import { GraphQLError } from 'graphql'
14
+ import type { Maybe, Options as APIOptions, CacheControl } from '@faststore/api'
15
+
16
+ import persisted from '../../@generated/graphql/persisted.json'
17
+ import storeConfig from '../../store.config'
18
+
19
+ interface ExecuteOptions<V = Record<string, unknown>> {
20
+ operationName: string
21
+ variables: V
22
+ query?: string | null
23
+ }
24
+
25
+ const persistedQueries = new Map(Object.entries(persisted))
26
+
27
+ const apiOptions: APIOptions = {
28
+ platform: storeConfig.platform as APIOptions['platform'],
29
+ account: storeConfig.api.storeId,
30
+ environment: storeConfig.api.environment as APIOptions['environment'],
31
+ hideUnavailableItems: storeConfig.api.hideUnavailableItems,
32
+ channel: storeConfig.session.channel,
33
+ locale: storeConfig.session.locale,
34
+ flags: {
35
+ enableOrderFormSync: true,
36
+ },
37
+ }
38
+
39
+ export const apiSchema = getSchema(apiOptions)
40
+
41
+ const apiContextFactory = getContextFactory(apiOptions)
42
+
43
+ const formatError: FormatErrorHandler = (err) => {
44
+ if (err instanceof GraphQLError && isFastStoreError(err.originalError)) {
45
+ return err
46
+ }
47
+
48
+ console.error(err)
49
+
50
+ return new GraphQLError('Sorry, something went wrong.')
51
+ }
52
+
53
+ const getEnvelop = async () =>
54
+ envelop({
55
+ plugins: [
56
+ useAsyncSchema(apiSchema),
57
+ useExtendContext(apiContextFactory),
58
+ useMaskedErrors({ formatError }),
59
+ useGraphQlJit(),
60
+ useValidationCache(),
61
+ useParserCache(),
62
+ ],
63
+ })
64
+
65
+ const envelopPromise = getEnvelop()
66
+
67
+ export const execute = async <V extends Maybe<{ [key: string]: unknown }>, D>(
68
+ options: ExecuteOptions<V>,
69
+ envelopContext = { headers: {} }
70
+ ): Promise<{
71
+ data: D
72
+ errors: unknown[]
73
+ extensions: { cacheControl?: CacheControl }
74
+ }> => {
75
+ const { operationName, variables, query: maybeQuery } = options
76
+ const query = maybeQuery ?? persistedQueries.get(operationName)
77
+
78
+ if (query == null) {
79
+ throw new Error(`No query found for operationName: ${operationName}`)
80
+ }
81
+
82
+ const enveloped = await envelopPromise
83
+ const {
84
+ parse,
85
+ contextFactory,
86
+ execute: run,
87
+ schema,
88
+ } = enveloped(envelopContext)
89
+
90
+ const contextValue = await contextFactory(envelopContext)
91
+
92
+ const { data, errors } = (await run({
93
+ schema,
94
+ document: parse(query),
95
+ variableValues: variables,
96
+ contextValue,
97
+ operationName,
98
+ })) as { data: D; errors: unknown[] }
99
+
100
+ return {
101
+ data,
102
+ errors,
103
+ extensions: { cacheControl: contextValue.cacheControl },
104
+ }
105
+ }
@@ -0,0 +1,85 @@
1
+ import { Description, Meta } from '@storybook/addon-docs'
2
+
3
+ import ButtonLink from '../components/ui/Button/ButtonLink'
4
+ import Icon from '../components/ui/Icon'
5
+
6
+ <Meta
7
+ title="Theming/Brandless"
8
+ parameters={{ options: { showToolbar: false } }}
9
+ />
10
+
11
+ <header className="sbdocs-hero">
12
+
13
+ # Brandless
14
+
15
+ This themeable structure is made of two complementary layers: a useful and assorted library of templates for the components and sections, alongside a comprehensive set of design tokens to further customize them.
16
+
17
+ <ButtonLink
18
+ variant="tertiary"
19
+ href="../?path=/docs/theming-customizing--page"
20
+ data-fs-button-size="small"
21
+ >
22
+ Customizing your store
23
+ <Icon name="ArrowRight" width="18" height="18" weight="bold" />
24
+ </ButtonLink>
25
+
26
+ </header>
27
+
28
+ **Structural Styles**, the first layer, has foundational styles that lay things out in common design patterns for different use cases. It also covers a component's fundamental interactions, like showing/hiding a dropdown or moving a toggle’s knob to make it active.
29
+
30
+ The second, **Theme**, is where the branding lives and what truly differentiates one UI from another. Graphic elements—like typography (and type scale), colors, imagery, borders, spacing, & more—are controlled by design tokens that a developer can easily tweak to create a unique look and feel.
31
+
32
+ <img
33
+ src="https://vtexhelp.vtexassets.com/assets/docs/src/theming-intro___1d021c8548ba2338faba6dd2995bf7ce.png"
34
+ align="right"
35
+ style={{ width: '70%', display: 'block', margin: '0 auto' }}
36
+ />
37
+
38
+ Additional styles can be added to overwrite what was set in the Structure and/or Theme, reaching a state of total flexibility and freedom. Lastly, the developer can throw away all existing FastStore CSS altogether and build it from scratch.
39
+
40
+ ---
41
+
42
+ ## Theming architecture
43
+
44
+ Starting from the bottom up, we have the components: fully-featured UI blocks that belong to a larger whole system. The components have their own CSS that defines their overall appearance and how things are arranged; these scoped stylesheets are the Templates. The Templates' visual properties are tied to local variables—design tokens—that draw the final picture of the component; these local, scoped variables, on the other hand, are tied to global tokens, which form the Theme.
45
+
46
+ <img
47
+ src="https://vtexhelp.vtexassets.com/assets/docs/src/theming-architecture___f965569346d8d7d6a3de1f020f06ac99.png"
48
+ align="center"
49
+ style={{ width: '80%', display: 'block', margin: '0 auto' }}
50
+ />
51
+
52
+ ---
53
+
54
+ ## Design tokens naming scheme
55
+
56
+ ### Scoped Tokens (components)
57
+
58
+ All components' design tokens must follow a strict scheme to achieve predictability and cohesiveness. The tokens parts must tell:
59
+
60
+ - **Namespacing**: Where this token is coming from (is it a global or a component's local part);
61
+ - **Component**: Their semantic meaning;
62
+ - **Type**: What property type it affects;
63
+ - **Category** Which category of this type is going to be affected;
64
+ - **State**: Their interactive state.
65
+
66
+ ![Naming scheme](https://vtexhelp.vtexassets.com/assets/docs/src/theming-naming-1___32778b6c40f12a94ac4a54a90879aeef.png)
67
+
68
+ If needed, we can use other additional incrementation to the token's name, such as:
69
+
70
+ - **Hierarchy**: Define its tier;
71
+ - **Nested Element**: To sytle elements contained inside the component;
72
+ - **Variant**: What differentiate it from the default;
73
+ - **Situation**: When they should be used;
74
+
75
+ ![Naming scheme 2](https://vtexhelp.vtexassets.com/assets/docs/src/theming-naming-2___4668c9e8da8bec361681d41b6a2e7266.png)
76
+
77
+ ### Theme (or global design tokens)
78
+
79
+ Global design tokens are parameters that affect all UI look 'n' feel. They are the main configuration file of a Theme. It's constituted of three main groups:
80
+
81
+ 1. Branding Core
82
+ 2. UI Essentials
83
+ 3. Refinements
84
+
85
+ ![Theme architecture](https://vtexhelp.vtexassets.com/assets/docs/src/theming-global-tokens___e4e339f287113ecae974234ecbad1bff.png)
@@ -0,0 +1,10 @@
1
+ import { Description } from '@storybook/addon-docs'
2
+ import { Meta } from '@storybook/addon-docs'
3
+ import Changelog from '../../CHANGELOG.md'
4
+
5
+ <Meta
6
+ title="Releases/Changelog"
7
+ parameters={{ options: { showToolbar: false } }}
8
+ />
9
+
10
+ <Description>{Changelog}</Description>
@@ -0,0 +1,306 @@
1
+ import { Meta, ColorPalette, ColorItem } from '@storybook/addon-docs'
2
+ import '/.storybook/storybook.css'
3
+
4
+ import {
5
+ TokenTable,
6
+ TokenRow,
7
+ TokenDivider,
8
+ } from 'src/../.storybook/components'
9
+
10
+ <Meta
11
+ title="Global Tokens/Colors"
12
+ parameters={{ options: { showToolbar: false } }}
13
+ />
14
+
15
+ <header>
16
+
17
+ # Colors
18
+
19
+ The store palette with all the tones needed.
20
+
21
+ </header>
22
+
23
+ <ColorPalette>
24
+ <ColorItem
25
+ title="Main"
26
+ colors={{
27
+ '--fs-color-main-0': '#f1f2f3',
28
+ '--fs-color-main-1': '#e3e6e8',
29
+ '--fs-color-main-2': '#00419e',
30
+ '--fs-color-main-3': '#002c71',
31
+ '--fs-color-main-4': '#002155',
32
+ }}
33
+ />
34
+ <ColorItem
35
+ title="Accent"
36
+ colors={{
37
+ '--fs-color-accent-0': '#f1f2f3',
38
+ '--fs-color-accent-1': '#e3e6e8',
39
+ '--fs-color-accent-2': '#74808b',
40
+ '--fs-color-accent-3': '#5d666f',
41
+ '--fs-color-accent-4': '#171a1c',
42
+ }}
43
+ />
44
+ <ColorItem
45
+ title="Neutral"
46
+ colors={{
47
+ '--fs-color-neutral-0': '#ffffff',
48
+ '--fs-color-neutral-1': '#f1f2f3',
49
+ '--fs-color-neutral-2': '#e3e6e8',
50
+ '--fs-color-neutral-3': '#c7ccd1',
51
+ '--fs-color-neutral-4': '#9099a2',
52
+ '--fs-color-neutral-5': '#74808b',
53
+ '--fs-color-neutral-6': '#5d666f',
54
+ '--fs-color-neutral-7': '#171a1c',
55
+ }}
56
+ />
57
+ </ColorPalette>
58
+
59
+ ---
60
+
61
+ ## Semantical tokens
62
+
63
+ ### Hierarchy
64
+
65
+ <TokenTable title="Global Token" description="Value">
66
+ <TokenRow
67
+ token="--fs-color-primary-text"
68
+ value="var(--fs-color-text-inverse)"
69
+ isColor
70
+ />
71
+ <TokenRow
72
+ token="--fs-color-primary-bkg"
73
+ value="var(--fs-color-main-2)"
74
+ isColor
75
+ />
76
+ <TokenRow
77
+ token="--fs-color-primary-bkg-hover"
78
+ value="var(--fs-color-main-3)"
79
+ isColor
80
+ />
81
+ <TokenRow
82
+ token="--fs-color-primary-bkg-active"
83
+ value="var(--fs-color-main-4)"
84
+ isColor
85
+ />
86
+ <TokenRow
87
+ token="--fs-color-primary-bkg-light"
88
+ value="var(--fs-color-main-0)"
89
+ isColor
90
+ />
91
+ <TokenRow
92
+ token="--fs-color-primary-bkg-light-active"
93
+ value="var(--fs-color-main-1)"
94
+ isColor
95
+ />
96
+ <TokenDivider />
97
+ <TokenRow
98
+ token="--fs-color-secondary-text"
99
+ value="var(--fs-color-primary-bkg)"
100
+ isColor
101
+ />
102
+ <TokenRow token="--fs-color-secondary-bkg" value="transparent" isColor />
103
+ <TokenRow
104
+ token="--fs-color-secondary-bkg-hover"
105
+ value="var(--fs-color-primary-bkg)"
106
+ isColor
107
+ />
108
+ <TokenRow
109
+ token="--fs-color-secondary-bkg-active"
110
+ value="var(--fs-color-main-3)"
111
+ isColor
112
+ />
113
+ <TokenRow
114
+ token="--fs-color-secondary-bkg-light"
115
+ value="var(--fs-color-main-0)"
116
+ isColor
117
+ />
118
+ <TokenRow
119
+ token="--fs-color-secondary-bkg-light-active"
120
+ value="var(--fs-color-secondary-bkg-light)"
121
+ isColor
122
+ />
123
+ <TokenDivider />
124
+ <TokenRow
125
+ token="--fs-color-tertiary-text"
126
+ value="var(--fs-color-link)"
127
+ isColor
128
+ />
129
+ <TokenRow token="--fs-color-tertiary-bkg" value="transparent" isColor />
130
+ <TokenRow
131
+ token="--fs-color-tertiary-bkg-hover"
132
+ value="var(--fs-color-main-0)"
133
+ isColor
134
+ />
135
+ <TokenRow
136
+ token="--fs-color-tertiary-bkg-active"
137
+ value="var(--fs-color-main-1)"
138
+ isColor
139
+ />
140
+ <TokenRow
141
+ token="--fs-color-tertiary-bkg-light"
142
+ value="var(--fs-color-neutral-0)"
143
+ isColor
144
+ />
145
+ <TokenRow
146
+ token="--fs-color-tertiary-bkg-light-active"
147
+ value="var(--fs-color-tertiary-bkg-light)"
148
+ isColor
149
+ />
150
+ </TokenTable>
151
+
152
+ ### Components & States
153
+
154
+ <TokenTable title="Global Token" description="Value">
155
+ <TokenRow
156
+ token="--fs-color-body-bkg"
157
+ value="var(--fs-color-neutral-0)"
158
+ isColor
159
+ />
160
+ <TokenDivider />
161
+ <TokenRow
162
+ token="--fs-color-action-text"
163
+ value="var(--fs-color-text-inverse)"
164
+ isColor
165
+ />
166
+ <TokenRow
167
+ token="--fs-color-action-bkg"
168
+ value="var(--fs-color-accent-4)"
169
+ isColor
170
+ />
171
+ <TokenRow
172
+ token="--fs-color-action-bkg-hover"
173
+ value="var(--fs-color-accent-3)"
174
+ isColor
175
+ />
176
+ <TokenRow
177
+ token="--fs-color-action-bkg-active"
178
+ value="var(--fs-color-accent-2)"
179
+ isColor
180
+ />
181
+ <TokenRow
182
+ token="--fs-color-action-bkg-light"
183
+ value="var(--fs-color-neutral-0)"
184
+ isColor
185
+ />
186
+ <TokenRow
187
+ token="--fs-color-action-bkg-light-active"
188
+ value="var(--fs-color-tertiary-bkg-light)"
189
+ isColor
190
+ />
191
+ <TokenDivider />
192
+ <TokenRow token="--fs-color-link" value="var(--fs-color-main-2)" isColor />
193
+ <TokenRow
194
+ token="--fs-color-link-hover"
195
+ value="var(--fs-color-main-2)"
196
+ isColor
197
+ />
198
+ <TokenRow
199
+ token="--fs-color-link-active"
200
+ value="var(--fs-color-main-4)"
201
+ isColor
202
+ />
203
+ <TokenRow token="--fs-color-link-visited" value="#6058ba" isColor />
204
+ <TokenRow
205
+ token="--fs-color-link-inverse"
206
+ value="var(--fs-color-neutral-0)"
207
+ isColor
208
+ />
209
+ <TokenDivider />
210
+ <TokenRow token="--fs-color-text" value="var(--fs-color-neutral-7)" isColor />
211
+ <TokenRow
212
+ token="--fs-color-text-light"
213
+ value="var(--fs-color-neutral-6)"
214
+ isColor
215
+ />
216
+ <TokenRow
217
+ token="--fs-color-text-inverse"
218
+ value="var(--fs-color-neutral-0)"
219
+ isColor
220
+ />
221
+ <TokenRow
222
+ token="--fs-color-text-display"
223
+ value="var(--fs-color-neutral-7)"
224
+ isColor
225
+ />
226
+ <TokenDivider />
227
+ <TokenRow token="--fs-color-focus-ring" value="#8db6fa" isColor />
228
+ <TokenRow token="--fs-color-focus-ring-outline" value="#8db6fa80" isColor />
229
+ <TokenRow token="--fs-color-focus-ring-danger" value="#e1adad" isColor />
230
+ </TokenTable>
231
+
232
+ ### Situations
233
+
234
+ <TokenTable title="Global Token" description="Value">
235
+ <TokenRow token="--fs-color-success-text" value="#1e493b" isColor />
236
+ <TokenRow token="--fs-color-success-bkg" value="#b3ebd5" isColor />
237
+ <TokenRow
238
+ token="--fs-color-success-border"
239
+ value="var(--fs-color-success-text)"
240
+ isColor
241
+ />
242
+ <TokenDivider />
243
+ <TokenRow
244
+ token="--fs-color-warning-text"
245
+ value="var(--fs-color-text)"
246
+ isColor
247
+ />
248
+ <TokenRow token="--fs-color-warning-bkg" value="#fdec8d" isColor />
249
+ <TokenRow
250
+ token="--fs-color-warning-border"
251
+ value="var(--fs-color-warning-text)"
252
+ isColor
253
+ />
254
+ <TokenDivider />
255
+ <TokenRow token="--fs-color-danger-text" value="#cb4242" isColor />
256
+ <TokenRow
257
+ token="--fs-color-danger-bkg"
258
+ value="var(--fs-color-focus-ring-danger)"
259
+ isColor
260
+ />
261
+ <TokenRow
262
+ token="--fs-color-danger-border"
263
+ value="var(--fs-color-danger-text)"
264
+ isColor
265
+ />
266
+ <TokenDivider />
267
+ <TokenRow token="--fs-color-info-text" value="var(--fs-color-text)" isColor />
268
+ <TokenRow
269
+ token="--fs-color-info-bkg"
270
+ value="var(--fs-color-main-1)"
271
+ isColor
272
+ />
273
+ <TokenDivider />
274
+ <TokenRow
275
+ token="--fs-color-highlighted-text"
276
+ value="var(--fs-color-text-display)"
277
+ isColor
278
+ />
279
+ <TokenRow
280
+ token="--fs-color-highlighted-bkg"
281
+ value="var(--fs-color-accent-0)"
282
+ isColor
283
+ />
284
+ <TokenDivider />
285
+ <TokenRow
286
+ token="--fs-color-neutral-text"
287
+ value="var(--fs-color-text)"
288
+ isColor
289
+ />
290
+ <TokenRow
291
+ token="--fs-color-neutral-bkg"
292
+ value="var(--fs-color-neutral-1)"
293
+ isColor
294
+ />
295
+ <TokenDivider />
296
+ <TokenRow
297
+ token="--fs-color-disabled-text"
298
+ value="var(--fs-color-neutral-6)"
299
+ isColor
300
+ />
301
+ <TokenRow
302
+ token="--fs-color-disabled-bkg"
303
+ value="var(--fs-color-neutral-2)"
304
+ isColor
305
+ />
306
+ </TokenTable>