@tapcart/mobile-components 0.15.2 → 0.16.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.
@@ -0,0 +1,37 @@
1
+ import * as React from "react";
2
+ export type ButtonKind = "primary" | "secondary" | "outline" | "link" | "destructive";
3
+ export type ButtonSize = "xs" | "sm" | "md" | "lg" | "xl";
4
+ export type ButtonIconSize = "xxs" | "xs" | "sm" | "md" | "lg";
5
+ /** Icon slot for a button. Pass `url` for a custom SVG or a Tabler icon URL. */
6
+ export type ButtonIcon = {
7
+ /** SVG URL — e.g. a Tabler icon from jsDelivr. */
8
+ url?: string;
9
+ /** Icon size token. Defaults to "sm". */
10
+ size?: ButtonIconSize;
11
+ /** Optional color override. */
12
+ color?: string;
13
+ };
14
+ export interface ButtonProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "color"> {
15
+ asChild?: boolean;
16
+ /** Button kind — drives the brand class (color, border, radius). Required for brand styling. */
17
+ kind?: ButtonKind;
18
+ /** Button size — drives the brand size class (font, padding, gap). Defaults to "md". */
19
+ size?: ButtonSize;
20
+ /** Icon rendered before the label. */
21
+ leftIcon?: ButtonIcon;
22
+ /** Icon rendered after the label. */
23
+ rightIcon?: ButtonIcon;
24
+ /** Stretch to 100% container width. Defaults to false. */
25
+ fullWidth?: boolean;
26
+ /** Show loading spinner and disable interaction. */
27
+ loading?: boolean;
28
+ labelClassName?: string;
29
+ labelStyle?: React.CSSProperties;
30
+ onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;
31
+ }
32
+ declare const Button: {
33
+ ({ className, labelClassName, labelStyle, size, kind, leftIcon, rightIcon, asChild, loading, onClick, type, fullWidth, style, disabled, ...props }: ButtonProps): import("react/jsx-runtime").JSX.Element;
34
+ displayName: string;
35
+ };
36
+ export { Button };
37
+ //# sourceMappingURL=button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../components/core/button.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA+B9B,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,WAAW,GACX,SAAS,GACT,MAAM,GACN,aAAa,CAAA;AACjB,MAAM,MAAM,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AACzD,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAE9D,gFAAgF;AAChF,MAAM,MAAM,UAAU,GAAG;IACvB,kDAAkD;IAClD,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,yCAAyC;IACzC,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IACpE,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,gGAAgG;IAChG,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,wFAAwF;IACxF,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,UAAU,CAAA;IACrB,qCAAqC;IACrC,SAAS,CAAC,EAAE,UAAU,CAAA;IACtB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,oDAAoD;IACpD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAChC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAA;CAC/D;AAID,QAAA,MAAM,MAAM;wJAgBT,WAAW;;CAmDb,CAAA;AAID,OAAO,EAAE,MAAM,EAAE,CAAA"}
@@ -0,0 +1,44 @@
1
+ "use client";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
+ import { Slot as RadixSlot } from "@radix-ui/react-slot";
15
+ import { cn } from "../../lib/utils";
16
+ import { Icon } from "../ui/icon";
17
+ // ── Spinner ──
18
+ const Spinner = () => (_jsxs("svg", Object.assign({ className: "h-4 w-4 animate-spin", xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24" }, { children: [_jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), _jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })] })));
19
+ // ── Component ──
20
+ const Button = (_a) => {
21
+ var { className, labelClassName, labelStyle, size = "md", kind, leftIcon, rightIcon, asChild = false, loading, onClick, type, fullWidth = false, style, disabled } = _a, props = __rest(_a, ["className", "labelClassName", "labelStyle", "size", "kind", "leftIcon", "rightIcon", "asChild", "loading", "onClick", "type", "fullWidth", "style", "disabled"]);
22
+ const Slot = asChild ? RadixSlot : "button";
23
+ const kindClass = kind ? `brand-button-${kind}` : "";
24
+ const sizeClass = `brand-button-${size}`;
25
+ const handleClick = onClick
26
+ ? (e) => {
27
+ try {
28
+ onClick(e);
29
+ }
30
+ catch (error) {
31
+ console.error(error);
32
+ }
33
+ }
34
+ : undefined;
35
+ const renderIconSlot = (slot) => (slot === null || slot === void 0 ? void 0 : slot.url) ? (_jsx(Icon, { url: slot.url, size: slot.size || "sm", style: slot.color ? { color: slot.color } : undefined })) : null;
36
+ const renderLabel = () => {
37
+ if (props.children == null)
38
+ return null;
39
+ return (_jsx("span", Object.assign({ className: cn("truncate", labelClassName), style: labelStyle }, { children: props.children })));
40
+ };
41
+ return (_jsxs(Slot, Object.assign({}, props, { type: type, className: cn(kindClass, sizeClass, className), style: Object.assign({ width: fullWidth ? "100%" : "max-content" }, style), onClick: handleClick, disabled: loading || disabled }, { children: [loading && _jsx(Spinner, {}), renderIconSlot(leftIcon), renderLabel(), renderIconSlot(rightIcon)] })));
42
+ };
43
+ Button.displayName = "Button";
44
+ export { Button };
@@ -0,0 +1,15 @@
1
+ import * as React from "react";
2
+ export type HtmlKind = "headline" | "title" | "subtitle" | "body" | "caption" | "header";
3
+ export interface HtmlProps {
4
+ className?: any;
5
+ style?: React.CSSProperties;
6
+ html: string;
7
+ kind?: HtmlKind;
8
+ disableDefaultClasses?: boolean;
9
+ }
10
+ declare function Html({ className, style, html, kind, disableDefaultClasses, }: HtmlProps): import("react/jsx-runtime").JSX.Element;
11
+ declare namespace Html {
12
+ var displayName: string;
13
+ }
14
+ export { Html };
15
+ //# sourceMappingURL=html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../../components/core/html.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,MAAM,MAAM,QAAQ,GAChB,UAAU,GACV,OAAO,GACP,UAAU,GACV,MAAM,GACN,SAAS,GACT,QAAQ,CAAA;AAWZ,MAAM,WAAW,SAAS;IACxB,SAAS,CAAC,EAAE,GAAG,CAAA;IACf,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC;AAED,iBAAS,IAAI,CAAC,EACZ,SAAc,EACd,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,qBAA6B,GAC9B,EAAE,SAAS,2CA2CX;kBAjDQ,IAAI;;;AAqDb,OAAO,EAAE,IAAI,EAAE,CAAA"}
@@ -0,0 +1,45 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import DOMPurify from "dompurify";
4
+ import { cn } from "../../lib/utils";
5
+ const kindToClass = {
6
+ headline: "brand-headline",
7
+ title: "brand-title",
8
+ subtitle: "brand-subtitle",
9
+ body: "brand-body",
10
+ caption: "brand-caption",
11
+ header: "brand-header",
12
+ };
13
+ function Html({ className = "", style, html, kind, disableDefaultClasses = false, }) {
14
+ const cleanHtml = DOMPurify.sanitize(html, {
15
+ ADD_TAGS: [
16
+ "iframe",
17
+ "table",
18
+ "thead",
19
+ "tbody",
20
+ "tr",
21
+ "th",
22
+ "td",
23
+ "tfoot",
24
+ "caption",
25
+ "colgroup",
26
+ "col",
27
+ "img",
28
+ ],
29
+ ADD_ATTR: [
30
+ "allow",
31
+ "allowfullscreen",
32
+ "frameborder",
33
+ "scrolling",
34
+ "src",
35
+ "alt",
36
+ "loading",
37
+ "width",
38
+ "height",
39
+ ],
40
+ });
41
+ const defaultClasses = "grid [&>ul]:list-disc [&>ol]:list-decimal [&>ul]:pl-5 [&>ul>li]:py-1 space-y-1 [&>b]:py-2 [&>p]:py-2";
42
+ return (_jsx("div", { className: cn(disableDefaultClasses ? "" : defaultClasses, kind && kindToClass[kind], className), style: style, dangerouslySetInnerHTML: { __html: cleanHtml } }));
43
+ }
44
+ Html.displayName = "Html";
45
+ export { Html };
@@ -0,0 +1,29 @@
1
+ import * as React from "react";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ type Injections = Record<string, {
4
+ payload: string;
5
+ currencyMetadata?: {
6
+ currency: string;
7
+ locale: string;
8
+ };
9
+ }>;
10
+ declare const textVariants: (props?: ({
11
+ kind?: "title" | "caption" | "body" | "header" | "headline" | "subtitle" | null | undefined;
12
+ } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
13
+ export type TextKind = NonNullable<VariantProps<typeof textVariants>["kind"]>;
14
+ export interface TextProps extends React.HTMLAttributes<HTMLParagraphElement> {
15
+ kind?: TextKind;
16
+ fontColor?: string | null;
17
+ fontFamily?: string | null;
18
+ fontWeight?: number | null;
19
+ fontSize?: number | null;
20
+ textAlignment?: string | null;
21
+ injections?: Injections;
22
+ children?: React.ReactNode;
23
+ }
24
+ declare function Text({ className, kind, fontColor, fontFamily, fontWeight, fontSize, textAlignment, injections, children, style, ...props }: TextProps): import("react/jsx-runtime").JSX.Element;
25
+ declare namespace Text {
26
+ var displayName: string;
27
+ }
28
+ export { Text, textVariants };
29
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../components/core/text.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAQjE,KAAK,UAAU,GAAG,MAAM,CACtB,MAAM,EACN;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAC7E,CAAA;AAgDD,QAAA,MAAM,YAAY;;mFAchB,CAAA;AAEF,MAAM,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AAE7E,MAAM,WAAW,SAAU,SAAQ,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC;IAC3E,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,UAAU,CAAC,EAAE,UAAU,CAAA;IACvB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B;AAED,iBAAS,IAAI,CAAC,EACZ,SAAS,EACT,IAAI,EACJ,SAAS,EACT,UAAU,EACV,UAAU,EACV,QAAQ,EACR,aAAa,EACb,UAAU,EACV,QAAQ,EACR,KAAK,EACL,GAAG,KAAK,EACT,EAAE,SAAS,2CAyCX;kBArDQ,IAAI;;;AAyDb,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,CAAA"}
@@ -0,0 +1,88 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx } from "react/jsx-runtime";
13
+ import * as React from "react";
14
+ import { cva } from "class-variance-authority";
15
+ import { cn } from "../../lib/utils";
16
+ import { useTranslation, getTextTranslation, } from "../contexts/translation-context";
17
+ import { Money } from "../ui/money";
18
+ function injectString(template, injections) {
19
+ if (!injections)
20
+ return undefined;
21
+ if (!Object.entries(injections).length)
22
+ return undefined;
23
+ const parts = [];
24
+ let lastIndex = 0;
25
+ const matches = Array.from(template.matchAll(/\{\{(.*?)\}\}/g));
26
+ matches.forEach((match, index) => {
27
+ const key = match[1];
28
+ const injection = injections[key];
29
+ if (match.index && match.index > lastIndex) {
30
+ parts.push(template.slice(lastIndex, match.index));
31
+ }
32
+ if (injection) {
33
+ if (injection.currencyMetadata) {
34
+ parts.push(_jsx(Money, { price: Number(injection.payload), currency: injection.currencyMetadata.currency || "USD", locale: injection.currencyMetadata.locale || "en-US" }, `price-${index}`));
35
+ }
36
+ else {
37
+ parts.push(injection.payload);
38
+ }
39
+ }
40
+ lastIndex = (match.index || 0) + match[0].length;
41
+ });
42
+ if (lastIndex < template.length) {
43
+ parts.push(template.slice(lastIndex));
44
+ }
45
+ return parts.length ? parts : undefined;
46
+ }
47
+ // V2 kind tokens only — no legacy h1/h2/h3/body-primary/body-secondary/label.
48
+ const textVariants = cva("", {
49
+ variants: {
50
+ kind: {
51
+ headline: "brand-headline",
52
+ title: "brand-title",
53
+ subtitle: "brand-subtitle",
54
+ body: "brand-body",
55
+ caption: "brand-caption",
56
+ header: "brand-header",
57
+ },
58
+ },
59
+ defaultVariants: {
60
+ kind: "body",
61
+ },
62
+ });
63
+ function Text(_a) {
64
+ var _b;
65
+ var { className, kind, fontColor, fontFamily, fontWeight, fontSize, textAlignment, injections, children, style } = _a, props = __rest(_a, ["className", "kind", "fontColor", "fontFamily", "fontWeight", "fontSize", "textAlignment", "injections", "children", "style"]);
66
+ const fontColorOverride = fontColor ? { color: fontColor } : {};
67
+ const fontFamilyOverride = fontFamily ? { fontFamily } : {};
68
+ const fontWeightOverride = fontWeight ? { fontWeight } : {};
69
+ const fontSizeOverride = fontSize ? { fontSize } : {};
70
+ const textAlignmentOverride = textAlignment
71
+ ? { textAlign: textAlignment }
72
+ : {};
73
+ const translations = useTranslation();
74
+ const stringContents = React.Children.toArray(children).join("");
75
+ // Translate first, then resolve {{injections}} against the translated text
76
+ // so injected values land in the correct localized string.
77
+ const textContents = getTextTranslation({
78
+ text: stringContents,
79
+ translations,
80
+ });
81
+ const injectContents = injectString(textContents !== null && textContents !== void 0 ? textContents : stringContents, injections);
82
+ // Nullish coalescing so an empty translated string stays valid; fall back to
83
+ // children only when the resolved result is null/undefined.
84
+ const content = (_b = injectContents !== null && injectContents !== void 0 ? injectContents : textContents) !== null && _b !== void 0 ? _b : children;
85
+ return (_jsx("p", Object.assign({ className: cn(textVariants({ kind }), className), style: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, style), fontColorOverride), fontFamilyOverride), fontWeightOverride), fontSizeOverride), textAlignmentOverride) }, props, { children: content })));
86
+ }
87
+ Text.displayName = "Text";
88
+ export { Text, textVariants };
@@ -100,8 +100,9 @@ interface UseSearchAnalyticsImpressionParams {
100
100
  emitProductImpression?: (payload: EmitProductInteractionPayload) => void;
101
101
  surface?: string;
102
102
  /**
103
- * Whether search-analytics is enabled (the `app-studio-search-analytics`
104
- * flag). Required to gate setup: `emitProductImpression` is a truthy no-op
103
+ * Whether search-analytics is enabled (the active provider's
104
+ * `search-analytics-<provider>` flag). Required to gate setup:
105
+ * `emitProductImpression` is a truthy no-op
105
106
  * when the flag is off, so without this the IntersectionObserver would still
106
107
  * be constructed per-card on every search-backed grid. Defaults on for
107
108
  * backward compatibility with callers that don't pass it yet.
@@ -1 +1 @@
1
- {"version":3,"file":"use-search-analytics-open-product.d.ts","sourceRoot":"","sources":["../../../components/hooks/use-search-analytics-open-product.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-search-analytics-open-product.d.ts","sourceRoot":"","sources":["../../../components/hooks/use-search-analytics-open-product.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,99 @@
1
+ export { addItemToWishlist, cn, createCollectionImageMap, cva, formatRelativeTime, getBackgroundAndPaddingStyle, getBackgroundAndSpacingStyle, getBadgesForProductFn, getBorderSidesStyle, getBorderStyle, getColor, } from "../lib/utils";
2
+ export { toHtml } from "../lib/to-html";
3
+ export { getData } from "../lib/get-data";
4
+ export type { DataSource } from "../lib/get-data";
5
+ export { getDestinationHandler, getEnabledWishlistIntegration, getGridSpacing, getIdFromGid, getInputPlaceholderTextProps, getLoyaltyButtonProps, getMarginStyle, getOverlayStyle, getPaddingStyle, getProductGidsFromIds, getSpaceBetween, getTextStyle, getVariantGidsFromIds, getVerticalAlignment, getVerticalAlignmentStyle, getWishlistAddItemNavigation, isFavoriteIntegrationEnabled, isVideo, mapFlexToAlignment, parsePhoneNumber, pluralize, productGidFromId, removeItemFromWishlists, stringRatioToInt, supportedVideoExtensions, supportsMultipleWishlists, throttleFunction, variantGidFromId, formatFrequency, formatPrice, shareContent, } from "../lib/utils";
6
+ export type { WishlistEntryMatch } from "../lib/utils";
7
+ export * from "../lib/cart.util";
8
+ export * from "../lib/discountAllocation.util";
9
+ export * from "../lib/variablesCart.util";
10
+ export * from "../lib/isTapcartVersion20.util";
11
+ export * from "../components/contexts/translation-context";
12
+ export * from "../components/hooks/use-collection";
13
+ export * from "../components/hooks/use-infinite-scroll";
14
+ export * from "../components/hooks/swr-retry";
15
+ export * from "../components/hooks/use-infinite-wishlist";
16
+ export * from "../components/hooks/use-recommendations";
17
+ export * from "../components/hooks/use-search-analytics-open-product";
18
+ export * from "../components/hooks/use-products";
19
+ export * from "../components/hooks/use-personalized-cluster-feed";
20
+ export * from "../components/hooks/use-order-details";
21
+ export * from "../components/hooks/use-scroll-direction";
22
+ export * from "../components/hooks/use-sort-filter";
23
+ export * from "../components/hooks/use-product-options";
24
+ export * from "../components/hooks/use-shop";
25
+ export * from "../components/hooks/use-mock-products";
26
+ export * from "../components/hooks/use-block-conditional-rendering";
27
+ export * from "../components/hooks/use-mock-cart";
28
+ export * from "../components/ui/accordion";
29
+ export * from "../components/ui/animate-container";
30
+ export * from "../components/ui/animate-number";
31
+ export * from "../components/ui/apple-pay-button";
32
+ export * from "../components/ui/aspect-ratio";
33
+ export * from "../components/ui/badge";
34
+ export * from "../components/core/button";
35
+ export * from "../components/ui/carousel";
36
+ export * from "../components/ui/checkbox";
37
+ export * from "../components/ui/chip";
38
+ export * from "../components/ui/color-swatch";
39
+ export * from "../components/ui/container";
40
+ export * from "../components/ui/drawer";
41
+ export * from "../components/ui/dropdown";
42
+ export * from "../components/ui/empty-message";
43
+ export * from "../components/ui/fallback-on-condition";
44
+ export * from "../components/ui/favorite";
45
+ export * from "../components/ui/fallback-on-condition";
46
+ export * from "../components/ui/grid";
47
+ export * from "../components/ui/virtual-grid";
48
+ export * from "../components/ui/icon";
49
+ export * from "../components/ui/image";
50
+ export * from "../components/ui/Input/input";
51
+ export * from "../components/ui/label";
52
+ export * from "../components/ui/line-item-text-icons";
53
+ export * from "../components/ui/loading-dots";
54
+ export * from "../components/ui/loading-spinner";
55
+ export * from "../components/ui/money";
56
+ export * from "../components/ui/portal";
57
+ export * from "../components/ui/price";
58
+ export * from "../components/ui/product-card";
59
+ export * from "../components/ui/quantity-picker";
60
+ export * from "../components/ui/quantity-pickerNEW";
61
+ export * from "../components/ui/progress-bar";
62
+ export * from "../components/ui/radio-group";
63
+ export * from "../components/ui/scroll-area";
64
+ export * from "../components/ui/selectors";
65
+ export * from "../components/ui/separator";
66
+ export * from "../components/ui/skeleton";
67
+ export * from "../components/ui/slider";
68
+ export * from "../components/ui/star-rating";
69
+ export * from "../components/ui/subscription";
70
+ export * from "../components/ui/switch";
71
+ export * from "../components/ui/tabs";
72
+ export * from "../components/core/text";
73
+ export * from "../components/ui/textarea";
74
+ export * from "../components/ui/toast";
75
+ export * from "../components/ui/toaster";
76
+ export * from "../components/ui/toggle-group";
77
+ export * from "../components/ui/toggle";
78
+ export * from "../components/ui/use-toast";
79
+ export * from "../components/ui/video";
80
+ export * from "../components/ui/video-enhanced";
81
+ export * from "../components/ui/wishlist";
82
+ export * from "../components/ui/wishlist-select";
83
+ export * from "../components/core/html";
84
+ export * from "../components/hooks/use-shop";
85
+ export * from "../components/libs/sort-filter/search-integration";
86
+ export * from "../components/hooks/use-reviews";
87
+ export * from "../components/hooks/use-style-parent";
88
+ export * from "../components/ui/subcollection-tabs";
89
+ export * from "../components/ui/ProductCard/utils";
90
+ export * from "../lib/price";
91
+ export * from "../components/hooks/use-nosto-recommendation";
92
+ export * from "../components/libs/sort-filter/search-integration";
93
+ export * from "../components/ui/tap";
94
+ export * from "../components/ui/circular-progress";
95
+ export * from "../components/ui/swipeable-list-item";
96
+ export * from "../components/ui/dialog";
97
+ export * from "../components/ui/input-otp";
98
+ export { default as ProductsLocalStorage } from "../components/libs/cache/ProductsLocalStorage";
99
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../core/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,98 @@
1
+ // component exports
2
+ export { addItemToWishlist, cn, createCollectionImageMap, cva, formatRelativeTime, getBackgroundAndPaddingStyle, getBackgroundAndSpacingStyle, getBadgesForProductFn, getBorderSidesStyle, getBorderStyle, getColor, } from "../lib/utils";
3
+ export { toHtml } from "../lib/to-html";
4
+ export { getData } from "../lib/get-data";
5
+ export { getDestinationHandler, getEnabledWishlistIntegration, getGridSpacing, getIdFromGid, getInputPlaceholderTextProps, getLoyaltyButtonProps, getMarginStyle, getOverlayStyle, getPaddingStyle, getProductGidsFromIds, getSpaceBetween, getTextStyle, getVariantGidsFromIds, getVerticalAlignment, getVerticalAlignmentStyle, getWishlistAddItemNavigation, isFavoriteIntegrationEnabled, isVideo, mapFlexToAlignment, parsePhoneNumber, pluralize, productGidFromId, removeItemFromWishlists, stringRatioToInt, supportedVideoExtensions, supportsMultipleWishlists, throttleFunction, variantGidFromId, formatFrequency, formatPrice, shareContent, } from "../lib/utils";
6
+ export * from "../lib/cart.util";
7
+ export * from "../lib/discountAllocation.util";
8
+ export * from "../lib/variablesCart.util";
9
+ export * from "../lib/isTapcartVersion20.util";
10
+ export * from "../components/contexts/translation-context";
11
+ export * from "../components/hooks/use-collection";
12
+ export * from "../components/hooks/use-infinite-scroll";
13
+ export * from "../components/hooks/swr-retry";
14
+ export * from "../components/hooks/use-infinite-wishlist";
15
+ export * from "../components/hooks/use-recommendations";
16
+ export * from "../components/hooks/use-search-analytics-open-product";
17
+ export * from "../components/hooks/use-products";
18
+ export * from "../components/hooks/use-personalized-cluster-feed";
19
+ export * from "../components/hooks/use-order-details";
20
+ export * from "../components/hooks/use-scroll-direction";
21
+ export * from "../components/hooks/use-sort-filter";
22
+ export * from "../components/hooks/use-product-options";
23
+ export * from "../components/hooks/use-shop";
24
+ export * from "../components/hooks/use-mock-products";
25
+ export * from "../components/hooks/use-block-conditional-rendering";
26
+ export * from "../components/hooks/use-mock-cart";
27
+ export * from "../components/ui/accordion";
28
+ export * from "../components/ui/animate-container";
29
+ export * from "../components/ui/animate-number";
30
+ export * from "../components/ui/apple-pay-button";
31
+ export * from "../components/ui/aspect-ratio";
32
+ export * from "../components/ui/badge";
33
+ export * from "../components/core/button";
34
+ export * from "../components/ui/carousel";
35
+ export * from "../components/ui/checkbox";
36
+ export * from "../components/ui/chip";
37
+ export * from "../components/ui/color-swatch";
38
+ export * from "../components/ui/container";
39
+ export * from "../components/ui/drawer";
40
+ export * from "../components/ui/dropdown";
41
+ export * from "../components/ui/empty-message";
42
+ export * from "../components/ui/fallback-on-condition";
43
+ export * from "../components/ui/favorite";
44
+ export * from "../components/ui/fallback-on-condition";
45
+ export * from "../components/ui/grid";
46
+ export * from "../components/ui/virtual-grid";
47
+ export * from "../components/ui/icon";
48
+ export * from "../components/ui/image";
49
+ export * from "../components/ui/Input/input";
50
+ export * from "../components/ui/label";
51
+ export * from "../components/ui/line-item-text-icons";
52
+ export * from "../components/ui/loading-dots";
53
+ export * from "../components/ui/loading-spinner";
54
+ export * from "../components/ui/money";
55
+ export * from "../components/ui/portal";
56
+ export * from "../components/ui/price";
57
+ export * from "../components/ui/product-card";
58
+ export * from "../components/ui/quantity-picker";
59
+ // TODO: make this the default quantity picker after new CartLineItem component is released
60
+ export * from "../components/ui/quantity-pickerNEW";
61
+ export * from "../components/ui/progress-bar";
62
+ export * from "../components/ui/radio-group";
63
+ export * from "../components/ui/scroll-area";
64
+ export * from "../components/ui/selectors";
65
+ export * from "../components/ui/separator";
66
+ export * from "../components/ui/skeleton";
67
+ export * from "../components/ui/slider";
68
+ export * from "../components/ui/star-rating";
69
+ export * from "../components/ui/subscription";
70
+ export * from "../components/ui/switch";
71
+ export * from "../components/ui/tabs";
72
+ export * from "../components/core/text";
73
+ export * from "../components/ui/textarea";
74
+ export * from "../components/ui/toast";
75
+ export * from "../components/ui/toaster";
76
+ export * from "../components/ui/toggle-group";
77
+ export * from "../components/ui/toggle";
78
+ export * from "../components/ui/use-toast";
79
+ export * from "../components/ui/video";
80
+ export * from "../components/ui/video-enhanced";
81
+ export * from "../components/ui/wishlist";
82
+ export * from "../components/ui/wishlist-select";
83
+ export * from "../components/core/html";
84
+ export * from "../components/hooks/use-shop";
85
+ export * from "../components/libs/sort-filter/search-integration";
86
+ export * from "../components/hooks/use-reviews";
87
+ export * from "../components/hooks/use-style-parent";
88
+ export * from "../components/ui/subcollection-tabs";
89
+ export * from "../components/ui/ProductCard/utils";
90
+ export * from "../lib/price";
91
+ export * from "../components/hooks/use-nosto-recommendation";
92
+ export * from "../components/libs/sort-filter/search-integration";
93
+ export * from "../components/ui/tap";
94
+ export * from "../components/ui/circular-progress";
95
+ export * from "../components/ui/swipeable-list-item";
96
+ export * from "../components/ui/dialog";
97
+ export * from "../components/ui/input-otp";
98
+ export { default as ProductsLocalStorage } from "../components/libs/cache/ProductsLocalStorage";
package/dist/index.d.ts CHANGED
@@ -1,4 +1,8 @@
1
- export { addItemToWishlist, cn, createCollectionImageMap, cva, formatRelativeTime, getBackgroundAndPaddingStyle, getBackgroundAndSpacingStyle, getBadgesForProductFn, getBorderSidesStyle, getBorderStyle, getColor, getDestinationHandler, getEnabledWishlistIntegration, getGridSpacing, getIdFromGid, getInputPlaceholderTextProps, getLoyaltyButtonProps, getMarginStyle, getOverlayStyle, getPaddingStyle, getProductGidsFromIds, getSpaceBetween, getTextStyle, getVariantGidsFromIds, getVerticalAlignment, getVerticalAlignmentStyle, getWishlistAddItemNavigation, isFavoriteIntegrationEnabled, isVideo, mapFlexToAlignment, parsePhoneNumber, pluralize, productGidFromId, removeItemFromWishlists, stringRatioToInt, supportedVideoExtensions, supportsMultipleWishlists, throttleFunction, variantGidFromId, formatFrequency, formatPrice, shareContent, } from "./lib/utils";
1
+ export { addItemToWishlist, cn, createCollectionImageMap, cva, formatRelativeTime, getBackgroundAndPaddingStyle, getBackgroundAndSpacingStyle, getBadgesForProductFn, getBorderSidesStyle, getBorderStyle, getColor, } from "./lib/utils";
2
+ export { toHtml } from "./lib/to-html";
3
+ export { getData } from "./lib/get-data";
4
+ export type { DataSource } from "./lib/get-data";
5
+ export { getDestinationHandler, getEnabledWishlistIntegration, getGridSpacing, getIdFromGid, getInputPlaceholderTextProps, getLoyaltyButtonProps, getMarginStyle, getOverlayStyle, getPaddingStyle, getProductGidsFromIds, getSpaceBetween, getTextStyle, getVariantGidsFromIds, getVerticalAlignment, getVerticalAlignmentStyle, getWishlistAddItemNavigation, isFavoriteIntegrationEnabled, isVideo, mapFlexToAlignment, parsePhoneNumber, pluralize, productGidFromId, removeItemFromWishlists, stringRatioToInt, supportedVideoExtensions, supportsMultipleWishlists, throttleFunction, variantGidFromId, formatFrequency, formatPrice, shareContent, } from "./lib/utils";
2
6
  export type { WishlistEntryMatch } from "./lib/utils";
3
7
  export * from "./lib/cart.util";
4
8
  export * from "./lib/discountAllocation.util";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,EAAE,EACF,wBAAwB,EACxB,GAAG,EACH,kBAAkB,EAClB,4BAA4B,EAC5B,4BAA4B,EAC5B,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,QAAQ,EACR,qBAAqB,EACrB,6BAA6B,EAC7B,cAAc,EACd,YAAY,EACZ,4BAA4B,EAC5B,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,eAAe,EACf,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,4BAA4B,EAC5B,4BAA4B,EAC5B,OAAO,EACP,kBAAkB,EAClB,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,uBAAuB,EACvB,gBAAgB,EAChB,wBAAwB,EACxB,yBAAyB,EACzB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,YAAY,GACb,MAAM,aAAa,CAAA;AACpB,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACrD,cAAc,iBAAiB,CAAA;AAC/B,cAAc,+BAA+B,CAAA;AAC7C,cAAc,0BAA0B,CAAA;AACxC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,2CAA2C,CAAA;AACzD,cAAc,mCAAmC,CAAA;AACjD,cAAc,wCAAwC,CAAA;AACtD,cAAc,8BAA8B,CAAA;AAC5C,cAAc,0CAA0C,CAAA;AACxD,cAAc,wCAAwC,CAAA;AACtD,cAAc,sDAAsD,CAAA;AACpE,cAAc,iCAAiC,CAAA;AAC/C,cAAc,kDAAkD,CAAA;AAChE,cAAc,sCAAsC,CAAA;AACpD,cAAc,yCAAyC,CAAA;AACvD,cAAc,oCAAoC,CAAA;AAClD,cAAc,wCAAwC,CAAA;AACtD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,sCAAsC,CAAA;AACpD,cAAc,oDAAoD,CAAA;AAClE,cAAc,kCAAkC,CAAA;AAChD,cAAc,2BAA2B,CAAA;AACzC,cAAc,mCAAmC,CAAA;AACjD,cAAc,gCAAgC,CAAA;AAC9C,cAAc,kCAAkC,CAAA;AAChD,cAAc,8BAA8B,CAAA;AAC5C,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,2BAA2B,CAAA;AACzC,cAAc,wBAAwB,CAAA;AACtC,cAAc,0BAA0B,CAAA;AACxC,cAAc,+BAA+B,CAAA;AAC7C,cAAc,uCAAuC,CAAA;AACrD,cAAc,0BAA0B,CAAA;AACxC,cAAc,uCAAuC,CAAA;AACrD,cAAc,sBAAsB,CAAA;AACpC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,sCAAsC,CAAA;AACpD,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iCAAiC,CAAA;AAC/C,cAAc,uBAAuB,CAAA;AACrC,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iCAAiC,CAAA;AAE/C,cAAc,oCAAoC,CAAA;AAClD,cAAc,8BAA8B,CAAA;AAC5C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,2BAA2B,CAAA;AACzC,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA;AACxC,cAAc,wBAAwB,CAAA;AACtC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,8BAA8B,CAAA;AAC5C,cAAc,wBAAwB,CAAA;AACtC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,0BAA0B,CAAA;AACxC,cAAc,uBAAuB,CAAA;AACrC,cAAc,yBAAyB,CAAA;AACvC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,wBAAwB,CAAA;AACtC,cAAc,2BAA2B,CAAA;AACzC,cAAc,uBAAuB,CAAA;AACrC,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0BAA0B,CAAA;AACxC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,sBAAsB,CAAA;AACpC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kDAAkD,CAAA;AAChE,cAAc,gCAAgC,CAAA;AAC9C,cAAc,qCAAqC,CAAA;AACnD,cAAc,oCAAoC,CAAA;AAClD,cAAc,mCAAmC,CAAA;AACjD,cAAc,aAAa,CAAA;AAC3B,cAAc,6CAA6C,CAAA;AAC3D,cAAc,kDAAkD,CAAA;AAChE,cAAc,qBAAqB,CAAA;AACnC,cAAc,mCAAmC,CAAA;AACjD,cAAc,qCAAqC,CAAA;AACnD,cAAc,wBAAwB,CAAA;AACtC,cAAc,2BAA2B,CAAA;AACzC,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,8CAA8C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,8 @@
1
1
  // component exports
2
- export { addItemToWishlist, cn, createCollectionImageMap, cva, formatRelativeTime, getBackgroundAndPaddingStyle, getBackgroundAndSpacingStyle, getBadgesForProductFn, getBorderSidesStyle, getBorderStyle, getColor, getDestinationHandler, getEnabledWishlistIntegration, getGridSpacing, getIdFromGid, getInputPlaceholderTextProps, getLoyaltyButtonProps, getMarginStyle, getOverlayStyle, getPaddingStyle, getProductGidsFromIds, getSpaceBetween, getTextStyle, getVariantGidsFromIds, getVerticalAlignment, getVerticalAlignmentStyle, getWishlistAddItemNavigation, isFavoriteIntegrationEnabled, isVideo, mapFlexToAlignment, parsePhoneNumber, pluralize, productGidFromId, removeItemFromWishlists, stringRatioToInt, supportedVideoExtensions, supportsMultipleWishlists, throttleFunction, variantGidFromId, formatFrequency, formatPrice, shareContent, } from "./lib/utils";
2
+ export { addItemToWishlist, cn, createCollectionImageMap, cva, formatRelativeTime, getBackgroundAndPaddingStyle, getBackgroundAndSpacingStyle, getBadgesForProductFn, getBorderSidesStyle, getBorderStyle, getColor, } from "./lib/utils";
3
+ export { toHtml } from "./lib/to-html";
4
+ export { getData } from "./lib/get-data";
5
+ export { getDestinationHandler, getEnabledWishlistIntegration, getGridSpacing, getIdFromGid, getInputPlaceholderTextProps, getLoyaltyButtonProps, getMarginStyle, getOverlayStyle, getPaddingStyle, getProductGidsFromIds, getSpaceBetween, getTextStyle, getVariantGidsFromIds, getVerticalAlignment, getVerticalAlignmentStyle, getWishlistAddItemNavigation, isFavoriteIntegrationEnabled, isVideo, mapFlexToAlignment, parsePhoneNumber, pluralize, productGidFromId, removeItemFromWishlists, stringRatioToInt, supportedVideoExtensions, supportsMultipleWishlists, throttleFunction, variantGidFromId, formatFrequency, formatPrice, shareContent, } from "./lib/utils";
3
6
  export * from "./lib/cart.util";
4
7
  export * from "./lib/discountAllocation.util";
5
8
  export * from "./lib/variablesCart.util";
@@ -0,0 +1,27 @@
1
+ export type DataSource = {
2
+ source: string;
3
+ value: string;
4
+ };
5
+ /**
6
+ * getData — Universal content resolver for V2 blocks.
7
+ *
8
+ * Accepts either:
9
+ * - a static HTML string (typography `content: "text"`) → returned as-is
10
+ * - a DataSource `{ source, value }` (typography `content: "data"`, or a
11
+ * data-source field) → resolved against Tapcart variables
12
+ * - null/undefined (typography `content: "none"`, i.e. no `value`) → null
13
+ *
14
+ * This lets a block render every typography field identically, with no
15
+ * conditional branching on the `content` mode. `content: "none"` returns null
16
+ * (not "") so falsy guards work cleanly and no empty wrapper renders:
17
+ * {getData(variables, field?.value) && (
18
+ * <Html html={getData(variables, field?.value)} />
19
+ * )}
20
+ *
21
+ * Note: a *data-source* that resolves to nothing still returns "" (it was a
22
+ * real binding that came back empty), only an absent value returns null.
23
+ *
24
+ * Never throws — returns empty string on any error.
25
+ */
26
+ export declare function getData(variables: Record<string, any> | undefined, data: DataSource | string | null | undefined): string | null;
27
+ //# sourceMappingURL=get-data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-data.d.ts","sourceRoot":"","sources":["../../lib/get-data.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,OAAO,CACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,SAAS,EAC1C,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAC3C,MAAM,GAAG,IAAI,CAyCf"}
@@ -0,0 +1,65 @@
1
+ import { toHtml } from "./to-html";
2
+ /**
3
+ * getData — Universal content resolver for V2 blocks.
4
+ *
5
+ * Accepts either:
6
+ * - a static HTML string (typography `content: "text"`) → returned as-is
7
+ * - a DataSource `{ source, value }` (typography `content: "data"`, or a
8
+ * data-source field) → resolved against Tapcart variables
9
+ * - null/undefined (typography `content: "none"`, i.e. no `value`) → null
10
+ *
11
+ * This lets a block render every typography field identically, with no
12
+ * conditional branching on the `content` mode. `content: "none"` returns null
13
+ * (not "") so falsy guards work cleanly and no empty wrapper renders:
14
+ * {getData(variables, field?.value) && (
15
+ * <Html html={getData(variables, field?.value)} />
16
+ * )}
17
+ *
18
+ * Note: a *data-source* that resolves to nothing still returns "" (it was a
19
+ * real binding that came back empty), only an absent value returns null.
20
+ *
21
+ * Never throws — returns empty string on any error.
22
+ */
23
+ export function getData(variables, data) {
24
+ var _a, _b, _c;
25
+ try {
26
+ // No value (content: "none") — return null so falsy guards skip rendering.
27
+ if (data == null)
28
+ return null;
29
+ // Static rich-text (content: "text") — already HTML, pass through.
30
+ if (typeof data === "string")
31
+ return data;
32
+ if (!(data === null || data === void 0 ? void 0 : data.source) || !(data === null || data === void 0 ? void 0 : data.value))
33
+ return "";
34
+ if (data.source === "custom")
35
+ return data.value;
36
+ const obj = variables === null || variables === void 0 ? void 0 : variables[data.source];
37
+ if (!obj)
38
+ return "";
39
+ if (data.value.startsWith("metafields.")) {
40
+ const parts = data.value.split(".");
41
+ if (parts.length === 3) {
42
+ return toHtml(((_b = (_a = obj.metafields) === null || _a === void 0 ? void 0 : _a[parts[1]]) === null || _b === void 0 ? void 0 : _b[parts[2]]) || "");
43
+ }
44
+ return "";
45
+ }
46
+ const field = data.value;
47
+ if (field === "description")
48
+ return obj.descriptionHtml || obj.description || "";
49
+ if (field === "tags")
50
+ return (obj.tags || []).join(", ");
51
+ // Handle nested paths like priceRange.minVariantPrice.amount
52
+ if (field.includes(".")) {
53
+ const val = field.split(".").reduce((o, k) => o === null || o === void 0 ? void 0 : o[k], obj);
54
+ if (Array.isArray(val))
55
+ return val.join(", ");
56
+ return String(val !== null && val !== void 0 ? val : "");
57
+ }
58
+ // Nullish coalescing (not ||) so legitimate 0 / false values survive
59
+ // instead of being flattened to an empty string.
60
+ return String((_c = obj[field]) !== null && _c !== void 0 ? _c : "");
61
+ }
62
+ catch (_d) {
63
+ return "";
64
+ }
65
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=get-data.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-data.test.d.ts","sourceRoot":"","sources":["../../lib/get-data.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,74 @@
1
+ /* eslint-env jest */
2
+ import { getData } from "./get-data";
3
+ describe("getData", () => {
4
+ const variables = {
5
+ product: {
6
+ descriptionHtml: "<p>Hello</p>",
7
+ description: "Hello",
8
+ tags: ["new", "sale"],
9
+ title: "Cool Product",
10
+ totalInventory: 0,
11
+ availableForSale: false,
12
+ metafields: {
13
+ custom: { subtitle: "A subtitle" },
14
+ },
15
+ priceRange: {
16
+ minVariantPrice: { amount: "19.99" },
17
+ },
18
+ },
19
+ };
20
+ describe("static rich-text (content: text)", () => {
21
+ it("returns a plain HTML string as-is", () => {
22
+ expect(getData(variables, "<p><strong>Hi</strong></p>")).toBe("<p><strong>Hi</strong></p>");
23
+ });
24
+ it("returns an empty string as-is", () => {
25
+ expect(getData(variables, "")).toBe("");
26
+ });
27
+ it("passes through even when variables is undefined", () => {
28
+ expect(getData(undefined, "<p>Static</p>")).toBe("<p>Static</p>");
29
+ });
30
+ });
31
+ describe("no value (content: none)", () => {
32
+ it("returns null for null (falsy-guard friendly)", () => {
33
+ expect(getData(variables, null)).toBeNull();
34
+ });
35
+ it("returns null for undefined", () => {
36
+ expect(getData(variables, undefined)).toBeNull();
37
+ });
38
+ it("returns empty string (not null) for a real data-source that came back empty", () => {
39
+ expect(getData(variables, { source: "", value: "" })).toBe("");
40
+ });
41
+ });
42
+ describe("data-source (content: data)", () => {
43
+ it("returns custom value as-is", () => {
44
+ expect(getData(variables, { source: "custom", value: "<p>x</p>" })).toBe("<p>x</p>");
45
+ });
46
+ it("resolves description", () => {
47
+ expect(getData(variables, { source: "product", value: "description" })).toBe("<p>Hello</p>");
48
+ });
49
+ it("resolves tags joined", () => {
50
+ expect(getData(variables, { source: "product", value: "tags" })).toBe("new, sale");
51
+ });
52
+ it("resolves a metafield", () => {
53
+ expect(getData(variables, {
54
+ source: "product",
55
+ value: "metafields.custom.subtitle",
56
+ })).toBe("<p>A subtitle</p>");
57
+ });
58
+ it("resolves a nested path", () => {
59
+ expect(getData(variables, {
60
+ source: "product",
61
+ value: "priceRange.minVariantPrice.amount",
62
+ })).toBe("19.99");
63
+ });
64
+ it("returns empty string when source object is missing", () => {
65
+ expect(getData(variables, { source: "customer", value: "firstName" })).toBe("");
66
+ });
67
+ it("preserves a numeric zero (not flattened to empty string)", () => {
68
+ expect(getData(variables, { source: "product", value: "totalInventory" })).toBe("0");
69
+ });
70
+ it("preserves a boolean false (not flattened to empty string)", () => {
71
+ expect(getData(variables, { source: "product", value: "availableForSale" })).toBe("false");
72
+ });
73
+ });
74
+ });
@@ -0,0 +1,9 @@
1
+ /**
2
+ * toHtml — Universal content-to-HTML converter.
3
+ *
4
+ * Accepts any string: Shopify rich text JSON, plain HTML, or plain text.
5
+ * Always returns safe HTML ready for the Html component.
6
+ * Never throws — returns empty string on any error.
7
+ */
8
+ export declare function toHtml(content: any): string;
9
+ //# sourceMappingURL=to-html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"to-html.d.ts","sourceRoot":"","sources":["../../lib/to-html.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2EH,wBAAgB,MAAM,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,CAkB3C"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * toHtml — Universal content-to-HTML converter.
3
+ *
4
+ * Accepts any string: Shopify rich text JSON, plain HTML, or plain text.
5
+ * Always returns safe HTML ready for the Html component.
6
+ * Never throws — returns empty string on any error.
7
+ */
8
+ function escHtml(s) {
9
+ return String(s)
10
+ .replace(/&/g, "&amp;")
11
+ .replace(/</g, "&lt;")
12
+ .replace(/>/g, "&gt;")
13
+ .replace(/"/g, "&quot;");
14
+ }
15
+ function convertInline(node) {
16
+ try {
17
+ if (!(node === null || node === void 0 ? void 0 : node.type))
18
+ return "";
19
+ if (node.type === "text") {
20
+ let t = escHtml(node.value || "");
21
+ if (node.bold)
22
+ t = `<strong>${t}</strong>`;
23
+ if (node.italic)
24
+ t = `<em>${t}</em>`;
25
+ return t;
26
+ }
27
+ if (node.type === "link") {
28
+ const href = escHtml(node.url || "");
29
+ const children = (node.children || []).map(convertInline).join("");
30
+ return `<a href="${href}">${children}</a>`;
31
+ }
32
+ return "";
33
+ }
34
+ catch (_a) {
35
+ return "";
36
+ }
37
+ }
38
+ function convertNode(node) {
39
+ try {
40
+ if (!(node === null || node === void 0 ? void 0 : node.type))
41
+ return "";
42
+ switch (node.type) {
43
+ case "paragraph":
44
+ return `<p>${(node.children || []).map(convertInline).join("")}</p>`;
45
+ case "list": {
46
+ const tag = node.listType === "ordered" ? "ol" : "ul";
47
+ const items = (node.children || [])
48
+ .filter((c) => c.type === "list-item")
49
+ .map((item) => `<li>${(item.children || []).map(convertInline).join("")}</li>`)
50
+ .join("");
51
+ return `<${tag}>${items}</${tag}>`;
52
+ }
53
+ case "heading": {
54
+ const lvl = Math.min(Math.max(node.level || 1, 1), 6);
55
+ return `<h${lvl}>${(node.children || [])
56
+ .map(convertInline)
57
+ .join("")}</h${lvl}>`;
58
+ }
59
+ default:
60
+ return "";
61
+ }
62
+ }
63
+ catch (_a) {
64
+ return "";
65
+ }
66
+ }
67
+ function parseShopifyRichText(text) {
68
+ try {
69
+ const obj = JSON.parse(text);
70
+ if (!obj || obj.type !== "root" || !Array.isArray(obj.children))
71
+ return null;
72
+ return obj.children.map(convertNode).join("");
73
+ }
74
+ catch (_a) {
75
+ return null;
76
+ }
77
+ }
78
+ function isHtml(text) {
79
+ return /<[a-z][\s\S]*>/i.test(text);
80
+ }
81
+ export function toHtml(content) {
82
+ try {
83
+ if (content == null)
84
+ return "";
85
+ if (typeof content !== "string")
86
+ return "";
87
+ if (content.trim() === "")
88
+ return "";
89
+ // Try Shopify rich text JSON first
90
+ const richText = parseShopifyRichText(content);
91
+ if (richText !== null)
92
+ return richText;
93
+ // Already HTML, pass through
94
+ if (isHtml(content))
95
+ return content;
96
+ // Plain text, wrap in paragraph
97
+ return `<p>${escHtml(content)}</p>`;
98
+ }
99
+ catch (_a) {
100
+ return "";
101
+ }
102
+ }
package/dist/styles.css CHANGED
@@ -2917,6 +2917,9 @@ video {
2917
2917
  .opacity-100 {
2918
2918
  opacity: 1;
2919
2919
  }
2920
+ .opacity-25 {
2921
+ opacity: 0.25;
2922
+ }
2920
2923
  .opacity-50 {
2921
2924
  opacity: 0.5;
2922
2925
  }
@@ -2926,6 +2929,9 @@ video {
2926
2929
  .opacity-70 {
2927
2930
  opacity: 0.7;
2928
2931
  }
2932
+ .opacity-75 {
2933
+ opacity: 0.75;
2934
+ }
2929
2935
  .opacity-\[0\.42\] {
2930
2936
  opacity: 0.42;
2931
2937
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tapcart/mobile-components",
3
- "version": "0.15.2",
3
+ "version": "0.16.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "style": "dist/styles.css",