@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.
Files changed (141) hide show
  1. package/dist/components/canvas/canvas.d.ts +29 -0
  2. package/dist/components/canvas/canvas.d.ts.map +1 -0
  3. package/dist/components/canvas/canvas.js +419 -0
  4. package/dist/components/canvas/canvas.js.map +1 -0
  5. package/dist/components/canvas/component.d.ts +47 -0
  6. package/dist/components/canvas/component.d.ts.map +1 -0
  7. package/dist/components/canvas/component.js +177 -0
  8. package/dist/components/canvas/component.js.map +1 -0
  9. package/dist/components/canvas/cursor.d.ts +8 -0
  10. package/dist/components/canvas/cursor.d.ts.map +1 -0
  11. package/dist/components/canvas/cursor.js +32 -0
  12. package/dist/components/canvas/cursor.js.map +1 -0
  13. package/dist/components/canvas/draggable.d.ts +21 -0
  14. package/dist/components/canvas/draggable.d.ts.map +1 -0
  15. package/dist/components/canvas/draggable.js +163 -0
  16. package/dist/components/canvas/draggable.js.map +1 -0
  17. package/dist/components/canvas/navbar/index.d.ts +19 -0
  18. package/dist/components/canvas/navbar/index.d.ts.map +1 -0
  19. package/dist/components/canvas/navbar/index.js +106 -0
  20. package/dist/components/canvas/navbar/index.js.map +1 -0
  21. package/dist/components/canvas/navbar/single-button.d.ts +17 -0
  22. package/dist/components/canvas/navbar/single-button.d.ts.map +1 -0
  23. package/dist/components/canvas/navbar/single-button.js +97 -0
  24. package/dist/components/canvas/navbar/single-button.js.map +1 -0
  25. package/dist/components/canvas/offest.d.ts +6 -0
  26. package/dist/components/canvas/offest.d.ts.map +1 -0
  27. package/dist/components/canvas/offest.js +12 -0
  28. package/dist/components/canvas/offest.js.map +1 -0
  29. package/dist/components/canvas/reset.d.ts +5 -0
  30. package/dist/components/canvas/reset.d.ts.map +1 -0
  31. package/dist/components/canvas/reset.js +7 -0
  32. package/dist/components/canvas/reset.js.map +1 -0
  33. package/dist/components/canvas/toolbar.d.ts +7 -0
  34. package/dist/components/canvas/toolbar.d.ts.map +1 -0
  35. package/dist/components/canvas/toolbar.js +28 -0
  36. package/dist/components/canvas/toolbar.js.map +1 -0
  37. package/dist/components/canvas/wrapper.d.ts +26 -0
  38. package/dist/components/canvas/wrapper.d.ts.map +1 -0
  39. package/dist/components/canvas/wrapper.js +107 -0
  40. package/dist/components/canvas/wrapper.js.map +1 -0
  41. package/dist/components/ui/FolderIcon.d.ts +9 -0
  42. package/dist/components/ui/FolderIcon.d.ts.map +1 -0
  43. package/dist/components/ui/FolderIcon.js +25 -0
  44. package/dist/components/ui/FolderIcon.js.map +1 -0
  45. package/dist/components/ui/button.d.ts +14 -0
  46. package/dist/components/ui/button.d.ts.map +1 -0
  47. package/dist/components/ui/button.js +54 -0
  48. package/dist/components/ui/button.js.map +1 -0
  49. package/dist/components/ui/label.d.ts +6 -0
  50. package/dist/components/ui/label.d.ts.map +1 -0
  51. package/dist/components/ui/label.js +10 -0
  52. package/dist/components/ui/label.js.map +1 -0
  53. package/dist/components/ui/toast.d.ts +16 -0
  54. package/dist/components/ui/toast.d.ts.map +1 -0
  55. package/dist/components/ui/toast.js +41 -0
  56. package/dist/components/ui/toast.js.map +1 -0
  57. package/dist/components/ui/toaster.d.ts +2 -0
  58. package/dist/components/ui/toaster.d.ts.map +1 -0
  59. package/dist/components/ui/toaster.js +10 -0
  60. package/dist/components/ui/toaster.js.map +1 -0
  61. package/dist/contexts/CanvasContext.d.ts +26 -0
  62. package/dist/contexts/CanvasContext.d.ts.map +1 -0
  63. package/dist/contexts/CanvasContext.js +22 -0
  64. package/dist/contexts/CanvasContext.js.map +1 -0
  65. package/dist/contexts/PerformanceContext.d.ts +31 -0
  66. package/dist/contexts/PerformanceContext.d.ts.map +1 -0
  67. package/dist/contexts/PerformanceContext.js +56 -0
  68. package/dist/contexts/PerformanceContext.js.map +1 -0
  69. package/dist/hooks/use-mobile.d.ts +2 -0
  70. package/dist/hooks/use-mobile.d.ts.map +1 -0
  71. package/dist/hooks/use-mobile.js +16 -0
  72. package/dist/hooks/use-mobile.js.map +1 -0
  73. package/dist/hooks/use-toast.d.ts +45 -0
  74. package/dist/hooks/use-toast.d.ts.map +1 -0
  75. package/dist/hooks/use-toast.js +126 -0
  76. package/dist/hooks/use-toast.js.map +1 -0
  77. package/dist/hooks/usePerformanceMode.d.ts +6 -0
  78. package/dist/hooks/usePerformanceMode.d.ts.map +1 -0
  79. package/dist/hooks/usePerformanceMode.js +6 -0
  80. package/dist/hooks/usePerformanceMode.js.map +1 -0
  81. package/dist/hooks/useWindowDimensions.d.ts +7 -0
  82. package/dist/hooks/useWindowDimensions.d.ts.map +1 -0
  83. package/dist/hooks/useWindowDimensions.js +22 -0
  84. package/dist/hooks/useWindowDimensions.js.map +1 -0
  85. package/dist/index.d.ts +26 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +28 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/lib/canvas.d.ts +35 -0
  90. package/dist/lib/canvas.d.ts.map +1 -0
  91. package/dist/lib/canvas.js +82 -0
  92. package/dist/lib/canvas.js.map +1 -0
  93. package/dist/lib/constants.d.ts +78 -0
  94. package/dist/lib/constants.d.ts.map +1 -0
  95. package/dist/lib/constants.js +122 -0
  96. package/dist/lib/constants.js.map +1 -0
  97. package/dist/lib/copy.d.ts +2 -0
  98. package/dist/lib/copy.d.ts.map +1 -0
  99. package/dist/lib/copy.js +20 -0
  100. package/dist/lib/copy.js.map +1 -0
  101. package/dist/lib/utils.d.ts +4 -0
  102. package/dist/lib/utils.d.ts.map +1 -0
  103. package/dist/lib/utils.js +14 -0
  104. package/dist/lib/utils.js.map +1 -0
  105. package/dist/types/index.d.ts +19 -0
  106. package/dist/types/index.d.ts.map +1 -0
  107. package/dist/types/index.js +14 -0
  108. package/dist/types/index.js.map +1 -0
  109. package/dist/utils/performance.d.ts +9 -0
  110. package/dist/utils/performance.d.ts.map +1 -0
  111. package/dist/utils/performance.js +29 -0
  112. package/dist/utils/performance.js.map +1 -0
  113. package/package.json +55 -0
  114. package/src/components/canvas/canvas.tsx +728 -0
  115. package/src/components/canvas/component.tsx +230 -0
  116. package/src/components/canvas/cursor.tsx +161 -0
  117. package/src/components/canvas/draggable.tsx +298 -0
  118. package/src/components/canvas/navbar/index.tsx +213 -0
  119. package/src/components/canvas/navbar/single-button.tsx +199 -0
  120. package/src/components/canvas/offest.tsx +23 -0
  121. package/src/components/canvas/reset.tsx +21 -0
  122. package/src/components/canvas/toolbar.tsx +67 -0
  123. package/src/components/canvas/wrapper.tsx +219 -0
  124. package/src/components/ui/FolderIcon.tsx +116 -0
  125. package/src/components/ui/button.tsx +162 -0
  126. package/src/components/ui/label.tsx +24 -0
  127. package/src/components/ui/toast.tsx +136 -0
  128. package/src/components/ui/toaster.tsx +33 -0
  129. package/src/contexts/CanvasContext.tsx +54 -0
  130. package/src/contexts/PerformanceContext.tsx +81 -0
  131. package/src/hooks/use-mobile.ts +21 -0
  132. package/src/hooks/use-toast.ts +186 -0
  133. package/src/hooks/usePerformanceMode.ts +5 -0
  134. package/src/hooks/useWindowDimensions.ts +32 -0
  135. package/src/index.ts +36 -0
  136. package/src/lib/canvas.ts +132 -0
  137. package/src/lib/constants.ts +153 -0
  138. package/src/lib/copy.ts +18 -0
  139. package/src/lib/utils.ts +18 -0
  140. package/src/types/index.ts +20 -0
  141. 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,6 @@
1
+ import { type Point } from "framer-motion";
2
+ export declare const OffsetComponent: ({ offset, children, }: {
3
+ offset: Point;
4
+ children: React.ReactNode;
5
+ }) => import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=offest.d.ts.map
@@ -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,5 @@
1
+ declare const Reset: ({ onResetViewAndItems, }: {
2
+ onResetViewAndItems: () => void;
3
+ }) => import("react/jsx-runtime").JSX.Element;
4
+ export default Reset;
5
+ //# sourceMappingURL=reset.d.ts.map
@@ -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