@tapcart/mobile-components 0.6.11 → 0.6.13

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.
@@ -13,6 +13,7 @@ export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElemen
13
13
  labelClassName?: string;
14
14
  labelStyle?: React.CSSProperties | undefined;
15
15
  iconColor?: string;
16
+ iconSize?: string;
16
17
  iconStrokeColor?: string;
17
18
  iconPosition?: "left" | "right";
18
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../components/ui/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAGL,KAAK,EAEL,SAAS,EAET,oBAAoB,EACrB,MAAM,iBAAiB,CAAA;AAIxB,QAAA,MAAM,cAAc;;;mFAgCnB,CAAA;AAwCD,MAAM,WAAW,WACf,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EACnD,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,GAAG,SAAS,CAAA;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAChC;AAED,QAAA,MAAM,MAAM,uFAyFX,CAAA;AAGD,QAAA,MAAM,cAAc,iBACJ,SAAS,GACrB,oBAAoB,GAAG;IACrB,SAAS,EAAE,KAAK,CAAA;IAChB,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5B,gBAAgB,EAAE,OAAO,CAAA;CAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBJ,CAAA;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,CAAA"}
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../components/ui/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAGL,KAAK,EAEL,SAAS,EAET,oBAAoB,EACrB,MAAM,iBAAiB,CAAA;AAIxB,QAAA,MAAM,cAAc;;;mFAgCnB,CAAA;AAwCD,MAAM,WAAW,WACf,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EACnD,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,GAAG,SAAS,CAAA;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAChC;AAED,QAAA,MAAM,MAAM,uFA0FX,CAAA;AAGD,QAAA,MAAM,cAAc,iBACJ,SAAS,GACrB,oBAAoB,GAAG;IACrB,SAAS,EAAE,KAAK,CAAA;IAChB,WAAW,EAAE;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5B,gBAAgB,EAAE,OAAO,CAAA;CAC1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkBJ,CAAA;AAED,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,cAAc,EAAE,CAAA"}
@@ -79,16 +79,16 @@ const labelVariants = cva("truncate", {
79
79
  },
80
80
  });
81
81
  const Button = React.forwardRef((_a, ref) => {
82
- var { className, labelClassName, labelStyle, variant, size, asChild = false, loading, icon, iconColor, iconStrokeColor, iconPosition, iconUrl } = _a, props = __rest(_a, ["className", "labelClassName", "labelStyle", "variant", "size", "asChild", "loading", "icon", "iconColor", "iconStrokeColor", "iconPosition", "iconUrl"]);
82
+ var { className, labelClassName, labelStyle, variant, size, asChild = false, loading, icon, iconColor, iconStrokeColor, iconPosition, iconSize, iconUrl } = _a, props = __rest(_a, ["className", "labelClassName", "labelStyle", "variant", "size", "asChild", "loading", "icon", "iconColor", "iconStrokeColor", "iconPosition", "iconSize", "iconUrl"]);
83
83
  const Comp = asChild ? Slot : "button";
84
84
  const IconButton = () => icon || iconUrl ? _jsx(Icon, { name: icon, size: "sm", style: { color: iconColor } }) : null;
85
- const BasicButton = () => (_jsxs(_Fragment, { children: [icon || iconUrl ? (_jsx(Icon, { name: iconUrl ? undefined : icon, url: iconUrl, size: variant === "quickadd" ? "xs" : "sm", className: cn(iconVariants({ variant }), {
85
+ const BasicButton = () => (_jsxs(_Fragment, { children: [icon || iconUrl ? (_jsx(Icon, { name: iconUrl ? undefined : icon, url: iconUrl, size: iconSize || variant === "quickadd" ? "xs" : "sm", className: cn(iconVariants({ variant }), {
86
86
  "mr-2": iconPosition !== "right",
87
87
  }), strokeColor: iconStrokeColor, style: { color: iconColor } })) : null, !loading ? (_jsx(Text, Object.assign({ type: "body-primary", className: cn(labelVariants({ variant }), labelClassName), style: labelStyle }, { children: props.children }))) : (_jsx(_Fragment, {}))] }));
88
88
  const LoadingButton = () => (_jsx("div", Object.assign({ className: cn("flex items-center justify-center", size === "icon" ? "h-5" : "h-6") }, { children: _jsx(Icon, { className: cn(iconVariants({ variant }), "h-5 w-5 animate-spin"), name: "loader", style: { color: iconColor } }) })));
89
89
  return (_jsx(Comp, Object.assign({ className: cn(buttonVariants({ variant, size }), className, {
90
90
  "pointer-events-none": loading,
91
- "flex-row-reverse": icon && iconPosition === "right",
91
+ "flex-row-reverse": (icon || iconUrl) && iconPosition === "right",
92
92
  }), ref: ref }, props, { children: loading ? (_jsx(LoadingButton, {})) : typeof props.children === "object" &&
93
93
  React.isValidElement(props.children) ? ( // if children are passed as a valid React element
94
94
  props.children // render it
@@ -11,6 +11,6 @@ export interface IconProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "c
11
11
  fillColor?: string | null;
12
12
  strokeColor?: string | null;
13
13
  }
14
- declare function Icon({ className, name, size, color, fillColor, strokeColor, url, ...props }: IconProps): import("react/jsx-runtime").JSX.Element;
14
+ declare function Icon({ className, name, size, color, url, fillColor, strokeColor, ...props }: IconProps): import("react/jsx-runtime").JSX.Element;
15
15
  export { Icon, iconVariants, IconPencilMinus };
16
16
  //# sourceMappingURL=icon.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../../components/ui/icon.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAEL,eAAe,EAuChB,MAAM,qBAAqB,CAAA;AAI5B,QAAA,MAAM,YAAY;;;mFAgBjB,CAAA;AA2DD,MAAM,WAAW,SACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,EACzD,YAAY,CAAC,OAAO,YAAY,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AA6CD,iBAAS,IAAI,CAAC,EACZ,SAAS,EACT,IAAI,EACJ,IAAW,EACX,KAAK,EACL,SAAS,EACT,WAAW,EACX,GAAG,EACH,GAAG,KAAK,EACT,EAAE,SAAS,2CAgBX;AAED,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE,CAAA"}
1
+ {"version":3,"file":"icon.d.ts","sourceRoot":"","sources":["../../../components/ui/icon.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACjE,OAAO,EAEL,eAAe,EAuChB,MAAM,qBAAqB,CAAA;AAI5B,QAAA,MAAM,YAAY;;;mFAgBjB,CAAA;AA2DD,MAAM,WAAW,SACf,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,EACzD,YAAY,CAAC,OAAO,YAAY,CAAC;IACnC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B;AAsDD,iBAAS,IAAI,CAAC,EACZ,SAAS,EACT,IAAI,EACJ,IAAW,EACX,KAAK,EACL,GAAG,EACH,SAAS,EACT,WAAW,EACX,GAAG,KAAK,EACT,EAAE,SAAS,2CAiBX;AAED,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,eAAe,EAAE,CAAA"}
@@ -87,19 +87,27 @@ const TablerIcon = ({ name, size }) => {
87
87
  const IconComponent = icons[name];
88
88
  return IconComponent ? (_jsx(IconComponent, { size: sizeMapping[size], strokeWidth: strokeWidthMapping[size] })) : null;
89
89
  };
90
- const CustomIcon = ({ url, size, strokeColor, fillColor }) => {
90
+ const CustomIcon = ({ url, size, color, fillColor, strokeColor }) => {
91
91
  return (_jsx(ReactSVG, { src: url, beforeInjection: (svg) => {
92
92
  svg.setAttribute("style", `width: ${sizeMapping[size]}px; height: ${sizeMapping[size]}px`);
93
93
  const paths = svg.querySelectorAll("path");
94
94
  paths.forEach((path) => {
95
- path.setAttribute("stroke-width", strokeWidthMapping[size].toString());
95
+ if (color) {
96
+ if (path.hasAttribute("fill"))
97
+ path.setAttribute("fill", color);
98
+ if (path.hasAttribute("stroke"))
99
+ path.setAttribute("stroke", color);
100
+ }
101
+ if (path.hasAttribute("stroke")) {
102
+ path.setAttribute("stroke-width", strokeWidthMapping[size].toString());
103
+ }
96
104
  fillColor && path.setAttribute("fill", fillColor);
97
105
  strokeColor && path.setAttribute("stroke", strokeColor);
98
106
  });
99
107
  } }));
100
108
  };
101
109
  function Icon(_a) {
102
- var { className, name, size = "md", color, fillColor, strokeColor, url } = _a, props = __rest(_a, ["className", "name", "size", "color", "fillColor", "strokeColor", "url"]);
103
- return (_jsxs("div", Object.assign({ className: cn(iconVariants({ size, color, className })) }, props, { children: [url ? (_jsx(CustomIcon, { url: url, size: size, strokeColor: strokeColor, fillColor: fillColor })) : (_jsx(TablerIcon, { name: name, size: size })), props.children] })));
110
+ var { className, name, size = "md", color, url, fillColor, strokeColor } = _a, props = __rest(_a, ["className", "name", "size", "color", "url", "fillColor", "strokeColor"]);
111
+ return (_jsxs("div", Object.assign({ className: cn(iconVariants({ size, color, className })) }, props, { children: [url ? (_jsx(CustomIcon, { url: url, size: size, color: color, fillColor: fillColor, strokeColor: strokeColor })) : (_jsx(TablerIcon, { name: name, size: size })), props.children] })));
104
112
  }
105
113
  export { Icon, iconVariants, IconPencilMinus };
@@ -1 +1 @@
1
- {"version":3,"file":"price.d.ts","sourceRoot":"","sources":["../../../components/ui/price.tsx"],"names":[],"mappings":";AAIA,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC;IACjD,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACjC,mBAAmB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC3C;AAED,iBAAS,KAAK,CAAC,EACb,KAAK,EACL,SAAS,EACT,WAAmB,EACnB,MAAc,EACd,cAAc,EACd,kBAAkB,EAClB,QAAgB,EAChB,MAAgB,EAChB,QAAa,EACb,aAAkB,EAClB,cAAc,EACd,UAAU,EACV,mBAAmB,GACpB,EAAE,UAAU,2CA+DZ;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
1
+ {"version":3,"file":"price.d.ts","sourceRoot":"","sources":["../../../components/ui/price.tsx"],"names":[],"mappings":";AAIA,UAAU,UAAU;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,EAAE,CAAC;IACjD,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACrC,UAAU,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IACjC,mBAAmB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC3C;AAED,iBAAS,KAAK,CAAC,EACb,KAAK,EACL,SAAS,EACT,WAAmB,EACnB,MAAc,EACd,cAAc,EACd,kBAAkB,EAClB,QAAgB,EAChB,MAAgB,EAChB,QAAa,EACb,aAAkB,EAClB,cAAc,EACd,UAAU,EACV,mBAAmB,GACpB,EAAE,UAAU,2CAiEZ;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
@@ -12,7 +12,7 @@ function Price({ price, priceHigh, priceRanges = false, isSale = false, compareA
12
12
  const StrikeThroughPrice = () => {
13
13
  if (!isSale || !compareAtPrice)
14
14
  return null;
15
- return (_jsxs(Text, Object.assign({ className: "line-through text-textColors-strikethroughPriceText flex-shrink-0", style: Object.assign({ fontSize: `${fontSize}px` }, strikeThroughStyles) }, { children: [_jsx(Money, { price: compareAtPrice, currency: currency, locale: locale }), priceRanges && compareAtPriceHigh && _jsx(Spacer, {}), priceRanges && compareAtPriceHigh && (_jsx(Money, { price: compareAtPriceHigh, currency: currency, locale: locale }))] })));
15
+ return (_jsxs(Text, Object.assign({ className: "line-through text-textColors-strikethroughPriceText flex-shrink-0 flex items-center", style: { fontSize: `${fontSize}px` } }, { children: [_jsx(Money, { price: compareAtPrice, currency: currency, locale: locale, styles: strikeThroughStyles }), priceRanges && compareAtPriceHigh && _jsx(Spacer, {}), priceRanges && compareAtPriceHigh && (_jsx(Money, { price: compareAtPriceHigh, currency: currency, locale: locale, styles: strikeThroughStyles }))] })));
16
16
  };
17
17
  return (_jsxs("div", Object.assign({ className: cn("flex flex-wrap gap-2", { "justify-start": textAlignment === "left" }, { "justify-end": textAlignment === "right" }, { "justify-center": textAlignment === "center" }) }, { children: [_jsx(ProductPrice, {}), _jsx(StrikeThroughPrice, {})] })));
18
18
  }
@@ -0,0 +1,11 @@
1
+ type RelatedCategory = {
2
+ id: string;
3
+ title: string;
4
+ handle: string;
5
+ };
6
+ declare function SubCollectionTabs({ subCollections, useActions, }: {
7
+ subCollections: RelatedCategory[];
8
+ useActions: any;
9
+ }): import("react/jsx-runtime").JSX.Element | null;
10
+ export { SubCollectionTabs };
11
+ //# sourceMappingURL=subcollection-tabs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subcollection-tabs.d.ts","sourceRoot":"","sources":["../../../components/ui/subcollection-tabs.tsx"],"names":[],"mappings":"AAOA,KAAK,eAAe,GAAG;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,iBAAS,iBAAiB,CAAC,EACzB,cAAc,EACd,UAAU,GACX,EAAE;IACD,cAAc,EAAE,eAAe,EAAE,CAAA;IAEjC,UAAU,EAAE,GAAG,CAAA;CAChB,kDAwDA;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAA"}
@@ -0,0 +1,49 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { useState, useEffect, useCallback, useMemo, useRef } from "react";
4
+ import { Tabs } from "./tabs";
5
+ import { getIdFromGid } from "../../lib/utils";
6
+ import { useSearchParams } from "next/navigation";
7
+ function SubCollectionTabs({ subCollections, useActions, }) {
8
+ const searchParams = useSearchParams();
9
+ const [activeTab, setActiveTab] = useState(null);
10
+ const isInitialLoad = useRef(true);
11
+ const prevActiveTab = useRef(null);
12
+ const { openCollection } = useActions();
13
+ // Memoize the tabs array
14
+ const tabs = useMemo(() => subCollections === null || subCollections === void 0 ? void 0 : subCollections.map((category) => ({
15
+ label: category.title,
16
+ children: null,
17
+ })), [subCollections]);
18
+ useEffect(() => {
19
+ // Set initial active tab based on URL params
20
+ const collectionId = searchParams.get("collectionId");
21
+ const collectionHandle = searchParams.get("collectionHandle");
22
+ const initialIndex = subCollections.findIndex((cat) => (collectionId && getIdFromGid(cat.id) === collectionId) ||
23
+ (collectionHandle && cat.handle === collectionHandle));
24
+ setActiveTab(initialIndex !== -1 ? initialIndex : null);
25
+ prevActiveTab.current = initialIndex !== -1 ? initialIndex : null;
26
+ isInitialLoad.current = false;
27
+ }, [subCollections, searchParams]);
28
+ const handleTabChange = useCallback((index) => {
29
+ if (index !== prevActiveTab.current) {
30
+ if (index !== null && !isInitialLoad.current) {
31
+ const category = subCollections[index];
32
+ const newCollectionId = (category === null || category === void 0 ? void 0 : category.id)
33
+ ? getIdFromGid(category.id)
34
+ : null;
35
+ const newCollectionHandle = (category === null || category === void 0 ? void 0 : category.handle) || null;
36
+ if (newCollectionId) {
37
+ openCollection({ collectionId: newCollectionId });
38
+ }
39
+ else if (newCollectionHandle) {
40
+ openCollection({ collectionId: newCollectionHandle });
41
+ }
42
+ }
43
+ }
44
+ }, [subCollections, openCollection]);
45
+ if (!tabs)
46
+ return null;
47
+ return (_jsx(Tabs, { tabs: tabs, activeTab: activeTab, onTabChange: handleTabChange }));
48
+ }
49
+ export { SubCollectionTabs };
@@ -4,8 +4,8 @@ export interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {
4
4
  label: string;
5
5
  children: React.ReactNode;
6
6
  }[];
7
- activeTab: number;
8
- onTabChange: (_: number) => void;
7
+ activeTab: number | null;
8
+ onTabChange: (_: number | null) => void;
9
9
  active?: number;
10
10
  }
11
11
  declare const Tabs: React.ForwardRefExoticComponent<TabsProps & React.RefAttributes<HTMLDivElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../../components/ui/tabs.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,MAAM,WAAW,SAAU,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACrE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,EAAE,CAAA;IACpD,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAiCD,QAAA,MAAM,IAAI,kFAyGT,CAAA;AAGD,OAAO,EAAE,IAAI,EAAE,CAAA"}
1
+ {"version":3,"file":"tabs.d.ts","sourceRoot":"","sources":["../../../components/ui/tabs.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,MAAM,WAAW,SAAU,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACrE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;KAAE,EAAE,CAAA;IACpD,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAA;IACvC,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAqCD,QAAA,MAAM,IAAI,kFA+GT,CAAA;AAGD,OAAO,EAAE,IAAI,EAAE,CAAA"}
@@ -10,12 +10,12 @@ var __rest = (this && this.__rest) || function (s, e) {
10
10
  }
11
11
  return t;
12
12
  };
13
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
13
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
14
  import * as React from "react";
15
15
  import { cva } from "class-variance-authority";
16
16
  import { cn } from "../../lib/utils";
17
17
  import { Text } from "./text";
18
- const tabVariants = cva("flex items-center justify-center px-4 py-2 w-full active:opacity-70", {
18
+ const tabVariants = cva("flex items-center justify-center px-4 py-2 active:opacity-70", {
19
19
  variants: {
20
20
  isActive: {
21
21
  true: "[&>p]:text-textColors-primaryColor",
@@ -29,7 +29,8 @@ const tabVariants = cva("flex items-center justify-center px-4 py-2 w-full activ
29
29
  const Tab = ({ label, isActive = false, onClick }) => {
30
30
  return (_jsx("button", Object.assign({ className: cn(tabVariants({
31
31
  isActive,
32
- })), onClick: onClick }, { children: _jsx(Text, Object.assign({ type: "body-primary" }, { children: label })) })));
32
+ }), "whitespace-nowrap" // Add this class
33
+ ), onClick: onClick }, { children: _jsx(Text, Object.assign({ type: "body-primary" }, { children: label })) })));
33
34
  };
34
35
  const Tabs = React.forwardRef((_a, ref) => {
35
36
  var { className, tabs, activeTab, onTabChange } = _a, props = __rest(_a, ["className", "tabs", "activeTab", "onTabChange"]);
@@ -50,6 +51,10 @@ const Tabs = React.forwardRef((_a, ref) => {
50
51
  };
51
52
  const handleTabChanged = React.useCallback(() => {
52
53
  var _a, _b;
54
+ if (activeTab === null) {
55
+ setUnderlinePosition({ left: 0, width: 0 });
56
+ return;
57
+ }
53
58
  const currentTab = containerRef.current.children[activeTab];
54
59
  setUnderlinePosition({
55
60
  left: (_a = currentTab === null || currentTab === void 0 ? void 0 : currentTab.offsetLeft) !== null && _a !== void 0 ? _a : 0,
@@ -87,10 +92,10 @@ const Tabs = React.forwardRef((_a, ref) => {
87
92
  }
88
93
  }
89
94
  }, [ref]);
90
- return (_jsxs("div", Object.assign({ className: "relative" }, props, { children: [_jsxs("div", Object.assign({ ref: containerRef, className: "relative flex overflow-x-auto", onScroll: checkShowGradients }, { children: [tabs.map((tab, index) => (_jsx(Tab, { label: tab.label, isActive: activeTab === index, onClick: () => onTabChange(index) }, index))), _jsx("div", { className: `absolute bottom-0 bg-coreColors-brandColorPrimary h-[2px] transition-all duration-300`, style: {
95
+ return (_jsxs("div", Object.assign({ className: "relative no-scrollbar" }, props, { children: [_jsxs("div", Object.assign({ ref: containerRef, className: "relative flex overflow-x-auto no-scrollbar", onScroll: checkShowGradients }, { children: [tabs.map((tab, index) => (_jsx(Tab, { label: tab.label, isActive: activeTab === index, onClick: () => onTabChange(index) }, index))), activeTab !== null && (_jsx("div", { className: `absolute bottom-0 bg-coreColors-brandColorPrimary h-[2px] transition-all duration-300`, style: {
91
96
  left: underlinePosition.left,
92
97
  width: underlinePosition.width,
93
- } })] })), showRightGradient ? (_jsx("div", { className: "absolute right-0 bottom-0 w-16 h-10 bg-[linear-gradient(90deg,#ffffff00_0%,#FFF_100%)] pointer-events-none" })) : (_jsx(_Fragment, {})), showLeftGradient ? (_jsx("div", { className: "absolute left-0 bottom-0 w-16 h-10 bg-[linear-gradient(270deg,#ffffff00_0%,#FFF_100%)] pointer-events-none" })) : (_jsx(_Fragment, {}))] })));
98
+ } }))] })), showRightGradient && (_jsx("div", Object.assign({ className: "absolute right-0 bottom-0 w-16 h-10 pointer-events-none overflow-hidden" }, { children: _jsx("div", { className: "w-full h-full gradient-right" }) }))), showLeftGradient && (_jsx("div", Object.assign({ className: "absolute left-0 bottom-0 w-16 h-10 pointer-events-none overflow-hidden" }, { children: _jsx("div", { className: "w-full h-full gradient-left" }) })))] })));
94
99
  });
95
100
  Tabs.displayName = "Tabs";
96
101
  export { Tabs };
@@ -20,10 +20,8 @@ declare const getVideoStyle: (videoAttributes: VideoAttributes, videoSrc: {
20
20
  naturalAspectRatio: string;
21
21
  }) => {
22
22
  aspectRatio: string;
23
- opacity?: undefined;
24
23
  objectFit?: undefined;
25
24
  } | {
26
- opacity: number;
27
25
  aspectRatio: string;
28
26
  objectFit: string;
29
27
  };
@@ -1 +1 @@
1
- {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../components/ui/video.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAIjE,QAAA,MAAM,aAAa,gGAEjB,CAAA;AAEF,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAC5C,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,KAAK,EAAE,OAAO,GAAG,SAAS,CAAA;IAC1B,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1B;AAED,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,2CAQjD;AAED,QAAA,MAAM,aAAa,oBACA,eAAe,YACtB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE;;;;;;;;CActD,CAAA;AAED,QAAA,MAAM,sBAAsB,oBAAqB,eAAe;;;;;;;;;;CAW/D,CAAA;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,sBAAsB,EAAE,CAAA"}
1
+ {"version":3,"file":"video.d.ts","sourceRoot":"","sources":["../../../components/ui/video.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAIjE,QAAA,MAAM,aAAa,gGAEjB,CAAA;AAEF,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAC5C,YAAY,CAAC,OAAO,aAAa,CAAC;IACpC,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAA;IAC7B,KAAK,EAAE,OAAO,GAAG,SAAS,CAAA;IAC1B,IAAI,EAAE,OAAO,GAAG,SAAS,CAAA;CAC1B;AAED,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,2CAQjD;AAED,QAAA,MAAM,aAAa,oBACA,eAAe,YACtB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,kBAAkB,EAAE,MAAM,CAAA;CAAE;;;;;;CAatD,CAAA;AAED,QAAA,MAAM,sBAAsB,oBAAqB,eAAe;;;;;;;;;;CAW/D,CAAA;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,sBAAsB,EAAE,CAAA"}
@@ -24,7 +24,6 @@ const getVideoStyle = (videoAttributes, videoSrc) => {
24
24
  return { aspectRatio: videoSrc.naturalAspectRatio.replace(":", "/") };
25
25
  }
26
26
  return {
27
- opacity: videoAttributes.overlayOpacity / 100,
28
27
  aspectRatio: videoAttributes.aspectRatio === "auto"
29
28
  ? videoSrc.naturalAspectRatio.replace(":", "/")
30
29
  : videoAttributes.aspectRatio.replace(":", "/"),
package/dist/index.d.ts CHANGED
@@ -50,4 +50,5 @@ export * from "./components/hooks/use-product-options";
50
50
  export * from "./components/ui/wishlist-select";
51
51
  export * from "./components/hooks/use-shop";
52
52
  export * from "./components/libs/sort-filter/search-integration";
53
+ export * from "./components/ui/subcollection-tabs";
53
54
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,EAAE,EACF,GAAG,EACH,QAAQ,EACR,4BAA4B,EAC5B,mBAAmB,EACnB,YAAY,EACZ,yBAAyB,EACzB,4BAA4B,EAC5B,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,aAAa,CAAA;AACpB,cAAc,mCAAmC,CAAA;AACjD,cAAc,wCAAwC,CAAA;AACtD,cAAc,wCAAwC,CAAA;AACtD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yCAAyC,CAAA;AACvD,cAAc,oCAAoC,CAAA;AAClD,cAAc,2BAA2B,CAAA;AACzC,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,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,sCAAsC,CAAA;AACpD,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iCAAiC,CAAA;AAC/C,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,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,0BAA0B,CAAA;AACxC,cAAc,wCAAwC,CAAA;AACtD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kDAAkD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,EAAE,EACF,GAAG,EACH,QAAQ,EACR,4BAA4B,EAC5B,mBAAmB,EACnB,YAAY,EACZ,yBAAyB,EACzB,4BAA4B,EAC5B,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,aAAa,CAAA;AACpB,cAAc,mCAAmC,CAAA;AACjD,cAAc,wCAAwC,CAAA;AACtD,cAAc,wCAAwC,CAAA;AACtD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,yCAAyC,CAAA;AACvD,cAAc,oCAAoC,CAAA;AAClD,cAAc,2BAA2B,CAAA;AACzC,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,0BAA0B,CAAA;AACxC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA;AACpC,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA;AACrC,cAAc,sCAAsC,CAAA;AACpD,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA;AACrC,cAAc,8BAA8B,CAAA;AAC5C,cAAc,iCAAiC,CAAA;AAC/C,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,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,0BAA0B,CAAA;AACxC,cAAc,wCAAwC,CAAA;AACtD,cAAc,iCAAiC,CAAA;AAC/C,cAAc,6BAA6B,CAAA;AAC3C,cAAc,kDAAkD,CAAA;AAChE,cAAc,oCAAoC,CAAA"}
package/dist/index.js CHANGED
@@ -51,3 +51,4 @@ export * from "./components/hooks/use-product-options";
51
51
  export * from "./components/ui/wishlist-select";
52
52
  export * from "./components/hooks/use-shop";
53
53
  export * from "./components/libs/sort-filter/search-integration";
54
+ export * from "./components/ui/subcollection-tabs";
package/dist/styles.css CHANGED
@@ -481,7 +481,7 @@ video {
481
481
  --productImage-scaling: cover;
482
482
  --productImage-isCustom: "false";
483
483
 
484
- --standard-shadow: 0px 5px 25px 0px rgba(0, 0, 0, 0.10);
484
+ --standard-shadow: 0px 5px 25px 0px rgba (0,  0,  0,  0.10);
485
485
  }
486
486
  .textarea-component::-webkit-scrollbar {
487
487
  width: 4px;
@@ -1367,6 +1367,9 @@ video {
1367
1367
  .whitespace-nowrap {
1368
1368
  white-space: nowrap;
1369
1369
  }
1370
+ .break-words {
1371
+ overflow-wrap: break-word;
1372
+ }
1370
1373
  .rounded {
1371
1374
  border-radius: 0.25rem;
1372
1375
  }
@@ -1574,12 +1577,6 @@ video {
1574
1577
  --tw-bg-opacity: 1;
1575
1578
  background-color: rgb(255 255 255 / var(--tw-bg-opacity));
1576
1579
  }
1577
- .bg-\[linear-gradient\(270deg\2c \#ffffff00_0\%\2c \#FFF_100\%\)\] {
1578
- background-image: linear-gradient(270deg,#ffffff00 0%,#FFF 100%);
1579
- }
1580
- .bg-\[linear-gradient\(90deg\2c \#ffffff00_0\%\2c \#FFF_100\%\)\] {
1581
- background-image: linear-gradient(90deg,#ffffff00 0%,#FFF 100%);
1582
- }
1583
1580
  .bg-fade-left {
1584
1581
  background-image: linear-gradient(to right, var(--coreColors-pageColor) 0%, #ffffff00 100%);;
1585
1582
  }
@@ -2189,6 +2186,43 @@ body::-webkit-scrollbar {
2189
2186
  scrollbar-width: none; /* Firefox */
2190
2187
  }
2191
2188
 
2189
+ .gradient-right::before,
2190
+ .gradient-left::before {
2191
+ content: "";
2192
+ position: absolute;
2193
+ top: 0;
2194
+ bottom: 0;
2195
+ left: 0;
2196
+ right: 0;
2197
+ background: var(--coreColors-pageColor);
2198
+ }
2199
+
2200
+ .gradient-right::before {
2201
+ -webkit-mask-image: linear-gradient(
2202
+ to left,
2203
+ var(--coreColors-pageColor),
2204
+ transparent
2205
+ );
2206
+ mask-image: linear-gradient(
2207
+ to left,
2208
+ var(--coreColors-pageColor),
2209
+ transparent
2210
+ );
2211
+ }
2212
+
2213
+ .gradient-left::before {
2214
+ -webkit-mask-image: linear-gradient(
2215
+ to right,
2216
+ var(--coreColors-pageColor),
2217
+ transparent
2218
+ );
2219
+ mask-image: linear-gradient(
2220
+ to right,
2221
+ var(--coreColors-pageColor),
2222
+ transparent
2223
+ );
2224
+ }
2225
+
2192
2226
  .file\:border-0::file-selector-button {
2193
2227
  border-width: 0px;
2194
2228
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tapcart/mobile-components",
3
- "version": "0.6.11",
3
+ "version": "0.6.13",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "style": "dist/styles.css",
@@ -11,16 +11,6 @@
11
11
  "license": "SEE LICENSE IN LICENSE.md",
12
12
  "author": "Tapcart Inc.",
13
13
  "homepage": "https://tapcart.com",
14
- "scripts": {
15
- "lint": "eslint \"**/*.ts*\"",
16
- "ui:add": "pnpm dlx shadcn-ui@latest add",
17
- "build:styles": "postcss styles/globals.css -o dist/styles.css",
18
- "build:ts": "tsc -p tsconfig.json && tsc-alias",
19
- "build": "pnpm run build:ts && pnpm run build:styles",
20
- "dev:ts": "tsc -w -p tsconfig.json",
21
- "dev:styles": "npx tailwindcss -i styles/globals.css -o dist/styles.css --watch",
22
- "dev": "concurrently \"pnpm run dev:ts\" \"pnpm run dev:styles\""
23
- },
24
14
  "peerDependencies": {
25
15
  "react": "^17.0.2 || ^18.0.0",
26
16
  "react-dom": "^17.0.2 || ^18.0.0"
@@ -29,17 +19,17 @@
29
19
  "@types/lodash": "4.17.5",
30
20
  "@types/react": "^18.2.0",
31
21
  "@types/react-dom": "^18.2.0",
32
- "app-studio-types": "workspace:*",
33
22
  "autoprefixer": "^10.4.14",
34
23
  "chokidar-cli": "^3.0.0",
35
24
  "concurrently": "^8.2.2",
36
25
  "eslint": "^7.32.0",
37
- "eslint-config-custom": "workspace:*",
38
26
  "postcss": "^8.4.24",
39
27
  "tailwindcss": "^3.3.2",
40
28
  "tsc-alias": "^1.8.10",
41
- "tsconfig": "workspace:*",
42
- "typescript": "^4.5.2"
29
+ "typescript": "^4.5.2",
30
+ "app-studio-types": "0.0.3",
31
+ "tsconfig": "0.0.0",
32
+ "eslint-config-custom": "0.0.0"
43
33
  },
44
34
  "dependencies": {
45
35
  "@radix-ui/react-accordion": "^1.1.2",
@@ -73,5 +63,15 @@
73
63
  "tailwind-merge": "^1.13.2",
74
64
  "tailwindcss-animate": "^1.0.6",
75
65
  "vaul": "^0.9.1"
66
+ },
67
+ "scripts": {
68
+ "lint": "eslint \"**/*.ts*\"",
69
+ "ui:add": "pnpm dlx shadcn-ui@latest add",
70
+ "build:styles": "postcss styles/globals.css -o dist/styles.css",
71
+ "build:ts": "tsc -p tsconfig.json && tsc-alias",
72
+ "build": "pnpm run build:ts && pnpm run build:styles",
73
+ "dev:ts": "tsc -w -p tsconfig.json",
74
+ "dev:styles": "npx tailwindcss -i styles/globals.css -o dist/styles.css --watch",
75
+ "dev": "concurrently \"pnpm run dev:ts\" \"pnpm run dev:styles\""
76
76
  }
77
77
  }