@otaga/web-ui-kit 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/BottomBar.d.ts +18 -0
  2. package/dist/BottomBar.d.ts.map +1 -0
  3. package/dist/BottomBar.js +52 -0
  4. package/dist/BottomBar.js.map +1 -0
  5. package/dist/BottomSheet.d.ts +11 -0
  6. package/dist/BottomSheet.d.ts.map +1 -0
  7. package/dist/BottomSheet.js +96 -0
  8. package/dist/BottomSheet.js.map +1 -0
  9. package/dist/BuyButton.d.ts +9 -0
  10. package/dist/BuyButton.d.ts.map +1 -0
  11. package/dist/BuyButton.js +91 -0
  12. package/dist/BuyButton.js.map +1 -0
  13. package/dist/CartButton.d.ts +11 -0
  14. package/dist/CartButton.d.ts.map +1 -0
  15. package/dist/CartButton.js +102 -0
  16. package/dist/CartButton.js.map +1 -0
  17. package/dist/Collapsible.d.ts +5 -0
  18. package/dist/Collapsible.d.ts.map +1 -0
  19. package/dist/Collapsible.js +34 -0
  20. package/dist/Collapsible.js.map +1 -0
  21. package/dist/Icon.d.ts +9 -0
  22. package/dist/Icon.d.ts.map +1 -0
  23. package/dist/Icon.js +19 -0
  24. package/dist/Icon.js.map +1 -0
  25. package/dist/SegmentedControl.d.ts +10 -0
  26. package/dist/SegmentedControl.d.ts.map +1 -0
  27. package/dist/SegmentedControl.js +30 -0
  28. package/dist/SegmentedControl.js.map +1 -0
  29. package/dist/Sidebar.d.ts +17 -0
  30. package/dist/Sidebar.d.ts.map +1 -0
  31. package/dist/Sidebar.js +70 -0
  32. package/dist/Sidebar.js.map +1 -0
  33. package/dist/ThemedText.d.ts +7 -0
  34. package/dist/ThemedText.d.ts.map +1 -0
  35. package/dist/ThemedText.js +22 -0
  36. package/dist/ThemedText.js.map +1 -0
  37. package/dist/ThemedView.d.ts +7 -0
  38. package/dist/ThemedView.d.ts.map +1 -0
  39. package/dist/ThemedView.js +12 -0
  40. package/dist/ThemedView.js.map +1 -0
  41. package/dist/index.d.ts +22 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +13 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/theme.d.ts +25 -0
  46. package/dist/theme.d.ts.map +1 -0
  47. package/dist/theme.js +25 -0
  48. package/dist/theme.js.map +1 -0
  49. package/dist/use-color-scheme.d.ts +2 -0
  50. package/dist/use-color-scheme.d.ts.map +1 -0
  51. package/dist/use-color-scheme.js +15 -0
  52. package/dist/use-color-scheme.js.map +1 -0
  53. package/package.json +21 -0
@@ -0,0 +1,18 @@
1
+ import { CSSProperties } from 'react';
2
+ export type BottomBarTab = {
3
+ id: string;
4
+ icon: string;
5
+ label: string;
6
+ };
7
+ export type BottomBarProps = {
8
+ tabs: BottomBarTab[];
9
+ activeTab: string;
10
+ onTabPress: (id: string) => void;
11
+ backgroundColor?: string;
12
+ activeBackgroundColor?: string;
13
+ activeTintColor?: string;
14
+ inactiveTintColor?: string;
15
+ style?: CSSProperties;
16
+ };
17
+ export declare function BottomBar({ tabs, activeTab, onTabPress, backgroundColor, activeBackgroundColor, activeTintColor, inactiveTintColor, style, }: BottomBarProps): import("react/jsx-runtime").JSX.Element;
18
+ //# sourceMappingURL=BottomBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BottomBar.d.ts","sourceRoot":"","sources":["../BottomBar.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAKtC,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvE,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,YAAY,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,SAAS,EACT,UAAU,EACV,eAAe,EACf,qBAA8B,EAC9B,eAAwB,EACxB,iBAAiB,EACjB,KAAK,GACN,EAAE,cAAc,2CAyEhB"}
@@ -0,0 +1,52 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { Icon } from './Icon';
4
+ import { Colors } from './theme';
5
+ import { useColorScheme } from './use-color-scheme';
6
+ export function BottomBar({ tabs, activeTab, onTabPress, backgroundColor, activeBackgroundColor = '#000', activeTintColor = '#fff', inactiveTintColor, style, }) {
7
+ const scheme = useColorScheme();
8
+ const theme = Colors[scheme];
9
+ const bg = backgroundColor ?? theme.background;
10
+ const inactiveColor = inactiveTintColor ?? theme.icon;
11
+ return (_jsx("div", { style: {
12
+ position: 'fixed',
13
+ bottom: 30,
14
+ left: 0,
15
+ right: 0,
16
+ display: 'flex',
17
+ justifyContent: 'center',
18
+ paddingInline: 20,
19
+ pointerEvents: 'none',
20
+ zIndex: 100,
21
+ ...style,
22
+ }, children: _jsx("div", { style: {
23
+ display: 'flex',
24
+ flexDirection: 'row',
25
+ alignItems: 'center',
26
+ justifyContent: 'space-around',
27
+ backgroundColor: bg,
28
+ borderRadius: 40,
29
+ height: 70,
30
+ width: '100%',
31
+ maxWidth: 500,
32
+ padding: '0 10px',
33
+ boxShadow: '0 5px 20px rgba(0,0,0,0.12)',
34
+ pointerEvents: 'all',
35
+ }, children: tabs.map((tab) => {
36
+ const isActive = activeTab === tab.id;
37
+ return (_jsxs("button", { onClick: () => onTabPress(tab.id), style: {
38
+ display: 'flex',
39
+ flexDirection: 'row',
40
+ alignItems: 'center',
41
+ gap: 8,
42
+ padding: '12px 20px',
43
+ height: 50,
44
+ border: 'none',
45
+ borderRadius: 100,
46
+ backgroundColor: isActive ? activeBackgroundColor : 'transparent',
47
+ cursor: 'pointer',
48
+ transition: 'all 0.2s ease',
49
+ }, children: [_jsx(Icon, { name: tab.icon, size: 24, color: isActive ? activeTintColor : inactiveColor }), isActive && (_jsx("span", { style: { color: activeTintColor, fontWeight: 700, fontSize: 14, whiteSpace: 'nowrap' }, children: tab.label }))] }, tab.id));
50
+ }) }) }));
51
+ }
52
+ //# sourceMappingURL=BottomBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BottomBar.js","sourceRoot":"","sources":["../BottomBar.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,IAAI,EAAY,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAepD,MAAM,UAAU,SAAS,CAAC,EACxB,IAAI,EACJ,SAAS,EACT,UAAU,EACV,eAAe,EACf,qBAAqB,GAAG,MAAM,EAC9B,eAAe,GAAG,MAAM,EACxB,iBAAiB,EACjB,KAAK,GACU;IACf,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7B,MAAM,EAAE,GAAG,eAAe,IAAI,KAAK,CAAC,UAAU,CAAC;IAC/C,MAAM,aAAa,GAAG,iBAAiB,IAAI,KAAK,CAAC,IAAI,CAAC;IAEtD,OAAO,CACL,cACE,KAAK,EAAE;YACL,QAAQ,EAAE,OAAO;YACjB,MAAM,EAAE,EAAE;YACV,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,MAAM;YACf,cAAc,EAAE,QAAQ;YACxB,aAAa,EAAE,EAAE;YACjB,aAAa,EAAE,MAAM;YACrB,MAAM,EAAE,GAAG;YACX,GAAG,KAAK;SACT,YAED,cACE,KAAK,EAAE;gBACL,OAAO,EAAE,MAAM;gBACf,aAAa,EAAE,KAAK;gBACpB,UAAU,EAAE,QAAQ;gBACpB,cAAc,EAAE,cAAc;gBAC9B,eAAe,EAAE,EAAE;gBACnB,YAAY,EAAE,EAAE;gBAChB,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,MAAM;gBACb,QAAQ,EAAE,GAAG;gBACb,OAAO,EAAE,QAAQ;gBACjB,SAAS,EAAE,6BAA6B;gBACxC,aAAa,EAAE,KAAK;aACrB,YAEA,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBAChB,MAAM,QAAQ,GAAG,SAAS,KAAK,GAAG,CAAC,EAAE,CAAC;gBACtC,OAAO,CACL,kBAEE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EACjC,KAAK,EAAE;wBACL,OAAO,EAAE,MAAM;wBACf,aAAa,EAAE,KAAK;wBACpB,UAAU,EAAE,QAAQ;wBACpB,GAAG,EAAE,CAAC;wBACN,OAAO,EAAE,WAAW;wBACpB,MAAM,EAAE,EAAE;wBACV,MAAM,EAAE,MAAM;wBACd,YAAY,EAAE,GAAG;wBACjB,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,aAAa;wBACjE,MAAM,EAAE,SAAS;wBACjB,UAAU,EAAE,eAAe;qBAC5B,aAED,KAAC,IAAI,IACH,IAAI,EAAE,GAAG,CAAC,IAAgB,EAC1B,IAAI,EAAE,EAAE,EACR,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,GACjD,EACD,QAAQ,IAAI,CACX,eAAM,KAAK,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,YACzF,GAAG,CAAC,KAAK,GACL,CACR,KAzBI,GAAG,CAAC,EAAE,CA0BJ,CACV,CAAC;YACJ,CAAC,CAAC,GACE,GACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { ReactNode } from 'react';
2
+ export type BottomSheetProps = {
3
+ visible?: boolean;
4
+ onClose?: () => void;
5
+ children: ReactNode;
6
+ snapPoints?: number[];
7
+ backgroundColor?: string;
8
+ persistent?: boolean;
9
+ };
10
+ export declare function BottomSheet({ visible, onClose, children, snapPoints, backgroundColor, persistent, }: BottomSheetProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=BottomSheet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BottomSheet.d.ts","sourceRoot":"","sources":["../BottomSheet.tsx"],"names":[],"mappings":"AACA,OAAO,EAAiB,SAAS,EAA+B,MAAM,OAAO,CAAC;AAI9E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAC1B,OAAc,EACd,OAAO,EACP,QAAQ,EACR,UAAuB,EACvB,eAAe,EACf,UAAkB,GACnB,EAAE,gBAAgB,2CA8HlB"}
@@ -0,0 +1,96 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useRef, useState } from 'react';
4
+ import { Colors } from './theme';
5
+ import { useColorScheme } from './use-color-scheme';
6
+ export function BottomSheet({ visible = true, onClose, children, snapPoints = [300, 520], backgroundColor, persistent = false, }) {
7
+ const scheme = useColorScheme();
8
+ const bg = backgroundColor ?? Colors[scheme].background;
9
+ const points = [...snapPoints].sort((a, b) => a - b);
10
+ const minH = points[0];
11
+ const maxH = points[points.length - 1];
12
+ const [sheetH, setSheetH] = useState(persistent ? minH : 0);
13
+ const [dragging, setDragging] = useState(false);
14
+ const startY = useRef(0);
15
+ const startH = useRef(0);
16
+ useEffect(() => {
17
+ if (persistent) {
18
+ setSheetH(minH);
19
+ }
20
+ else {
21
+ setSheetH(visible ? minH : 0);
22
+ }
23
+ }, [visible, persistent, minH]);
24
+ // Prevent body scroll when open
25
+ useEffect(() => {
26
+ if (visible || persistent)
27
+ document.body.style.overflow = 'hidden';
28
+ else
29
+ document.body.style.overflow = '';
30
+ return () => { document.body.style.overflow = ''; };
31
+ }, [visible, persistent]);
32
+ const onPointerDown = (e) => {
33
+ setDragging(true);
34
+ startY.current = e.clientY;
35
+ startH.current = sheetH;
36
+ e.currentTarget.setPointerCapture(e.pointerId);
37
+ };
38
+ const onPointerMove = (e) => {
39
+ if (!dragging)
40
+ return;
41
+ const delta = startY.current - e.clientY;
42
+ setSheetH(Math.min(maxH, Math.max(persistent ? minH : 0, startH.current + delta)));
43
+ };
44
+ const onPointerUp = () => {
45
+ setDragging(false);
46
+ const mid = (minH + maxH) / 2;
47
+ if (!persistent && sheetH < minH * 0.5) {
48
+ setSheetH(0);
49
+ onClose?.();
50
+ }
51
+ else {
52
+ setSheetH(sheetH > mid ? maxH : minH);
53
+ }
54
+ };
55
+ const isVisible = persistent || visible;
56
+ return (_jsxs("div", { style: {
57
+ position: 'fixed',
58
+ inset: 0,
59
+ zIndex: 150,
60
+ pointerEvents: isVisible ? 'all' : 'none',
61
+ }, children: [!persistent && (_jsx("div", { onClick: onClose, style: {
62
+ position: 'absolute',
63
+ inset: 0,
64
+ backgroundColor: 'rgba(0,0,0,0.5)',
65
+ opacity: visible ? 1 : 0,
66
+ transition: dragging ? 'none' : 'opacity 0.3s ease',
67
+ } })), _jsxs("div", { style: {
68
+ position: 'absolute',
69
+ bottom: 0,
70
+ left: 0,
71
+ right: 0,
72
+ height: sheetH,
73
+ backgroundColor: bg,
74
+ borderTopLeftRadius: 28,
75
+ borderTopRightRadius: 28,
76
+ boxShadow: '0 -8px 30px rgba(0,0,0,0.12)',
77
+ transition: dragging ? 'none' : 'height 0.35s cubic-bezier(0.32,0.72,0,1)',
78
+ display: 'flex',
79
+ flexDirection: 'column',
80
+ overflow: 'hidden',
81
+ }, children: [_jsx("div", { onPointerDown: onPointerDown, onPointerMove: onPointerMove, onPointerUp: onPointerUp, style: {
82
+ display: 'flex',
83
+ justifyContent: 'center',
84
+ alignItems: 'center',
85
+ height: 32,
86
+ cursor: 'grab',
87
+ flexShrink: 0,
88
+ touchAction: 'none',
89
+ }, children: _jsx("div", { style: {
90
+ width: 40,
91
+ height: 4,
92
+ borderRadius: 2,
93
+ backgroundColor: 'rgba(0,0,0,0.15)',
94
+ } }) }), _jsx("div", { style: { flex: 1, padding: '0 20px 20px', overflowY: 'auto' }, children: children })] })] }));
95
+ }
96
+ //# sourceMappingURL=BottomSheet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BottomSheet.js","sourceRoot":"","sources":["../BottomSheet.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export type BuyButtonProps = {
2
+ label?: string;
3
+ color?: string;
4
+ height?: number;
5
+ width?: number | string;
6
+ onBuy?: () => void;
7
+ };
8
+ export declare function BuyButton({ label, color, height: containerH, width, onBuy, }: BuyButtonProps): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=BuyButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuyButton.d.ts","sourceRoot":"","sources":["../BuyButton.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF,wBAAgB,SAAS,CAAC,EACxB,KAAiB,EACjB,KAAc,EACd,MAAM,EAAE,UAAe,EACvB,KAAc,EACd,KAAK,GACN,EAAE,cAAc,2CAoHhB"}
@@ -0,0 +1,91 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useRef, useState } from 'react';
4
+ import { Icon } from './Icon';
5
+ export function BuyButton({ label = 'Buy Now', color = '#000', height: containerH = 62, width = '100%', onBuy, }) {
6
+ const [isBought, setIsBought] = useState(false);
7
+ const [translateX, setTranslateX] = useState(0);
8
+ const [transitioning, setTransitioning] = useState(false);
9
+ const containerRef = useRef(null);
10
+ const startX = useRef(0);
11
+ const dragging = useRef(false);
12
+ const padding = containerH * 0.1;
13
+ const innerSize = containerH - padding * 2;
14
+ const fontSize = innerSize * 0.35;
15
+ const iconSize = innerSize * 0.5;
16
+ const getSwipeLimit = () => {
17
+ const w = containerRef.current?.clientWidth ?? 300;
18
+ return w - innerSize - padding * 2;
19
+ };
20
+ const onPointerDown = (e) => {
21
+ if (isBought)
22
+ return;
23
+ dragging.current = true;
24
+ startX.current = e.clientX - translateX;
25
+ setTransitioning(false);
26
+ e.currentTarget.setPointerCapture(e.pointerId);
27
+ };
28
+ const onPointerMove = (e) => {
29
+ if (!dragging.current)
30
+ return;
31
+ const limit = getSwipeLimit();
32
+ setTranslateX(Math.max(0, Math.min(limit, e.clientX - startX.current)));
33
+ };
34
+ const onPointerUp = () => {
35
+ if (!dragging.current)
36
+ return;
37
+ dragging.current = false;
38
+ setTransitioning(true);
39
+ const limit = getSwipeLimit();
40
+ if (translateX > limit * 0.8) {
41
+ setTranslateX(limit);
42
+ setIsBought(true);
43
+ onBuy?.();
44
+ setTimeout(() => { setIsBought(false); setTranslateX(0); }, 2000);
45
+ }
46
+ else {
47
+ setTranslateX(0);
48
+ }
49
+ };
50
+ const progress = translateX / (getSwipeLimit() || 1);
51
+ const textOpacity = Math.max(0, 1 - progress * 2.5);
52
+ return (_jsxs("div", { ref: containerRef, style: {
53
+ position: 'relative',
54
+ display: 'flex',
55
+ alignItems: 'center',
56
+ backgroundColor: color,
57
+ borderRadius: containerH / 2,
58
+ height: containerH,
59
+ width,
60
+ padding,
61
+ boxSizing: 'border-box',
62
+ overflow: 'hidden',
63
+ userSelect: 'none',
64
+ }, children: [_jsxs("div", { style: {
65
+ position: 'absolute',
66
+ inset: 0,
67
+ display: 'flex',
68
+ alignItems: 'center',
69
+ justifyContent: 'center',
70
+ gap: 6,
71
+ paddingLeft: 30,
72
+ opacity: textOpacity,
73
+ pointerEvents: 'none',
74
+ }, children: [_jsx("span", { style: { color: '#fff', fontSize, fontWeight: 700 }, children: label }), _jsxs("div", { style: { display: 'flex', gap: 2 }, children: [_jsx(Icon, { name: "chevron.right", size: fontSize * 0.8, color: "rgba(255,255,255,0.3)" }), _jsx(Icon, { name: "chevron.right", size: fontSize * 0.8, color: "rgba(255,255,255,0.6)" }), _jsx(Icon, { name: "chevron.right", size: fontSize * 0.8, color: "#fff" })] })] }), _jsx("div", { onPointerDown: onPointerDown, onPointerMove: onPointerMove, onPointerUp: onPointerUp, style: {
75
+ display: 'flex',
76
+ alignItems: 'center',
77
+ justifyContent: 'center',
78
+ backgroundColor: '#fff',
79
+ width: innerSize,
80
+ height: innerSize,
81
+ borderRadius: '50%',
82
+ transform: `translateX(${translateX}px)`,
83
+ transition: transitioning ? 'transform 0.35s cubic-bezier(0.32,0.72,0,1)' : 'none',
84
+ zIndex: 10,
85
+ cursor: isBought ? 'default' : 'grab',
86
+ boxShadow: '0 2px 8px rgba(0,0,0,0.2)',
87
+ flexShrink: 0,
88
+ touchAction: 'none',
89
+ }, children: _jsx(Icon, { name: isBought ? 'checkmark' : 'bag', size: iconSize, color: "#000" }) })] }));
90
+ }
91
+ //# sourceMappingURL=BuyButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuyButton.js","sourceRoot":"","sources":["../BuyButton.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export type CartButtonProps = {
2
+ label?: string;
3
+ color?: string;
4
+ iconColor?: string;
5
+ height?: number;
6
+ width?: number | string;
7
+ onAddToCart?: () => void;
8
+ onBagPress?: () => void;
9
+ };
10
+ export declare function CartButton({ label, color, iconColor, height: containerH, width, onAddToCart, onBagPress, }: CartButtonProps): import("react/jsx-runtime").JSX.Element;
11
+ //# sourceMappingURL=CartButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CartButton.d.ts","sourceRoot":"","sources":["../CartButton.tsx"],"names":[],"mappings":"AAIA,MAAM,MAAM,eAAe,GAAG;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAEF,wBAAgB,UAAU,CAAC,EACzB,KAAqB,EACrB,KAAc,EACd,SAAkB,EAClB,MAAM,EAAE,UAAe,EACvB,KAAc,EACd,WAAW,EACX,UAAU,GACX,EAAE,eAAe,2CAwIjB"}
@@ -0,0 +1,102 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useRef, useState } from 'react';
4
+ import { Icon } from './Icon';
5
+ export function CartButton({ label = 'Add to cart', color = '#000', iconColor = '#fff', height: containerH = 66, width = '100%', onAddToCart, onBagPress, }) {
6
+ const [isAdded, setIsAdded] = useState(false);
7
+ const [translateX, setTranslateX] = useState(0);
8
+ const [transitioning, setTransitioning] = useState(false);
9
+ const containerRef = useRef(null);
10
+ const startX = useRef(0);
11
+ const dragging = useRef(false);
12
+ const padding = containerH * 0.1;
13
+ const innerH = containerH - padding * 2;
14
+ const circleSize = innerH;
15
+ const fontSize = innerH * 0.3;
16
+ const iconSize = innerH * 0.4;
17
+ const getSwipeLimit = () => {
18
+ const w = containerRef.current?.clientWidth ?? 300;
19
+ return w - circleSize - padding * 2;
20
+ };
21
+ const onPointerDown = (e) => {
22
+ if (isAdded)
23
+ return;
24
+ dragging.current = true;
25
+ startX.current = e.clientX - translateX;
26
+ setTransitioning(false);
27
+ e.currentTarget.setPointerCapture(e.pointerId);
28
+ };
29
+ const onPointerMove = (e) => {
30
+ if (!dragging.current)
31
+ return;
32
+ const limit = getSwipeLimit();
33
+ const next = Math.max(0, Math.min(limit, e.clientX - startX.current));
34
+ setTranslateX(next);
35
+ };
36
+ const onPointerUp = () => {
37
+ if (!dragging.current)
38
+ return;
39
+ dragging.current = false;
40
+ const limit = getSwipeLimit();
41
+ setTransitioning(true);
42
+ if (translateX > limit * 0.7) {
43
+ setTranslateX(limit);
44
+ setIsAdded(true);
45
+ onAddToCart?.();
46
+ setTimeout(() => {
47
+ setIsAdded(false);
48
+ setTranslateX(0);
49
+ }, 2000);
50
+ }
51
+ else {
52
+ setTranslateX(0);
53
+ }
54
+ };
55
+ const progress = translateX / (getSwipeLimit() || 1);
56
+ const buttonW = `${50 - progress * (50 - circleSize / (containerRef.current?.clientWidth ?? 300) * 100)}%`;
57
+ const textOpacity = Math.max(0, 1 - progress * 2.5);
58
+ const bagOpacity = progress > 0.7 ? Math.max(0, 1 - (progress - 0.7) / 0.3) : 1;
59
+ return (_jsxs("div", { ref: containerRef, style: {
60
+ position: 'relative',
61
+ display: 'flex',
62
+ flexDirection: 'row',
63
+ alignItems: 'center',
64
+ backgroundColor: '#F0F0F0',
65
+ borderRadius: containerH / 2,
66
+ height: containerH,
67
+ width,
68
+ padding,
69
+ boxSizing: 'border-box',
70
+ overflow: 'hidden',
71
+ userSelect: 'none',
72
+ }, children: [_jsxs("div", { style: { position: 'absolute', left: '50%', display: 'flex', gap: 4, pointerEvents: 'none' }, children: [_jsx(Icon, { name: "chevron.right", size: iconSize * 0.8, color: "rgba(0,0,0,0.12)" }), _jsx(Icon, { name: "chevron.right", size: iconSize * 0.8, color: "rgba(0,0,0,0.25)" })] }), _jsx("div", { onPointerDown: onPointerDown, onPointerMove: onPointerMove, onPointerUp: onPointerUp, style: {
73
+ display: 'flex',
74
+ alignItems: 'center',
75
+ justifyContent: 'center',
76
+ backgroundColor: color,
77
+ height: innerH,
78
+ width: buttonW,
79
+ borderRadius: innerH / 2,
80
+ transform: `translateX(${translateX}px)`,
81
+ transition: transitioning ? 'transform 0.35s cubic-bezier(0.32,0.72,0,1), width 0.35s' : 'none',
82
+ zIndex: 10,
83
+ cursor: isAdded ? 'default' : 'grab',
84
+ overflow: 'hidden',
85
+ flexShrink: 0,
86
+ touchAction: 'none',
87
+ }, children: isAdded ? (_jsx(Icon, { name: "checkmark", size: iconSize * 1.5, color: iconColor })) : (_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 6, padding: '0 15px', opacity: textOpacity }, children: [_jsx("span", { style: { color: iconColor, fontSize, fontWeight: 700, whiteSpace: 'nowrap' }, children: label }), _jsx(Icon, { name: "chevron.right", size: iconSize, color: iconColor })] })) }), _jsx("button", { onClick: onBagPress, style: {
88
+ marginLeft: 'auto',
89
+ display: 'flex',
90
+ alignItems: 'center',
91
+ justifyContent: 'center',
92
+ backgroundColor: color,
93
+ width: circleSize,
94
+ height: circleSize,
95
+ borderRadius: '50%',
96
+ border: 'none',
97
+ cursor: 'pointer',
98
+ opacity: isAdded ? 0 : bagOpacity,
99
+ flexShrink: 0,
100
+ }, children: _jsx(Icon, { name: "bag", size: iconSize, color: iconColor }) })] }));
101
+ }
102
+ //# sourceMappingURL=CartButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CartButton.js","sourceRoot":"","sources":["../CartButton.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import { PropsWithChildren } from 'react';
2
+ export declare function Collapsible({ title, children }: PropsWithChildren<{
3
+ title: string;
4
+ }>): import("react/jsx-runtime").JSX.Element;
5
+ //# sourceMappingURL=Collapsible.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.d.ts","sourceRoot":"","sources":["../Collapsible.tsx"],"names":[],"mappings":"AACA,OAAO,EAAiB,iBAAiB,EAAY,MAAM,OAAO,CAAC;AAMnE,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,iBAAiB,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,2CA8CpF"}
@@ -0,0 +1,34 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from 'react';
4
+ import { Icon } from './Icon';
5
+ import { ThemedText } from './ThemedText';
6
+ import { useColorScheme } from './use-color-scheme';
7
+ import { Colors } from './theme';
8
+ export function Collapsible({ title, children }) {
9
+ const [open, setOpen] = useState(false);
10
+ const scheme = useColorScheme();
11
+ const iconColor = Colors[scheme].icon;
12
+ return (_jsxs("div", { children: [_jsxs("button", { onClick: () => setOpen((v) => !v), style: {
13
+ display: 'flex',
14
+ alignItems: 'center',
15
+ gap: 6,
16
+ background: 'none',
17
+ border: 'none',
18
+ cursor: 'pointer',
19
+ padding: 0,
20
+ width: '100%',
21
+ textAlign: 'left',
22
+ }, children: [_jsx("span", { style: {
23
+ display: 'inline-flex',
24
+ transition: 'transform 0.2s ease',
25
+ transform: open ? 'rotate(90deg)' : 'rotate(0deg)',
26
+ }, children: _jsx(Icon, { name: "chevron.right", size: 18, color: iconColor }) }), _jsx(ThemedText, { type: "defaultSemiBold", children: title })] }), _jsx("div", { style: {
27
+ overflow: 'hidden',
28
+ maxHeight: open ? 500 : 0,
29
+ transition: 'max-height 0.3s ease',
30
+ marginTop: open ? 6 : 0,
31
+ marginLeft: 24,
32
+ }, children: children })] }));
33
+ }
34
+ //# sourceMappingURL=Collapsible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.js","sourceRoot":"","sources":["../Collapsible.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,EAAoC,QAAQ,EAAE,MAAM,OAAO,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAwC;IACnF,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;IAEtC,OAAO,CACL,0BACE,kBACE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EACjC,KAAK,EAAE;oBACL,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,QAAQ;oBACpB,GAAG,EAAE,CAAC;oBACN,UAAU,EAAE,MAAM;oBAClB,MAAM,EAAE,MAAM;oBACd,MAAM,EAAE,SAAS;oBACjB,OAAO,EAAE,CAAC;oBACV,KAAK,EAAE,MAAM;oBACb,SAAS,EAAE,MAAM;iBAClB,aAED,eACE,KAAK,EAAE;4BACL,OAAO,EAAE,aAAa;4BACtB,UAAU,EAAE,qBAAqB;4BACjC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc;yBACnD,YAED,KAAC,IAAI,IAAC,IAAI,EAAC,eAAe,EAAC,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,GAAI,GACpD,EACP,KAAC,UAAU,IAAC,IAAI,EAAC,iBAAiB,YAAE,KAAK,GAAc,IAChD,EAET,cACE,KAAK,EAAE;oBACL,QAAQ,EAAE,QAAQ;oBAClB,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBACzB,UAAU,EAAE,sBAAsB;oBAClC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBACvB,UAAU,EAAE,EAAE;iBACE,YAEjB,QAAQ,GACL,IACF,CACP,CAAC;AACJ,CAAC"}
package/dist/Icon.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { CSSProperties } from 'react';
2
+ export type IconName = 'chevron.right' | 'chevron.left' | 'house.fill' | 'magnifyingglass' | 'person.fill' | 'bag' | 'bag.fill' | 'checkmark' | 'gearshape' | 'square.grid.2x2' | 'arrow.left.circle' | string;
3
+ export declare function Icon({ name, size, color, style, }: {
4
+ name: IconName;
5
+ size?: number;
6
+ color?: string;
7
+ style?: CSSProperties;
8
+ }): import("react/jsx-runtime").JSX.Element;
9
+ //# sourceMappingURL=Icon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Icon.d.ts","sourceRoot":"","sources":["../Icon.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,MAAM,MAAM,QAAQ,GAChB,eAAe,GAAG,cAAc,GAChC,YAAY,GAAG,iBAAiB,GAAG,aAAa,GAChD,KAAK,GAAG,UAAU,GAAG,WAAW,GAAG,WAAW,GAC9C,iBAAiB,GAAG,mBAAmB,GACvC,MAAM,CAAC;AAgBX,wBAAgB,IAAI,CAAC,EACnB,IAAI,EACJ,IAAS,EACT,KAAsB,EACtB,KAAK,GACN,EAAE;IACD,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,2CAkBA"}
package/dist/Icon.js ADDED
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ const ICONS = {
3
+ 'chevron.right': ['M9 18l6-6-6-6'],
4
+ 'chevron.left': ['M15 18l-6-6 6-6'],
5
+ 'house.fill': ['M3 9l9-7 9 7v11a2 2 0 01-2 2H5a2 2 0 01-2-2z', 'M9 22V12h6v10'],
6
+ 'magnifyingglass': ['M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z'],
7
+ 'person.fill': ['M20 21v-2a4 4 0 00-4-4H8a4 4 0 00-4 4v2', 'M12 11a4 4 0 100-8 4 4 0 000 8z'],
8
+ 'bag': ['M6 2L3 6v14a2 2 0 002 2h14a2 2 0 002-2V6l-3-4z', 'M3 6h18', 'M16 10a4 4 0 01-8 0'],
9
+ 'bag.fill': ['M6 2L3 6v14a2 2 0 002 2h14a2 2 0 002-2V6l-3-4z', 'M3 6h18', 'M16 10a4 4 0 01-8 0'],
10
+ 'checkmark': ['M5 13l4 4L19 7'],
11
+ 'gearshape': ['M12 15a3 3 0 100-6 3 3 0 000 6z', 'M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06-.06a2 2 0 01-2.83-2.83l.06-.06A1.65 1.65 0 004.68 15a1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 012.83-2.83l.06.06A1.65 1.65 0 009 4.68a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 2.83l-.06.06A1.65 1.65 0 0019.4 9a1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z'],
12
+ 'square.grid.2x2': ['M3 3h7v7H3z', 'M14 3h7v7h-7z', 'M3 14h7v7H3z', 'M14 14h7v7h-7z'],
13
+ 'arrow.left.circle': ['M21 12a9 9 0 11-18 0 9 9 0 0118 0z', 'M8 12h8', 'M12 8l-4 4 4 4'],
14
+ };
15
+ export function Icon({ name, size = 24, color = 'currentColor', style, }) {
16
+ const paths = ICONS[name] ?? ['M12 12h.01'];
17
+ return (_jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", stroke: color, strokeWidth: 1.75, strokeLinecap: "round", strokeLinejoin: "round", style: { display: 'inline-block', flexShrink: 0, ...style }, "aria-hidden": "true", children: paths.map((d, i) => _jsx("path", { d: d }, i)) }));
18
+ }
19
+ //# sourceMappingURL=Icon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Icon.js","sourceRoot":"","sources":["../Icon.tsx"],"names":[],"mappings":";AASA,MAAM,KAAK,GAA6B;IACtC,eAAe,EAAK,CAAC,eAAe,CAAC;IACrC,cAAc,EAAM,CAAC,iBAAiB,CAAC;IACvC,YAAY,EAAQ,CAAC,8CAA8C,EAAE,eAAe,CAAC;IACrF,iBAAiB,EAAG,CAAC,6CAA6C,CAAC;IACnE,aAAa,EAAO,CAAC,yCAAyC,EAAE,iCAAiC,CAAC;IAClG,KAAK,EAAe,CAAC,gDAAgD,EAAE,SAAS,EAAE,qBAAqB,CAAC;IACxG,UAAU,EAAU,CAAC,gDAAgD,EAAE,SAAS,EAAE,qBAAqB,CAAC;IACxG,WAAW,EAAS,CAAC,gBAAgB,CAAC;IACtC,WAAW,EAAS,CAAC,iCAAiC,EAAE,8kBAA8kB,CAAC;IACvoB,iBAAiB,EAAG,CAAC,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,CAAC;IACtF,mBAAmB,EAAC,CAAC,oCAAoC,EAAE,SAAS,EAAE,gBAAgB,CAAC;CACxF,CAAC;AAEF,MAAM,UAAU,IAAI,CAAC,EACnB,IAAI,EACJ,IAAI,GAAG,EAAE,EACT,KAAK,GAAG,cAAc,EACtB,KAAK,GAMN;IACC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC5C,OAAO,CACL,cACE,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,IAAI,EACZ,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,MAAM,EAAE,KAAK,EACb,WAAW,EAAE,IAAI,EACjB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,EACtB,KAAK,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,KAAK,EAAE,iBAC/C,MAAM,YAEjB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAc,CAAC,EAAE,CAAC,IAAP,CAAC,CAAU,CAAC,GACxC,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { CSSProperties } from 'react';
2
+ export type SegmentedControlProps = {
3
+ options: string[];
4
+ selectedOption: string;
5
+ onSelect: (option: string) => void;
6
+ activeColor?: string;
7
+ style?: CSSProperties;
8
+ };
9
+ export declare function SegmentedControl({ options, selectedOption, onSelect, activeColor, style, }: SegmentedControlProps): import("react/jsx-runtime").JSX.Element;
10
+ //# sourceMappingURL=SegmentedControl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SegmentedControl.d.ts","sourceRoot":"","sources":["../SegmentedControl.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,aAAa,CAAC;CACvB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,cAAc,EACd,QAAQ,EACR,WAAoB,EACpB,KAAK,GACN,EAAE,qBAAqB,2CAwCvB"}
@@ -0,0 +1,30 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ export function SegmentedControl({ options, selectedOption, onSelect, activeColor = '#000', style, }) {
4
+ return (_jsx("div", { style: {
5
+ display: 'flex',
6
+ flexDirection: 'row',
7
+ backgroundColor: '#EBE8E2',
8
+ borderRadius: 50,
9
+ padding: 4,
10
+ width: '100%',
11
+ boxSizing: 'border-box',
12
+ ...style,
13
+ }, children: options.map((option) => {
14
+ const isActive = selectedOption === option;
15
+ return (_jsx("button", { onClick: () => onSelect(option), style: {
16
+ flex: 1,
17
+ padding: '10px 0',
18
+ border: 'none',
19
+ borderRadius: 50,
20
+ background: isActive ? '#fff' : 'transparent',
21
+ color: isActive ? activeColor : '#666',
22
+ fontWeight: isActive ? 700 : 400,
23
+ fontSize: 14,
24
+ cursor: 'pointer',
25
+ transition: 'all 0.2s ease',
26
+ boxShadow: isActive ? '0 2px 8px rgba(0,0,0,0.1)' : 'none',
27
+ }, children: option }, option));
28
+ }) }));
29
+ }
30
+ //# sourceMappingURL=SegmentedControl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SegmentedControl.js","sourceRoot":"","sources":["../SegmentedControl.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAWb,MAAM,UAAU,gBAAgB,CAAC,EAC/B,OAAO,EACP,cAAc,EACd,QAAQ,EACR,WAAW,GAAG,MAAM,EACpB,KAAK,GACiB;IACtB,OAAO,CACL,cACE,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,KAAK;YACpB,eAAe,EAAE,SAAS;YAC1B,YAAY,EAAE,EAAE;YAChB,OAAO,EAAE,CAAC;YACV,KAAK,EAAE,MAAM;YACb,SAAS,EAAE,YAAY;YACvB,GAAG,KAAK;SACT,YAEA,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;YACtB,MAAM,QAAQ,GAAG,cAAc,KAAK,MAAM,CAAC;YAC3C,OAAO,CACL,iBAEE,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,EAC/B,KAAK,EAAE;oBACL,IAAI,EAAE,CAAC;oBACP,OAAO,EAAE,QAAQ;oBACjB,MAAM,EAAE,MAAM;oBACd,YAAY,EAAE,EAAE;oBAChB,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa;oBAC7C,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;oBACtC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;oBAChC,QAAQ,EAAE,EAAE;oBACZ,MAAM,EAAE,SAAS;oBACjB,UAAU,EAAE,eAAe;oBAC3B,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,MAAM;iBAC3D,YAEA,MAAM,IAhBF,MAAM,CAiBJ,CACV,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { ReactNode } from 'react';
2
+ export type SidebarItem = {
3
+ id: string;
4
+ label: string;
5
+ icon?: string;
6
+ onPress?: () => void;
7
+ };
8
+ export type SidebarProps = {
9
+ visible: boolean;
10
+ onClose: () => void;
11
+ title?: string;
12
+ items: SidebarItem[];
13
+ footer?: ReactNode;
14
+ width?: number | string;
15
+ };
16
+ export declare function Sidebar({ visible, onClose, title, items, footer, width }: SidebarProps): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=Sidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sidebar.d.ts","sourceRoot":"","sources":["../Sidebar.tsx"],"names":[],"mappings":"AACA,OAAO,EAAiB,SAAS,EAAqB,MAAM,OAAO,CAAC;AAMpE,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,WAAW,EAAE,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB,CAAC;AAEF,wBAAgB,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAa,EAAE,EAAE,YAAY,2CAoH9F"}
@@ -0,0 +1,70 @@
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useRef } from 'react';
4
+ import { Icon } from './Icon';
5
+ import { ThemedText } from './ThemedText';
6
+ import { Colors } from './theme';
7
+ import { useColorScheme } from './use-color-scheme';
8
+ export function Sidebar({ visible, onClose, title, items, footer, width = '75%' }) {
9
+ const scheme = useColorScheme();
10
+ const theme = Colors[scheme];
11
+ const overlayRef = useRef(null);
12
+ useEffect(() => {
13
+ const onKey = (e) => { if (e.key === 'Escape')
14
+ onClose(); };
15
+ if (visible)
16
+ document.addEventListener('keydown', onKey);
17
+ return () => document.removeEventListener('keydown', onKey);
18
+ }, [visible, onClose]);
19
+ // Prevent body scroll when open
20
+ useEffect(() => {
21
+ document.body.style.overflow = visible ? 'hidden' : '';
22
+ return () => { document.body.style.overflow = ''; };
23
+ }, [visible]);
24
+ return (_jsxs("div", { style: {
25
+ position: 'fixed',
26
+ inset: 0,
27
+ zIndex: 200,
28
+ pointerEvents: visible ? 'all' : 'none',
29
+ }, children: [_jsx("div", { ref: overlayRef, onClick: onClose, style: {
30
+ position: 'absolute',
31
+ inset: 0,
32
+ backgroundColor: 'rgba(0,0,0,0.5)',
33
+ opacity: visible ? 1 : 0,
34
+ transition: 'opacity 0.3s ease',
35
+ } }), _jsxs("div", { role: "dialog", "aria-modal": "true", style: {
36
+ position: 'absolute',
37
+ top: 0,
38
+ left: 0,
39
+ bottom: 0,
40
+ width,
41
+ maxWidth: 320,
42
+ backgroundColor: theme.background,
43
+ boxShadow: '4px 0 24px rgba(0,0,0,0.18)',
44
+ transform: visible ? 'translateX(0)' : 'translateX(-100%)',
45
+ transition: 'transform 0.3s ease',
46
+ display: 'flex',
47
+ flexDirection: 'column',
48
+ overflowY: 'auto',
49
+ }, children: [_jsxs("div", { style: {
50
+ display: 'flex',
51
+ justifyContent: 'space-between',
52
+ alignItems: 'center',
53
+ padding: 20,
54
+ borderBottom: `1px solid ${theme.icon}20`,
55
+ }, children: [_jsx(ThemedText, { type: "subtitle", children: title ?? 'Menu' }), _jsx("button", { onClick: onClose, style: { background: 'none', border: 'none', cursor: 'pointer', padding: 4 }, "aria-label": "Close", children: _jsx(Icon, { name: "chevron.left", size: 24, color: theme.icon }) })] }), _jsx("nav", { style: { padding: 10, flex: 1 }, children: items.map((item) => (_jsxs("button", { onClick: () => { item.onPress?.(); onClose(); }, style: {
56
+ display: 'flex',
57
+ flexDirection: 'row',
58
+ alignItems: 'center',
59
+ gap: 15,
60
+ padding: '14px 15px',
61
+ width: '100%',
62
+ border: 'none',
63
+ background: 'none',
64
+ cursor: 'pointer',
65
+ borderRadius: 8,
66
+ textAlign: 'left',
67
+ transition: 'background 0.15s',
68
+ }, onMouseEnter: (e) => (e.currentTarget.style.background = `${theme.icon}10`), onMouseLeave: (e) => (e.currentTarget.style.background = 'none'), children: [item.icon && _jsx(Icon, { name: item.icon, size: 22, color: theme.icon }), _jsx(ThemedText, { type: "defaultSemiBold", children: item.label })] }, item.id))) }), footer && (_jsx("div", { style: { padding: 20, borderTop: '1px solid rgba(0,0,0,0.05)' }, children: footer }))] })] }));
69
+ }
70
+ //# sourceMappingURL=Sidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sidebar.js","sourceRoot":"","sources":["../Sidebar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { HTMLAttributes } from 'react';
2
+ export type TextType = 'default' | 'title' | 'subtitle' | 'defaultSemiBold' | 'link';
3
+ export type ThemedTextProps = HTMLAttributes<HTMLSpanElement> & {
4
+ type?: TextType;
5
+ };
6
+ export declare function ThemedText({ type, style, children, ...props }: ThemedTextProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=ThemedText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemedText.d.ts","sourceRoot":"","sources":["../ThemedText.tsx"],"names":[],"mappings":"AACA,OAAO,EAAiB,cAAc,EAAE,MAAM,OAAO,CAAC;AAItD,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,iBAAiB,GAAG,MAAM,CAAC;AAUrF,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,eAAe,CAAC,GAAG;IAC9D,IAAI,CAAC,EAAE,QAAQ,CAAC;CACjB,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,IAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,2CAiB1F"}
@@ -0,0 +1,22 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Colors, Fonts } from './theme';
4
+ import { useColorScheme } from './use-color-scheme';
5
+ const TYPE_STYLES = {
6
+ default: { fontSize: 16, lineHeight: '24px' },
7
+ title: { fontSize: 32, fontWeight: 700, lineHeight: '40px' },
8
+ subtitle: { fontSize: 20, fontWeight: '600', lineHeight: '28px' },
9
+ defaultSemiBold: { fontSize: 16, fontWeight: '600', lineHeight: '24px' },
10
+ link: { fontSize: 16, color: '#0a7ea4', textDecoration: 'underline', cursor: 'pointer' },
11
+ };
12
+ export function ThemedText({ type = 'default', style, children, ...props }) {
13
+ const scheme = useColorScheme();
14
+ const theme = Colors[scheme];
15
+ return (_jsx("span", { style: {
16
+ fontFamily: Fonts.sans,
17
+ color: theme.text,
18
+ ...TYPE_STYLES[type],
19
+ ...style,
20
+ }, ...props, children: children }));
21
+ }
22
+ //# sourceMappingURL=ThemedText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemedText.js","sourceRoot":"","sources":["../ThemedText.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIpD,MAAM,WAAW,GAAoC;IACnD,OAAO,EAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE;IACpD,KAAK,EAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE;IACrE,QAAQ,EAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE;IACvE,eAAe,EAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE;IACvE,IAAI,EAAY,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE;CACnG,CAAC;AAMF,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAmB;IACzF,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAE7B,OAAO,CACL,eACE,KAAK,EAAE;YACL,UAAU,EAAE,KAAK,CAAC,IAAI;YACtB,KAAK,EAAE,KAAK,CAAC,IAAI;YACjB,GAAG,WAAW,CAAC,IAAI,CAAC;YACpB,GAAI,KAAuB;SAC5B,KACG,KAAK,YAER,QAAQ,GACJ,CACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { HTMLAttributes } from 'react';
2
+ export type ThemedViewProps = HTMLAttributes<HTMLDivElement> & {
3
+ lightColor?: string;
4
+ darkColor?: string;
5
+ };
6
+ export declare function ThemedView({ lightColor, darkColor, style, children, ...props }: ThemedViewProps): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=ThemedView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemedView.d.ts","sourceRoot":"","sources":["../ThemedView.tsx"],"names":[],"mappings":"AACA,OAAO,EAAiB,cAAc,EAAE,MAAM,OAAO,CAAC;AAItD,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC,cAAc,CAAC,GAAG;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,UAAU,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,eAAe,2CAW/F"}
@@ -0,0 +1,12 @@
1
+ 'use client';
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import { Colors } from './theme';
4
+ import { useColorScheme } from './use-color-scheme';
5
+ export function ThemedView({ lightColor, darkColor, style, children, ...props }) {
6
+ const scheme = useColorScheme();
7
+ const bg = scheme === 'dark'
8
+ ? (darkColor ?? Colors.dark.background)
9
+ : (lightColor ?? Colors.light.background);
10
+ return (_jsx("div", { style: { backgroundColor: bg, ...style }, ...props, children: children }));
11
+ }
12
+ //# sourceMappingURL=ThemedView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemedView.js","sourceRoot":"","sources":["../ThemedView.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAOpD,MAAM,UAAU,UAAU,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAmB;IAC9F,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,EAAE,GAAG,MAAM,KAAK,MAAM;QAC1B,CAAC,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;QACvC,CAAC,CAAC,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAE5C,OAAO,CACL,cAAK,KAAK,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,GAAI,KAAuB,EAAE,KAAM,KAAK,YACxE,QAAQ,GACL,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,22 @@
1
+ export { ThemedText } from './ThemedText';
2
+ export type { ThemedTextProps, TextType } from './ThemedText';
3
+ export { ThemedView } from './ThemedView';
4
+ export type { ThemedViewProps } from './ThemedView';
5
+ export { Collapsible } from './Collapsible';
6
+ export { BottomBar } from './BottomBar';
7
+ export type { BottomBarProps, BottomBarTab } from './BottomBar';
8
+ export { BottomSheet } from './BottomSheet';
9
+ export type { BottomSheetProps } from './BottomSheet';
10
+ export { BuyButton } from './BuyButton';
11
+ export type { BuyButtonProps } from './BuyButton';
12
+ export { CartButton } from './CartButton';
13
+ export type { CartButtonProps } from './CartButton';
14
+ export { Sidebar } from './Sidebar';
15
+ export type { SidebarProps, SidebarItem } from './Sidebar';
16
+ export { SegmentedControl } from './SegmentedControl';
17
+ export type { SegmentedControlProps } from './SegmentedControl';
18
+ export { Icon } from './Icon';
19
+ export type { IconName } from './Icon';
20
+ export { Colors, Fonts } from './theme';
21
+ export { useColorScheme } from './use-color-scheme';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE9D,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,13 @@
1
+ export { ThemedText } from './ThemedText';
2
+ export { ThemedView } from './ThemedView';
3
+ export { Collapsible } from './Collapsible';
4
+ export { BottomBar } from './BottomBar';
5
+ export { BottomSheet } from './BottomSheet';
6
+ export { BuyButton } from './BuyButton';
7
+ export { CartButton } from './CartButton';
8
+ export { Sidebar } from './Sidebar';
9
+ export { SegmentedControl } from './SegmentedControl';
10
+ export { Icon } from './Icon';
11
+ export { Colors, Fonts } from './theme';
12
+ export { useColorScheme } from './use-color-scheme';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAG9B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,25 @@
1
+ export declare const Colors: {
2
+ light: {
3
+ text: string;
4
+ background: string;
5
+ tint: string;
6
+ icon: string;
7
+ tabIconDefault: string;
8
+ tabIconSelected: string;
9
+ };
10
+ dark: {
11
+ text: string;
12
+ background: string;
13
+ tint: string;
14
+ icon: string;
15
+ tabIconDefault: string;
16
+ tabIconSelected: string;
17
+ };
18
+ };
19
+ export declare const Fonts: {
20
+ sans: string;
21
+ serif: string;
22
+ rounded: string;
23
+ mono: string;
24
+ };
25
+ //# sourceMappingURL=theme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../theme.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;CAiBlB,CAAC;AAEF,eAAO,MAAM,KAAK;;;;;CAKjB,CAAC"}
package/dist/theme.js ADDED
@@ -0,0 +1,25 @@
1
+ export const Colors = {
2
+ light: {
3
+ text: '#111827',
4
+ background: '#FCF5E5',
5
+ tint: '#0F4D3C',
6
+ icon: '#0F4D3C',
7
+ tabIconDefault: '#9CA3AF',
8
+ tabIconSelected: '#0F4D3C',
9
+ },
10
+ dark: {
11
+ text: '#ECEDEE',
12
+ background: '#151718',
13
+ tint: '#fff',
14
+ icon: '#9BA1A6',
15
+ tabIconDefault: '#9BA1A6',
16
+ tabIconSelected: '#fff',
17
+ },
18
+ };
19
+ export const Fonts = {
20
+ sans: "system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif",
21
+ serif: "Georgia, 'Times New Roman', serif",
22
+ rounded: "'SF Pro Rounded', 'Hiragino Maru Gothic ProN', Meiryo, sans-serif",
23
+ mono: "SFMono-Regular, Menlo, Monaco, Consolas, 'Courier New', monospace",
24
+ };
25
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../theme.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,KAAK,EAAE;QACL,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,SAAS;QACrB,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,SAAS;QACf,cAAc,EAAE,SAAS;QACzB,eAAe,EAAE,SAAS;KAC3B;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,SAAS;QACrB,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,SAAS;QACf,cAAc,EAAE,SAAS;QACzB,eAAe,EAAE,MAAM;KACxB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,gGAAgG;IACtG,KAAK,EAAE,mCAAmC;IAC1C,OAAO,EAAE,mEAAmE;IAC5E,IAAI,EAAE,mEAAmE;CAC1E,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function useColorScheme(): 'light' | 'dark';
2
+ //# sourceMappingURL=use-color-scheme.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-color-scheme.d.ts","sourceRoot":"","sources":["../use-color-scheme.ts"],"names":[],"mappings":"AAEA,wBAAgB,cAAc,IAAI,OAAO,GAAG,MAAM,CAajD"}
@@ -0,0 +1,15 @@
1
+ import { useEffect, useState } from 'react';
2
+ export function useColorScheme() {
3
+ const [scheme, setScheme] = useState('light');
4
+ useEffect(() => {
5
+ if (typeof window === 'undefined')
6
+ return;
7
+ const mq = window.matchMedia('(prefers-color-scheme: dark)');
8
+ setScheme(mq.matches ? 'dark' : 'light');
9
+ const handler = (e) => setScheme(e.matches ? 'dark' : 'light');
10
+ mq.addEventListener('change', handler);
11
+ return () => mq.removeEventListener('change', handler);
12
+ }, []);
13
+ return scheme;
14
+ }
15
+ //# sourceMappingURL=use-color-scheme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-color-scheme.js","sourceRoot":"","sources":["../use-color-scheme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,UAAU,cAAc;IAC5B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAmB,OAAO,CAAC,CAAC;IAEhE,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAC1C,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;QAC7D,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,CAAC,CAAsB,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACpF,EAAE,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvC,OAAO,GAAG,EAAE,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,MAAM,CAAC;AAChB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "@otaga/web-ui-kit",
3
+ "version": "1.0.0",
4
+ "description": "Premium, editorial-style UI Kit for React and Next.js — no react-native required.",
5
+ "keywords": ["react", "nextjs", "ui-kit", "web", "otaga"],
6
+ "author": "Otaga Team",
7
+ "license": "MIT",
8
+ "main": "dist/index.js",
9
+ "types": "dist/index.d.ts",
10
+ "files": ["dist"],
11
+ "scripts": {
12
+ "build": "tsc"
13
+ },
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "peerDependencies": {
18
+ "react": ">=18.0.0",
19
+ "react-dom": ">=18.0.0"
20
+ }
21
+ }