@tapcart/mobile-components 0.8.45 → 0.8.47
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.
- package/dist/components/hooks/use-infinite-scroll.d.ts +7 -4
- package/dist/components/hooks/use-infinite-scroll.d.ts.map +1 -1
- package/dist/components/hooks/use-infinite-scroll.js +36 -11
- package/dist/components/ui/image.d.ts +1 -3
- package/dist/components/ui/image.d.ts.map +1 -1
- package/dist/components/ui/progress-bar.d.ts.map +1 -1
- package/dist/components/ui/progress-bar.js +17 -7
- package/dist/styles.css +4 -4
- package/package.json +2 -1
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { ReadonlyURLSearchParams } from "next/navigation";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
2
|
+
import { Product } from "app-studio-types";
|
|
3
|
+
import { SearchConfig } from "@tapcart/search-client";
|
|
5
4
|
interface PageData {
|
|
6
5
|
products: Product[];
|
|
7
6
|
cursorBlob?: string;
|
|
@@ -18,6 +17,10 @@ interface UseInfiniteScrollProps {
|
|
|
18
17
|
productLimit: number;
|
|
19
18
|
threshold?: number;
|
|
20
19
|
interval?: number;
|
|
20
|
+
integrations?: SearchConfig[];
|
|
21
|
+
customFetcher?: (...args: any[]) => Promise<any>;
|
|
22
|
+
customGetKey?: (pageIndex: number, previousPageData: any | null, ...args: any[]) => any;
|
|
23
|
+
getProduct: (handle?: string, id?: string) => Promise<Product | undefined>;
|
|
21
24
|
}
|
|
22
25
|
interface UseInfiniteScrollReturn {
|
|
23
26
|
data: PageData[] | undefined;
|
|
@@ -33,6 +36,6 @@ interface UseInfiniteScrollReturn {
|
|
|
33
36
|
}
|
|
34
37
|
export declare const formatSearchParamsAsNextQueryVariables: (searchParams: ReadonlyURLSearchParams) => {};
|
|
35
38
|
declare const constructURL: (apiURL: string) => string;
|
|
36
|
-
declare const useInfiniteScroll: ({ initialData, queryVariables: queryVariableProps, direction, productLimit, threshold, interval, }: UseInfiniteScrollProps) => UseInfiniteScrollReturn;
|
|
39
|
+
declare const useInfiniteScroll: ({ initialData, queryVariables: queryVariableProps, direction, productLimit, threshold, interval, integrations, customFetcher, customGetKey, getProduct, }: UseInfiniteScrollProps) => UseInfiniteScrollReturn;
|
|
37
40
|
export { useInfiniteScroll, constructURL };
|
|
38
41
|
//# sourceMappingURL=use-infinite-scroll.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-infinite-scroll.d.ts","sourceRoot":"","sources":["../../../components/hooks/use-infinite-scroll.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,uBAAuB,EAAmB,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"use-infinite-scroll.d.ts","sourceRoot":"","sources":["../../../components/hooks/use-infinite-scroll.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,uBAAuB,EAAmB,MAAM,iBAAiB,CAAA;AAE1E,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAEL,YAAY,EACb,MAAM,wBAAwB,CAAA;AAI/B,UAAU,QAAQ;IAChB,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,GAAG,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAA;CACxC;AAED,UAAU,sBAAsB;IAC9B,WAAW,EAAE,QAAQ,CAAA;IACrB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACnC,SAAS,EAAE,UAAU,GAAG,YAAY,CAAA;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,YAAY,EAAE,CAAA;IAC7B,aAAa,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAChD,YAAY,CAAC,EAAE,CACb,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,GAAG,GAAG,IAAI,EAC5B,GAAG,IAAI,EAAE,GAAG,EAAE,KACX,GAAG,CAAA;IACR,UAAU,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;CAC3E;AAED,UAAU,uBAAuB;IAC/B,IAAI,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAA;IAC5B,KAAK,EAAE,GAAG,CAAA;IACV,oBAAoB,EAAE,OAAO,CAAA;IAC7B,aAAa,EAAE,OAAO,GAAG,SAAS,CAAA;IAClC,OAAO,EAAE,OAAO,CAAA;IAChB,aAAa,EAAE,OAAO,CAAA;IACtB,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,KAAK,IAAI,CAAA;IAChD,QAAQ,EAAE,OAAO,EAAE,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,YAAY,EAAE,OAAO,CAAA;CACtB;AAED,eAAO,MAAM,sCAAsC,iBACnC,uBAAuB,OAsBtC,CAAA;AAED,QAAA,MAAM,YAAY,WAAY,MAAM,WAGnC,CAAA;AAED,QAAA,MAAM,iBAAiB,8JAWpB,sBAAsB,KAAG,uBA8I3B,CAAA;AAED,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -13,6 +13,8 @@ import useSWRInfinite from "swr/infinite";
|
|
|
13
13
|
import { useInView } from "react-intersection-observer";
|
|
14
14
|
import { useSearchParams } from "next/navigation";
|
|
15
15
|
import { throttle } from "lodash";
|
|
16
|
+
import { getSearchClientFromIntegrations, } from "@tapcart/search-client";
|
|
17
|
+
const searchClientMap = {};
|
|
16
18
|
export const formatSearchParamsAsNextQueryVariables = (searchParams) => {
|
|
17
19
|
const formattedParams = {};
|
|
18
20
|
if (!searchParams)
|
|
@@ -42,19 +44,32 @@ const constructURL = (apiURL) => {
|
|
|
42
44
|
return url.toString();
|
|
43
45
|
};
|
|
44
46
|
const useInfiniteScroll = ({ initialData, queryVariables: queryVariableProps, direction = "vertical", productLimit = Infinity, threshold = 0.01, interval = 33, // ~2 frames
|
|
45
|
-
}) => {
|
|
46
|
-
var _a, _b, _c, _d, _e;
|
|
47
|
+
integrations = [], customFetcher, customGetKey, getProduct, }) => {
|
|
48
|
+
var _a, _b, _c, _d, _e, _f;
|
|
47
49
|
const searchParams = useSearchParams();
|
|
48
50
|
const productCount = useRef(0);
|
|
51
|
+
const mapKey = JSON.stringify({ integrations, queryVariableProps });
|
|
52
|
+
let searchClient;
|
|
53
|
+
if (mapKey in searchClientMap) {
|
|
54
|
+
searchClient = searchClientMap[mapKey];
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
searchClient = getSearchClientFromIntegrations({
|
|
58
|
+
configs: integrations,
|
|
59
|
+
queryParams: queryVariableProps,
|
|
60
|
+
getProduct,
|
|
61
|
+
});
|
|
62
|
+
searchClientMap[mapKey] = searchClient;
|
|
63
|
+
}
|
|
49
64
|
const { ref, inView } = useInView({
|
|
50
65
|
rootMargin: direction === "vertical" ? "600px" : "0px 420px 0px 0px",
|
|
51
66
|
threshold: threshold,
|
|
52
67
|
});
|
|
53
68
|
const queryVariables = useMemo(() => {
|
|
54
69
|
const formattedParams = formatSearchParamsAsNextQueryVariables(searchParams);
|
|
55
|
-
return Object.assign(Object.assign({}, queryVariableProps), { searchParams: formattedParams });
|
|
70
|
+
return Object.assign(Object.assign({}, queryVariableProps), { searchParams: formattedParams, productCount: productCount });
|
|
56
71
|
}, [queryVariableProps, searchParams]);
|
|
57
|
-
|
|
72
|
+
let getKey = (pageIndex, previousPageData, queryVariables) => {
|
|
58
73
|
var _a;
|
|
59
74
|
if (pageIndex === 0) {
|
|
60
75
|
return Object.assign({}, queryVariables);
|
|
@@ -63,27 +78,37 @@ const useInfiniteScroll = ({ initialData, queryVariables: queryVariableProps, di
|
|
|
63
78
|
return null;
|
|
64
79
|
return Object.assign(Object.assign({}, queryVariables), { cursorBlob: previousPageData.pageData.cursorBlob });
|
|
65
80
|
};
|
|
66
|
-
|
|
67
|
-
|
|
81
|
+
if (customGetKey || (searchClient === null || searchClient === void 0 ? void 0 : searchClient.getKey)) {
|
|
82
|
+
getKey = customGetKey || searchClient.getKey;
|
|
83
|
+
}
|
|
84
|
+
let fetcher = (body) => __awaiter(void 0, void 0, void 0, function* () {
|
|
68
85
|
const res = yield fetch(constructURL(initialData.apiURL), {
|
|
69
86
|
method: "POST",
|
|
70
87
|
body: JSON.stringify(body),
|
|
71
88
|
});
|
|
72
89
|
const data = yield res.json();
|
|
73
|
-
productCount.current += (_g = (_f = data === null || data === void 0 ? void 0 : data.products) === null || _f === void 0 ? void 0 : _f.length) !== null && _g !== void 0 ? _g : 0;
|
|
74
90
|
return data;
|
|
75
91
|
});
|
|
92
|
+
if (customFetcher || (searchClient === null || searchClient === void 0 ? void 0 : searchClient.fetcher)) {
|
|
93
|
+
fetcher = customFetcher || searchClient.fetcher;
|
|
94
|
+
}
|
|
76
95
|
const { data, error, size, setSize, isLoading, isValidating, } = useSWRInfinite((pageIndex, previousPageData) => getKey(pageIndex, previousPageData, queryVariables), fetcher, {
|
|
77
96
|
revalidateFirstPage: false,
|
|
78
97
|
initialSize: 1,
|
|
79
98
|
});
|
|
99
|
+
productCount.current += (_c = (_b = (_a = data === null || data === void 0 ? void 0 : data[size - 1]) === null || _a === void 0 ? void 0 : _a.products) === null || _b === void 0 ? void 0 : _b.length) !== null && _c !== void 0 ? _c : 0;
|
|
100
|
+
const hasMore = () => {
|
|
101
|
+
var _a, _b;
|
|
102
|
+
if (searchClient) {
|
|
103
|
+
return searchClient.getHasMore();
|
|
104
|
+
}
|
|
105
|
+
return (_b = (_a = data === null || data === void 0 ? void 0 : data[size - 1]) === null || _a === void 0 ? void 0 : _a.pageData) === null || _b === void 0 ? void 0 : _b.cursorBlob;
|
|
106
|
+
};
|
|
80
107
|
const isLoadingInitialData = !data && !error;
|
|
81
108
|
const isLoadingMore = isLoadingInitialData ||
|
|
82
109
|
(size > 0 && data && typeof data[size - 1] === "undefined");
|
|
83
|
-
const isEmpty = ((
|
|
84
|
-
const isEndPointer = data
|
|
85
|
-
? !((_e = (_d = data[data.length - 1]) === null || _d === void 0 ? void 0 : _d.pageData) === null || _e === void 0 ? void 0 : _e.cursorBlob)
|
|
86
|
-
: true;
|
|
110
|
+
const isEmpty = ((_f = (_e = (_d = data === null || data === void 0 ? void 0 : data[0]) === null || _d === void 0 ? void 0 : _d.products) === null || _e === void 0 ? void 0 : _e.length) !== null && _f !== void 0 ? _f : 0) === 0;
|
|
111
|
+
const isEndPointer = data ? !hasMore() : true;
|
|
87
112
|
const isReachingEnd = isEmpty || isEndPointer;
|
|
88
113
|
const isRefreshing = isValidating && data && data.length === size;
|
|
89
114
|
const loadMore = useCallback(() => {
|
|
@@ -35,9 +35,7 @@ type TapcartImageBaseProps = {
|
|
|
35
35
|
* @defaultValue `center`
|
|
36
36
|
*/
|
|
37
37
|
crop?: Crop;
|
|
38
|
-
data?: PartialDeep<ImageType
|
|
39
|
-
recurseIntoArrays: true;
|
|
40
|
-
}>;
|
|
38
|
+
data?: PartialDeep<ImageType>;
|
|
41
39
|
/** A function that returns a URL string for an image.
|
|
42
40
|
*
|
|
43
41
|
* @remarks
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../components/ui/image.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAC5C,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAkC1D,KAAK,aAAa,GAAG;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,gBAAgB,EAAE,MAAM,CAAA;CACzB,CAAA;AAUD,MAAM,MAAM,YAAY,GAAG;IACzB,GAAG,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;IACtB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,YAAY,KAAK,MAAM,CAAA;AAKrD,KAAK,IAAI,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAI1D,MAAM,MAAM,iBAAiB,GAAG,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,GAChE,qBAAqB,CAAA;AAEvB,KAAK,qBAAqB,GAAG;IAC3B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,IAAI,CAAC,EAAE,WAAW,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../components/ui/image.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress-bar.d.ts","sourceRoot":"","sources":["../../../components/ui/progress-bar.tsx"],"names":[],"mappings":"AACA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"progress-bar.d.ts","sourceRoot":"","sources":["../../../components/ui/progress-bar.tsx"],"names":[],"mappings":"AACA,OAAO,KAA8B,MAAM,OAAO,CAAA;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAGhD,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,CAAC,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAA;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,eAAe,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAA;IACpD;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE;QACjB,KAAK,EAAE,MAAM,CAAA;QACb,GAAG,EAAE,MAAM,CAAA;QAEX,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,SAAS,CAAC,EAAE;YACV,KAAK,CAAC,EAAE,MAAM,CAAA;YACd,QAAQ,CAAC,EAAE,MAAM,CAAA;YACjB,UAAU,CAAC,EAAE,MAAM,CAAA;SACpB,CAAA;QACD,WAAW,CAAC,EAAE;YACZ,eAAe,CAAC,EAAE,MAAM,CAAA;YACxB,IAAI,CAAC,EAAE,MAAM,CAAA;SACd,CAAA;QACD,cAAc,CAAC,EAAE,OAAO,CAAA;KACzB,CAAA;CACF;AAID,QAAA,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA8N3C,CAAA;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
|
|
@@ -1,13 +1,23 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useEffect, useState } from "react";
|
|
3
|
+
import React, { useEffect, useState } from "react";
|
|
4
4
|
const NUM_MARKERS = 5;
|
|
5
5
|
const ProgressBar = ({ progress, borderStyle, emptyColor, corners, fillColor, animationDuration = 300, animationEasing = "easeInOut", height = 8, milestoneMarkers, }) => {
|
|
6
6
|
const [clampedProgress, setClampedProgress] = useState(0);
|
|
7
7
|
const [animatedMarkers, setAnimatedMarkers] = useState([]);
|
|
8
8
|
const [previousProgress, setPreviousProgress] = useState(0);
|
|
9
|
+
// Determine the number of markers to use
|
|
10
|
+
const markersCount = React.useMemo(() => {
|
|
11
|
+
if (milestoneMarkers &&
|
|
12
|
+
"start" in milestoneMarkers &&
|
|
13
|
+
"end" in milestoneMarkers &&
|
|
14
|
+
milestoneMarkers.end - milestoneMarkers.start < NUM_MARKERS) {
|
|
15
|
+
return milestoneMarkers.end - milestoneMarkers.start;
|
|
16
|
+
}
|
|
17
|
+
return NUM_MARKERS;
|
|
18
|
+
}, [milestoneMarkers]);
|
|
9
19
|
// Calculate the spacing between markers
|
|
10
|
-
const markerSpacing = 100 /
|
|
20
|
+
const markerSpacing = 100 / markersCount;
|
|
11
21
|
// Set beginning/end padding to half the distance between other markers
|
|
12
22
|
const beginningEndMarkerPadding = markerSpacing / 4;
|
|
13
23
|
useEffect(() => {
|
|
@@ -59,22 +69,22 @@ const ProgressBar = ({ progress, borderStyle, emptyColor, corners, fillColor, an
|
|
|
59
69
|
// Generate evenly spaced markers with evenly distributed values
|
|
60
70
|
const positions = [];
|
|
61
71
|
// Calculate the step between each marker value
|
|
62
|
-
const valueStep = (end - start) /
|
|
63
|
-
// Generate
|
|
64
|
-
for (let i = 0; i <=
|
|
72
|
+
const valueStep = (end - start) / markersCount;
|
|
73
|
+
// Generate markers (including start and end)
|
|
74
|
+
for (let i = 0; i <= markersCount; i++) {
|
|
65
75
|
// Apply padding of half the marker spacing to the first and last markers
|
|
66
76
|
let position;
|
|
67
77
|
if (i === 0) {
|
|
68
78
|
position = beginningEndMarkerPadding; // Half spacing padding from the start
|
|
69
79
|
}
|
|
70
|
-
else if (i ===
|
|
80
|
+
else if (i === markersCount) {
|
|
71
81
|
position = 100 - beginningEndMarkerPadding; // Half spacing padding from the end
|
|
72
82
|
}
|
|
73
83
|
else {
|
|
74
84
|
// Distribute the remaining markers evenly between the padded start and end
|
|
75
85
|
position =
|
|
76
86
|
beginningEndMarkerPadding +
|
|
77
|
-
((100 - 2 * beginningEndMarkerPadding) * i) /
|
|
87
|
+
((100 - 2 * beginningEndMarkerPadding) * i) / markersCount;
|
|
78
88
|
}
|
|
79
89
|
const value = start + valueStep * i;
|
|
80
90
|
positions.push({ value, position });
|
package/dist/styles.css
CHANGED
|
@@ -2487,7 +2487,7 @@ body::-webkit-scrollbar {
|
|
|
2487
2487
|
border-bottom-width: 0px;
|
|
2488
2488
|
}
|
|
2489
2489
|
|
|
2490
|
-
.placeholder-shown\:\!truncate:-moz-placeholder
|
|
2490
|
+
.placeholder-shown\:\!truncate:-moz-placeholder {
|
|
2491
2491
|
overflow: hidden !important;
|
|
2492
2492
|
text-overflow: ellipsis !important;
|
|
2493
2493
|
white-space: nowrap !important;
|
|
@@ -2499,7 +2499,7 @@ body::-webkit-scrollbar {
|
|
|
2499
2499
|
white-space: nowrap !important;
|
|
2500
2500
|
}
|
|
2501
2501
|
|
|
2502
|
-
.placeholder-shown\:p-4:-moz-placeholder
|
|
2502
|
+
.placeholder-shown\:p-4:-moz-placeholder {
|
|
2503
2503
|
padding: 1rem;
|
|
2504
2504
|
}
|
|
2505
2505
|
|
|
@@ -2507,7 +2507,7 @@ body::-webkit-scrollbar {
|
|
|
2507
2507
|
padding: 1rem;
|
|
2508
2508
|
}
|
|
2509
2509
|
|
|
2510
|
-
.placeholder-shown\:text-textColors-secondaryColor:-moz-placeholder
|
|
2510
|
+
.placeholder-shown\:text-textColors-secondaryColor:-moz-placeholder {
|
|
2511
2511
|
color: var(--textColors-secondaryColor, #727272ff);
|
|
2512
2512
|
}
|
|
2513
2513
|
|
|
@@ -2683,7 +2683,7 @@ body::-webkit-scrollbar {
|
|
|
2683
2683
|
--tw-ring-offset-color: #dc2626;
|
|
2684
2684
|
}
|
|
2685
2685
|
|
|
2686
|
-
.peer:-moz-placeholder
|
|
2686
|
+
.peer:-moz-placeholder ~ .peer-placeholder-shown\:opacity-0 {
|
|
2687
2687
|
opacity: 0;
|
|
2688
2688
|
}
|
|
2689
2689
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tapcart/mobile-components",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.47",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"style": "dist/styles.css",
|
|
@@ -73,6 +73,7 @@
|
|
|
73
73
|
"@tabler/icons-react": "^3.2.0",
|
|
74
74
|
"@tanstack/react-virtual": "^3.13.6",
|
|
75
75
|
"@tapcart/app-studio-sdk": "^2.0.0",
|
|
76
|
+
"@tapcart/search-client": "workspace:*",
|
|
76
77
|
"apple-pay-button": "^1.1.7",
|
|
77
78
|
"class-variance-authority": "^0.6.0",
|
|
78
79
|
"clsx": "^1.2.1",
|