@gfed-medusa/sf-lib-common 1.0.0

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 (266) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +38 -0
  3. package/dist/apollo-client-BuznVAE4.js +66 -0
  4. package/dist/apollo-client-BuznVAE4.js.map +1 -0
  5. package/dist/cart-CLJvIUQC.js +103 -0
  6. package/dist/cart-CLJvIUQC.js.map +1 -0
  7. package/dist/cart-D99u8SUJ.js +16 -0
  8. package/dist/cart-D99u8SUJ.js.map +1 -0
  9. package/dist/cart-XQIczSA1.js +42 -0
  10. package/dist/cart-XQIczSA1.js.map +1 -0
  11. package/dist/cart-button-NgoZb9LI.js +12 -0
  12. package/dist/cart-button-NgoZb9LI.js.map +1 -0
  13. package/dist/cart-dropdown-_ZpvhX--.js +195 -0
  14. package/dist/cart-dropdown-_ZpvhX--.js.map +1 -0
  15. package/dist/cart-p3ffQQ5R.js +142 -0
  16. package/dist/cart-p3ffQQ5R.js.map +1 -0
  17. package/dist/categories-BCbIwAcV.js +16 -0
  18. package/dist/categories-BCbIwAcV.js.map +1 -0
  19. package/dist/collections-Buw8B8l9.js +20 -0
  20. package/dist/collections-Buw8B8l9.js.map +1 -0
  21. package/dist/collections-Dkcq21tC.js +22 -0
  22. package/dist/collections-Dkcq21tC.js.map +1 -0
  23. package/dist/components/breadcrumbs/index.d.ts +22 -0
  24. package/dist/components/breadcrumbs/index.d.ts.map +1 -0
  25. package/dist/components/breadcrumbs/index.js +54 -0
  26. package/dist/components/breadcrumbs/index.js.map +1 -0
  27. package/dist/components/cart-button/index.d.ts +7 -0
  28. package/dist/components/cart-button/index.d.ts.map +1 -0
  29. package/dist/components/cart-button/index.js +18 -0
  30. package/dist/components/cart-dropdown/index.d.ts +12 -0
  31. package/dist/components/cart-dropdown/index.d.ts.map +1 -0
  32. package/dist/components/cart-dropdown/index.js +19 -0
  33. package/dist/components/cart-mismatch-banner/index.d.ts +11 -0
  34. package/dist/components/cart-mismatch-banner/index.d.ts.map +1 -0
  35. package/dist/components/cart-mismatch-banner/index.js +55 -0
  36. package/dist/components/cart-mismatch-banner/index.js.map +1 -0
  37. package/dist/components/country-select/index.d.ts +14 -0
  38. package/dist/components/country-select/index.d.ts.map +1 -0
  39. package/dist/components/country-select/index.js +31 -0
  40. package/dist/components/country-select/index.js.map +1 -0
  41. package/dist/components/delete-button/index.d.ts +15 -0
  42. package/dist/components/delete-button/index.d.ts.map +1 -0
  43. package/dist/components/delete-button/index.js +12 -0
  44. package/dist/components/error-message/index.d.ts +13 -0
  45. package/dist/components/error-message/index.d.ts.map +1 -0
  46. package/dist/components/error-message/index.js +15 -0
  47. package/dist/components/error-message/index.js.map +1 -0
  48. package/dist/components/footer/index.d.ts +7 -0
  49. package/dist/components/footer/index.d.ts.map +1 -0
  50. package/dist/components/footer/index.js +115 -0
  51. package/dist/components/footer/index.js.map +1 -0
  52. package/dist/components/free-shipping-price-nudge/index.d.ts +17 -0
  53. package/dist/components/free-shipping-price-nudge/index.d.ts.map +1 -0
  54. package/dist/components/free-shipping-price-nudge/index.js +182 -0
  55. package/dist/components/free-shipping-price-nudge/index.js.map +1 -0
  56. package/dist/components/interactive-link/index.d.ts +17 -0
  57. package/dist/components/interactive-link/index.d.ts.map +1 -0
  58. package/dist/components/interactive-link/index.js +25 -0
  59. package/dist/components/interactive-link/index.js.map +1 -0
  60. package/dist/components/layout-country-select/index.d.ts +16 -0
  61. package/dist/components/layout-country-select/index.d.ts.map +1 -0
  62. package/dist/components/layout-country-select/index.js +14 -0
  63. package/dist/components/line-item-options/index.d.ts +17 -0
  64. package/dist/components/line-item-options/index.d.ts.map +1 -0
  65. package/dist/components/line-item-options/index.js +3 -0
  66. package/dist/components/line-item-price/index.d.ts +17 -0
  67. package/dist/components/line-item-price/index.d.ts.map +1 -0
  68. package/dist/components/line-item-price/index.js +3 -0
  69. package/dist/components/localized-client-link/index.d.ts +24 -0
  70. package/dist/components/localized-client-link/index.d.ts.map +1 -0
  71. package/dist/components/localized-client-link/index.js +5 -0
  72. package/dist/components/modal/index.d.ts +39 -0
  73. package/dist/components/modal/index.d.ts.map +1 -0
  74. package/dist/components/modal/index.js +4 -0
  75. package/dist/components/nav/index.d.ts +7 -0
  76. package/dist/components/nav/index.d.ts.map +1 -0
  77. package/dist/components/nav/index.js +85 -0
  78. package/dist/components/nav/index.js.map +1 -0
  79. package/dist/components/portable-text/index.d.ts +13 -0
  80. package/dist/components/portable-text/index.d.ts.map +1 -0
  81. package/dist/components/portable-text/index.js +3 -0
  82. package/dist/components/preview-price/index.d.ts +12 -0
  83. package/dist/components/preview-price/index.d.ts.map +1 -0
  84. package/dist/components/preview-price/index.js +3 -0
  85. package/dist/components/product-card/index.d.ts +65 -0
  86. package/dist/components/product-card/index.d.ts.map +1 -0
  87. package/dist/components/product-card/index.js +146 -0
  88. package/dist/components/product-card/index.js.map +1 -0
  89. package/dist/components/product-preview/index.d.ts +15 -0
  90. package/dist/components/product-preview/index.d.ts.map +1 -0
  91. package/dist/components/product-preview/index.js +38 -0
  92. package/dist/components/product-preview/index.js.map +1 -0
  93. package/dist/components/search-modal/index.d.ts +12 -0
  94. package/dist/components/search-modal/index.d.ts.map +1 -0
  95. package/dist/components/search-modal/index.js +12 -0
  96. package/dist/components/side-menu/index.d.ts +12 -0
  97. package/dist/components/side-menu/index.d.ts.map +1 -0
  98. package/dist/components/side-menu/index.js +16 -0
  99. package/dist/components/submit-button/index.d.ts +20 -0
  100. package/dist/components/submit-button/index.d.ts.map +1 -0
  101. package/dist/components/submit-button/index.js +24 -0
  102. package/dist/components/submit-button/index.js.map +1 -0
  103. package/dist/components/thumbnail/index.d.ts +15 -0
  104. package/dist/components/thumbnail/index.d.ts.map +1 -0
  105. package/dist/components/thumbnail/index.js +3 -0
  106. package/dist/cookies-DANAjt8U.js +38 -0
  107. package/dist/cookies-DANAjt8U.js.map +1 -0
  108. package/dist/customer-GZZNI4eh.js +25 -0
  109. package/dist/customer-GZZNI4eh.js.map +1 -0
  110. package/dist/data-types-C_rGnTUp.js +10 -0
  111. package/dist/data-types-C_rGnTUp.js.map +1 -0
  112. package/dist/delete-button-Bfog7z-I.js +28 -0
  113. package/dist/delete-button-Bfog7z-I.js.map +1 -0
  114. package/dist/footer-BqaZhjlE.js +76 -0
  115. package/dist/footer-BqaZhjlE.js.map +1 -0
  116. package/dist/footer-fWFeFSUp.js +16 -0
  117. package/dist/footer-fWFeFSUp.js.map +1 -0
  118. package/dist/get-percentage-diff-CxGe_n9N.js +8 -0
  119. package/dist/get-percentage-diff-CxGe_n9N.js.map +1 -0
  120. package/dist/get-product-price-DxBbPmOZ.js +47 -0
  121. package/dist/get-product-price-DxBbPmOZ.js.map +1 -0
  122. package/dist/graphql-BWZPPI_N.d.ts +1368 -0
  123. package/dist/graphql-BWZPPI_N.d.ts.map +1 -0
  124. package/dist/layout-country-select-DrwpoVMM.js +90 -0
  125. package/dist/layout-country-select-DrwpoVMM.js.map +1 -0
  126. package/dist/lib/config/medusa.d.ts +7 -0
  127. package/dist/lib/config/medusa.d.ts.map +1 -0
  128. package/dist/lib/config/medusa.js +3 -0
  129. package/dist/lib/context/apollo-context.d.ts +10 -0
  130. package/dist/lib/context/apollo-context.d.ts.map +1 -0
  131. package/dist/lib/context/apollo-context.js +18 -0
  132. package/dist/lib/context/apollo-context.js.map +1 -0
  133. package/dist/lib/context/modal-context.d.ts +20 -0
  134. package/dist/lib/context/modal-context.d.ts.map +1 -0
  135. package/dist/lib/context/modal-context.js +5 -0
  136. package/dist/lib/data/cart.d.ts +24 -0
  137. package/dist/lib/data/cart.d.ts.map +1 -0
  138. package/dist/lib/data/cart.js +13 -0
  139. package/dist/lib/data/categories.d.ts +19 -0
  140. package/dist/lib/data/categories.d.ts.map +1 -0
  141. package/dist/lib/data/categories.js +6 -0
  142. package/dist/lib/data/collections.d.ts +14 -0
  143. package/dist/lib/data/collections.d.ts.map +1 -0
  144. package/dist/lib/data/collections.js +8 -0
  145. package/dist/lib/data/cookies.d.ts +15 -0
  146. package/dist/lib/data/cookies.d.ts.map +1 -0
  147. package/dist/lib/data/cookies.js +3 -0
  148. package/dist/lib/data/customer.d.ts +7 -0
  149. package/dist/lib/data/customer.d.ts.map +1 -0
  150. package/dist/lib/data/customer.js +8 -0
  151. package/dist/lib/data/footer.d.ts +75 -0
  152. package/dist/lib/data/footer.d.ts.map +1 -0
  153. package/dist/lib/data/footer.js +5 -0
  154. package/dist/lib/data/regions.d.ts +8 -0
  155. package/dist/lib/data/regions.d.ts.map +1 -0
  156. package/dist/lib/data/regions.js +5 -0
  157. package/dist/lib/data/search.d.ts +9 -0
  158. package/dist/lib/data/search.d.ts.map +1 -0
  159. package/dist/lib/data/search.js +8 -0
  160. package/dist/lib/gql/apollo-client.d.ts +18 -0
  161. package/dist/lib/gql/apollo-client.d.ts.map +1 -0
  162. package/dist/lib/gql/apollo-client.js +3 -0
  163. package/dist/lib/gql/fragments/cart.d.ts +14 -0
  164. package/dist/lib/gql/fragments/cart.d.ts.map +1 -0
  165. package/dist/lib/gql/fragments/cart.js +4 -0
  166. package/dist/lib/gql/fragments/product.d.ts +13 -0
  167. package/dist/lib/gql/fragments/product.d.ts.map +1 -0
  168. package/dist/lib/gql/fragments/product.js +3 -0
  169. package/dist/lib/gql/mutations/cart.d.ts +9 -0
  170. package/dist/lib/gql/mutations/cart.d.ts.map +1 -0
  171. package/dist/lib/gql/mutations/cart.js +5 -0
  172. package/dist/lib/gql/mutations/customer.d.ts +1 -0
  173. package/dist/lib/gql/mutations/customer.js +1 -0
  174. package/dist/lib/gql/queries/cart.d.ts +7 -0
  175. package/dist/lib/gql/queries/cart.d.ts.map +1 -0
  176. package/dist/lib/gql/queries/cart.js +5 -0
  177. package/dist/lib/gql/queries/collections.d.ts +7 -0
  178. package/dist/lib/gql/queries/collections.d.ts.map +1 -0
  179. package/dist/lib/gql/queries/collections.js +4 -0
  180. package/dist/lib/gql/queries/footer.d.ts +7 -0
  181. package/dist/lib/gql/queries/footer.d.ts.map +1 -0
  182. package/dist/lib/gql/queries/footer.js +3 -0
  183. package/dist/lib/gql/queries/product.d.ts +8 -0
  184. package/dist/lib/gql/queries/product.d.ts.map +1 -0
  185. package/dist/lib/gql/queries/product.js +4 -0
  186. package/dist/lib/hooks/use-apollo.d.ts +7 -0
  187. package/dist/lib/hooks/use-apollo.d.ts.map +1 -0
  188. package/dist/lib/hooks/use-apollo.js +4 -0
  189. package/dist/lib/hooks/use-search.d.ts +22 -0
  190. package/dist/lib/hooks/use-search.d.ts.map +1 -0
  191. package/dist/lib/hooks/use-search.js +9 -0
  192. package/dist/lib/hooks/use-toggle-state.d.ts +2 -0
  193. package/dist/lib/hooks/use-toggle-state.js +43 -0
  194. package/dist/lib/hooks/use-toggle-state.js.map +1 -0
  195. package/dist/lib/utils/data-types.d.ts +7 -0
  196. package/dist/lib/utils/data-types.d.ts.map +1 -0
  197. package/dist/lib/utils/data-types.js +3 -0
  198. package/dist/lib/utils/env.d.ts +5 -0
  199. package/dist/lib/utils/env.d.ts.map +1 -0
  200. package/dist/lib/utils/env.js +8 -0
  201. package/dist/lib/utils/env.js.map +1 -0
  202. package/dist/lib/utils/get-percentage-diff.d.ts +5 -0
  203. package/dist/lib/utils/get-percentage-diff.d.ts.map +1 -0
  204. package/dist/lib/utils/get-percentage-diff.js +3 -0
  205. package/dist/lib/utils/get-product-price.d.ts +42 -0
  206. package/dist/lib/utils/get-product-price.d.ts.map +1 -0
  207. package/dist/lib/utils/get-product-price.js +3 -0
  208. package/dist/lib/utils/medusa-error.d.ts +5 -0
  209. package/dist/lib/utils/medusa-error.d.ts.map +1 -0
  210. package/dist/lib/utils/medusa-error.js +3 -0
  211. package/dist/lib/utils/money.d.ts +18 -0
  212. package/dist/lib/utils/money.d.ts.map +1 -0
  213. package/dist/lib/utils/money.js +3 -0
  214. package/dist/lib/utils/normalize-functions.d.ts +8 -0
  215. package/dist/lib/utils/normalize-functions.d.ts.map +1 -0
  216. package/dist/lib/utils/normalize-functions.js +3 -0
  217. package/dist/line-item-options-B3rbud31.js +16 -0
  218. package/dist/line-item-options-B3rbud31.js.map +1 -0
  219. package/dist/line-item-price-BBlC_T8m.js +47 -0
  220. package/dist/line-item-price-BBlC_T8m.js.map +1 -0
  221. package/dist/localized-client-link-C3mE37Ub.js +22 -0
  222. package/dist/localized-client-link-C3mE37Ub.js.map +1 -0
  223. package/dist/medusa-C1jfAM1B.js +12 -0
  224. package/dist/medusa-C1jfAM1B.js.map +1 -0
  225. package/dist/medusa-error-Cf_eEPhR.js +17 -0
  226. package/dist/medusa-error-Cf_eEPhR.js.map +1 -0
  227. package/dist/modal-C-crvjtF.js +102 -0
  228. package/dist/modal-C-crvjtF.js.map +1 -0
  229. package/dist/modal-context-D-ugwFUM.js +20 -0
  230. package/dist/modal-context-D-ugwFUM.js.map +1 -0
  231. package/dist/money-BrwiFQUW.js +15 -0
  232. package/dist/money-BrwiFQUW.js.map +1 -0
  233. package/dist/normalize-functions-BIuKc_-k.js +15 -0
  234. package/dist/normalize-functions-BIuKc_-k.js.map +1 -0
  235. package/dist/portable-text-DSWXgovn.js +330 -0
  236. package/dist/portable-text-DSWXgovn.js.map +1 -0
  237. package/dist/preview-price-D_GqXrT4.js +20 -0
  238. package/dist/preview-price-D_GqXrT4.js.map +1 -0
  239. package/dist/prices-IWR3xm6o.d.ts +20 -0
  240. package/dist/prices-IWR3xm6o.d.ts.map +1 -0
  241. package/dist/product-Cgtch-vz.js +90 -0
  242. package/dist/product-Cgtch-vz.js.map +1 -0
  243. package/dist/product-DMWvgZkb.js +47 -0
  244. package/dist/product-DMWvgZkb.js.map +1 -0
  245. package/dist/regions-CF6DH579.js +34 -0
  246. package/dist/regions-CF6DH579.js.map +1 -0
  247. package/dist/search-CKhI5RO4.js +21 -0
  248. package/dist/search-CKhI5RO4.js.map +1 -0
  249. package/dist/search-modal-D1tgUDXQ.js +137 -0
  250. package/dist/search-modal-D1tgUDXQ.js.map +1 -0
  251. package/dist/side-menu-ByDXpZJO.js +97 -0
  252. package/dist/side-menu-ByDXpZJO.js.map +1 -0
  253. package/dist/thumbnail-CXIliWAD.js +44 -0
  254. package/dist/thumbnail-CXIliWAD.js.map +1 -0
  255. package/dist/types/graphql.d.ts +2 -0
  256. package/dist/types/graphql.js +14516 -0
  257. package/dist/types/graphql.js.map +1 -0
  258. package/dist/types/prices.d.ts +2 -0
  259. package/dist/types/prices.js +1 -0
  260. package/dist/use-apollo-q4uz05i-.js +11 -0
  261. package/dist/use-apollo-q4uz05i-.js.map +1 -0
  262. package/dist/use-search-BTEnFlC0.js +67 -0
  263. package/dist/use-search-BTEnFlC0.js.map +1 -0
  264. package/dist/use-toggle-state-zIAKMNfR.d.ts +23 -0
  265. package/dist/use-toggle-state-zIAKMNfR.d.ts.map +1 -0
  266. package/package.json +94 -0
@@ -0,0 +1,115 @@
1
+ import "../../apollo-client-BuznVAE4.js";
2
+ import "../../product-Cgtch-vz.js";
3
+ import { t as LocalizedClientLink } from "../../localized-client-link-C3mE37Ub.js";
4
+ import "../../product-DMWvgZkb.js";
5
+ import { t as listCategories } from "../../categories-BCbIwAcV.js";
6
+ import "../../collections-Buw8B8l9.js";
7
+ import { t as listCollections } from "../../collections-Dkcq21tC.js";
8
+ import "../../footer-BqaZhjlE.js";
9
+ import { t as getFooterContent } from "../../footer-fWFeFSUp.js";
10
+ import { t as PortableText } from "../../portable-text-DSWXgovn.js";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ import { Text, clx } from "@medusajs/ui";
13
+
14
+ //#region src/components/footer/index.tsx
15
+ async function Footer() {
16
+ const { collections } = await listCollections();
17
+ const productCategories = await listCategories();
18
+ const footerContent = await getFooterContent();
19
+ return /* @__PURE__ */ jsx("footer", {
20
+ className: "border-ui-border-base w-full border-t",
21
+ children: /* @__PURE__ */ jsxs("div", {
22
+ className: "content-container flex w-full flex-col",
23
+ children: [/* @__PURE__ */ jsxs("div", {
24
+ className: "xsmall:flex-row flex flex-col items-start justify-between gap-y-6 py-40",
25
+ children: [/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(LocalizedClientLink, {
26
+ href: "/",
27
+ className: "txt-compact-xlarge-plus text-ui-fg-subtle hover:text-ui-fg-base uppercase",
28
+ children: footerContent?.storeName || "Medusa Store"
29
+ }) }), /* @__PURE__ */ jsxs("div", {
30
+ className: "text-small-regular grid grid-cols-2 gap-10 sm:grid-cols-3 md:gap-x-16",
31
+ children: [
32
+ productCategories && productCategories?.length > 0 && /* @__PURE__ */ jsxs("div", {
33
+ className: "flex flex-col gap-y-2",
34
+ children: [/* @__PURE__ */ jsx("span", {
35
+ className: "txt-ui-fg-base txt-small-plus",
36
+ children: "Categories"
37
+ }), /* @__PURE__ */ jsx("ul", {
38
+ className: "grid grid-cols-1 gap-2",
39
+ "data-testid": "footer-categories",
40
+ children: productCategories?.slice(0, 6).map((c) => {
41
+ if (c.parentCategory) return;
42
+ const children = c.categoryChildren?.map((child) => ({
43
+ name: child.name,
44
+ handle: child.handle,
45
+ id: child.id
46
+ })) || null;
47
+ return /* @__PURE__ */ jsxs("li", {
48
+ className: "txt-small text-ui-fg-subtle flex flex-col gap-2",
49
+ children: [/* @__PURE__ */ jsx(LocalizedClientLink, {
50
+ className: clx("hover:text-ui-fg-base", children && "txt-small-plus"),
51
+ href: `/categories/${c.handle}`,
52
+ "data-testid": "category-link",
53
+ children: c.name
54
+ }), children && /* @__PURE__ */ jsx("ul", {
55
+ className: "ml-3 grid grid-cols-1 gap-2",
56
+ children: children && children.map((child) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(LocalizedClientLink, {
57
+ className: "hover:text-ui-fg-base",
58
+ href: `/categories/${child.handle}`,
59
+ "data-testid": "category-link",
60
+ children: child.name
61
+ }) }, child.id))
62
+ })]
63
+ }, c.id);
64
+ })
65
+ })]
66
+ }),
67
+ collections && collections.length > 0 && /* @__PURE__ */ jsxs("div", {
68
+ className: "flex flex-col gap-y-2",
69
+ children: [/* @__PURE__ */ jsx("span", {
70
+ className: "txt-ui-fg-base txt-small-plus",
71
+ children: "Collections"
72
+ }), /* @__PURE__ */ jsx("ul", {
73
+ className: clx("txt-small text-ui-fg-subtle grid grid-cols-1 gap-2", { "grid-cols-2": (collections?.length || 0) > 3 }),
74
+ children: collections?.slice(0, 6).map((c) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(LocalizedClientLink, {
75
+ className: "hover:text-ui-fg-base",
76
+ href: `/collections/${c.handle}`,
77
+ children: c.title
78
+ }) }, c.id))
79
+ })]
80
+ }),
81
+ /* @__PURE__ */ jsxs("div", {
82
+ className: "flex flex-col gap-y-2",
83
+ children: [/* @__PURE__ */ jsx("span", {
84
+ className: "txt-ui-fg-base txt-small-plus",
85
+ children: "Medusa"
86
+ }), /* @__PURE__ */ jsx("ul", {
87
+ className: "txt-small text-ui-fg-subtle grid grid-cols-1 gap-y-2",
88
+ children: footerContent?.social && footerContent?.social.map((social, index) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("a", {
89
+ href: social.url,
90
+ target: "_blank",
91
+ rel: "noreferrer",
92
+ className: "hover:text-ui-fg-base capitalize",
93
+ children: social.text
94
+ }) }, index))
95
+ })]
96
+ })
97
+ ]
98
+ })]
99
+ }), /* @__PURE__ */ jsxs("div", {
100
+ className: "text-ui-fg-muted mb-16 flex w-full flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
101
+ children: [/* @__PURE__ */ jsxs(Text, {
102
+ className: "txt-compact-small",
103
+ children: ["©", `${(/* @__PURE__ */ new Date()).getFullYear()} ${footerContent?.copyright}`]
104
+ }), /* @__PURE__ */ jsx("div", {
105
+ className: "flex items-center gap-4",
106
+ children: footerContent?.poweredByCta && /* @__PURE__ */ jsx(PortableText, { value: footerContent.poweredByCta.text })
107
+ })]
108
+ })]
109
+ })
110
+ });
111
+ }
112
+
113
+ //#endregion
114
+ export { Footer as default };
115
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/footer/index.tsx"],"sourcesContent":["import { Text, clx } from '@medusajs/ui';\n\nimport { listCategories } from '@/lib/data/categories';\nimport { listCollections } from '@/lib/data/collections';\nimport { getFooterContent } from '@/lib/data/footer';\nimport { RichTextBlock } from '@/types/graphql';\n\nimport { LocalizedClientLink } from '../localized-client-link';\nimport { PortableText } from '../portable-text';\n\nexport default async function Footer() {\n const { collections } = await listCollections();\n const productCategories = await listCategories();\n const footerContent = await getFooterContent();\n\n return (\n <footer className=\"border-ui-border-base w-full border-t\">\n <div className=\"content-container flex w-full flex-col\">\n <div className=\"xsmall:flex-row flex flex-col items-start justify-between gap-y-6 py-40\">\n <div>\n <LocalizedClientLink\n href=\"/\"\n className=\"txt-compact-xlarge-plus text-ui-fg-subtle hover:text-ui-fg-base uppercase\"\n >\n {footerContent?.storeName || 'Medusa Store'}\n </LocalizedClientLink>\n </div>\n <div className=\"text-small-regular grid grid-cols-2 gap-10 sm:grid-cols-3 md:gap-x-16\">\n {productCategories && productCategories?.length > 0 && (\n <div className=\"flex flex-col gap-y-2\">\n <span className=\"txt-ui-fg-base txt-small-plus\">\n Categories\n </span>\n <ul\n className=\"grid grid-cols-1 gap-2\"\n data-testid=\"footer-categories\"\n >\n {productCategories?.slice(0, 6).map((c) => {\n if (c.parentCategory) {\n return;\n }\n\n const children =\n c.categoryChildren?.map((child) => ({\n name: child.name,\n handle: child.handle,\n id: child.id,\n })) || null;\n\n return (\n <li\n className=\"txt-small text-ui-fg-subtle flex flex-col gap-2\"\n key={c.id}\n >\n <LocalizedClientLink\n className={clx(\n 'hover:text-ui-fg-base',\n children && 'txt-small-plus'\n )}\n href={`/categories/${c.handle}`}\n data-testid=\"category-link\"\n >\n {c.name}\n </LocalizedClientLink>\n {children && (\n <ul className=\"ml-3 grid grid-cols-1 gap-2\">\n {children &&\n children.map((child) => (\n <li key={child.id}>\n <LocalizedClientLink\n className=\"hover:text-ui-fg-base\"\n href={`/categories/${child.handle}`}\n data-testid=\"category-link\"\n >\n {child.name}\n </LocalizedClientLink>\n </li>\n ))}\n </ul>\n )}\n </li>\n );\n })}\n </ul>\n </div>\n )}\n {collections && collections.length > 0 && (\n <div className=\"flex flex-col gap-y-2\">\n <span className=\"txt-ui-fg-base txt-small-plus\">\n Collections\n </span>\n <ul\n className={clx(\n 'txt-small text-ui-fg-subtle grid grid-cols-1 gap-2',\n {\n 'grid-cols-2': (collections?.length || 0) > 3,\n }\n )}\n >\n {collections?.slice(0, 6).map((c) => (\n <li key={c.id}>\n <LocalizedClientLink\n className=\"hover:text-ui-fg-base\"\n href={`/collections/${c.handle}`}\n >\n {c.title}\n </LocalizedClientLink>\n </li>\n ))}\n </ul>\n </div>\n )}\n <div className=\"flex flex-col gap-y-2\">\n <span className=\"txt-ui-fg-base txt-small-plus\">Medusa</span>\n <ul className=\"txt-small text-ui-fg-subtle grid grid-cols-1 gap-y-2\">\n {footerContent?.social &&\n footerContent?.social.map(\n (social: { text: string; url: string }, index: number) => (\n <li key={index}>\n <a\n href={social.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"hover:text-ui-fg-base capitalize\"\n >\n {social.text}\n </a>\n </li>\n )\n )}\n </ul>\n </div>\n </div>\n </div>\n <div className=\"text-ui-fg-muted mb-16 flex w-full flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n <Text className=\"txt-compact-small\">\n ©{`${new Date().getFullYear()} ${footerContent?.copyright}`}\n </Text>\n <div className=\"flex items-center gap-4\">\n {footerContent?.poweredByCta && (\n <PortableText\n value={footerContent.poweredByCta.text as RichTextBlock[]}\n />\n )}\n </div>\n </div>\n </div>\n </footer>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAUA,eAA8B,SAAS;CACrC,MAAM,EAAE,gBAAgB,MAAM,iBAAiB;CAC/C,MAAM,oBAAoB,MAAM,gBAAgB;CAChD,MAAM,gBAAgB,MAAM,kBAAkB;AAE9C,QACE,oBAAC;EAAO,WAAU;YAChB,qBAAC;GAAI,WAAU;cACb,qBAAC;IAAI,WAAU;eACb,oBAAC,mBACC,oBAAC;KACC,MAAK;KACL,WAAU;eAET,eAAe,aAAa;MACT,GAClB,EACN,qBAAC;KAAI,WAAU;;MACZ,qBAAqB,mBAAmB,SAAS,KAChD,qBAAC;OAAI,WAAU;kBACb,oBAAC;QAAK,WAAU;kBAAgC;SAEzC,EACP,oBAAC;QACC,WAAU;QACV,eAAY;kBAEX,mBAAmB,MAAM,GAAG,EAAE,CAAC,KAAK,MAAM;AACzC,aAAI,EAAE,eACJ;SAGF,MAAM,WACJ,EAAE,kBAAkB,KAAK,WAAW;UAClC,MAAM,MAAM;UACZ,QAAQ,MAAM;UACd,IAAI,MAAM;UACX,EAAE,IAAI;AAET,gBACE,qBAAC;UACC,WAAU;qBAGV,oBAAC;WACC,WAAW,IACT,yBACA,YAAY,iBACb;WACD,MAAM,eAAe,EAAE;WACvB,eAAY;qBAEX,EAAE;YACiB,EACrB,YACC,oBAAC;WAAG,WAAU;qBACX,YACC,SAAS,KAAK,UACZ,oBAAC,kBACC,oBAAC;YACC,WAAU;YACV,MAAM,eAAe,MAAM;YAC3B,eAAY;sBAEX,MAAM;aACa,IAPf,MAAM,GAQV,CACL;YACD;YA1BF,EAAE,GA4BJ;UAEP;SACC;QACD;MAEP,eAAe,YAAY,SAAS,KACnC,qBAAC;OAAI,WAAU;kBACb,oBAAC;QAAK,WAAU;kBAAgC;SAEzC,EACP,oBAAC;QACC,WAAW,IACT,sDACA,EACE,gBAAgB,aAAa,UAAU,KAAK,GAC7C,CACF;kBAEA,aAAa,MAAM,GAAG,EAAE,CAAC,KAAK,MAC7B,oBAAC,kBACC,oBAAC;SACC,WAAU;SACV,MAAM,gBAAgB,EAAE;mBAEvB,EAAE;UACiB,IANf,EAAE,GAON,CACL;SACC;QACD;MAER,qBAAC;OAAI,WAAU;kBACb,oBAAC;QAAK,WAAU;kBAAgC;SAAa,EAC7D,oBAAC;QAAG,WAAU;kBACX,eAAe,UACd,eAAe,OAAO,KACnB,QAAuC,UACtC,oBAAC,kBACC,oBAAC;SACC,MAAM,OAAO;SACb,QAAO;SACP,KAAI;SACJ,WAAU;mBAET,OAAO;UACN,IARG,MASJ,CAER;SACA;QACD;;MACF;KACF,EACN,qBAAC;IAAI,WAAU;eACb,qBAAC;KAAK,WAAU;gBAAoB,KAChC,oBAAG,IAAI,MAAM,EAAC,aAAa,CAAC,GAAG,eAAe;MAC3C,EACP,oBAAC;KAAI,WAAU;eACZ,eAAe,gBACd,oBAAC,gBACC,OAAO,cAAc,aAAa,OAClC;MAEA;KACF;IACF;GACC"}
@@ -0,0 +1,17 @@
1
+ import { p as Cart } from "../../graphql-BWZPPI_N.js";
2
+ import * as react_jsx_runtime6 from "react/jsx-runtime";
3
+ import { StoreCartShippingOption } from "@medusajs/types";
4
+
5
+ //#region src/components/free-shipping-price-nudge/index.d.ts
6
+ declare function ShippingPriceNudge({
7
+ variant,
8
+ cart,
9
+ shippingOptions
10
+ }: {
11
+ variant?: 'popup' | 'inline';
12
+ cart: Cart;
13
+ shippingOptions: StoreCartShippingOption[];
14
+ }): react_jsx_runtime6.JSX.Element | undefined;
15
+ //#endregion
16
+ export { ShippingPriceNudge };
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/free-shipping-price-nudge/index.tsx"],"sourcesContent":[],"mappings":";;;;;iBA0ES,kBAAA;;;;;;QAMD;EANC,eAAA,EAOU,uBAPQ,EAAA;CACzB,CAAA,EAOD,kBAAA,CAAA,GAAA,CAAA,OAAA,GAPC,SAAA"}
@@ -0,0 +1,182 @@
1
+ 'use client';
2
+
3
+ import { t as convertToLocale } from "../../money-BrwiFQUW.js";
4
+ import { t as LocalizedClientLink } from "../../localized-client-link-C3mE37Ub.js";
5
+ import { useState } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import { Button, clx } from "@medusajs/ui";
8
+ import { CheckCircleSolid, XMark } from "@medusajs/icons";
9
+
10
+ //#region src/components/free-shipping-price-nudge/index.tsx
11
+ const computeTarget = (cart, price) => {
12
+ const priceRule = (price.price_rules || []).find((pr) => pr.attribute === "item_total");
13
+ const currentAmount = cart.itemTotal;
14
+ const targetAmount = parseFloat(priceRule.value);
15
+ if (priceRule.operator === "gt") return {
16
+ current_amount: currentAmount,
17
+ target_amount: targetAmount,
18
+ target_reached: currentAmount > targetAmount,
19
+ target_remaining: currentAmount > targetAmount ? 0 : targetAmount + 1 - currentAmount,
20
+ remaining_percentage: currentAmount / targetAmount * 100
21
+ };
22
+ else if (priceRule.operator === "gte") return {
23
+ current_amount: currentAmount,
24
+ target_amount: targetAmount,
25
+ target_reached: currentAmount > targetAmount,
26
+ target_remaining: currentAmount > targetAmount ? 0 : targetAmount - currentAmount,
27
+ remaining_percentage: currentAmount / targetAmount * 100
28
+ };
29
+ else if (priceRule.operator === "lt") return {
30
+ current_amount: currentAmount,
31
+ target_amount: targetAmount,
32
+ target_reached: targetAmount > currentAmount,
33
+ target_remaining: targetAmount > currentAmount ? 0 : currentAmount + 1 - targetAmount,
34
+ remaining_percentage: currentAmount / targetAmount * 100
35
+ };
36
+ else if (priceRule.operator === "lte") return {
37
+ current_amount: currentAmount,
38
+ target_amount: targetAmount,
39
+ target_reached: targetAmount > currentAmount,
40
+ target_remaining: targetAmount > currentAmount ? 0 : currentAmount - targetAmount,
41
+ remaining_percentage: currentAmount / targetAmount * 100
42
+ };
43
+ else return {
44
+ current_amount: currentAmount,
45
+ target_amount: targetAmount,
46
+ target_reached: currentAmount === targetAmount,
47
+ target_remaining: targetAmount > currentAmount ? 0 : targetAmount - currentAmount,
48
+ remaining_percentage: currentAmount / targetAmount * 100
49
+ };
50
+ };
51
+ function ShippingPriceNudge({ variant = "inline", cart, shippingOptions }) {
52
+ if (!cart || !shippingOptions?.length) return;
53
+ const freeShippingPrice = shippingOptions.map((shippingOption) => {
54
+ if (!shippingOption.calculated_price) return;
55
+ return shippingOption.prices.filter((price) => price.currency_code === cart.currencyCode && (price.price_rules || []).some((priceRule) => priceRule.attribute === "item_total")).map((price) => {
56
+ return {
57
+ ...price,
58
+ shipping_option_id: shippingOption.id,
59
+ ...computeTarget(cart, price)
60
+ };
61
+ });
62
+ }).flat(1).filter(Boolean).find((price) => price?.amount === 0);
63
+ if (!freeShippingPrice) return;
64
+ if (variant === "popup") return /* @__PURE__ */ jsx(FreeShippingPopup, {
65
+ cart,
66
+ price: freeShippingPrice
67
+ });
68
+ else return /* @__PURE__ */ jsx(FreeShippingInline, {
69
+ cart,
70
+ price: freeShippingPrice
71
+ });
72
+ }
73
+ function FreeShippingInline({ cart, price }) {
74
+ return /* @__PURE__ */ jsx("div", {
75
+ className: "rounded-lg border bg-neutral-100 p-2",
76
+ children: /* @__PURE__ */ jsxs("div", {
77
+ className: "space-y-1.5",
78
+ children: [/* @__PURE__ */ jsxs("div", {
79
+ className: "flex justify-between text-xs text-neutral-600",
80
+ children: [/* @__PURE__ */ jsx("div", { children: price.target_reached ? /* @__PURE__ */ jsxs("div", {
81
+ className: "flex items-center gap-1.5",
82
+ children: [
83
+ /* @__PURE__ */ jsx(CheckCircleSolid, { className: "inline-block text-green-500" }),
84
+ " ",
85
+ "Free Shipping unlocked!"
86
+ ]
87
+ }) : `Unlock Free Shipping` }), /* @__PURE__ */ jsxs("div", {
88
+ className: clx("visible", { "invisible opacity-0": price.target_reached }),
89
+ children: [
90
+ "Only",
91
+ " ",
92
+ /* @__PURE__ */ jsx("span", {
93
+ className: "text-neutral-950",
94
+ children: convertToLocale({
95
+ amount: price.target_remaining,
96
+ currency_code: cart.currencyCode
97
+ })
98
+ }),
99
+ " ",
100
+ "away"
101
+ ]
102
+ })]
103
+ }), /* @__PURE__ */ jsxs("div", {
104
+ className: "flex justify-between gap-1",
105
+ children: [/* @__PURE__ */ jsx("div", {
106
+ className: clx("h-1 max-w-full rounded-full bg-gradient-to-r from-zinc-400 to-zinc-500 duration-500 ease-in-out", { "from-green-400 to-green-500": price.target_reached }),
107
+ style: { width: `${price.remaining_percentage}%` }
108
+ }), /* @__PURE__ */ jsx("div", { className: "h-1 w-fit flex-grow rounded-full bg-neutral-300" })]
109
+ })]
110
+ })
111
+ });
112
+ }
113
+ function FreeShippingPopup({ cart, price }) {
114
+ const [isClosed, setIsClosed] = useState(false);
115
+ return /* @__PURE__ */ jsxs("div", {
116
+ className: clx("fixed right-5 bottom-5 z-10 flex flex-col items-end gap-2 transition-all duration-500 ease-in-out", {
117
+ "invisible opacity-0 delay-1000": price.target_reached,
118
+ "invisible opacity-0": isClosed,
119
+ "visible opacity-100": !price.target_reached && !isClosed
120
+ }),
121
+ children: [/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Button, {
122
+ className: "rounded-full border-none bg-neutral-900 p-2 text-[15px] shadow-none outline-none",
123
+ onClick: () => setIsClosed(true),
124
+ children: /* @__PURE__ */ jsx(XMark, {})
125
+ }) }), /* @__PURE__ */ jsxs("div", {
126
+ className: "w-[400px] rounded-lg bg-black p-6 text-white",
127
+ children: [/* @__PURE__ */ jsx("div", {
128
+ className: "pb-4",
129
+ children: /* @__PURE__ */ jsxs("div", {
130
+ className: "space-y-3",
131
+ children: [/* @__PURE__ */ jsxs("div", {
132
+ className: "flex justify-between text-[15px] text-neutral-400",
133
+ children: [/* @__PURE__ */ jsx("div", { children: price.target_reached ? /* @__PURE__ */ jsxs("div", {
134
+ className: "flex items-center gap-1.5",
135
+ children: [
136
+ /* @__PURE__ */ jsx(CheckCircleSolid, { className: "inline-block text-green-500" }),
137
+ " ",
138
+ "Free Shipping unlocked!"
139
+ ]
140
+ }) : `Unlock Free Shipping` }), /* @__PURE__ */ jsxs("div", {
141
+ className: clx("visible", { "invisible opacity-0": price.target_reached }),
142
+ children: [
143
+ "Only",
144
+ " ",
145
+ /* @__PURE__ */ jsx("span", {
146
+ className: "text-white",
147
+ children: convertToLocale({
148
+ amount: price.target_remaining,
149
+ currency_code: cart.currencyCode
150
+ })
151
+ }),
152
+ " ",
153
+ "away"
154
+ ]
155
+ })]
156
+ }), /* @__PURE__ */ jsxs("div", {
157
+ className: "flex justify-between gap-1",
158
+ children: [/* @__PURE__ */ jsx("div", {
159
+ className: clx("h-1.5 max-w-full rounded-full bg-gradient-to-r from-zinc-400 to-zinc-500 duration-500 ease-in-out", { "from-green-400 to-green-500": price.target_reached }),
160
+ style: { width: `${price.remaining_percentage}%` }
161
+ }), /* @__PURE__ */ jsx("div", { className: "h-1.5 w-fit flex-grow rounded-full bg-zinc-600" })]
162
+ })]
163
+ })
164
+ }), /* @__PURE__ */ jsxs("div", {
165
+ className: "flex gap-3",
166
+ children: [/* @__PURE__ */ jsx(LocalizedClientLink, {
167
+ className: "rounded-2xl border-[1px] border-white bg-transparent px-4 py-2.5 text-[15px] shadow-none outline-none",
168
+ href: "/cart",
169
+ children: "View cart"
170
+ }), /* @__PURE__ */ jsx(LocalizedClientLink, {
171
+ className: "flex-grow rounded-2xl border-[1px] border-white bg-white px-4 py-2.5 text-center text-[15px] text-neutral-950 shadow-none outline-none",
172
+ href: "/store",
173
+ children: "View products"
174
+ })]
175
+ })]
176
+ })]
177
+ });
178
+ }
179
+
180
+ //#endregion
181
+ export { ShippingPriceNudge };
182
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/free-shipping-price-nudge/index.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\n\nimport { CheckCircleSolid, XMark } from '@medusajs/icons';\nimport {\n HttpTypes,\n StoreCartShippingOption,\n StorePrice,\n} from '@medusajs/types';\nimport { Button, clx } from '@medusajs/ui';\n\nimport { convertToLocale } from '@/lib/utils/money';\nimport { Cart } from '@/types/graphql';\nimport { StoreFreeShippingPrice } from '@/types/prices';\n\nimport { LocalizedClientLink } from '../localized-client-link';\n\nconst computeTarget = (cart: Cart, price: HttpTypes.StorePrice) => {\n const priceRule = (price.price_rules || []).find(\n (pr) => pr.attribute === 'item_total'\n )!;\n\n const currentAmount = cart.itemTotal;\n const targetAmount = parseFloat(priceRule.value);\n\n if (priceRule.operator === 'gt') {\n return {\n current_amount: currentAmount,\n target_amount: targetAmount,\n target_reached: currentAmount > targetAmount,\n target_remaining:\n currentAmount > targetAmount ? 0 : targetAmount + 1 - currentAmount,\n remaining_percentage: (currentAmount / targetAmount) * 100,\n };\n } else if (priceRule.operator === 'gte') {\n return {\n current_amount: currentAmount,\n target_amount: targetAmount,\n target_reached: currentAmount > targetAmount,\n target_remaining:\n currentAmount > targetAmount ? 0 : targetAmount - currentAmount,\n remaining_percentage: (currentAmount / targetAmount) * 100,\n };\n } else if (priceRule.operator === 'lt') {\n return {\n current_amount: currentAmount,\n target_amount: targetAmount,\n target_reached: targetAmount > currentAmount,\n target_remaining:\n targetAmount > currentAmount ? 0 : currentAmount + 1 - targetAmount,\n remaining_percentage: (currentAmount / targetAmount) * 100,\n };\n } else if (priceRule.operator === 'lte') {\n return {\n current_amount: currentAmount,\n target_amount: targetAmount,\n target_reached: targetAmount > currentAmount,\n target_remaining:\n targetAmount > currentAmount ? 0 : currentAmount - targetAmount,\n remaining_percentage: (currentAmount / targetAmount) * 100,\n };\n } else {\n return {\n current_amount: currentAmount,\n target_amount: targetAmount,\n target_reached: currentAmount === targetAmount,\n target_remaining:\n targetAmount > currentAmount ? 0 : targetAmount - currentAmount,\n remaining_percentage: (currentAmount / targetAmount) * 100,\n };\n }\n};\n\nfunction ShippingPriceNudge({\n variant = 'inline',\n cart,\n shippingOptions,\n}: {\n variant?: 'popup' | 'inline';\n cart: Cart;\n shippingOptions: StoreCartShippingOption[];\n}) {\n if (!cart || !shippingOptions?.length) {\n return;\n }\n\n // Check if any shipping options have a conditional price based on item_total\n const freeShippingPrice = shippingOptions\n .map((shippingOption) => {\n const calculatedPrice = shippingOption.calculated_price;\n\n if (!calculatedPrice) {\n return;\n }\n\n // Get all prices that are:\n // 1. Currency code is same as the cart's\n // 2. Have a rule that is set on item_total\n const validCurrencyPrices = shippingOption.prices.filter(\n (price) =>\n price.currency_code === cart.currencyCode &&\n (price.price_rules || []).some(\n (priceRule) => priceRule.attribute === 'item_total'\n )\n );\n\n return validCurrencyPrices.map((price) => {\n return {\n ...price,\n shipping_option_id: shippingOption.id,\n ...computeTarget(cart, price),\n };\n });\n })\n .flat(1)\n .filter(Boolean)\n // We focus here entirely on free shipping, but this can be edited to handle multiple layers\n // of reduced shipping prices.\n .find((price) => price?.amount === 0);\n\n if (!freeShippingPrice) {\n return;\n }\n\n if (variant === 'popup') {\n return <FreeShippingPopup cart={cart} price={freeShippingPrice} />;\n } else {\n return <FreeShippingInline cart={cart} price={freeShippingPrice} />;\n }\n}\n\nfunction FreeShippingInline({\n cart,\n price,\n}: {\n cart: Cart;\n price: StorePrice & {\n target_reached: boolean;\n target_remaining: number;\n remaining_percentage: number;\n };\n}) {\n return (\n <div className=\"rounded-lg border bg-neutral-100 p-2\">\n <div className=\"space-y-1.5\">\n <div className=\"flex justify-between text-xs text-neutral-600\">\n <div>\n {price.target_reached ? (\n <div className=\"flex items-center gap-1.5\">\n <CheckCircleSolid className=\"inline-block text-green-500\" />{' '}\n Free Shipping unlocked!\n </div>\n ) : (\n `Unlock Free Shipping`\n )}\n </div>\n\n <div\n className={clx('visible', {\n 'invisible opacity-0': price.target_reached,\n })}\n >\n Only{' '}\n <span className=\"text-neutral-950\">\n {convertToLocale({\n amount: price.target_remaining,\n currency_code: cart.currencyCode,\n })}\n </span>{' '}\n away\n </div>\n </div>\n <div className=\"flex justify-between gap-1\">\n <div\n className={clx(\n 'h-1 max-w-full rounded-full bg-gradient-to-r from-zinc-400 to-zinc-500 duration-500 ease-in-out',\n {\n 'from-green-400 to-green-500': price.target_reached,\n }\n )}\n style={{ width: `${price.remaining_percentage}%` }}\n ></div>\n <div className=\"h-1 w-fit flex-grow rounded-full bg-neutral-300\"></div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction FreeShippingPopup({\n cart,\n price,\n}: {\n cart: Cart;\n price: StoreFreeShippingPrice;\n}) {\n const [isClosed, setIsClosed] = useState(false);\n\n return (\n <div\n className={clx(\n 'fixed right-5 bottom-5 z-10 flex flex-col items-end gap-2 transition-all duration-500 ease-in-out',\n {\n 'invisible opacity-0 delay-1000': price.target_reached,\n 'invisible opacity-0': isClosed,\n 'visible opacity-100': !price.target_reached && !isClosed,\n }\n )}\n >\n <div>\n <Button\n className=\"rounded-full border-none bg-neutral-900 p-2 text-[15px] shadow-none outline-none\"\n onClick={() => setIsClosed(true)}\n >\n <XMark />\n </Button>\n </div>\n\n <div className=\"w-[400px] rounded-lg bg-black p-6 text-white\">\n <div className=\"pb-4\">\n <div className=\"space-y-3\">\n <div className=\"flex justify-between text-[15px] text-neutral-400\">\n <div>\n {price.target_reached ? (\n <div className=\"flex items-center gap-1.5\">\n <CheckCircleSolid className=\"inline-block text-green-500\" />{' '}\n Free Shipping unlocked!\n </div>\n ) : (\n `Unlock Free Shipping`\n )}\n </div>\n\n <div\n className={clx('visible', {\n 'invisible opacity-0': price.target_reached,\n })}\n >\n Only{' '}\n <span className=\"text-white\">\n {convertToLocale({\n amount: price.target_remaining,\n currency_code: cart.currencyCode,\n })}\n </span>{' '}\n away\n </div>\n </div>\n <div className=\"flex justify-between gap-1\">\n <div\n className={clx(\n 'h-1.5 max-w-full rounded-full bg-gradient-to-r from-zinc-400 to-zinc-500 duration-500 ease-in-out',\n {\n 'from-green-400 to-green-500': price.target_reached,\n }\n )}\n style={{ width: `${price.remaining_percentage}%` }}\n ></div>\n <div className=\"h-1.5 w-fit flex-grow rounded-full bg-zinc-600\"></div>\n </div>\n </div>\n </div>\n\n <div className=\"flex gap-3\">\n <LocalizedClientLink\n className=\"rounded-2xl border-[1px] border-white bg-transparent px-4 py-2.5 text-[15px] shadow-none outline-none\"\n href=\"/cart\"\n >\n View cart\n </LocalizedClientLink>\n\n <LocalizedClientLink\n className=\"flex-grow rounded-2xl border-[1px] border-white bg-white px-4 py-2.5 text-center text-[15px] text-neutral-950 shadow-none outline-none\"\n href=\"/store\"\n >\n View products\n </LocalizedClientLink>\n </div>\n </div>\n </div>\n );\n}\n\nexport { ShippingPriceNudge };\n"],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import * as react_jsx_runtime21 from "react/jsx-runtime";
2
+
3
+ //#region src/components/interactive-link/index.d.ts
4
+ type InteractiveLinkProps = {
5
+ href: string;
6
+ children?: React.ReactNode;
7
+ onClick?: () => void;
8
+ };
9
+ declare const InteractiveLink: ({
10
+ href,
11
+ children,
12
+ onClick,
13
+ ...props
14
+ }: InteractiveLinkProps) => react_jsx_runtime21.JSX.Element;
15
+ //#endregion
16
+ export { InteractiveLink };
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/interactive-link/index.tsx"],"sourcesContent":[],"mappings":";;;KAKK,oBAAA;;aAEQ,KAAA,CAAM;EAFd,OAAA,CAAA,EAAA,GAAA,GAAA,IAAA;AAEuB,CAAA;cAItB,eAAmB,EAAA,CAAA;EAAA,IAAA;EAAA,QAAA;EAAA,OAAA;EAAA,GAAA;AAAA,CAAA,EAKtB,oBALsB,EAAA,GAKF,mBAAA,CAAA,GAAA,CAAA,OALE"}
@@ -0,0 +1,25 @@
1
+ import { t as LocalizedClientLink } from "../../localized-client-link-C3mE37Ub.js";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { Text } from "@medusajs/ui";
4
+ import { ArrowUpRightMini } from "@medusajs/icons";
5
+
6
+ //#region src/components/interactive-link/index.tsx
7
+ const InteractiveLink = ({ href, children, onClick, ...props }) => {
8
+ return /* @__PURE__ */ jsxs(LocalizedClientLink, {
9
+ className: "group flex items-center gap-x-1",
10
+ href,
11
+ onClick,
12
+ ...props,
13
+ children: [/* @__PURE__ */ jsx(Text, {
14
+ className: "text-ui-fg-interactive",
15
+ children
16
+ }), /* @__PURE__ */ jsx(ArrowUpRightMini, {
17
+ className: "duration-150 ease-in-out group-hover:rotate-45",
18
+ color: "var(--fg-interactive)"
19
+ })]
20
+ });
21
+ };
22
+
23
+ //#endregion
24
+ export { InteractiveLink };
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/interactive-link/index.tsx"],"sourcesContent":["import { ArrowUpRightMini } from '@medusajs/icons';\nimport { Text } from '@medusajs/ui';\n\nimport { LocalizedClientLink } from '../localized-client-link';\n\ntype InteractiveLinkProps = {\n href: string;\n children?: React.ReactNode;\n onClick?: () => void;\n};\n\nconst InteractiveLink = ({\n href,\n children,\n onClick,\n ...props\n}: InteractiveLinkProps) => {\n return (\n <LocalizedClientLink\n className=\"group flex items-center gap-x-1\"\n href={href}\n onClick={onClick}\n {...props}\n >\n <Text className=\"text-ui-fg-interactive\">{children}</Text>\n <ArrowUpRightMini\n className=\"duration-150 ease-in-out group-hover:rotate-45\"\n color=\"var(--fg-interactive)\"\n />\n </LocalizedClientLink>\n );\n};\n\nexport { InteractiveLink };\n"],"mappings":";;;;;;AAWA,MAAM,mBAAmB,EACvB,MACA,UACA,SACA,GAAG,YACuB;AAC1B,QACE,qBAAC;EACC,WAAU;EACJ;EACG;EACT,GAAI;aAEJ,oBAAC;GAAK,WAAU;GAA0B;IAAgB,EAC1D,oBAAC;GACC,WAAU;GACV,OAAM;IACN;GACkB"}
@@ -0,0 +1,16 @@
1
+ import { tr as Region } from "../../graphql-BWZPPI_N.js";
2
+ import { t as StateType } from "../../use-toggle-state-zIAKMNfR.js";
3
+ import * as react_jsx_runtime8 from "react/jsx-runtime";
4
+
5
+ //#region src/components/layout-country-select/index.d.ts
6
+ type CountrySelectProps = {
7
+ toggleState: StateType;
8
+ regions: Region[];
9
+ };
10
+ declare const LayoutCountrySelect: ({
11
+ toggleState,
12
+ regions
13
+ }: CountrySelectProps) => react_jsx_runtime8.JSX.Element;
14
+ //#endregion
15
+ export { LayoutCountrySelect };
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/layout-country-select/index.tsx"],"sourcesContent":[],"mappings":";;;;;KA0BK,kBAAA;eACU;WACJ;AAV8B,CAAA;AAUxB,cAGX,mBA0GL,EAAA,CAAA;EAAA,WAAA;EAAA;AAAA,CAAA,EA1GsD,kBA0GtD,EAAA,GA1GwE,kBAAA,CAAA,GAAA,CAAA,OA0GxE"}
@@ -0,0 +1,14 @@
1
+ 'use client';
2
+
3
+ import "../../medusa-C1jfAM1B.js";
4
+ import "../../apollo-client-BuznVAE4.js";
5
+ import "../../product-Cgtch-vz.js";
6
+ import "../../cart-p3ffQQ5R.js";
7
+ import "../../cart-XQIczSA1.js";
8
+ import "../../cart-D99u8SUJ.js";
9
+ import "../../cookies-DANAjt8U.js";
10
+ import "../../regions-CF6DH579.js";
11
+ import "../../cart-CLJvIUQC.js";
12
+ import { t as LayoutCountrySelect } from "../../layout-country-select-DrwpoVMM.js";
13
+
14
+ export { LayoutCountrySelect };
@@ -0,0 +1,17 @@
1
+ import { Kt as Maybe, zn as ProductVariant } from "../../graphql-BWZPPI_N.js";
2
+ import * as react_jsx_runtime19 from "react/jsx-runtime";
3
+
4
+ //#region src/components/line-item-options/index.d.ts
5
+ type LineItemOptionsProps = {
6
+ variant?: Maybe<ProductVariant>;
7
+ 'data-testid'?: string;
8
+ 'data-value'?: Maybe<ProductVariant>;
9
+ };
10
+ declare const LineItemOptions: ({
11
+ variant,
12
+ "data-testid": dataTestid,
13
+ "data-value": dataValue
14
+ }: LineItemOptionsProps) => react_jsx_runtime19.JSX.Element;
15
+ //#endregion
16
+ export { LineItemOptions };
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/line-item-options/index.tsx"],"sourcesContent":[],"mappings":";;;;KAIK,oBAAA;YACO,MAAM;;EADb,YAAA,CAAA,EAGY,KAHZ,CAGkB,cAHE,CAAA;CACP;cAKZ,eALM,EAAA,CAAA;EAAA,OAAA;EAAA,aAAA,EAKa,UALb;EAAA,YAAA,EAKa;AALb,CAAA,EAST,oBATS,EAAA,GASW,mBAAA,CAAA,GAAA,CAAA,OATX"}
@@ -0,0 +1,3 @@
1
+ import { t as LineItemOptions } from "../../line-item-options-B3rbud31.js";
2
+
3
+ export { LineItemOptions };
@@ -0,0 +1,17 @@
1
+ import { Nt as LineItem } from "../../graphql-BWZPPI_N.js";
2
+ import * as react_jsx_runtime9 from "react/jsx-runtime";
3
+
4
+ //#region src/components/line-item-price/index.d.ts
5
+ type LineItemPriceProps = {
6
+ item: LineItem;
7
+ style?: 'default' | 'tight';
8
+ currencyCode: string;
9
+ };
10
+ declare const LineItemPrice: ({
11
+ item,
12
+ style,
13
+ currencyCode
14
+ }: LineItemPriceProps) => react_jsx_runtime9.JSX.Element;
15
+ //#endregion
16
+ export { LineItemPrice };
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/line-item-price/index.tsx"],"sourcesContent":[],"mappings":";;;;KAMK,kBAAA;QACG;;EADH,YAAA,EAAA,MAAA;AACW,CAAA;cAKV,aAAiB,EAAA,CAAA;EAAA,IAAA;EAAA,KAAA;EAAA;AAAA,CAAA,EAIpB,kBAJoB,EAAA,GAIF,kBAAA,CAAA,GAAA,CAAA,OAJE"}
@@ -0,0 +1,3 @@
1
+ import { t as LineItemPrice } from "../../line-item-price-BBlC_T8m.js";
2
+
3
+ export { LineItemPrice };
@@ -0,0 +1,24 @@
1
+ import React from "react";
2
+ import * as react_jsx_runtime20 from "react/jsx-runtime";
3
+
4
+ //#region src/components/localized-client-link/index.d.ts
5
+
6
+ /**
7
+ * Use this component to create a Next.js `<Link />` that persists the current country code in the url,
8
+ * without having to explicitly pass it as a prop.
9
+ */
10
+ declare const LocalizedClientLink: ({
11
+ children,
12
+ href,
13
+ ...props
14
+ }: {
15
+ children?: React.ReactNode;
16
+ href: string;
17
+ className?: string;
18
+ onClick?: () => void;
19
+ passHref?: true;
20
+ [x: string]: any;
21
+ }) => react_jsx_runtime20.JSX.Element;
22
+ //#endregion
23
+ export { LocalizedClientLink };
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/localized-client-link/index.tsx"],"sourcesContent":[],"mappings":";;;;;;;;AAE0B;cASpB,mBAAuB,EAAA,CAAA;EAAA,QAAA;EAAA,IAAA;EAAA,GAAA;CAAA,EAAA;EAAA,QAAA,CAAA,EAKhB,KAAA,CAAM,SALU;EAKhB,IAAM,EAAA,MAAA;EAMlB,SAAA,CAAA,EAAA,MAAA;EAQA,OAAA,CAAA,EAAA,GAAA,GAAA,IAAA;;;MARA,mBAAA,CAAA,GAAA,CAAA"}
@@ -0,0 +1,5 @@
1
+ 'use client';
2
+
3
+ import { t as LocalizedClientLink } from "../../localized-client-link-C3mE37Ub.js";
4
+
5
+ export { LocalizedClientLink };
@@ -0,0 +1,39 @@
1
+ import React from "react";
2
+ import * as react_jsx_runtime2 from "react/jsx-runtime";
3
+
4
+ //#region src/components/modal/index.d.ts
5
+ type ModalProps = {
6
+ isOpen: boolean;
7
+ close: () => void;
8
+ size?: 'small' | 'medium' | 'large';
9
+ search?: boolean;
10
+ children: React.ReactNode;
11
+ 'data-testid'?: string;
12
+ 'aria-label'?: string;
13
+ };
14
+ declare const Modal: {
15
+ ({
16
+ isOpen,
17
+ close,
18
+ size,
19
+ search,
20
+ children,
21
+ "data-testid": dataTestId,
22
+ "aria-label": ariaLabel
23
+ }: ModalProps): react_jsx_runtime2.JSX.Element;
24
+ Title: React.FC<{
25
+ children: React.ReactNode;
26
+ }>;
27
+ Description: React.FC<{
28
+ children: React.ReactNode;
29
+ }>;
30
+ Body: React.FC<{
31
+ children: React.ReactNode;
32
+ }>;
33
+ Footer: React.FC<{
34
+ children: React.ReactNode;
35
+ }>;
36
+ };
37
+ //#endregion
38
+ export { Modal };
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/modal/index.tsx"],"sourcesContent":[],"mappings":";;;;KAQK,UAAA;;;EAAA,IAAA,CAAA,EAAA,OAAU,GAAA,QAKH,GAAA,OAAM;EAKZ,MAAA,CAAA,EAqEL,OAAA;YA1EW,KAAA,CAAM;;;;cAKZ;;;;;;;;;KAQH,aAAU,kBAAA,CAAA,GAAA,CAAA;;IAAV,QAAA,EA+D+B,KAAA,CAAM,SA/DrC;EAAU,CAAA,CAAA;EA+DqB,WAAM,UAAA,CAAA;cAeA,KAAA,CAAM;EAAN,CAAA,CAAA;;IAQD,QAAA,EAAN,KAAA,CAAM,SAAA;;EAIJ,MAAM,UAAA,CAAA;cAAN,KAAA,CAAM"}
@@ -0,0 +1,4 @@
1
+ import "../../modal-context-D-ugwFUM.js";
2
+ import { t as Modal } from "../../modal-C-crvjtF.js";
3
+
4
+ export { Modal };
@@ -0,0 +1,7 @@
1
+ import * as react_jsx_runtime7 from "react/jsx-runtime";
2
+
3
+ //#region src/components/nav/index.d.ts
4
+ declare function Nav(): Promise<react_jsx_runtime7.JSX.Element>;
5
+ //#endregion
6
+ export { Nav };
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/nav/index.tsx"],"sourcesContent":[],"mappings":";;;iBAUe,GAAA,CAAA,GAAG,QAAA,kBAAA,CAAA,GAAA,CAAA,OAAA"}