@hunterchen/canvas 0.1.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.
- package/dist/components/canvas/canvas.d.ts +29 -0
- package/dist/components/canvas/canvas.d.ts.map +1 -0
- package/dist/components/canvas/canvas.js +419 -0
- package/dist/components/canvas/canvas.js.map +1 -0
- package/dist/components/canvas/component.d.ts +47 -0
- package/dist/components/canvas/component.d.ts.map +1 -0
- package/dist/components/canvas/component.js +177 -0
- package/dist/components/canvas/component.js.map +1 -0
- package/dist/components/canvas/cursor.d.ts +8 -0
- package/dist/components/canvas/cursor.d.ts.map +1 -0
- package/dist/components/canvas/cursor.js +32 -0
- package/dist/components/canvas/cursor.js.map +1 -0
- package/dist/components/canvas/draggable.d.ts +21 -0
- package/dist/components/canvas/draggable.d.ts.map +1 -0
- package/dist/components/canvas/draggable.js +163 -0
- package/dist/components/canvas/draggable.js.map +1 -0
- package/dist/components/canvas/navbar/index.d.ts +19 -0
- package/dist/components/canvas/navbar/index.d.ts.map +1 -0
- package/dist/components/canvas/navbar/index.js +106 -0
- package/dist/components/canvas/navbar/index.js.map +1 -0
- package/dist/components/canvas/navbar/single-button.d.ts +17 -0
- package/dist/components/canvas/navbar/single-button.d.ts.map +1 -0
- package/dist/components/canvas/navbar/single-button.js +97 -0
- package/dist/components/canvas/navbar/single-button.js.map +1 -0
- package/dist/components/canvas/offest.d.ts +6 -0
- package/dist/components/canvas/offest.d.ts.map +1 -0
- package/dist/components/canvas/offest.js +12 -0
- package/dist/components/canvas/offest.js.map +1 -0
- package/dist/components/canvas/reset.d.ts +5 -0
- package/dist/components/canvas/reset.d.ts.map +1 -0
- package/dist/components/canvas/reset.js +7 -0
- package/dist/components/canvas/reset.js.map +1 -0
- package/dist/components/canvas/toolbar.d.ts +7 -0
- package/dist/components/canvas/toolbar.d.ts.map +1 -0
- package/dist/components/canvas/toolbar.js +28 -0
- package/dist/components/canvas/toolbar.js.map +1 -0
- package/dist/components/canvas/wrapper.d.ts +26 -0
- package/dist/components/canvas/wrapper.d.ts.map +1 -0
- package/dist/components/canvas/wrapper.js +107 -0
- package/dist/components/canvas/wrapper.js.map +1 -0
- package/dist/components/ui/FolderIcon.d.ts +9 -0
- package/dist/components/ui/FolderIcon.d.ts.map +1 -0
- package/dist/components/ui/FolderIcon.js +25 -0
- package/dist/components/ui/FolderIcon.js.map +1 -0
- package/dist/components/ui/button.d.ts +14 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +54 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/label.d.ts +6 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/label.js +10 -0
- package/dist/components/ui/label.js.map +1 -0
- package/dist/components/ui/toast.d.ts +16 -0
- package/dist/components/ui/toast.d.ts.map +1 -0
- package/dist/components/ui/toast.js +41 -0
- package/dist/components/ui/toast.js.map +1 -0
- package/dist/components/ui/toaster.d.ts +2 -0
- package/dist/components/ui/toaster.d.ts.map +1 -0
- package/dist/components/ui/toaster.js +10 -0
- package/dist/components/ui/toaster.js.map +1 -0
- package/dist/contexts/CanvasContext.d.ts +26 -0
- package/dist/contexts/CanvasContext.d.ts.map +1 -0
- package/dist/contexts/CanvasContext.js +22 -0
- package/dist/contexts/CanvasContext.js.map +1 -0
- package/dist/contexts/PerformanceContext.d.ts +31 -0
- package/dist/contexts/PerformanceContext.d.ts.map +1 -0
- package/dist/contexts/PerformanceContext.js +56 -0
- package/dist/contexts/PerformanceContext.js.map +1 -0
- package/dist/hooks/use-mobile.d.ts +2 -0
- package/dist/hooks/use-mobile.d.ts.map +1 -0
- package/dist/hooks/use-mobile.js +16 -0
- package/dist/hooks/use-mobile.js.map +1 -0
- package/dist/hooks/use-toast.d.ts +45 -0
- package/dist/hooks/use-toast.d.ts.map +1 -0
- package/dist/hooks/use-toast.js +126 -0
- package/dist/hooks/use-toast.js.map +1 -0
- package/dist/hooks/usePerformanceMode.d.ts +6 -0
- package/dist/hooks/usePerformanceMode.d.ts.map +1 -0
- package/dist/hooks/usePerformanceMode.js +6 -0
- package/dist/hooks/usePerformanceMode.js.map +1 -0
- package/dist/hooks/useWindowDimensions.d.ts +7 -0
- package/dist/hooks/useWindowDimensions.d.ts.map +1 -0
- package/dist/hooks/useWindowDimensions.js +22 -0
- package/dist/hooks/useWindowDimensions.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/canvas.d.ts +35 -0
- package/dist/lib/canvas.d.ts.map +1 -0
- package/dist/lib/canvas.js +82 -0
- package/dist/lib/canvas.js.map +1 -0
- package/dist/lib/constants.d.ts +78 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +122 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/copy.d.ts +2 -0
- package/dist/lib/copy.d.ts.map +1 -0
- package/dist/lib/copy.js +20 -0
- package/dist/lib/copy.js.map +1 -0
- package/dist/lib/utils.d.ts +4 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +14 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/types/index.d.ts +19 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +14 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/performance.d.ts +9 -0
- package/dist/utils/performance.d.ts.map +1 -0
- package/dist/utils/performance.js +29 -0
- package/dist/utils/performance.js.map +1 -0
- package/package.json +55 -0
- package/src/components/canvas/canvas.tsx +728 -0
- package/src/components/canvas/component.tsx +230 -0
- package/src/components/canvas/cursor.tsx +161 -0
- package/src/components/canvas/draggable.tsx +298 -0
- package/src/components/canvas/navbar/index.tsx +213 -0
- package/src/components/canvas/navbar/single-button.tsx +199 -0
- package/src/components/canvas/offest.tsx +23 -0
- package/src/components/canvas/reset.tsx +21 -0
- package/src/components/canvas/toolbar.tsx +67 -0
- package/src/components/canvas/wrapper.tsx +219 -0
- package/src/components/ui/FolderIcon.tsx +116 -0
- package/src/components/ui/button.tsx +162 -0
- package/src/components/ui/label.tsx +24 -0
- package/src/components/ui/toast.tsx +136 -0
- package/src/components/ui/toaster.tsx +33 -0
- package/src/contexts/CanvasContext.tsx +54 -0
- package/src/contexts/PerformanceContext.tsx +81 -0
- package/src/hooks/use-mobile.ts +21 -0
- package/src/hooks/use-toast.ts +186 -0
- package/src/hooks/usePerformanceMode.ts +5 -0
- package/src/hooks/useWindowDimensions.ts +32 -0
- package/src/index.ts +36 -0
- package/src/lib/canvas.ts +132 -0
- package/src/lib/constants.ts +153 -0
- package/src/lib/copy.ts +18 -0
- package/src/lib/utils.ts +18 -0
- package/src/types/index.ts +20 -0
- package/src/utils/performance.ts +37 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useEffect } from "react";
|
|
3
|
+
import * as LucideIcons from "lucide-react";
|
|
4
|
+
import { AnimatePresence, motion } from "framer-motion";
|
|
5
|
+
import { useToast } from "../../../hooks/use-toast";
|
|
6
|
+
import { copyText } from "../../../lib/copy";
|
|
7
|
+
export default function SingleButton({ label, icon, customIcon, onClick, isPushed, link, emailAddress, onDebouncedClick, }) {
|
|
8
|
+
const [isHovered, setIsHovered] = useState(false);
|
|
9
|
+
const [showTag, setShowTag] = useState(false);
|
|
10
|
+
const [copiedEmail, setCopiedEmail] = useState(false);
|
|
11
|
+
const Icon = icon ? LucideIcons[icon] : null;
|
|
12
|
+
const CustomIcon = customIcon;
|
|
13
|
+
const TagDelay = 100;
|
|
14
|
+
const { toast } = useToast();
|
|
15
|
+
// Ensure either icon or customIcon is provided
|
|
16
|
+
if (!Icon && !CustomIcon) {
|
|
17
|
+
throw new Error("Either 'icon' or 'customIcon' prop must be provided");
|
|
18
|
+
}
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
let timeoutId;
|
|
21
|
+
if (isHovered) {
|
|
22
|
+
timeoutId = setTimeout(() => {
|
|
23
|
+
setShowTag(true);
|
|
24
|
+
}, TagDelay);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
setShowTag(false);
|
|
28
|
+
}
|
|
29
|
+
return () => {
|
|
30
|
+
clearTimeout(timeoutId);
|
|
31
|
+
};
|
|
32
|
+
}, [isHovered]);
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
setShowTag(false);
|
|
35
|
+
setIsHovered(false);
|
|
36
|
+
}, [isPushed]);
|
|
37
|
+
// Reset copied email state after 2 seconds
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
if (copiedEmail) {
|
|
40
|
+
const timeoutId = setTimeout(() => {
|
|
41
|
+
setCopiedEmail(false);
|
|
42
|
+
}, 2000);
|
|
43
|
+
return () => clearTimeout(timeoutId);
|
|
44
|
+
}
|
|
45
|
+
}, [copiedEmail]);
|
|
46
|
+
const performClick = () => {
|
|
47
|
+
if (emailAddress) {
|
|
48
|
+
const mailto = `mailto:${emailAddress}`;
|
|
49
|
+
void (async () => {
|
|
50
|
+
const copied = (await copyText(mailto)) || (await copyText(emailAddress));
|
|
51
|
+
if (copied) {
|
|
52
|
+
setCopiedEmail(true);
|
|
53
|
+
toast({
|
|
54
|
+
title: "Email copied!",
|
|
55
|
+
variant: "cute",
|
|
56
|
+
duration: 2000,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
window.open(mailto, "_blank");
|
|
61
|
+
toast({
|
|
62
|
+
title: "Email app opened!",
|
|
63
|
+
duration: 3000,
|
|
64
|
+
variant: "cute",
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
})();
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (link) {
|
|
71
|
+
window.open(link, "_blank", "noopener,noreferrer");
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
onClick?.();
|
|
75
|
+
};
|
|
76
|
+
const handleClick = () => {
|
|
77
|
+
if (onDebouncedClick) {
|
|
78
|
+
onDebouncedClick(performClick);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
performClick();
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
const displayLabel = copiedEmail ? "Email copied!" : label;
|
|
85
|
+
return (_jsx(motion.button, { "aria-label": label, className: `relative flex items-center rounded-md p-2 text-medium transition-colors duration-200 ${isPushed ? "bg-[#EEE2FB]" : isHovered ? "bg-highlight" : ""}`, onClick: handleClick, onMouseEnter: () => setIsHovered(true), onMouseLeave: () => setIsHovered(false), whileTap: { scale: 0.95 }, transition: {
|
|
86
|
+
type: "spring",
|
|
87
|
+
stiffness: 400,
|
|
88
|
+
damping: 25,
|
|
89
|
+
}, children: isPushed ? (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("div", { children: Icon ? (_jsx(Icon, { className: `h-5 w-5 flex-shrink-0 ${isPushed ? "text-emphasis" : "text-medium"}` })) : CustomIcon ? (_jsx(CustomIcon, { className: `h-5 w-5 flex-shrink-0 ${isPushed ? "text-white" : "text-medium"}` })) : null }), _jsx(motion.span, { initial: { opacity: 0, width: 0 }, animate: { opacity: 1, width: "auto" }, exit: { opacity: 0, width: 0 }, transition: {
|
|
90
|
+
duration: 0.1,
|
|
91
|
+
ease: "easeInOut",
|
|
92
|
+
}, className: "overflow-hidden whitespace-nowrap font-figtree text-sm font-medium text-emphasis", children: displayLabel })] })) : (_jsxs("div", { children: [Icon ? (_jsx(Icon, { className: `h-5 w-5 flex-shrink-0 ${isPushed ? "text-white" : "text-medium"}` })) : CustomIcon ? (_jsx(CustomIcon, { className: `h-5 w-5 flex-shrink-0 ${isPushed ? "text-white" : "text-medium"}` })) : null, _jsx(AnimatePresence, { children: showTag && !isPushed && (_jsx(motion.div, { initial: { opacity: 0, y: 5, scale: 0.9, x: "-50%" }, animate: { opacity: 1, y: 0, scale: 1, x: "-50%" }, exit: { opacity: 0, y: 5, scale: 0.9, x: "-50%" }, transition: {
|
|
93
|
+
duration: 0.05,
|
|
94
|
+
ease: "easeOut",
|
|
95
|
+
}, className: "pointer-events-none absolute -top-10 left-1/2 z-50", children: _jsx("div", { className: "rounded-sm bg-gradient-to-t from-black/10 to-transparent px-[1px] pb-[2.5px] pt-[1px]", children: _jsx("div", { className: "whitespace-nowrap rounded-sm bg-offwhite px-2 py-1 font-figtree text-sm text-medium", children: displayLabel }) }) })) })] })) }));
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=single-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"single-button.js","sourceRoot":"","sources":["../../../../src/components/canvas/navbar/single-button.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offest.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/offest.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAEnD,eAAO,MAAM,eAAe,GAAI,uBAG7B;IACD,MAAM,EAAE,KAAK,CAAC;IACd,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,4CAcA,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { motion } from "framer-motion";
|
|
3
|
+
export const OffsetComponent = ({ offset, children, }) => {
|
|
4
|
+
return (_jsx(motion.div, { style: {
|
|
5
|
+
position: "absolute",
|
|
6
|
+
top: offset.y,
|
|
7
|
+
left: offset.x,
|
|
8
|
+
width: "100%",
|
|
9
|
+
height: "100%",
|
|
10
|
+
}, children: children }));
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=offest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offest.js","sourceRoot":"","sources":["../../../src/components/canvas/offest.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAc,MAAM,eAAe,CAAC;AAEnD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAC9B,MAAM,EACN,QAAQ,GAIT,EAAE,EAAE;IACH,OAAO,CACL,KAAC,MAAM,CAAC,GAAG,IACT,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,GAAG,EAAE,MAAM,CAAC,CAAC;YACb,IAAI,EAAE,MAAM,CAAC,CAAC;YACd,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM;SACf,YAEA,QAAQ,GACE,CACd,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reset.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/reset.tsx"],"names":[],"mappings":"AAEA,QAAA,MAAM,KAAK,GAAI,0BAEZ;IACD,mBAAmB,EAAE,MAAM,IAAI,CAAC;CACjC,4CAYA,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import Image from "next/image";
|
|
3
|
+
const Reset = ({ onResetViewAndItems, }) => {
|
|
4
|
+
return (_jsx("div", { className: "absolute bottom-4 left-4 z-[1000] flex cursor-[url('/customcursor.svg'),auto] select-none", children: _jsx("button", { className: "rounded bg-gray-700 p-1.5 font-mono text-xs text-white shadow-md transition-colors hover:bg-gray-600 md:text-sm", onClick: onResetViewAndItems, onPointerDown: (e) => e.stopPropagation(), children: _jsx(Image, { src: "/images/reset.svg", alt: "Reset", width: 18, height: 18 }) }) }));
|
|
5
|
+
};
|
|
6
|
+
export default Reset;
|
|
7
|
+
//# sourceMappingURL=reset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reset.js","sourceRoot":"","sources":["../../../src/components/canvas/reset.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,MAAM,KAAK,GAAG,CAAC,EACb,mBAAmB,GAGpB,EAAE,EAAE;IACH,OAAO,CACL,cAAK,SAAS,EAAC,2FAA2F,YACxG,iBACE,SAAS,EAAC,iHAAiH,EAC3H,OAAO,EAAE,mBAAmB,EAC5B,aAAa,EAAE,CAAC,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,YAE7D,KAAC,KAAK,IAAC,GAAG,EAAC,mBAAmB,EAAC,GAAG,EAAC,OAAO,EAAC,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAI,GAC7D,GACL,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type Point } from "framer-motion";
|
|
2
|
+
type ToolbarProps = {
|
|
3
|
+
homeCoordinates?: Point;
|
|
4
|
+
};
|
|
5
|
+
declare const Toolbar: ({ homeCoordinates }: ToolbarProps) => import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export default Toolbar;
|
|
7
|
+
//# sourceMappingURL=toolbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/toolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,KAAK,EAAwB,MAAM,eAAe,CAAC;AAQjE,KAAK,YAAY,GAAG;IAClB,eAAe,CAAC,EAAE,KAAK,CAAC;CACzB,CAAC;AAEF,QAAA,MAAM,OAAO,GAAI,qBAAsC,YAAY,4CAoDlE,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useTransform, motion } from "framer-motion";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
import { useCanvasContext } from "../../contexts/CanvasContext";
|
|
5
|
+
import { TOOLBAR_OPACITY_POS_EPS, TOOLBAR_OPACITY_SCALE_EPS, } from "../../lib/constants";
|
|
6
|
+
const Toolbar = ({ homeCoordinates = { x: 0, y: 0 } }) => {
|
|
7
|
+
const { x, y, scale } = useCanvasContext();
|
|
8
|
+
const [hasMounted, setHasMounted] = useState(false);
|
|
9
|
+
useEffect(() => {
|
|
10
|
+
setHasMounted(true);
|
|
11
|
+
}, []);
|
|
12
|
+
// numeric MotionValues
|
|
13
|
+
const rawDx = useTransform([x, scale], ([lx, ls]) => -(lx / ls) + homeCoordinates.x);
|
|
14
|
+
const rawDy = useTransform([y, scale], ([ly, ls]) => -(ly / ls) + homeCoordinates.y);
|
|
15
|
+
// formatted MotionValues
|
|
16
|
+
const displayX = useTransform(rawDx, (v) => Math.round(v).toString());
|
|
17
|
+
const displayY = useTransform(rawDy, (v) => Math.round(v).toString());
|
|
18
|
+
const displayScale = useTransform(scale, (v) => v.toFixed(2));
|
|
19
|
+
const opacity = useTransform([rawDx, rawDy, scale], ([dx, dy, ls]) => Math.abs(dx) < TOOLBAR_OPACITY_POS_EPS &&
|
|
20
|
+
Math.abs(dy) < TOOLBAR_OPACITY_POS_EPS &&
|
|
21
|
+
Math.abs(ls - 1) < TOOLBAR_OPACITY_SCALE_EPS
|
|
22
|
+
? 0
|
|
23
|
+
: 1);
|
|
24
|
+
const handlePointerDown = (e) => e.stopPropagation();
|
|
25
|
+
return (_jsx(motion.div, { className: "absolute left-4 top-6 z-[1000] cursor-default select-none rounded-[10px] border border-border bg-offwhite p-2 font-mono text-xs text-heavy shadow-[0_6px_12px_rgba(0,0,0,0.10)] sm:top-4 md:text-sm", onPointerDown: handlePointerDown, "data-toolbar-button": true, style: { opacity }, children: hasMounted ? (_jsxs(_Fragment, { children: ["(", _jsx(motion.span, { children: displayX }), ",", " ", _jsx(motion.span, { children: displayY }), ")", _jsx("span", { className: "text-light", children: " |" }), " ", _jsx(motion.span, { children: displayScale }), "x"] })) : (_jsx("span", { style: { opacity: 0 }, children: "(0, 0) | 1.00x" })) }));
|
|
26
|
+
};
|
|
27
|
+
export default Toolbar;
|
|
28
|
+
//# sourceMappingURL=toolbar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../../../src/components/canvas/toolbar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type MotionValue, type Transition } from "framer-motion";
|
|
2
|
+
import { type ReactNode } from "react";
|
|
3
|
+
export { GROW_TRANSITION as growTransition } from "../../lib/constants";
|
|
4
|
+
interface CanvasWrapperProps {
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
/** Shared progress MV (0->1) for the grow animation */
|
|
7
|
+
introProgress: MotionValue<number>;
|
|
8
|
+
/** Callback when the grow (stage1) completes */
|
|
9
|
+
onIntroGrowComplete?: () => void;
|
|
10
|
+
/** Disable intro animation entirely (starts at full size) */
|
|
11
|
+
skipIntro?: boolean;
|
|
12
|
+
/** Custom intro content to show during loading */
|
|
13
|
+
introContent?: ReactNode;
|
|
14
|
+
/** Custom loading text (default: "LOADING CANVAS") */
|
|
15
|
+
loadingText?: string;
|
|
16
|
+
/** Background gradient for intro screen */
|
|
17
|
+
introBackgroundGradient?: string;
|
|
18
|
+
/** Canvas box gradient for blur mask */
|
|
19
|
+
canvasBoxGradient?: string;
|
|
20
|
+
/** Grow animation transition config */
|
|
21
|
+
growTransition?: Transition;
|
|
22
|
+
/** Blur animation transition config */
|
|
23
|
+
blurTransition?: Transition;
|
|
24
|
+
}
|
|
25
|
+
export declare const CanvasWrapper: ({ children, introProgress, onIntroGrowComplete, skipIntro, introContent, loadingText, introBackgroundGradient, canvasBoxGradient, growTransition, blurTransition, }: CanvasWrapperProps) => import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
//# sourceMappingURL=wrapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapper.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/wrapper.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,WAAW,EAAE,KAAK,UAAU,EAAkB,MAAM,eAAe,CAAC;AAC1F,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAUpE,OAAO,EAAE,eAAe,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAExE,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,uDAAuD;IACvD,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,gDAAgD;IAChD,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;IAGjC,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kDAAkD;IAClD,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,wCAAwC;IACxC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uCAAuC;IACvC,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,uCAAuC;IACvC,cAAc,CAAC,EAAE,UAAU,CAAC;CAC7B;AAqBD,eAAO,MAAM,aAAa,GAAI,qKAW3B,kBAAkB,4CAuJpB,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { motion } from "framer-motion";
|
|
3
|
+
import { useState, useEffect, useRef } from "react";
|
|
4
|
+
import Image from "next/image";
|
|
5
|
+
import { MAX_DIM_RATIO, GROW_TRANSITION, BLUR_TRANSITION, INTRO_ASPECT_RATIO, } from "../../lib/constants";
|
|
6
|
+
// Re-export for backward compatibility
|
|
7
|
+
export { GROW_TRANSITION as growTransition } from "../../lib/constants";
|
|
8
|
+
/**
|
|
9
|
+
* Default intro content (Hack Western branding)
|
|
10
|
+
* Positioned in the upper third of the screen
|
|
11
|
+
*/
|
|
12
|
+
const DefaultIntroContent = () => (_jsxs("div", { className: "absolute left-1/2 top-24 flex -translate-x-1/2 flex-col items-center text-center", children: [_jsx(Image, { src: "/horse.svg", alt: "Hack Western Logo", width: 64, height: 64, className: "mb-4" }), _jsx("div", { className: "font-jetbrains-mono font-semibold text-[#543C5AB2]", children: "HACK WESTERN 12" })] }));
|
|
13
|
+
export const CanvasWrapper = ({ children, introProgress, onIntroGrowComplete, skipIntro = false, introContent, loadingText = "LOADING CANVAS", introBackgroundGradient = "linear-gradient(to top, #FEB6AF 0%, var(--salmon) 15%, var(--beige) 50%)", canvasBoxGradient = "radial-gradient(130.38% 95% at 50.03% 97.25%, #EFB8A0 0%, #EAD2DF 48.09%, #EFE3E1 100%)", growTransition = GROW_TRANSITION, blurTransition = BLUR_TRANSITION, }) => {
|
|
14
|
+
const [dimensions, setDimensions] = useState(null);
|
|
15
|
+
const [dots, setDots] = useState("..");
|
|
16
|
+
const [stage1NotFinished, setStage1NotFinished] = useState(true);
|
|
17
|
+
const completedRef = useRef(false);
|
|
18
|
+
// If skipIntro is true, immediately complete the intro
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
if (skipIntro && !completedRef.current) {
|
|
21
|
+
completedRef.current = true;
|
|
22
|
+
introProgress.set(1);
|
|
23
|
+
onIntroGrowComplete?.();
|
|
24
|
+
}
|
|
25
|
+
}, [skipIntro, introProgress, onIntroGrowComplete]);
|
|
26
|
+
// add up to 4 dots, then go back down to 2
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
if (skipIntro)
|
|
29
|
+
return; // Don't animate dots if skipping intro
|
|
30
|
+
const interval = setInterval(() => {
|
|
31
|
+
setDots((prevDots) => {
|
|
32
|
+
if (prevDots.length < 3) {
|
|
33
|
+
return prevDots + ".";
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
return ".";
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}, 500);
|
|
40
|
+
return () => clearInterval(interval);
|
|
41
|
+
}, [skipIntro]);
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
if (skipIntro)
|
|
44
|
+
return; // Don't calculate dimensions if skipping intro
|
|
45
|
+
// calculate the initial 3:2 box size with margins (client-only)
|
|
46
|
+
const calculateInitialSize = () => {
|
|
47
|
+
const vw = window.innerWidth;
|
|
48
|
+
const vh = window.innerHeight;
|
|
49
|
+
const maxWidth = vw * MAX_DIM_RATIO.width;
|
|
50
|
+
const maxHeight = vh * MAX_DIM_RATIO.height;
|
|
51
|
+
// width or height as limiter
|
|
52
|
+
if (maxWidth / INTRO_ASPECT_RATIO <= maxHeight) {
|
|
53
|
+
return { width: maxWidth, height: maxWidth / INTRO_ASPECT_RATIO };
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
return { height: maxHeight, width: maxHeight * INTRO_ASPECT_RATIO };
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
setDimensions(calculateInitialSize());
|
|
60
|
+
}, [skipIntro]);
|
|
61
|
+
// If skipIntro, render children directly without animation wrapper
|
|
62
|
+
if (skipIntro) {
|
|
63
|
+
return (_jsx(motion.div, { className: "fixed inset-0 overflow-hidden", style: {
|
|
64
|
+
touchAction: "none",
|
|
65
|
+
userSelect: "none",
|
|
66
|
+
pointerEvents: "none",
|
|
67
|
+
}, onContextMenu: (e) => e.preventDefault(), children: children }));
|
|
68
|
+
}
|
|
69
|
+
return (_jsxs(motion.div, { className: "fixed inset-0 overflow-hidden", style: {
|
|
70
|
+
backgroundImage: stage1NotFinished ? introBackgroundGradient : undefined,
|
|
71
|
+
touchAction: "none",
|
|
72
|
+
userSelect: "none",
|
|
73
|
+
pointerEvents: "none",
|
|
74
|
+
}, onContextMenu: (e) => e.preventDefault(), children: [stage1NotFinished && (_jsx(_Fragment, { children: introContent !== undefined ? introContent : _jsx(DefaultIntroContent, {}) })), dimensions && (_jsxs(_Fragment, { children: [_jsx(motion.div, { initial: {
|
|
75
|
+
width: dimensions.width,
|
|
76
|
+
height: dimensions.height,
|
|
77
|
+
opacity: 1,
|
|
78
|
+
backgroundImage: canvasBoxGradient,
|
|
79
|
+
}, animate: {
|
|
80
|
+
opacity: 0,
|
|
81
|
+
display: "none",
|
|
82
|
+
}, transition: blurTransition, className: "absolute left-1/2 top-1/2 z-20 origin-center -translate-x-1/2 -translate-y-1/2 overflow-hidden rounded-lg" }), _jsx(motion.div, { initial: {
|
|
83
|
+
width: dimensions.width,
|
|
84
|
+
height: dimensions.height,
|
|
85
|
+
}, animate: {
|
|
86
|
+
width: "100vw",
|
|
87
|
+
height: "100vh",
|
|
88
|
+
}, transition: growTransition, onUpdate: (latest) => {
|
|
89
|
+
if (completedRef.current)
|
|
90
|
+
return;
|
|
91
|
+
if (typeof latest.width === "number") {
|
|
92
|
+
const w0 = dimensions.width;
|
|
93
|
+
const w1 = window.innerWidth;
|
|
94
|
+
const progress = w1 === w0 ? 1 : (latest.width - w0) / (w1 - w0);
|
|
95
|
+
const clamped = Math.min(Math.max(progress, 0), 1);
|
|
96
|
+
introProgress.set(clamped);
|
|
97
|
+
}
|
|
98
|
+
}, onAnimationComplete: () => {
|
|
99
|
+
if (!completedRef.current) {
|
|
100
|
+
completedRef.current = true;
|
|
101
|
+
introProgress.set(1);
|
|
102
|
+
setStage1NotFinished(false);
|
|
103
|
+
onIntroGrowComplete?.();
|
|
104
|
+
}
|
|
105
|
+
}, className: "absolute left-1/2 top-1/2 z-10 origin-center -translate-x-1/2 -translate-y-1/2 overflow-hidden rounded-lg shadow-[0_20px_40px_rgba(103,86,86,0.15)]", children: _jsx("div", { className: "h-full w-full", children: children }) })] })), stage1NotFinished && loadingText && (_jsxs("div", { className: "absolute bottom-24 left-1/2 -translate-x-1/2 text-center font-jetbrains-mono font-semibold text-[#543C5AB2]", children: [loadingText, dots] }))] }));
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=wrapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../../src/components/canvas/wrapper.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type FolderIconProps = {
|
|
2
|
+
className?: string;
|
|
3
|
+
gradientId?: string;
|
|
4
|
+
strokeColor?: string;
|
|
5
|
+
isOpen?: boolean;
|
|
6
|
+
};
|
|
7
|
+
declare const AnimatedFolderIcon: ({ className, gradientId, strokeColor, isOpen, }: FolderIconProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export default AnimatedFolderIcon;
|
|
9
|
+
//# sourceMappingURL=FolderIcon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FolderIcon.d.ts","sourceRoot":"","sources":["../../../src/components/ui/FolderIcon.tsx"],"names":[],"mappings":"AAGA,KAAK,eAAe,GAAG;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,QAAA,MAAM,kBAAkB,GAAI,iDAKzB,eAAe,4CAkGjB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { motion } from "framer-motion";
|
|
3
|
+
import useWindowDimensions from "../../hooks/useWindowDimensions";
|
|
4
|
+
const AnimatedFolderIcon = ({ className = "", gradientId = "defaultGradient", strokeColor = "rgba(119, 103, 128, 0.1)", isOpen = false, }) => {
|
|
5
|
+
const { width } = useWindowDimensions();
|
|
6
|
+
return (_jsxs("svg", { viewBox: "0 0 208 163", className: className, fill: "none", xmlns: "http://www.w3.org/2000/svg", children: [_jsxs("g", { filter: "url(#folderShadow)", children: [_jsx(motion.g, { initial: false, animate: {
|
|
7
|
+
opacity: !isOpen || width < 640 ? 1 : 0,
|
|
8
|
+
scale: isOpen ? 1 : 1,
|
|
9
|
+
y: isOpen ? 5 : 0,
|
|
10
|
+
x: isOpen ? 15 : 15,
|
|
11
|
+
}, transition: {
|
|
12
|
+
duration: 0.2,
|
|
13
|
+
ease: "easeInOut",
|
|
14
|
+
}, children: _jsx("path", { d: "M4.34444 14.3331C4.1561 8.68286 8.68546 4 14.3389 4L76.1646 4C80.3832 4 84.4311 5.66604 87.4274 8.63558L98.3226 19.4333C101.319 22.4028 105.367 24.0689 109.585 24.0689H173.601C179.277 24.0689 183.815 28.7881 183.593 34.4601L179.876 129.391C179.666 134.758 175.255 139 169.884 139H18.1722C12.7791 139 8.35744 134.723 8.17777 129.333L4.34444 14.3331Z", fill: `url(#${gradientId})`, stroke: strokeColor, strokeWidth: "0.75", fillOpacity: width < 640 ? "1" : "0.8" }) }), _jsx(motion.g, { initial: false, animate: {
|
|
15
|
+
opacity: isOpen ? 1 : 0,
|
|
16
|
+
scale: isOpen ? 1.15 : 1.15,
|
|
17
|
+
y: isOpen ? 20 : 20,
|
|
18
|
+
x: isOpen ? 23 : 23,
|
|
19
|
+
}, transition: {
|
|
20
|
+
duration: 0.2,
|
|
21
|
+
ease: "easeInOut",
|
|
22
|
+
}, children: _jsx("path", { d: "M3.72714 12.7562C3.28295 7.78306 7.20051 3.5 12.1934 3.5L67.2044 3.5C70.2086 3.5 73.1283 4.49474 75.5076 6.32893L89.3807 17.0235C91.76 18.8577 94.6797 19.8524 97.6839 19.8524H154.462C159.507 19.8524 163.442 24.2216 162.916 29.2393L154.874 105.887C154.42 110.214 150.772 113.5 146.421 113.5H20.5C16.0986 113.5 12.4253 110.14 12.0337 105.756L3.72714 12.7562Z", fill: `url(#${gradientId})`, stroke: strokeColor, strokeOpacity: "1", strokeWidth: "0.85", fillOpacity: "1" }) })] }), _jsxs("defs", { children: [_jsxs("linearGradient", { id: "red", x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: "rgba(226, 141, 159, 1)" }), _jsx("stop", { offset: "100%", stopColor: "rgba(244, 193, 204, 1)" })] }), _jsxs("linearGradient", { id: "blue", x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: "rgba(90, 149, 208, 1)" }), _jsx("stop", { offset: "100%", stopColor: "rgba(158, 202, 246, 1)" })] }), _jsxs("linearGradient", { id: "green", x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: "rgba(127, 202, 132, 1)" }), _jsx("stop", { offset: "100%", stopColor: "rgba(185, 227, 188, 1)" })] }), _jsxs("linearGradient", { id: "purple", x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: "rgba(143, 87, 173, 1)" }), _jsx("stop", { offset: "100%", stopColor: "rgba(209, 154, 238, 1)" })] }), _jsxs("linearGradient", { id: "orange", x1: "0", y1: "0", x2: "0", y2: "1", children: [_jsx("stop", { offset: "0%", stopColor: "rgba(233, 148, 111, 1)" }), _jsx("stop", { offset: "100%", stopColor: "rgba(246, 185, 158, 1)" })] }), _jsx("filter", { id: "folderShadow", x: "-10", y: "-10", width: "208", height: "163", filterUnits: "userSpaceOnUse", children: _jsx("feDropShadow", { dx: "0", dy: "0", stdDeviation: "3", floodColor: "rgba(119, 115, 149, 0.35)" }) })] })] }));
|
|
23
|
+
};
|
|
24
|
+
export default AnimatedFolderIcon;
|
|
25
|
+
//# sourceMappingURL=FolderIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FolderIcon.js","sourceRoot":"","sources":["../../../src/components/ui/FolderIcon.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
export declare const buttonVariants: (props?: ({
|
|
4
|
+
variant?: "link" | "default" | "destructive" | "outline" | "primary" | "secondary" | "tertiary" | "tertiary-arrow" | "ghost" | "apply-ghost" | "apply" | null | undefined;
|
|
5
|
+
size?: "default" | "icon" | "sm" | "lg" | null | undefined;
|
|
6
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
|
+
export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
|
|
8
|
+
asChild?: boolean;
|
|
9
|
+
isPending?: boolean;
|
|
10
|
+
full?: boolean;
|
|
11
|
+
secondClass?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare const Button: React.ForwardRefExoticComponent<ButtonProps & React.RefAttributes<HTMLButtonElement>>;
|
|
14
|
+
//# sourceMappingURL=button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AASlE,eAAO,MAAM,cAAc;;;8EAgCzB,CAAC;AAEH,MAAM,WAAW,WACf,SAAQ,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EACrD,YAAY,CAAC,OAAO,cAAc,CAAC;IACnC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAoBD,eAAO,MAAM,MAAM,uFAsFlB,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import Image from "next/image";
|
|
4
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
5
|
+
import { cva } from "class-variance-authority";
|
|
6
|
+
import { cn } from "../../lib/utils";
|
|
7
|
+
const buttonBase = "inline-flex items-center justify-center whitespace-nowrap rounded-lg text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 text-white font-figtree cursor-pointer";
|
|
8
|
+
const lift = "-translate-y-[3px] group-hover:-translate-y-[4px] group-active:-translate-y-[1px] transition-all duration-100";
|
|
9
|
+
export const buttonVariants = cva(buttonBase, {
|
|
10
|
+
variants: {
|
|
11
|
+
variant: {
|
|
12
|
+
default: "",
|
|
13
|
+
primary: cn("bg-button-primary shadow-button-primary hover:bg-button-primary-hover active:bg-button-primary-active", lift),
|
|
14
|
+
secondary: cn("text-[#625679] bg-button-secondary hover:bg-button-secondary-hover active:bg-button-secondary-active active:shadow-button-secondary", lift),
|
|
15
|
+
tertiary: "bg-transparent text-[#625679] px-4 active:text-[#8F57AD]",
|
|
16
|
+
"tertiary-arrow": "bg-transparent text-[#625679] px-4 active:text-[#8F57AD] flex items-center gap-2",
|
|
17
|
+
destructive: "bg-destructive text-destructive-foreground hover:bg-destructive-dark",
|
|
18
|
+
outline: "bg-violet-100 hover:bg-muted border border-[1px] border-muted",
|
|
19
|
+
ghost: "hover:bg-accent hover:text-accent-foreground",
|
|
20
|
+
link: "text-primary underline-offset-4 hover:underline",
|
|
21
|
+
"apply-ghost": "bg-[#ebdff7] bg-opacity-50 text-heavy font-semibold hover:bg-[#e6cdff] w-full justify-start",
|
|
22
|
+
apply: "text-medium hover:bg-[#ebdff7] hover:text-heavy",
|
|
23
|
+
},
|
|
24
|
+
size: {
|
|
25
|
+
default: "h-10 px-4 py-2",
|
|
26
|
+
sm: "h-8 rounded-md px-3",
|
|
27
|
+
lg: "h-11 rounded-md px-8",
|
|
28
|
+
icon: "h-10 w-10",
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
defaultVariants: { variant: "default", size: "default" },
|
|
32
|
+
});
|
|
33
|
+
const overlays = {
|
|
34
|
+
primary: { bg: "bg-button-primary-back", border: "border border-white/30" },
|
|
35
|
+
secondary: {
|
|
36
|
+
bg: "bg-button-secondary-back",
|
|
37
|
+
border: "border border-white/50",
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
const pressedByVariant = {
|
|
41
|
+
primary: "!-translate-y-[1px] shadow-none bg-button-primary-active hover:!bg-button-primary-active",
|
|
42
|
+
secondary: "!-translate-y-[1px] shadow-button-secondary bg-button-secondary-active hover:!bg-button-secondary-active",
|
|
43
|
+
};
|
|
44
|
+
const noLift = "group-hover:!translate-y-[1px] group-active:!translate-y-[1px] transition-none";
|
|
45
|
+
export const Button = React.forwardRef(({ className, variant = "default", size, isPending = false, full = false, asChild = false, disabled, secondClass = "", children, ...props }, ref) => {
|
|
46
|
+
const Comp = asChild ? Slot : "button";
|
|
47
|
+
const lockPressed = isPending && (variant === "primary" || variant === "secondary");
|
|
48
|
+
const btnClasses = cn(buttonVariants({ variant, size, className }), lockPressed && [pressedByVariant[variant], noLift], full && "w-full");
|
|
49
|
+
const overlay = overlays[variant];
|
|
50
|
+
const wrapperClasses = cn("group relative inline-block w-max", full && "block w-full", lockPressed && ["pointer-events-none", noLift]);
|
|
51
|
+
return (_jsxs("div", { className: wrapperClasses, children: [overlay && (_jsxs(_Fragment, { children: [_jsx("span", { className: cn("pointer-events-none absolute inset-0 h-full w-full rounded-lg", overlay.bg) }), _jsx("span", { className: cn("pointer-events-none absolute inset-0 z-50 h-full w-full rounded-lg", overlay.border, lockPressed ? "-translate-y-[1px] " + noLift : lift) })] })), _jsx(Comp, { ref: ref, ...props, className: cn("flex flex-row gap-2", btnClasses), disabled: disabled ?? isPending, children: variant === "tertiary-arrow" ? (_jsxs("div", { className: "w-full", children: [_jsx(Image, { src: "/arrow-left.svg", alt: "Left Arrow", width: 10, height: 10 }), children] })) : (children) }), (variant === "tertiary" || variant === "tertiary-arrow") && (_jsx("span", { className: cn("block h-0 max-w-0 border-b-2 border-dashed border-[#625679] transition-all duration-200 group-hover:max-w-full group-active:border-[#8F57AD]", secondClass) }))] }));
|
|
52
|
+
});
|
|
53
|
+
Button.displayName = "Button";
|
|
54
|
+
//# sourceMappingURL=button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.js","sourceRoot":"","sources":["../../../src/components/ui/button.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as LabelPrimitive from "@radix-ui/react-label";
|
|
3
|
+
import { type VariantProps } from "class-variance-authority";
|
|
4
|
+
declare const Label: React.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React.RefAttributes<HTMLLabelElement>, "ref"> & VariantProps<(props?: import("class-variance-authority/types").ClassProp | undefined) => string> & React.RefAttributes<HTMLLabelElement>>;
|
|
5
|
+
export { Label };
|
|
6
|
+
//# sourceMappingURL=label.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../../src/components/ui/label.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAQlE,QAAA,MAAM,KAAK,4PAUT,CAAC;AAGH,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import * as LabelPrimitive from "@radix-ui/react-label";
|
|
4
|
+
import { cva } from "class-variance-authority";
|
|
5
|
+
import { cn } from "../../lib/utils";
|
|
6
|
+
const labelVariants = cva("text-[#5f476c] text-xs font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70");
|
|
7
|
+
const Label = React.forwardRef(({ className, ...props }, ref) => (_jsx(LabelPrimitive.Root, { ref: ref, className: cn(labelVariants(), className), ...props })));
|
|
8
|
+
Label.displayName = LabelPrimitive.Root.displayName;
|
|
9
|
+
export { Label };
|
|
10
|
+
//# sourceMappingURL=label.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label.js","sourceRoot":"","sources":["../../../src/components/ui/label.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,GAAG,EAAqB,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AAErC,MAAM,aAAa,GAAG,GAAG,CACvB,2GAA2G,CAC5G,CAAC;AAEF,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAI5B,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAClC,KAAC,cAAc,CAAC,IAAI,IAClB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE,EAAE,SAAS,CAAC,KACrC,KAAK,GACT,CACH,CAAC,CAAC;AACH,KAAK,CAAC,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC;AAEpD,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as ToastPrimitives from "@radix-ui/react-toast";
|
|
3
|
+
import { type VariantProps } from "class-variance-authority";
|
|
4
|
+
declare const ToastProvider: React.FC<ToastPrimitives.ToastProviderProps>;
|
|
5
|
+
declare const ToastViewport: React.ForwardRefExoticComponent<Omit<ToastPrimitives.ToastViewportProps & React.RefAttributes<HTMLOListElement>, "ref"> & React.RefAttributes<HTMLOListElement>>;
|
|
6
|
+
declare const Toast: React.ForwardRefExoticComponent<Omit<ToastPrimitives.ToastProps & React.RefAttributes<HTMLLIElement>, "ref"> & VariantProps<(props?: ({
|
|
7
|
+
variant?: "default" | "destructive" | "success" | "cute" | null | undefined;
|
|
8
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string> & React.RefAttributes<HTMLLIElement>>;
|
|
9
|
+
declare const ToastAction: React.ForwardRefExoticComponent<Omit<ToastPrimitives.ToastActionProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
10
|
+
declare const ToastClose: React.ForwardRefExoticComponent<Omit<ToastPrimitives.ToastCloseProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
|
|
11
|
+
declare const ToastTitle: React.ForwardRefExoticComponent<Omit<ToastPrimitives.ToastTitleProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
12
|
+
declare const ToastDescription: React.ForwardRefExoticComponent<Omit<ToastPrimitives.ToastDescriptionProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
13
|
+
type ToastProps = React.ComponentPropsWithoutRef<typeof Toast>;
|
|
14
|
+
type ToastActionElement = React.ReactElement<typeof ToastAction>;
|
|
15
|
+
export { type ToastProps, type ToastActionElement, ToastProvider, ToastViewport, Toast, ToastTitle, ToastDescription, ToastClose, ToastAction, };
|
|
16
|
+
//# sourceMappingURL=toast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../../../src/components/ui/toast.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,eAAe,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAKlE,QAAA,MAAM,aAAa,8CAA2B,CAAC;AAE/C,QAAA,MAAM,aAAa,kKAYjB,CAAC;AA4BH,QAAA,MAAM,KAAK;;qHAYT,CAAC;AAGH,QAAA,MAAM,WAAW,kKAYf,CAAC;AAGH,QAAA,MAAM,UAAU,iKAed,CAAC;AAGH,QAAA,MAAM,UAAU,2JASd,CAAC;AAGH,QAAA,MAAM,gBAAgB,iKASpB,CAAC;AAGH,KAAK,UAAU,GAAG,KAAK,CAAC,wBAAwB,CAAC,OAAO,KAAK,CAAC,CAAC;AAE/D,KAAK,kBAAkB,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,WAAW,CAAC,CAAC;AAEjE,OAAO,EACL,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,aAAa,EACb,aAAa,EACb,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,WAAW,GACZ,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import * as ToastPrimitives from "@radix-ui/react-toast";
|
|
4
|
+
import { cva } from "class-variance-authority";
|
|
5
|
+
import { X } from "lucide-react";
|
|
6
|
+
import { cn } from "../../lib/utils";
|
|
7
|
+
const ToastProvider = ToastPrimitives.Provider;
|
|
8
|
+
const ToastViewport = React.forwardRef(({ className, ...props }, ref) => (_jsx(ToastPrimitives.Viewport, { ref: ref, className: cn("fixed left-1/2 top-4 z-[100] flex max-h-screen w-auto -translate-x-1/2 flex-col p-4 sm:max-w-fit", className), ...props })));
|
|
9
|
+
ToastViewport.displayName = ToastPrimitives.Viewport.displayName;
|
|
10
|
+
const toastVariants = cva("group pointer-events-auto relative flex w-auto min-w-fit items-center justify-between space-x-4 overflow-hidden rounded-md border px-4 py-3 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-top-full data-[state=open]:slide-in-from-top-full", {
|
|
11
|
+
variants: {
|
|
12
|
+
variant: {
|
|
13
|
+
default: "border bg-background text-foreground",
|
|
14
|
+
destructive: "destructive group border-destructive bg-destructive text-destructive-foreground",
|
|
15
|
+
success: "border-green-200 bg-green-50 text-green-900 shadow-lg",
|
|
16
|
+
cute: cn("border-purple-200 bg-gradient-to-r from-purple-50 to-pink-50 text-purple-900 shadow-lg rounded-lg", // Base styling
|
|
17
|
+
"w-[calc(100vw-4rem)]", // Mobile: take (100vw - 4rem) width for near full-bleed with margin
|
|
18
|
+
"mx-auto", // Center it (viewport already centers, but keep safety)
|
|
19
|
+
"min-w-0", // Prevent it from shrinking too small if content wraps
|
|
20
|
+
"sm:w-auto", // On larger screens revert to intrinsic sizing
|
|
21
|
+
"justify-center text-center space-x-0"),
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
defaultVariants: {
|
|
25
|
+
variant: "default",
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
const Toast = React.forwardRef(({ className, variant, ...props }, ref) => {
|
|
29
|
+
return (_jsx(ToastPrimitives.Root, { ref: ref, className: cn(toastVariants({ variant }), className), ...props }));
|
|
30
|
+
});
|
|
31
|
+
Toast.displayName = ToastPrimitives.Root.displayName;
|
|
32
|
+
const ToastAction = React.forwardRef(({ className, ...props }, ref) => (_jsx(ToastPrimitives.Action, { ref: ref, className: cn("inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors hover:bg-secondary focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive", className), ...props })));
|
|
33
|
+
ToastAction.displayName = ToastPrimitives.Action.displayName;
|
|
34
|
+
const ToastClose = React.forwardRef(({ className, ...props }, ref) => (_jsx(ToastPrimitives.Close, { ref: ref, className: cn("absolute right-1 top-1 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600", className), "toast-close": "", ...props, children: _jsx(X, { className: "h-3 w-3" }) })));
|
|
35
|
+
ToastClose.displayName = ToastPrimitives.Close.displayName;
|
|
36
|
+
const ToastTitle = React.forwardRef(({ className, ...props }, ref) => (_jsx(ToastPrimitives.Title, { ref: ref, className: cn("text-sm font-semibold", className), ...props })));
|
|
37
|
+
ToastTitle.displayName = ToastPrimitives.Title.displayName;
|
|
38
|
+
const ToastDescription = React.forwardRef(({ className, ...props }, ref) => (_jsx(ToastPrimitives.Description, { ref: ref, className: cn("text-sm opacity-90", className), ...props })));
|
|
39
|
+
ToastDescription.displayName = ToastPrimitives.Description.displayName;
|
|
40
|
+
export { ToastProvider, ToastViewport, Toast, ToastTitle, ToastDescription, ToastClose, ToastAction, };
|
|
41
|
+
//# sourceMappingURL=toast.js.map
|