@gfed-medusa/sf-lib-common 2.0.0 → 2.1.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 (108) hide show
  1. package/dist/components/breadcrumbs/index.d.ts.map +1 -1
  2. package/dist/components/breadcrumbs/index.js.map +1 -1
  3. package/dist/components/cart-mismatch-banner/index.d.ts +2 -2
  4. package/dist/components/cart-mismatch-banner/index.js +1 -1
  5. package/dist/components/delete-button/index.d.ts +2 -2
  6. package/dist/components/delete-button/index.js +1 -1
  7. package/dist/components/error-message/index.d.ts +2 -2
  8. package/dist/components/error-message/index.d.ts.map +1 -1
  9. package/dist/components/free-shipping-price-nudge/index.d.ts +2 -2
  10. package/dist/components/free-shipping-price-nudge/index.d.ts.map +1 -1
  11. package/dist/components/free-shipping-price-nudge/index.js +2 -2
  12. package/dist/components/free-shipping-price-nudge/index.js.map +1 -1
  13. package/dist/components/interactive-link/index.d.ts +2 -2
  14. package/dist/components/interactive-link/index.d.ts.map +1 -1
  15. package/dist/components/interactive-link/index.js +1 -1
  16. package/dist/components/line-item-options/index.d.ts +2 -2
  17. package/dist/components/line-item-price/index.d.ts +2 -2
  18. package/dist/components/localized-client-link/index.d.ts +2 -2
  19. package/dist/components/localized-client-link/index.d.ts.map +1 -1
  20. package/dist/components/localized-client-link/index.js +1 -5
  21. package/dist/components/localized-client-link/index.js.map +1 -1
  22. package/dist/components/modal/index.d.ts +2 -2
  23. package/dist/components/modal/index.d.ts.map +1 -1
  24. package/dist/components/modal/index.js +1 -1
  25. package/dist/components/preview-price/index.d.ts +2 -2
  26. package/dist/components/preview-price/index.d.ts.map +1 -1
  27. package/dist/components/product-card/index.d.ts +2 -2
  28. package/dist/components/product-card/index.d.ts.map +1 -1
  29. package/dist/components/product-card/index.js +2 -2
  30. package/dist/components/product-card/index.js.map +1 -1
  31. package/dist/components/product-preview/index.d.ts +2 -2
  32. package/dist/components/product-preview/index.js +1 -1
  33. package/dist/components/submit-button/index.d.ts +2 -2
  34. package/dist/components/submit-button/index.d.ts.map +1 -1
  35. package/dist/lib/context/apollo-context.d.ts +2 -2
  36. package/dist/lib/context/apollo-context.d.ts.map +1 -1
  37. package/dist/lib/context/modal-context.d.ts +2 -2
  38. package/dist/lib/context/modal-context.d.ts.map +1 -1
  39. package/dist/lib/data/cart.d.ts +7 -17
  40. package/dist/lib/data/cart.d.ts.map +1 -1
  41. package/dist/lib/data/cart.js +23 -46
  42. package/dist/lib/data/cart.js.map +1 -1
  43. package/dist/lib/data/context.d.ts +27 -0
  44. package/dist/lib/data/context.d.ts.map +1 -0
  45. package/dist/lib/data/context.js +18 -0
  46. package/dist/lib/data/context.js.map +1 -0
  47. package/dist/lib/data/cookies.d.ts +12 -10
  48. package/dist/lib/data/cookies.d.ts.map +1 -1
  49. package/dist/lib/data/cookies.js +25 -35
  50. package/dist/lib/data/cookies.js.map +1 -1
  51. package/dist/lib/data/customer.d.ts +3 -2
  52. package/dist/lib/data/customer.d.ts.map +1 -1
  53. package/dist/lib/data/customer.js +11 -10
  54. package/dist/lib/data/customer.js.map +1 -1
  55. package/dist/lib/data/next-context.d.ts +8 -0
  56. package/dist/lib/data/next-context.d.ts.map +1 -0
  57. package/dist/lib/data/next-context.js +65 -0
  58. package/dist/lib/data/next-context.js.map +1 -0
  59. package/dist/lib/data/orders.js +1 -1
  60. package/dist/lib/data/regions.d.ts +3 -2
  61. package/dist/lib/data/regions.d.ts.map +1 -1
  62. package/dist/lib/data/regions.js +5 -5
  63. package/dist/lib/data/regions.js.map +1 -1
  64. package/dist/lib/gql/fragments/customer.d.ts +3 -3
  65. package/dist/lib/gql/fragments/customer.d.ts.map +1 -1
  66. package/dist/lib/gql/fragments/product.d.ts +8 -8
  67. package/dist/lib/gql/mutations/cart.d.ts +4 -4
  68. package/dist/lib/gql/queries/cart.d.ts +2 -2
  69. package/dist/lib/gql/queries/collections.d.ts +2 -2
  70. package/dist/lib/gql/queries/customer.d.ts +2 -2
  71. package/dist/lib/gql/queries/footer.d.ts +2 -2
  72. package/dist/lib/gql/queries/product.d.ts +3 -3
  73. package/dist/lib/gql/queries/product.d.ts.map +1 -1
  74. package/dist/lib/utils/env.js +1 -1
  75. package/dist/lib/utils/env.js.map +1 -1
  76. package/package.json +1 -1
  77. package/dist/components/cart-button/index.d.ts +0 -7
  78. package/dist/components/cart-button/index.d.ts.map +0 -1
  79. package/dist/components/cart-button/index.js +0 -12
  80. package/dist/components/cart-button/index.js.map +0 -1
  81. package/dist/components/cart-dropdown/index.d.ts +0 -12
  82. package/dist/components/cart-dropdown/index.d.ts.map +0 -1
  83. package/dist/components/cart-dropdown/index.js +0 -196
  84. package/dist/components/cart-dropdown/index.js.map +0 -1
  85. package/dist/components/footer/index.d.ts +0 -7
  86. package/dist/components/footer/index.d.ts.map +0 -1
  87. package/dist/components/footer/index.js +0 -110
  88. package/dist/components/footer/index.js.map +0 -1
  89. package/dist/components/layout-country-select/index.d.ts +0 -16
  90. package/dist/components/layout-country-select/index.d.ts.map +0 -1
  91. package/dist/components/layout-country-select/index.js +0 -92
  92. package/dist/components/layout-country-select/index.js.map +0 -1
  93. package/dist/components/nav/index.d.ts +0 -7
  94. package/dist/components/nav/index.d.ts.map +0 -1
  95. package/dist/components/nav/index.js +0 -66
  96. package/dist/components/nav/index.js.map +0 -1
  97. package/dist/components/portable-text/index.d.ts +0 -13
  98. package/dist/components/portable-text/index.d.ts.map +0 -1
  99. package/dist/components/portable-text/index.js +0 -330
  100. package/dist/components/portable-text/index.js.map +0 -1
  101. package/dist/components/search-modal/index.d.ts +0 -12
  102. package/dist/components/search-modal/index.d.ts.map +0 -1
  103. package/dist/components/search-modal/index.js +0 -138
  104. package/dist/components/search-modal/index.js.map +0 -1
  105. package/dist/components/side-menu/index.d.ts +0 -12
  106. package/dist/components/side-menu/index.d.ts.map +0 -1
  107. package/dist/components/side-menu/index.js +0 -99
  108. package/dist/components/side-menu/index.js.map +0 -1
@@ -1,9 +1,9 @@
1
- import * as _apollo_client10 from "@apollo/client";
1
+ import * as _apollo_client14 from "@apollo/client";
2
2
 
3
3
  //#region src/lib/gql/mutations/cart.d.ts
4
- declare const UPDATE_CART_MUTATION: _apollo_client10.DocumentNode;
5
- declare const DELETE_LINE_ITEM_MUTATION: _apollo_client10.DocumentNode;
6
- declare const TRANSFER_CART_MUTATION: _apollo_client10.DocumentNode;
4
+ declare const UPDATE_CART_MUTATION: _apollo_client14.DocumentNode;
5
+ declare const DELETE_LINE_ITEM_MUTATION: _apollo_client14.DocumentNode;
6
+ declare const TRANSFER_CART_MUTATION: _apollo_client14.DocumentNode;
7
7
  //#endregion
8
8
  export { DELETE_LINE_ITEM_MUTATION, TRANSFER_CART_MUTATION, UPDATE_CART_MUTATION };
9
9
  //# sourceMappingURL=cart.d.ts.map
@@ -1,7 +1,7 @@
1
- import * as _apollo_client20 from "@apollo/client";
1
+ import * as _apollo_client18 from "@apollo/client";
2
2
 
3
3
  //#region src/lib/gql/queries/cart.d.ts
4
- declare const GET_CART_QUERY: _apollo_client20.DocumentNode;
4
+ declare const GET_CART_QUERY: _apollo_client18.DocumentNode;
5
5
  //#endregion
6
6
  export { GET_CART_QUERY };
7
7
  //# sourceMappingURL=cart.d.ts.map
@@ -1,7 +1,7 @@
1
- import * as _apollo_client22 from "@apollo/client";
1
+ import * as _apollo_client10 from "@apollo/client";
2
2
 
3
3
  //#region src/lib/gql/queries/collections.d.ts
4
- declare const GET_COLLECTIONS_QUERY: _apollo_client22.DocumentNode;
4
+ declare const GET_COLLECTIONS_QUERY: _apollo_client10.DocumentNode;
5
5
  //#endregion
6
6
  export { GET_COLLECTIONS_QUERY };
7
7
  //# sourceMappingURL=collections.d.ts.map
@@ -1,7 +1,7 @@
1
- import * as _apollo_client21 from "@apollo/client";
1
+ import * as _apollo_client13 from "@apollo/client";
2
2
 
3
3
  //#region src/lib/gql/queries/customer.d.ts
4
- declare const GET_CUSTOMER_QUERY: _apollo_client21.DocumentNode;
4
+ declare const GET_CUSTOMER_QUERY: _apollo_client13.DocumentNode;
5
5
  //#endregion
6
6
  export { GET_CUSTOMER_QUERY };
7
7
  //# sourceMappingURL=customer.d.ts.map
@@ -1,7 +1,7 @@
1
- import * as _apollo_client23 from "@apollo/client";
1
+ import * as _apollo_client17 from "@apollo/client";
2
2
 
3
3
  //#region src/lib/gql/queries/footer.d.ts
4
- declare const GET_FOOTER_QUERY: _apollo_client23.DocumentNode;
4
+ declare const GET_FOOTER_QUERY: _apollo_client17.DocumentNode;
5
5
  //#endregion
6
6
  export { GET_FOOTER_QUERY };
7
7
  //# sourceMappingURL=footer.d.ts.map
@@ -1,8 +1,8 @@
1
- import * as _apollo_client24 from "@apollo/client";
1
+ import * as _apollo_client0 from "@apollo/client";
2
2
 
3
3
  //#region src/lib/gql/queries/product.d.ts
4
- declare const SEARCH_SUGGESTIONS_QUERY: _apollo_client24.DocumentNode;
5
- declare const GET_PRODUCT_CATEGORIES_QUERY: _apollo_client24.DocumentNode;
4
+ declare const SEARCH_SUGGESTIONS_QUERY: _apollo_client0.DocumentNode;
5
+ declare const GET_PRODUCT_CATEGORIES_QUERY: _apollo_client0.DocumentNode;
6
6
  //#endregion
7
7
  export { GET_PRODUCT_CATEGORIES_QUERY, SEARCH_SUGGESTIONS_QUERY };
8
8
  //# sourceMappingURL=product.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"product.d.ts","names":[],"sources":["../../../../src/lib/gql/queries/product.ts"],"sourcesContent":[],"mappings":";;;cAOa,0BASZ,gBAAA,CAToC;cAWxB,8BA4BZ,gBAAA,CA5BwC"}
1
+ {"version":3,"file":"product.d.ts","names":[],"sources":["../../../../src/lib/gql/queries/product.ts"],"sourcesContent":[],"mappings":";;;cAOa,0BASZ,eAAA,CAToC;cAWxB,8BA4BZ,eAAA,CA5BwC"}
@@ -1,6 +1,6 @@
1
1
  //#region src/lib/utils/env.ts
2
2
  const getBaseURL = () => {
3
- return process.env.RENDER_EXTERNAL_URL || process.env.NEXT_PUBLIC_BASE_URL || "https://localhost:8000";
3
+ return process.env.NEXT_PUBLIC_BASE_URL || process.env.RENDER_EXTERNAL_URL || "https://localhost:8000";
4
4
  };
5
5
 
6
6
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"env.js","names":[],"sources":["../../../src/lib/utils/env.ts"],"sourcesContent":["export const getBaseURL = () => {\n return (\n process.env.RENDER_EXTERNAL_URL ||\n process.env.NEXT_PUBLIC_BASE_URL ||\n 'https://localhost:8000'\n );\n};\n"],"mappings":";AAAA,MAAa,mBAAmB;AAC9B,QACE,QAAQ,IAAI,uBACZ,QAAQ,IAAI,wBACZ"}
1
+ {"version":3,"file":"env.js","names":[],"sources":["../../../src/lib/utils/env.ts"],"sourcesContent":["export const getBaseURL = () => {\n return (\n process.env.NEXT_PUBLIC_BASE_URL ||\n process.env.RENDER_EXTERNAL_URL ||\n 'https://localhost:8000'\n );\n};\n"],"mappings":";AAAA,MAAa,mBAAmB;AAC9B,QACE,QAAQ,IAAI,wBACZ,QAAQ,IAAI,uBACZ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gfed-medusa/sf-lib-common",
3
- "version": "2.0.0",
3
+ "version": "2.1.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1,7 +0,0 @@
1
- import * as react_jsx_runtime1 from "react/jsx-runtime";
2
-
3
- //#region src/components/cart-button/index.d.ts
4
- declare function CartButton(): Promise<react_jsx_runtime1.JSX.Element>;
5
- //#endregion
6
- export { CartButton };
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
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,12 +0,0 @@
1
- import { retrieveCart } from "../../lib/data/cart.js";
2
- import { CartDropdown } from "../cart-dropdown/index.js";
3
- import { jsx } from "react/jsx-runtime";
4
-
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
@@ -1 +0,0 @@
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 +0,0 @@
1
- import { Cart } from "../../types/graphql.js";
2
- import * as react_jsx_runtime2 from "react/jsx-runtime";
3
-
4
- //#region src/components/cart-dropdown/index.d.ts
5
- declare const CartDropdown: ({
6
- cart: cartState
7
- }: {
8
- cart?: Cart | null;
9
- }) => react_jsx_runtime2.JSX.Element;
10
- //#endregion
11
- export { CartDropdown };
12
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
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,196 +0,0 @@
1
- 'use client';
2
-
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";
14
-
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
@@ -1 +0,0 @@
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":"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"}
@@ -1,7 +0,0 @@
1
- import * as react_jsx_runtime17 from "react/jsx-runtime";
2
-
3
- //#region src/components/footer/index.d.ts
4
- declare function Footer(): Promise<react_jsx_runtime17.JSX.Element>;
5
- //#endregion
6
- export { Footer as default };
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
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,110 +0,0 @@
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";
6
- import { jsx, jsxs } from "react/jsx-runtime";
7
- import { Text, clx } from "@medusajs/ui";
8
-
9
- //#region src/components/footer/index.tsx
10
- async function Footer() {
11
- const { collections } = await listCollections();
12
- const productCategories = await listCategories();
13
- const footerContent = await getFooterContent();
14
- return /* @__PURE__ */ jsx("footer", {
15
- className: "border-ui-border-base w-full border-t",
16
- children: /* @__PURE__ */ jsxs("div", {
17
- className: "content-container flex w-full flex-col",
18
- children: [/* @__PURE__ */ jsxs("div", {
19
- className: "xsmall:flex-row flex flex-col items-start justify-between gap-y-6 py-40",
20
- children: [/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(LocalizedClientLink, {
21
- href: "/",
22
- className: "txt-compact-xlarge-plus text-ui-fg-subtle hover:text-ui-fg-base uppercase",
23
- children: footerContent?.storeName || "Medusa Store"
24
- }) }), /* @__PURE__ */ jsxs("div", {
25
- className: "text-small-regular grid grid-cols-2 gap-10 sm:grid-cols-3 md:gap-x-16",
26
- children: [
27
- productCategories && productCategories?.length > 0 && /* @__PURE__ */ jsxs("div", {
28
- className: "flex flex-col gap-y-2",
29
- children: [/* @__PURE__ */ jsx("span", {
30
- className: "txt-ui-fg-base txt-small-plus",
31
- children: "Categories"
32
- }), /* @__PURE__ */ jsx("ul", {
33
- className: "grid grid-cols-1 gap-2",
34
- "data-testid": "footer-categories",
35
- children: productCategories?.slice(0, 6).map((c) => {
36
- if (c.parentCategory) return;
37
- const children = c.categoryChildren?.map((child) => ({
38
- name: child.name,
39
- handle: child.handle,
40
- id: child.id
41
- })) || null;
42
- return /* @__PURE__ */ jsxs("li", {
43
- className: "txt-small text-ui-fg-subtle flex flex-col gap-2",
44
- children: [/* @__PURE__ */ jsx(LocalizedClientLink, {
45
- className: clx("hover:text-ui-fg-base", children && "txt-small-plus"),
46
- href: `/categories/${c.handle}`,
47
- "data-testid": "category-link",
48
- children: c.name
49
- }), children && /* @__PURE__ */ jsx("ul", {
50
- className: "ml-3 grid grid-cols-1 gap-2",
51
- children: children && children.map((child) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(LocalizedClientLink, {
52
- className: "hover:text-ui-fg-base",
53
- href: `/categories/${child.handle}`,
54
- "data-testid": "category-link",
55
- children: child.name
56
- }) }, child.id))
57
- })]
58
- }, c.id);
59
- })
60
- })]
61
- }),
62
- collections && collections.length > 0 && /* @__PURE__ */ jsxs("div", {
63
- className: "flex flex-col gap-y-2",
64
- children: [/* @__PURE__ */ jsx("span", {
65
- className: "txt-ui-fg-base txt-small-plus",
66
- children: "Collections"
67
- }), /* @__PURE__ */ jsx("ul", {
68
- className: clx("txt-small text-ui-fg-subtle grid grid-cols-1 gap-2", { "grid-cols-2": (collections?.length || 0) > 3 }),
69
- children: collections?.slice(0, 6).map((c) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(LocalizedClientLink, {
70
- className: "hover:text-ui-fg-base",
71
- href: `/collections/${c.handle}`,
72
- children: c.title
73
- }) }, c.id))
74
- })]
75
- }),
76
- /* @__PURE__ */ jsxs("div", {
77
- className: "flex flex-col gap-y-2",
78
- children: [/* @__PURE__ */ jsx("span", {
79
- className: "txt-ui-fg-base txt-small-plus",
80
- children: "Medusa"
81
- }), /* @__PURE__ */ jsx("ul", {
82
- className: "txt-small text-ui-fg-subtle grid grid-cols-1 gap-y-2",
83
- children: footerContent?.social && footerContent?.social.map((social, index) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("a", {
84
- href: social.url,
85
- target: "_blank",
86
- rel: "noreferrer",
87
- className: "hover:text-ui-fg-base capitalize",
88
- children: social.text
89
- }) }, index))
90
- })]
91
- })
92
- ]
93
- })]
94
- }), /* @__PURE__ */ jsxs("div", {
95
- className: "text-ui-fg-muted mb-16 flex w-full flex-col gap-4 sm:flex-row sm:items-center sm:justify-between",
96
- children: [/* @__PURE__ */ jsxs(Text, {
97
- className: "txt-compact-small",
98
- children: ["©", `${(/* @__PURE__ */ new Date()).getFullYear()} ${footerContent?.copyright}`]
99
- }), /* @__PURE__ */ jsx("div", {
100
- className: "flex items-center gap-4",
101
- children: footerContent?.poweredByCta && /* @__PURE__ */ jsx(PortableText, { value: footerContent.poweredByCta.text })
102
- })]
103
- })]
104
- })
105
- });
106
- }
107
-
108
- //#endregion
109
- export { Footer as default };
110
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
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,16 +0,0 @@
1
- import { Region } from "../../types/graphql.js";
2
- import { StateType } from "../../lib/hooks/use-toggle-state.js";
3
- import * as react_jsx_runtime19 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_runtime19.JSX.Element;
14
- //#endregion
15
- export { LayoutCountrySelect };
16
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
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,mBAAA,CAAA,GAAA,CAAA,OA0GxE"}
@@ -1,92 +0,0 @@
1
- 'use client';
2
-
3
- import { updateRegion } from "../../lib/data/cart.js";
4
- import { Fragment, useEffect, useMemo, useState } from "react";
5
- import { useParams, usePathname } from "next/navigation";
6
- import { jsx, jsxs } from "react/jsx-runtime";
7
- import { Listbox, ListboxButton, ListboxOption, ListboxOptions, Transition } from "@headlessui/react";
8
- import ReactCountryFlag from "react-country-flag";
9
-
10
- //#region src/components/layout-country-select/index.tsx
11
- const LayoutCountrySelect = ({ toggleState, regions }) => {
12
- const [current, setCurrent] = useState(void 0);
13
- const { countryCode } = useParams();
14
- const currentPath = usePathname().split(`/${countryCode}`)[1] ?? "gb";
15
- const { state, close } = toggleState;
16
- const options = useMemo(() => {
17
- return regions.map((r) => {
18
- return r.countries?.map((c) => ({
19
- country: c?.iso2 ?? void 0,
20
- region: r.id,
21
- label: c?.name ?? void 0
22
- }));
23
- }).flat().sort((a, b) => (a?.label ?? "").localeCompare(b?.label ?? ""));
24
- }, [regions]);
25
- useEffect(() => {
26
- if (countryCode) {
27
- const option = options?.find((o) => o?.country === countryCode);
28
- setCurrent(option);
29
- }
30
- }, [options, countryCode]);
31
- const handleChange = (option) => {
32
- updateRegion(option.country, currentPath);
33
- close();
34
- };
35
- return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs(Listbox, {
36
- as: "span",
37
- onChange: handleChange,
38
- defaultValue: countryCode ? options?.find((o) => o?.country === countryCode) : void 0,
39
- children: [/* @__PURE__ */ jsx(ListboxButton, {
40
- className: "w-full py-1",
41
- children: /* @__PURE__ */ jsxs("div", {
42
- className: "txt-compact-small flex items-start gap-x-2",
43
- children: [/* @__PURE__ */ jsx("span", { children: "Shipping to:" }), current && /* @__PURE__ */ jsxs("span", {
44
- className: "txt-compact-small flex items-center gap-x-2",
45
- children: [/* @__PURE__ */ jsx(ReactCountryFlag, {
46
- svg: true,
47
- style: {
48
- width: "16px",
49
- height: "16px"
50
- },
51
- countryCode: current.country ?? ""
52
- }), current.label]
53
- })]
54
- })
55
- }), /* @__PURE__ */ jsx("div", {
56
- className: "relative flex w-full min-w-[320px]",
57
- children: /* @__PURE__ */ jsx(Transition, {
58
- show: state,
59
- as: Fragment,
60
- leave: "transition ease-in duration-150",
61
- leaveFrom: "opacity-100",
62
- leaveTo: "opacity-0",
63
- children: /* @__PURE__ */ jsx(ListboxOptions, {
64
- className: "text-small-regular no-scrollbar rounded-rounded xsmall:left-auto xsmall:right-0 absolute -bottom-[calc(100%-36px)] left-0 z-[900] max-h-[442px] w-full overflow-y-scroll bg-white text-black uppercase drop-shadow-md",
65
- static: true,
66
- children: options?.map((o, index) => {
67
- return /* @__PURE__ */ jsxs(ListboxOption, {
68
- value: o,
69
- className: "flex cursor-pointer items-center gap-x-2 px-3 py-2 hover:bg-gray-200",
70
- children: [
71
- /* @__PURE__ */ jsx(ReactCountryFlag, {
72
- svg: true,
73
- style: {
74
- width: "16px",
75
- height: "16px"
76
- },
77
- countryCode: o?.country ?? ""
78
- }),
79
- " ",
80
- o?.label
81
- ]
82
- }, index);
83
- })
84
- })
85
- })
86
- })]
87
- }) });
88
- };
89
-
90
- //#endregion
91
- export { LayoutCountrySelect };
92
- //# sourceMappingURL=index.js.map