@hunterchen/canvas 0.3.1 → 0.4.1

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/README.md CHANGED
@@ -1,3 +1,6 @@
1
+ [![npm downloads](https://img.shields.io/npm/dt/@hunterchen/canvas.svg)](https://www.npmjs.com/package/@hunterchen/canvas)
2
+
3
+
1
4
  # @hunterchen/canvas
2
5
 
3
6
  A React-based canvas library for creating pannable, zoomable, and interactive canvas experiences. Originally developed (by me) for the [Hack Western 12 Website](https://github.com/hackwestern/hackwestern/tree/2025).
@@ -132,6 +135,170 @@ const navItems: NavItem[] = [
132
135
 
133
136
  When `navItems` is provided, the canvas will render a navbar with buttons to navigate between sections. The navbar uses Lucide icons, so make sure the icon names match available Lucide icons.
134
137
 
138
+ ## Customization
139
+
140
+ ### Background Customization
141
+
142
+ The canvas comes with neutral gray default backgrounds. You can fully customize the canvas background, intro/wrapper background, and intro content.
143
+
144
+ #### Canvas Background
145
+
146
+ The canvas background consists of a gradient, dot pattern, and noise filter. Customize it by passing a `canvasBackground` prop:
147
+
148
+ ```tsx
149
+ import { Canvas, DefaultCanvasBackground } from '@hunterchen/canvas';
150
+
151
+ // Option 1: Use the default component with custom props
152
+ <Canvas
153
+ homeCoordinates={homeCoordinates}
154
+ canvasBackground={
155
+ <DefaultCanvasBackground
156
+ gradientStyle="radial-gradient(circle, #ff6b6b 0%, #4ecdc4 100%)"
157
+ dotColor="#333333"
158
+ dotOpacity={0.5}
159
+ showFilter={false}
160
+ />
161
+ }
162
+ >
163
+ {/* ... */}
164
+ </Canvas>
165
+
166
+ // Option 2: Pass your own custom background component
167
+ <Canvas
168
+ homeCoordinates={homeCoordinates}
169
+ canvasBackground={<MyCustomBackground />}
170
+ >
171
+ {/* ... */}
172
+ </Canvas>
173
+ ```
174
+
175
+ **DefaultCanvasBackground props:**
176
+ | Prop | Type | Default | Description |
177
+ |------|------|---------|-------------|
178
+ | `gradientStyle` | `string` | neutral gray gradient | CSS gradient string |
179
+ | `showDots` | `boolean` | `true` | Show dot pattern overlay |
180
+ | `dotColor` | `string` | `#888888` | Dot pattern color |
181
+ | `dotSize` | `number` | `1.5` | Dot size in pixels |
182
+ | `dotSpacing` | `number` | `22` | Dot spacing in pixels |
183
+ | `dotOpacity` | `number` | `0.35` | Dot pattern opacity (0-1) |
184
+ | `showFilter` | `boolean` | `true` | Show noise filter |
185
+ | `filterOpacity` | `number` | `0.6` | Noise filter opacity (0-1) |
186
+
187
+ #### Intro/Wrapper Background
188
+
189
+ Customize the background shown during the intro animation:
190
+
191
+ ```tsx
192
+ import { Canvas, DefaultWrapperBackground } from '@hunterchen/canvas';
193
+
194
+ // Option 1: Simple gradient string
195
+ <Canvas
196
+ homeCoordinates={homeCoordinates}
197
+ introBackgroundGradient="linear-gradient(to bottom, #667eea 0%, #764ba2 100%)"
198
+ >
199
+ {/* ... */}
200
+ </Canvas>
201
+
202
+ // Option 2: Custom wrapper background component
203
+ <Canvas
204
+ homeCoordinates={homeCoordinates}
205
+ wrapperBackground={
206
+ <DefaultWrapperBackground
207
+ gradient="linear-gradient(to top, #FEB6AF 0%, #EAD2DF 50%)"
208
+ />
209
+ }
210
+ >
211
+ {/* ... */}
212
+ </Canvas>
213
+ ```
214
+
215
+ #### Intro Content
216
+
217
+ Customize the logo and title shown during loading:
218
+
219
+ ```tsx
220
+ import { Canvas, DefaultIntroContent } from '@hunterchen/canvas';
221
+
222
+ <Canvas
223
+ homeCoordinates={homeCoordinates}
224
+ introContent={
225
+ <DefaultIntroContent
226
+ logoSrc="/my-logo.svg"
227
+ logoAlt="My App Logo"
228
+ logoWidth={80}
229
+ logoHeight={80}
230
+ title="MY APP"
231
+ titleClassName="text-blue-600"
232
+ />
233
+ }
234
+ loadingText="Loading..."
235
+ >
236
+ {/* ... */}
237
+ </Canvas>
238
+ ```
239
+
240
+ #### Complete Theming Example (Hack Western Style)
241
+
242
+ Here's a complete example showing how to apply a custom theme:
243
+
244
+ ```tsx
245
+ import {
246
+ Canvas,
247
+ DefaultCanvasBackground,
248
+ DefaultIntroContent,
249
+ DefaultWrapperBackground,
250
+ canvasWidth,
251
+ canvasHeight,
252
+ } from '@hunterchen/canvas';
253
+
254
+ // Define your theme colors
255
+ const CANVAS_GRADIENT = `radial-gradient(ellipse ${canvasWidth}px ${canvasHeight}px at ${canvasWidth / 2}px ${canvasHeight}px, var(--coral) 0%, var(--salmon) 41%, var(--lilac) 59%, var(--beige) 90%)`;
256
+ const INTRO_GRADIENT = "linear-gradient(to top, #FEB6AF 0%, #EAD2DF 15%, #EFE3E1 50%)";
257
+ const BOX_GRADIENT = "radial-gradient(130.38% 95% at 50.03% 97.25%, #EFB8A0 0%, #EAD2DF 48.09%, #EFE3E1 100%)";
258
+
259
+ function App() {
260
+ return (
261
+ <Canvas
262
+ homeCoordinates={homeCoordinates}
263
+ navItems={navItems}
264
+ introBackgroundGradient={INTRO_GRADIENT}
265
+ canvasBoxGradient={BOX_GRADIENT}
266
+ introContent={
267
+ <DefaultIntroContent
268
+ logoSrc="/logo.svg"
269
+ logoAlt="Logo"
270
+ title="MY BRAND"
271
+ />
272
+ }
273
+ loadingText="LOADING..."
274
+ canvasBackground={
275
+ <DefaultCanvasBackground
276
+ gradientStyle={CANVAS_GRADIENT}
277
+ dotColor="#776780"
278
+ />
279
+ }
280
+ wrapperBackground={
281
+ <DefaultWrapperBackground gradient={INTRO_GRADIENT} />
282
+ }
283
+ >
284
+ {/* Your canvas content */}
285
+ </Canvas>
286
+ );
287
+ }
288
+ ```
289
+
290
+ ### Exported Constants
291
+
292
+ The library exports default gradient values you can use as a starting point:
293
+
294
+ ```tsx
295
+ import {
296
+ DEFAULT_CANVAS_GRADIENT, // Default canvas background gradient
297
+ DEFAULT_INTRO_GRADIENT, // Default intro background gradient
298
+ DEFAULT_CANVAS_BOX_GRADIENT // Default blur mask gradient
299
+ } from '@hunterchen/canvas';
300
+ ```
301
+
135
302
  ## Usage Examples
136
303
 
137
304
  ### Basic Canvas with Draggable Elements
@@ -193,6 +360,14 @@ npm run type-check
193
360
  - `CanvasToolbar` - Coordinate/zoom display toolbar
194
361
  - `CanvasNavbar` - Navigation buttons
195
362
 
363
+ ### Background Components
364
+ - `DefaultCanvasBackground` - Customizable canvas background with gradient, dots, and filter
365
+ - `DefaultWrapperBackground` - Customizable intro/wrapper background
366
+ - `DefaultIntroContent` - Customizable intro logo and title
367
+ - `DEFAULT_CANVAS_GRADIENT` - Default canvas gradient constant
368
+ - `DEFAULT_INTRO_GRADIENT` - Default intro gradient constant
369
+ - `DEFAULT_CANVAS_BOX_GRADIENT` - Default blur mask gradient constant
370
+
196
371
  ### Contexts
197
372
  - `CanvasProvider` - Canvas state context provider
198
373
  - `useCanvasContext` - Hook to access canvas context
@@ -204,6 +379,7 @@ npm run type-check
204
379
  - `usePerformanceModeLegacy` - Legacy performance optimization
205
380
 
206
381
  ### Utilities
382
+ - `cn` - Tailwind class merging utility (uses `clsx` + `tailwind-merge`)
207
383
  - Canvas utility functions (pan, zoom, coordinates)
208
384
  - Performance detection utilities
209
385
  - Constants and types
@@ -0,0 +1,70 @@
1
+ import React, { type ReactNode } from "react";
2
+ export interface DefaultCanvasBackgroundProps {
3
+ /** Custom gradient CSS string. If not provided, uses the default radial gradient. */
4
+ gradientStyle?: string;
5
+ /** Whether to show the dot pattern. Default: true */
6
+ showDots?: boolean;
7
+ /** Dot pattern color. Default: #888888 */
8
+ dotColor?: string;
9
+ /** Dot pattern size in pixels. Default: 1.5 */
10
+ dotSize?: number;
11
+ /** Dot pattern spacing in pixels. Default: 22 */
12
+ dotSpacing?: number;
13
+ /** Dot pattern opacity (0-1). Default: 0.35 */
14
+ dotOpacity?: number;
15
+ /** Whether to show the noise filter. Default: true */
16
+ showFilter?: boolean;
17
+ /** Filter opacity (0-1). Default: 0.6 */
18
+ filterOpacity?: number;
19
+ /** Additional className for the gradient layer */
20
+ gradientClassName?: string;
21
+ /** Additional className for the dots layer */
22
+ dotsClassName?: string;
23
+ /** Additional className for the filter layer */
24
+ filterClassName?: string;
25
+ /** Additional children to render in the background */
26
+ children?: ReactNode;
27
+ }
28
+ /** The default canvas gradient (neutral gray) */
29
+ export declare const DEFAULT_CANVAS_GRADIENT = "radial-gradient(ellipse 6000px 4000px at 3000px 4000px, #e5e5e5 0%, #d4d4d4 41%, #a3a3a3 59%, #f5f5f5 90%)";
30
+ /**
31
+ * Default canvas background with gradient, dots, and noise filter.
32
+ * All aspects are customizable via props.
33
+ */
34
+ export declare const DefaultCanvasBackground: React.FC<DefaultCanvasBackgroundProps>;
35
+ export interface DefaultWrapperBackgroundProps {
36
+ /** Background gradient for the intro screen */
37
+ gradient?: string;
38
+ /** Additional className */
39
+ className?: string;
40
+ /** Additional inline styles */
41
+ style?: React.CSSProperties;
42
+ }
43
+ /**
44
+ * Default wrapper/intro background gradient.
45
+ */
46
+ export declare const DefaultWrapperBackground: React.FC<DefaultWrapperBackgroundProps>;
47
+ export interface DefaultIntroContentProps {
48
+ /** Logo image source */
49
+ logoSrc?: string;
50
+ /** Logo alt text */
51
+ logoAlt?: string;
52
+ /** Logo width */
53
+ logoWidth?: number;
54
+ /** Logo height */
55
+ logoHeight?: number;
56
+ /** Title text */
57
+ title?: string;
58
+ /** Additional className for the container */
59
+ className?: string;
60
+ /** Additional className for the title */
61
+ titleClassName?: string;
62
+ }
63
+ /**
64
+ * Default intro content shown during loading.
65
+ * Can be customized or replaced entirely.
66
+ */
67
+ export declare const DefaultIntroContent: React.FC<DefaultIntroContentProps>;
68
+ export declare const DEFAULT_INTRO_GRADIENT = "linear-gradient(to top, #d4d4d4 0%, #e5e5e5 50%, #f5f5f5 100%)";
69
+ export declare const DEFAULT_CANVAS_BOX_GRADIENT = "radial-gradient(130.38% 95% at 50.03% 97.25%, #d4d4d4 0%, #e5e5e5 48.09%, #f5f5f5 100%)";
70
+ //# sourceMappingURL=backgrounds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backgrounds.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/backgrounds.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAO9C,MAAM,WAAW,4BAA4B;IAC3C,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yCAAyC;IACzC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gDAAgD;IAChD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,iDAAiD;AACjD,eAAO,MAAM,uBAAuB,+GAA6J,CAAC;AAElM;;;GAGG;AACH,eAAO,MAAM,uBAAuB,EAAE,KAAK,CAAC,EAAE,CAAC,4BAA4B,CA6D1E,CAAC;AAIF,MAAM,WAAW,6BAA6B;IAC5C,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,KAAK,CAAC,EAAE,CAAC,6BAA6B,CAc5E,CAAC;AAEF,MAAM,WAAW,wBAAwB;IACvC,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yCAAyC;IACzC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CA0ClE,CAAC;AAGF,eAAO,MAAM,sBAAsB,mEAC+B,CAAC;AAEnE,eAAO,MAAM,2BAA2B,4FACmD,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { motion } from "framer-motion";
3
+ import { canvasWidth, canvasHeight } from "../../lib/canvas";
4
+ import { cn } from "../../lib/utils";
5
+ /** The default canvas gradient (neutral gray) */
6
+ export const DEFAULT_CANVAS_GRADIENT = `radial-gradient(ellipse ${canvasWidth}px ${canvasHeight}px at ${canvasWidth / 2}px ${canvasHeight}px, #e5e5e5 0%, #d4d4d4 41%, #a3a3a3 59%, #f5f5f5 90%)`;
7
+ /**
8
+ * Default canvas background with gradient, dots, and noise filter.
9
+ * All aspects are customizable via props.
10
+ */
11
+ export const DefaultCanvasBackground = ({ gradientStyle, showDots = true, dotColor = "#888888", dotSize = 1.5, dotSpacing = 22, dotOpacity = 0.35, showFilter = true, filterOpacity = 0.6, gradientClassName, dotsClassName, filterClassName, children, }) => {
12
+ const gradientImage = gradientStyle ?? DEFAULT_CANVAS_GRADIENT;
13
+ return (_jsxs(_Fragment, { children: [_jsx("div", { className: cn("pointer-events-none absolute inset-0 h-full w-full", gradientClassName), style: {
14
+ backgroundImage: gradientImage,
15
+ } }), showDots && (_jsx("div", { className: cn("pointer-events-none absolute inset-0 h-full w-full", dotsClassName), style: {
16
+ backgroundImage: `radial-gradient(${dotColor} ${dotSize}px, transparent ${dotSize}px)`,
17
+ backgroundSize: `${dotSpacing}px ${dotSpacing}px`,
18
+ opacity: dotOpacity,
19
+ } })), showFilter && (_jsx("div", { className: cn("pointer-events-none absolute inset-0 hidden h-full w-full bg-none filter md:inline md:bg-noise", filterClassName), style: {
20
+ opacity: filterOpacity,
21
+ filter: "contrast(0.6)",
22
+ } })), children] }));
23
+ };
24
+ /**
25
+ * Default wrapper/intro background gradient.
26
+ */
27
+ export const DefaultWrapperBackground = ({ gradient = "linear-gradient(to top, #d4d4d4 0%, #e5e5e5 50%, #f5f5f5 100%)", className, style, }) => {
28
+ return (_jsx("div", { className: cn("absolute inset-0 h-full w-full", className), style: {
29
+ backgroundImage: gradient,
30
+ ...style,
31
+ } }));
32
+ };
33
+ /**
34
+ * Default intro content shown during loading.
35
+ * Can be customized or replaced entirely.
36
+ */
37
+ export const DefaultIntroContent = ({ logoSrc, logoAlt = "Logo", logoWidth = 64, logoHeight = 64, title, className, titleClassName, }) => {
38
+ // If no logo or title provided, render nothing
39
+ if (!logoSrc && !title) {
40
+ return null;
41
+ }
42
+ return (_jsxs("div", { className: cn("absolute left-1/2 top-24 flex -translate-x-1/2 flex-col items-center text-center", className), children: [logoSrc && (_jsx(motion.img, { src: logoSrc, alt: logoAlt, width: logoWidth, height: logoHeight, className: "mb-4" })), title && (_jsx("div", { className: cn("font-sans font-semibold text-neutral-600", titleClassName), children: title }))] }));
43
+ };
44
+ // Default gradient values for export (neutral grays)
45
+ export const DEFAULT_INTRO_GRADIENT = "linear-gradient(to top, #d4d4d4 0%, #e5e5e5 50%, #f5f5f5 100%)";
46
+ export const DEFAULT_CANVAS_BOX_GRADIENT = "radial-gradient(130.38% 95% at 50.03% 97.25%, #d4d4d4 0%, #e5e5e5 48.09%, #f5f5f5 100%)";
47
+ //# sourceMappingURL=backgrounds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backgrounds.js","sourceRoot":"","sources":["../../../src/components/canvas/backgrounds.tsx"],"names":[],"mappings":"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"}
@@ -21,8 +21,11 @@ interface Props {
21
21
  growTransition?: Transition;
22
22
  /** Custom blur transition */
23
23
  blurTransition?: Transition;
24
+ /** Custom canvas background. If not provided, uses DefaultCanvasBackground. */
25
+ canvasBackground?: ReactNode;
26
+ /** Custom wrapper/intro background. If not provided, uses introBackgroundGradient. */
27
+ wrapperBackground?: ReactNode;
24
28
  }
25
29
  declare const Canvas: FC<Props>;
26
- export declare const gradientBgImage = "radial-gradient(ellipse 6000px 4000px at 3000px 4000px, var(--coral) 0%, var(--salmon) 41%, var(--lilac) 59%, var(--beige) 90%)";
27
30
  export default Canvas;
28
31
  //# sourceMappingURL=canvas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/canvas.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,EAIZ,KAAK,EAAE,EAIR,MAAM,OAAO,CAAC;AAwBf,OAAO,KAAK,EAAiB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAG9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,UAAU,KAAK;IACb,eAAe,EAAE,kBAAkB,CAAC;IACpC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAG1B,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IAGrB,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,0BAA0B;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6BAA6B;IAC7B,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,6BAA6B;IAC7B,cAAc,CAAC,EAAE,UAAU,CAAC;CAC7B;AAYD,QAAA,MAAM,MAAM,EAAE,EAAE,CAAC,KAAK,CAolBrB,CAAC;AAEF,eAAO,MAAM,eAAe,oIAAkL,CAAC;AAyB/M,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/canvas.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,EAIZ,KAAK,EAAE,EAIR,MAAM,OAAO,CAAC;AAwBf,OAAO,KAAK,EAAiB,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAG9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,UAAU,KAAK;IACb,eAAe,EAAE,kBAAkB,CAAC;IACpC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAG1B,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IAGrB,uCAAuC;IACvC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0CAA0C;IAC1C,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,0BAA0B;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,6BAA6B;IAC7B,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,6BAA6B;IAC7B,cAAc,CAAC,EAAE,UAAU,CAAC;IAG5B,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,SAAS,CAAC;CAC/B;AAYD,QAAA,MAAM,MAAM,EAAE,EAAE,CAAC,KAAK,CAwlBrB,CAAC;AAEF,eAAe,MAAM,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { motion, useMotionValue, animate, useTransform, } from "framer-motion";
3
- import React, { useState, useRef, useEffect, useCallback, useMemo, } from "react";
3
+ import { useState, useRef, useEffect, useCallback, useMemo, } from "react";
4
4
  import { CanvasProvider } from "../../contexts/CanvasContext";
5
5
  import { calcInitialBoxWidth, canvasHeight, canvasWidth, getDistance, getMidpoint, getScreenSizeEnum, getSectionPanCoordinates, INTERACTIVE_SELECTOR, MAX_ZOOM, MIN_ZOOMS, panToOffsetScene, ZOOM_BOUND, } from "../../lib/canvas";
6
6
  import { STAGE2_TRANSITION, MOUSE_WHEEL_ZOOM_SENSITIVITY, TRACKPAD_ZOOM_SENSITIVITY, } from "../../lib/constants";
@@ -9,12 +9,13 @@ import Navbar from "./navbar";
9
9
  import Toolbar from "./toolbar";
10
10
  import { CanvasWrapper } from "./wrapper";
11
11
  import { usePerformanceMode } from "../../hooks/usePerformanceMode";
12
+ import { DefaultCanvasBackground } from "./backgrounds";
12
13
  const stopAllMotion = (x, y, scale) => {
13
14
  x.stop();
14
15
  y.stop();
15
16
  scale.stop();
16
17
  };
17
- const Canvas = ({ children, homeCoordinates, navItems, skipIntro = false, introContent, loadingText, introBackgroundGradient, canvasBoxGradient, growTransition, blurTransition, }) => {
18
+ const Canvas = ({ children, homeCoordinates, navItems, skipIntro = false, introContent, loadingText, introBackgroundGradient, canvasBoxGradient, growTransition, blurTransition, canvasBackground, wrapperBackground, }) => {
18
19
  const { height: windowHeight, width: windowWidth } = useWindowDimensions();
19
20
  const { mode } = usePerformanceMode();
20
21
  const hasNavbar = Boolean(navItems && navItems.length > 0);
@@ -369,7 +370,7 @@ const Canvas = ({ children, homeCoordinates, navItems, skipIntro = false, introC
369
370
  y: -offset.y,
370
371
  }, viewportRef, onComplete, zoom);
371
372
  }, [panToOffset, viewportRef]);
372
- return (_jsx(CanvasWrapper, { introProgress: introProgress, onIntroGrowComplete: startStage2, skipIntro: skipIntro, introContent: introContent, loadingText: loadingText, introBackgroundGradient: introBackgroundGradient, canvasBoxGradient: canvasBoxGradient, growTransition: growTransition, blurTransition: blurTransition, children: _jsxs(CanvasProvider, { x: x, y: y, scale: scale, isResetting: isResetting, maxZIndex: maxZIndex, setMaxZIndex: setMaxZIndex, animationStage: animationStage, nextTargetSection: nextTargetSection, setNextTargetSection: setNextTargetSection, children: [animationStage >= 2 && (_jsxs(_Fragment, { children: [_jsx(Toolbar, { homeCoordinates: offsetHomeCoordinates }), hasNavbar && navItems ? (_jsx(Navbar, { panToOffset: handlePanToOffset, onReset: onResetViewAndItems, items: navItems })) : null] })), _jsx("div", { ref: setViewportRef, className: "relative h-full w-full touch-none select-none overflow-hidden", style: {
373
+ return (_jsx(CanvasWrapper, { introProgress: introProgress, onIntroGrowComplete: startStage2, skipIntro: skipIntro, introContent: introContent, loadingText: loadingText, introBackgroundGradient: introBackgroundGradient, wrapperBackground: wrapperBackground, canvasBoxGradient: canvasBoxGradient, growTransition: growTransition, blurTransition: blurTransition, children: _jsxs(CanvasProvider, { x: x, y: y, scale: scale, isResetting: isResetting, maxZIndex: maxZIndex, setMaxZIndex: setMaxZIndex, animationStage: animationStage, nextTargetSection: nextTargetSection, setNextTargetSection: setNextTargetSection, children: [animationStage >= 2 && (_jsxs(_Fragment, { children: [_jsx(Toolbar, { homeCoordinates: offsetHomeCoordinates }), hasNavbar && navItems ? (_jsx(Navbar, { panToOffset: handlePanToOffset, onReset: onResetViewAndItems, items: navItems })) : null] })), _jsx("div", { ref: setViewportRef, className: "relative h-full w-full touch-none select-none overflow-hidden", style: {
373
374
  touchAction: "none",
374
375
  pointerEvents: animationStage >= 2 ? "auto" : "none",
375
376
  overscrollBehavior: "contain",
@@ -382,20 +383,7 @@ const Canvas = ({ children, homeCoordinates, navItems, skipIntro = false, introC
382
383
  willChange: mode !== "high" && (animationStage < 2 || isPanning)
383
384
  ? "transform"
384
385
  : "auto",
385
- }, children: [_jsx(Gradient, {}), animationStage >= 1 &&
386
- (mode === "high" ? (_jsxs(motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, transition: { duration: 0.5, ease: "easeIn" }, children: [_jsx(Filter, {}), _jsx(Dots, {})] })) : (_jsxs(_Fragment, { children: [_jsx(Filter, {}), _jsx(Dots, {})] }))), children] }) })] }) }));
386
+ }, children: [canvasBackground !== undefined ? (canvasBackground) : (_jsx(_Fragment, { children: animationStage >= 1 && mode === "high" ? (_jsx(motion.div, { initial: { opacity: 0 }, animate: { opacity: 1 }, transition: { duration: 0.5, ease: "easeIn" }, children: _jsx(DefaultCanvasBackground, {}) })) : (_jsx(DefaultCanvasBackground, {})) })), children] }) })] }) }));
387
387
  };
388
- export const gradientBgImage = `radial-gradient(ellipse ${canvasWidth}px ${canvasHeight}px at ${canvasWidth / 2}px ${canvasHeight}px, var(--coral) 0%, var(--salmon) 41%, var(--lilac) 59%, var(--beige) 90%)`;
389
- const Gradient = React.memo(function Gradient() {
390
- return (_jsx("div", { className: "pointer-events-none absolute inset-0 h-full w-full opacity-100", style: {
391
- backgroundImage: gradientBgImage,
392
- } }));
393
- });
394
- const Dots = React.memo(function Dots() {
395
- return (_jsx("div", { className: "pointer-events-none absolute inset-0 h-full w-full bg-[radial-gradient(#776780_1.5px,transparent_1px)] opacity-35 [background-size:22px_22px] " }));
396
- });
397
- const Filter = React.memo(function Filter() {
398
- return (_jsx("div", { className: "contrast-60 md:bg-noise pointer-events-none absolute inset-0 hidden h-full w-full bg-none opacity-60 filter md:inline" }));
399
- });
400
388
  export default Canvas;
401
389
  //# sourceMappingURL=canvas.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../../src/components/canvas/canvas.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canvas.js","sourceRoot":"","sources":["../../../src/components/canvas/canvas.tsx"],"names":[],"mappings":"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"}
@@ -13,8 +13,10 @@ interface CanvasWrapperProps {
13
13
  introContent?: ReactNode;
14
14
  /** Custom loading text (default: "LOADING CANVAS") */
15
15
  loadingText?: string;
16
- /** Background gradient for intro screen */
16
+ /** Background gradient for intro screen (CSS gradient string) */
17
17
  introBackgroundGradient?: string;
18
+ /** Custom wrapper background component (overrides introBackgroundGradient if provided) */
19
+ wrapperBackground?: ReactNode;
18
20
  /** Canvas box gradient for blur mask */
19
21
  canvasBoxGradient?: string;
20
22
  /** Grow animation transition config */
@@ -22,5 +24,5 @@ interface CanvasWrapperProps {
22
24
  /** Blur animation transition config */
23
25
  blurTransition?: Transition;
24
26
  }
25
- export declare const CanvasWrapper: ({ children, introProgress, onIntroGrowComplete, skipIntro, introContent, loadingText, introBackgroundGradient, canvasBoxGradient, growTransition, blurTransition, }: CanvasWrapperProps) => import("react/jsx-runtime").JSX.Element;
27
+ export declare const CanvasWrapper: ({ children, introProgress, onIntroGrowComplete, skipIntro, introContent, loadingText, introBackgroundGradient, wrapperBackground, canvasBoxGradient, growTransition, blurTransition, }: CanvasWrapperProps) => import("react/jsx-runtime").JSX.Element;
26
28
  //# sourceMappingURL=wrapper.d.ts.map
@@ -1 +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;AASpE,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"}
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;AASpE,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,iEAAiE;IACjE,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,0FAA0F;IAC1F,iBAAiB,CAAC,EAAE,SAAS,CAAC;IAC9B,wCAAwC;IACxC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uCAAuC;IACvC,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B,uCAAuC;IACvC,cAAc,CAAC,EAAE,UAAU,CAAC;CAC7B;AAED,eAAO,MAAM,aAAa,GAAI,wLAY3B,kBAAkB,4CA0JpB,CAAC"}
@@ -1,15 +1,10 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { motion } from "framer-motion";
3
3
  import { useState, useEffect, useRef } from "react";
4
4
  import { MAX_DIM_RATIO, GROW_TRANSITION, BLUR_TRANSITION, INTRO_ASPECT_RATIO, } from "../../lib/constants";
5
5
  // Re-export for backward compatibility
6
6
  export { GROW_TRANSITION as growTransition } from "../../lib/constants";
7
- /**
8
- * Default intro content (Hack Western branding)
9
- * Positioned in the upper third of the screen
10
- */
11
- const DefaultIntroContent = () => (_jsxs("div", { className: "absolute left-1/2 top-24 flex -translate-x-1/2 flex-col items-center text-center", children: [_jsx(motion.img, { src: "/horse.svg", alt: "Hack Western Logo", width: 64, height: 64, className: "mb-4" }), _jsx("div", { className: "font-canvas-jetbrains-mono font-semibold text-[#543C5AB2]", children: "HACK WESTERN 12" })] }));
12
- export const CanvasWrapper = ({ children, introProgress, onIntroGrowComplete, skipIntro = false, introContent, loadingText = "LOADING CANVAS", introBackgroundGradient = "linear-gradient(to top, #FEB6AF 0%, var(--canvas-salmon) 15%, var(--canvas-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, }) => {
7
+ export const CanvasWrapper = ({ children, introProgress, onIntroGrowComplete, skipIntro = false, introContent, loadingText = "LOADING CANVAS", introBackgroundGradient = "linear-gradient(to top, #d4d4d4 0%, #e5e5e5 50%, #f5f5f5 100%)", wrapperBackground, canvasBoxGradient = "radial-gradient(130.38% 95% at 50.03% 97.25%, #d4d4d4 0%, #e5e5e5 48.09%, #f5f5f5 100%)", growTransition = GROW_TRANSITION, blurTransition = BLUR_TRANSITION, }) => {
13
8
  const [dimensions, setDimensions] = useState(null);
14
9
  const [dots, setDots] = useState("..");
15
10
  const [stage1NotFinished, setStage1NotFinished] = useState(true);
@@ -66,11 +61,12 @@ export const CanvasWrapper = ({ children, introProgress, onIntroGrowComplete, sk
66
61
  }, onContextMenu: (e) => e.preventDefault(), children: children }));
67
62
  }
68
63
  return (_jsxs(motion.div, { className: "fixed inset-0 overflow-hidden", style: {
69
- backgroundImage: stage1NotFinished ? introBackgroundGradient : undefined,
64
+ // Only use gradient style if no custom wrapperBackground is provided
65
+ backgroundImage: stage1NotFinished && !wrapperBackground ? introBackgroundGradient : undefined,
70
66
  touchAction: "none",
71
67
  userSelect: "none",
72
68
  pointerEvents: "none",
73
- }, onContextMenu: (e) => e.preventDefault(), children: [stage1NotFinished && (_jsx(_Fragment, { children: introContent !== undefined ? introContent : _jsx(DefaultIntroContent, {}) })), dimensions && (_jsxs(_Fragment, { children: [_jsx(motion.div, { initial: {
69
+ }, onContextMenu: (e) => e.preventDefault(), children: [stage1NotFinished && wrapperBackground, stage1NotFinished && (_jsx(_Fragment, { children: introContent })), dimensions && (_jsxs(_Fragment, { children: [_jsx(motion.div, { initial: {
74
70
  width: dimensions.width,
75
71
  height: dimensions.height,
76
72
  opacity: 1,
@@ -101,6 +97,6 @@ export const CanvasWrapper = ({ children, introProgress, onIntroGrowComplete, sk
101
97
  setStage1NotFinished(false);
102
98
  onIntroGrowComplete?.();
103
99
  }
104
- }, 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-canvas-jetbrains-mono font-semibold text-[#543C5AB2]", children: [loadingText, dots] }))] }));
100
+ }, 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-mono font-semibold text-neutral-500", children: [loadingText, dots] }))] }));
105
101
  };
106
102
  //# sourceMappingURL=wrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../../src/components/canvas/wrapper.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wrapper.js","sourceRoot":"","sources":["../../../src/components/canvas/wrapper.tsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,11 @@
1
- export { default as Canvas, gradientBgImage } from './components/canvas/canvas';
1
+ export { default as Canvas } from './components/canvas/canvas';
2
2
  export { CanvasComponent } from './components/canvas/component';
3
3
  export { Draggable, DraggableImage } from './components/canvas/draggable';
4
4
  export { CanvasWrapper, growTransition } from './components/canvas/wrapper';
5
5
  export { default as CanvasToolbar } from './components/canvas/toolbar';
6
6
  export { default as CanvasNavbar } from './components/canvas/navbar';
7
+ export { DefaultCanvasBackground, DefaultWrapperBackground, DefaultIntroContent, DEFAULT_CANVAS_GRADIENT, DEFAULT_INTRO_GRADIENT, DEFAULT_CANVAS_BOX_GRADIENT, } from './components/canvas/backgrounds';
8
+ export type { DefaultCanvasBackgroundProps, DefaultWrapperBackgroundProps, DefaultIntroContentProps, } from './components/canvas/backgrounds';
7
9
  export { CanvasContext, CanvasProvider, useCanvasContext } from './contexts/CanvasContext';
8
10
  export type { CanvasContextState } from './contexts/CanvasContext';
9
11
  export { PerformanceProvider, usePerformanceMode, usePerformance } from './contexts/PerformanceContext';
@@ -12,6 +14,7 @@ export { default as useWindowDimensions } from './hooks/useWindowDimensions';
12
14
  export { usePerformanceMode as usePerformanceModeLegacy } from './hooks/usePerformanceMode';
13
15
  export * from './lib/canvas';
14
16
  export * from './lib/constants';
17
+ export * from './lib/utils';
15
18
  export * from './utils/performance';
16
19
  export type { SectionCoordinates, NavItem, CanvasSection } from './types';
17
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAGrE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC3F,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACxG,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGxF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,kBAAkB,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAG5F,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AAGpC,YAAY,EAAE,kBAAkB,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAGrE,OAAO,EACH,uBAAuB,EACvB,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,GAC9B,MAAM,iCAAiC,CAAC;AACzC,YAAY,EACR,4BAA4B,EAC5B,6BAA6B,EAC7B,wBAAwB,GAC3B,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC3F,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AACxG,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGxF,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,kBAAkB,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAG5F,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AAGpC,YAAY,EAAE,kBAAkB,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -1,10 +1,12 @@
1
1
  // Components
2
- export { default as Canvas, gradientBgImage } from './components/canvas/canvas';
2
+ export { default as Canvas } from './components/canvas/canvas';
3
3
  export { CanvasComponent } from './components/canvas/component';
4
4
  export { Draggable, DraggableImage } from './components/canvas/draggable';
5
5
  export { CanvasWrapper, growTransition } from './components/canvas/wrapper';
6
6
  export { default as CanvasToolbar } from './components/canvas/toolbar';
7
7
  export { default as CanvasNavbar } from './components/canvas/navbar';
8
+ // Background Components
9
+ export { DefaultCanvasBackground, DefaultWrapperBackground, DefaultIntroContent, DEFAULT_CANVAS_GRADIENT, DEFAULT_INTRO_GRADIENT, DEFAULT_CANVAS_BOX_GRADIENT, } from './components/canvas/backgrounds';
8
10
  // Contexts
9
11
  export { CanvasContext, CanvasProvider, useCanvasContext } from './contexts/CanvasContext';
10
12
  export { PerformanceProvider, usePerformanceMode, usePerformance } from './contexts/PerformanceContext';
@@ -14,5 +16,6 @@ export { usePerformanceMode as usePerformanceModeLegacy } from './hooks/usePerfo
14
16
  // Utilities
15
17
  export * from './lib/canvas';
16
18
  export * from './lib/constants';
19
+ export * from './lib/utils';
17
20
  export * from './utils/performance';
18
21
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAErE,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE3F,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAGxG,QAAQ;AACR,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,kBAAkB,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAE5F,YAAY;AACZ,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,aAAa;AACb,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAErE,wBAAwB;AACxB,OAAO,EACH,uBAAuB,EACvB,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,2BAA2B,GAC9B,MAAM,iCAAiC,CAAC;AAOzC,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE3F,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAGxG,QAAQ;AACR,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,kBAAkB,IAAI,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAE5F,YAAY;AACZ,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type ClassValue } from "clsx";
2
+ /**
3
+ * Utility function to merge Tailwind CSS classes.
4
+ * Combines clsx for conditional classes with tailwind-merge for deduplication.
5
+ */
6
+ export declare function cn(...inputs: ClassValue[]): string;
7
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAG7C;;;GAGG;AACH,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
@@ -0,0 +1,10 @@
1
+ import { clsx } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+ /**
4
+ * Utility function to merge Tailwind CSS classes.
5
+ * Combines clsx for conditional classes with tailwind-merge for deduplication.
6
+ */
7
+ export function cn(...inputs) {
8
+ return twMerge(clsx(inputs));
9
+ }
10
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,IAAI,EAAE,MAAM,MAAM,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC;;;GAGG;AACH,MAAM,UAAU,EAAE,CAAC,GAAG,MAAoB;IACxC,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/B,CAAC"}
package/dist/styles.css CHANGED
@@ -1 +1 @@
1
- *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--canvas-beige:#f7f1e5;--canvas-coral:#ffb5a7;--canvas-lilac:#d9c8e6;--canvas-salmon:#ffa585;--canvas-heavy:#3c204c;--canvas-emphasis:#513b7a;--canvas-active:#8f57ad;--canvas-tinted:#c9a7db;--canvas-medium:#776780;--canvas-light:#c3b8cb;--canvas-faint-lilac:#f5f2f7;--canvas-offwhite:#fdfcfd;--canvas-highlight:#f5f2f7;--canvas-border-light:0 0% 89%}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.-top-10{top:-2.5rem}.bottom-12{bottom:3rem}.bottom-24{bottom:6rem}.left-1\/2{left:50%}.left-4{left:1rem}.top-1\/2{top:50%}.top-24{top:6rem}.top-6{top:1.5rem}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.z-\[1000\]{z-index:1000}.m-auto{margin:auto}.mb-4{margin-bottom:1rem}.block{display:block}.flex{display:flex}.hidden{display:none}.h-5{height:1.25rem}.h-auto{height:auto}.h-full{height:100%}.w-5{width:1.25rem}.w-full{width:100%}.flex-shrink-0{flex-shrink:0}.grow{flex-grow:1}.origin-center{transform-origin:center}.origin-top-left{transform-origin:top left}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.overflow-hidden{overflow:hidden}.whitespace-nowrap{white-space:nowrap}.rounded-\[10px\]{border-radius:10px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.border,.border-\[1px\]{border-width:1px}.border-border{border-color:hsl(var(--border))}.bg-\[\#EEE2FB\]{--tw-bg-opacity:1;background-color:rgb(238 226 251/var(--tw-bg-opacity,1))}.bg-canvas-highlight{background-color:var(--canvas-highlight)}.bg-canvas-offwhite{background-color:var(--canvas-offwhite)}.bg-\[radial-gradient\(\#776780_1\.5px\2c transparent_1px\)\]{background-image:radial-gradient(#776780 1.5px,transparent 0)}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-black\/10{--tw-gradient-from:rgba(0,0,0,.1) var(--tw-gradient-from-position);--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.object-contain{-o-object-fit:contain;object-fit:contain}.p-1{padding:.25rem}.p-2{padding:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-\[1px\]{padding-left:1px;padding-right:1px}.py-1{padding-top:.25rem;padding-bottom:.25rem}.pb-\[2\.5px\]{padding-bottom:2.5px}.pt-\[1px\]{padding-top:1px}.text-center{text-align:center}.font-canvas-figtree{font-family:var(--font-figtree)}.font-canvas-jetbrains-mono{font-family:var(--font-jetbrainsmono)}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.text-\[\#543C5AB2\]{color:#543c5ab2}.text-canvas-emphasis{color:var(--canvas-emphasis)}.text-canvas-heavy{color:var(--canvas-heavy)}.text-canvas-light{color:var(--canvas-light)}.text-canvas-medium{color:var(--canvas-medium)}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.opacity-100{opacity:1}.opacity-35{opacity:.35}.opacity-60{opacity:.6}.shadow-\[0_20px_40px_rgba\(103\2c 86\2c 86\2c 0\.15\)\]{--tw-shadow:0 20px 40px hsla(0,9%,37%,.15);--tw-shadow-colored:0 20px 40px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_6px_12px_rgba\(0\2c 0\2c 0\2c 0\.10\)\]{--tw-shadow:0 6px 12px rgba(0,0,0,.1);--tw-shadow-colored:0 6px 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.blur{--tw-blur:blur(8px)}.blur,.drop-shadow{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px rgba(0,0,0,.1)) drop-shadow(0 1px 1px rgba(0,0,0,.06))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.duration-200{animation-duration:.2s}.running{animation-play-state:running}.\[background-size\:22px_22px\]{background-size:22px 22px}@media (min-width:640px){.sm\:top-4{top:1rem}}@media (min-width:768px){.md\:bottom-4{bottom:1rem}.md\:inline{display:inline}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}
1
+ *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--canvas-beige:#f7f1e5;--canvas-coral:#ffb5a7;--canvas-lilac:#d9c8e6;--canvas-salmon:#ffa585;--canvas-heavy:#3c204c;--canvas-emphasis:#513b7a;--canvas-active:#8f57ad;--canvas-tinted:#c9a7db;--canvas-medium:#776780;--canvas-light:#c3b8cb;--canvas-faint-lilac:#f5f2f7;--canvas-offwhite:#fdfcfd;--canvas-highlight:#f5f2f7;--canvas-border-light:0 0% 89%}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:2rem;padding-left:2rem}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1600px){.container{max-width:1600px}}@media (min-width:2000px){.container{max-width:2000px}}@media (min-width:3000px){.container{max-width:3000px}}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.invisible{visibility:hidden}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.-top-10{top:-2.5rem}.bottom-12{bottom:3rem}.bottom-24{bottom:6rem}.left-1\/2{left:50%}.left-4{left:1rem}.top-1\/2{top:50%}.top-24{top:6rem}.top-6{top:1.5rem}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.z-\[1000\]{z-index:1000}.m-auto{margin:auto}.mb-4{margin-bottom:1rem}.block{display:block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.h-5{height:1.25rem}.h-auto{height:auto}.h-full{height:100%}.w-5{width:1.25rem}.w-full{width:100%}.flex-shrink-0{flex-shrink:0}.grow{flex-grow:1}.origin-center{transform-origin:center}.origin-top-left{transform-origin:top left}.-translate-x-1\/2{--tw-translate-x:-50%}.-translate-x-1\/2,.-translate-y-1\/2{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.-translate-y-1\/2{--tw-translate-y:-50%}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.cursor-default{cursor:default}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.overflow-hidden{overflow:hidden}.whitespace-nowrap{white-space:nowrap}.rounded-\[10px\]{border-radius:10px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.border,.border-\[1px\]{border-width:1px}.border-border{border-color:hsl(var(--border))}.bg-\[\#EEE2FB\]{--tw-bg-opacity:1;background-color:rgb(238 226 251/var(--tw-bg-opacity,1))}.bg-canvas-highlight{background-color:var(--canvas-highlight)}.bg-canvas-offwhite{background-color:var(--canvas-offwhite)}.bg-gradient-to-t{background-image:linear-gradient(to top,var(--tw-gradient-stops))}.bg-none{background-image:none}.from-black\/10{--tw-gradient-from:rgba(0,0,0,.1) var(--tw-gradient-from-position);--tw-gradient-to:transparent var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-transparent{--tw-gradient-to:transparent var(--tw-gradient-to-position)}.object-contain{-o-object-fit:contain;object-fit:contain}.p-1{padding:.25rem}.p-2{padding:.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-\[1px\]{padding-left:1px;padding-right:1px}.py-1{padding-top:.25rem;padding-bottom:.25rem}.pb-\[2\.5px\]{padding-bottom:2.5px}.pt-\[1px\]{padding-top:1px}.text-center{text-align:center}.font-canvas-figtree{font-family:var(--font-figtree)}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.text-canvas-emphasis{color:var(--canvas-emphasis)}.text-canvas-heavy{color:var(--canvas-heavy)}.text-canvas-light{color:var(--canvas-light)}.text-canvas-medium{color:var(--canvas-medium)}.text-neutral-500{--tw-text-opacity:1;color:rgb(115 115 115/var(--tw-text-opacity,1))}.text-neutral-600{--tw-text-opacity:1;color:rgb(82 82 82/var(--tw-text-opacity,1))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.shadow-\[0_20px_40px_rgba\(103\2c 86\2c 86\2c 0\.15\)\]{--tw-shadow:0 20px 40px hsla(0,9%,37%,.15);--tw-shadow-colored:0 20px 40px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_6px_12px_rgba\(0\2c 0\2c 0\2c 0\.10\)\]{--tw-shadow:0 6px 12px rgba(0,0,0,.1);--tw-shadow-colored:0 6px 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.blur{--tw-blur:blur(8px)}.blur,.drop-shadow{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow{--tw-drop-shadow:drop-shadow(0 1px 2px rgba(0,0,0,.1)) drop-shadow(0 1px 1px rgba(0,0,0,.06))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-200{transition-duration:.2s}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}.duration-200{animation-duration:.2s}.running{animation-play-state:running}@media (min-width:640px){.sm\:top-4{top:1rem}}@media (min-width:768px){.md\:bottom-4{bottom:1rem}.md\:inline{display:inline}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hunterchen/canvas",
3
- "version": "0.3.1",
3
+ "version": "0.4.1",
4
4
  "description": "A React-based canvas library for creating pannable, zoomable, and interactive canvas experiences.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -50,7 +50,9 @@
50
50
  "react-dom": "^18.0.0 || ^19.0.0"
51
51
  },
52
52
  "dependencies": {
53
- "lucide-react": "^0.483.0"
53
+ "clsx": "^2.1.1",
54
+ "lucide-react": "^0.483.0",
55
+ "tailwind-merge": "^3.4.0"
54
56
  },
55
57
  "devDependencies": {
56
58
  "@types/node": "^25.0.6",
@@ -60,4 +62,4 @@
60
62
  "tailwindcss-animate": "^1.0.7",
61
63
  "typescript": "^5.8.2"
62
64
  }
63
- }
65
+ }
@@ -0,0 +1,205 @@
1
+ import React, { type ReactNode } from "react";
2
+ import { motion } from "framer-motion";
3
+ import { canvasWidth, canvasHeight } from "../../lib/canvas";
4
+ import { cn } from "../../lib/utils";
5
+
6
+ // ============== Canvas Background ==============
7
+
8
+ export interface DefaultCanvasBackgroundProps {
9
+ /** Custom gradient CSS string. If not provided, uses the default radial gradient. */
10
+ gradientStyle?: string;
11
+ /** Whether to show the dot pattern. Default: true */
12
+ showDots?: boolean;
13
+ /** Dot pattern color. Default: #888888 */
14
+ dotColor?: string;
15
+ /** Dot pattern size in pixels. Default: 1.5 */
16
+ dotSize?: number;
17
+ /** Dot pattern spacing in pixels. Default: 22 */
18
+ dotSpacing?: number;
19
+ /** Dot pattern opacity (0-1). Default: 0.35 */
20
+ dotOpacity?: number;
21
+ /** Whether to show the noise filter. Default: true */
22
+ showFilter?: boolean;
23
+ /** Filter opacity (0-1). Default: 0.6 */
24
+ filterOpacity?: number;
25
+ /** Additional className for the gradient layer */
26
+ gradientClassName?: string;
27
+ /** Additional className for the dots layer */
28
+ dotsClassName?: string;
29
+ /** Additional className for the filter layer */
30
+ filterClassName?: string;
31
+ /** Additional children to render in the background */
32
+ children?: ReactNode;
33
+ }
34
+
35
+ /** The default canvas gradient (neutral gray) */
36
+ export const DEFAULT_CANVAS_GRADIENT = `radial-gradient(ellipse ${canvasWidth}px ${canvasHeight}px at ${canvasWidth / 2}px ${canvasHeight}px, #e5e5e5 0%, #d4d4d4 41%, #a3a3a3 59%, #f5f5f5 90%)`;
37
+
38
+ /**
39
+ * Default canvas background with gradient, dots, and noise filter.
40
+ * All aspects are customizable via props.
41
+ */
42
+ export const DefaultCanvasBackground: React.FC<DefaultCanvasBackgroundProps> = ({
43
+ gradientStyle,
44
+ showDots = true,
45
+ dotColor = "#888888",
46
+ dotSize = 1.5,
47
+ dotSpacing = 22,
48
+ dotOpacity = 0.35,
49
+ showFilter = true,
50
+ filterOpacity = 0.6,
51
+ gradientClassName,
52
+ dotsClassName,
53
+ filterClassName,
54
+ children,
55
+ }) => {
56
+ const gradientImage = gradientStyle ?? DEFAULT_CANVAS_GRADIENT;
57
+
58
+ return (
59
+ <>
60
+ {/* Gradient layer */}
61
+ <div
62
+ className={cn(
63
+ "pointer-events-none absolute inset-0 h-full w-full",
64
+ gradientClassName
65
+ )}
66
+ style={{
67
+ backgroundImage: gradientImage,
68
+ }}
69
+ />
70
+
71
+ {/* Dots layer */}
72
+ {showDots && (
73
+ <div
74
+ className={cn(
75
+ "pointer-events-none absolute inset-0 h-full w-full",
76
+ dotsClassName
77
+ )}
78
+ style={{
79
+ backgroundImage: `radial-gradient(${dotColor} ${dotSize}px, transparent ${dotSize}px)`,
80
+ backgroundSize: `${dotSpacing}px ${dotSpacing}px`,
81
+ opacity: dotOpacity,
82
+ }}
83
+ />
84
+ )}
85
+
86
+ {/* Filter/noise layer */}
87
+ {showFilter && (
88
+ <div
89
+ className={cn(
90
+ "pointer-events-none absolute inset-0 hidden h-full w-full bg-none filter md:inline md:bg-noise",
91
+ filterClassName
92
+ )}
93
+ style={{
94
+ opacity: filterOpacity,
95
+ filter: "contrast(0.6)",
96
+ }}
97
+ />
98
+ )}
99
+
100
+ {children}
101
+ </>
102
+ );
103
+ };
104
+
105
+ // ============== Wrapper/Intro Background ==============
106
+
107
+ export interface DefaultWrapperBackgroundProps {
108
+ /** Background gradient for the intro screen */
109
+ gradient?: string;
110
+ /** Additional className */
111
+ className?: string;
112
+ /** Additional inline styles */
113
+ style?: React.CSSProperties;
114
+ }
115
+
116
+ /**
117
+ * Default wrapper/intro background gradient.
118
+ */
119
+ export const DefaultWrapperBackground: React.FC<DefaultWrapperBackgroundProps> = ({
120
+ gradient = "linear-gradient(to top, #d4d4d4 0%, #e5e5e5 50%, #f5f5f5 100%)",
121
+ className,
122
+ style,
123
+ }) => {
124
+ return (
125
+ <div
126
+ className={cn("absolute inset-0 h-full w-full", className)}
127
+ style={{
128
+ backgroundImage: gradient,
129
+ ...style,
130
+ }}
131
+ />
132
+ );
133
+ };
134
+
135
+ export interface DefaultIntroContentProps {
136
+ /** Logo image source */
137
+ logoSrc?: string;
138
+ /** Logo alt text */
139
+ logoAlt?: string;
140
+ /** Logo width */
141
+ logoWidth?: number;
142
+ /** Logo height */
143
+ logoHeight?: number;
144
+ /** Title text */
145
+ title?: string;
146
+ /** Additional className for the container */
147
+ className?: string;
148
+ /** Additional className for the title */
149
+ titleClassName?: string;
150
+ }
151
+
152
+ /**
153
+ * Default intro content shown during loading.
154
+ * Can be customized or replaced entirely.
155
+ */
156
+ export const DefaultIntroContent: React.FC<DefaultIntroContentProps> = ({
157
+ logoSrc,
158
+ logoAlt = "Logo",
159
+ logoWidth = 64,
160
+ logoHeight = 64,
161
+ title,
162
+ className,
163
+ titleClassName,
164
+ }) => {
165
+ // If no logo or title provided, render nothing
166
+ if (!logoSrc && !title) {
167
+ return null;
168
+ }
169
+
170
+ return (
171
+ <div
172
+ className={cn(
173
+ "absolute left-1/2 top-24 flex -translate-x-1/2 flex-col items-center text-center",
174
+ className
175
+ )}
176
+ >
177
+ {logoSrc && (
178
+ <motion.img
179
+ src={logoSrc}
180
+ alt={logoAlt}
181
+ width={logoWidth}
182
+ height={logoHeight}
183
+ className="mb-4"
184
+ />
185
+ )}
186
+ {title && (
187
+ <div
188
+ className={cn(
189
+ "font-sans font-semibold text-neutral-600",
190
+ titleClassName
191
+ )}
192
+ >
193
+ {title}
194
+ </div>
195
+ )}
196
+ </div>
197
+ );
198
+ };
199
+
200
+ // Default gradient values for export (neutral grays)
201
+ export const DEFAULT_INTRO_GRADIENT =
202
+ "linear-gradient(to top, #d4d4d4 0%, #e5e5e5 50%, #f5f5f5 100%)";
203
+
204
+ export const DEFAULT_CANVAS_BOX_GRADIENT =
205
+ "radial-gradient(130.38% 95% at 50.03% 97.25%, #d4d4d4 0%, #e5e5e5 48.09%, #f5f5f5 100%)";
@@ -43,6 +43,7 @@ import type { CanvasSection, NavItem, SectionCoordinates } from "../../types";
43
43
  import { CanvasWrapper } from "./wrapper";
44
44
  import { usePerformanceMode } from "../../hooks/usePerformanceMode";
45
45
  import type { ReactNode } from "react";
46
+ import { DefaultCanvasBackground } from "./backgrounds";
46
47
 
47
48
  interface Props {
48
49
  homeCoordinates: SectionCoordinates;
@@ -67,6 +68,12 @@ interface Props {
67
68
  growTransition?: Transition;
68
69
  /** Custom blur transition */
69
70
  blurTransition?: Transition;
71
+
72
+ // ============== Background Customization ==============
73
+ /** Custom canvas background. If not provided, uses DefaultCanvasBackground. */
74
+ canvasBackground?: ReactNode;
75
+ /** Custom wrapper/intro background. If not provided, uses introBackgroundGradient. */
76
+ wrapperBackground?: ReactNode;
70
77
  }
71
78
 
72
79
  const stopAllMotion = (
@@ -90,6 +97,8 @@ const Canvas: FC<Props> = ({
90
97
  canvasBoxGradient,
91
98
  growTransition,
92
99
  blurTransition,
100
+ canvasBackground,
101
+ wrapperBackground,
93
102
  }) => {
94
103
  const { height: windowHeight, width: windowWidth } = useWindowDimensions();
95
104
 
@@ -593,6 +602,7 @@ const Canvas: FC<Props> = ({
593
602
  introContent={introContent}
594
603
  loadingText={loadingText}
595
604
  introBackgroundGradient={introBackgroundGradient}
605
+ wrapperBackground={wrapperBackground}
596
606
  canvasBoxGradient={canvasBoxGradient}
597
607
  growTransition={growTransition}
598
608
  blurTransition={blurTransition}
@@ -652,23 +662,24 @@ const Canvas: FC<Props> = ({
652
662
  : "auto",
653
663
  }}
654
664
  >
655
- <Gradient />
656
- {animationStage >= 1 &&
657
- (mode === "high" ? (
658
- <motion.div
659
- initial={{ opacity: 0 }}
660
- animate={{ opacity: 1 }}
661
- transition={{ duration: 0.5, ease: "easeIn" }}
662
- >
663
- <Filter />
664
- <Dots />
665
- </motion.div>
666
- ) : (
667
- <>
668
- <Filter />
669
- <Dots />
670
- </>
671
- ))}
665
+ {/* Canvas Background - customizable or default */}
666
+ {canvasBackground !== undefined ? (
667
+ canvasBackground
668
+ ) : (
669
+ <>
670
+ {animationStage >= 1 && mode === "high" ? (
671
+ <motion.div
672
+ initial={{ opacity: 0 }}
673
+ animate={{ opacity: 1 }}
674
+ transition={{ duration: 0.5, ease: "easeIn" }}
675
+ >
676
+ <DefaultCanvasBackground />
677
+ </motion.div>
678
+ ) : (
679
+ <DefaultCanvasBackground />
680
+ )}
681
+ </>
682
+ )}
672
683
  {children}
673
684
  </motion.div>
674
685
  </div>
@@ -677,29 +688,4 @@ const Canvas: FC<Props> = ({
677
688
  );
678
689
  };
679
690
 
680
- export const gradientBgImage = `radial-gradient(ellipse ${canvasWidth}px ${canvasHeight}px at ${canvasWidth / 2}px ${canvasHeight}px, var(--coral) 0%, var(--salmon) 41%, var(--lilac) 59%, var(--beige) 90%)`;
681
-
682
- const Gradient = React.memo(function Gradient() {
683
- return (
684
- <div
685
- className="pointer-events-none absolute inset-0 h-full w-full opacity-100"
686
- style={{
687
- backgroundImage: gradientBgImage,
688
- }}
689
- />
690
- );
691
- });
692
-
693
- const Dots = React.memo(function Dots() {
694
- return (
695
- <div className="pointer-events-none absolute inset-0 h-full w-full bg-[radial-gradient(#776780_1.5px,transparent_1px)] opacity-35 [background-size:22px_22px] " />
696
- );
697
- });
698
-
699
- const Filter = React.memo(function Filter() {
700
- return (
701
- <div className="contrast-60 md:bg-noise pointer-events-none absolute inset-0 hidden h-full w-full bg-none opacity-60 filter md:inline" />
702
- );
703
- });
704
-
705
691
  export default Canvas;
@@ -24,8 +24,10 @@ interface CanvasWrapperProps {
24
24
  introContent?: ReactNode;
25
25
  /** Custom loading text (default: "LOADING CANVAS") */
26
26
  loadingText?: string;
27
- /** Background gradient for intro screen */
27
+ /** Background gradient for intro screen (CSS gradient string) */
28
28
  introBackgroundGradient?: string;
29
+ /** Custom wrapper background component (overrides introBackgroundGradient if provided) */
30
+ wrapperBackground?: ReactNode;
29
31
  /** Canvas box gradient for blur mask */
30
32
  canvasBoxGradient?: string;
31
33
  /** Grow animation transition config */
@@ -34,25 +36,6 @@ interface CanvasWrapperProps {
34
36
  blurTransition?: Transition;
35
37
  }
36
38
 
37
- /**
38
- * Default intro content (Hack Western branding)
39
- * Positioned in the upper third of the screen
40
- */
41
- const DefaultIntroContent = () => (
42
- <div className="absolute left-1/2 top-24 flex -translate-x-1/2 flex-col items-center text-center">
43
- <motion.img
44
- src="/horse.svg"
45
- alt="Hack Western Logo"
46
- width={64}
47
- height={64}
48
- className="mb-4"
49
- />
50
- <div className="font-canvas-jetbrains-mono font-semibold text-[#543C5AB2]">
51
- HACK WESTERN 12
52
- </div>
53
- </div>
54
- );
55
-
56
39
  export const CanvasWrapper = ({
57
40
  children,
58
41
  introProgress,
@@ -60,8 +43,9 @@ export const CanvasWrapper = ({
60
43
  skipIntro = false,
61
44
  introContent,
62
45
  loadingText = "LOADING CANVAS",
63
- introBackgroundGradient = "linear-gradient(to top, #FEB6AF 0%, var(--canvas-salmon) 15%, var(--canvas-beige) 50%)",
64
- canvasBoxGradient = "radial-gradient(130.38% 95% at 50.03% 97.25%, #EFB8A0 0%, #EAD2DF 48.09%, #EFE3E1 100%)",
46
+ introBackgroundGradient = "linear-gradient(to top, #d4d4d4 0%, #e5e5e5 50%, #f5f5f5 100%)",
47
+ wrapperBackground,
48
+ canvasBoxGradient = "radial-gradient(130.38% 95% at 50.03% 97.25%, #d4d4d4 0%, #e5e5e5 48.09%, #f5f5f5 100%)",
65
49
  growTransition = GROW_TRANSITION,
66
50
  blurTransition = BLUR_TRANSITION,
67
51
  }: CanvasWrapperProps) => {
@@ -141,17 +125,20 @@ export const CanvasWrapper = ({
141
125
  <motion.div
142
126
  className="fixed inset-0 overflow-hidden"
143
127
  style={{
144
- backgroundImage: stage1NotFinished ? introBackgroundGradient : undefined,
128
+ // Only use gradient style if no custom wrapperBackground is provided
129
+ backgroundImage: stage1NotFinished && !wrapperBackground ? introBackgroundGradient : undefined,
145
130
  touchAction: "none",
146
131
  userSelect: "none",
147
132
  pointerEvents: "none",
148
133
  }}
149
134
  onContextMenu={(e) => e.preventDefault()}
150
135
  >
136
+ {/* Custom wrapper background (renders behind everything) */}
137
+ {stage1NotFinished && wrapperBackground}
138
+
151
139
  {stage1NotFinished && (
152
140
  <>
153
- {/* Render custom intro content or default */}
154
- {introContent !== undefined ? introContent : <DefaultIntroContent />}
141
+ {introContent}
155
142
  </>
156
143
  )}
157
144
 
@@ -209,7 +196,7 @@ export const CanvasWrapper = ({
209
196
  </>
210
197
  )}
211
198
  {stage1NotFinished && loadingText && (
212
- <div className="absolute bottom-24 left-1/2 -translate-x-1/2 text-center font-canvas-jetbrains-mono font-semibold text-[#543C5AB2]">
199
+ <div className="absolute bottom-24 left-1/2 -translate-x-1/2 text-center font-mono font-semibold text-neutral-500">
213
200
  {loadingText}{dots}
214
201
  </div>
215
202
  )}
package/src/index.ts CHANGED
@@ -1,11 +1,26 @@
1
1
  // Components
2
- export { default as Canvas, gradientBgImage } from './components/canvas/canvas';
2
+ export { default as Canvas } from './components/canvas/canvas';
3
3
  export { CanvasComponent } from './components/canvas/component';
4
4
  export { Draggable, DraggableImage } from './components/canvas/draggable';
5
5
  export { CanvasWrapper, growTransition } from './components/canvas/wrapper';
6
6
  export { default as CanvasToolbar } from './components/canvas/toolbar';
7
7
  export { default as CanvasNavbar } from './components/canvas/navbar';
8
8
 
9
+ // Background Components
10
+ export {
11
+ DefaultCanvasBackground,
12
+ DefaultWrapperBackground,
13
+ DefaultIntroContent,
14
+ DEFAULT_CANVAS_GRADIENT,
15
+ DEFAULT_INTRO_GRADIENT,
16
+ DEFAULT_CANVAS_BOX_GRADIENT,
17
+ } from './components/canvas/backgrounds';
18
+ export type {
19
+ DefaultCanvasBackgroundProps,
20
+ DefaultWrapperBackgroundProps,
21
+ DefaultIntroContentProps,
22
+ } from './components/canvas/backgrounds';
23
+
9
24
  // Contexts
10
25
  export { CanvasContext, CanvasProvider, useCanvasContext } from './contexts/CanvasContext';
11
26
  export type { CanvasContextState } from './contexts/CanvasContext';
@@ -19,6 +34,7 @@ export { usePerformanceMode as usePerformanceModeLegacy } from './hooks/usePerfo
19
34
  // Utilities
20
35
  export * from './lib/canvas';
21
36
  export * from './lib/constants';
37
+ export * from './lib/utils';
22
38
  export * from './utils/performance';
23
39
 
24
40
  // Types
@@ -0,0 +1,10 @@
1
+ import { type ClassValue, clsx } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+
4
+ /**
5
+ * Utility function to merge Tailwind CSS classes.
6
+ * Combines clsx for conditional classes with tailwind-merge for deduplication.
7
+ */
8
+ export function cn(...inputs: ClassValue[]) {
9
+ return twMerge(clsx(inputs));
10
+ }