@lobehub/ui 5.48.2 → 5.49.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/es/Highlighter/FullFeatured.mjs +1 -1
- package/es/Highlighter/FullFeatured.mjs.map +1 -1
- package/es/Highlighter/LangSelect.mjs +1 -1
- package/es/Highlighter/LangSelect.mjs.map +1 -1
- package/es/Highlighter/style.mjs +14 -11
- package/es/Highlighter/style.mjs.map +1 -1
- package/es/Mermaid/FullFeatured.mjs +1 -1
- package/es/Mermaid/FullFeatured.mjs.map +1 -1
- package/es/ThemeProvider/ThemeProvider.mjs +2 -2
- package/es/ThemeProvider/ThemeProvider.mjs.map +1 -1
- package/es/awesome/AgentSkillCard/AgentSkillCard.d.mts +6 -0
- package/es/awesome/AgentSkillCard/AgentSkillCard.mjs +83 -0
- package/es/awesome/AgentSkillCard/AgentSkillCard.mjs.map +1 -0
- package/es/awesome/AgentSkillCard/agents.d.mts +6 -0
- package/es/awesome/AgentSkillCard/agents.mjs +40 -0
- package/es/awesome/AgentSkillCard/agents.mjs.map +1 -0
- package/es/awesome/AgentSkillCard/index.d.mts +4 -0
- package/es/awesome/AgentSkillCard/style.mjs +85 -0
- package/es/awesome/AgentSkillCard/style.mjs.map +1 -0
- package/es/awesome/AgentSkillCard/type.d.mts +41 -0
- package/es/awesome/BentoGrid/BentoCard.d.mts +6 -0
- package/es/awesome/BentoGrid/BentoCard.mjs +39 -0
- package/es/awesome/BentoGrid/BentoCard.mjs.map +1 -0
- package/es/awesome/BentoGrid/BentoGrid.d.mts +6 -0
- package/es/awesome/BentoGrid/BentoGrid.mjs +20 -0
- package/es/awesome/BentoGrid/BentoGrid.mjs.map +1 -0
- package/es/awesome/BentoGrid/index.d.mts +4 -0
- package/es/awesome/BentoGrid/style.mjs +102 -0
- package/es/awesome/BentoGrid/style.mjs.map +1 -0
- package/es/awesome/BentoGrid/type.d.mts +40 -0
- package/es/awesome/CodeShowcase/CodeShowcase.d.mts +6 -0
- package/es/awesome/CodeShowcase/CodeShowcase.mjs +51 -0
- package/es/awesome/CodeShowcase/CodeShowcase.mjs.map +1 -0
- package/es/awesome/CodeShowcase/index.d.mts +3 -0
- package/es/awesome/CodeShowcase/style.mjs +50 -0
- package/es/awesome/CodeShowcase/style.mjs.map +1 -0
- package/es/awesome/CodeShowcase/type.d.mts +27 -0
- package/es/awesome/FeatureGrid/FeatureGrid.d.mts +6 -0
- package/es/awesome/FeatureGrid/FeatureGrid.mjs +48 -0
- package/es/awesome/FeatureGrid/FeatureGrid.mjs.map +1 -0
- package/es/awesome/FeatureGrid/index.d.mts +3 -0
- package/es/awesome/FeatureGrid/style.mjs +75 -0
- package/es/awesome/FeatureGrid/style.mjs.map +1 -0
- package/es/awesome/FeatureGrid/type.d.mts +25 -0
- package/es/awesome/FluidGradient/FluidGradient.d.mts +6 -0
- package/es/awesome/FluidGradient/FluidGradient.mjs +293 -0
- package/es/awesome/FluidGradient/FluidGradient.mjs.map +1 -0
- package/es/awesome/FluidGradient/index.d.mts +3 -0
- package/es/awesome/FluidGradient/style.mjs +52 -0
- package/es/awesome/FluidGradient/style.mjs.map +1 -0
- package/es/awesome/FluidGradient/type.d.mts +22 -0
- package/es/awesome/InstallBanner/InstallBanner.d.mts +6 -0
- package/es/awesome/InstallBanner/InstallBanner.mjs +35 -0
- package/es/awesome/InstallBanner/InstallBanner.mjs.map +1 -0
- package/es/awesome/InstallBanner/index.d.mts +3 -0
- package/es/awesome/InstallBanner/style.mjs +46 -0
- package/es/awesome/InstallBanner/style.mjs.map +1 -0
- package/es/awesome/InstallBanner/type.d.mts +18 -0
- package/es/awesome/LandingHero/LandingHero.d.mts +6 -0
- package/es/awesome/LandingHero/LandingHero.mjs +55 -0
- package/es/awesome/LandingHero/LandingHero.mjs.map +1 -0
- package/es/awesome/LandingHero/index.d.mts +3 -0
- package/es/awesome/LandingHero/style.mjs +155 -0
- package/es/awesome/LandingHero/style.mjs.map +1 -0
- package/es/awesome/LandingHero/type.d.mts +29 -0
- package/es/awesome/LandingSection/LandingSection.d.mts +6 -0
- package/es/awesome/LandingSection/LandingSection.mjs +61 -0
- package/es/awesome/LandingSection/LandingSection.mjs.map +1 -0
- package/es/awesome/LandingSection/index.d.mts +3 -0
- package/es/awesome/LandingSection/style.mjs +88 -0
- package/es/awesome/LandingSection/style.mjs.map +1 -0
- package/es/awesome/LandingSection/type.d.mts +40 -0
- package/es/awesome/LogoMarquee/LogoMarquee.d.mts +6 -0
- package/es/awesome/LogoMarquee/LogoMarquee.mjs +52 -0
- package/es/awesome/LogoMarquee/LogoMarquee.mjs.map +1 -0
- package/es/awesome/LogoMarquee/index.d.mts +3 -0
- package/es/awesome/LogoMarquee/style.mjs +70 -0
- package/es/awesome/LogoMarquee/style.mjs.map +1 -0
- package/es/awesome/LogoMarquee/type.d.mts +40 -0
- package/es/awesome/index.d.mts +33 -1
- package/es/awesome/index.mjs +13 -1
- package/es/awesome/landingActions.d.mts +20 -0
- package/es/awesome/landingActions.mjs +123 -0
- package/es/awesome/landingActions.mjs.map +1 -0
- package/es/awesome/landingIcon.mjs +13 -0
- package/es/awesome/landingIcon.mjs.map +1 -0
- package/es/awesome/landingLink.d.mts +12 -0
- package/es/awesome/landingLink.mjs +23 -0
- package/es/awesome/landingLink.mjs.map +1 -0
- package/es/awesome/landingTokens.d.mts +10 -0
- package/es/awesome/landingTokens.mjs +19 -0
- package/es/awesome/landingTokens.mjs.map +1 -0
- package/es/base-ui/Input/style.d.mts +1 -1
- package/es/base-ui/Segmented/atoms.mjs +1 -0
- package/es/base-ui/Segmented/atoms.mjs.map +1 -1
- package/es/base-ui/Segmented/style.mjs +127 -125
- package/es/base-ui/Segmented/style.mjs.map +1 -1
- package/es/base-ui/index.mjs +4 -4
- package/es/dashboard/AuthLayout/AuthLayout.d.mts +9 -0
- package/es/dashboard/AuthLayout/AuthLayout.mjs +54 -0
- package/es/dashboard/AuthLayout/AuthLayout.mjs.map +1 -0
- package/es/dashboard/AuthLayout/index.d.mts +3 -0
- package/es/dashboard/AuthLayout/style.mjs +120 -0
- package/es/dashboard/AuthLayout/style.mjs.map +1 -0
- package/es/dashboard/AuthLayout/type.d.mts +16 -0
- package/es/dashboard/Breadcrumb/Breadcrumb.d.mts +9 -0
- package/es/dashboard/Breadcrumb/Breadcrumb.mjs +55 -0
- package/es/dashboard/Breadcrumb/Breadcrumb.mjs.map +1 -0
- package/es/dashboard/Breadcrumb/index.d.mts +3 -0
- package/es/dashboard/Breadcrumb/style.mjs +66 -0
- package/es/dashboard/Breadcrumb/style.mjs.map +1 -0
- package/es/dashboard/Breadcrumb/type.d.mts +25 -0
- package/es/dashboard/ConsoleNav/ConsoleNav.d.mts +9 -0
- package/es/dashboard/ConsoleNav/ConsoleNav.mjs +275 -0
- package/es/dashboard/ConsoleNav/ConsoleNav.mjs.map +1 -0
- package/es/dashboard/ConsoleNav/active.d.mts +7 -0
- package/es/dashboard/ConsoleNav/active.mjs +29 -0
- package/es/dashboard/ConsoleNav/active.mjs.map +1 -0
- package/es/dashboard/ConsoleNav/index.d.mts +4 -0
- package/es/dashboard/ConsoleNav/style.mjs +283 -0
- package/es/dashboard/ConsoleNav/style.mjs.map +1 -0
- package/es/dashboard/ConsoleNav/type.d.mts +71 -0
- package/es/dashboard/ConsoleShell/ConsoleBrand.d.mts +9 -0
- package/es/dashboard/ConsoleShell/ConsoleBrand.mjs +37 -0
- package/es/dashboard/ConsoleShell/ConsoleBrand.mjs.map +1 -0
- package/es/dashboard/ConsoleShell/ConsoleShell.d.mts +9 -0
- package/es/dashboard/ConsoleShell/ConsoleShell.mjs +149 -0
- package/es/dashboard/ConsoleShell/ConsoleShell.mjs.map +1 -0
- package/es/dashboard/ConsoleShell/context.d.mts +6 -0
- package/es/dashboard/ConsoleShell/context.mjs +16 -0
- package/es/dashboard/ConsoleShell/context.mjs.map +1 -0
- package/es/dashboard/ConsoleShell/index.d.mts +5 -0
- package/es/dashboard/ConsoleShell/style.mjs +209 -0
- package/es/dashboard/ConsoleShell/style.mjs.map +1 -0
- package/es/dashboard/ConsoleShell/type.d.mts +67 -0
- package/es/dashboard/FilterSidebar/FilterSidebar.d.mts +17 -0
- package/es/dashboard/FilterSidebar/FilterSidebar.mjs +151 -0
- package/es/dashboard/FilterSidebar/FilterSidebar.mjs.map +1 -0
- package/es/dashboard/FilterSidebar/context.d.mts +7 -0
- package/es/dashboard/FilterSidebar/context.mjs +19 -0
- package/es/dashboard/FilterSidebar/context.mjs.map +1 -0
- package/es/dashboard/FilterSidebar/index.d.mts +4 -0
- package/es/dashboard/FilterSidebar/style.mjs +155 -0
- package/es/dashboard/FilterSidebar/style.mjs.map +1 -0
- package/es/dashboard/FilterSidebar/type.d.mts +44 -0
- package/es/dashboard/FilterSidebar/width.mjs +18 -0
- package/es/dashboard/FilterSidebar/width.mjs.map +1 -0
- package/es/dashboard/PageHeader/PageHeader.d.mts +9 -0
- package/es/dashboard/PageHeader/PageHeader.mjs +37 -0
- package/es/dashboard/PageHeader/PageHeader.mjs.map +1 -0
- package/es/dashboard/PageHeader/index.d.mts +3 -0
- package/es/dashboard/PageHeader/style.mjs +47 -0
- package/es/dashboard/PageHeader/style.mjs.map +1 -0
- package/es/dashboard/PageHeader/type.d.mts +14 -0
- package/es/dashboard/PageSkeleton/PageSkeleton.d.mts +25 -0
- package/es/dashboard/PageSkeleton/PageSkeleton.mjs +136 -0
- package/es/dashboard/PageSkeleton/PageSkeleton.mjs.map +1 -0
- package/es/dashboard/PageSkeleton/style.mjs +122 -0
- package/es/dashboard/PageSkeleton/style.mjs.map +1 -0
- package/es/dashboard/PageSkeleton/type.d.mts +22 -0
- package/es/dashboard/PageTabs/PageTabs.d.mts +9 -0
- package/es/dashboard/PageTabs/PageTabs.mjs +37 -0
- package/es/dashboard/PageTabs/PageTabs.mjs.map +1 -0
- package/es/dashboard/PageTabs/index.d.mts +3 -0
- package/es/dashboard/PageTabs/style.mjs +57 -0
- package/es/dashboard/PageTabs/style.mjs.map +1 -0
- package/es/dashboard/PageTabs/type.d.mts +17 -0
- package/es/dashboard/RouteProgress/RouteProgress.d.mts +9 -0
- package/es/dashboard/RouteProgress/RouteProgress.mjs +44 -0
- package/es/dashboard/RouteProgress/RouteProgress.mjs.map +1 -0
- package/es/dashboard/RouteProgress/style.mjs +19 -0
- package/es/dashboard/RouteProgress/style.mjs.map +1 -0
- package/es/dashboard/RouteProgress/type.d.mts +8 -0
- package/es/dashboard/StatCard/StatCard.d.mts +9 -0
- package/es/dashboard/StatCard/StatCard.mjs +84 -0
- package/es/dashboard/StatCard/StatCard.mjs.map +1 -0
- package/es/dashboard/StatCard/index.d.mts +3 -0
- package/es/dashboard/StatCard/style.mjs +135 -0
- package/es/dashboard/StatCard/style.mjs.map +1 -0
- package/es/dashboard/StatCard/type.d.mts +26 -0
- package/es/dashboard/Surface/Surface.d.mts +13 -0
- package/es/dashboard/Surface/Surface.mjs +20 -0
- package/es/dashboard/Surface/Surface.mjs.map +1 -0
- package/es/dashboard/Surface/index.d.mts +4 -0
- package/es/dashboard/Surface/style.d.mts +14 -0
- package/es/dashboard/Surface/style.mjs +22 -0
- package/es/dashboard/Surface/style.mjs.map +1 -0
- package/es/dashboard/Surface/type.d.mts +8 -0
- package/es/dashboard/hooks.mjs +49 -0
- package/es/dashboard/hooks.mjs.map +1 -0
- package/es/dashboard/index.d.mts +37 -0
- package/es/dashboard/index.d.ts +1 -0
- package/es/dashboard/index.js +1 -0
- package/es/dashboard/index.mjs +17 -0
- package/es/static-css/registry.mjs +2 -2
- package/es/static-css/registry.mjs.map +1 -1
- package/es/storybook/StoryBook/index.mjs +4 -0
- package/es/storybook/StoryBook/index.mjs.map +1 -1
- package/es/storybook/StoryBook/style.mjs +7 -2
- package/es/storybook/StoryBook/style.mjs.map +1 -1
- package/es/styles/theme/token/base.mjs +2 -2
- package/es/styles/theme/token/base.mjs.map +1 -1
- package/package.json +6 -2
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { LANDING_PALETTE_DARK, LANDING_PALETTE_LIGHT } from "../landingTokens.mjs";
|
|
3
|
+
import { styles } from "./style.mjs";
|
|
4
|
+
import { memo, useEffect, useRef, useState } from "react";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
import { cx, useThemeMode } from "antd-style";
|
|
7
|
+
//#region src/awesome/FluidGradient/FluidGradient.tsx
|
|
8
|
+
const VERTEX_SHADER = `#version 300 es
|
|
9
|
+
in vec2 aPos;
|
|
10
|
+
void main() {
|
|
11
|
+
gl_Position = vec4(aPos, 0.0, 1.0);
|
|
12
|
+
}`;
|
|
13
|
+
const FRAGMENT_SHADER = `#version 300 es
|
|
14
|
+
precision highp float;
|
|
15
|
+
|
|
16
|
+
uniform vec2 uRes;
|
|
17
|
+
uniform float uTime;
|
|
18
|
+
uniform vec3 uStopA;
|
|
19
|
+
uniform vec3 uStopB;
|
|
20
|
+
uniform vec3 uStopC;
|
|
21
|
+
uniform float uIntensity;
|
|
22
|
+
|
|
23
|
+
out vec4 fragColor;
|
|
24
|
+
|
|
25
|
+
float hash(vec2 p) {
|
|
26
|
+
p = fract(p * vec2(234.34, 435.345));
|
|
27
|
+
p += dot(p, p + 34.23);
|
|
28
|
+
return fract(p.x * p.y);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
float noise(vec2 p) {
|
|
32
|
+
vec2 i = floor(p);
|
|
33
|
+
vec2 f = fract(p);
|
|
34
|
+
vec2 u = f * f * (3.0 - 2.0 * f);
|
|
35
|
+
float a = hash(i);
|
|
36
|
+
float b = hash(i + vec2(1.0, 0.0));
|
|
37
|
+
float c = hash(i + vec2(0.0, 1.0));
|
|
38
|
+
float d = hash(i + vec2(1.0, 1.0));
|
|
39
|
+
return mix(mix(a, b, u.x), mix(c, d, u.x), u.y);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
float fbm(vec2 p) {
|
|
43
|
+
float value = 0.0;
|
|
44
|
+
float amplitude = 0.5;
|
|
45
|
+
for (int i = 0; i < 4; i++) {
|
|
46
|
+
value += amplitude * noise(p);
|
|
47
|
+
p = mat2(0.8, 0.6, -0.6, 0.8) * p * 2.0 + vec2(3.7, 1.3);
|
|
48
|
+
amplitude *= 0.5;
|
|
49
|
+
}
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
void main() {
|
|
54
|
+
vec2 uv = gl_FragCoord.xy / uRes;
|
|
55
|
+
vec2 p = vec2(uv.x * uRes.x / uRes.y, uv.y);
|
|
56
|
+
|
|
57
|
+
float t = uTime * 0.05;
|
|
58
|
+
|
|
59
|
+
vec2 q = vec2(fbm(p * 1.4 + t * 0.35), fbm(p * 1.4 - t * 0.28 + 5.2));
|
|
60
|
+
vec2 r = vec2(
|
|
61
|
+
fbm(p * 1.4 + 2.6 * q + vec2(1.7, 9.2) + t * 0.18),
|
|
62
|
+
fbm(p * 1.4 + 2.6 * q + vec2(8.3, 2.8) - t * 0.12)
|
|
63
|
+
);
|
|
64
|
+
float field = fbm(p * 1.4 + 2.6 * r);
|
|
65
|
+
|
|
66
|
+
vec3 color = mix(uStopA, uStopB, clamp(field * field * 2.4, 0.0, 1.0));
|
|
67
|
+
color = mix(color, uStopC, clamp(dot(q, vec2(0.7)) - 0.25, 0.0, 1.0));
|
|
68
|
+
|
|
69
|
+
float fade = smoothstep(0.02, 0.85, uv.y);
|
|
70
|
+
float alpha = fade * fade * uIntensity * smoothstep(0.14, 0.66, field);
|
|
71
|
+
|
|
72
|
+
fragColor = vec4(color * alpha, alpha);
|
|
73
|
+
}`;
|
|
74
|
+
const hexToRgb = (hex) => {
|
|
75
|
+
const value = hex.replace("#", "");
|
|
76
|
+
const full = value.length === 3 ? value.split("").map((char) => char + char).join("") : value.slice(0, 6);
|
|
77
|
+
const channel = (offset) => Number.parseInt(full.slice(offset, offset + 2), 16) / 255;
|
|
78
|
+
return [
|
|
79
|
+
channel(0),
|
|
80
|
+
channel(2),
|
|
81
|
+
channel(4)
|
|
82
|
+
];
|
|
83
|
+
};
|
|
84
|
+
const FluidGradient = memo(({ className, colors, intensity = .45, speed = 1, style, ...rest }) => {
|
|
85
|
+
const { isDarkMode } = useThemeMode();
|
|
86
|
+
const canvasRef = useRef(null);
|
|
87
|
+
const [ready, setReady] = useState(false);
|
|
88
|
+
const [canvasEpoch, setCanvasEpoch] = useState(0);
|
|
89
|
+
const palette = colors ?? (isDarkMode ? LANDING_PALETTE_DARK : LANDING_PALETTE_LIGHT);
|
|
90
|
+
const paletteRef = useRef({
|
|
91
|
+
colors: palette,
|
|
92
|
+
intensity
|
|
93
|
+
});
|
|
94
|
+
const speedRef = useRef(speed);
|
|
95
|
+
const repaintRef = useRef(void 0);
|
|
96
|
+
useEffect(() => {
|
|
97
|
+
paletteRef.current = {
|
|
98
|
+
colors: palette,
|
|
99
|
+
intensity
|
|
100
|
+
};
|
|
101
|
+
speedRef.current = speed;
|
|
102
|
+
repaintRef.current?.();
|
|
103
|
+
}, [
|
|
104
|
+
palette[0],
|
|
105
|
+
palette[1],
|
|
106
|
+
palette[2],
|
|
107
|
+
intensity,
|
|
108
|
+
speed
|
|
109
|
+
]);
|
|
110
|
+
useEffect(() => {
|
|
111
|
+
const canvas = canvasRef.current;
|
|
112
|
+
if (!canvas) return void 0;
|
|
113
|
+
const reducedMotion = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
114
|
+
let frameId = 0;
|
|
115
|
+
let inView = true;
|
|
116
|
+
let readySent = false;
|
|
117
|
+
let drawFrame = null;
|
|
118
|
+
let refreshPalette = null;
|
|
119
|
+
let sizeAndDraw = null;
|
|
120
|
+
let destroyResources = null;
|
|
121
|
+
const buildResources = () => {
|
|
122
|
+
const gl = canvas.getContext("webgl2", {
|
|
123
|
+
alpha: true,
|
|
124
|
+
antialias: false,
|
|
125
|
+
depth: false,
|
|
126
|
+
stencil: false,
|
|
127
|
+
powerPreference: "low-power"
|
|
128
|
+
});
|
|
129
|
+
if (!gl) return false;
|
|
130
|
+
const compileShader = (type, source) => {
|
|
131
|
+
const shader = gl.createShader(type);
|
|
132
|
+
if (!shader) return null;
|
|
133
|
+
gl.shaderSource(shader, source);
|
|
134
|
+
gl.compileShader(shader);
|
|
135
|
+
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
|
|
136
|
+
gl.deleteShader(shader);
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
return shader;
|
|
140
|
+
};
|
|
141
|
+
const vertexShader = compileShader(gl.VERTEX_SHADER, VERTEX_SHADER);
|
|
142
|
+
const fragmentShader = compileShader(gl.FRAGMENT_SHADER, FRAGMENT_SHADER);
|
|
143
|
+
if (!vertexShader || !fragmentShader) return false;
|
|
144
|
+
const program = gl.createProgram();
|
|
145
|
+
if (!program) return false;
|
|
146
|
+
gl.attachShader(program, vertexShader);
|
|
147
|
+
gl.attachShader(program, fragmentShader);
|
|
148
|
+
gl.linkProgram(program);
|
|
149
|
+
gl.deleteShader(vertexShader);
|
|
150
|
+
gl.deleteShader(fragmentShader);
|
|
151
|
+
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
|
|
152
|
+
gl.deleteProgram(program);
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
gl.useProgram(program);
|
|
156
|
+
const buffer = gl.createBuffer();
|
|
157
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
|
158
|
+
gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
|
|
159
|
+
-1,
|
|
160
|
+
-1,
|
|
161
|
+
3,
|
|
162
|
+
-1,
|
|
163
|
+
-1,
|
|
164
|
+
3
|
|
165
|
+
]), gl.STATIC_DRAW);
|
|
166
|
+
const position = gl.getAttribLocation(program, "aPos");
|
|
167
|
+
gl.enableVertexAttribArray(position);
|
|
168
|
+
gl.vertexAttribPointer(position, 2, gl.FLOAT, false, 0, 0);
|
|
169
|
+
const timeLocation = gl.getUniformLocation(program, "uTime");
|
|
170
|
+
const stopLocations = [
|
|
171
|
+
"uStopA",
|
|
172
|
+
"uStopB",
|
|
173
|
+
"uStopC"
|
|
174
|
+
].map((name) => gl.getUniformLocation(program, name));
|
|
175
|
+
const intensityLocation = gl.getUniformLocation(program, "uIntensity");
|
|
176
|
+
refreshPalette = () => {
|
|
177
|
+
const { colors: stops, intensity: peak } = paletteRef.current;
|
|
178
|
+
stops.map(hexToRgb).forEach((stop, index) => {
|
|
179
|
+
const location = stopLocations[index];
|
|
180
|
+
if (location) gl.uniform3f(location, stop[0], stop[1], stop[2]);
|
|
181
|
+
});
|
|
182
|
+
gl.uniform1f(intensityLocation, peak);
|
|
183
|
+
};
|
|
184
|
+
refreshPalette();
|
|
185
|
+
drawFrame = (seconds) => {
|
|
186
|
+
gl.uniform1f(timeLocation, seconds * speedRef.current);
|
|
187
|
+
gl.drawArrays(gl.TRIANGLES, 0, 3);
|
|
188
|
+
if (!readySent) {
|
|
189
|
+
readySent = true;
|
|
190
|
+
setReady(true);
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
sizeAndDraw = () => {
|
|
194
|
+
const dpr = Math.min(window.devicePixelRatio || 1, 1.5);
|
|
195
|
+
const width = Math.max(1, Math.round(canvas.clientWidth * dpr));
|
|
196
|
+
const height = Math.max(1, Math.round(canvas.clientHeight * dpr));
|
|
197
|
+
if (canvas.width !== width || canvas.height !== height) {
|
|
198
|
+
canvas.width = width;
|
|
199
|
+
canvas.height = height;
|
|
200
|
+
gl.viewport(0, 0, width, height);
|
|
201
|
+
}
|
|
202
|
+
return canvas.clientWidth > 0 && drawFrame !== null;
|
|
203
|
+
};
|
|
204
|
+
destroyResources = (lose) => {
|
|
205
|
+
gl.deleteBuffer(buffer);
|
|
206
|
+
gl.deleteProgram(program);
|
|
207
|
+
drawFrame = null;
|
|
208
|
+
refreshPalette = null;
|
|
209
|
+
sizeAndDraw = null;
|
|
210
|
+
destroyResources = null;
|
|
211
|
+
if (lose) gl.getExtension("WEBGL_lose_context")?.loseContext();
|
|
212
|
+
};
|
|
213
|
+
return true;
|
|
214
|
+
};
|
|
215
|
+
if (!buildResources()) return void 0;
|
|
216
|
+
const renderOnce = () => {
|
|
217
|
+
if (!sizeAndDraw?.()) return;
|
|
218
|
+
drawFrame?.(performance.now() / 1e3);
|
|
219
|
+
};
|
|
220
|
+
const syncLoop = (milliseconds) => {
|
|
221
|
+
frameId = requestAnimationFrame(syncLoop);
|
|
222
|
+
if (sizeAndDraw?.()) drawFrame?.(milliseconds / 1e3);
|
|
223
|
+
};
|
|
224
|
+
const updateLoop = () => {
|
|
225
|
+
if (inView && !document.hidden && !reducedMotion.matches && drawFrame !== null) {
|
|
226
|
+
if (frameId === 0) frameId = requestAnimationFrame(syncLoop);
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
if (frameId !== 0) {
|
|
230
|
+
cancelAnimationFrame(frameId);
|
|
231
|
+
frameId = 0;
|
|
232
|
+
}
|
|
233
|
+
if (!document.hidden) renderOnce();
|
|
234
|
+
};
|
|
235
|
+
const resizeObserver = new ResizeObserver(() => {
|
|
236
|
+
if (frameId === 0) renderOnce();
|
|
237
|
+
});
|
|
238
|
+
resizeObserver.observe(canvas);
|
|
239
|
+
const intersectionObserver = new IntersectionObserver(([entry]) => {
|
|
240
|
+
inView = entry.isIntersecting;
|
|
241
|
+
updateLoop();
|
|
242
|
+
});
|
|
243
|
+
intersectionObserver.observe(canvas);
|
|
244
|
+
const handleVisibilityChange = () => updateLoop();
|
|
245
|
+
document.addEventListener("visibilitychange", handleVisibilityChange);
|
|
246
|
+
const handleMotionPreferenceChange = () => updateLoop();
|
|
247
|
+
reducedMotion.addEventListener("change", handleMotionPreferenceChange);
|
|
248
|
+
repaintRef.current = () => {
|
|
249
|
+
refreshPalette?.();
|
|
250
|
+
if (frameId === 0) renderOnce();
|
|
251
|
+
};
|
|
252
|
+
const handleContextLost = (event) => {
|
|
253
|
+
event.preventDefault();
|
|
254
|
+
if (frameId !== 0) {
|
|
255
|
+
cancelAnimationFrame(frameId);
|
|
256
|
+
frameId = 0;
|
|
257
|
+
}
|
|
258
|
+
setCanvasEpoch((value) => value + 1);
|
|
259
|
+
};
|
|
260
|
+
canvas.addEventListener("webglcontextlost", handleContextLost);
|
|
261
|
+
updateLoop();
|
|
262
|
+
return () => {
|
|
263
|
+
if (frameId !== 0) cancelAnimationFrame(frameId);
|
|
264
|
+
frameId = 0;
|
|
265
|
+
resizeObserver.disconnect();
|
|
266
|
+
intersectionObserver.disconnect();
|
|
267
|
+
repaintRef.current = void 0;
|
|
268
|
+
document.removeEventListener("visibilitychange", handleVisibilityChange);
|
|
269
|
+
reducedMotion.removeEventListener("change", handleMotionPreferenceChange);
|
|
270
|
+
canvas.removeEventListener("webglcontextlost", handleContextLost);
|
|
271
|
+
if (!canvas.isConnected) destroyResources?.(true);
|
|
272
|
+
else destroyResources?.(false);
|
|
273
|
+
};
|
|
274
|
+
}, [canvasEpoch]);
|
|
275
|
+
return /* @__PURE__ */ jsx("div", {
|
|
276
|
+
"aria-hidden": true,
|
|
277
|
+
className: cx(styles.root, className),
|
|
278
|
+
"data-ready": ready ? "" : void 0,
|
|
279
|
+
style: {
|
|
280
|
+
"--fluid-stop-a": palette[0],
|
|
281
|
+
"--fluid-stop-b": palette[1],
|
|
282
|
+
"--fluid-stop-c": palette[2],
|
|
283
|
+
...style
|
|
284
|
+
},
|
|
285
|
+
...rest,
|
|
286
|
+
children: /* @__PURE__ */ jsx("canvas", { ref: canvasRef }, canvasEpoch)
|
|
287
|
+
});
|
|
288
|
+
});
|
|
289
|
+
FluidGradient.displayName = "FluidGradient";
|
|
290
|
+
//#endregion
|
|
291
|
+
export { FluidGradient as default };
|
|
292
|
+
|
|
293
|
+
//# sourceMappingURL=FluidGradient.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FluidGradient.mjs","names":[],"sources":["../../../src/awesome/FluidGradient/FluidGradient.tsx"],"sourcesContent":["'use client';\n\nimport { cx, useThemeMode } from 'antd-style';\nimport { type CSSProperties, memo, useEffect, useRef, useState } from 'react';\n\nimport { LANDING_PALETTE_DARK, LANDING_PALETTE_LIGHT } from '@/awesome/landingTokens';\n\nimport { styles } from './style';\nimport type { FluidGradientProps } from './type';\n\nconst VERTEX_SHADER = `#version 300 es\nin vec2 aPos;\nvoid main() {\n gl_Position = vec4(aPos, 0.0, 1.0);\n}`;\n\nconst FRAGMENT_SHADER = `#version 300 es\nprecision highp float;\n\nuniform vec2 uRes;\nuniform float uTime;\nuniform vec3 uStopA;\nuniform vec3 uStopB;\nuniform vec3 uStopC;\nuniform float uIntensity;\n\nout vec4 fragColor;\n\nfloat hash(vec2 p) {\n p = fract(p * vec2(234.34, 435.345));\n p += dot(p, p + 34.23);\n return fract(p.x * p.y);\n}\n\nfloat noise(vec2 p) {\n vec2 i = floor(p);\n vec2 f = fract(p);\n vec2 u = f * f * (3.0 - 2.0 * f);\n float a = hash(i);\n float b = hash(i + vec2(1.0, 0.0));\n float c = hash(i + vec2(0.0, 1.0));\n float d = hash(i + vec2(1.0, 1.0));\n return mix(mix(a, b, u.x), mix(c, d, u.x), u.y);\n}\n\nfloat fbm(vec2 p) {\n float value = 0.0;\n float amplitude = 0.5;\n for (int i = 0; i < 4; i++) {\n value += amplitude * noise(p);\n p = mat2(0.8, 0.6, -0.6, 0.8) * p * 2.0 + vec2(3.7, 1.3);\n amplitude *= 0.5;\n }\n return value;\n}\n\nvoid main() {\n vec2 uv = gl_FragCoord.xy / uRes;\n vec2 p = vec2(uv.x * uRes.x / uRes.y, uv.y);\n\n float t = uTime * 0.05;\n\n vec2 q = vec2(fbm(p * 1.4 + t * 0.35), fbm(p * 1.4 - t * 0.28 + 5.2));\n vec2 r = vec2(\n fbm(p * 1.4 + 2.6 * q + vec2(1.7, 9.2) + t * 0.18),\n fbm(p * 1.4 + 2.6 * q + vec2(8.3, 2.8) - t * 0.12)\n );\n float field = fbm(p * 1.4 + 2.6 * r);\n\n vec3 color = mix(uStopA, uStopB, clamp(field * field * 2.4, 0.0, 1.0));\n color = mix(color, uStopC, clamp(dot(q, vec2(0.7)) - 0.25, 0.0, 1.0));\n\n float fade = smoothstep(0.02, 0.85, uv.y);\n float alpha = fade * fade * uIntensity * smoothstep(0.14, 0.66, field);\n\n fragColor = vec4(color * alpha, alpha);\n}`;\n\nconst hexToRgb = (hex: string): [number, number, number] => {\n const value = hex.replace('#', '');\n const full =\n value.length === 3\n ? value\n .split('')\n .map((char) => char + char)\n .join('')\n : value.slice(0, 6);\n const channel = (offset: number) => Number.parseInt(full.slice(offset, offset + 2), 16) / 255;\n return [channel(0), channel(2), channel(4)];\n};\n\nconst FluidGradient = memo<FluidGradientProps>(\n ({ className, colors, intensity = 0.45, speed = 1, style, ...rest }) => {\n const { isDarkMode } = useThemeMode();\n const canvasRef = useRef<HTMLCanvasElement>(null);\n const [ready, setReady] = useState(false);\n const [canvasEpoch, setCanvasEpoch] = useState(0);\n const palette = colors ?? (isDarkMode ? LANDING_PALETTE_DARK : LANDING_PALETTE_LIGHT);\n const paletteRef = useRef({ colors: palette, intensity });\n const speedRef = useRef(speed);\n const repaintRef = useRef<(() => void) | undefined>(undefined);\n\n useEffect(() => {\n paletteRef.current = { colors: palette, intensity };\n speedRef.current = speed;\n repaintRef.current?.();\n }, [palette[0], palette[1], palette[2], intensity, speed]);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n if (!canvas) return undefined;\n\n const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)');\n\n let frameId = 0;\n let inView = true;\n let readySent = false;\n let drawFrame: ((seconds: number) => void) | null = null;\n let refreshPalette: (() => void) | null = null;\n let sizeAndDraw: (() => boolean) | null = null;\n let destroyResources: ((lose: boolean) => void) | null = null;\n\n const buildResources = () => {\n const gl = canvas.getContext('webgl2', {\n alpha: true,\n antialias: false,\n depth: false,\n stencil: false,\n powerPreference: 'low-power',\n });\n if (!gl) return false;\n\n const compileShader = (type: number, source: string) => {\n const shader = gl.createShader(type);\n if (!shader) return null;\n gl.shaderSource(shader, source);\n gl.compileShader(shader);\n if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {\n gl.deleteShader(shader);\n return null;\n }\n return shader;\n };\n\n const vertexShader = compileShader(gl.VERTEX_SHADER, VERTEX_SHADER);\n const fragmentShader = compileShader(gl.FRAGMENT_SHADER, FRAGMENT_SHADER);\n if (!vertexShader || !fragmentShader) return false;\n\n const program = gl.createProgram();\n if (!program) return false;\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.linkProgram(program);\n gl.deleteShader(vertexShader);\n gl.deleteShader(fragmentShader);\n if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n gl.deleteProgram(program);\n return false;\n }\n gl.useProgram(program);\n\n const buffer = gl.createBuffer();\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([-1, -1, 3, -1, -1, 3]), gl.STATIC_DRAW);\n const position = gl.getAttribLocation(program, 'aPos');\n gl.enableVertexAttribArray(position);\n gl.vertexAttribPointer(position, 2, gl.FLOAT, false, 0, 0);\n\n const timeLocation = gl.getUniformLocation(program, 'uTime');\n const stopLocations = ['uStopA', 'uStopB', 'uStopC'].map((name) =>\n gl.getUniformLocation(program, name),\n );\n\n const intensityLocation = gl.getUniformLocation(program, 'uIntensity');\n\n refreshPalette = () => {\n const { colors: stops, intensity: peak } = paletteRef.current;\n stops.map(hexToRgb).forEach((stop, index) => {\n const location = stopLocations[index];\n if (location) gl.uniform3f(location, stop[0], stop[1], stop[2]);\n });\n gl.uniform1f(intensityLocation, peak);\n };\n refreshPalette();\n\n drawFrame = (seconds: number) => {\n gl.uniform1f(timeLocation, seconds * speedRef.current);\n gl.drawArrays(gl.TRIANGLES, 0, 3);\n if (!readySent) {\n readySent = true;\n setReady(true);\n }\n };\n\n sizeAndDraw = () => {\n const dpr = Math.min(window.devicePixelRatio || 1, 1.5);\n const width = Math.max(1, Math.round(canvas.clientWidth * dpr));\n const height = Math.max(1, Math.round(canvas.clientHeight * dpr));\n if (canvas.width !== width || canvas.height !== height) {\n canvas.width = width;\n canvas.height = height;\n gl.viewport(0, 0, width, height);\n }\n return canvas.clientWidth > 0 && drawFrame !== null;\n };\n\n destroyResources = (lose: boolean) => {\n gl.deleteBuffer(buffer);\n gl.deleteProgram(program);\n drawFrame = null;\n refreshPalette = null;\n sizeAndDraw = null;\n destroyResources = null;\n if (lose) gl.getExtension('WEBGL_lose_context')?.loseContext();\n };\n\n return true;\n };\n\n if (!buildResources()) return undefined;\n\n const renderOnce = () => {\n if (!sizeAndDraw?.()) return;\n drawFrame?.(performance.now() / 1000);\n };\n\n const syncLoop = (milliseconds: number) => {\n frameId = requestAnimationFrame(syncLoop);\n if (sizeAndDraw?.()) drawFrame?.(milliseconds / 1000);\n };\n\n const updateLoop = () => {\n const shouldAnimate =\n inView && !document.hidden && !reducedMotion.matches && drawFrame !== null;\n\n if (shouldAnimate) {\n if (frameId === 0) frameId = requestAnimationFrame(syncLoop);\n return;\n }\n\n if (frameId !== 0) {\n cancelAnimationFrame(frameId);\n frameId = 0;\n }\n\n if (!document.hidden) renderOnce();\n };\n\n const resizeObserver = new ResizeObserver(() => {\n if (frameId === 0) renderOnce();\n });\n resizeObserver.observe(canvas);\n\n const intersectionObserver = new IntersectionObserver(([entry]) => {\n inView = entry.isIntersecting;\n updateLoop();\n });\n intersectionObserver.observe(canvas);\n\n const handleVisibilityChange = () => updateLoop();\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n const handleMotionPreferenceChange = () => updateLoop();\n reducedMotion.addEventListener('change', handleMotionPreferenceChange);\n\n repaintRef.current = () => {\n refreshPalette?.();\n if (frameId === 0) renderOnce();\n };\n\n const handleContextLost = (event: Event) => {\n event.preventDefault();\n if (frameId !== 0) {\n cancelAnimationFrame(frameId);\n frameId = 0;\n }\n setCanvasEpoch((value) => value + 1);\n };\n canvas.addEventListener('webglcontextlost', handleContextLost);\n\n updateLoop();\n\n return () => {\n if (frameId !== 0) cancelAnimationFrame(frameId);\n frameId = 0;\n resizeObserver.disconnect();\n intersectionObserver.disconnect();\n repaintRef.current = undefined;\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n reducedMotion.removeEventListener('change', handleMotionPreferenceChange);\n canvas.removeEventListener('webglcontextlost', handleContextLost);\n if (!canvas.isConnected) destroyResources?.(true);\n else destroyResources?.(false);\n };\n }, [canvasEpoch]);\n\n return (\n <div\n aria-hidden\n className={cx(styles.root, className)}\n data-ready={ready ? '' : undefined}\n style={\n {\n '--fluid-stop-a': palette[0],\n '--fluid-stop-b': palette[1],\n '--fluid-stop-c': palette[2],\n ...style,\n } as CSSProperties\n }\n {...rest}\n >\n <canvas key={canvasEpoch} ref={canvasRef} />\n </div>\n );\n },\n);\n\nFluidGradient.displayName = 'FluidGradient';\n\nexport default FluidGradient;\n"],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { createStaticStyles } from "antd-style";
|
|
2
|
+
//#region src/awesome/FluidGradient/style.ts
|
|
3
|
+
const styles = createStaticStyles(({ css }) => ({ root: css`
|
|
4
|
+
pointer-events: none;
|
|
5
|
+
|
|
6
|
+
position: absolute;
|
|
7
|
+
z-index: 0;
|
|
8
|
+
inset: 0;
|
|
9
|
+
|
|
10
|
+
/* Soft CSS fallback so the hero never flashes empty white while WebGL boots. */
|
|
11
|
+
background:
|
|
12
|
+
radial-gradient(
|
|
13
|
+
ellipse 80% 55% at 50% 0%,
|
|
14
|
+
color-mix(in srgb, var(--fluid-stop-a, #7c5cff) 28%, transparent),
|
|
15
|
+
transparent 70%
|
|
16
|
+
),
|
|
17
|
+
radial-gradient(
|
|
18
|
+
ellipse 60% 45% at 85% 20%,
|
|
19
|
+
color-mix(in srgb, var(--fluid-stop-b, #d6549e) 22%, transparent),
|
|
20
|
+
transparent 65%
|
|
21
|
+
),
|
|
22
|
+
radial-gradient(
|
|
23
|
+
ellipse 55% 40% at 15% 30%,
|
|
24
|
+
color-mix(in srgb, var(--fluid-stop-c, #f0885f) 18%, transparent),
|
|
25
|
+
transparent 60%
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
canvas {
|
|
29
|
+
display: block;
|
|
30
|
+
|
|
31
|
+
inline-size: 100%;
|
|
32
|
+
block-size: 100%;
|
|
33
|
+
|
|
34
|
+
opacity: 0;
|
|
35
|
+
|
|
36
|
+
transition: opacity 700ms ease;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
&[data-ready] canvas {
|
|
40
|
+
opacity: 1;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@media (prefers-reduced-motion: reduce) {
|
|
44
|
+
canvas {
|
|
45
|
+
transition-duration: 0.01ms;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
` }));
|
|
49
|
+
//#endregion
|
|
50
|
+
export { styles };
|
|
51
|
+
|
|
52
|
+
//# sourceMappingURL=style.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.mjs","names":[],"sources":["../../../src/awesome/FluidGradient/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\n\nexport const styles = createStaticStyles(({ css }) => ({\n root: css`\n pointer-events: none;\n\n position: absolute;\n z-index: 0;\n inset: 0;\n\n /* Soft CSS fallback so the hero never flashes empty white while WebGL boots. */\n background:\n radial-gradient(\n ellipse 80% 55% at 50% 0%,\n color-mix(in srgb, var(--fluid-stop-a, #7c5cff) 28%, transparent),\n transparent 70%\n ),\n radial-gradient(\n ellipse 60% 45% at 85% 20%,\n color-mix(in srgb, var(--fluid-stop-b, #d6549e) 22%, transparent),\n transparent 65%\n ),\n radial-gradient(\n ellipse 55% 40% at 15% 30%,\n color-mix(in srgb, var(--fluid-stop-c, #f0885f) 18%, transparent),\n transparent 60%\n );\n\n canvas {\n display: block;\n\n inline-size: 100%;\n block-size: 100%;\n\n opacity: 0;\n\n transition: opacity 700ms ease;\n }\n\n &[data-ready] canvas {\n opacity: 1;\n }\n\n @media (prefers-reduced-motion: reduce) {\n canvas {\n transition-duration: 0.01ms;\n }\n }\n `,\n}));\n"],"mappings":";;AAEA,MAAa,SAAS,oBAAoB,EAAE,WAAW,EACrD,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8CX,EAAE"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { DivProps } from "../../types/index.mjs";
|
|
2
|
+
import { LandingPalette } from "../landingTokens.mjs";
|
|
3
|
+
//#region src/awesome/FluidGradient/type.d.ts
|
|
4
|
+
interface FluidGradientProps extends DivProps {
|
|
5
|
+
/**
|
|
6
|
+
* Three color stops blended by the shader. Defaults to the landing palette for the current theme.
|
|
7
|
+
*/
|
|
8
|
+
colors?: LandingPalette;
|
|
9
|
+
/**
|
|
10
|
+
* Peak opacity of the texture, from 0 to 1.
|
|
11
|
+
* @default 0.45
|
|
12
|
+
*/
|
|
13
|
+
intensity?: number;
|
|
14
|
+
/**
|
|
15
|
+
* Animation speed multiplier. The texture renders a still frame when reduced motion is preferred.
|
|
16
|
+
* @default 1
|
|
17
|
+
*/
|
|
18
|
+
speed?: number;
|
|
19
|
+
}
|
|
20
|
+
//#endregion
|
|
21
|
+
export { FluidGradientProps };
|
|
22
|
+
//# sourceMappingURL=type.d.mts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { InstallBannerProps } from "./type.mjs";
|
|
2
|
+
//#region src/awesome/InstallBanner/InstallBanner.d.ts
|
|
3
|
+
declare const InstallBanner: import("react").NamedExoticComponent<InstallBannerProps>;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { InstallBanner as default };
|
|
6
|
+
//# sourceMappingURL=InstallBanner.d.mts.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import Snippet from "../../Snippet/Snippet.mjs";
|
|
3
|
+
import { styles } from "./style.mjs";
|
|
4
|
+
import { memo } from "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { cx } from "antd-style";
|
|
7
|
+
//#region src/awesome/InstallBanner/InstallBanner.tsx
|
|
8
|
+
const InstallBanner = memo(({ className, command, footnote, prefix = "$", title, ...rest }) => /* @__PURE__ */ jsx("section", {
|
|
9
|
+
className: cx(styles.root, className),
|
|
10
|
+
...rest,
|
|
11
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
12
|
+
className: styles.content,
|
|
13
|
+
children: [
|
|
14
|
+
title && /* @__PURE__ */ jsx("h2", {
|
|
15
|
+
className: styles.title,
|
|
16
|
+
children: title
|
|
17
|
+
}),
|
|
18
|
+
/* @__PURE__ */ jsx(Snippet, {
|
|
19
|
+
className: styles.snippet,
|
|
20
|
+
language: "bash",
|
|
21
|
+
prefix,
|
|
22
|
+
children: command
|
|
23
|
+
}),
|
|
24
|
+
footnote && /* @__PURE__ */ jsx("p", {
|
|
25
|
+
className: styles.footnote,
|
|
26
|
+
children: footnote
|
|
27
|
+
})
|
|
28
|
+
]
|
|
29
|
+
})
|
|
30
|
+
}));
|
|
31
|
+
InstallBanner.displayName = "InstallBanner";
|
|
32
|
+
//#endregion
|
|
33
|
+
export { InstallBanner as default };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=InstallBanner.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstallBanner.mjs","names":[],"sources":["../../../src/awesome/InstallBanner/InstallBanner.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { memo } from 'react';\n\nimport Snippet from '@/Snippet';\n\nimport { styles } from './style';\nimport type { InstallBannerProps } from './type';\n\nconst InstallBanner = memo<InstallBannerProps>(\n ({ className, command, footnote, prefix = '$', title, ...rest }) => (\n <section className={cx(styles.root, className)} {...rest}>\n <div className={styles.content}>\n {title && <h2 className={styles.title}>{title}</h2>}\n <Snippet className={styles.snippet} language={'bash'} prefix={prefix}>\n {command}\n </Snippet>\n {footnote && <p className={styles.footnote}>{footnote}</p>}\n </div>\n </section>\n ),\n);\n\nInstallBanner.displayName = 'InstallBanner';\n\nexport default InstallBanner;\n"],"mappings":";;;;;;;AAUA,MAAM,gBAAgB,MACnB,EAAE,WAAW,SAAS,UAAU,SAAS,KAAK,OAAO,GAAG,WACvD,oBAAC,WAAD;CAAS,WAAW,GAAG,OAAO,MAAM,SAAS;CAAG,GAAI;CAClD,UAAA,qBAAC,OAAD;EAAK,WAAW,OAAO;EAAvB,UAAA;GACG,SAAS,oBAAC,MAAD;IAAI,WAAW,OAAO;IAAQ,UAAA;GAAU,CAAA;GAClD,oBAAC,SAAD;IAAS,WAAW,OAAO;IAAS,UAAU;IAAgB;IAC3D,UAAA;GACM,CAAA;GACR,YAAY,oBAAC,KAAD;IAAG,WAAW,OAAO;IAAW,UAAA;GAAY,CAAA;EACtD;;AACE,CAAA,CAEb;AAEA,cAAc,cAAc"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { createStaticStyles } from "antd-style";
|
|
2
|
+
//#region src/awesome/InstallBanner/style.ts
|
|
3
|
+
const styles = createStaticStyles(({ css, cssVar }) => ({
|
|
4
|
+
footnote: css`
|
|
5
|
+
margin: 0;
|
|
6
|
+
font-size: ${cssVar.fontSizeSM};
|
|
7
|
+
color: ${cssVar.colorTextTertiary};
|
|
8
|
+
|
|
9
|
+
a {
|
|
10
|
+
color: ${cssVar.colorPrimary};
|
|
11
|
+
text-decoration: none;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
a:hover {
|
|
15
|
+
text-decoration: underline;
|
|
16
|
+
}
|
|
17
|
+
`,
|
|
18
|
+
content: css`
|
|
19
|
+
display: flex;
|
|
20
|
+
flex-direction: column;
|
|
21
|
+
gap: 20px;
|
|
22
|
+
align-items: center;
|
|
23
|
+
`,
|
|
24
|
+
root: css`
|
|
25
|
+
overflow: hidden;
|
|
26
|
+
padding-block: clamp(56px, 9vh, 88px);
|
|
27
|
+
border-block-start: 1px solid ${cssVar.colorBorderSecondary};
|
|
28
|
+
text-align: center;
|
|
29
|
+
`,
|
|
30
|
+
snippet: css`
|
|
31
|
+
border-radius: 999px;
|
|
32
|
+
`,
|
|
33
|
+
title: css`
|
|
34
|
+
margin: 0;
|
|
35
|
+
|
|
36
|
+
font-size: clamp(22px, 3vw, 28px);
|
|
37
|
+
font-weight: 650;
|
|
38
|
+
color: ${cssVar.colorText};
|
|
39
|
+
text-wrap: balance;
|
|
40
|
+
letter-spacing: -0.02em;
|
|
41
|
+
`
|
|
42
|
+
}));
|
|
43
|
+
//#endregion
|
|
44
|
+
export { styles };
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=style.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.mjs","names":[],"sources":["../../../src/awesome/InstallBanner/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\n\nexport const styles = createStaticStyles(({ css, cssVar }) => ({\n footnote: css`\n margin: 0;\n font-size: ${cssVar.fontSizeSM};\n color: ${cssVar.colorTextTertiary};\n\n a {\n color: ${cssVar.colorPrimary};\n text-decoration: none;\n }\n\n a:hover {\n text-decoration: underline;\n }\n `,\n content: css`\n display: flex;\n flex-direction: column;\n gap: 20px;\n align-items: center;\n `,\n root: css`\n overflow: hidden;\n padding-block: clamp(56px, 9vh, 88px);\n border-block-start: 1px solid ${cssVar.colorBorderSecondary};\n text-align: center;\n `,\n snippet: css`\n border-radius: 999px;\n `,\n title: css`\n margin: 0;\n\n font-size: clamp(22px, 3vw, 28px);\n font-weight: 650;\n color: ${cssVar.colorText};\n text-wrap: balance;\n letter-spacing: -0.02em;\n `,\n}));\n"],"mappings":";;AAEA,MAAa,SAAS,oBAAoB,EAAE,KAAK,cAAc;CAC7D,UAAU,GAAG;;iBAEE,OAAO,WAAW;aACtB,OAAO,kBAAkB;;;eAGvB,OAAO,aAAa;;;;;;;;CAQjC,SAAS,GAAG;;;;;;CAMZ,MAAM,GAAG;;;oCAGyB,OAAO,qBAAqB;;;CAG9D,SAAS,GAAG;;;CAGZ,OAAO,GAAG;;;;;aAKC,OAAO,UAAU;;;;AAI9B,EAAE"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DivProps } from "../../types/index.mjs";
|
|
2
|
+
import { ReactNode } from "react";
|
|
3
|
+
//#region src/awesome/InstallBanner/type.d.ts
|
|
4
|
+
interface InstallBannerProps extends Omit<DivProps, 'title'> {
|
|
5
|
+
/** The shell command users copy, e.g. `pnpm add @lobehub/ui`. */
|
|
6
|
+
command: string;
|
|
7
|
+
/** Muted line under the command, e.g. license and a docs link. */
|
|
8
|
+
footnote?: ReactNode;
|
|
9
|
+
/**
|
|
10
|
+
* Shell prompt shown before the command.
|
|
11
|
+
* @default '$'
|
|
12
|
+
*/
|
|
13
|
+
prefix?: string;
|
|
14
|
+
title?: ReactNode;
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { InstallBannerProps };
|
|
18
|
+
//# sourceMappingURL=type.d.mts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { LandingHeroProps } from "./type.mjs";
|
|
2
|
+
//#region src/awesome/LandingHero/LandingHero.d.ts
|
|
3
|
+
declare const LandingHero: import("react").NamedExoticComponent<LandingHeroProps>;
|
|
4
|
+
//#endregion
|
|
5
|
+
export { LandingHero as default };
|
|
6
|
+
//# sourceMappingURL=LandingHero.d.mts.map
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { LandingActions } from "../landingActions.mjs";
|
|
3
|
+
import { styles } from "./style.mjs";
|
|
4
|
+
import { memo } from "react";
|
|
5
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
import { cx } from "antd-style";
|
|
7
|
+
//#region src/awesome/LandingHero/LandingHero.tsx
|
|
8
|
+
const LandingHero = memo(({ accent, actions, aside, badge, children, className, description, onNavigate, renderLink, title, ...rest }) => /* @__PURE__ */ jsx("section", {
|
|
9
|
+
className: cx(styles.root, className),
|
|
10
|
+
"data-layout": aside ? "split" : "center",
|
|
11
|
+
...rest,
|
|
12
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
13
|
+
className: styles.content,
|
|
14
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
15
|
+
className: styles.main,
|
|
16
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
17
|
+
className: styles.intro,
|
|
18
|
+
children: [
|
|
19
|
+
badge && /* @__PURE__ */ jsx("div", {
|
|
20
|
+
className: styles.badge,
|
|
21
|
+
children: badge
|
|
22
|
+
}),
|
|
23
|
+
/* @__PURE__ */ jsxs("h1", {
|
|
24
|
+
className: styles.title,
|
|
25
|
+
children: [title, accent && /* @__PURE__ */ jsxs(Fragment$1, { children: [" ", /* @__PURE__ */ jsx("span", {
|
|
26
|
+
className: styles.accent,
|
|
27
|
+
children: accent
|
|
28
|
+
})] })]
|
|
29
|
+
}),
|
|
30
|
+
description && /* @__PURE__ */ jsx("p", {
|
|
31
|
+
className: styles.description,
|
|
32
|
+
children: description
|
|
33
|
+
}),
|
|
34
|
+
actions && actions.length > 0 && /* @__PURE__ */ jsx(LandingActions, {
|
|
35
|
+
actions,
|
|
36
|
+
className: styles.actions,
|
|
37
|
+
renderLink,
|
|
38
|
+
onNavigate
|
|
39
|
+
})
|
|
40
|
+
]
|
|
41
|
+
}), aside && /* @__PURE__ */ jsx("div", {
|
|
42
|
+
className: styles.aside,
|
|
43
|
+
children: aside
|
|
44
|
+
})]
|
|
45
|
+
}), children && /* @__PURE__ */ jsx("div", {
|
|
46
|
+
className: styles.extra,
|
|
47
|
+
children
|
|
48
|
+
})]
|
|
49
|
+
})
|
|
50
|
+
}));
|
|
51
|
+
LandingHero.displayName = "LandingHero";
|
|
52
|
+
//#endregion
|
|
53
|
+
export { LandingHero as default };
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=LandingHero.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LandingHero.mjs","names":[],"sources":["../../../src/awesome/LandingHero/LandingHero.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { memo } from 'react';\n\nimport { LandingActions } from '@/awesome/landingActions';\n\nimport { styles } from './style';\nimport type { LandingHeroProps } from './type';\n\nconst LandingHero = memo<LandingHeroProps>(\n ({\n accent,\n actions,\n aside,\n badge,\n children,\n className,\n description,\n onNavigate,\n renderLink,\n title,\n ...rest\n }) => (\n <section\n className={cx(styles.root, className)}\n data-layout={aside ? 'split' : 'center'}\n {...rest}\n >\n <div className={styles.content}>\n <div className={styles.main}>\n <div className={styles.intro}>\n {badge && <div className={styles.badge}>{badge}</div>}\n <h1 className={styles.title}>\n {title}\n {accent && (\n <>\n {' '}\n <span className={styles.accent}>{accent}</span>\n </>\n )}\n </h1>\n {description && <p className={styles.description}>{description}</p>}\n {actions && actions.length > 0 && (\n <LandingActions\n actions={actions}\n className={styles.actions}\n renderLink={renderLink}\n onNavigate={onNavigate}\n />\n )}\n </div>\n {aside && <div className={styles.aside}>{aside}</div>}\n </div>\n {children && <div className={styles.extra}>{children}</div>}\n </div>\n </section>\n ),\n);\n\nLandingHero.displayName = 'LandingHero';\n\nexport default LandingHero;\n"],"mappings":";;;;;;;AAUA,MAAM,cAAc,MACjB,EACC,QACA,SACA,OACA,OACA,UACA,WACA,aACA,YACA,YACA,OACA,GAAG,WAEH,oBAAC,WAAD;CACE,WAAW,GAAG,OAAO,MAAM,SAAS;CACpC,eAAa,QAAQ,UAAU;CAC/B,GAAI;CAEJ,UAAA,qBAAC,OAAD;EAAK,WAAW,OAAO;EAAvB,UAAA,CACE,qBAAC,OAAD;GAAK,WAAW,OAAO;GAAvB,UAAA,CACE,qBAAC,OAAD;IAAK,WAAW,OAAO;IAAvB,UAAA;KACG,SAAS,oBAAC,OAAD;MAAK,WAAW,OAAO;MAAQ,UAAA;KAAW,CAAA;KACpD,qBAAC,MAAD;MAAI,WAAW,OAAO;MAAtB,UAAA,CACG,OACA,UACC,qBAAA,YAAA,EAAA,UAAA,CACG,KACD,oBAAC,QAAD;OAAM,WAAW,OAAO;OAAS,UAAA;MAAa,CAAA,CAC9C,EAAA,CAAA,CAEF;;KACH,eAAe,oBAAC,KAAD;MAAG,WAAW,OAAO;MAAc,UAAA;KAAe,CAAA;KACjE,WAAW,QAAQ,SAAS,KAC3B,oBAAC,gBAAD;MACW;MACT,WAAW,OAAO;MACN;MACA;KACb,CAAA;IAEA;GACJ,CAAA,GAAA,SAAS,oBAAC,OAAD;IAAK,WAAW,OAAO;IAAQ,UAAA;GAAW,CAAA,CACjD;EACJ,CAAA,GAAA,YAAY,oBAAC,OAAD;GAAK,WAAW,OAAO;GAAQ;EAAc,CAAA,CACvD;;AACE,CAAA,CAEb;AAEA,YAAY,cAAc"}
|