@kadal/deck 0.0.0-stage → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/LICENSING.md +40 -0
- package/README.md +170 -2
- package/dist/_virtual/_rolldown/runtime.js +13 -0
- package/dist/audience/index.d.ts +14 -0
- package/dist/audience/index.js +680 -0
- package/dist/backgrounds/index.d.ts +65 -0
- package/dist/backgrounds/index.js +604 -0
- package/dist/backgrounds/shared.d.ts +7 -0
- package/dist/backgrounds/shared.js +89 -0
- package/dist/cli/bin.d.ts +1 -0
- package/dist/cli/bin.js +8 -0
- package/dist/cli/host.js +111 -0
- package/dist/cli/index.d.ts +4 -0
- package/dist/cli/index.js +140 -0
- package/dist/cli/login.js +56 -0
- package/dist/cli/publish.js +159 -0
- package/dist/cli/vite.js +39 -0
- package/dist/compiler/code-meta.d.ts +33 -0
- package/dist/compiler/code-meta.js +81 -0
- package/dist/compiler/index.d.ts +8 -0
- package/dist/compiler/index.js +8 -0
- package/dist/compiler/magic-move.d.ts +26 -0
- package/dist/compiler/magic-move.js +33 -0
- package/dist/compiler/plain-text.js +7 -0
- package/dist/compiler/rehype-code.d.ts +18 -0
- package/dist/compiler/rehype-code.js +66 -0
- package/dist/compiler/rehype-glossary.d.ts +35 -0
- package/dist/compiler/rehype-glossary.js +211 -0
- package/dist/compiler/slots.d.ts +3 -0
- package/dist/compiler/slots.js +36 -0
- package/dist/compiler/split.d.ts +63 -0
- package/dist/compiler/split.js +195 -0
- package/dist/components/Background.d.ts +15 -0
- package/dist/components/Background.js +24 -0
- package/dist/components/Click.d.ts +54 -0
- package/dist/components/Click.js +129 -0
- package/dist/components/Code.d.ts +27 -0
- package/dist/components/Code.js +124 -0
- package/dist/components/Motion.d.ts +25 -0
- package/dist/components/Motion.js +45 -0
- package/dist/components/Sketch.d.ts +44 -0
- package/dist/components/Sketch.js +141 -0
- package/dist/components/Term.d.ts +63 -0
- package/dist/components/Term.js +492 -0
- package/dist/components/bling.d.ts +75 -0
- package/dist/components/bling.js +146 -0
- package/dist/components/content.d.ts +232 -0
- package/dist/components/content.js +637 -0
- package/dist/components/index.d.ts +10 -0
- package/dist/components/index.js +88 -0
- package/dist/core/clicks.d.ts +45 -0
- package/dist/core/clicks.js +75 -0
- package/dist/core/hash.d.ts +33 -0
- package/dist/core/hash.js +49 -0
- package/dist/core/keyboard.d.ts +17 -0
- package/dist/core/keyboard.js +198 -0
- package/dist/core/layout.d.ts +16 -0
- package/dist/core/layout.js +25 -0
- package/dist/core/model.d.ts +259 -0
- package/dist/core/model.js +377 -0
- package/dist/core/navigation.d.ts +74 -0
- package/dist/core/navigation.js +244 -0
- package/dist/core/poster.js +30 -0
- package/dist/core/store.d.ts +20 -0
- package/dist/core/store.js +64 -0
- package/dist/core/touch.js +27 -0
- package/dist/draw/DrawingLayer.js +315 -0
- package/dist/draw/strokes.js +188 -0
- package/dist/export/index.d.ts +68 -0
- package/dist/export/index.js +251 -0
- package/dist/export/run.js +81 -0
- package/dist/glossary/model.d.ts +81 -0
- package/dist/glossary/model.js +156 -0
- package/dist/glossary/parse.d.ts +27 -0
- package/dist/glossary/parse.js +90 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.js +30 -0
- package/dist/live/LiveProvider.d.ts +20 -0
- package/dist/live/LiveProvider.js +450 -0
- package/dist/live/analytics.d.ts +15 -0
- package/dist/live/analytics.js +103 -0
- package/dist/live/client.d.ts +51 -0
- package/dist/live/client.js +193 -0
- package/dist/live/components.d.ts +64 -0
- package/dist/live/components.js +471 -0
- package/dist/live/context.d.ts +15 -0
- package/dist/live/context.js +28 -0
- package/dist/live/index.d.ts +7 -0
- package/dist/live/index.js +7 -0
- package/dist/live/protocol.d.ts +284 -0
- package/dist/live/protocol.js +42 -0
- package/dist/live/turnstile.js +49 -0
- package/dist/presenter/index.d.ts +20 -0
- package/dist/presenter/index.js +1211 -0
- package/dist/react/AutoAnimate.js +92 -0
- package/dist/react/Backgrounds.d.ts +11 -0
- package/dist/react/Backgrounds.js +154 -0
- package/dist/react/ConfettiLayer.js +85 -0
- package/dist/react/Deck.d.ts +35 -0
- package/dist/react/Deck.js +983 -0
- package/dist/react/Frame.d.ts +16 -0
- package/dist/react/Frame.js +174 -0
- package/dist/react/Hints.d.ts +3 -0
- package/dist/react/Hints.js +201 -0
- package/dist/react/Lightbox.js +54 -0
- package/dist/react/Overview.js +93 -0
- package/dist/react/PrintView.js +128 -0
- package/dist/react/ScrollView.js +128 -0
- package/dist/react/SlideFrame.d.ts +51 -0
- package/dist/react/SlideFrame.js +323 -0
- package/dist/react/Stage.js +151 -0
- package/dist/react/ThemeMenu.d.ts +5 -0
- package/dist/react/ThemeMenu.js +124 -0
- package/dist/react/Zoom.js +23 -0
- package/dist/react/chrome.js +339 -0
- package/dist/react/context.d.ts +165 -0
- package/dist/react/context.js +19 -0
- package/dist/react/hooks.d.ts +33 -0
- package/dist/react/hooks.js +70 -0
- package/dist/react/layouts.d.ts +21 -0
- package/dist/react/layouts.js +104 -0
- package/dist/react/mdx.d.ts +4 -0
- package/dist/react/mdx.js +33 -0
- package/dist/react/terms.d.ts +6 -0
- package/dist/react/terms.js +66 -0
- package/dist/renderers/Island.d.ts +57 -0
- package/dist/renderers/Island.js +223 -0
- package/dist/renderers/contract.d.ts +173 -0
- package/dist/renderers/contract.js +152 -0
- package/dist/renderers/index.d.ts +12 -0
- package/dist/renderers/index.js +16 -0
- package/dist/renderers/react.d.ts +16 -0
- package/dist/renderers/react.js +32 -0
- package/dist/renderers/web-components.d.ts +4 -0
- package/dist/renderers/web-components.js +103 -0
- package/dist/sketch/Canvas.js +49 -0
- package/dist/sketch/dsl.d.ts +131 -0
- package/dist/sketch/dsl.js +281 -0
- package/dist/sketch/index.d.ts +4 -0
- package/dist/sketch/index.js +3 -0
- package/dist/sketch/palette.d.ts +21 -0
- package/dist/sketch/palette.js +66 -0
- package/dist/sketch/render.d.ts +43 -0
- package/dist/sketch/render.js +198 -0
- package/dist/themes/base.css +1704 -0
- package/dist/themes/bling.css +592 -0
- package/dist/themes/glossary.css +317 -0
- package/dist/themes/live.css +1557 -0
- package/dist/themes/minimal.css +83 -0
- package/dist/themes/rla.css +92 -0
- package/dist/themes/sketch.css +121 -0
- package/dist/themes/stack.css +62 -0
- package/dist/vite/index.d.ts +15 -0
- package/dist/vite/index.js +320 -0
- package/package.json +159 -4
- package/tools/verify-island.mjs +150 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { BgProps } from "./shared.js";
|
|
2
|
+
//#region src/backgrounds/index.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
5
|
+
* BACKGROUNDS
|
|
6
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
7
|
+
*
|
|
8
|
+
* Component backgrounds a slide picks by name — `background: aurora` in frontmatter, or
|
|
9
|
+
* `<Background name="sparkles" />` inside a slide — and a couple of text effects. They are the
|
|
10
|
+
* RLA deck's Aceternity-style layers rebuilt without dependencies: canvas where motion needs it,
|
|
11
|
+
* CSS where it does not. Every one takes `active` (whether its slide is showing) and pauses when
|
|
12
|
+
* it is not, so a deck full of them stays cheap.
|
|
13
|
+
*
|
|
14
|
+
* gradient-mesh slow drifting blurred blobs (colors, speed)
|
|
15
|
+
* aurora soft northern-lights bands (colors, speed)
|
|
16
|
+
* waves layered noise waves (colors, speed, blur)
|
|
17
|
+
* lines flowing gradient lines (colors, count, speed)
|
|
18
|
+
* beams thin light beams falling (color, count)
|
|
19
|
+
* sparkles a particle field (color, density, size)
|
|
20
|
+
* starfield stars with slow drift (color, count)
|
|
21
|
+
* grid a fine grid with a vignette (color, size)
|
|
22
|
+
* dots a dot matrix (color, size)
|
|
23
|
+
* noise film grain (opacity)
|
|
24
|
+
* spotlight a soft radial glow (color, x, y)
|
|
25
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
26
|
+
*/
|
|
27
|
+
export declare function GradientMesh({ active, colors, speed }: BgProps): import("react").JSX.Element;
|
|
28
|
+
export declare function Aurora({ active, colors, speed }: BgProps): import("react").JSX.Element;
|
|
29
|
+
export declare function Waves({ active, colors, speed, blur }: BgProps): import("react").JSX.Element;
|
|
30
|
+
export declare function Lines({ active, colors, count, speed }: BgProps): import("react").JSX.Element;
|
|
31
|
+
export declare function Beams({ active, color, count }: BgProps): import("react").JSX.Element;
|
|
32
|
+
export declare function Sparkles({ active, color, density, size }: BgProps): import("react").JSX.Element;
|
|
33
|
+
export declare function Starfield({ active, color, count }: BgProps): import("react").JSX.Element;
|
|
34
|
+
export declare function GridBg({ color, size }: BgProps): import("react").JSX.Element;
|
|
35
|
+
export declare function DotsBg({ color, size }: BgProps): import("react").JSX.Element;
|
|
36
|
+
export declare function NoiseBg({ opacity }: BgProps): import("react").JSX.Element;
|
|
37
|
+
export declare function SpotlightBg({ color, x, y }: BgProps): import("react").JSX.Element;
|
|
38
|
+
/** A split-flap departure board that flips to its text — the RLA deck's `TextFlippingBoard`. */
|
|
39
|
+
export declare function FlipBoard({ text, rows, cols, className, flipDuration, stagger }: {
|
|
40
|
+
text: string;
|
|
41
|
+
rows?: number;
|
|
42
|
+
cols?: number;
|
|
43
|
+
className?: string;
|
|
44
|
+
flipDuration?: number;
|
|
45
|
+
stagger?: number;
|
|
46
|
+
}): import("react").JSX.Element;
|
|
47
|
+
/** Contour lines from a noise field — the map-sheet look. */
|
|
48
|
+
export declare function Topo({ active, color, levels, speed, spacing, width, index }: BgProps): import("react").JSX.Element;
|
|
49
|
+
/** A few large soft lights drifting — like mesh, but sparser and calmer. */
|
|
50
|
+
export declare function Glows({ active, colors, opacity, speed }: BgProps): import("react").JSX.Element;
|
|
51
|
+
/** A graticule: fine grid with major lines every n cells and ticks — the map-projection look. */
|
|
52
|
+
export declare function Graticule({ color, size, major }: BgProps): import("react").JSX.Element;
|
|
53
|
+
/** A honeycomb. */
|
|
54
|
+
export declare function Hex({ color, size }: BgProps): import("react").JSX.Element;
|
|
55
|
+
/** Drifting points joined when close — a constellation / network. */
|
|
56
|
+
export declare function Constellation({ active, color, count, reach }: BgProps): import("react").JSX.Element;
|
|
57
|
+
/** Darkened edges, so the middle glows. */
|
|
58
|
+
export declare function Vignette({ color, strength }: BgProps): import("react").JSX.Element;
|
|
59
|
+
/** Light rays from a corner, turning very slowly. */
|
|
60
|
+
export declare function Rays({ active, color, x, y, opacity }: BgProps): import("react").JSX.Element;
|
|
61
|
+
/** Fine diagonal stripes. */
|
|
62
|
+
export declare function Stripes({ color, size, angle }: BgProps): import("react").JSX.Element;
|
|
63
|
+
/** A slow sweep across two or three colours — the classic animated gradient. */
|
|
64
|
+
export declare function GradientSweep({ active, colors, speed, angle }: BgProps): import("react").JSX.Element;
|
|
65
|
+
//#endregion
|
|
@@ -0,0 +1,604 @@
|
|
|
1
|
+
import { registerBackground } from "../react/Backgrounds.js";
|
|
2
|
+
import { asList, asNum, smoothNoise, useCanvas } from "./shared.js";
|
|
3
|
+
import { useRef } from "react";
|
|
4
|
+
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
//#region src/backgrounds/index.tsx
|
|
6
|
+
/**
|
|
7
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
8
|
+
* BACKGROUNDS
|
|
9
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
10
|
+
*
|
|
11
|
+
* Component backgrounds a slide picks by name — `background: aurora` in frontmatter, or
|
|
12
|
+
* `<Background name="sparkles" />` inside a slide — and a couple of text effects. They are the
|
|
13
|
+
* RLA deck's Aceternity-style layers rebuilt without dependencies: canvas where motion needs it,
|
|
14
|
+
* CSS where it does not. Every one takes `active` (whether its slide is showing) and pauses when
|
|
15
|
+
* it is not, so a deck full of them stays cheap.
|
|
16
|
+
*
|
|
17
|
+
* gradient-mesh slow drifting blurred blobs (colors, speed)
|
|
18
|
+
* aurora soft northern-lights bands (colors, speed)
|
|
19
|
+
* waves layered noise waves (colors, speed, blur)
|
|
20
|
+
* lines flowing gradient lines (colors, count, speed)
|
|
21
|
+
* beams thin light beams falling (color, count)
|
|
22
|
+
* sparkles a particle field (color, density, size)
|
|
23
|
+
* starfield stars with slow drift (color, count)
|
|
24
|
+
* grid a fine grid with a vignette (color, size)
|
|
25
|
+
* dots a dot matrix (color, size)
|
|
26
|
+
* noise film grain (opacity)
|
|
27
|
+
* spotlight a soft radial glow (color, x, y)
|
|
28
|
+
* ─────────────────────────────────────────────────────────────────────────────
|
|
29
|
+
*/
|
|
30
|
+
function GradientMesh({ active, colors, speed }) {
|
|
31
|
+
const cs = asList(colors, [
|
|
32
|
+
"#3b82f6",
|
|
33
|
+
"#8b5cf6",
|
|
34
|
+
"#06b6d4",
|
|
35
|
+
"#f59e0b"
|
|
36
|
+
]);
|
|
37
|
+
const sp = asNum(speed, 1);
|
|
38
|
+
return /* @__PURE__ */ jsx("div", {
|
|
39
|
+
className: "deck-bg-mesh",
|
|
40
|
+
"data-active": active !== false || void 0,
|
|
41
|
+
style: { "--speed": `${40 / sp}s` },
|
|
42
|
+
children: cs.map((c, i) => /* @__PURE__ */ jsx("span", { style: {
|
|
43
|
+
background: c,
|
|
44
|
+
animationDelay: `${-i * 7}s`,
|
|
45
|
+
left: `${15 + i * 37 % 60}%`,
|
|
46
|
+
top: `${20 + i * 53 % 50}%`
|
|
47
|
+
} }, i))
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
function Aurora({ active, colors, speed }) {
|
|
51
|
+
const cs = asList(colors, [
|
|
52
|
+
"#22d3ee",
|
|
53
|
+
"#a78bfa",
|
|
54
|
+
"#34d399"
|
|
55
|
+
]);
|
|
56
|
+
const sp = asNum(speed, 1);
|
|
57
|
+
const ref = useCanvas(active, (ctx, w, h, t) => {
|
|
58
|
+
ctx.clearRect(0, 0, w, h);
|
|
59
|
+
ctx.globalCompositeOperation = "lighter";
|
|
60
|
+
cs.forEach((c, i) => {
|
|
61
|
+
const g = ctx.createLinearGradient(0, 0, 0, h);
|
|
62
|
+
g.addColorStop(0, "transparent");
|
|
63
|
+
g.addColorStop(.5, c);
|
|
64
|
+
g.addColorStop(1, "transparent");
|
|
65
|
+
ctx.fillStyle = g;
|
|
66
|
+
ctx.globalAlpha = .28;
|
|
67
|
+
ctx.beginPath();
|
|
68
|
+
ctx.moveTo(0, h);
|
|
69
|
+
for (let x = 0; x <= w; x += 12) {
|
|
70
|
+
const y = h * .35 + Math.sin(x / (220 + i * 60) + t * sp * (.4 + i * .15)) * 80 + smoothNoise(x / 300 + i, t * sp * .2) * 160 - 80;
|
|
71
|
+
ctx.lineTo(x, y);
|
|
72
|
+
}
|
|
73
|
+
ctx.lineTo(w, h);
|
|
74
|
+
ctx.closePath();
|
|
75
|
+
ctx.filter = "blur(40px)";
|
|
76
|
+
ctx.fill();
|
|
77
|
+
ctx.filter = "none";
|
|
78
|
+
});
|
|
79
|
+
ctx.globalAlpha = 1;
|
|
80
|
+
ctx.globalCompositeOperation = "source-over";
|
|
81
|
+
}, [cs.join(), sp]);
|
|
82
|
+
return /* @__PURE__ */ jsx("canvas", {
|
|
83
|
+
ref,
|
|
84
|
+
className: "deck-bg-canvas"
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
function Waves({ active, colors, speed, blur }) {
|
|
88
|
+
const cs = asList(colors, [
|
|
89
|
+
"#38bdf8",
|
|
90
|
+
"#818cf8",
|
|
91
|
+
"#c084fc",
|
|
92
|
+
"#e879f9",
|
|
93
|
+
"#22d3ee"
|
|
94
|
+
]);
|
|
95
|
+
const sp = asNum(speed, 1);
|
|
96
|
+
const bl = asNum(blur, 10);
|
|
97
|
+
const ref = useCanvas(active, (ctx, w, h, t) => {
|
|
98
|
+
ctx.clearRect(0, 0, w, h);
|
|
99
|
+
ctx.filter = `blur(${bl}px)`;
|
|
100
|
+
cs.forEach((c, i) => {
|
|
101
|
+
ctx.beginPath();
|
|
102
|
+
ctx.lineWidth = 50;
|
|
103
|
+
ctx.strokeStyle = c;
|
|
104
|
+
ctx.globalAlpha = .5;
|
|
105
|
+
for (let x = 0; x < w + 5; x += 5) {
|
|
106
|
+
const y = smoothNoise(x / 800, .3 * i + t * sp * .08) * 200 + h * .5 - 100;
|
|
107
|
+
if (x === 0) ctx.moveTo(x, y);
|
|
108
|
+
else ctx.lineTo(x, y);
|
|
109
|
+
}
|
|
110
|
+
ctx.stroke();
|
|
111
|
+
});
|
|
112
|
+
ctx.filter = "none";
|
|
113
|
+
ctx.globalAlpha = 1;
|
|
114
|
+
}, [
|
|
115
|
+
cs.join(),
|
|
116
|
+
sp,
|
|
117
|
+
bl
|
|
118
|
+
]);
|
|
119
|
+
return /* @__PURE__ */ jsx("canvas", {
|
|
120
|
+
ref,
|
|
121
|
+
className: "deck-bg-canvas"
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
function Lines({ active, colors, count, speed }) {
|
|
125
|
+
const cs = asList(colors, [
|
|
126
|
+
"#1d4ed8",
|
|
127
|
+
"#3b82f6",
|
|
128
|
+
"#06b6d4"
|
|
129
|
+
]);
|
|
130
|
+
const n = asNum(count, 18);
|
|
131
|
+
const sp = asNum(speed, .3);
|
|
132
|
+
const ref = useCanvas(active, (ctx, w, h, t) => {
|
|
133
|
+
ctx.clearRect(0, 0, w, h);
|
|
134
|
+
ctx.lineWidth = 1.2;
|
|
135
|
+
for (let i = 0; i < n; i++) {
|
|
136
|
+
const g = ctx.createLinearGradient(0, 0, w, 0);
|
|
137
|
+
g.addColorStop(0, cs[i % cs.length]);
|
|
138
|
+
g.addColorStop(1, cs[(i + 1) % cs.length]);
|
|
139
|
+
ctx.strokeStyle = g;
|
|
140
|
+
ctx.globalAlpha = .35 + .4 * (i * 7 % 5) * .2;
|
|
141
|
+
ctx.beginPath();
|
|
142
|
+
const phase = i * .7;
|
|
143
|
+
for (let x = 0; x <= w; x += 10) {
|
|
144
|
+
const y = h * (.15 + .7 * ((i + .5) / n)) + Math.sin(x / 260 + phase + t * sp) * 60 * Math.sin(phase + t * sp * .5) + smoothNoise(x / 500 + i, t * sp * .3) * 120 - 60;
|
|
145
|
+
if (x === 0) ctx.moveTo(x, y);
|
|
146
|
+
else ctx.lineTo(x, y);
|
|
147
|
+
}
|
|
148
|
+
ctx.stroke();
|
|
149
|
+
}
|
|
150
|
+
ctx.globalAlpha = 1;
|
|
151
|
+
}, [
|
|
152
|
+
cs.join(),
|
|
153
|
+
n,
|
|
154
|
+
sp
|
|
155
|
+
]);
|
|
156
|
+
return /* @__PURE__ */ jsx("canvas", {
|
|
157
|
+
ref,
|
|
158
|
+
className: "deck-bg-canvas"
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
function Beams({ active, color, count }) {
|
|
162
|
+
const c = typeof color === "string" ? color : "#60a5fa";
|
|
163
|
+
const n = asNum(count, 7);
|
|
164
|
+
const beams = useRef(Array.from({ length: n }, (_, i) => ({
|
|
165
|
+
x: (i + .5) / n + (Math.random() - .5) * .08,
|
|
166
|
+
y: -Math.random(),
|
|
167
|
+
v: .15 + Math.random() * .25,
|
|
168
|
+
len: .15 + Math.random() * .2
|
|
169
|
+
})));
|
|
170
|
+
const ref = useCanvas(active, (ctx, w, h, _t, dt) => {
|
|
171
|
+
ctx.clearRect(0, 0, w, h);
|
|
172
|
+
for (const b of beams.current) {
|
|
173
|
+
b.y += b.v * dt;
|
|
174
|
+
if (b.y > 1.2) b.y = -b.len - Math.random() * .5;
|
|
175
|
+
const g = ctx.createLinearGradient(0, b.y * h, 0, (b.y + b.len) * h);
|
|
176
|
+
g.addColorStop(0, "transparent");
|
|
177
|
+
g.addColorStop(1, c);
|
|
178
|
+
ctx.strokeStyle = g;
|
|
179
|
+
ctx.lineWidth = 2;
|
|
180
|
+
ctx.beginPath();
|
|
181
|
+
ctx.moveTo(b.x * w, b.y * h);
|
|
182
|
+
ctx.lineTo(b.x * w, (b.y + b.len) * h);
|
|
183
|
+
ctx.stroke();
|
|
184
|
+
}
|
|
185
|
+
}, [c, n]);
|
|
186
|
+
return /* @__PURE__ */ jsx("canvas", {
|
|
187
|
+
ref,
|
|
188
|
+
className: "deck-bg-canvas"
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
function Sparkles({ active, color, density, size }) {
|
|
192
|
+
const c = typeof color === "string" ? color : "#3b82f6";
|
|
193
|
+
const n = asNum(density, 400);
|
|
194
|
+
const maxSize = asNum(size, 1.6);
|
|
195
|
+
const parts = useRef(null);
|
|
196
|
+
const ref = useCanvas(active, (ctx, w, h, _t, dt) => {
|
|
197
|
+
parts.current ??= Array.from({ length: n }, () => ({
|
|
198
|
+
x: Math.random(),
|
|
199
|
+
y: Math.random(),
|
|
200
|
+
r: .4 + Math.random() * maxSize,
|
|
201
|
+
a: Math.random(),
|
|
202
|
+
s: .3 + Math.random() * .8,
|
|
203
|
+
vx: (Math.random() - .5) * .01,
|
|
204
|
+
vy: (Math.random() - .5) * .01
|
|
205
|
+
}));
|
|
206
|
+
ctx.clearRect(0, 0, w, h);
|
|
207
|
+
ctx.fillStyle = c;
|
|
208
|
+
for (const p of parts.current) {
|
|
209
|
+
p.a += p.s * dt;
|
|
210
|
+
p.x = (p.x + p.vx * dt + 1) % 1;
|
|
211
|
+
p.y = (p.y + p.vy * dt + 1) % 1;
|
|
212
|
+
ctx.globalAlpha = .25 + .75 * Math.abs(Math.sin(p.a));
|
|
213
|
+
ctx.beginPath();
|
|
214
|
+
ctx.arc(p.x * w, p.y * h, p.r, 0, Math.PI * 2);
|
|
215
|
+
ctx.fill();
|
|
216
|
+
}
|
|
217
|
+
ctx.globalAlpha = 1;
|
|
218
|
+
}, [
|
|
219
|
+
c,
|
|
220
|
+
n,
|
|
221
|
+
maxSize
|
|
222
|
+
]);
|
|
223
|
+
return /* @__PURE__ */ jsx("canvas", {
|
|
224
|
+
ref,
|
|
225
|
+
className: "deck-bg-canvas"
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
function Starfield({ active, color, count }) {
|
|
229
|
+
const c = typeof color === "string" ? color : "#ffffff";
|
|
230
|
+
const n = asNum(count, 240);
|
|
231
|
+
const stars = useRef(null);
|
|
232
|
+
const ref = useCanvas(active, (ctx, w, h, _t, dt) => {
|
|
233
|
+
stars.current ??= Array.from({ length: n }, () => ({
|
|
234
|
+
x: Math.random() * 2 - 1,
|
|
235
|
+
y: Math.random() * 2 - 1,
|
|
236
|
+
z: Math.random()
|
|
237
|
+
}));
|
|
238
|
+
ctx.fillStyle = "rgba(0,0,0,0.25)";
|
|
239
|
+
ctx.fillRect(0, 0, w, h);
|
|
240
|
+
ctx.fillStyle = c;
|
|
241
|
+
for (const s of stars.current) {
|
|
242
|
+
s.z -= dt * .08;
|
|
243
|
+
if (s.z <= .02) {
|
|
244
|
+
s.x = Math.random() * 2 - 1;
|
|
245
|
+
s.y = Math.random() * 2 - 1;
|
|
246
|
+
s.z = 1;
|
|
247
|
+
}
|
|
248
|
+
const px = w / 2 + s.x / s.z * w * .5;
|
|
249
|
+
const py = h / 2 + s.y / s.z * h * .5;
|
|
250
|
+
const r = (1 - s.z) * 2.2;
|
|
251
|
+
if (px < 0 || px > w || py < 0 || py > h) continue;
|
|
252
|
+
ctx.globalAlpha = 1 - s.z;
|
|
253
|
+
ctx.beginPath();
|
|
254
|
+
ctx.arc(px, py, r, 0, Math.PI * 2);
|
|
255
|
+
ctx.fill();
|
|
256
|
+
}
|
|
257
|
+
ctx.globalAlpha = 1;
|
|
258
|
+
}, [c, n]);
|
|
259
|
+
return /* @__PURE__ */ jsx("canvas", {
|
|
260
|
+
ref,
|
|
261
|
+
className: "deck-bg-canvas"
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
function GridBg({ color, size }) {
|
|
265
|
+
const c = typeof color === "string" ? color : "rgba(127,127,127,0.25)";
|
|
266
|
+
const s = asNum(size, 48);
|
|
267
|
+
return /* @__PURE__ */ jsx("div", {
|
|
268
|
+
className: "deck-bg-grid",
|
|
269
|
+
style: {
|
|
270
|
+
backgroundImage: `linear-gradient(${c} 1px, transparent 1px), linear-gradient(90deg, ${c} 1px, transparent 1px)`,
|
|
271
|
+
backgroundSize: `${s}px ${s}px`
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
function DotsBg({ color, size }) {
|
|
276
|
+
const c = typeof color === "string" ? color : "rgba(127,127,127,0.35)";
|
|
277
|
+
const s = asNum(size, 28);
|
|
278
|
+
return /* @__PURE__ */ jsx("div", {
|
|
279
|
+
className: "deck-bg-grid",
|
|
280
|
+
style: {
|
|
281
|
+
backgroundImage: `radial-gradient(${c} 1.5px, transparent 1.5px)`,
|
|
282
|
+
backgroundSize: `${s}px ${s}px`
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
function NoiseBg({ opacity }) {
|
|
287
|
+
const o = asNum(opacity, .12);
|
|
288
|
+
return /* @__PURE__ */ jsx("div", {
|
|
289
|
+
className: "deck-bg-noise",
|
|
290
|
+
style: { opacity: o }
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
function SpotlightBg({ color, x, y }) {
|
|
294
|
+
const c = typeof color === "string" ? color : "rgba(59,130,246,0.35)";
|
|
295
|
+
return /* @__PURE__ */ jsx("div", {
|
|
296
|
+
className: "deck-bg-spot",
|
|
297
|
+
style: { background: `radial-gradient(circle at ${asNum(x, 50)}% ${asNum(y, 40)}%, ${c}, transparent 55%)` }
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
registerBackground("gradient-mesh", GradientMesh);
|
|
301
|
+
registerBackground("mesh", GradientMesh);
|
|
302
|
+
registerBackground("aurora", Aurora);
|
|
303
|
+
registerBackground("waves", Waves);
|
|
304
|
+
registerBackground("lines", Lines);
|
|
305
|
+
registerBackground("beams", Beams);
|
|
306
|
+
registerBackground("sparkles", Sparkles);
|
|
307
|
+
registerBackground("starfield", Starfield);
|
|
308
|
+
registerBackground("grid", GridBg);
|
|
309
|
+
registerBackground("dots", DotsBg);
|
|
310
|
+
registerBackground("noise", NoiseBg);
|
|
311
|
+
registerBackground("spotlight", SpotlightBg);
|
|
312
|
+
/** A split-flap departure board that flips to its text — the RLA deck's `TextFlippingBoard`. */
|
|
313
|
+
function FlipBoard({ text, rows, cols, className, flipDuration = 35, stagger = 15 }) {
|
|
314
|
+
const lines = text.split("\n");
|
|
315
|
+
const c = cols ?? Math.max(...lines.map((l) => l.length));
|
|
316
|
+
const r = rows ?? lines.length;
|
|
317
|
+
const cells = [];
|
|
318
|
+
for (let i = 0; i < r; i++) {
|
|
319
|
+
const line = (lines[i] ?? "").padEnd(c, " ");
|
|
320
|
+
for (let j = 0; j < c; j++) cells.push(line[j] ?? " ");
|
|
321
|
+
}
|
|
322
|
+
return /* @__PURE__ */ jsx("div", {
|
|
323
|
+
className: ["deck-flipboard", className].filter(Boolean).join(" "),
|
|
324
|
+
style: {
|
|
325
|
+
gridTemplateColumns: `repeat(${c}, 1fr)`,
|
|
326
|
+
"--flip": `${flipDuration}ms`,
|
|
327
|
+
"--stagger": `${stagger}ms`
|
|
328
|
+
},
|
|
329
|
+
children: cells.map((ch, i) => /* @__PURE__ */ jsx("span", {
|
|
330
|
+
className: "deck-flip-cell",
|
|
331
|
+
style: { animationDelay: `${i % c * stagger + Math.floor(i / c) * stagger * 2}ms` },
|
|
332
|
+
children: ch
|
|
333
|
+
}, i))
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
/** Contour lines from a noise field — the map-sheet look. */
|
|
337
|
+
function Topo({ active, color, levels, speed, spacing, width, index }) {
|
|
338
|
+
const c = typeof color === "string" ? color : "rgba(127,127,127,0.5)";
|
|
339
|
+
const n = asNum(levels, 14);
|
|
340
|
+
const sp = asNum(speed, .15);
|
|
341
|
+
const cell = asNum(spacing, 26);
|
|
342
|
+
const lw = asNum(width, 1);
|
|
343
|
+
const every = Math.max(2, asNum(index, 4));
|
|
344
|
+
const ref = useCanvas(active, (ctx, w, h, t) => {
|
|
345
|
+
ctx.clearRect(0, 0, w, h);
|
|
346
|
+
const cols = Math.ceil(w / cell) + 1;
|
|
347
|
+
const rows = Math.ceil(h / cell) + 1;
|
|
348
|
+
const f = new Float32Array(cols * rows);
|
|
349
|
+
const z = t * sp;
|
|
350
|
+
for (let j = 0; j < rows; j++) for (let i = 0; i < cols; i++) f[j * cols + i] = smoothNoise(i * .09 + z * .3, j * .09 + z * .17) * .6 + smoothNoise(i * .03 - z * .1, j * .03) * .4;
|
|
351
|
+
ctx.strokeStyle = c;
|
|
352
|
+
for (let k = 1; k < n; k++) {
|
|
353
|
+
const iso = k / n;
|
|
354
|
+
const isIndex = k % every === 0;
|
|
355
|
+
ctx.lineWidth = isIndex ? lw * 1.8 : lw;
|
|
356
|
+
ctx.globalAlpha = isIndex ? 1 : .55;
|
|
357
|
+
ctx.beginPath();
|
|
358
|
+
for (let j = 0; j < rows - 1; j++) for (let i = 0; i < cols - 1; i++) {
|
|
359
|
+
const a = f[j * cols + i];
|
|
360
|
+
const b = f[j * cols + i + 1];
|
|
361
|
+
const d = f[(j + 1) * cols + i + 1];
|
|
362
|
+
const e = f[(j + 1) * cols + i];
|
|
363
|
+
const x = i * cell;
|
|
364
|
+
const y = j * cell;
|
|
365
|
+
const pts = [];
|
|
366
|
+
const lerp = (p, q) => (iso - p) / (q - p);
|
|
367
|
+
if (a < iso !== b < iso) pts.push([x + lerp(a, b) * cell, y]);
|
|
368
|
+
if (b < iso !== d < iso) pts.push([x + cell, y + lerp(b, d) * cell]);
|
|
369
|
+
if (e < iso !== d < iso) pts.push([x + lerp(e, d) * cell, y + cell]);
|
|
370
|
+
if (a < iso !== e < iso) pts.push([x, y + lerp(a, e) * cell]);
|
|
371
|
+
if (pts.length >= 2) {
|
|
372
|
+
ctx.moveTo(pts[0][0], pts[0][1]);
|
|
373
|
+
ctx.lineTo(pts[1][0], pts[1][1]);
|
|
374
|
+
if (pts.length === 4) {
|
|
375
|
+
ctx.moveTo(pts[2][0], pts[2][1]);
|
|
376
|
+
ctx.lineTo(pts[3][0], pts[3][1]);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
ctx.stroke();
|
|
381
|
+
}
|
|
382
|
+
ctx.globalAlpha = 1;
|
|
383
|
+
}, [
|
|
384
|
+
c,
|
|
385
|
+
n,
|
|
386
|
+
sp,
|
|
387
|
+
cell,
|
|
388
|
+
lw,
|
|
389
|
+
every
|
|
390
|
+
]);
|
|
391
|
+
return /* @__PURE__ */ jsx("canvas", {
|
|
392
|
+
ref,
|
|
393
|
+
className: "deck-bg-canvas"
|
|
394
|
+
});
|
|
395
|
+
}
|
|
396
|
+
/** A few large soft lights drifting — like mesh, but sparser and calmer. */
|
|
397
|
+
function Glows({ active, colors, opacity, speed }) {
|
|
398
|
+
const cs = asList(colors, [
|
|
399
|
+
"#059669",
|
|
400
|
+
"#3b82f6",
|
|
401
|
+
"#f59e0b"
|
|
402
|
+
]);
|
|
403
|
+
const op = asNum(opacity, .35);
|
|
404
|
+
const sp = asNum(speed, 1);
|
|
405
|
+
return /* @__PURE__ */ jsx("div", {
|
|
406
|
+
className: "deck-bg-glows",
|
|
407
|
+
"data-active": active !== false || void 0,
|
|
408
|
+
style: {
|
|
409
|
+
"--speed": `${60 / sp}s`,
|
|
410
|
+
opacity: op
|
|
411
|
+
},
|
|
412
|
+
children: cs.map((c, i) => /* @__PURE__ */ jsx("span", { style: {
|
|
413
|
+
background: `radial-gradient(circle, ${c} 0, transparent 60%)`,
|
|
414
|
+
left: `${10 + i * 41 % 70}%`,
|
|
415
|
+
top: `${10 + i * 59 % 60}%`,
|
|
416
|
+
animationDelay: `${-i * 9}s`
|
|
417
|
+
} }, i))
|
|
418
|
+
});
|
|
419
|
+
}
|
|
420
|
+
/** A graticule: fine grid with major lines every n cells and ticks — the map-projection look. */
|
|
421
|
+
function Graticule({ color, size, major }) {
|
|
422
|
+
const c = typeof color === "string" ? color : "rgba(127,127,127,0.28)";
|
|
423
|
+
const s = asNum(size, 40);
|
|
424
|
+
const m = asNum(major, 5);
|
|
425
|
+
const ref = useCanvas(false, (ctx, w, h) => {
|
|
426
|
+
ctx.clearRect(0, 0, w, h);
|
|
427
|
+
ctx.strokeStyle = c;
|
|
428
|
+
for (let x = 0, i = 0; x <= w; x += s, i++) {
|
|
429
|
+
ctx.globalAlpha = i % m === 0 ? .9 : .35;
|
|
430
|
+
ctx.lineWidth = i % m === 0 ? 1.2 : .6;
|
|
431
|
+
ctx.beginPath();
|
|
432
|
+
ctx.moveTo(x + .5, 0);
|
|
433
|
+
ctx.lineTo(x + .5, h);
|
|
434
|
+
ctx.stroke();
|
|
435
|
+
}
|
|
436
|
+
for (let y = 0, j = 0; y <= h; y += s, j++) {
|
|
437
|
+
ctx.globalAlpha = j % m === 0 ? .9 : .35;
|
|
438
|
+
ctx.lineWidth = j % m === 0 ? 1.2 : .6;
|
|
439
|
+
ctx.beginPath();
|
|
440
|
+
ctx.moveTo(0, y + .5);
|
|
441
|
+
ctx.lineTo(w, y + .5);
|
|
442
|
+
ctx.stroke();
|
|
443
|
+
}
|
|
444
|
+
ctx.globalAlpha = .8;
|
|
445
|
+
ctx.fillStyle = c;
|
|
446
|
+
ctx.font = "10px ui-monospace, monospace";
|
|
447
|
+
for (let x = 0, i = 0; x <= w; x += s * m, i++) ctx.fillText(String(i * m), x + 4, 12);
|
|
448
|
+
for (let y = s * m, j = 1; y <= h; y += s * m, j++) ctx.fillText(String(j * m), 4, y - 4);
|
|
449
|
+
ctx.globalAlpha = 1;
|
|
450
|
+
}, [
|
|
451
|
+
c,
|
|
452
|
+
s,
|
|
453
|
+
m
|
|
454
|
+
]);
|
|
455
|
+
return /* @__PURE__ */ jsx("canvas", {
|
|
456
|
+
ref,
|
|
457
|
+
className: "deck-bg-canvas"
|
|
458
|
+
});
|
|
459
|
+
}
|
|
460
|
+
/** A honeycomb. */
|
|
461
|
+
function Hex({ color, size }) {
|
|
462
|
+
const c = typeof color === "string" ? color : "rgba(127,127,127,0.25)";
|
|
463
|
+
const r = asNum(size, 28);
|
|
464
|
+
const ref = useCanvas(false, (ctx, w, h) => {
|
|
465
|
+
ctx.clearRect(0, 0, w, h);
|
|
466
|
+
ctx.strokeStyle = c;
|
|
467
|
+
ctx.lineWidth = 1;
|
|
468
|
+
const dx = r * Math.sqrt(3);
|
|
469
|
+
const dy = r * 1.5;
|
|
470
|
+
for (let j = -1; j * dy < h + r; j++) for (let i = -1; i * dx < w + dx; i++) {
|
|
471
|
+
const cx = i * dx + (j % 2 ? dx / 2 : 0);
|
|
472
|
+
const cy = j * dy;
|
|
473
|
+
ctx.beginPath();
|
|
474
|
+
for (let k = 0; k < 6; k++) {
|
|
475
|
+
const a = Math.PI / 3 * k + Math.PI / 6;
|
|
476
|
+
const px = cx + r * Math.cos(a);
|
|
477
|
+
const py = cy + r * Math.sin(a);
|
|
478
|
+
if (k === 0) ctx.moveTo(px, py);
|
|
479
|
+
else ctx.lineTo(px, py);
|
|
480
|
+
}
|
|
481
|
+
ctx.closePath();
|
|
482
|
+
ctx.stroke();
|
|
483
|
+
}
|
|
484
|
+
}, [c, r]);
|
|
485
|
+
return /* @__PURE__ */ jsx("canvas", {
|
|
486
|
+
ref,
|
|
487
|
+
className: "deck-bg-canvas"
|
|
488
|
+
});
|
|
489
|
+
}
|
|
490
|
+
/** Drifting points joined when close — a constellation / network. */
|
|
491
|
+
function Constellation({ active, color, count, reach }) {
|
|
492
|
+
const c = typeof color === "string" ? color : "#3b82f6";
|
|
493
|
+
const n = asNum(count, 70);
|
|
494
|
+
const rr = asNum(reach, 140);
|
|
495
|
+
const pts = useRef(null);
|
|
496
|
+
const ref = useCanvas(active, (ctx, w, h, _t, dt) => {
|
|
497
|
+
pts.current ??= Array.from({ length: n }, () => ({
|
|
498
|
+
x: Math.random() * w,
|
|
499
|
+
y: Math.random() * h,
|
|
500
|
+
vx: (Math.random() - .5) * 14,
|
|
501
|
+
vy: (Math.random() - .5) * 14
|
|
502
|
+
}));
|
|
503
|
+
const p = pts.current;
|
|
504
|
+
ctx.clearRect(0, 0, w, h);
|
|
505
|
+
for (const q of p) {
|
|
506
|
+
q.x += q.vx * dt;
|
|
507
|
+
q.y += q.vy * dt;
|
|
508
|
+
if (q.x < 0 || q.x > w) q.vx *= -1;
|
|
509
|
+
if (q.y < 0 || q.y > h) q.vy *= -1;
|
|
510
|
+
}
|
|
511
|
+
ctx.strokeStyle = c;
|
|
512
|
+
ctx.fillStyle = c;
|
|
513
|
+
for (let i = 0; i < p.length; i++) {
|
|
514
|
+
for (let j = i + 1; j < p.length; j++) {
|
|
515
|
+
const dx = p[i].x - p[j].x;
|
|
516
|
+
const dy = p[i].y - p[j].y;
|
|
517
|
+
const d = Math.hypot(dx, dy);
|
|
518
|
+
if (d < rr) {
|
|
519
|
+
ctx.globalAlpha = (1 - d / rr) * .35;
|
|
520
|
+
ctx.beginPath();
|
|
521
|
+
ctx.moveTo(p[i].x, p[i].y);
|
|
522
|
+
ctx.lineTo(p[j].x, p[j].y);
|
|
523
|
+
ctx.stroke();
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
ctx.globalAlpha = .7;
|
|
527
|
+
ctx.beginPath();
|
|
528
|
+
ctx.arc(p[i].x, p[i].y, 1.8, 0, Math.PI * 2);
|
|
529
|
+
ctx.fill();
|
|
530
|
+
}
|
|
531
|
+
ctx.globalAlpha = 1;
|
|
532
|
+
}, [
|
|
533
|
+
c,
|
|
534
|
+
n,
|
|
535
|
+
rr
|
|
536
|
+
]);
|
|
537
|
+
return /* @__PURE__ */ jsx("canvas", {
|
|
538
|
+
ref,
|
|
539
|
+
className: "deck-bg-canvas"
|
|
540
|
+
});
|
|
541
|
+
}
|
|
542
|
+
/** Darkened edges, so the middle glows. */
|
|
543
|
+
function Vignette({ color, strength }) {
|
|
544
|
+
const c = typeof color === "string" ? color : "rgba(0,0,0,1)";
|
|
545
|
+
const s = asNum(strength, .35);
|
|
546
|
+
return /* @__PURE__ */ jsx("div", {
|
|
547
|
+
className: "deck-bg-vignette",
|
|
548
|
+
style: {
|
|
549
|
+
background: `radial-gradient(ellipse at center, transparent 45%, ${c} 130%)`,
|
|
550
|
+
opacity: s
|
|
551
|
+
}
|
|
552
|
+
});
|
|
553
|
+
}
|
|
554
|
+
/** Light rays from a corner, turning very slowly. */
|
|
555
|
+
function Rays({ active, color, x, y, opacity }) {
|
|
556
|
+
const c = typeof color === "string" ? color : "rgba(255,255,255,0.35)";
|
|
557
|
+
return /* @__PURE__ */ jsx("div", {
|
|
558
|
+
className: "deck-bg-rays",
|
|
559
|
+
"data-active": active !== false || void 0,
|
|
560
|
+
style: {
|
|
561
|
+
"--rays-x": `${asNum(x, 20)}%`,
|
|
562
|
+
"--rays-y": `${asNum(y, -10)}%`,
|
|
563
|
+
"--rays-c": c,
|
|
564
|
+
opacity: asNum(opacity, .5)
|
|
565
|
+
}
|
|
566
|
+
});
|
|
567
|
+
}
|
|
568
|
+
/** Fine diagonal stripes. */
|
|
569
|
+
function Stripes({ color, size, angle }) {
|
|
570
|
+
const c = typeof color === "string" ? color : "rgba(127,127,127,0.12)";
|
|
571
|
+
const s = asNum(size, 14);
|
|
572
|
+
return /* @__PURE__ */ jsx("div", {
|
|
573
|
+
className: "deck-bg-grid",
|
|
574
|
+
style: { backgroundImage: `repeating-linear-gradient(${asNum(angle, 45)}deg, ${c} 0 1px, transparent 1px ${s}px)` }
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
/** A slow sweep across two or three colours — the classic animated gradient. */
|
|
578
|
+
function GradientSweep({ active, colors, speed, angle }) {
|
|
579
|
+
const cs = asList(colors, [
|
|
580
|
+
"#0f172a",
|
|
581
|
+
"#1e3a8a",
|
|
582
|
+
"#0f766e"
|
|
583
|
+
]);
|
|
584
|
+
return /* @__PURE__ */ jsx("div", {
|
|
585
|
+
className: "deck-bg-sweep",
|
|
586
|
+
"data-active": active !== false || void 0,
|
|
587
|
+
style: {
|
|
588
|
+
backgroundImage: `linear-gradient(${asNum(angle, 120)}deg, ${cs.join(", ")}, ${cs[0]})`,
|
|
589
|
+
"--speed": `${24 / asNum(speed, 1)}s`
|
|
590
|
+
}
|
|
591
|
+
});
|
|
592
|
+
}
|
|
593
|
+
registerBackground("topo", Topo);
|
|
594
|
+
registerBackground("contours", Topo);
|
|
595
|
+
registerBackground("glows", Glows);
|
|
596
|
+
registerBackground("graticule", Graticule);
|
|
597
|
+
registerBackground("hex", Hex);
|
|
598
|
+
registerBackground("constellation", Constellation);
|
|
599
|
+
registerBackground("vignette", Vignette);
|
|
600
|
+
registerBackground("rays", Rays);
|
|
601
|
+
registerBackground("stripes", Stripes);
|
|
602
|
+
registerBackground("sweep", GradientSweep);
|
|
603
|
+
//#endregion
|
|
604
|
+
export { Aurora, Beams, Constellation, DotsBg, FlipBoard, Glows, GradientMesh, GradientSweep, Graticule, GridBg, Hex, Lines, NoiseBg, Rays, Sparkles, SpotlightBg, Starfield, Stripes, Topo, Vignette, Waves };
|