@storepecker/storefront-core 2.3.5 → 2.4.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 (75) hide show
  1. package/dist/api/index.cjs +28 -24
  2. package/dist/api/index.d.cts +2 -1
  3. package/dist/api/index.d.ts +2 -1
  4. package/dist/api/index.js +1 -1
  5. package/dist/checkout/index.cjs +22 -22
  6. package/dist/checkout/index.js +2 -2
  7. package/dist/{chunk-BTT3XQ32.cjs → chunk-33TWVRZE.cjs} +6 -6
  8. package/dist/chunk-3YRSHPM6.cjs +34 -0
  9. package/dist/chunk-5NUDTIQ2.js +9 -0
  10. package/dist/{chunk-ILVGYHNI.js → chunk-6Q7QMPOQ.js} +2 -1
  11. package/dist/{chunk-HTFVROIV.cjs → chunk-7UK3E7SL.cjs} +6 -0
  12. package/dist/chunk-B3BXKMQA.cjs +271 -0
  13. package/dist/chunk-BTR3HLL4.js +14 -0
  14. package/dist/chunk-DODFO744.cjs +11 -0
  15. package/dist/chunk-EGFOTJPC.js +22 -0
  16. package/dist/{chunk-YUPBTD4M.js → chunk-F45S7UWC.js} +1 -139
  17. package/dist/chunk-HAQWCNDY.cjs +24 -0
  18. package/dist/{chunk-Y4NGR42Z.js → chunk-HUIT4JCR.js} +1 -1
  19. package/dist/{chunk-TF2KMTB6.js → chunk-JRYWZMNT.js} +1 -1
  20. package/dist/{chunk-JCOOINQF.cjs → chunk-KLNKIQQM.cjs} +4 -3
  21. package/dist/chunk-L43KF3AC.js +269 -0
  22. package/dist/chunk-LHF5BSWO.cjs +16 -0
  23. package/dist/chunk-LJUGNSQQ.cjs +149 -0
  24. package/dist/chunk-NA5GT4D3.js +75 -0
  25. package/dist/chunk-OSM73ETC.js +139 -0
  26. package/dist/{chunk-4CVKE6CC.cjs → chunk-OTMTHA5C.cjs} +0 -147
  27. package/dist/{chunk-JH4JJBXE.cjs → chunk-TTIQRDHX.cjs} +2 -2
  28. package/dist/chunk-U7EXLQCT.js +32 -0
  29. package/dist/{chunk-LW3V53WJ.js → chunk-UVU7H4E6.js} +6 -1
  30. package/dist/chunk-V447PVRV.cjs +308 -0
  31. package/dist/chunk-VWQR3A7V.cjs +81 -0
  32. package/dist/chunk-YK4M3SFP.js +301 -0
  33. package/dist/components/address-form.cjs +17 -0
  34. package/dist/components/address-form.css +329 -0
  35. package/dist/components/address-form.d.cts +33 -0
  36. package/dist/components/address-form.d.ts +33 -0
  37. package/dist/components/address-form.js +11 -0
  38. package/dist/components/digital-product-download-modal.cjs +8 -0
  39. package/dist/components/digital-product-download-modal.d.cts +15 -0
  40. package/dist/components/digital-product-download-modal.d.ts +15 -0
  41. package/dist/components/digital-product-download-modal.js +2 -0
  42. package/dist/components/index.cjs +35 -684
  43. package/dist/components/index.d.cts +14 -82
  44. package/dist/components/index.d.ts +14 -82
  45. package/dist/components/index.js +11 -678
  46. package/dist/components/search-dropdown.cjs +7 -0
  47. package/dist/components/search-dropdown.css +200 -0
  48. package/dist/components/search-dropdown.d.cts +28 -0
  49. package/dist/components/search-dropdown.d.ts +28 -0
  50. package/dist/components/search-dropdown.js +1 -0
  51. package/dist/components/share-button.cjs +9 -0
  52. package/dist/components/share-button.d.cts +11 -0
  53. package/dist/components/share-button.d.ts +11 -0
  54. package/dist/components/share-button.js +3 -0
  55. package/dist/components/share-icon.cjs +7 -0
  56. package/dist/components/share-icon.d.cts +9 -0
  57. package/dist/components/share-icon.d.ts +9 -0
  58. package/dist/components/share-icon.js +1 -0
  59. package/dist/components/theme-data-initializer.cjs +8 -0
  60. package/dist/components/theme-data-initializer.d.cts +12 -0
  61. package/dist/components/theme-data-initializer.d.ts +12 -0
  62. package/dist/components/theme-data-initializer.js +2 -0
  63. package/dist/hooks/index.cjs +18 -17
  64. package/dist/hooks/index.js +6 -5
  65. package/dist/pixelEvents-Bo-VjAx8.d.ts +371 -0
  66. package/dist/pixelEvents-C1rFPOwb.d.cts +371 -0
  67. package/dist/store/index.cjs +10 -5
  68. package/dist/store/index.d.cts +10 -1
  69. package/dist/store/index.d.ts +10 -1
  70. package/dist/store/index.js +3 -2
  71. package/dist/utils/index.cjs +44 -43
  72. package/dist/utils/index.d.cts +7 -370
  73. package/dist/utils/index.d.ts +7 -370
  74. package/dist/utils/index.js +3 -2
  75. package/package.json +49 -1
@@ -0,0 +1,301 @@
1
+ import { useState, useRef, useMemo, useCallback, useEffect } from 'react';
2
+ import clsx from 'clsx';
3
+ import { jsx, jsxs } from 'react/jsx-runtime';
4
+
5
+ // src/components/search-dropdown/search-dropdown.tsx
6
+
7
+ // src/components/search-dropdown/search-dropdown.module.css
8
+ var search_dropdown_default = {};
9
+ function DownChevron({
10
+ width = 24,
11
+ height = 24,
12
+ className
13
+ }) {
14
+ return /* @__PURE__ */ jsx(
15
+ "svg",
16
+ {
17
+ fill: "currentColor",
18
+ height,
19
+ width,
20
+ xmlns: "http://www.w3.org/2000/svg",
21
+ xmlnsXlink: "http://www.w3.org/1999/xlink",
22
+ viewBox: "0 0 407.437 407.437",
23
+ xmlSpace: "preserve",
24
+ className,
25
+ children: /* @__PURE__ */ jsx(
26
+ "polygon",
27
+ {
28
+ points: "386.258,91.567 203.718,273.512 21.179,91.567 0,112.815 203.718,315.87 407.437,112.815 ",
29
+ strokeWidth: "2"
30
+ }
31
+ )
32
+ }
33
+ );
34
+ }
35
+ function SearchIcon({
36
+ width = 24,
37
+ height = 24,
38
+ className
39
+ }) {
40
+ return /* @__PURE__ */ jsxs(
41
+ "svg",
42
+ {
43
+ width,
44
+ height,
45
+ viewBox: "0 0 24 24",
46
+ fill: "none",
47
+ xmlns: "http://www.w3.org/2000/svg",
48
+ className,
49
+ children: [
50
+ /* @__PURE__ */ jsx(
51
+ "path",
52
+ {
53
+ d: "M17.5 17.5L22 22",
54
+ stroke: "currentColor",
55
+ strokeWidth: "1.5",
56
+ strokeLinecap: "round",
57
+ strokeLinejoin: "round"
58
+ }
59
+ ),
60
+ /* @__PURE__ */ jsx(
61
+ "path",
62
+ {
63
+ d: "M20 11C20 6.02944 15.9706 2 11 2C6.02944 2 2 6.02944 2 11C2 15.9706 6.02944 20 11 20C15.9706 20 20 15.9706 20 11Z",
64
+ stroke: "currentColor",
65
+ strokeWidth: "1.5",
66
+ strokeLinejoin: "round"
67
+ }
68
+ )
69
+ ]
70
+ }
71
+ );
72
+ }
73
+ var SearchDropdown = ({
74
+ options,
75
+ value,
76
+ onChange,
77
+ placeholder = "Select an option",
78
+ searchPlaceholder = "Search...",
79
+ className,
80
+ disabled = false,
81
+ error,
82
+ label,
83
+ name,
84
+ renderOption,
85
+ renderSelected,
86
+ filterFunction,
87
+ emptyMessage = "No options found",
88
+ maxHeight = "300px"
89
+ }) => {
90
+ const [isOpen, setIsOpen] = useState(false);
91
+ const [searchTerm, setSearchTerm] = useState("");
92
+ const [focusedIndex, setFocusedIndex] = useState(-1);
93
+ const dropdownRef = useRef(null);
94
+ const searchInputRef = useRef(null);
95
+ const optionsListRef = useRef(null);
96
+ const selectedOption = useMemo(
97
+ () => options.find((opt) => opt.value === value) || null,
98
+ [options, value]
99
+ );
100
+ const defaultFilter = useCallback(
101
+ (option, term) => {
102
+ return option.label.toLowerCase().includes(term.toLowerCase());
103
+ },
104
+ []
105
+ );
106
+ const filter = filterFunction || defaultFilter;
107
+ const filteredOptions = useMemo(() => {
108
+ if (!searchTerm.trim()) return options;
109
+ return options.filter((option) => filter(option, searchTerm));
110
+ }, [options, searchTerm, filter]);
111
+ useEffect(() => {
112
+ function handleClickOutside(event) {
113
+ if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
114
+ setIsOpen(false);
115
+ setSearchTerm("");
116
+ setFocusedIndex(-1);
117
+ }
118
+ }
119
+ if (isOpen) {
120
+ document.addEventListener("mousedown", handleClickOutside);
121
+ setTimeout(() => {
122
+ searchInputRef.current?.focus();
123
+ }, 0);
124
+ }
125
+ return () => {
126
+ document.removeEventListener("mousedown", handleClickOutside);
127
+ };
128
+ }, [isOpen]);
129
+ const handleSelect = useCallback(
130
+ (option) => {
131
+ if (option.disabled) return;
132
+ onChange?.(option.value, option);
133
+ setIsOpen(false);
134
+ setSearchTerm("");
135
+ setFocusedIndex(-1);
136
+ },
137
+ [onChange]
138
+ );
139
+ useEffect(() => {
140
+ function handleKeyDown(event) {
141
+ if (!isOpen) return;
142
+ switch (event.key) {
143
+ case "ArrowDown":
144
+ event.preventDefault();
145
+ setFocusedIndex(
146
+ (prev) => prev < filteredOptions.length - 1 ? prev + 1 : prev
147
+ );
148
+ break;
149
+ case "ArrowUp":
150
+ event.preventDefault();
151
+ setFocusedIndex((prev) => prev > 0 ? prev - 1 : -1);
152
+ break;
153
+ case "Enter":
154
+ event.preventDefault();
155
+ if (focusedIndex >= 0 && focusedIndex < filteredOptions.length) {
156
+ handleSelect(filteredOptions[focusedIndex]);
157
+ }
158
+ break;
159
+ case "Escape":
160
+ event.preventDefault();
161
+ setIsOpen(false);
162
+ setSearchTerm("");
163
+ setFocusedIndex(-1);
164
+ break;
165
+ }
166
+ }
167
+ if (isOpen) {
168
+ document.addEventListener("keydown", handleKeyDown);
169
+ }
170
+ return () => {
171
+ document.removeEventListener("keydown", handleKeyDown);
172
+ };
173
+ }, [isOpen, filteredOptions, focusedIndex, handleSelect]);
174
+ useEffect(() => {
175
+ if (focusedIndex >= 0 && optionsListRef.current) {
176
+ const focusedElement = optionsListRef.current.children[focusedIndex];
177
+ if (focusedElement) {
178
+ focusedElement.scrollIntoView({
179
+ behavior: "smooth",
180
+ block: "nearest"
181
+ });
182
+ }
183
+ }
184
+ }, [focusedIndex]);
185
+ const handleToggle = () => {
186
+ if (disabled) return;
187
+ setIsOpen((prev) => !prev);
188
+ if (!isOpen) {
189
+ setSearchTerm("");
190
+ setFocusedIndex(-1);
191
+ }
192
+ };
193
+ const handleSearchChange = (e) => {
194
+ setSearchTerm(e.target.value);
195
+ setFocusedIndex(-1);
196
+ };
197
+ const handleOptionMouseEnter = (index) => {
198
+ setFocusedIndex(index);
199
+ };
200
+ return /* @__PURE__ */ jsxs(
201
+ "div",
202
+ {
203
+ ref: dropdownRef,
204
+ className: clsx(search_dropdown_default.searchDropdown, className, {
205
+ [search_dropdown_default.disabled]: disabled,
206
+ [search_dropdown_default.error]: error,
207
+ [search_dropdown_default.open]: isOpen
208
+ }),
209
+ children: [
210
+ label && /* @__PURE__ */ jsx("label", { className: search_dropdown_default.label, htmlFor: name, children: label }),
211
+ /* @__PURE__ */ jsxs("div", { className: search_dropdown_default.dropdownContainer, children: [
212
+ /* @__PURE__ */ jsxs(
213
+ "button",
214
+ {
215
+ type: "button",
216
+ className: search_dropdown_default.dropdownButton,
217
+ onClick: handleToggle,
218
+ disabled,
219
+ "aria-expanded": isOpen,
220
+ "aria-haspopup": "listbox",
221
+ "aria-label": label || placeholder,
222
+ id: name,
223
+ children: [
224
+ /* @__PURE__ */ jsx("span", { className: search_dropdown_default.selectedValue, children: selectedOption ? renderSelected ? renderSelected(selectedOption) : selectedOption.label : placeholder }),
225
+ /* @__PURE__ */ jsx(
226
+ DownChevron,
227
+ {
228
+ width: 16,
229
+ height: 16,
230
+ className: clsx(search_dropdown_default.chevron, {
231
+ [search_dropdown_default.chevronOpen]: isOpen
232
+ })
233
+ }
234
+ )
235
+ ]
236
+ }
237
+ ),
238
+ isOpen && /* @__PURE__ */ jsxs("div", { className: search_dropdown_default.dropdownMenu, style: { maxHeight }, children: [
239
+ /* @__PURE__ */ jsxs("div", { className: search_dropdown_default.searchContainer, children: [
240
+ /* @__PURE__ */ jsx(
241
+ SearchIcon,
242
+ {
243
+ width: 16,
244
+ height: 16,
245
+ className: search_dropdown_default.searchIcon
246
+ }
247
+ ),
248
+ /* @__PURE__ */ jsx(
249
+ "input",
250
+ {
251
+ ref: searchInputRef,
252
+ type: "text",
253
+ className: search_dropdown_default.searchInput,
254
+ placeholder: searchPlaceholder,
255
+ value: searchTerm,
256
+ onChange: handleSearchChange,
257
+ onClick: (e) => e.stopPropagation(),
258
+ onKeyDown: (e) => {
259
+ if (e.key === "Enter" && filteredOptions.length === 1) {
260
+ e.preventDefault();
261
+ handleSelect(filteredOptions[0]);
262
+ }
263
+ },
264
+ autoComplete: "off"
265
+ }
266
+ )
267
+ ] }),
268
+ /* @__PURE__ */ jsx(
269
+ "ul",
270
+ {
271
+ ref: optionsListRef,
272
+ className: search_dropdown_default.optionsList,
273
+ role: "listbox",
274
+ children: filteredOptions.length > 0 ? filteredOptions.map((option, index) => /* @__PURE__ */ jsx(
275
+ "li",
276
+ {
277
+ className: clsx(search_dropdown_default.option, {
278
+ [search_dropdown_default.optionSelected]: option.value === value,
279
+ [search_dropdown_default.optionFocused]: index === focusedIndex,
280
+ [search_dropdown_default.optionDisabled]: option.disabled
281
+ }),
282
+ onClick: () => handleSelect(option),
283
+ onMouseEnter: () => handleOptionMouseEnter(index),
284
+ role: "option",
285
+ "aria-selected": option.value === value,
286
+ children: renderOption ? renderOption(option) : option.label
287
+ },
288
+ option.value
289
+ )) : /* @__PURE__ */ jsx("li", { className: search_dropdown_default.emptyMessage, children: emptyMessage })
290
+ }
291
+ )
292
+ ] })
293
+ ] }),
294
+ error && /* @__PURE__ */ jsx("span", { className: search_dropdown_default.errorMessage, children: error })
295
+ ]
296
+ }
297
+ );
298
+ };
299
+ var search_dropdown_default2 = SearchDropdown;
300
+
301
+ export { DownChevron, search_dropdown_default2 as search_dropdown_default };
@@ -0,0 +1,17 @@
1
+ 'use strict';
2
+
3
+ var chunkB3BXKMQA_cjs = require('../chunk-B3BXKMQA.cjs');
4
+ require('../chunk-V447PVRV.cjs');
5
+ require('../chunk-KLNKIQQM.cjs');
6
+ require('../chunk-RDUT4W3B.cjs');
7
+ require('../chunk-LJUGNSQQ.cjs');
8
+ require('../chunk-OTMTHA5C.cjs');
9
+ require('../chunk-TB72NPRM.cjs');
10
+ require('../chunk-ECHV2JSY.cjs');
11
+ require('../chunk-BBRXE57K.cjs');
12
+ require('../chunk-NE3ZHELZ.cjs');
13
+ require('../chunk-N3CTXRFT.cjs');
14
+
15
+
16
+
17
+ module.exports = chunkB3BXKMQA_cjs.address_form_default;
@@ -0,0 +1,329 @@
1
+ /* src/components/address-form/address-form.module.css */
2
+ .addressForm {
3
+ font-family: var(--body-font, "Inter", sans-serif);
4
+ }
5
+ .formBody {
6
+ max-height: 350px;
7
+ overflow-y: auto;
8
+ }
9
+ @media screen and (min-width: 640px) {
10
+ .formBody {
11
+ max-height: 480px;
12
+ }
13
+ }
14
+ .formGroup {
15
+ position: relative;
16
+ margin-bottom: 1.5rem;
17
+ }
18
+ .formGroup label {
19
+ display: block;
20
+ color: var(--text-primary, #000);
21
+ font-size: var(--fs-md, 14px);
22
+ margin-bottom: 0.5rem;
23
+ }
24
+ .formControl {
25
+ display: block;
26
+ width: 100%;
27
+ padding: 0.5rem 0.625rem;
28
+ color: var(--text-primary, #000);
29
+ font-size: var(--fs-md, 14px);
30
+ transition: all 0.2s ease-in;
31
+ border: 1px solid var(--bg-border, #d0d0d0);
32
+ border-radius: 4px;
33
+ outline: none;
34
+ box-shadow: none;
35
+ background-color: #fafafa;
36
+ }
37
+ .formControl:focus {
38
+ border-color: var(--text-primary, #000);
39
+ }
40
+ .formControl::placeholder {
41
+ color: var(--text-secondary, #666);
42
+ }
43
+ .error {
44
+ font-size: 0.75rem;
45
+ color: var(--error, #bc3232);
46
+ position: absolute;
47
+ font-weight: 400;
48
+ bottom: -20px;
49
+ left: 0;
50
+ }
51
+ .row {
52
+ display: flex;
53
+ gap: 0.75rem;
54
+ }
55
+ .col {
56
+ flex: 1;
57
+ min-width: 0;
58
+ }
59
+ .phoneRow {
60
+ display: flex;
61
+ gap: 0.5rem;
62
+ }
63
+ .phoneCodeCol {
64
+ width: 8rem;
65
+ flex-shrink: 0;
66
+ }
67
+ .phoneInputCol {
68
+ flex: 1;
69
+ min-width: 0;
70
+ }
71
+ .divider {
72
+ border: none;
73
+ border-top: 1px solid var(--bg-border, #d0d0d0);
74
+ margin: 0.75rem 0;
75
+ }
76
+ .checkboxLabel {
77
+ display: flex;
78
+ align-items: center;
79
+ font-size: var(--fs-md, 14px);
80
+ cursor: pointer;
81
+ gap: 0.5rem;
82
+ }
83
+ .checkboxInput {
84
+ width: 16px;
85
+ height: 16px;
86
+ accent-color: var(--primary, #003d29);
87
+ cursor: pointer;
88
+ }
89
+ .formFooter {
90
+ display: flex;
91
+ align-items: center;
92
+ justify-content: flex-end;
93
+ gap: 0.5rem;
94
+ padding-top: 0.75rem;
95
+ }
96
+ .cancelBtn {
97
+ padding: 0.5rem 1rem;
98
+ border: none;
99
+ border-radius: 4px;
100
+ background-color: var(--bg-secondary, rgb(243 244 246));
101
+ color: var(--text-primary, #000);
102
+ font-size: var(--fs-md, 14px);
103
+ cursor: pointer;
104
+ transition: var(--transition-all, all 0.25s ease);
105
+ }
106
+ .cancelBtn:hover {
107
+ background-color: var(--bg-border, #d0d0d0);
108
+ }
109
+ .selectWrapper {
110
+ position: relative;
111
+ }
112
+ .selectArrow {
113
+ position: absolute;
114
+ right: 12px;
115
+ top: 50%;
116
+ transform: translateY(-50%);
117
+ pointer-events: none;
118
+ color: var(--text-secondary, #666);
119
+ }
120
+ .formControl[data-select] {
121
+ -webkit-appearance: none;
122
+ -moz-appearance: none;
123
+ appearance: none;
124
+ padding-right: 2rem;
125
+ }
126
+ .phoneCodeCol .dropdownButton {
127
+ min-height: auto;
128
+ }
129
+
130
+ /* src/components/search-dropdown/search-dropdown.module.css */
131
+ .searchDropdown {
132
+ position: relative;
133
+ width: 100%;
134
+ font-family: var(--body-font, "Inter", sans-serif);
135
+ }
136
+ .label {
137
+ display: block;
138
+ margin-bottom: var(--sm, 8px);
139
+ font-size: var(--fs-md, 14px);
140
+ color: var(--text-secondary, #666);
141
+ font-weight: 400;
142
+ }
143
+ .dropdownContainer {
144
+ position: relative;
145
+ }
146
+ .dropdownButton {
147
+ display: flex;
148
+ align-items: center;
149
+ justify-content: space-between;
150
+ width: 100%;
151
+ padding: 0 var(--smd, 12px);
152
+ font-size: var(--fs-md, 14px);
153
+ color: var(--text-primary, #000);
154
+ background-color: transparent;
155
+ border-radius: var(--xs, 4px);
156
+ cursor: pointer;
157
+ transition: var(--transition-all, all 0.25s ease);
158
+ text-align: left;
159
+ min-height: 38px;
160
+ border: none !important;
161
+ outline: none !important;
162
+ box-shadow: 0px 0px 0px 1px var(--bg-border, #d0d0d0);
163
+ }
164
+ .dropdownButton:focus {
165
+ outline: none;
166
+ box-shadow: 0px 0px 0px 1.5px var(--bg-dark, #3d3b40);
167
+ }
168
+ .dropdownButton:disabled {
169
+ cursor: not-allowed;
170
+ opacity: 0.6;
171
+ background-color: var(--bg-secondary, rgb(243 244 246));
172
+ }
173
+ .selectedValue {
174
+ flex: 1;
175
+ overflow: hidden;
176
+ text-overflow: ellipsis;
177
+ white-space: nowrap;
178
+ color: var(--text-primary, #000);
179
+ font-weight: 500;
180
+ }
181
+ .chevron {
182
+ flex-shrink: 0;
183
+ margin-left: var(--sm, 8px);
184
+ color: var(--text-secondary, #666);
185
+ transition: transform 0.25s ease;
186
+ }
187
+ .chevronOpen {
188
+ transform: rotate(180deg);
189
+ }
190
+ .dropdownMenu {
191
+ position: absolute;
192
+ top: calc(100% + var(--xs, 4px));
193
+ left: 0;
194
+ right: 0;
195
+ z-index: 1000;
196
+ background-color: var(--bg-primary, #fefefe);
197
+ border: 1px solid var(--bg-border, #d0d0d0);
198
+ border-radius: var(--xs, 4px);
199
+ box-shadow: 0px 4px 12px rgba(0, 0, 0, 0.1);
200
+ overflow: hidden;
201
+ animation: slideDown 0.2s ease-out;
202
+ min-width: 260px;
203
+ }
204
+ @keyframes slideDown {
205
+ from {
206
+ opacity: 0;
207
+ transform: translateY(-8px);
208
+ }
209
+ to {
210
+ opacity: 1;
211
+ transform: translateY(0);
212
+ }
213
+ }
214
+ .searchContainer {
215
+ position: relative;
216
+ padding: var(--sm, 8px);
217
+ border-bottom: 1px solid var(--bg-border, #d0d0d0);
218
+ background-color: var(--bg-primary-smoke, #efefef);
219
+ }
220
+ .searchIcon {
221
+ position: absolute;
222
+ left: var(--md, 16px);
223
+ top: 50%;
224
+ transform: translateY(-50%);
225
+ color: var(--text-secondary, #666);
226
+ pointer-events: none;
227
+ }
228
+ .searchInput {
229
+ width: 100%;
230
+ padding: var(--sm, 8px) var(--sm, 8px) var(--sm, 8px) var(--xl, 32px);
231
+ font-size: var(--fs-md, 14px);
232
+ color: var(--text-primary, #000);
233
+ background-color: var(--bg-primary, #fefefe);
234
+ border: 1px solid var(--bg-border, #d0d0d0);
235
+ border-radius: var(--xs, 4px);
236
+ outline: none;
237
+ transition: var(--transition-all, all 0.25s ease);
238
+ }
239
+ .searchInput:focus {
240
+ border-color: var(--bg-dark, #3d3b40);
241
+ box-shadow: 0px 0px 0px 1.5px var(--bg-dark, #3d3b40);
242
+ }
243
+ .searchInput::placeholder {
244
+ color: var(--text-secondary, #666);
245
+ }
246
+ .optionsList {
247
+ list-style: none;
248
+ padding: 0;
249
+ margin: 0;
250
+ overflow-y: auto;
251
+ max-height: inherit;
252
+ }
253
+ .option {
254
+ padding: var(--smd, 12px) var(--md, 16px);
255
+ font-size: var(--fs-md, 14px);
256
+ color: var(--text-primary, #000);
257
+ cursor: pointer;
258
+ transition: var(--transition-all, all 0.25s ease);
259
+ border-bottom: 1px solid var(--bg-border, #d0d0d0);
260
+ }
261
+ .option:last-child {
262
+ border-bottom: none;
263
+ }
264
+ .option:hover:not(.optionDisabled) {
265
+ background-color: var(--bg-primary-smoke, #efefef);
266
+ color: var(--text-primary, #000);
267
+ }
268
+ .optionFocused:not(.optionDisabled) {
269
+ background-color: var(--primary-lighter, #f0f4f8);
270
+ color: var(--text-primary, #000);
271
+ }
272
+ .optionSelected {
273
+ background-color: var(--primary-lighter2, #d8e4f0);
274
+ color: var(--primary, #003d29);
275
+ font-weight: 500;
276
+ }
277
+ .optionDisabled {
278
+ opacity: 0.5;
279
+ cursor: not-allowed;
280
+ background-color: var(--bg-secondary, rgb(243 244 246));
281
+ }
282
+ .emptyMessage {
283
+ padding: var(--md, 16px);
284
+ text-align: center;
285
+ color: var(--text-secondary, #666);
286
+ font-size: var(--fs-md, 14px);
287
+ font-style: italic;
288
+ }
289
+ .errorMessage {
290
+ display: block;
291
+ margin-top: var(--xs, 4px);
292
+ font-size: var(--fs-sm, 12px);
293
+ color: var(--error, #bc3232);
294
+ position: absolute;
295
+ bottom: -20px;
296
+ left: 0;
297
+ }
298
+ .error .dropdownButton {
299
+ border-color: var(--error, #bc3232);
300
+ }
301
+ .error .dropdownButton:focus {
302
+ border-color: var(--error, #bc3232);
303
+ box-shadow: 0px 0px 0px 1.5px var(--error, #bc3232);
304
+ }
305
+ .disabled {
306
+ opacity: 0.6;
307
+ pointer-events: none;
308
+ }
309
+ .open .dropdownButton {
310
+ border-color: var(--bg-dark, #3d3b40);
311
+ box-shadow: 0px 0px 0px 1.5px var(--bg-dark, #3d3b40);
312
+ }
313
+ .countryCodeDropdown .label {
314
+ display: none;
315
+ }
316
+ .countryCodeDropdown .dropdownButton {
317
+ min-height: auto;
318
+ padding: 0.5rem 0.625rem;
319
+ font-size: var(--fs-md, 14px);
320
+ }
321
+ .countryCodeDropdown .selectedValue {
322
+ font-size: var(--fs-md, 14px);
323
+ font-weight: 500;
324
+ }
325
+ @media screen and (max-width: 768px) {
326
+ .dropdownMenu {
327
+ max-height: 250px;
328
+ }
329
+ }
@@ -0,0 +1,33 @@
1
+ import React__default from 'react';
2
+ import { U as UseAddressFormOptions, u as useAddressForm } from '../useAddressForm-DGbEn91-.cjs';
3
+ import 'formik';
4
+ import '../address-DwBZHzbI.cjs';
5
+
6
+ interface AddressFormRef {
7
+ formik: ReturnType<typeof useAddressForm>["formik"];
8
+ resetForm: () => void;
9
+ }
10
+ interface AddressFormProps extends UseAddressFormOptions {
11
+ /** Custom Button component rendered for the submit action. Receives type, disabled, children. */
12
+ renderButton?: (props: {
13
+ type: "submit";
14
+ disabled: boolean;
15
+ loading: boolean;
16
+ children: React__default.ReactNode;
17
+ }) => React__default.ReactNode;
18
+ /** Called when formik instance is ready (alternative to ref) */
19
+ onFormikReady?: (formik: ReturnType<typeof useAddressForm>["formik"]) => void;
20
+ /** Called when cancel is clicked */
21
+ onCancel?: () => void;
22
+ /** Show cancel button. Default: true */
23
+ showCancel?: boolean;
24
+ /** Show "Make default address" checkbox. Default: true */
25
+ showDefaultCheckbox?: boolean;
26
+ /** Custom class name for the form wrapper */
27
+ className?: string;
28
+ /** Submit button text. Default: "Save" */
29
+ submitLabel?: string;
30
+ }
31
+ declare const AddressForm: React__default.ForwardRefExoticComponent<AddressFormProps & React__default.RefAttributes<AddressFormRef>>;
32
+
33
+ export { type AddressFormProps, type AddressFormRef, AddressForm as default };
@@ -0,0 +1,33 @@
1
+ import React__default from 'react';
2
+ import { U as UseAddressFormOptions, u as useAddressForm } from '../useAddressForm-cO3Au33k.js';
3
+ import 'formik';
4
+ import '../address-DwBZHzbI.js';
5
+
6
+ interface AddressFormRef {
7
+ formik: ReturnType<typeof useAddressForm>["formik"];
8
+ resetForm: () => void;
9
+ }
10
+ interface AddressFormProps extends UseAddressFormOptions {
11
+ /** Custom Button component rendered for the submit action. Receives type, disabled, children. */
12
+ renderButton?: (props: {
13
+ type: "submit";
14
+ disabled: boolean;
15
+ loading: boolean;
16
+ children: React__default.ReactNode;
17
+ }) => React__default.ReactNode;
18
+ /** Called when formik instance is ready (alternative to ref) */
19
+ onFormikReady?: (formik: ReturnType<typeof useAddressForm>["formik"]) => void;
20
+ /** Called when cancel is clicked */
21
+ onCancel?: () => void;
22
+ /** Show cancel button. Default: true */
23
+ showCancel?: boolean;
24
+ /** Show "Make default address" checkbox. Default: true */
25
+ showDefaultCheckbox?: boolean;
26
+ /** Custom class name for the form wrapper */
27
+ className?: string;
28
+ /** Submit button text. Default: "Save" */
29
+ submitLabel?: string;
30
+ }
31
+ declare const AddressForm: React__default.ForwardRefExoticComponent<AddressFormProps & React__default.RefAttributes<AddressFormRef>>;
32
+
33
+ export { type AddressFormProps, type AddressFormRef, AddressForm as default };