@gfed-medusa/sf-lib-common 1.1.0 → 2.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 (254) hide show
  1. package/dist/components/breadcrumbs/index.d.ts +4 -6
  2. package/dist/components/breadcrumbs/index.d.ts.map +1 -1
  3. package/dist/components/breadcrumbs/index.js.map +1 -1
  4. package/dist/components/cart-button/index.d.ts +2 -2
  5. package/dist/components/cart-button/index.d.ts.map +1 -1
  6. package/dist/components/cart-button/index.js +11 -17
  7. package/dist/components/cart-button/index.js.map +1 -0
  8. package/dist/components/cart-dropdown/index.d.ts +3 -3
  9. package/dist/components/cart-dropdown/index.d.ts.map +1 -1
  10. package/dist/components/cart-dropdown/index.js +193 -16
  11. package/dist/components/cart-dropdown/index.js.map +1 -0
  12. package/dist/components/cart-mismatch-banner/index.d.ts +3 -3
  13. package/dist/components/cart-mismatch-banner/index.d.ts.map +1 -1
  14. package/dist/components/cart-mismatch-banner/index.js +1 -8
  15. package/dist/components/cart-mismatch-banner/index.js.map +1 -1
  16. package/dist/components/country-select/index.d.ts +1 -1
  17. package/dist/components/delete-button/index.d.ts +2 -2
  18. package/dist/components/delete-button/index.js +27 -11
  19. package/dist/components/delete-button/index.js.map +1 -0
  20. package/dist/components/error-message/index.d.ts +2 -2
  21. package/dist/components/error-message/index.d.ts.map +1 -1
  22. package/dist/components/footer/index.d.ts +2 -2
  23. package/dist/components/footer/index.d.ts.map +1 -1
  24. package/dist/components/footer/index.js +5 -10
  25. package/dist/components/footer/index.js.map +1 -1
  26. package/dist/components/free-shipping-price-nudge/index.d.ts +3 -3
  27. package/dist/components/free-shipping-price-nudge/index.d.ts.map +1 -1
  28. package/dist/components/free-shipping-price-nudge/index.js +2 -2
  29. package/dist/components/interactive-link/index.d.ts +2 -2
  30. package/dist/components/interactive-link/index.js +1 -1
  31. package/dist/components/layout-country-select/index.d.ts +4 -4
  32. package/dist/components/layout-country-select/index.js +89 -11
  33. package/dist/components/layout-country-select/index.js.map +1 -0
  34. package/dist/components/line-item-options/index.d.ts +3 -3
  35. package/dist/components/line-item-options/index.js +15 -2
  36. package/dist/components/line-item-options/index.js.map +1 -0
  37. package/dist/components/line-item-price/index.d.ts +3 -3
  38. package/dist/components/line-item-price/index.d.ts.map +1 -1
  39. package/dist/components/line-item-price/index.js +46 -2
  40. package/dist/components/line-item-price/index.js.map +1 -0
  41. package/dist/components/localized-client-link/index.d.ts +5 -12
  42. package/dist/components/localized-client-link/index.d.ts.map +1 -1
  43. package/dist/components/localized-client-link/index.js +19 -2
  44. package/dist/components/localized-client-link/index.js.map +1 -0
  45. package/dist/components/modal/index.d.ts +2 -2
  46. package/dist/components/modal/index.js +101 -3
  47. package/dist/components/modal/index.js.map +1 -0
  48. package/dist/components/nav/index.d.ts +2 -2
  49. package/dist/components/nav/index.js +6 -25
  50. package/dist/components/nav/index.js.map +1 -1
  51. package/dist/components/portable-text/index.d.ts +3 -3
  52. package/dist/components/portable-text/index.js +329 -2
  53. package/dist/components/portable-text/index.js.map +1 -0
  54. package/dist/components/preview-price/index.d.ts +1 -1
  55. package/dist/components/preview-price/index.js +19 -2
  56. package/dist/components/preview-price/index.js.map +1 -0
  57. package/dist/components/product-card/index.d.ts +2 -2
  58. package/dist/components/product-card/index.d.ts.map +1 -1
  59. package/dist/components/product-card/index.js +3 -4
  60. package/dist/components/product-card/index.js.map +1 -1
  61. package/dist/components/product-preview/index.d.ts +3 -3
  62. package/dist/components/product-preview/index.d.ts.map +1 -1
  63. package/dist/components/product-preview/index.js +4 -4
  64. package/dist/components/search-modal/index.d.ts +2 -2
  65. package/dist/components/search-modal/index.d.ts.map +1 -1
  66. package/dist/components/search-modal/index.js +135 -9
  67. package/dist/components/search-modal/index.js.map +1 -0
  68. package/dist/components/side-menu/index.d.ts +3 -3
  69. package/dist/components/side-menu/index.js +96 -13
  70. package/dist/components/side-menu/index.js.map +1 -0
  71. package/dist/components/thumbnail/index.js +43 -2
  72. package/dist/components/thumbnail/index.js.map +1 -0
  73. package/dist/lib/config/medusa.js +11 -2
  74. package/dist/lib/config/medusa.js.map +1 -0
  75. package/dist/lib/context/apollo-context.js +1 -2
  76. package/dist/lib/context/apollo-context.js.map +1 -1
  77. package/dist/lib/context/modal-context.d.ts +2 -2
  78. package/dist/lib/context/modal-context.js +19 -2
  79. package/dist/lib/context/modal-context.js.map +1 -0
  80. package/dist/lib/data/cart.d.ts +1 -1
  81. package/dist/lib/data/cart.d.ts.map +1 -1
  82. package/dist/lib/data/cart.js +102 -10
  83. package/dist/lib/data/cart.js.map +1 -0
  84. package/dist/lib/data/categories.d.ts +1 -1
  85. package/dist/lib/data/categories.js +15 -5
  86. package/dist/lib/data/categories.js.map +1 -0
  87. package/dist/lib/data/collections.d.ts +1 -1
  88. package/dist/lib/data/collections.js +21 -5
  89. package/dist/lib/data/collections.js.map +1 -0
  90. package/dist/lib/data/cookies.d.ts +2 -1
  91. package/dist/lib/data/cookies.d.ts.map +1 -1
  92. package/dist/lib/data/cookies.js +45 -2
  93. package/dist/lib/data/cookies.js.map +1 -0
  94. package/dist/lib/data/customer.d.ts +1 -1
  95. package/dist/lib/data/customer.d.ts.map +1 -1
  96. package/dist/lib/data/customer.js +39 -9
  97. package/dist/lib/data/customer.js.map +1 -0
  98. package/dist/lib/data/footer.js +15 -4
  99. package/dist/lib/data/footer.js.map +1 -0
  100. package/dist/lib/data/orders.d.ts +1 -1
  101. package/dist/lib/data/orders.js +4 -4
  102. package/dist/lib/data/regions.d.ts +1 -1
  103. package/dist/lib/data/regions.js +33 -4
  104. package/dist/lib/data/regions.js.map +1 -0
  105. package/dist/lib/data/search.d.ts +1 -1
  106. package/dist/lib/data/search.js +20 -5
  107. package/dist/lib/data/search.js.map +1 -0
  108. package/dist/lib/gql/apollo-client.js +66 -2
  109. package/dist/lib/gql/apollo-client.js.map +1 -0
  110. package/dist/lib/gql/fragments/cart.d.ts +9 -9
  111. package/dist/lib/gql/fragments/cart.d.ts.map +1 -1
  112. package/dist/lib/gql/fragments/cart.js +141 -3
  113. package/dist/{cart-BNoIGQmw.js.map → lib/gql/fragments/cart.js.map} +1 -1
  114. package/dist/lib/gql/fragments/customer.d.ts +3 -3
  115. package/dist/lib/gql/fragments/customer.js +41 -2
  116. package/dist/{customer-CgN4zI00.js.map → lib/gql/fragments/customer.js.map} +1 -1
  117. package/dist/lib/gql/fragments/product.d.ts +8 -8
  118. package/dist/lib/gql/fragments/product.js +89 -2
  119. package/dist/{product-COu5D1mS.js.map → lib/gql/fragments/product.js.map} +1 -1
  120. package/dist/lib/gql/mutations/cart.d.ts +4 -4
  121. package/dist/lib/gql/mutations/cart.d.ts.map +1 -1
  122. package/dist/lib/gql/mutations/cart.js +41 -4
  123. package/dist/{cart-IHaLnQC4.js.map → lib/gql/mutations/cart.js.map} +1 -1
  124. package/dist/lib/gql/mutations/customer.js +0 -1
  125. package/dist/lib/gql/queries/cart.d.ts +2 -2
  126. package/dist/lib/gql/queries/cart.d.ts.map +1 -1
  127. package/dist/lib/gql/queries/cart.js +15 -4
  128. package/dist/{cart-DH8urwwT.js.map → lib/gql/queries/cart.js.map} +1 -1
  129. package/dist/lib/gql/queries/collections.d.ts +2 -2
  130. package/dist/lib/gql/queries/collections.d.ts.map +1 -1
  131. package/dist/lib/gql/queries/collections.js +19 -3
  132. package/dist/{collections-DMv3UYgC.js.map → lib/gql/queries/collections.js.map} +1 -1
  133. package/dist/lib/gql/queries/customer.d.ts +2 -2
  134. package/dist/lib/gql/queries/customer.d.ts.map +1 -1
  135. package/dist/lib/gql/queries/customer.js +15 -3
  136. package/dist/{customer-DIJz6m7L.js.map → lib/gql/queries/customer.js.map} +1 -1
  137. package/dist/lib/gql/queries/footer.d.ts +2 -2
  138. package/dist/lib/gql/queries/footer.d.ts.map +1 -1
  139. package/dist/lib/gql/queries/footer.js +21 -2
  140. package/dist/lib/gql/queries/footer.js.map +1 -0
  141. package/dist/lib/gql/queries/product.d.ts +3 -3
  142. package/dist/lib/gql/queries/product.d.ts.map +1 -1
  143. package/dist/lib/gql/queries/product.js +46 -3
  144. package/dist/{product-C3HQUIgX.js.map → lib/gql/queries/product.js.map} +1 -1
  145. package/dist/lib/hooks/use-apollo.d.ts +2 -2
  146. package/dist/lib/hooks/use-apollo.js +10 -3
  147. package/dist/lib/hooks/use-apollo.js.map +1 -0
  148. package/dist/lib/hooks/use-search.d.ts +1 -1
  149. package/dist/lib/hooks/use-search.js +66 -6
  150. package/dist/lib/hooks/use-search.js.map +1 -0
  151. package/dist/lib/hooks/use-toggle-state.d.ts +23 -2
  152. package/dist/lib/hooks/use-toggle-state.d.ts.map +1 -0
  153. package/dist/lib/utils/data-types.js +9 -2
  154. package/dist/lib/utils/data-types.js.map +1 -0
  155. package/dist/lib/utils/env.js +1 -1
  156. package/dist/lib/utils/env.js.map +1 -1
  157. package/dist/lib/utils/get-percentage-diff.js +7 -2
  158. package/dist/lib/utils/get-percentage-diff.js.map +1 -0
  159. package/dist/lib/utils/get-product-price.d.ts +1 -1
  160. package/dist/lib/utils/get-product-price.js +46 -2
  161. package/dist/lib/utils/get-product-price.js.map +1 -0
  162. package/dist/lib/utils/medusa-error.js +16 -2
  163. package/dist/lib/utils/medusa-error.js.map +1 -0
  164. package/dist/lib/utils/money.js +14 -2
  165. package/dist/lib/utils/money.js.map +1 -0
  166. package/dist/lib/utils/normalize-functions.d.ts +1 -1
  167. package/dist/lib/utils/normalize-functions.js +69 -2
  168. package/dist/lib/utils/normalize-functions.js.map +1 -0
  169. package/dist/types/graphql.d.ts +1368 -2
  170. package/dist/types/graphql.d.ts.map +1 -0
  171. package/dist/types/prices.d.ts +20 -2
  172. package/dist/types/prices.d.ts.map +1 -0
  173. package/dist/types/prices.js +0 -1
  174. package/package.json +12 -12
  175. package/dist/apollo-client-Bw50r80c.js +0 -66
  176. package/dist/apollo-client-Bw50r80c.js.map +0 -1
  177. package/dist/cart-BNoIGQmw.js +0 -142
  178. package/dist/cart-DH8urwwT.js +0 -16
  179. package/dist/cart-IHaLnQC4.js +0 -42
  180. package/dist/cart-button-Dj_zRxop.js +0 -12
  181. package/dist/cart-button-Dj_zRxop.js.map +0 -1
  182. package/dist/cart-dropdown-D_PUJarp.js +0 -195
  183. package/dist/cart-dropdown-D_PUJarp.js.map +0 -1
  184. package/dist/cart-xkcyWLfU.js +0 -103
  185. package/dist/cart-xkcyWLfU.js.map +0 -1
  186. package/dist/categories-B-RYCIZ3.js +0 -16
  187. package/dist/categories-B-RYCIZ3.js.map +0 -1
  188. package/dist/collections-BgyvhW2p.js +0 -22
  189. package/dist/collections-BgyvhW2p.js.map +0 -1
  190. package/dist/collections-DMv3UYgC.js +0 -20
  191. package/dist/cookies-lksVIe4_.js +0 -38
  192. package/dist/cookies-lksVIe4_.js.map +0 -1
  193. package/dist/customer-CgN4zI00.js +0 -42
  194. package/dist/customer-ClewjBBr.js +0 -38
  195. package/dist/customer-ClewjBBr.js.map +0 -1
  196. package/dist/customer-DIJz6m7L.js +0 -16
  197. package/dist/data-types-CTPJXmJH.js +0 -10
  198. package/dist/data-types-CTPJXmJH.js.map +0 -1
  199. package/dist/delete-button-Bnm5bof2.js +0 -28
  200. package/dist/delete-button-Bnm5bof2.js.map +0 -1
  201. package/dist/footer-BvNV-R9D.js +0 -16
  202. package/dist/footer-BvNV-R9D.js.map +0 -1
  203. package/dist/footer-DCtgtjKS.js +0 -76
  204. package/dist/footer-DCtgtjKS.js.map +0 -1
  205. package/dist/get-percentage-diff-B_UVOFgE.js +0 -8
  206. package/dist/get-percentage-diff-B_UVOFgE.js.map +0 -1
  207. package/dist/get-product-price-DKWc76ev.js +0 -47
  208. package/dist/get-product-price-DKWc76ev.js.map +0 -1
  209. package/dist/graphql-CdTGi4Pp.d.ts +0 -1368
  210. package/dist/graphql-CdTGi4Pp.d.ts.map +0 -1
  211. package/dist/layout-country-select-C7Ra-opl.js +0 -90
  212. package/dist/layout-country-select-C7Ra-opl.js.map +0 -1
  213. package/dist/line-item-options-l_eRZIIq.js +0 -16
  214. package/dist/line-item-options-l_eRZIIq.js.map +0 -1
  215. package/dist/line-item-price-BlTwskFC.js +0 -47
  216. package/dist/line-item-price-BlTwskFC.js.map +0 -1
  217. package/dist/localized-client-link-CthmRcvb.js +0 -22
  218. package/dist/localized-client-link-CthmRcvb.js.map +0 -1
  219. package/dist/medusa-TumrpCF2.js +0 -12
  220. package/dist/medusa-TumrpCF2.js.map +0 -1
  221. package/dist/medusa-error-DDhA6RGC.js +0 -17
  222. package/dist/medusa-error-DDhA6RGC.js.map +0 -1
  223. package/dist/modal-BASYY-YM.js +0 -102
  224. package/dist/modal-BASYY-YM.js.map +0 -1
  225. package/dist/modal-context-02cA-7jy.js +0 -20
  226. package/dist/modal-context-02cA-7jy.js.map +0 -1
  227. package/dist/money-DVQGzXns.js +0 -15
  228. package/dist/money-DVQGzXns.js.map +0 -1
  229. package/dist/normalize-functions-Bqr-JkYn.js +0 -70
  230. package/dist/normalize-functions-Bqr-JkYn.js.map +0 -1
  231. package/dist/portable-text-CuI022GH.js +0 -330
  232. package/dist/portable-text-CuI022GH.js.map +0 -1
  233. package/dist/preview-price-_4sxkXQs.js +0 -20
  234. package/dist/preview-price-_4sxkXQs.js.map +0 -1
  235. package/dist/prices-eO1YBciD.d.ts +0 -20
  236. package/dist/prices-eO1YBciD.d.ts.map +0 -1
  237. package/dist/product-C3HQUIgX.js +0 -47
  238. package/dist/product-COu5D1mS.js +0 -90
  239. package/dist/regions-r1AvxfT8.js +0 -34
  240. package/dist/regions-r1AvxfT8.js.map +0 -1
  241. package/dist/search-D7Gw7jAk.js +0 -21
  242. package/dist/search-D7Gw7jAk.js.map +0 -1
  243. package/dist/search-modal-DaXadYWM.js +0 -137
  244. package/dist/search-modal-DaXadYWM.js.map +0 -1
  245. package/dist/side-menu-B6IjTd5M.js +0 -97
  246. package/dist/side-menu-B6IjTd5M.js.map +0 -1
  247. package/dist/thumbnail-C0TU3rh-.js +0 -44
  248. package/dist/thumbnail-C0TU3rh-.js.map +0 -1
  249. package/dist/use-apollo-BxAFd1Y5.js +0 -11
  250. package/dist/use-apollo-BxAFd1Y5.js.map +0 -1
  251. package/dist/use-search-VX-u8o1D.js +0 -67
  252. package/dist/use-search-VX-u8o1D.js.map +0 -1
  253. package/dist/use-toggle-state-DI4Gwlfj.d.ts +0 -23
  254. package/dist/use-toggle-state-DI4Gwlfj.d.ts.map +0 -1
@@ -1,12 +1,10 @@
1
- import * as react0 from "react";
2
- import * as lucide_react0 from "lucide-react";
3
1
  import * as react_jsx_runtime0 from "react/jsx-runtime";
4
2
 
5
3
  //#region src/components/breadcrumbs/index.d.ts
6
- declare const SEPARATOR_ICONS: {
7
- readonly verticalLine: react0.ForwardRefExoticComponent<Omit<lucide_react0.LucideProps, "ref"> & react0.RefAttributes<SVGSVGElement>>;
8
- readonly slash: react0.ForwardRefExoticComponent<Omit<lucide_react0.LucideProps, "ref"> & react0.RefAttributes<SVGSVGElement>>;
9
- };
4
+ declare const SEPARATOR_ICONS: Record<string, React.ComponentType<{
5
+ size?: number;
6
+ className?: string;
7
+ }>>;
10
8
  interface BreadcrumbsProps {
11
9
  separatorIcon?: keyof typeof SEPARATOR_ICONS;
12
10
  iconSize?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/breadcrumbs/index.tsx"],"sourcesContent":[],"mappings":";;;;;cAiBM;+DAGI,aAAA,CAAA,WAAA;;;UAEA,gBAAA;EALJ,aAAA,CAAA,EAAA,MAGI,OAGqB,eAHrB;EAAA,QAAA,CAAA,EAAA,MAAA;;;iBAiCD,WAAA;;;;GAIN,mBAAgB,kBAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/breadcrumbs/index.tsx"],"sourcesContent":[],"mappings":";;;cAiBM,iBAAiB,eAAe,KAAA,CAAM;;;AAwCzB,CAAA,CAAA,CAAA;AAxCU,UAKnB,gBAAA,CAAgB;EA+BjB,aAAA,CAAW,EAAA,MAAA,OA9BW,eA8BX;EAClB,QAAA,CAAA,EAAA,MAAA;EACA,aAAA,CAAA,EAAA,MAAA;;iBAFO,WAAA,CAIN;EAAA,aAAA;EAAA,QAAA;EAAA;AAAA,CAAA,EAAA,gBAAA,CAAA,EAAgB,kBAAA,CAAA,GAAA,CAAA,OAAhB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["segments: string[]"],"sources":["../../../src/components/breadcrumbs/index.tsx"],"sourcesContent":["'use client';\n\nimport { Fragment } from 'react';\n\nimport { usePathname } from 'next/navigation';\n\nimport { SlashIcon, Tally1 } from 'lucide-react';\n\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '@gfed-medusa/sf-lib-ui/components/breadcrumb';\n\nconst SEPARATOR_ICONS = {\n verticalLine: Tally1,\n slash: SlashIcon,\n} as const;\n\ninterface BreadcrumbsProps {\n separatorIcon?: keyof typeof SEPARATOR_ICONS;\n iconSize?: number;\n iconClassName?: string;\n}\n\nconst formatSegmentLabel = (segment: string): string =>\n segment.charAt(0).toUpperCase() + segment.slice(1).replace(/-/g, ' ');\n\nconst createBreadcrumbItems = (segments: string[]) => [\n { label: 'Home', href: '/' },\n ...segments.map((segment, index) => ({\n href: '/' + segments.slice(0, index + 1).join('/'),\n label: formatSegmentLabel(segment),\n })),\n];\n\n// Helper function to check if a string is a locale code (e.g., 'en', 'en-US')\nconst isLocaleCode = (segment: string): boolean =>\n /^[a-zA-Z]{2}(-[a-zA-Z]{2})?$/.test(segment);\n\nconst getPathSegments = (pathname: string): string[] => {\n const segments: string[] = pathname.split('/').filter(Boolean);\n\n if (segments.length > 0 && isLocaleCode(segments[0] ?? '')) {\n segments.shift();\n }\n\n return segments;\n};\n\nfunction Breadcrumbs({\n iconClassName,\n iconSize,\n separatorIcon,\n}: BreadcrumbsProps) {\n const pathname = usePathname();\n const pathSegments = getPathSegments(pathname);\n const breadcrumbItems = createBreadcrumbItems(pathSegments);\n const SeparatorIcon = separatorIcon ? SEPARATOR_ICONS[separatorIcon] : null;\n\n return (\n <Breadcrumb className=\"mt-3\">\n <BreadcrumbList className=\"lg:gap-6\">\n {breadcrumbItems.map((item, index) => {\n const isLast = index === breadcrumbItems.length - 1;\n\n return (\n <Fragment key={item.href}>\n <BreadcrumbItem className=\"text-sm\">\n {isLast ? (\n <BreadcrumbPage>{item.label}</BreadcrumbPage>\n ) : (\n <BreadcrumbLink href={item.href}>{item.label}</BreadcrumbLink>\n )}\n </BreadcrumbItem>\n {!isLast && (\n <BreadcrumbSeparator>\n {SeparatorIcon && (\n <SeparatorIcon size={iconSize} className={iconClassName} />\n )}\n </BreadcrumbSeparator>\n )}\n </Fragment>\n );\n })}\n </BreadcrumbList>\n </Breadcrumb>\n );\n}\n\nexport { Breadcrumbs };\n"],"mappings":";;;;;;;;;AAiBA,MAAM,kBAAkB;CACtB,cAAc;CACd,OAAO;CACR;AAQD,MAAM,sBAAsB,YAC1B,QAAQ,OAAO,EAAE,CAAC,aAAa,GAAG,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,IAAI;AAEvE,MAAM,yBAAyB,aAAuB,CACpD;CAAE,OAAO;CAAQ,MAAM;CAAK,EAC5B,GAAG,SAAS,KAAK,SAAS,WAAW;CACnC,MAAM,MAAM,SAAS,MAAM,GAAG,QAAQ,EAAE,CAAC,KAAK,IAAI;CAClD,OAAO,mBAAmB,QAAQ;CACnC,EAAE,CACJ;AAGD,MAAM,gBAAgB,YACpB,+BAA+B,KAAK,QAAQ;AAE9C,MAAM,mBAAmB,aAA+B;CACtD,MAAMA,WAAqB,SAAS,MAAM,IAAI,CAAC,OAAO,QAAQ;AAE9D,KAAI,SAAS,SAAS,KAAK,aAAa,SAAS,MAAM,GAAG,CACxD,UAAS,OAAO;AAGlB,QAAO;;AAGT,SAAS,YAAY,EACnB,eACA,UACA,iBACmB;CAGnB,MAAM,kBAAkB,sBADH,gBADJ,aAAa,CACgB,CACa;CAC3D,MAAM,gBAAgB,gBAAgB,gBAAgB,iBAAiB;AAEvE,QACE,oBAAC;EAAW,WAAU;YACpB,oBAAC;GAAe,WAAU;aACvB,gBAAgB,KAAK,MAAM,UAAU;IACpC,MAAM,SAAS,UAAU,gBAAgB,SAAS;AAElD,WACE,qBAAC,uBACC,oBAAC;KAAe,WAAU;eACvB,SACC,oBAAC,4BAAgB,KAAK,QAAuB,GAE7C,oBAAC;MAAe,MAAM,KAAK;gBAAO,KAAK;OAAuB;MAEjD,EAChB,CAAC,UACA,oBAAC,iCACE,iBACC,oBAAC;KAAc,MAAM;KAAU,WAAW;MAAiB,GAEzC,KAbX,KAAK,KAeT;KAEb;IACa;GACN"}
1
+ {"version":3,"file":"index.js","names":["SEPARATOR_ICONS: Record<string, React.ComponentType<{ size?: number; className?: string }>>","segments: string[]"],"sources":["../../../src/components/breadcrumbs/index.tsx"],"sourcesContent":["'use client';\n\nimport { Fragment } from 'react';\n\nimport { usePathname } from 'next/navigation';\n\nimport { SlashIcon, Tally1 } from 'lucide-react';\n\nimport {\n Breadcrumb,\n BreadcrumbItem,\n BreadcrumbLink,\n BreadcrumbList,\n BreadcrumbPage,\n BreadcrumbSeparator,\n} from '@gfed-medusa/sf-lib-ui/components/breadcrumb';\n\nconst SEPARATOR_ICONS: Record<string, React.ComponentType<{ size?: number; className?: string }>> = {\n verticalLine: Tally1,\n slash: SlashIcon,\n};\n\ninterface BreadcrumbsProps {\n separatorIcon?: keyof typeof SEPARATOR_ICONS;\n iconSize?: number;\n iconClassName?: string;\n}\n\nconst formatSegmentLabel = (segment: string): string =>\n segment.charAt(0).toUpperCase() + segment.slice(1).replace(/-/g, ' ');\n\nconst createBreadcrumbItems = (segments: string[]) => [\n { label: 'Home', href: '/' },\n ...segments.map((segment, index) => ({\n href: '/' + segments.slice(0, index + 1).join('/'),\n label: formatSegmentLabel(segment),\n })),\n];\n\n// Helper function to check if a string is a locale code (e.g., 'en', 'en-US')\nconst isLocaleCode = (segment: string): boolean =>\n /^[a-zA-Z]{2}(-[a-zA-Z]{2})?$/.test(segment);\n\nconst getPathSegments = (pathname: string): string[] => {\n const segments: string[] = pathname.split('/').filter(Boolean);\n\n if (segments.length > 0 && isLocaleCode(segments[0] ?? '')) {\n segments.shift();\n }\n\n return segments;\n};\n\nfunction Breadcrumbs({\n iconClassName,\n iconSize,\n separatorIcon,\n}: BreadcrumbsProps) {\n const pathname = usePathname();\n const pathSegments = getPathSegments(pathname);\n const breadcrumbItems = createBreadcrumbItems(pathSegments);\n const SeparatorIcon = separatorIcon ? SEPARATOR_ICONS[separatorIcon] : null;\n\n return (\n <Breadcrumb className=\"mt-3\">\n <BreadcrumbList className=\"lg:gap-6\">\n {breadcrumbItems.map((item, index) => {\n const isLast = index === breadcrumbItems.length - 1;\n\n return (\n <Fragment key={item.href}>\n <BreadcrumbItem className=\"text-sm\">\n {isLast ? (\n <BreadcrumbPage>{item.label}</BreadcrumbPage>\n ) : (\n <BreadcrumbLink href={item.href}>{item.label}</BreadcrumbLink>\n )}\n </BreadcrumbItem>\n {!isLast && (\n <BreadcrumbSeparator>\n {SeparatorIcon && (\n <SeparatorIcon size={iconSize} className={iconClassName} />\n )}\n </BreadcrumbSeparator>\n )}\n </Fragment>\n );\n })}\n </BreadcrumbList>\n </Breadcrumb>\n );\n}\n\nexport { Breadcrumbs };\n"],"mappings":";;;;;;;;;AAiBA,MAAMA,kBAA8F;CAClG,cAAc;CACd,OAAO;CACR;AAQD,MAAM,sBAAsB,YAC1B,QAAQ,OAAO,EAAE,CAAC,aAAa,GAAG,QAAQ,MAAM,EAAE,CAAC,QAAQ,MAAM,IAAI;AAEvE,MAAM,yBAAyB,aAAuB,CACpD;CAAE,OAAO;CAAQ,MAAM;CAAK,EAC5B,GAAG,SAAS,KAAK,SAAS,WAAW;CACnC,MAAM,MAAM,SAAS,MAAM,GAAG,QAAQ,EAAE,CAAC,KAAK,IAAI;CAClD,OAAO,mBAAmB,QAAQ;CACnC,EAAE,CACJ;AAGD,MAAM,gBAAgB,YACpB,+BAA+B,KAAK,QAAQ;AAE9C,MAAM,mBAAmB,aAA+B;CACtD,MAAMC,WAAqB,SAAS,MAAM,IAAI,CAAC,OAAO,QAAQ;AAE9D,KAAI,SAAS,SAAS,KAAK,aAAa,SAAS,MAAM,GAAG,CACxD,UAAS,OAAO;AAGlB,QAAO;;AAGT,SAAS,YAAY,EACnB,eACA,UACA,iBACmB;CAGnB,MAAM,kBAAkB,sBADH,gBADJ,aAAa,CACgB,CACa;CAC3D,MAAM,gBAAgB,gBAAgB,gBAAgB,iBAAiB;AAEvE,QACE,oBAAC;EAAW,WAAU;YACpB,oBAAC;GAAe,WAAU;aACvB,gBAAgB,KAAK,MAAM,UAAU;IACpC,MAAM,SAAS,UAAU,gBAAgB,SAAS;AAElD,WACE,qBAAC,uBACC,oBAAC;KAAe,WAAU;eACvB,SACC,oBAAC,4BAAgB,KAAK,QAAuB,GAE7C,oBAAC;MAAe,MAAM,KAAK;gBAAO,KAAK;OAAuB;MAEjD,EAChB,CAAC,UACA,oBAAC,iCACE,iBACC,oBAAC;KAAc,MAAM;KAAU,WAAW;MAAiB,GAEzC,KAbX,KAAK,KAeT;KAEb;IACa;GACN"}
@@ -1,7 +1,7 @@
1
- import * as react_jsx_runtime22 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime1 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/components/cart-button/index.d.ts
4
- declare function CartButton(): Promise<react_jsx_runtime22.JSX.Element>;
4
+ declare function CartButton(): Promise<react_jsx_runtime1.JSX.Element>;
5
5
  //#endregion
6
6
  export { CartButton };
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/cart-button/index.tsx"],"sourcesContent":[],"mappings":";;;iBAIe,UAAA,CAAA,GAAU,QAAA,mBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/cart-button/index.tsx"],"sourcesContent":[],"mappings":";;;iBAIe,UAAA,CAAA,GAAU,QAAA,kBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1,18 +1,12 @@
1
- import "../../medusa-TumrpCF2.js";
2
- import "../../apollo-client-Bw50r80c.js";
3
- import "../../product-COu5D1mS.js";
4
- import "../../cart-BNoIGQmw.js";
5
- import "../../cart-IHaLnQC4.js";
6
- import "../../cart-DH8urwwT.js";
7
- import "../../cookies-lksVIe4_.js";
8
- import "../../regions-r1AvxfT8.js";
9
- import "../../cart-xkcyWLfU.js";
10
- import "../../delete-button-Bnm5bof2.js";
11
- import "../../line-item-options-l_eRZIIq.js";
12
- import "../../line-item-price-BlTwskFC.js";
13
- import "../../localized-client-link-CthmRcvb.js";
14
- import "../../thumbnail-C0TU3rh-.js";
15
- import "../../cart-dropdown-D_PUJarp.js";
16
- import { t as CartButton } from "../../cart-button-Dj_zRxop.js";
1
+ import { retrieveCart } from "../../lib/data/cart.js";
2
+ import { CartDropdown } from "../cart-dropdown/index.js";
3
+ import { jsx } from "react/jsx-runtime";
17
4
 
18
- export { CartButton };
5
+ //#region src/components/cart-button/index.tsx
6
+ async function CartButton() {
7
+ return /* @__PURE__ */ jsx(CartDropdown, { cart: await retrieveCart().catch(() => null) });
8
+ }
9
+
10
+ //#endregion
11
+ export { CartButton };
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/cart-button/index.tsx"],"sourcesContent":["import { retrieveCart } from '@/lib/data/cart';\n\nimport { CartDropdown } from '../cart-dropdown';\n\nasync function CartButton() {\n const cart = await retrieveCart().catch(() => null);\n\n return <CartDropdown cart={cart} />;\n}\n\nexport { CartButton };\n"],"mappings":";;;;;AAIA,eAAe,aAAa;AAG1B,QAAO,oBAAC,gBAAa,MAFR,MAAM,cAAc,CAAC,YAAY,KAAK,GAEhB"}
@@ -1,12 +1,12 @@
1
- import { p as Cart } from "../../graphql-CdTGi4Pp.js";
2
- import * as react_jsx_runtime17 from "react/jsx-runtime";
1
+ import { Cart } from "../../types/graphql.js";
2
+ import * as react_jsx_runtime2 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/cart-dropdown/index.d.ts
5
5
  declare const CartDropdown: ({
6
6
  cart: cartState
7
7
  }: {
8
8
  cart?: Cart | null;
9
- }) => react_jsx_runtime17.JSX.Element;
9
+ }) => react_jsx_runtime2.JSX.Element;
10
10
  //#endregion
11
11
  export { CartDropdown };
12
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/cart-dropdown/index.tsx"],"sourcesContent":[],"mappings":";;;;cAuBM;QAAgB;;SAA8B;MAAa,mBAAA,CAAA,GAAA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/cart-dropdown/index.tsx"],"sourcesContent":[],"mappings":";;;;cAuBM;QAAgB;;SAA8B;MAAa,kBAAA,CAAA,GAAA,CAAA"}
@@ -1,19 +1,196 @@
1
1
  'use client';
2
2
 
3
- import "../../medusa-TumrpCF2.js";
4
- import "../../apollo-client-Bw50r80c.js";
5
- import "../../product-COu5D1mS.js";
6
- import "../../cart-BNoIGQmw.js";
7
- import "../../cart-IHaLnQC4.js";
8
- import "../../cart-DH8urwwT.js";
9
- import "../../cookies-lksVIe4_.js";
10
- import "../../regions-r1AvxfT8.js";
11
- import "../../cart-xkcyWLfU.js";
12
- import "../../delete-button-Bnm5bof2.js";
13
- import "../../line-item-options-l_eRZIIq.js";
14
- import "../../line-item-price-BlTwskFC.js";
15
- import "../../localized-client-link-CthmRcvb.js";
16
- import "../../thumbnail-C0TU3rh-.js";
17
- import { t as CartDropdown } from "../../cart-dropdown-D_PUJarp.js";
3
+ import { convertToLocale } from "../../lib/utils/money.js";
4
+ import { DeleteButton } from "../delete-button/index.js";
5
+ import { LineItemOptions } from "../line-item-options/index.js";
6
+ import { LineItemPrice } from "../line-item-price/index.js";
7
+ import { LocalizedClientLink } from "../localized-client-link/index.js";
8
+ import { Thumbnail } from "../thumbnail/index.js";
9
+ import { Fragment, useEffect, useRef, useState } from "react";
10
+ import { usePathname } from "next/navigation";
11
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
12
+ import { Popover, PopoverButton, PopoverPanel, Transition } from "@headlessui/react";
13
+ import { Button } from "@medusajs/ui";
18
14
 
19
- export { CartDropdown };
15
+ //#region src/components/cart-dropdown/index.tsx
16
+ const CartDropdown = ({ cart: cartState }) => {
17
+ const [activeTimer, setActiveTimer] = useState(void 0);
18
+ const [cartDropdownOpen, setCartDropdownOpen] = useState(false);
19
+ const open = () => setCartDropdownOpen(true);
20
+ const close = () => setCartDropdownOpen(false);
21
+ const totalItems = cartState?.items?.reduce((acc, item) => {
22
+ return acc + item.quantity;
23
+ }, 0) || 0;
24
+ const subtotal = cartState?.subtotal ?? 0;
25
+ const itemRef = useRef(totalItems || 0);
26
+ const timedOpen = () => {
27
+ open();
28
+ setActiveTimer(setTimeout(close, 5e3));
29
+ };
30
+ const openAndCancel = () => {
31
+ if (activeTimer) clearTimeout(activeTimer);
32
+ open();
33
+ };
34
+ useEffect(() => {
35
+ return () => {
36
+ if (activeTimer) clearTimeout(activeTimer);
37
+ };
38
+ }, [activeTimer]);
39
+ const pathname = usePathname();
40
+ useEffect(() => {
41
+ if (itemRef.current !== totalItems && !pathname.includes("/cart")) timedOpen();
42
+ }, [totalItems, itemRef.current]);
43
+ return /* @__PURE__ */ jsx("div", {
44
+ className: "z-50 h-full",
45
+ onMouseEnter: openAndCancel,
46
+ onMouseLeave: close,
47
+ children: /* @__PURE__ */ jsxs(Popover, {
48
+ className: "relative h-full",
49
+ children: [/* @__PURE__ */ jsx(PopoverButton, {
50
+ className: "h-full",
51
+ children: /* @__PURE__ */ jsx(LocalizedClientLink, {
52
+ className: "hover:text-ui-fg-base",
53
+ href: "/cart",
54
+ "data-testid": "nav-cart-link",
55
+ children: `Cart (${totalItems})`
56
+ })
57
+ }), /* @__PURE__ */ jsx(Transition, {
58
+ show: cartDropdownOpen,
59
+ as: Fragment,
60
+ enter: "transition ease-out duration-200",
61
+ enterFrom: "opacity-0 translate-y-1",
62
+ enterTo: "opacity-100 translate-y-0",
63
+ leave: "transition ease-in duration-150",
64
+ leaveFrom: "opacity-100 translate-y-0",
65
+ leaveTo: "opacity-0 translate-y-1",
66
+ children: /* @__PURE__ */ jsxs(PopoverPanel, {
67
+ static: true,
68
+ className: "text-ui-fg-base small:block absolute top-[calc(100%+1px)] right-0 hidden w-[420px] border-x border-b border-gray-200 bg-white",
69
+ "data-testid": "nav-cart-dropdown",
70
+ children: [/* @__PURE__ */ jsx("div", {
71
+ className: "flex items-center justify-center p-4",
72
+ children: /* @__PURE__ */ jsx("h3", {
73
+ className: "text-large-semi",
74
+ children: "Cart"
75
+ })
76
+ }), cartState && cartState.items?.length ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("div", {
77
+ className: "no-scrollbar grid max-h-[402px] grid-cols-1 gap-y-8 overflow-y-scroll p-px px-4",
78
+ children: cartState.items.sort((a, b) => {
79
+ return (a.createdAt ?? "") > (b.createdAt ?? "") ? -1 : 1;
80
+ }).map((item) => /* @__PURE__ */ jsxs("div", {
81
+ className: "grid grid-cols-[122px_1fr] gap-x-4",
82
+ "data-testid": "cart-item",
83
+ children: [/* @__PURE__ */ jsx(LocalizedClientLink, {
84
+ href: `/products/${item.productHandle}`,
85
+ className: "w-24",
86
+ children: /* @__PURE__ */ jsx(Thumbnail, {
87
+ thumbnail: item.thumbnail,
88
+ images: item.variant?.product?.images,
89
+ size: "square"
90
+ })
91
+ }), /* @__PURE__ */ jsxs("div", {
92
+ className: "flex flex-1 flex-col justify-between",
93
+ children: [/* @__PURE__ */ jsx("div", {
94
+ className: "flex flex-1 flex-col",
95
+ children: /* @__PURE__ */ jsxs("div", {
96
+ className: "flex items-start justify-between",
97
+ children: [/* @__PURE__ */ jsxs("div", {
98
+ className: "mr-4 flex w-[180px] flex-col overflow-ellipsis whitespace-nowrap",
99
+ children: [
100
+ /* @__PURE__ */ jsx("h3", {
101
+ className: "text-base-regular overflow-hidden text-ellipsis",
102
+ children: /* @__PURE__ */ jsx(LocalizedClientLink, {
103
+ href: `/products/${item.productHandle}`,
104
+ "data-testid": "product-link",
105
+ children: item.title
106
+ })
107
+ }),
108
+ /* @__PURE__ */ jsx(LineItemOptions, {
109
+ variant: item.variant,
110
+ "data-testid": "cart-item-variant",
111
+ "data-value": item.variant
112
+ }),
113
+ /* @__PURE__ */ jsxs("span", {
114
+ "data-testid": "cart-item-quantity",
115
+ "data-value": item.quantity,
116
+ children: ["Quantity: ", item.quantity]
117
+ })
118
+ ]
119
+ }), /* @__PURE__ */ jsx("div", {
120
+ className: "flex justify-end",
121
+ children: /* @__PURE__ */ jsx(LineItemPrice, {
122
+ item,
123
+ style: "tight",
124
+ currencyCode: cartState.currencyCode
125
+ })
126
+ })]
127
+ })
128
+ }), /* @__PURE__ */ jsx(DeleteButton, {
129
+ id: item.id,
130
+ className: "mt-1",
131
+ "data-testid": "cart-item-remove-button",
132
+ children: "Remove"
133
+ })]
134
+ })]
135
+ }, item.id))
136
+ }), /* @__PURE__ */ jsxs("div", {
137
+ className: "text-small-regular flex flex-col gap-y-4 p-4",
138
+ children: [/* @__PURE__ */ jsxs("div", {
139
+ className: "flex items-center justify-between",
140
+ children: [/* @__PURE__ */ jsxs("span", {
141
+ className: "text-ui-fg-base font-semibold",
142
+ children: [
143
+ "Subtotal",
144
+ " ",
145
+ /* @__PURE__ */ jsx("span", {
146
+ className: "font-normal",
147
+ children: "(excl. taxes)"
148
+ })
149
+ ]
150
+ }), /* @__PURE__ */ jsx("span", {
151
+ className: "text-large-semi",
152
+ "data-testid": "cart-subtotal",
153
+ "data-value": subtotal,
154
+ children: convertToLocale({
155
+ amount: subtotal,
156
+ currency_code: cartState.currencyCode
157
+ })
158
+ })]
159
+ }), /* @__PURE__ */ jsx(LocalizedClientLink, {
160
+ href: "/cart",
161
+ children: /* @__PURE__ */ jsx(Button, {
162
+ className: "w-full",
163
+ size: "large",
164
+ "data-testid": "go-to-cart-button",
165
+ children: "Go to cart"
166
+ })
167
+ })]
168
+ })] }) : /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs("div", {
169
+ className: "flex flex-col items-center justify-center gap-y-4 py-16",
170
+ children: [
171
+ /* @__PURE__ */ jsx("div", {
172
+ className: "text-small-regular flex h-6 w-6 items-center justify-center rounded-full bg-gray-900 text-white",
173
+ children: /* @__PURE__ */ jsx("span", { children: "0" })
174
+ }),
175
+ /* @__PURE__ */ jsx("span", { children: "Your shopping bag is empty." }),
176
+ /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(LocalizedClientLink, {
177
+ href: "/store",
178
+ children: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
179
+ className: "sr-only",
180
+ children: "Go to all products page"
181
+ }), /* @__PURE__ */ jsx(Button, {
182
+ onClick: close,
183
+ children: "Explore products"
184
+ })] })
185
+ }) })
186
+ ]
187
+ }) })]
188
+ })
189
+ })]
190
+ })
191
+ });
192
+ };
193
+
194
+ //#endregion
195
+ export { CartDropdown };
196
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/cart-dropdown/index.tsx"],"sourcesContent":["'use client';\n\nimport { Fragment, useEffect, useRef, useState } from 'react';\n\nimport { usePathname } from 'next/navigation';\n\nimport {\n Popover,\n PopoverButton,\n PopoverPanel,\n Transition,\n} from '@headlessui/react';\nimport { Button } from '@medusajs/ui';\n\nimport { convertToLocale } from '@/lib/utils/money';\nimport { Cart } from '@/types/graphql';\n\nimport { DeleteButton } from '../delete-button';\nimport { LineItemOptions } from '../line-item-options';\nimport { LineItemPrice } from '../line-item-price';\nimport { LocalizedClientLink } from '../localized-client-link';\nimport { Thumbnail } from '../thumbnail';\n\nconst CartDropdown = ({ cart: cartState }: { cart?: Cart | null }) => {\n const [activeTimer, setActiveTimer] = useState<NodeJS.Timeout | undefined>(\n undefined\n );\n const [cartDropdownOpen, setCartDropdownOpen] = useState(false);\n\n const open = () => setCartDropdownOpen(true);\n const close = () => setCartDropdownOpen(false);\n\n const totalItems =\n cartState?.items?.reduce((acc, item) => {\n return acc + item.quantity;\n }, 0) || 0;\n\n const subtotal = cartState?.subtotal ?? 0;\n const itemRef = useRef<number>(totalItems || 0);\n\n const timedOpen = () => {\n open();\n\n const timer = setTimeout(close, 5000);\n\n setActiveTimer(timer);\n };\n\n const openAndCancel = () => {\n if (activeTimer) {\n clearTimeout(activeTimer);\n }\n\n open();\n };\n\n // Clean up the timer when the component unmounts\n useEffect(() => {\n return () => {\n if (activeTimer) {\n clearTimeout(activeTimer);\n }\n };\n }, [activeTimer]);\n\n const pathname = usePathname();\n\n // open cart dropdown when modifying the cart items, but only if we're not on the cart page\n useEffect(() => {\n if (itemRef.current !== totalItems && !pathname.includes('/cart')) {\n timedOpen();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [totalItems, itemRef.current]);\n\n return (\n <div\n className=\"z-50 h-full\"\n onMouseEnter={openAndCancel}\n onMouseLeave={close}\n >\n <Popover className=\"relative h-full\">\n <PopoverButton className=\"h-full\">\n <LocalizedClientLink\n className=\"hover:text-ui-fg-base\"\n href=\"/cart\"\n data-testid=\"nav-cart-link\"\n >{`Cart (${totalItems})`}</LocalizedClientLink>\n </PopoverButton>\n <Transition\n show={cartDropdownOpen}\n as={Fragment}\n enter=\"transition ease-out duration-200\"\n enterFrom=\"opacity-0 translate-y-1\"\n enterTo=\"opacity-100 translate-y-0\"\n leave=\"transition ease-in duration-150\"\n leaveFrom=\"opacity-100 translate-y-0\"\n leaveTo=\"opacity-0 translate-y-1\"\n >\n <PopoverPanel\n static\n className=\"text-ui-fg-base small:block absolute top-[calc(100%+1px)] right-0 hidden w-[420px] border-x border-b border-gray-200 bg-white\"\n data-testid=\"nav-cart-dropdown\"\n >\n <div className=\"flex items-center justify-center p-4\">\n <h3 className=\"text-large-semi\">Cart</h3>\n </div>\n {cartState && cartState.items?.length ? (\n <>\n <div className=\"no-scrollbar grid max-h-[402px] grid-cols-1 gap-y-8 overflow-y-scroll p-px px-4\">\n {cartState.items\n .sort((a, b) => {\n return (a.createdAt ?? '') > (b.createdAt ?? '') ? -1 : 1;\n })\n .map((item) => (\n <div\n className=\"grid grid-cols-[122px_1fr] gap-x-4\"\n key={item.id}\n data-testid=\"cart-item\"\n >\n <LocalizedClientLink\n href={`/products/${item.productHandle}`}\n className=\"w-24\"\n >\n <Thumbnail\n thumbnail={item.thumbnail}\n images={item.variant?.product?.images}\n size=\"square\"\n />\n </LocalizedClientLink>\n <div className=\"flex flex-1 flex-col justify-between\">\n <div className=\"flex flex-1 flex-col\">\n <div className=\"flex items-start justify-between\">\n <div className=\"mr-4 flex w-[180px] flex-col overflow-ellipsis whitespace-nowrap\">\n <h3 className=\"text-base-regular overflow-hidden text-ellipsis\">\n <LocalizedClientLink\n href={`/products/${item.productHandle}`}\n data-testid=\"product-link\"\n >\n {item.title}\n </LocalizedClientLink>\n </h3>\n <LineItemOptions\n variant={item.variant}\n data-testid=\"cart-item-variant\"\n data-value={item.variant}\n />\n <span\n data-testid=\"cart-item-quantity\"\n data-value={item.quantity}\n >\n Quantity: {item.quantity}\n </span>\n </div>\n <div className=\"flex justify-end\">\n <LineItemPrice\n item={item}\n style=\"tight\"\n currencyCode={cartState.currencyCode}\n />\n </div>\n </div>\n </div>\n <DeleteButton\n id={item.id}\n className=\"mt-1\"\n data-testid=\"cart-item-remove-button\"\n >\n Remove\n </DeleteButton>\n </div>\n </div>\n ))}\n </div>\n <div className=\"text-small-regular flex flex-col gap-y-4 p-4\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-ui-fg-base font-semibold\">\n Subtotal{' '}\n <span className=\"font-normal\">(excl. taxes)</span>\n </span>\n <span\n className=\"text-large-semi\"\n data-testid=\"cart-subtotal\"\n data-value={subtotal}\n >\n {convertToLocale({\n amount: subtotal,\n currency_code: cartState.currencyCode,\n })}\n </span>\n </div>\n <LocalizedClientLink href=\"/cart\">\n <Button\n className=\"w-full\"\n size=\"large\"\n data-testid=\"go-to-cart-button\"\n >\n Go to cart\n </Button>\n </LocalizedClientLink>\n </div>\n </>\n ) : (\n <div>\n <div className=\"flex flex-col items-center justify-center gap-y-4 py-16\">\n <div className=\"text-small-regular flex h-6 w-6 items-center justify-center rounded-full bg-gray-900 text-white\">\n <span>0</span>\n </div>\n <span>Your shopping bag is empty.</span>\n <div>\n <LocalizedClientLink href=\"/store\">\n <>\n <span className=\"sr-only\">Go to all products page</span>\n <Button onClick={close}>Explore products</Button>\n </>\n </LocalizedClientLink>\n </div>\n </div>\n </div>\n )}\n </PopoverPanel>\n </Transition>\n </Popover>\n </div>\n );\n};\n\nexport { CartDropdown };\n"],"mappings":";;;;;;;;;;;;;;;AAuBA,MAAM,gBAAgB,EAAE,MAAM,gBAAwC;CACpE,MAAM,CAAC,aAAa,kBAAkB,SACpC,OACD;CACD,MAAM,CAAC,kBAAkB,uBAAuB,SAAS,MAAM;CAE/D,MAAM,aAAa,oBAAoB,KAAK;CAC5C,MAAM,cAAc,oBAAoB,MAAM;CAE9C,MAAM,aACJ,WAAW,OAAO,QAAQ,KAAK,SAAS;AACtC,SAAO,MAAM,KAAK;IACjB,EAAE,IAAI;CAEX,MAAM,WAAW,WAAW,YAAY;CACxC,MAAM,UAAU,OAAe,cAAc,EAAE;CAE/C,MAAM,kBAAkB;AACtB,QAAM;AAIN,iBAFc,WAAW,OAAO,IAAK,CAEhB;;CAGvB,MAAM,sBAAsB;AAC1B,MAAI,YACF,cAAa,YAAY;AAG3B,QAAM;;AAIR,iBAAgB;AACd,eAAa;AACX,OAAI,YACF,cAAa,YAAY;;IAG5B,CAAC,YAAY,CAAC;CAEjB,MAAM,WAAW,aAAa;AAG9B,iBAAgB;AACd,MAAI,QAAQ,YAAY,cAAc,CAAC,SAAS,SAAS,QAAQ,CAC/D,YAAW;IAGZ,CAAC,YAAY,QAAQ,QAAQ,CAAC;AAEjC,QACE,oBAAC;EACC,WAAU;EACV,cAAc;EACd,cAAc;YAEd,qBAAC;GAAQ,WAAU;cACjB,oBAAC;IAAc,WAAU;cACvB,oBAAC;KACC,WAAU;KACV,MAAK;KACL,eAAY;eACZ,SAAS,WAAW;MAAyB;KACjC,EAChB,oBAAC;IACC,MAAM;IACN,IAAI;IACJ,OAAM;IACN,WAAU;IACV,SAAQ;IACR,OAAM;IACN,WAAU;IACV,SAAQ;cAER,qBAAC;KACC;KACA,WAAU;KACV,eAAY;gBAEZ,oBAAC;MAAI,WAAU;gBACb,oBAAC;OAAG,WAAU;iBAAkB;QAAS;OACrC,EACL,aAAa,UAAU,OAAO,SAC7B,8CACE,oBAAC;MAAI,WAAU;gBACZ,UAAU,MACR,MAAM,GAAG,MAAM;AACd,eAAQ,EAAE,aAAa,OAAO,EAAE,aAAa,MAAM,KAAK;QACxD,CACD,KAAK,SACJ,qBAAC;OACC,WAAU;OAEV,eAAY;kBAEZ,oBAAC;QACC,MAAM,aAAa,KAAK;QACxB,WAAU;kBAEV,oBAAC;SACC,WAAW,KAAK;SAChB,QAAQ,KAAK,SAAS,SAAS;SAC/B,MAAK;UACL;SACkB,EACtB,qBAAC;QAAI,WAAU;mBACb,oBAAC;SAAI,WAAU;mBACb,qBAAC;UAAI,WAAU;qBACb,qBAAC;WAAI,WAAU;;YACb,oBAAC;aAAG,WAAU;uBACZ,oBAAC;cACC,MAAM,aAAa,KAAK;cACxB,eAAY;wBAEX,KAAK;eACc;cACnB;YACL,oBAAC;aACC,SAAS,KAAK;aACd,eAAY;aACZ,cAAY,KAAK;cACjB;YACF,qBAAC;aACC,eAAY;aACZ,cAAY,KAAK;wBAClB,cACY,KAAK;cACX;;YACH,EACN,oBAAC;WAAI,WAAU;qBACb,oBAAC;YACO;YACN,OAAM;YACN,cAAc,UAAU;aACxB;YACE;WACF;UACF,EACN,oBAAC;SACC,IAAI,KAAK;SACT,WAAU;SACV,eAAY;mBACb;UAEc;SACX;SArDD,KAAK,GAsDN,CACN;OACA,EACN,qBAAC;MAAI,WAAU;iBACb,qBAAC;OAAI,WAAU;kBACb,qBAAC;QAAK,WAAU;;SAAgC;SACrC;SACT,oBAAC;UAAK,WAAU;oBAAc;WAAoB;;SAC7C,EACP,oBAAC;QACC,WAAU;QACV,eAAY;QACZ,cAAY;kBAEX,gBAAgB;SACf,QAAQ;SACR,eAAe,UAAU;SAC1B,CAAC;SACG;QACH,EACN,oBAAC;OAAoB,MAAK;iBACxB,oBAAC;QACC,WAAU;QACV,MAAK;QACL,eAAY;kBACb;SAEQ;QACW;OAClB,IACL,GAEH,oBAAC,mBACC,qBAAC;MAAI,WAAU;;OACb,oBAAC;QAAI,WAAU;kBACb,oBAAC,oBAAK,MAAQ;SACV;OACN,oBAAC,oBAAK,gCAAkC;OACxC,oBAAC,mBACC,oBAAC;QAAoB,MAAK;kBACxB,8CACE,oBAAC;SAAK,WAAU;mBAAU;UAA8B,EACxD,oBAAC;SAAO,SAAS;mBAAO;UAAyB,IAChD;SACiB,GAClB;;OACF,GACF;MAEK;KACJ;IACL;GACN"}
@@ -1,11 +1,11 @@
1
- import { p as Cart, z as Customer } from "../../graphql-CdTGi4Pp.js";
2
- import * as react_jsx_runtime16 from "react/jsx-runtime";
1
+ import { Cart, Customer } from "../../types/graphql.js";
2
+ import * as react_jsx_runtime3 from "react/jsx-runtime";
3
3
 
4
4
  //#region src/components/cart-mismatch-banner/index.d.ts
5
5
  declare function CartMismatchBanner(props: {
6
6
  customer: Customer;
7
7
  cart: Cart;
8
- }): react_jsx_runtime16.JSX.Element | undefined;
8
+ }): react_jsx_runtime3.JSX.Element | undefined;
9
9
  //#endregion
10
10
  export { CartMismatchBanner };
11
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/cart-mismatch-banner/index.tsx"],"sourcesContent":[],"mappings":";;;;iBAWS,kBAAA;YAAsC;EAAtC,IAAA,EAAsD,IAAtD;CAAsC,CAAA,EAAsB,mBAAA,CAAA,GAAA,CAAA,OAAA,GAAtB,SAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/cart-mismatch-banner/index.tsx"],"sourcesContent":[],"mappings":";;;;iBAWS,kBAAA;YAAsC;EAAtC,IAAA,EAAsD,IAAtD;CAAsC,CAAA,EAAsB,kBAAA,CAAA,GAAA,CAAA,OAAA,GAAtB,SAAA"}
@@ -1,13 +1,6 @@
1
1
  'use client';
2
2
 
3
- import "../../apollo-client-Bw50r80c.js";
4
- import "../../product-COu5D1mS.js";
5
- import "../../cart-BNoIGQmw.js";
6
- import "../../cart-IHaLnQC4.js";
7
- import "../../cookies-lksVIe4_.js";
8
- import "../../customer-CgN4zI00.js";
9
- import "../../customer-DIJz6m7L.js";
10
- import { n as transferCart } from "../../customer-ClewjBBr.js";
3
+ import { transferCart } from "../../lib/data/customer.js";
11
4
  import { useState } from "react";
12
5
  import { jsx, jsxs } from "react/jsx-runtime";
13
6
  import { Button } from "@medusajs/ui";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/cart-mismatch-banner/index.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\n\nimport { ExclamationCircleSolid } from '@medusajs/icons';\nimport { Button } from '@medusajs/ui';\n\nimport { transferCart } from '@/lib/data/customer';\nimport { Customer } from '@/types/graphql';\nimport { Cart } from '@/types/graphql';\n\nfunction CartMismatchBanner(props: { customer: Customer; cart: Cart }) {\n const { customer, cart } = props;\n const [isPending, setIsPending] = useState(false);\n const [actionText, setActionText] = useState('Run transfer again');\n\n if (!customer || !!cart.customerId) {\n return;\n }\n\n const handleSubmit = async () => {\n try {\n setIsPending(true);\n setActionText('Transferring..');\n\n await transferCart();\n } catch {\n setActionText('Run transfer again');\n setIsPending(false);\n }\n };\n\n return (\n <div className=\"small:gap-2 small:p-4 mt-2 flex items-center justify-center gap-1 bg-orange-300 p-2 text-center text-sm text-orange-800\">\n <div className=\"small:flex-row small:gap-2 flex flex-col items-center gap-1\">\n <span className=\"flex items-center gap-1\">\n <ExclamationCircleSolid className=\"inline\" />\n Something went wrong when we tried to transfer your cart\n </span>\n\n <span>·</span>\n\n <Button\n variant=\"transparent\"\n className=\"bg-transparent p-0 text-orange-950 hover:bg-transparent focus:bg-transparent active:bg-transparent disabled:text-orange-500\"\n size=\"base\"\n disabled={isPending}\n onClick={handleSubmit}\n >\n {actionText}\n </Button>\n </div>\n </div>\n );\n}\n\nexport { CartMismatchBanner };\n"],"mappings":";;;;;;;;;;;;;;;;AAWA,SAAS,mBAAmB,OAA2C;CACrE,MAAM,EAAE,UAAU,SAAS;CAC3B,MAAM,CAAC,WAAW,gBAAgB,SAAS,MAAM;CACjD,MAAM,CAAC,YAAY,iBAAiB,SAAS,qBAAqB;AAElE,KAAI,CAAC,YAAY,CAAC,CAAC,KAAK,WACtB;CAGF,MAAM,eAAe,YAAY;AAC/B,MAAI;AACF,gBAAa,KAAK;AAClB,iBAAc,iBAAiB;AAE/B,SAAM,cAAc;UACd;AACN,iBAAc,qBAAqB;AACnC,gBAAa,MAAM;;;AAIvB,QACE,oBAAC;EAAI,WAAU;YACb,qBAAC;GAAI,WAAU;;IACb,qBAAC;KAAK,WAAU;gBACd,oBAAC,0BAAuB,WAAU,WAAW;MAExC;IAEP,oBAAC,oBAAK,MAAQ;IAEd,oBAAC;KACC,SAAQ;KACR,WAAU;KACV,MAAK;KACL,UAAU;KACV,SAAS;eAER;MACM;;IACL;GACF"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/cart-mismatch-banner/index.tsx"],"sourcesContent":["'use client';\n\nimport { useState } from 'react';\n\nimport { ExclamationCircleSolid } from '@medusajs/icons';\nimport { Button } from '@medusajs/ui';\n\nimport { transferCart } from '@/lib/data/customer';\nimport { Customer } from '@/types/graphql';\nimport { Cart } from '@/types/graphql';\n\nfunction CartMismatchBanner(props: { customer: Customer; cart: Cart }) {\n const { customer, cart } = props;\n const [isPending, setIsPending] = useState(false);\n const [actionText, setActionText] = useState('Run transfer again');\n\n if (!customer || !!cart.customerId) {\n return;\n }\n\n const handleSubmit = async () => {\n try {\n setIsPending(true);\n setActionText('Transferring..');\n\n await transferCart();\n } catch {\n setActionText('Run transfer again');\n setIsPending(false);\n }\n };\n\n return (\n <div className=\"small:gap-2 small:p-4 mt-2 flex items-center justify-center gap-1 bg-orange-300 p-2 text-center text-sm text-orange-800\">\n <div className=\"small:flex-row small:gap-2 flex flex-col items-center gap-1\">\n <span className=\"flex items-center gap-1\">\n <ExclamationCircleSolid className=\"inline\" />\n Something went wrong when we tried to transfer your cart\n </span>\n\n <span>·</span>\n\n <Button\n variant=\"transparent\"\n className=\"bg-transparent p-0 text-orange-950 hover:bg-transparent focus:bg-transparent active:bg-transparent disabled:text-orange-500\"\n size=\"base\"\n disabled={isPending}\n onClick={handleSubmit}\n >\n {actionText}\n </Button>\n </div>\n </div>\n );\n}\n\nexport { CartMismatchBanner };\n"],"mappings":";;;;;;;;;AAWA,SAAS,mBAAmB,OAA2C;CACrE,MAAM,EAAE,UAAU,SAAS;CAC3B,MAAM,CAAC,WAAW,gBAAgB,SAAS,MAAM;CACjD,MAAM,CAAC,YAAY,iBAAiB,SAAS,qBAAqB;AAElE,KAAI,CAAC,YAAY,CAAC,CAAC,KAAK,WACtB;CAGF,MAAM,eAAe,YAAY;AAC/B,MAAI;AACF,gBAAa,KAAK;AAClB,iBAAc,iBAAiB;AAE/B,SAAM,cAAc;UACd;AACN,iBAAc,qBAAqB;AACnC,gBAAa,MAAM;;;AAIvB,QACE,oBAAC;EAAI,WAAU;YACb,qBAAC;GAAI,WAAU;;IACb,qBAAC;KAAK,WAAU;gBACd,oBAAC,0BAAuB,WAAU,WAAW;MAExC;IAEP,oBAAC,oBAAK,MAAQ;IAEd,oBAAC;KACC,SAAQ;KACR,WAAU;KACV,MAAK;KACL,UAAU;KACV,SAAS;eAER;MACM;;IACL;GACF"}
@@ -1,4 +1,4 @@
1
- import { tr as Region } from "../../graphql-CdTGi4Pp.js";
1
+ import { Region } from "../../types/graphql.js";
2
2
  import React from "react";
3
3
 
4
4
  //#region src/components/country-select/index.d.ts
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime1 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime4 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/components/delete-button/index.d.ts
4
4
  declare const DeleteButton: ({
@@ -9,7 +9,7 @@ declare const DeleteButton: ({
9
9
  id: string;
10
10
  children?: React.ReactNode;
11
11
  className?: string;
12
- }) => react_jsx_runtime1.JSX.Element;
12
+ }) => react_jsx_runtime4.JSX.Element;
13
13
  //#endregion
14
14
  export { DeleteButton };
15
15
  //# sourceMappingURL=index.d.ts.map
@@ -1,12 +1,28 @@
1
- import "../../medusa-TumrpCF2.js";
2
- import "../../apollo-client-Bw50r80c.js";
3
- import "../../product-COu5D1mS.js";
4
- import "../../cart-BNoIGQmw.js";
5
- import "../../cart-IHaLnQC4.js";
6
- import "../../cart-DH8urwwT.js";
7
- import "../../cookies-lksVIe4_.js";
8
- import "../../regions-r1AvxfT8.js";
9
- import "../../cart-xkcyWLfU.js";
10
- import { t as DeleteButton } from "../../delete-button-Bnm5bof2.js";
1
+ import { deleteLineItem } from "../../lib/data/cart.js";
2
+ import { useState } from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { clx } from "@medusajs/ui";
5
+ import { Spinner, Trash } from "@medusajs/icons";
11
6
 
12
- export { DeleteButton };
7
+ //#region src/components/delete-button/index.tsx
8
+ const DeleteButton = ({ id, children, className }) => {
9
+ const [isDeleting, setIsDeleting] = useState(false);
10
+ const handleDelete = async (id$1) => {
11
+ setIsDeleting(true);
12
+ await deleteLineItem(id$1).catch((err) => {
13
+ setIsDeleting(false);
14
+ });
15
+ };
16
+ return /* @__PURE__ */ jsx("div", {
17
+ className: clx("text-small-regular flex items-center justify-between", className),
18
+ children: /* @__PURE__ */ jsxs("button", {
19
+ className: "text-ui-fg-subtle hover:text-ui-fg-base flex cursor-pointer gap-x-1",
20
+ onClick: () => handleDelete(id),
21
+ children: [isDeleting ? /* @__PURE__ */ jsx(Spinner, { className: "animate-spin" }) : /* @__PURE__ */ jsx(Trash, {}), /* @__PURE__ */ jsx("span", { children })]
22
+ })
23
+ });
24
+ };
25
+
26
+ //#endregion
27
+ export { DeleteButton };
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["id"],"sources":["../../../src/components/delete-button/index.tsx"],"sourcesContent":["import { useState } from 'react';\n\nimport { Spinner, Trash } from '@medusajs/icons';\nimport { clx } from '@medusajs/ui';\n\nimport { deleteLineItem } from '@/lib/data/cart';\n\nconst DeleteButton = ({\n id,\n children,\n className,\n}: {\n id: string;\n children?: React.ReactNode;\n className?: string;\n}) => {\n const [isDeleting, setIsDeleting] = useState(false);\n\n const handleDelete = async (id: string) => {\n setIsDeleting(true);\n await deleteLineItem(id).catch((err) => {\n setIsDeleting(false);\n });\n };\n\n return (\n <div\n className={clx(\n 'text-small-regular flex items-center justify-between',\n className\n )}\n >\n <button\n className=\"text-ui-fg-subtle hover:text-ui-fg-base flex cursor-pointer gap-x-1\"\n onClick={() => handleDelete(id)}\n >\n {isDeleting ? <Spinner className=\"animate-spin\" /> : <Trash />}\n <span>{children}</span>\n </button>\n </div>\n );\n};\n\nexport { DeleteButton };\n"],"mappings":";;;;;;;AAOA,MAAM,gBAAgB,EACpB,IACA,UACA,gBAKI;CACJ,MAAM,CAAC,YAAY,iBAAiB,SAAS,MAAM;CAEnD,MAAM,eAAe,OAAO,SAAe;AACzC,gBAAc,KAAK;AACnB,QAAM,eAAeA,KAAG,CAAC,OAAO,QAAQ;AACtC,iBAAc,MAAM;IACpB;;AAGJ,QACE,oBAAC;EACC,WAAW,IACT,wDACA,UACD;YAED,qBAAC;GACC,WAAU;GACV,eAAe,aAAa,GAAG;cAE9B,aAAa,oBAAC,WAAQ,WAAU,iBAAiB,GAAG,oBAAC,UAAQ,EAC9D,oBAAC,UAAM,WAAgB;IAChB;GACL"}
@@ -1,4 +1,4 @@
1
- import * as react_jsx_runtime2 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime21 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/components/error-message/index.d.ts
4
4
  declare const ErrorMessage: ({
@@ -7,7 +7,7 @@ declare const ErrorMessage: ({
7
7
  }: {
8
8
  error?: string | null;
9
9
  "data-testid"?: string;
10
- }) => react_jsx_runtime2.JSX.Element | null;
10
+ }) => react_jsx_runtime21.JSX.Element | null;
11
11
  //#endregion
12
12
  export { ErrorMessage };
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/error-message/index.tsx"],"sourcesContent":[],"mappings":";;;cAAM;;iBAAgB;AAMrB;;;AAAA,CAAA,EAAA,GAAA,kBAAA,CAAA,GAAA,CAAA,OAAA,GAaA,IAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/error-message/index.tsx"],"sourcesContent":[],"mappings":";;;cAAM;;iBAAgB;AAMrB;;;AAAA,CAAA,EAAA,GAAA,mBAAA,CAAA,GAAA,CAAA,OAAA,GAaA,IAAA"}
@@ -1,7 +1,7 @@
1
- import * as react_jsx_runtime3 from "react/jsx-runtime";
1
+ import * as react_jsx_runtime17 from "react/jsx-runtime";
2
2
 
3
3
  //#region src/components/footer/index.d.ts
4
- declare function Footer(): Promise<react_jsx_runtime3.JSX.Element>;
4
+ declare function Footer(): Promise<react_jsx_runtime17.JSX.Element>;
5
5
  //#endregion
6
6
  export { Footer as default };
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/footer/index.tsx"],"sourcesContent":[],"mappings":";;;iBAU8B,MAAA,CAAA,GAAM,QAAA,kBAAA,CAAA,GAAA,CAAA,OAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/components/footer/index.tsx"],"sourcesContent":[],"mappings":";;;iBAU8B,MAAA,CAAA,GAAM,QAAA,mBAAA,CAAA,GAAA,CAAA,OAAA"}
@@ -1,13 +1,8 @@
1
- import "../../apollo-client-Bw50r80c.js";
2
- import "../../product-COu5D1mS.js";
3
- import { t as LocalizedClientLink } from "../../localized-client-link-CthmRcvb.js";
4
- import "../../product-C3HQUIgX.js";
5
- import { t as listCategories } from "../../categories-B-RYCIZ3.js";
6
- import "../../collections-DMv3UYgC.js";
7
- import { t as listCollections } from "../../collections-BgyvhW2p.js";
8
- import "../../footer-DCtgtjKS.js";
9
- import { t as getFooterContent } from "../../footer-BvNV-R9D.js";
10
- import { t as PortableText } from "../../portable-text-CuI022GH.js";
1
+ import { LocalizedClientLink } from "../localized-client-link/index.js";
2
+ import { listCategories } from "../../lib/data/categories.js";
3
+ import { listCollections } from "../../lib/data/collections.js";
4
+ import { getFooterContent } from "../../lib/data/footer.js";
5
+ import { PortableText } from "../portable-text/index.js";
11
6
  import { jsx, jsxs } from "react/jsx-runtime";
12
7
  import { Text, clx } from "@medusajs/ui";
13
8
 
@@ -1 +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"}
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"}
@@ -1,5 +1,5 @@
1
- import { p as Cart } from "../../graphql-CdTGi4Pp.js";
2
- import * as react_jsx_runtime4 from "react/jsx-runtime";
1
+ import { Cart } from "../../types/graphql.js";
2
+ import * as react_jsx_runtime22 from "react/jsx-runtime";
3
3
  import { StoreCartShippingOption } from "@medusajs/types";
4
4
 
5
5
  //#region src/components/free-shipping-price-nudge/index.d.ts
@@ -11,7 +11,7 @@ declare function ShippingPriceNudge({
11
11
  variant?: 'popup' | 'inline';
12
12
  cart: Cart;
13
13
  shippingOptions: StoreCartShippingOption[];
14
- }): react_jsx_runtime4.JSX.Element | undefined;
14
+ }): react_jsx_runtime22.JSX.Element | undefined;
15
15
  //#endregion
16
16
  export { ShippingPriceNudge };
17
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
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,mBAAA,CAAA,GAAA,CAAA,OAAA,GAPC,SAAA"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
- import { t as convertToLocale } from "../../money-DVQGzXns.js";
4
- import { t as LocalizedClientLink } from "../../localized-client-link-CthmRcvb.js";
3
+ import { convertToLocale } from "../../lib/utils/money.js";
4
+ import { LocalizedClientLink } from "../localized-client-link/index.js";
5
5
  import { useState } from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  import { Button, clx } from "@medusajs/ui";