react-marketing-ui 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/accordion.js +1 -1
- package/dist/accordion.js.map +1 -1
- package/dist/accordion.mjs +222 -2
- package/dist/accordion.mjs.map +1 -1
- package/dist/action-swap.js +1 -0
- package/dist/action-swap.mjs +77 -3
- package/dist/action-swap.mjs.map +1 -1
- package/dist/animated-beam.js +1 -0
- package/dist/animated-beam.mjs +127 -2
- package/dist/animated-beam.mjs.map +1 -1
- package/dist/button.js +1 -1
- package/dist/button.js.map +1 -1
- package/dist/button.mjs +115 -2
- package/dist/button.mjs.map +1 -1
- package/dist/card.js +1 -2
- package/dist/card.js.map +1 -1
- package/dist/card.mjs +135 -3
- package/dist/card.mjs.map +1 -1
- package/dist/dia-text-reveal.js +1 -0
- package/dist/dia-text-reveal.mjs +331 -2
- package/dist/dia-text-reveal.mjs.map +1 -1
- package/dist/elevated-input.js +1 -1
- package/dist/elevated-input.js.map +1 -1
- package/dist/elevated-input.mjs +48 -2
- package/dist/elevated-input.mjs.map +1 -1
- package/dist/fade-in.js +1 -0
- package/dist/fade-in.mjs +84 -2
- package/dist/fade-in.mjs.map +1 -1
- package/dist/feature-card.js +1 -1
- package/dist/feature-card.js.map +1 -1
- package/dist/feature-card.mjs +34 -2
- package/dist/feature-card.mjs.map +1 -1
- package/dist/flowchart-parts.js +1 -1
- package/dist/flowchart-parts.js.map +1 -1
- package/dist/flowchart-parts.mjs +91 -2
- package/dist/flowchart-parts.mjs.map +1 -1
- package/dist/glossy-button.js +1 -1
- package/dist/glossy-button.js.map +1 -1
- package/dist/glossy-button.mjs +82 -2
- package/dist/glossy-button.mjs.map +1 -1
- package/dist/grainient.js +1 -0
- package/dist/grainient.mjs +327 -2
- package/dist/grainient.mjs.map +1 -1
- package/dist/highlighter.js +1 -0
- package/dist/highlighter.mjs +122 -3
- package/dist/highlighter.mjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2642 -32
- package/dist/index.mjs.map +1 -1
- package/dist/input.js +1 -0
- package/dist/input.mjs +107 -2
- package/dist/input.mjs.map +1 -1
- package/dist/lib/breakpoints.js +1 -1
- package/dist/lib/breakpoints.js.map +1 -1
- package/dist/lib/breakpoints.mjs +34 -1
- package/dist/lib/breakpoints.mjs.map +1 -1
- package/dist/lib/cn.js +1 -1
- package/dist/lib/cn.js.map +1 -1
- package/dist/lib/cn.mjs +17 -1
- package/dist/lib/cn.mjs.map +1 -1
- package/dist/lib/ease.js +1 -0
- package/dist/lib/ease.mjs +9 -1
- package/dist/lib/ease.mjs.map +1 -1
- package/dist/lib/surface.js +1 -0
- package/dist/lib/surface.mjs +37 -1
- package/dist/lib/surface.mjs.map +1 -1
- package/dist/lib/use-media-query.js +1 -0
- package/dist/lib/use-media-query.mjs +16 -1
- package/dist/lib/use-media-query.mjs.map +1 -1
- package/dist/liquid-metal.js +1 -0
- package/dist/liquid-metal.mjs +40 -2
- package/dist/liquid-metal.mjs.map +1 -1
- package/dist/navigation-menu-icons.js +1 -1
- package/dist/navigation-menu-icons.js.map +1 -1
- package/dist/navigation-menu-icons.mjs +36 -1
- package/dist/navigation-menu-icons.mjs.map +1 -1
- package/dist/navigation-menu-styles.js +1 -1
- package/dist/navigation-menu-styles.js.map +1 -1
- package/dist/navigation-menu-styles.mjs +11 -1
- package/dist/navigation-menu-styles.mjs.map +1 -1
- package/dist/navigation-menu.js +1 -2
- package/dist/navigation-menu.js.map +1 -1
- package/dist/navigation-menu.mjs +350 -5
- package/dist/navigation-menu.mjs.map +1 -1
- package/dist/password-input.js +1 -0
- package/dist/password-input.mjs +171 -3
- package/dist/password-input.mjs.map +1 -1
- package/dist/rainbow-button.js +1 -0
- package/dist/rainbow-button.mjs +45 -2
- package/dist/rainbow-button.mjs.map +1 -1
- package/dist/range-slider.js +1 -0
- package/dist/range-slider.mjs +82 -1
- package/dist/range-slider.mjs.map +1 -1
- package/dist/rolling-badge.js +1 -0
- package/dist/rolling-badge.mjs +68 -2
- package/dist/rolling-badge.mjs.map +1 -1
- package/dist/savings-badge.js +1 -1
- package/dist/savings-badge.js.map +1 -1
- package/dist/savings-badge.mjs +22 -2
- package/dist/savings-badge.mjs.map +1 -1
- package/dist/shine-border.js +1 -0
- package/dist/shine-border.mjs +44 -2
- package/dist/shine-border.mjs.map +1 -1
- package/dist/sparkles-text.js +1 -0
- package/dist/sparkles-text.mjs +84 -3
- package/dist/sparkles-text.mjs.map +1 -1
- package/dist/tabs.js +1 -0
- package/dist/tabs.mjs +118 -2
- package/dist/tabs.mjs.map +1 -1
- package/dist/theme-toggle.js +1 -0
- package/dist/theme-toggle.mjs +248 -5
- package/dist/theme-toggle.mjs.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-3SB6HUBA.mjs +0 -31
- package/dist/chunk-3SB6HUBA.mjs.map +0 -1
- package/dist/chunk-4PBVBXGY.mjs +0 -84
- package/dist/chunk-4PBVBXGY.mjs.map +0 -1
- package/dist/chunk-4VCFWVSJ.mjs +0 -42
- package/dist/chunk-4VCFWVSJ.mjs.map +0 -1
- package/dist/chunk-5QQAPGR2.mjs +0 -109
- package/dist/chunk-5QQAPGR2.mjs.map +0 -1
- package/dist/chunk-6MB4UKRX.mjs +0 -19
- package/dist/chunk-6MB4UKRX.mjs.map +0 -1
- package/dist/chunk-6T5LR34O.mjs +0 -45
- package/dist/chunk-6T5LR34O.mjs.map +0 -1
- package/dist/chunk-AYLCYDUM.mjs +0 -275
- package/dist/chunk-AYLCYDUM.mjs.map +0 -1
- package/dist/chunk-AYY7D2RJ.mjs +0 -112
- package/dist/chunk-AYY7D2RJ.mjs.map +0 -1
- package/dist/chunk-CTZEI2YS.mjs +0 -324
- package/dist/chunk-CTZEI2YS.mjs.map +0 -1
- package/dist/chunk-DA3I3Y5O.mjs +0 -71
- package/dist/chunk-DA3I3Y5O.mjs.map +0 -1
- package/dist/chunk-EYHT2EWJ.mjs +0 -18
- package/dist/chunk-EYHT2EWJ.mjs.map +0 -1
- package/dist/chunk-IHLGCS63.mjs +0 -36
- package/dist/chunk-IHLGCS63.mjs.map +0 -1
- package/dist/chunk-JVXJ6SFX.mjs +0 -38
- package/dist/chunk-JVXJ6SFX.mjs.map +0 -1
- package/dist/chunk-KBHYXLRG.mjs +0 -13
- package/dist/chunk-KBHYXLRG.mjs.map +0 -1
- package/dist/chunk-KMXUQYR3.mjs +0 -74
- package/dist/chunk-KMXUQYR3.mjs.map +0 -1
- package/dist/chunk-KNPOZ34H.mjs +0 -88
- package/dist/chunk-KNPOZ34H.mjs.map +0 -1
- package/dist/chunk-KRNWCJ4D.mjs +0 -219
- package/dist/chunk-KRNWCJ4D.mjs.map +0 -1
- package/dist/chunk-M5MESV26.mjs +0 -124
- package/dist/chunk-M5MESV26.mjs.map +0 -1
- package/dist/chunk-MJYBPJBA.mjs +0 -115
- package/dist/chunk-MJYBPJBA.mjs.map +0 -1
- package/dist/chunk-NNHPQ67J.mjs +0 -10
- package/dist/chunk-NNHPQ67J.mjs.map +0 -1
- package/dist/chunk-OCZFHVVD.mjs +0 -71
- package/dist/chunk-OCZFHVVD.mjs.map +0 -1
- package/dist/chunk-QAWSH567.mjs +0 -19
- package/dist/chunk-QAWSH567.mjs.map +0 -1
- package/dist/chunk-R2E2J42H.mjs +0 -38
- package/dist/chunk-R2E2J42H.mjs.map +0 -1
- package/dist/chunk-TPGLLSYV.mjs +0 -65
- package/dist/chunk-TPGLLSYV.mjs.map +0 -1
- package/dist/chunk-VJENJHXJ.mjs +0 -72
- package/dist/chunk-VJENJHXJ.mjs.map +0 -1
- package/dist/chunk-W22G7XHR.mjs +0 -104
- package/dist/chunk-W22G7XHR.mjs.map +0 -1
- package/dist/chunk-WDR5VPZJ.mjs +0 -79
- package/dist/chunk-WDR5VPZJ.mjs.map +0 -1
- package/dist/chunk-WLUGKBH7.mjs +0 -37
- package/dist/chunk-WLUGKBH7.mjs.map +0 -1
- package/dist/chunk-WYJYLDUA.mjs +0 -84
- package/dist/chunk-WYJYLDUA.mjs.map +0 -1
- package/dist/chunk-XZEDZVXT.mjs +0 -38
- package/dist/chunk-XZEDZVXT.mjs.map +0 -1
- package/dist/chunk-YKGP5JIL.mjs +0 -328
- package/dist/chunk-YKGP5JIL.mjs.map +0 -1
- package/dist/chunk-YM3U2OBE.mjs +0 -99
- package/dist/chunk-YM3U2OBE.mjs.map +0 -1
package/dist/chunk-CTZEI2YS.mjs
DELETED
|
@@ -1,324 +0,0 @@
|
|
|
1
|
-
import { cn } from './chunk-QAWSH567.mjs';
|
|
2
|
-
import { Renderer, Triangle, Mesh, Program } from 'ogl';
|
|
3
|
-
import { useRef, useEffect } from 'react';
|
|
4
|
-
import { jsx } from 'react/jsx-runtime';
|
|
5
|
-
|
|
6
|
-
var vertex = `#version 300 es
|
|
7
|
-
in vec2 position;
|
|
8
|
-
void main() {
|
|
9
|
-
gl_Position = vec4(position, 0.0, 1.0);
|
|
10
|
-
}
|
|
11
|
-
`;
|
|
12
|
-
var fragment = `#version 300 es
|
|
13
|
-
precision highp float;
|
|
14
|
-
uniform vec2 iResolution;
|
|
15
|
-
uniform float iTime;
|
|
16
|
-
uniform float uTimeSpeed;
|
|
17
|
-
uniform float uColorBalance;
|
|
18
|
-
uniform float uWarpStrength;
|
|
19
|
-
uniform float uWarpFrequency;
|
|
20
|
-
uniform float uWarpSpeed;
|
|
21
|
-
uniform float uWarpAmplitude;
|
|
22
|
-
uniform float uBlendAngle;
|
|
23
|
-
uniform float uBlendSoftness;
|
|
24
|
-
uniform float uRotationAmount;
|
|
25
|
-
uniform float uNoiseScale;
|
|
26
|
-
uniform float uGrainAmount;
|
|
27
|
-
uniform float uGrainScale;
|
|
28
|
-
uniform float uGrainAnimated;
|
|
29
|
-
uniform float uContrast;
|
|
30
|
-
uniform float uGamma;
|
|
31
|
-
uniform float uSaturation;
|
|
32
|
-
uniform vec2 uCenterOffset;
|
|
33
|
-
uniform float uZoom;
|
|
34
|
-
uniform vec3 uColor1;
|
|
35
|
-
uniform vec3 uColor2;
|
|
36
|
-
uniform vec3 uColor3;
|
|
37
|
-
out vec4 fragColor;
|
|
38
|
-
#define S(a,b,t) smoothstep(a,b,t)
|
|
39
|
-
mat2 Rot(float a){float s=sin(a),c=cos(a);return mat2(c,-s,s,c);}
|
|
40
|
-
vec2 hash(vec2 p){p=vec2(dot(p,vec2(2127.1,81.17)),dot(p,vec2(1269.5,283.37)));return fract(sin(p)*43758.5453);}
|
|
41
|
-
float noise(vec2 p){vec2 i=floor(p),f=fract(p),u=f*f*(3.0-2.0*f);float n=mix(mix(dot(-1.0+2.0*hash(i+vec2(0.0,0.0)),f-vec2(0.0,0.0)),dot(-1.0+2.0*hash(i+vec2(1.0,0.0)),f-vec2(1.0,0.0)),u.x),mix(dot(-1.0+2.0*hash(i+vec2(0.0,1.0)),f-vec2(0.0,1.0)),dot(-1.0+2.0*hash(i+vec2(1.0,1.0)),f-vec2(1.0,1.0)),u.x),u.y);return 0.5+0.5*n;}
|
|
42
|
-
void mainImage(out vec4 o, vec2 C){
|
|
43
|
-
float t=iTime*uTimeSpeed;
|
|
44
|
-
vec2 uv=C/iResolution.xy;
|
|
45
|
-
float ratio=iResolution.x/iResolution.y;
|
|
46
|
-
vec2 tuv=uv-0.5+uCenterOffset;
|
|
47
|
-
tuv/=max(uZoom,0.001);
|
|
48
|
-
float degree=noise(vec2(t*0.1,tuv.x*tuv.y)*uNoiseScale);
|
|
49
|
-
tuv.y*=1.0/ratio;
|
|
50
|
-
tuv*=Rot(radians((degree-0.5)*uRotationAmount+180.0));
|
|
51
|
-
tuv.y*=ratio;
|
|
52
|
-
float frequency=uWarpFrequency;
|
|
53
|
-
float ws=max(uWarpStrength,0.001);
|
|
54
|
-
float amplitude=uWarpAmplitude/ws;
|
|
55
|
-
float warpTime=t*uWarpSpeed;
|
|
56
|
-
tuv.x+=sin(tuv.y*frequency+warpTime)/amplitude;
|
|
57
|
-
tuv.y+=sin(tuv.x*(frequency*1.5)+warpTime)/(amplitude*0.5);
|
|
58
|
-
vec3 colLav=uColor1;
|
|
59
|
-
vec3 colOrg=uColor2;
|
|
60
|
-
vec3 colDark=uColor3;
|
|
61
|
-
float b=uColorBalance;
|
|
62
|
-
float s=max(uBlendSoftness,0.0);
|
|
63
|
-
mat2 blendRot=Rot(radians(uBlendAngle));
|
|
64
|
-
float blendX=(tuv*blendRot).x;
|
|
65
|
-
float edge0=-0.3-b-s;
|
|
66
|
-
float edge1=0.2-b+s;
|
|
67
|
-
float v0=0.5-b+s;
|
|
68
|
-
float v1=-0.3-b-s;
|
|
69
|
-
vec3 layer1=mix(colDark,colOrg,S(edge0,edge1,blendX));
|
|
70
|
-
vec3 layer2=mix(colOrg,colLav,S(edge0,edge1,blendX));
|
|
71
|
-
vec3 col=mix(layer1,layer2,S(v0,v1,tuv.y));
|
|
72
|
-
vec2 grainUv=uv*max(uGrainScale,0.001);
|
|
73
|
-
if(uGrainAnimated>0.5){grainUv+=vec2(iTime*0.05);}
|
|
74
|
-
float grain=fract(sin(dot(grainUv,vec2(12.9898,78.233)))*43758.5453);
|
|
75
|
-
col+=(grain-0.5)*uGrainAmount;
|
|
76
|
-
col=(col-0.5)*uContrast+0.5;
|
|
77
|
-
float luma=dot(col,vec3(0.2126,0.7152,0.0722));
|
|
78
|
-
col=mix(vec3(luma),col,uSaturation);
|
|
79
|
-
col=pow(max(col,0.0),vec3(1.0/max(uGamma,0.001)));
|
|
80
|
-
col=clamp(col,0.0,1.0);
|
|
81
|
-
o=vec4(col,1.0);
|
|
82
|
-
}
|
|
83
|
-
void main(){
|
|
84
|
-
vec4 o=vec4(0.0);
|
|
85
|
-
mainImage(o,gl_FragCoord.xy);
|
|
86
|
-
fragColor=o;
|
|
87
|
-
}
|
|
88
|
-
`;
|
|
89
|
-
function createGrainientProgram(gl) {
|
|
90
|
-
return new Program(gl, {
|
|
91
|
-
vertex,
|
|
92
|
-
fragment,
|
|
93
|
-
uniforms: {
|
|
94
|
-
iTime: { value: 0 },
|
|
95
|
-
iResolution: { value: new Float32Array([1, 1]) },
|
|
96
|
-
uTimeSpeed: { value: 0.25 },
|
|
97
|
-
uColorBalance: { value: 0 },
|
|
98
|
-
uWarpStrength: { value: 1 },
|
|
99
|
-
uWarpFrequency: { value: 5 },
|
|
100
|
-
uWarpSpeed: { value: 2 },
|
|
101
|
-
uWarpAmplitude: { value: 50 },
|
|
102
|
-
uBlendAngle: { value: 0 },
|
|
103
|
-
uBlendSoftness: { value: 0.05 },
|
|
104
|
-
uRotationAmount: { value: 500 },
|
|
105
|
-
uNoiseScale: { value: 2 },
|
|
106
|
-
uGrainAmount: { value: 0.1 },
|
|
107
|
-
uGrainScale: { value: 2 },
|
|
108
|
-
uGrainAnimated: { value: 0 },
|
|
109
|
-
uContrast: { value: 1.5 },
|
|
110
|
-
uGamma: { value: 1 },
|
|
111
|
-
uSaturation: { value: 1 },
|
|
112
|
-
uCenterOffset: { value: new Float32Array([0, 0]) },
|
|
113
|
-
uZoom: { value: 0.9 },
|
|
114
|
-
uColor1: { value: new Float32Array([1, 1, 1]) },
|
|
115
|
-
uColor2: { value: new Float32Array([1, 1, 1]) },
|
|
116
|
-
uColor3: { value: new Float32Array([1, 1, 1]) }
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
var ctxMap = /* @__PURE__ */ new WeakMap();
|
|
121
|
-
var HEX_COLOR_RE = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i;
|
|
122
|
-
var hexToRgb = (hex) => {
|
|
123
|
-
const result = HEX_COLOR_RE.exec(hex);
|
|
124
|
-
if (!result) return [1, 1, 1];
|
|
125
|
-
const [, r = "ff", g = "ff", b = "ff"] = result;
|
|
126
|
-
return [Number.parseInt(r, 16) / 255, Number.parseInt(g, 16) / 255, Number.parseInt(b, 16) / 255];
|
|
127
|
-
};
|
|
128
|
-
var prefersReducedMotion = () => typeof globalThis !== "undefined" && globalThis.matchMedia?.("(prefers-reduced-motion: reduce)").matches === true;
|
|
129
|
-
var isLowPowerClient = () => {
|
|
130
|
-
if (typeof globalThis === "undefined") return false;
|
|
131
|
-
const narrow = globalThis.matchMedia?.("(max-width: 1023px)").matches === true;
|
|
132
|
-
const fewCores = typeof navigator !== "undefined" && typeof navigator.hardwareConcurrency === "number" && navigator.hardwareConcurrency <= 4;
|
|
133
|
-
return narrow || fewCores;
|
|
134
|
-
};
|
|
135
|
-
var GRAIN_LAYER = `url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.12'/%3E%3C/svg%3E")`;
|
|
136
|
-
var fallbackGradient = (c1, c2, c3) => `${GRAIN_LAYER}, linear-gradient(135deg, ${c1} 0%, ${c2} 55%, ${c3} 100%)`;
|
|
137
|
-
var applyStaticBg = (el, src) => {
|
|
138
|
-
el.style.backgroundImage = `url(${src})`;
|
|
139
|
-
el.style.backgroundSize = "cover";
|
|
140
|
-
el.style.backgroundPosition = "center";
|
|
141
|
-
};
|
|
142
|
-
function initGrainient(container) {
|
|
143
|
-
const renderer = new Renderer({
|
|
144
|
-
webgl: 2,
|
|
145
|
-
alpha: true,
|
|
146
|
-
antialias: false,
|
|
147
|
-
dpr: Math.min(globalThis.devicePixelRatio || 1, 2)
|
|
148
|
-
});
|
|
149
|
-
const gl = renderer.gl;
|
|
150
|
-
const canvas = gl.canvas;
|
|
151
|
-
canvas.style.width = "100%";
|
|
152
|
-
canvas.style.height = "100%";
|
|
153
|
-
canvas.style.display = "block";
|
|
154
|
-
container.appendChild(canvas);
|
|
155
|
-
const geometry = new Triangle(gl);
|
|
156
|
-
const program = createGrainientProgram(gl);
|
|
157
|
-
const mesh = new Mesh(gl, { geometry, program });
|
|
158
|
-
ctxMap.set(container, { renderer, program, mesh });
|
|
159
|
-
const setSize = () => {
|
|
160
|
-
const rect = container.getBoundingClientRect();
|
|
161
|
-
renderer.setSize(Math.max(1, Math.floor(rect.width)), Math.max(1, Math.floor(rect.height)));
|
|
162
|
-
const res = program.uniforms.iResolution.value;
|
|
163
|
-
res[0] = gl.drawingBufferWidth;
|
|
164
|
-
res[1] = gl.drawingBufferHeight;
|
|
165
|
-
renderer.render({ scene: mesh });
|
|
166
|
-
};
|
|
167
|
-
const ro = new ResizeObserver(setSize);
|
|
168
|
-
ro.observe(container);
|
|
169
|
-
setSize();
|
|
170
|
-
let raf = 0;
|
|
171
|
-
let isVisible = true;
|
|
172
|
-
let isPageVisible = !document.hidden;
|
|
173
|
-
const t0 = performance.now();
|
|
174
|
-
const loop = (t) => {
|
|
175
|
-
program.uniforms.iTime.value = (t - t0) * 1e-3;
|
|
176
|
-
renderer.render({ scene: mesh });
|
|
177
|
-
raf = requestAnimationFrame(loop);
|
|
178
|
-
};
|
|
179
|
-
const tryStart = () => {
|
|
180
|
-
if (isVisible && isPageVisible && raf === 0) raf = requestAnimationFrame(loop);
|
|
181
|
-
};
|
|
182
|
-
const tryStop = () => {
|
|
183
|
-
if (raf !== 0) {
|
|
184
|
-
cancelAnimationFrame(raf);
|
|
185
|
-
raf = 0;
|
|
186
|
-
}
|
|
187
|
-
};
|
|
188
|
-
const reduce = prefersReducedMotion();
|
|
189
|
-
const io = new IntersectionObserver(
|
|
190
|
-
([entry]) => {
|
|
191
|
-
if (!entry) return;
|
|
192
|
-
isVisible = entry.isIntersecting;
|
|
193
|
-
if (isVisible) tryStart();
|
|
194
|
-
else tryStop();
|
|
195
|
-
},
|
|
196
|
-
{ threshold: 0 }
|
|
197
|
-
);
|
|
198
|
-
if (!reduce) io.observe(container);
|
|
199
|
-
const onVisibility = () => {
|
|
200
|
-
isPageVisible = !document.hidden;
|
|
201
|
-
if (isPageVisible) tryStart();
|
|
202
|
-
else tryStop();
|
|
203
|
-
};
|
|
204
|
-
if (!reduce) document.addEventListener("visibilitychange", onVisibility);
|
|
205
|
-
if (!reduce) tryStart();
|
|
206
|
-
return () => {
|
|
207
|
-
tryStop();
|
|
208
|
-
ro.disconnect();
|
|
209
|
-
io.disconnect();
|
|
210
|
-
document.removeEventListener("visibilitychange", onVisibility);
|
|
211
|
-
ctxMap.delete(container);
|
|
212
|
-
try {
|
|
213
|
-
container.removeChild(canvas);
|
|
214
|
-
} catch {
|
|
215
|
-
}
|
|
216
|
-
};
|
|
217
|
-
}
|
|
218
|
-
var Grainient = (props) => {
|
|
219
|
-
const {
|
|
220
|
-
timeSpeed = 0.25,
|
|
221
|
-
colorBalance = 0,
|
|
222
|
-
warpStrength = 1,
|
|
223
|
-
warpFrequency = 5,
|
|
224
|
-
warpSpeed = 2,
|
|
225
|
-
warpAmplitude = 50,
|
|
226
|
-
blendAngle = 0,
|
|
227
|
-
blendSoftness = 0.05,
|
|
228
|
-
rotationAmount = 500,
|
|
229
|
-
noiseScale = 2,
|
|
230
|
-
grainAmount = 0.1,
|
|
231
|
-
grainScale = 2,
|
|
232
|
-
grainAnimated = false,
|
|
233
|
-
contrast = 1.5,
|
|
234
|
-
gamma = 1,
|
|
235
|
-
saturation = 1,
|
|
236
|
-
centerX = 0,
|
|
237
|
-
centerY = 0,
|
|
238
|
-
zoom = 0.9,
|
|
239
|
-
color1 = "#FF9FFC",
|
|
240
|
-
color2 = "#5227FF",
|
|
241
|
-
color3 = "#B497CF",
|
|
242
|
-
staticSrc = "",
|
|
243
|
-
className = ""
|
|
244
|
-
} = props;
|
|
245
|
-
const containerRef = useRef(null);
|
|
246
|
-
const fallbackRef = useRef(false);
|
|
247
|
-
useEffect(() => {
|
|
248
|
-
const container = containerRef.current;
|
|
249
|
-
if (!container) return;
|
|
250
|
-
if (isLowPowerClient() || prefersReducedMotion()) {
|
|
251
|
-
fallbackRef.current = true;
|
|
252
|
-
container.dataset.fallback = "true";
|
|
253
|
-
if (staticSrc) applyStaticBg(container, staticSrc);
|
|
254
|
-
else container.style.background = fallbackGradient(color1, color2, color3);
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
return initGrainient(container);
|
|
258
|
-
}, []);
|
|
259
|
-
useEffect(() => {
|
|
260
|
-
const container = containerRef.current;
|
|
261
|
-
if (!container) return;
|
|
262
|
-
if (fallbackRef.current) {
|
|
263
|
-
if (staticSrc) applyStaticBg(container, staticSrc);
|
|
264
|
-
else container.style.background = fallbackGradient(color1, color2, color3);
|
|
265
|
-
return;
|
|
266
|
-
}
|
|
267
|
-
const ctx = ctxMap.get(container);
|
|
268
|
-
if (!ctx) return;
|
|
269
|
-
const { program, renderer, mesh } = ctx;
|
|
270
|
-
const u = program.uniforms;
|
|
271
|
-
u.uTimeSpeed.value = timeSpeed;
|
|
272
|
-
u.uColorBalance.value = colorBalance;
|
|
273
|
-
u.uWarpStrength.value = warpStrength;
|
|
274
|
-
u.uWarpFrequency.value = warpFrequency;
|
|
275
|
-
u.uWarpSpeed.value = warpSpeed;
|
|
276
|
-
u.uWarpAmplitude.value = warpAmplitude;
|
|
277
|
-
u.uBlendAngle.value = blendAngle;
|
|
278
|
-
u.uBlendSoftness.value = blendSoftness;
|
|
279
|
-
u.uRotationAmount.value = rotationAmount;
|
|
280
|
-
u.uNoiseScale.value = noiseScale;
|
|
281
|
-
u.uGrainAmount.value = grainAmount;
|
|
282
|
-
u.uGrainScale.value = grainScale;
|
|
283
|
-
u.uGrainAnimated.value = grainAnimated ? 1 : 0;
|
|
284
|
-
u.uContrast.value = contrast;
|
|
285
|
-
u.uGamma.value = gamma;
|
|
286
|
-
u.uSaturation.value = saturation;
|
|
287
|
-
u.uCenterOffset.value = new Float32Array([centerX, centerY]);
|
|
288
|
-
u.uZoom.value = zoom;
|
|
289
|
-
u.uColor1.value = new Float32Array(hexToRgb(color1));
|
|
290
|
-
u.uColor2.value = new Float32Array(hexToRgb(color2));
|
|
291
|
-
u.uColor3.value = new Float32Array(hexToRgb(color3));
|
|
292
|
-
if (prefersReducedMotion()) renderer.render({ scene: mesh });
|
|
293
|
-
}, [
|
|
294
|
-
timeSpeed,
|
|
295
|
-
colorBalance,
|
|
296
|
-
warpStrength,
|
|
297
|
-
warpFrequency,
|
|
298
|
-
warpSpeed,
|
|
299
|
-
warpAmplitude,
|
|
300
|
-
blendAngle,
|
|
301
|
-
blendSoftness,
|
|
302
|
-
rotationAmount,
|
|
303
|
-
noiseScale,
|
|
304
|
-
grainAmount,
|
|
305
|
-
grainScale,
|
|
306
|
-
grainAnimated,
|
|
307
|
-
contrast,
|
|
308
|
-
gamma,
|
|
309
|
-
saturation,
|
|
310
|
-
centerX,
|
|
311
|
-
centerY,
|
|
312
|
-
zoom,
|
|
313
|
-
color1,
|
|
314
|
-
color2,
|
|
315
|
-
color3,
|
|
316
|
-
staticSrc
|
|
317
|
-
]);
|
|
318
|
-
return /* @__PURE__ */ jsx("div", { ref: containerRef, className: cn("grainient-container", className) });
|
|
319
|
-
};
|
|
320
|
-
var grainient_default = Grainient;
|
|
321
|
-
|
|
322
|
-
export { grainient_default };
|
|
323
|
-
//# sourceMappingURL=chunk-CTZEI2YS.mjs.map
|
|
324
|
-
//# sourceMappingURL=chunk-CTZEI2YS.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/grainient.shader.ts","../src/components/grainient.tsx"],"names":[],"mappings":"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","file":"chunk-CTZEI2YS.mjs","sourcesContent":["import { type Mesh, Program, type Renderer } from 'ogl';\n\n// Keep renderer/program alive across re-renders so the uniform-sync effect can\n// update uniforms without ever rebuilding the WebGL context.\nconst vertex = `#version 300 es\nin vec2 position;\nvoid main() {\n gl_Position = vec4(position, 0.0, 1.0);\n}\n`;\n\nconst fragment = `#version 300 es\nprecision highp float;\nuniform vec2 iResolution;\nuniform float iTime;\nuniform float uTimeSpeed;\nuniform float uColorBalance;\nuniform float uWarpStrength;\nuniform float uWarpFrequency;\nuniform float uWarpSpeed;\nuniform float uWarpAmplitude;\nuniform float uBlendAngle;\nuniform float uBlendSoftness;\nuniform float uRotationAmount;\nuniform float uNoiseScale;\nuniform float uGrainAmount;\nuniform float uGrainScale;\nuniform float uGrainAnimated;\nuniform float uContrast;\nuniform float uGamma;\nuniform float uSaturation;\nuniform vec2 uCenterOffset;\nuniform float uZoom;\nuniform vec3 uColor1;\nuniform vec3 uColor2;\nuniform vec3 uColor3;\nout vec4 fragColor;\n#define S(a,b,t) smoothstep(a,b,t)\nmat2 Rot(float a){float s=sin(a),c=cos(a);return mat2(c,-s,s,c);}\nvec2 hash(vec2 p){p=vec2(dot(p,vec2(2127.1,81.17)),dot(p,vec2(1269.5,283.37)));return fract(sin(p)*43758.5453);}\nfloat noise(vec2 p){vec2 i=floor(p),f=fract(p),u=f*f*(3.0-2.0*f);float n=mix(mix(dot(-1.0+2.0*hash(i+vec2(0.0,0.0)),f-vec2(0.0,0.0)),dot(-1.0+2.0*hash(i+vec2(1.0,0.0)),f-vec2(1.0,0.0)),u.x),mix(dot(-1.0+2.0*hash(i+vec2(0.0,1.0)),f-vec2(0.0,1.0)),dot(-1.0+2.0*hash(i+vec2(1.0,1.0)),f-vec2(1.0,1.0)),u.x),u.y);return 0.5+0.5*n;}\nvoid mainImage(out vec4 o, vec2 C){\n float t=iTime*uTimeSpeed;\n vec2 uv=C/iResolution.xy;\n float ratio=iResolution.x/iResolution.y;\n vec2 tuv=uv-0.5+uCenterOffset;\n tuv/=max(uZoom,0.001);\n float degree=noise(vec2(t*0.1,tuv.x*tuv.y)*uNoiseScale);\n tuv.y*=1.0/ratio;\n tuv*=Rot(radians((degree-0.5)*uRotationAmount+180.0));\n tuv.y*=ratio;\n float frequency=uWarpFrequency;\n float ws=max(uWarpStrength,0.001);\n float amplitude=uWarpAmplitude/ws;\n float warpTime=t*uWarpSpeed;\n tuv.x+=sin(tuv.y*frequency+warpTime)/amplitude;\n tuv.y+=sin(tuv.x*(frequency*1.5)+warpTime)/(amplitude*0.5);\n vec3 colLav=uColor1;\n vec3 colOrg=uColor2;\n vec3 colDark=uColor3;\n float b=uColorBalance;\n float s=max(uBlendSoftness,0.0);\n mat2 blendRot=Rot(radians(uBlendAngle));\n float blendX=(tuv*blendRot).x;\n float edge0=-0.3-b-s;\n float edge1=0.2-b+s;\n float v0=0.5-b+s;\n float v1=-0.3-b-s;\n vec3 layer1=mix(colDark,colOrg,S(edge0,edge1,blendX));\n vec3 layer2=mix(colOrg,colLav,S(edge0,edge1,blendX));\n vec3 col=mix(layer1,layer2,S(v0,v1,tuv.y));\n vec2 grainUv=uv*max(uGrainScale,0.001);\n if(uGrainAnimated>0.5){grainUv+=vec2(iTime*0.05);}\n float grain=fract(sin(dot(grainUv,vec2(12.9898,78.233)))*43758.5453);\n col+=(grain-0.5)*uGrainAmount;\n col=(col-0.5)*uContrast+0.5;\n float luma=dot(col,vec3(0.2126,0.7152,0.0722));\n col=mix(vec3(luma),col,uSaturation);\n col=pow(max(col,0.0),vec3(1.0/max(uGamma,0.001)));\n col=clamp(col,0.0,1.0);\n o=vec4(col,1.0);\n}\nvoid main(){\n vec4 o=vec4(0.0);\n mainImage(o,gl_FragCoord.xy);\n fragColor=o;\n}\n`;\n\nexport type GrainientContext = { renderer: Renderer; program: Program; mesh: Mesh };\n\nexport function createGrainientProgram(gl: Renderer['gl']): Program {\n return new Program(gl, {\n vertex,\n fragment,\n uniforms: {\n iTime: { value: 0 },\n iResolution: { value: new Float32Array([1, 1]) },\n uTimeSpeed: { value: 0.25 },\n uColorBalance: { value: 0.0 },\n uWarpStrength: { value: 1.0 },\n uWarpFrequency: { value: 5.0 },\n uWarpSpeed: { value: 2.0 },\n uWarpAmplitude: { value: 50.0 },\n uBlendAngle: { value: 0.0 },\n uBlendSoftness: { value: 0.05 },\n uRotationAmount: { value: 500.0 },\n uNoiseScale: { value: 2.0 },\n uGrainAmount: { value: 0.1 },\n uGrainScale: { value: 2.0 },\n uGrainAnimated: { value: 0.0 },\n uContrast: { value: 1.5 },\n uGamma: { value: 1.0 },\n uSaturation: { value: 1.0 },\n uCenterOffset: { value: new Float32Array([0, 0]) },\n uZoom: { value: 0.9 },\n uColor1: { value: new Float32Array([1, 1, 1]) },\n uColor2: { value: new Float32Array([1, 1, 1]) },\n uColor3: { value: new Float32Array([1, 1, 1]) },\n },\n });\n}\n\nexport const ctxMap = new WeakMap<HTMLElement, GrainientContext>();\n","'use client';\n\nimport { Mesh, Renderer, Triangle } from 'ogl';\nimport { useEffect, useRef } from 'react';\nimport { cn } from '../lib/utils.js';\nimport { createGrainientProgram, ctxMap } from './grainient.shader.js';\nimport type { GrainientProps } from './grainient.types.js';\nimport './grainient.css';\n\nconst HEX_COLOR_RE = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i;\n\nconst hexToRgb = (hex: string): [number, number, number] => {\n const result = HEX_COLOR_RE.exec(hex);\n if (!result) return [1, 1, 1];\n // The regex guarantees all three capture groups when it matches; the defaults\n // only silence noUncheckedIndexedAccess.\n const [, r = 'ff', g = 'ff', b = 'ff'] = result;\n return [Number.parseInt(r, 16) / 255, Number.parseInt(g, 16) / 255, Number.parseInt(b, 16) / 255];\n};\n\n// framer-motion's MotionConfig only governs declarative motion.* components, so\n// this raw-WebGL canvas carries its own prefers-reduced-motion check.\nconst prefersReducedMotion = () =>\n typeof globalThis !== 'undefined' && globalThis.matchMedia?.('(prefers-reduced-motion: reduce)').matches === true;\n\n// The home page mounts four Grainient canvases at once; browsers cap live WebGL\n// contexts (~8-16) and each costs GPU/CPU. On low-power clients — narrow viewports\n// or few CPU cores — skip WebGL and let the static background stand in.\nconst isLowPowerClient = () => {\n if (typeof globalThis === 'undefined') return false;\n const narrow = globalThis.matchMedia?.('(max-width: 1023px)').matches === true;\n const fewCores =\n typeof navigator !== 'undefined' && typeof navigator.hardwareConcurrency === 'number' && navigator.hardwareConcurrency <= 4;\n return narrow || fewCores;\n};\n\n// A tiling SVG feTurbulence tile that stands in for the shader's film grain,\n// inlined so it needs no network request.\nconst GRAIN_LAYER = `url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.12'/%3E%3C/svg%3E\")`;\n\n// CSS gradient fallback when no pre-rendered image is available.\nconst fallbackGradient = (c1: string, c2: string, c3: string) =>\n `${GRAIN_LAYER}, linear-gradient(135deg, ${c1} 0%, ${c2} 55%, ${c3} 100%)`;\n\n// Apply a pre-rendered static image as a cover background.\nconst applyStaticBg = (el: HTMLDivElement, src: string) => {\n el.style.backgroundImage = `url(${src})`;\n el.style.backgroundSize = 'cover';\n el.style.backgroundPosition = 'center';\n};\n\n// Build the WebGL context, wire up resize/visibility observers, and run the\n// render loop. Returns a cleanup that tears everything back down.\nfunction initGrainient(container: HTMLDivElement): () => void {\n const renderer = new Renderer({\n webgl: 2,\n alpha: true,\n antialias: false,\n dpr: Math.min(globalThis.devicePixelRatio || 1, 2),\n });\n\n const gl = renderer.gl;\n const canvas = gl.canvas;\n canvas.style.width = '100%';\n canvas.style.height = '100%';\n canvas.style.display = 'block';\n container.appendChild(canvas);\n\n const geometry = new Triangle(gl);\n const program = createGrainientProgram(gl);\n const mesh = new Mesh(gl, { geometry, program });\n ctxMap.set(container, { renderer, program, mesh });\n\n const setSize = () => {\n const rect = container.getBoundingClientRect();\n renderer.setSize(Math.max(1, Math.floor(rect.width)), Math.max(1, Math.floor(rect.height)));\n const res: Float32Array = program.uniforms.iResolution.value;\n res[0] = gl.drawingBufferWidth;\n res[1] = gl.drawingBufferHeight;\n renderer.render({ scene: mesh });\n };\n\n const ro = new ResizeObserver(setSize);\n ro.observe(container);\n setSize();\n\n let raf = 0;\n let isVisible = true;\n let isPageVisible = !document.hidden;\n const t0 = performance.now();\n\n const loop = (t: number) => {\n program.uniforms.iTime.value = (t - t0) * 0.001;\n renderer.render({ scene: mesh });\n raf = requestAnimationFrame(loop);\n };\n\n const tryStart = () => {\n if (isVisible && isPageVisible && raf === 0) raf = requestAnimationFrame(loop);\n };\n const tryStop = () => {\n if (raf !== 0) {\n cancelAnimationFrame(raf);\n raf = 0;\n }\n };\n\n // Reduced motion: render a single static frame and never start the RAF loop.\n const reduce = prefersReducedMotion();\n\n const io = new IntersectionObserver(\n ([entry]) => {\n if (!entry) return;\n isVisible = entry.isIntersecting;\n if (isVisible) tryStart();\n else tryStop();\n },\n { threshold: 0 },\n );\n if (!reduce) io.observe(container);\n\n const onVisibility = () => {\n isPageVisible = !document.hidden;\n if (isPageVisible) tryStart();\n else tryStop();\n };\n if (!reduce) document.addEventListener('visibilitychange', onVisibility);\n if (!reduce) tryStart();\n\n return () => {\n tryStop();\n ro.disconnect();\n io.disconnect();\n document.removeEventListener('visibilitychange', onVisibility);\n ctxMap.delete(container);\n try {\n container.removeChild(canvas);\n } catch {\n /* ignore */\n }\n };\n}\n\nconst Grainient = (props: GrainientProps) => {\n const {\n timeSpeed = 0.25,\n colorBalance = 0.0,\n warpStrength = 1.0,\n warpFrequency = 5.0,\n warpSpeed = 2.0,\n warpAmplitude = 50.0,\n blendAngle = 0.0,\n blendSoftness = 0.05,\n rotationAmount = 500.0,\n noiseScale = 2.0,\n grainAmount = 0.1,\n grainScale = 2.0,\n grainAnimated = false,\n contrast = 1.5,\n gamma = 1.0,\n saturation = 1.0,\n centerX = 0.0,\n centerY = 0.0,\n zoom = 0.9,\n color1 = '#FF9FFC',\n color2 = '#5227FF',\n color3 = '#B497CF',\n staticSrc = '',\n className = '',\n } = props;\n\n const containerRef = useRef<HTMLDivElement>(null);\n // Set once on mount: when true, WebGL is skipped and a static background stands in.\n const fallbackRef = useRef(false);\n\n // Effect 1: build WebGL context once, pause when offscreen / tab hidden.\n // When a pre-rendered image is available, low-power clients and\n // prefers-reduced-motion users get it as a zero-GPU-cost background.\n // The renderer is created once on mount; color changes are handled in Effect 2.\n // biome-ignore lint/plugin: creates the WebGL renderer once on mount and tears it down on unmount — imperative GPU setup with no derived-state form.\n // biome-ignore lint/correctness/useExhaustiveDependencies: mount-only WebGL setup; color/staticSrc changes are handled in Effect 2.\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n if (isLowPowerClient() || prefersReducedMotion()) {\n fallbackRef.current = true;\n container.dataset.fallback = 'true';\n if (staticSrc) applyStaticBg(container, staticSrc);\n else container.style.background = fallbackGradient(color1, color2, color3);\n return;\n }\n return initGrainient(container);\n }, []); // renderer created once\n\n // Effect 2: sync props to uniforms — zero GPU cost, no teardown.\n // biome-ignore lint/plugin: imperatively writes props into mutable WebGL uniform objects (an external system); there is no render-time equivalent.\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n // Fallback clients have no WebGL context; re-apply the background so a\n // later color/src change still reaches the static background.\n if (fallbackRef.current) {\n if (staticSrc) applyStaticBg(container, staticSrc);\n else container.style.background = fallbackGradient(color1, color2, color3);\n return;\n }\n\n const ctx = ctxMap.get(container);\n if (!ctx) return;\n\n const { program, renderer, mesh } = ctx;\n const u = program.uniforms;\n\n u.uTimeSpeed.value = timeSpeed;\n u.uColorBalance.value = colorBalance;\n u.uWarpStrength.value = warpStrength;\n u.uWarpFrequency.value = warpFrequency;\n u.uWarpSpeed.value = warpSpeed;\n u.uWarpAmplitude.value = warpAmplitude;\n u.uBlendAngle.value = blendAngle;\n u.uBlendSoftness.value = blendSoftness;\n u.uRotationAmount.value = rotationAmount;\n u.uNoiseScale.value = noiseScale;\n u.uGrainAmount.value = grainAmount;\n u.uGrainScale.value = grainScale;\n u.uGrainAnimated.value = grainAnimated ? 1.0 : 0.0;\n u.uContrast.value = contrast;\n u.uGamma.value = gamma;\n u.uSaturation.value = saturation;\n u.uCenterOffset.value = new Float32Array([centerX, centerY]);\n u.uZoom.value = zoom;\n u.uColor1.value = new Float32Array(hexToRgb(color1));\n u.uColor2.value = new Float32Array(hexToRgb(color2));\n u.uColor3.value = new Float32Array(hexToRgb(color3));\n\n // Under reduced motion the RAF loop never starts; draw one frame here so\n // the real colors appear (the first frame from setSize() is all-white).\n if (prefersReducedMotion()) renderer.render({ scene: mesh });\n }, [\n timeSpeed,\n colorBalance,\n warpStrength,\n warpFrequency,\n warpSpeed,\n warpAmplitude,\n blendAngle,\n blendSoftness,\n rotationAmount,\n noiseScale,\n grainAmount,\n grainScale,\n grainAnimated,\n contrast,\n gamma,\n saturation,\n centerX,\n centerY,\n zoom,\n color1,\n color2,\n color3,\n staticSrc,\n ]);\n\n return <div ref={containerRef} className={cn('grainient-container', className)} />;\n};\n\nexport default Grainient;\n"]}
|
package/dist/chunk-DA3I3Y5O.mjs
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { cn } from './chunk-QAWSH567.mjs';
|
|
2
|
-
import { EASE_OUT_CSS, EASE_OUT, SPRING_SWAP } from './chunk-NNHPQ67J.mjs';
|
|
3
|
-
import { useReducedMotion, AnimatePresence, motion } from 'framer-motion';
|
|
4
|
-
import { useRef, useState, useLayoutEffect } from 'react';
|
|
5
|
-
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
|
-
|
|
7
|
-
var ROLL_EXIT_TRANSITION = { duration: 0.14, ease: EASE_OUT };
|
|
8
|
-
var ROLL_BLUR = "blur(3px)";
|
|
9
|
-
var AT_REST = { opacity: 1, y: 0, filter: "blur(0px)" };
|
|
10
|
-
var TEXT_VARIANTS = {
|
|
11
|
-
initial: { opacity: 0, y: "90%", filter: ROLL_BLUR },
|
|
12
|
-
animate: { opacity: 1, y: "0%", filter: "blur(0px)", transition: SPRING_SWAP },
|
|
13
|
-
exit: { opacity: 0, y: "-90%", filter: ROLL_BLUR, transition: ROLL_EXIT_TRANSITION }
|
|
14
|
-
};
|
|
15
|
-
var ICON_VARIANTS = {
|
|
16
|
-
initial: { opacity: 0, y: 12, filter: ROLL_BLUR },
|
|
17
|
-
animate: { opacity: 1, y: 0, filter: "blur(0px)", transition: SPRING_SWAP },
|
|
18
|
-
exit: { opacity: 0, y: -12, filter: ROLL_BLUR, transition: ROLL_EXIT_TRANSITION }
|
|
19
|
-
};
|
|
20
|
-
function ActionSwapRollText({ value, children, className }) {
|
|
21
|
-
const reduce = useReducedMotion() ?? false;
|
|
22
|
-
const measureRef = useRef(null);
|
|
23
|
-
const [width, setWidth] = useState();
|
|
24
|
-
useLayoutEffect(() => {
|
|
25
|
-
const nextWidth = measureRef.current?.offsetWidth;
|
|
26
|
-
if (!nextWidth) return;
|
|
27
|
-
setWidth((current) => current === nextWidth ? current : nextWidth);
|
|
28
|
-
});
|
|
29
|
-
return /* @__PURE__ */ jsxs(
|
|
30
|
-
"span",
|
|
31
|
-
{
|
|
32
|
-
className: cn("relative inline-block overflow-hidden whitespace-nowrap align-bottom", className),
|
|
33
|
-
style: { width, transition: reduce ? void 0 : `width 220ms ${EASE_OUT_CSS}` },
|
|
34
|
-
children: [
|
|
35
|
-
/* @__PURE__ */ jsx("span", { ref: measureRef, "aria-hidden": true, className: "invisible inline-block whitespace-nowrap", children }),
|
|
36
|
-
/* @__PURE__ */ jsx(AnimatePresence, { initial: false, children: /* @__PURE__ */ jsx(
|
|
37
|
-
motion.span,
|
|
38
|
-
{
|
|
39
|
-
variants: TEXT_VARIANTS,
|
|
40
|
-
initial: reduce ? false : "initial",
|
|
41
|
-
animate: reduce ? AT_REST : "animate",
|
|
42
|
-
exit: reduce ? void 0 : "exit",
|
|
43
|
-
className: "absolute top-0 left-0 inline-block will-change-[opacity,filter,transform]",
|
|
44
|
-
children
|
|
45
|
-
},
|
|
46
|
-
value
|
|
47
|
-
) })
|
|
48
|
-
]
|
|
49
|
-
}
|
|
50
|
-
);
|
|
51
|
-
}
|
|
52
|
-
function ActionSwapRollIcon({ value, children, className }) {
|
|
53
|
-
const reduce = useReducedMotion() ?? false;
|
|
54
|
-
return /* @__PURE__ */ jsx("span", { className: cn("relative inline-grid shrink-0 place-items-center overflow-hidden", className), children: /* @__PURE__ */ jsx(AnimatePresence, { mode: "popLayout", initial: false, children: /* @__PURE__ */ jsx(
|
|
55
|
-
motion.span,
|
|
56
|
-
{
|
|
57
|
-
"aria-hidden": true,
|
|
58
|
-
variants: ICON_VARIANTS,
|
|
59
|
-
initial: reduce ? false : "initial",
|
|
60
|
-
animate: reduce ? AT_REST : "animate",
|
|
61
|
-
exit: reduce ? void 0 : "exit",
|
|
62
|
-
className: "col-start-1 row-start-1 inline-flex items-center justify-center will-change-[opacity,filter,transform]",
|
|
63
|
-
children
|
|
64
|
-
},
|
|
65
|
-
value
|
|
66
|
-
) }) });
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export { ActionSwapRollIcon, ActionSwapRollText };
|
|
70
|
-
//# sourceMappingURL=chunk-DA3I3Y5O.mjs.map
|
|
71
|
-
//# sourceMappingURL=chunk-DA3I3Y5O.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/action-swap.tsx"],"names":[],"mappings":";;;;;;AAaA,IAAM,oBAAA,GAAuB,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,QAAA,EAAS;AAC9D,IAAM,SAAA,GAAY,WAAA;AAGlB,IAAM,UAAU,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA,EAAG,QAAQ,WAAA,EAAY;AAGxD,IAAM,aAAA,GAA0B;AAAA,EAC9B,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,KAAA,EAAO,QAAQ,SAAA,EAAU;AAAA,EACnD,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,IAAA,EAAM,MAAA,EAAQ,WAAA,EAAa,UAAA,EAAY,WAAA,EAAY;AAAA,EAC7E,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,MAAA,EAAQ,MAAA,EAAQ,SAAA,EAAW,UAAA,EAAY,oBAAA;AAChE,CAAA;AAGA,IAAM,aAAA,GAA0B;AAAA,EAC9B,SAAS,EAAE,OAAA,EAAS,GAAG,CAAA,EAAG,EAAA,EAAI,QAAQ,SAAA,EAAU;AAAA,EAChD,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAG,MAAA,EAAQ,WAAA,EAAa,UAAA,EAAY,WAAA,EAAY;AAAA,EAC1E,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,GAAA,EAAK,MAAA,EAAQ,SAAA,EAAW,UAAA,EAAY,oBAAA;AAC7D,CAAA;AAiBO,SAAS,kBAAA,CAAmB,EAAE,KAAA,EAAO,QAAA,EAAU,WAAU,EAAwB;AACtF,EAAA,MAAM,MAAA,GAAS,kBAAiB,IAAK,KAAA;AACrC,EAAA,MAAM,UAAA,GAAa,OAAwB,IAAI,CAAA;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA,EAAiB;AAI3C,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,SAAA,GAAY,WAAW,OAAA,EAAS,WAAA;AACtC,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,QAAA,CAAS,CAAC,OAAA,KAAa,OAAA,KAAY,SAAA,GAAY,UAAU,SAAU,CAAA;AAAA,EACrE,CAAC,CAAA;AAED,EAAA,uBACE,IAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAA,CAAG,sEAAA,EAAwE,SAAS,CAAA;AAAA,MAC/F,KAAA,EAAO,EAAE,KAAA,EAAO,UAAA,EAAY,SAAS,MAAA,GAAY,CAAA,YAAA,EAAe,YAAY,CAAA,CAAA,EAAG;AAAA,MAI/E,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAK,GAAA,EAAK,UAAA,EAAY,eAAa,IAAA,EAAM,SAAA,EAAU,4CACjD,QAAA,EACH,CAAA;AAAA,wBACA,GAAA,CAAC,eAAA,EAAA,EAAgB,OAAA,EAAS,KAAA,EACxB,QAAA,kBAAA,GAAA;AAAA,UAAC,MAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YAEC,QAAA,EAAU,aAAA;AAAA,YACV,OAAA,EAAS,SAAS,KAAA,GAAQ,SAAA;AAAA,YAC1B,OAAA,EAAS,SAAS,OAAA,GAAU,SAAA;AAAA,YAC5B,IAAA,EAAM,SAAS,MAAA,GAAY,MAAA;AAAA,YAC3B,SAAA,EAAU,2EAAA;AAAA,YAET;AAAA,WAAA;AAAA,UAPI;AAAA,SAQP,EACF;AAAA;AAAA;AAAA,GACF;AAEJ;AAOO,SAAS,kBAAA,CAAmB,EAAE,KAAA,EAAO,QAAA,EAAU,WAAU,EAAwB;AACtF,EAAA,MAAM,MAAA,GAAS,kBAAiB,IAAK,KAAA;AAErC,EAAA,uBACE,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,EAAA,CAAG,kEAAA,EAAoE,SAAS,CAAA,EAC/F,QAAA,kBAAA,GAAA,CAAC,eAAA,EAAA,EAAgB,IAAA,EAAK,WAAA,EAAY,OAAA,EAAS,KAAA,EACzC,QAAA,kBAAA,GAAA;AAAA,IAAC,MAAA,CAAO,IAAA;AAAA,IAAP;AAAA,MAEC,aAAA,EAAa,IAAA;AAAA,MACb,QAAA,EAAU,aAAA;AAAA,MACV,OAAA,EAAS,SAAS,KAAA,GAAQ,SAAA;AAAA,MAC1B,OAAA,EAAS,SAAS,OAAA,GAAU,SAAA;AAAA,MAC5B,IAAA,EAAM,SAAS,MAAA,GAAY,MAAA;AAAA,MAC3B,SAAA,EAAU,wGAAA;AAAA,MAET;AAAA,KAAA;AAAA,IARI;AAAA,KAUT,CAAA,EACF,CAAA;AAEJ","file":"chunk-DA3I3Y5O.mjs","sourcesContent":["'use client';\n// Adapted from beui.dev/components/motion/action-swap (roll variant only).\n// Upstream imports `motion/react`; this project is on framer-motion, and its\n// blur/cascade animations and pre-styled <ActionSwapButton> are omitted — the\n// button's variant classes reference `bg-card`/`bg-primary`, which this site\n// doesn't define as --color-* tokens, so Tailwind would drop them silently.\n\nimport { AnimatePresence, motion, useReducedMotion, type Variants } from 'framer-motion';\nimport { type ReactNode, useLayoutEffect, useRef, useState } from 'react';\nimport { EASE_OUT, EASE_OUT_CSS, SPRING_SWAP } from '../lib/ease.js';\nimport { cn } from '../lib/utils.js';\n\n/** The outgoing half rolls out faster than the incoming half settles. */\nconst ROLL_EXIT_TRANSITION = { duration: 0.14, ease: EASE_OUT } as const;\nconst ROLL_BLUR = 'blur(3px)';\n\n/** Rest state used under reduced motion — no travel, no blur. */\nconst AT_REST = { opacity: 1, y: 0, filter: 'blur(0px)' } as const;\n\n/** Text travels in percentages so the roll scales with the line height. */\nconst TEXT_VARIANTS: Variants = {\n initial: { opacity: 0, y: '90%', filter: ROLL_BLUR },\n animate: { opacity: 1, y: '0%', filter: 'blur(0px)', transition: SPRING_SWAP },\n exit: { opacity: 0, y: '-90%', filter: ROLL_BLUR, transition: ROLL_EXIT_TRANSITION },\n};\n\n/** Icons travel in pixels — a glyph box has no line height to scale against. */\nconst ICON_VARIANTS: Variants = {\n initial: { opacity: 0, y: 12, filter: ROLL_BLUR },\n animate: { opacity: 1, y: 0, filter: 'blur(0px)', transition: SPRING_SWAP },\n exit: { opacity: 0, y: -12, filter: ROLL_BLUR, transition: ROLL_EXIT_TRANSITION },\n};\n\nexport type ActionSwapRollProps = {\n /** Identity of the current content — changing it triggers the roll. */\n value: string;\n children: ReactNode;\n className?: string;\n};\n\n/**\n * Rolls `children` up out of the box while the new content rolls in from below,\n * animating the box's width so labels of different lengths don't snap.\n *\n * The visible label is the accessible name, so for the duration of a swap both\n * the outgoing and incoming text are in the accessibility tree. Give the host\n * control an explicit `aria-label` when that ambiguity matters.\n */\nexport function ActionSwapRollText({ value, children, className }: ActionSwapRollProps) {\n const reduce = useReducedMotion() ?? false;\n const measureRef = useRef<HTMLSpanElement>(null);\n const [width, setWidth] = useState<number>();\n\n // Deliberately un-keyed: the invisible copy is re-measured after every render\n // so the box tracks content it can't diff (fonts finishing, text changing).\n useLayoutEffect(() => {\n const nextWidth = measureRef.current?.offsetWidth;\n if (!nextWidth) return;\n setWidth((current) => (current === nextWidth ? current : nextWidth));\n });\n\n return (\n <span\n className={cn('relative inline-block overflow-hidden whitespace-nowrap align-bottom', className)}\n style={{ width, transition: reduce ? undefined : `width 220ms ${EASE_OUT_CSS}` }}\n >\n {/* Width source: laid out in flow but never painted, so the absolutely\n positioned live copies below have something to size the box. */}\n <span ref={measureRef} aria-hidden={true} className=\"invisible inline-block whitespace-nowrap\">\n {children}\n </span>\n <AnimatePresence initial={false}>\n <motion.span\n key={value}\n variants={TEXT_VARIANTS}\n initial={reduce ? false : 'initial'}\n animate={reduce ? AT_REST : 'animate'}\n exit={reduce ? undefined : 'exit'}\n className=\"absolute top-0 left-0 inline-block will-change-[opacity,filter,transform]\"\n >\n {children}\n </motion.span>\n </AnimatePresence>\n </span>\n );\n}\n\n/**\n * Icon counterpart to {@link ActionSwapRollText}. `popLayout` pulls the outgoing\n * icon out of flow so the pair overlaps in one cell instead of sitting side by\n * side mid-swap. Always `aria-hidden` — icons here restate a visible label.\n */\nexport function ActionSwapRollIcon({ value, children, className }: ActionSwapRollProps) {\n const reduce = useReducedMotion() ?? false;\n\n return (\n <span className={cn('relative inline-grid shrink-0 place-items-center overflow-hidden', className)}>\n <AnimatePresence mode=\"popLayout\" initial={false}>\n <motion.span\n key={value}\n aria-hidden={true}\n variants={ICON_VARIANTS}\n initial={reduce ? false : 'initial'}\n animate={reduce ? AT_REST : 'animate'}\n exit={reduce ? undefined : 'exit'}\n className=\"col-start-1 row-start-1 inline-flex items-center justify-center will-change-[opacity,filter,transform]\"\n >\n {children}\n </motion.span>\n </AnimatePresence>\n </span>\n );\n}\n"]}
|
package/dist/chunk-EYHT2EWJ.mjs
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { useState, useEffect } from 'react';
|
|
2
|
-
|
|
3
|
-
// src/lib/use-media-query.ts
|
|
4
|
-
function useMediaQuery(query, defaultState = false) {
|
|
5
|
-
const [matches, setMatches] = useState(defaultState);
|
|
6
|
-
useEffect(() => {
|
|
7
|
-
const mql = globalThis.matchMedia(query);
|
|
8
|
-
setMatches(mql.matches);
|
|
9
|
-
const onChange = (e) => setMatches(e.matches);
|
|
10
|
-
mql.addEventListener("change", onChange);
|
|
11
|
-
return () => mql.removeEventListener("change", onChange);
|
|
12
|
-
}, [query]);
|
|
13
|
-
return matches;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export { useMediaQuery };
|
|
17
|
-
//# sourceMappingURL=chunk-EYHT2EWJ.mjs.map
|
|
18
|
-
//# sourceMappingURL=chunk-EYHT2EWJ.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/use-media-query.ts"],"names":[],"mappings":";;;AAWO,SAAS,aAAA,CAAc,KAAA,EAAe,YAAA,GAAe,KAAA,EAAgB;AAC1E,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAS,YAAY,CAAA;AAGnD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,GAAA,GAAM,UAAA,CAAW,UAAA,CAAW,KAAK,CAAA;AACvC,IAAA,UAAA,CAAW,IAAI,OAAO,CAAA;AAEtB,IAAA,MAAM,QAAA,GAAW,CAAC,CAAA,KAA2B,UAAA,CAAW,EAAE,OAAO,CAAA;AACjE,IAAA,GAAA,CAAI,gBAAA,CAAiB,UAAU,QAAQ,CAAA;AACvC,IAAA,OAAO,MAAM,GAAA,CAAI,mBAAA,CAAoB,QAAA,EAAU,QAAQ,CAAA;AAAA,EACzD,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,OAAA;AACT","file":"chunk-EYHT2EWJ.mjs","sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\n\n/**\n * Tracks a CSS media query, returning `true` when it matches.\n *\n * The default return before hydration is `false`; pass `defaultState`\n * to set a different initial value (e.g. `true` for dark-mode queries\n * whose SSR default is dark).\n */\nexport function useMediaQuery(query: string, defaultState = false): boolean {\n const [matches, setMatches] = useState(defaultState);\n\n // biome-ignore lint/plugin: subscribes to a matchMedia listener — an imperative side effect with no derived-state equivalent.\n useEffect(() => {\n const mql = globalThis.matchMedia(query);\n setMatches(mql.matches);\n\n const onChange = (e: MediaQueryListEvent) => setMatches(e.matches);\n mql.addEventListener('change', onChange);\n return () => mql.removeEventListener('change', onChange);\n }, [query]);\n\n return matches;\n}\n"]}
|
package/dist/chunk-IHLGCS63.mjs
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { useCallback, useSyncExternalStore } from 'react';
|
|
2
|
-
|
|
3
|
-
// src/lib/breakpoints.ts
|
|
4
|
-
var BREAKPOINTS = [
|
|
5
|
-
["xs", 30],
|
|
6
|
-
["sm", 40],
|
|
7
|
-
["md", 50],
|
|
8
|
-
["lg", 64],
|
|
9
|
-
["xl", 80],
|
|
10
|
-
["2xl", 96]
|
|
11
|
-
];
|
|
12
|
-
function getBreakpoint() {
|
|
13
|
-
let current = "base";
|
|
14
|
-
for (const [name, rem] of BREAKPOINTS) {
|
|
15
|
-
if (globalThis.matchMedia(`(min-width: ${rem}rem)`).matches) current = name;
|
|
16
|
-
}
|
|
17
|
-
return current;
|
|
18
|
-
}
|
|
19
|
-
function onBreakpointChange(listener) {
|
|
20
|
-
const queries = BREAKPOINTS.map(([, rem]) => globalThis.matchMedia(`(min-width: ${rem}rem)`));
|
|
21
|
-
for (const query of queries) query.addEventListener("change", listener);
|
|
22
|
-
return () => {
|
|
23
|
-
for (const query of queries) query.removeEventListener("change", listener);
|
|
24
|
-
};
|
|
25
|
-
}
|
|
26
|
-
function getBreakpointServer() {
|
|
27
|
-
return "base";
|
|
28
|
-
}
|
|
29
|
-
function useBreakpoint() {
|
|
30
|
-
const subscribe = useCallback(onBreakpointChange, []);
|
|
31
|
-
return useSyncExternalStore(subscribe, getBreakpoint, getBreakpointServer);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export { BREAKPOINTS, getBreakpoint, onBreakpointChange, useBreakpoint };
|
|
35
|
-
//# sourceMappingURL=chunk-IHLGCS63.mjs.map
|
|
36
|
-
//# sourceMappingURL=chunk-IHLGCS63.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/breakpoints.ts"],"names":[],"mappings":";;;AAGO,IAAM,WAAA,GAAc;AAAA,EACzB,CAAC,MAAM,EAAE,CAAA;AAAA,EACT,CAAC,MAAM,EAAE,CAAA;AAAA,EACT,CAAC,MAAM,EAAE,CAAA;AAAA,EACT,CAAC,MAAM,EAAE,CAAA;AAAA,EACT,CAAC,MAAM,EAAE,CAAA;AAAA,EACT,CAAC,OAAO,EAAE;AACZ;AAWO,SAAS,aAAA,GAA4B;AAC1C,EAAA,IAAI,OAAA,GAAsB,MAAA;AAC1B,EAAA,KAAA,MAAW,CAAC,IAAA,EAAM,GAAG,CAAA,IAAK,WAAA,EAAa;AACrC,IAAA,IAAI,WAAW,UAAA,CAAW,CAAA,YAAA,EAAe,GAAG,CAAA,IAAA,CAAM,CAAA,CAAE,SAAS,OAAA,GAAU,IAAA;AAAA,EACzE;AACA,EAAA,OAAO,OAAA;AACT;AAcO,SAAS,mBAAmB,QAAA,EAAkC;AACnE,EAAA,MAAM,OAAA,GAAU,WAAA,CAAY,GAAA,CAAI,CAAC,GAAG,GAAG,CAAA,KAAM,UAAA,CAAW,UAAA,CAAW,CAAA,YAAA,EAAe,GAAG,MAAM,CAAC,CAAA;AAC5F,EAAA,KAAA,MAAW,KAAA,IAAS,OAAA,EAAS,KAAA,CAAM,gBAAA,CAAiB,UAAU,QAAQ,CAAA;AACtE,EAAA,OAAO,MAAM;AACX,IAAA,KAAA,MAAW,KAAA,IAAS,OAAA,EAAS,KAAA,CAAM,mBAAA,CAAoB,UAAU,QAAQ,CAAA;AAAA,EAC3E,CAAA;AACF;AAEA,SAAS,mBAAA,GAAkC;AACzC,EAAA,OAAO,MAAA;AACT;AAYO,SAAS,aAAA,GAA4B;AAC1C,EAAA,MAAM,SAAA,GAAY,WAAA,CAAY,kBAAA,EAAoB,EAAE,CAAA;AACpD,EAAA,OAAO,oBAAA,CAAqB,SAAA,EAAW,aAAA,EAAe,mBAAmB,CAAA;AAC3E","file":"chunk-IHLGCS63.mjs","sourcesContent":["import { useCallback, useSyncExternalStore } from 'react';\n\n/** Site breakpoints — `md` is 50rem here, not Tailwind's default 48rem. */\nexport const BREAKPOINTS = [\n ['xs', 30],\n ['sm', 40],\n ['md', 50],\n ['lg', 64],\n ['xl', 80],\n ['2xl', 96],\n] as const;\n\n/** `'base'` is the implicit below-`xs` band — the widths no `min-width` query claims. */\nexport type Breakpoint = 'base' | (typeof BREAKPOINTS)[number][0];\n\n/**\n * The current breakpoint, read straight from `matchMedia`. Use this over\n * `useBreakpoint` inside effects that need the *live* band: through the\n * hydration pass the rendered value is still the server's `'base'`, which is a\n * change away from the truth and will read as one.\n */\nexport function getBreakpoint(): Breakpoint {\n let current: Breakpoint = 'base';\n for (const [name, rem] of BREAKPOINTS) {\n if (globalThis.matchMedia(`(min-width: ${rem}rem)`).matches) current = name;\n }\n return current;\n}\n\n/**\n * Call `listener` whenever the viewport crosses a breakpoint. Returns the\n * unsubscribe.\n *\n * The imperative counterpart to `useBreakpoint`, for work that has to land in\n * the *same frame* as the layout change. Media-query change events fire during\n * the rendering steps, before `requestAnimationFrame` and before paint, so a\n * listener that writes to the DOM here is painted with the new layout rather\n * than one frame behind it. Going through React state instead costs a render\n * round-trip — the scheduler runs the update in a later task, and the layout\n * effect lands after the browser has already painted.\n */\nexport function onBreakpointChange(listener: () => void): () => void {\n const queries = BREAKPOINTS.map(([, rem]) => globalThis.matchMedia(`(min-width: ${rem}rem)`));\n for (const query of queries) query.addEventListener('change', listener);\n return () => {\n for (const query of queries) query.removeEventListener('change', listener);\n };\n}\n\nfunction getBreakpointServer(): Breakpoint {\n return 'base';\n}\n\n/**\n * The widest breakpoint the viewport currently satisfies, re-rendering only when\n * it crosses from one band into another — not on every pixel of a resize.\n *\n * This is for work that has to be *redone* when the layout changes shape, like\n * re-measuring something positioned against text that the gutters just moved. It\n * is not for choosing what to render: the exported HTML has to be correct at\n * every width before JS runs, so layout belongs in CSS breakpoints, and this\n * returns `'base'` during SSR and the first client paint regardless of viewport.\n */\nexport function useBreakpoint(): Breakpoint {\n const subscribe = useCallback(onBreakpointChange, []);\n return useSyncExternalStore(subscribe, getBreakpoint, getBreakpointServer);\n}\n"]}
|
package/dist/chunk-JVXJ6SFX.mjs
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
|
|
3
|
-
// src/components/navigation-menu-icons.tsx
|
|
4
|
-
function ChevronDownIcon(props) {
|
|
5
|
-
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", ...props, children: /* @__PURE__ */ jsx("path", { d: "M1 3.5L5 7.5L9 3.5", stroke: "currentColor", strokeWidth: "1.5" }) });
|
|
6
|
-
}
|
|
7
|
-
function ChevronRightIcon(props) {
|
|
8
|
-
return /* @__PURE__ */ jsx("svg", { "aria-hidden": "true", width: "10", height: "10", viewBox: "0 0 10 10", fill: "none", ...props, children: /* @__PURE__ */ jsx("path", { d: "M3.5 1L7.5 5L3.5 9", stroke: "currentColor", strokeWidth: "1.5" }) });
|
|
9
|
-
}
|
|
10
|
-
function ArrowSvg(props) {
|
|
11
|
-
return /* @__PURE__ */ jsxs("svg", { "aria-hidden": "true", width: "20", height: "10", viewBox: "0 0 20 10", fill: "none", ...props, children: [
|
|
12
|
-
/* @__PURE__ */ jsx(
|
|
13
|
-
"path",
|
|
14
|
-
{
|
|
15
|
-
d: "M9.66437 2.60207L4.80758 6.97318C4.07308 7.63423 3.11989 8 2.13172 8H0V10H20V8H18.5349C17.5468 8 16.5936 7.63423 15.8591 6.97318L11.0023 2.60207C10.622 2.2598 10.0447 2.25979 9.66437 2.60207Z",
|
|
16
|
-
className: "fill-(--popup-surface,var(--surface-3))"
|
|
17
|
-
}
|
|
18
|
-
),
|
|
19
|
-
/* @__PURE__ */ jsx(
|
|
20
|
-
"path",
|
|
21
|
-
{
|
|
22
|
-
d: "M8.99542 1.85876C9.75604 1.17425 10.9106 1.17422 11.6713 1.85878L16.5281 6.22989C17.0789 6.72568 17.7938 7.00001 18.5349 7.00001L15.89 7L11.0023 2.60207C10.622 2.2598 10.0447 2.2598 9.66436 2.60207L4.77734 7L2.13171 7.00001C2.87284 7.00001 3.58774 6.72568 4.13861 6.22989L8.99542 1.85876Z",
|
|
23
|
-
className: "fill-border"
|
|
24
|
-
}
|
|
25
|
-
),
|
|
26
|
-
/* @__PURE__ */ jsx(
|
|
27
|
-
"path",
|
|
28
|
-
{
|
|
29
|
-
d: "M10.3333 3.34539L5.47654 7.71648C4.55842 8.54279 3.36693 9 2.13172 9H0V8H2.13172C3.11989 8 4.07308 7.63423 4.80758 6.97318L9.66437 2.60207C10.0447 2.25979 10.622 2.2598 11.0023 2.60207L15.8591 6.97318C16.5936 7.63423 17.5468 8 18.5349 8H20V9H18.5349C17.2998 9 16.1083 8.54278 15.1901 7.71648L10.3333 3.34539Z",
|
|
30
|
-
className: "fill-border"
|
|
31
|
-
}
|
|
32
|
-
)
|
|
33
|
-
] });
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export { ArrowSvg, ChevronDownIcon, ChevronRightIcon };
|
|
37
|
-
//# sourceMappingURL=chunk-JVXJ6SFX.mjs.map
|
|
38
|
-
//# sourceMappingURL=chunk-JVXJ6SFX.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation-menu-icons.tsx"],"names":[],"mappings":";;;AAEO,SAAS,gBAAgB,KAAA,EAAoC;AAClE,EAAA,uBACE,GAAA,CAAC,SAAI,aAAA,EAAY,MAAA,EAAO,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,QAAQ,GAAG,KAAA,EACjF,8BAAC,MAAA,EAAA,EAAK,CAAA,EAAE,sBAAqB,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,CAAA,EACvE,CAAA;AAEJ;AAEO,SAAS,iBAAiB,KAAA,EAAoC;AACnE,EAAA,uBACE,GAAA,CAAC,SAAI,aAAA,EAAY,MAAA,EAAO,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,QAAQ,GAAG,KAAA,EACjF,8BAAC,MAAA,EAAA,EAAK,CAAA,EAAE,sBAAqB,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,CAAA,EACvE,CAAA;AAEJ;AAEO,SAAS,SAAS,KAAA,EAAoC;AAC3D,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAY,MAAA,EAAO,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAQ,GAAG,KAAA,EACjF,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,iMAAA;AAAA,QACF,SAAA,EAAU;AAAA;AAAA,KACZ;AAAA,oBACA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,kSAAA;AAAA,QACF,SAAA,EAAU;AAAA;AAAA,KACZ;AAAA,oBACA,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,CAAA,EAAE,sTAAA;AAAA,QACF,SAAA,EAAU;AAAA;AAAA;AACZ,GAAA,EACF,CAAA;AAEJ","file":"chunk-JVXJ6SFX.mjs","sourcesContent":["import type * as React from 'react';\n\nexport function ChevronDownIcon(props: React.ComponentProps<'svg'>) {\n return (\n <svg aria-hidden=\"true\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" {...props}>\n <path d=\"M1 3.5L5 7.5L9 3.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n );\n}\n\nexport function ChevronRightIcon(props: React.ComponentProps<'svg'>) {\n return (\n <svg aria-hidden=\"true\" width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"none\" {...props}>\n <path d=\"M3.5 1L7.5 5L3.5 9\" stroke=\"currentColor\" strokeWidth=\"1.5\" />\n </svg>\n );\n}\n\nexport function ArrowSvg(props: React.ComponentProps<'svg'>) {\n return (\n <svg aria-hidden=\"true\" width=\"20\" height=\"10\" viewBox=\"0 0 20 10\" fill=\"none\" {...props}>\n <path\n d=\"M9.66437 2.60207L4.80758 6.97318C4.07308 7.63423 3.11989 8 2.13172 8H0V10H20V8H18.5349C17.5468 8 16.5936 7.63423 15.8591 6.97318L11.0023 2.60207C10.622 2.2598 10.0447 2.25979 9.66437 2.60207Z\"\n className=\"fill-(--popup-surface,var(--surface-3))\"\n />\n <path\n d=\"M8.99542 1.85876C9.75604 1.17425 10.9106 1.17422 11.6713 1.85878L16.5281 6.22989C17.0789 6.72568 17.7938 7.00001 18.5349 7.00001L15.89 7L11.0023 2.60207C10.622 2.2598 10.0447 2.2598 9.66436 2.60207L4.77734 7L2.13171 7.00001C2.87284 7.00001 3.58774 6.72568 4.13861 6.22989L8.99542 1.85876Z\"\n className=\"fill-border\"\n />\n <path\n d=\"M10.3333 3.34539L5.47654 7.71648C4.55842 8.54279 3.36693 9 2.13172 9H0V8H2.13172C3.11989 8 4.07308 7.63423 4.80758 6.97318L9.66437 2.60207C10.0447 2.25979 10.622 2.2598 11.0023 2.60207L15.8591 6.97318C16.5936 7.63423 17.5468 8 18.5349 8H20V9H18.5349C17.2998 9 16.1083 8.54278 15.1901 7.71648L10.3333 3.34539Z\"\n className=\"fill-border\"\n />\n </svg>\n );\n}\n"]}
|
package/dist/chunk-KBHYXLRG.mjs
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { cva } from 'class-variance-authority';
|
|
2
|
-
|
|
3
|
-
// src/components/navigation-menu-styles.ts
|
|
4
|
-
var navigationMenuTriggerStyle = cva(
|
|
5
|
-
"box-border flex items-center justify-center gap-1.5 h-10 px-2.5 xs:px-3 m-0 rounded-md text-foreground font-medium !text-[15px] leading-6 select-none no-underline hover:text-foreground data-[popup-open]:bg-black/[0.07] dark:data-[popup-open]:bg-white/[0.07] data-[popup-open]:text-foreground focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-1 focus-visible:outline-ring focus-visible:relative"
|
|
6
|
-
);
|
|
7
|
-
var navigationMenuSubTriggerStyle = cva(
|
|
8
|
-
"w-full text-left relative block rounded-md p-2.5 xs:p-3 no-underline text-inherit hover:bg-black/[0.07] dark:hover:bg-white/[0.07] hover:text-foreground active:bg-black/[0.11] dark:active:bg-white/[0.11] focus-visible:relative focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-1 focus-visible:outline-ring data-[popup-open]:bg-black/[0.07] dark:data-[popup-open]:bg-white/[0.07] data-[popup-open]:text-foreground"
|
|
9
|
-
);
|
|
10
|
-
|
|
11
|
-
export { navigationMenuSubTriggerStyle, navigationMenuTriggerStyle };
|
|
12
|
-
//# sourceMappingURL=chunk-KBHYXLRG.mjs.map
|
|
13
|
-
//# sourceMappingURL=chunk-KBHYXLRG.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation-menu-styles.ts"],"names":[],"mappings":";;;AAOO,IAAM,0BAAA,GAA6B,GAAA;AAAA,EACxC;AACF;AAEO,IAAM,6BAAA,GAAgC,GAAA;AAAA,EAC3C;AACF","file":"chunk-KBHYXLRG.mjs","sourcesContent":["import type { NavigationMenu as NavigationMenuPrimitive } from '@base-ui/react/navigation-menu';\nimport { cva } from 'class-variance-authority';\nimport type * as React from 'react';\nimport type { SurfaceLevel } from '../lib/surface.js';\n\ntype PositionerProps = React.ComponentProps<typeof NavigationMenuPrimitive.Positioner>;\n\nexport const navigationMenuTriggerStyle = cva(\n 'box-border flex items-center justify-center gap-1.5 h-10 px-2.5 xs:px-3 m-0 rounded-md text-foreground font-medium !text-[15px] leading-6 select-none no-underline hover:text-foreground data-[popup-open]:bg-black/[0.07] dark:data-[popup-open]:bg-white/[0.07] data-[popup-open]:text-foreground focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-1 focus-visible:outline-ring focus-visible:relative',\n);\n\nexport const navigationMenuSubTriggerStyle = cva(\n 'w-full text-left relative block rounded-md p-2.5 xs:p-3 no-underline text-inherit hover:bg-black/[0.07] dark:hover:bg-white/[0.07] hover:text-foreground active:bg-black/[0.11] dark:active:bg-white/[0.11] focus-visible:relative focus-visible:outline focus-visible:outline-2 focus-visible:-outline-offset-1 focus-visible:outline-ring data-[popup-open]:bg-black/[0.07] dark:data-[popup-open]:bg-white/[0.07] data-[popup-open]:text-foreground',\n);\n\nexport interface NavigationMenuProps extends React.ComponentProps<typeof NavigationMenuPrimitive.Root> {\n side?: PositionerProps['side'];\n sideOffset?: PositionerProps['sideOffset'];\n align?: PositionerProps['align'];\n alignOffset?: PositionerProps['alignOffset'];\n collisionPadding?: PositionerProps['collisionPadding'];\n collisionBoundary?: PositionerProps['collisionBoundary'];\n positionMethod?: PositionerProps['positionMethod'];\n arrow?: boolean;\n /** Surface elevation level (1-8) for the bar. Defaults to 2 — subtle toolbar above the page. */\n level?: SurfaceLevel;\n /** Shadow weight (1-8) for the bar. Defaults to 2. */\n shadowLevel?: SurfaceLevel;\n}\n\nexport interface NavigationMenuLinkProps extends React.ComponentProps<typeof NavigationMenuPrimitive.Link> {\n /**\n * When true, applies trigger button styling for top-level navigation links\n */\n standalone?: boolean;\n}\n\nexport interface NavigationMenuViewportProps extends React.ComponentProps<typeof NavigationMenuPrimitive.Viewport> {\n side?: PositionerProps['side'];\n sideOffset?: PositionerProps['sideOffset'];\n align?: PositionerProps['align'];\n alignOffset?: PositionerProps['alignOffset'];\n collisionPadding?: PositionerProps['collisionPadding'];\n collisionBoundary?: PositionerProps['collisionBoundary'];\n positionMethod?: PositionerProps['positionMethod'];\n arrow?: boolean;\n}\n\nexport interface NavigationMenuSubProps extends React.ComponentProps<typeof NavigationMenuPrimitive.Root> {\n side?: PositionerProps['side'];\n sideOffset?: PositionerProps['sideOffset'];\n align?: PositionerProps['align'];\n alignOffset?: PositionerProps['alignOffset'];\n arrow?: boolean;\n}\n"]}
|