@orangecheck/app-design 0.3.2 → 0.4.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/dist/brand.d.mts +26 -4
- package/dist/brand.d.ts +26 -4
- package/dist/brand.js +342 -49
- package/dist/brand.js.map +1 -1
- package/dist/brand.mjs +341 -50
- package/dist/brand.mjs.map +1 -1
- package/dist/components.d.mts +43 -2
- package/dist/components.d.ts +43 -2
- package/dist/components.js +206 -0
- package/dist/components.js.map +1 -1
- package/dist/components.mjs +200 -1
- package/dist/components.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +547 -49
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +539 -50
- package/dist/index.mjs.map +1 -1
- package/dist/styles/motion.css +52 -0
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -812,39 +812,313 @@ function Lockup({ name = "orangecheck", size = 28, className }) {
|
|
|
812
812
|
}
|
|
813
813
|
);
|
|
814
814
|
}
|
|
815
|
+
|
|
816
|
+
// src/brand/portrait-tone.ts
|
|
817
|
+
var PORTRAIT_TONE_SIZE = 128;
|
|
818
|
+
var PORTRAIT_TONE_B64 = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAADCKz/v//9lYBgAAAAAAAAAAAAAAFUJqiaTD5/PdnFJZqub/////////6beKXzoFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkEGl+dzPP/6XksDAAAAAAAAAAAAAABGjJTgavFzcyyhIrS////////////5serj0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABggiVXWMv/vsj0YlDAAAAAAAAAAAAAAMHTVejKWwwr+1x/n/////////////7t/Vp00AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABDCdFSlWU6fGrXy4eFgAAAAAAAAAAAAsZLlB5oLrQ3Of///////////////////7hnTkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwABGTAzP3bK78yGOiErIQUAAAAAAAAACRYsWIa63fH/////////////////////+d2/fCUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAVMD1NdbXu6q9NGRoeGQ0AAAAAAAAJHTJbneH////////////////////////v0L+rcBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwGCR4zP09ync3uwlwYBgkQHCQgEAULGig8VYfP///////////////////////////v5NewYRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAYMGSEkMFJ1pebdgSUAAAAIHTI9P0lieIyq3f//////////////////////////////9s2lVgEAAAAAAAAAAAAGBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgsRGBAROni19v+1RgAAAAAGIT9efqfM5///////////////////////////////////2a9yIQAAAAAAAAAAABUcDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwULGB0lEgQoecf0/995FAAAAAAJKV+az/3////////////////////////////////////coGowAAAAAAAAAAAAHD0pAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMBA0hLzwhARxlq9n77JIkAAAAAAAVUJrV////////////////////+fT///nm+f//////+dKfaCkAAAAAAAAAAA0iRjwHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgEAAR5HZ0IUM3Wnz+/djS4AAAAAAAcwa6Xd///////////////////z4f7/39Lu///////76b9rDgAAAAAAAAAdPSkwMA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAkAAAAJ3uiZSlFg7DP4s+ENgcAAAAABhQvXJ3q//////////////////Pn//jQyM/X6v//+OfqqzcAAAAAAAAAABI6MDAzHgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEB4IAA1Gq7trNUZ5r8O/p2EoEAQFBwkRESFPlez/////////////////9Pb//9/Mt6qvx+bMpZRMAAAAAAAAAAAAABY1UmRJHgUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALDBglNV+tt3VMXJK7r5R7SSEQCw4RFiAkQoTP//////////////////////////HQqIyg2ch/MwAAAAAAAAAAAAAABihfnZRKFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhAFHTY/aJ+YZUZntcCRe21HKBoSEBQaJUaM3P//////////////////////+Pn76dS9p6/V2n4JAAAAAAAAAAAAAAQLKG3H1Yc5DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcJxElOkOPx5JKMGjCuIeGeUonHhwVEhUrddL////////////////////////4+em6r8/fzcqzWAAAAAAAAAAAAAAAFCRMkdDSom82DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABSkhES5MZb30t1k5eMfHsreXWTUhGRUSHU2o+P//////////////////////////77OkzdzFolgLAAAAAAAAAAAAAAASRXKdx8+7q3gyCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQGgAAHEJ+zfTDbUl4x+Lf2qhlQigYFBo5gd3////////////////////////////2xaqdnJJSAgAAAAAHDgAABAAAAAVHdpjN6eLcu2spDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwEAAAMMo3d36BrXIrV6ubqvWo3JCAgL1+y/////////////////////////+/7//TVs3tlTQsAAAAAAA0SAAcoBQAAAC5llcjm7vnvqFwkBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZHAAAAAkvkdzDf1xnr/bz6f7ffz0kHSdFidn/////////////////////////+fjmwKqSakYNAAAAAAAHDQQAABQEAAAAGEl2pc3s///IeTAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACs1AAAAEU2q1bt8TFy1///5/+mkYjIeL16o7v//////////////////////////9qtrXFVPLwAAAAAAAAQGAAAAAAAAAAAMNV6RwOz//9mUQBUJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJLykBAAw2ku75z4dTZaj0///51bOHRSc9drv2///////++//////////////////5nEozQ0kVAAAAAAAAAAAAAAAAAAAAAA5Ccpe44v303a9YGgcBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATk8DAAAGF7H///afkZcoPb///bMspRWLkaHwPH//////fH2//////////////////6/bzc3MgAAAAAAAAAAAAAAAAAAAAAAHluVs7q7yNfPt3MuDAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANjIAAAAQcN///8dbKUqt//////bcuoFJXqDP+f/////c7P///////////////////+azazIAAAAAAAAAAAAAAAAAAAAAAAY3eL3ZvZSfx8jCoFkhCwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCwAAAByM+f//tVIuSrX////////4unh5sOr//////+T0/////////////////////+yyWAAAAAAAAAAAAAAAAAAAAAAAJG239P3DkaTDwNDQgSwOCwUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOFAgAAAAAPbX///+1WSs/q//////////FhmqN5P///////////////////////////////9+EDAAAAAAAAAAAAAAAAAAABilkre7//+mvpLC62e6qRhYLBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEvGgYAAA5cx////8BYHD2z////////86VqSWjZ////////////////////////////////33wLAAAAAAAAAAAAAAAAAA09g7/n/////+GomLPQ58hqJQwCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQNTkiEQAAK5fs////6n4sUMX////////sklI6Z9r////////////////////////////////UWwAAAAAAAAAAAAAAAAUpWJXh////////9r+Xp7e1q20rDQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCckHUJrUiEVAgBNz///////rVJhwv////////ONPzBq3P///////////////////////////////81AAAAAAAAAAAAAAAAWRoHD+P////////npzaWPkZGRazISBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQ4oPzc1Ypp2LxkFCXb5///////CeXan3P//////6oc2ImHZ////////////////////////////////0jYAAAAAAAAAAAAAFk2U1////////////vHisnlyhJR1OhkHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABonKT1JQEZojHtPLxUwq////////+e/p6Cy0vP////qj0MhVdD////////////////////////////////VNgAAAAAAAAAAABVJhtf////////////77tyvg3WGon88FggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQJCkyTFhHTG9+dnNWP2/d///////////it6Sgw/////+qTSdTvf///////////////////////////////7gpAAAAAAAAAAAHPYTF////////////89XIyrqqkpi1j0IVBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAESkvKS4/Rz1GfpqGfHh1pfv////////////QlHaa5P///8hcN2rD///////////////////////////////UfBIAAAAAAAAAABllu+7////////////pxcrh2bqdp7OVVhwGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYgMjozKScvPGGlyKKBeITC//////////////61hInC////5oxomuf/////////////////////////////2nk8BAAAAAAAAAAAKXCrwtz//////////uzn8/TcsJylmoRTHQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFiszOjopIS9NkdnduKKJkeT///////////////vFp8r////+u4+1+f////////////////////////////+RPy8VAAAAAAAAAAAwW2pigdL///jm///v6f3/9uTNvauKb0AUBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkhLzMzOTowP3K44ce3w7rN///////////////////q/f/////KlLf/////////////////////////////vVZAXkUAAAAAAAAAACA2MydMr///9Ob///Hk8/356tzHnW9VMg4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhwhLi4yQDZNmNDMr7ja5v7//////////////////////////9SfwP///////////////////////////9ptNVmVcwkAAAAAAAAADBESGkOk+///////+O7x+PHawK+SYUMpCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYcHiApLjM8L0Wc2tC7x+r/////////////////////////////5sDa////////////////////////////qzMhZbOdIgAAAAAAAAcOEBkoPZHz//////nc2urx8eHHuKdvPyACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFScrKCEoPUVGZ7js5Nzh+//////////////////////////////cw+T///////////////////b///////+gIhRbtbI6AAAAAAAQICgrOkVDe9z/////3MC6x9ns9unStYFHGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZKC4uIS5JT2Kl6vju5ub//////////////////////////////8iz4f/////////////////+7P///////5EcAi91diwAAAAADBooPU1ZX1Nwx////+fQ1biaq8/v++a/lFUWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABRkkKSwvQFBTarDk2tnHv+/////////////////////////////cu8jv////////7+z////////////////ngRkAByQiDAYNERQdKC85RVVcU2S4////7+LfrYOcv9Xv58CSTREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJHCgvLzM8P0xtorunp6Cf1///////////////////////////5Kqy5P//+/b7+/nfx+///////////////+qYKAAABwcCDhUWGSEwPDo/TU9JWar/////9M+il623wuHcvYxFDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsZLj01LiwsTYmvsJKGhIa/////////////////5+bz//////TIrcr5/+fF1///6cWy3P//////////////+btGAgACBQcSFhgcITJFRUlVT0ZZqv7////0yqiyt6i94te1fjYFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACBAkNTMuJyVQoMzQuqSJeK3////////////25LqNg5i/3NC4sr/X8//z0Lvi///cu8rq/v/////////////9z2QNAAUIDBIWGBocJzk9P1BSSVuk9v///+e9pKuklLXm3bBtJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIGDR0nJyQhJ0qNyunq2reSqvP//////////8+ddVxYebXNqIOY1fbx2sfM3////+/V3O/////////////////neRQABgcICw0OERQWJzA3SkxHVYPH////5rudkoNtj9XapFsWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgYVJygcGBooQ3W78f722rKw5P//////////uGhMXHCYzMeakr/k1K2Uj7Da/f///+/Q2v////////////////+KHQUGBQcHBwYMGB0pNT1NTE1VapTH8f/uyqKJdVZ1w8eDNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEECEvLCEgIig3a8L////kysDX8f////////uaR0BniaKrl4y44cWKb2t1oMjS5Pv/78DF////////////////8YQhCAcGDRAMBw4cHCU2P0ZPW15faHyo1Nq9mpSKZXawqmcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkWJCUoLzU2LCxivf////bm0Mrm////////xWUuM1iRqJqJjauvf15hc4mour/a+f/nv8X////////////////hiSgFAgcYHRQQFRkSFik2MjpVXFlTUnOan4p7h41vcI+ESQ4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACxAZHSUvNj0sKWHC////9vPqz+H//////+6JNR4rT5/IvbCceWJWW3CNmpKSuOr9///q9P///////////////+qoOgUCCxYVDA4WFhASISwrNUlQUFZea3NrYmuDh3JeZVglAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGDRQdJyUiJyEpZM3////5///XyOr/////wGIsJzdfr+HawI1PP1l1jY97c4G77/v//////////////////////bdFDAwNDAgGCA4UEhQiLDA6QkdHWHNrUExWcoyBZUpALwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYSGSElIRgWITZyyP///////9e63P///9d/Qi4vQG2w19SiXzlDc5+leVt7qs/U2fT///////////////7////5lCsIDQwJBwYGDBkYFBkgLDpARlBkc1Y2OlZ8jGpHMyEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhAVGBwdGRgnR4zU/v//////1cLs////rVUnHCdAb6rIx6d2ZXiqv5RcZaDMv4+UyPj///js/////+rIwvP//9pbDQQICQkEAAANIiQcGRglNTpFXHBhPCkwUHh5UzIaBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDA4SGBYUGSQ9eLPU/f///93F0Pn//8d1NxoWKDxeotXSuq2wsr2wg3CNq6qMZG+w5v//2bfS38zCr4N+ref/wkAFBAYLDAQAAAshJyEeHCIuMjlPW0wvICA8ZGVHJQIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICxIeHR0lJCg9Xn+q2unHq7jQ5+m7bTUZFB0pMlOn5NnAzenXqIqXuruchHl2irjp//+6e3yDcG1wU0dVeauVMAAAAQkNBQAABRUeHBIWKDIzLCw1NSkeHDBVVjoUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIIFCIoLzcrISIwRVt/lIaHpbKwlGE3IRESHSIvW6jc4uz//+6rncXhu42Ej6vCyOH+0G81LjInJzUsJykvRkANAAAABwsCAAACDh0hGRknKyskGSElIBwYITk3HgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYZJzA8TEY3OTw3MDxDR1t1f2dDLB0VERggIjBZn9f4/////tDN18ir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";
|
|
819
|
+
var portrait = null;
|
|
820
|
+
function portraitTone() {
|
|
821
|
+
if (!portrait) {
|
|
822
|
+
const bin = atob(PORTRAIT_TONE_B64);
|
|
823
|
+
const data = new Uint8Array(bin.length);
|
|
824
|
+
for (let i = 0; i < bin.length; i++) data[i] = bin.charCodeAt(i);
|
|
825
|
+
portrait = { size: PORTRAIT_TONE_SIZE, data };
|
|
826
|
+
}
|
|
827
|
+
return portrait;
|
|
828
|
+
}
|
|
829
|
+
function sample(tone, u, v) {
|
|
830
|
+
const n = tone.size;
|
|
831
|
+
const x = Math.min(n - 1.001, Math.max(0, u * n - 0.5));
|
|
832
|
+
const y = Math.min(n - 1.001, Math.max(0, v * n - 0.5));
|
|
833
|
+
const x0 = Math.floor(x);
|
|
834
|
+
const y0 = Math.floor(y);
|
|
835
|
+
const fx = x - x0;
|
|
836
|
+
const fy = y - y0;
|
|
837
|
+
const d = tone.data;
|
|
838
|
+
const a = d[y0 * n + x0] * (1 - fx) + d[y0 * n + x0 + 1] * fx;
|
|
839
|
+
const b = d[(y0 + 1) * n + x0] * (1 - fx) + d[(y0 + 1) * n + x0 + 1] * fx;
|
|
840
|
+
return (a * (1 - fy) + b * fy) / 255;
|
|
841
|
+
}
|
|
842
|
+
var easeOut = (k) => 1 - Math.pow(1 - k, 3);
|
|
843
|
+
function HalftoneCanvas({
|
|
844
|
+
tone,
|
|
845
|
+
density = 86,
|
|
846
|
+
lens = true,
|
|
847
|
+
intro = true,
|
|
848
|
+
breathe = true,
|
|
849
|
+
ink = "#0d0a08",
|
|
850
|
+
fallbackSrc,
|
|
851
|
+
alt,
|
|
852
|
+
className,
|
|
853
|
+
style
|
|
854
|
+
}) {
|
|
855
|
+
const wrap = useRef(null);
|
|
856
|
+
const canvas = useRef(null);
|
|
857
|
+
const [live, setLive] = useState(false);
|
|
858
|
+
useEffect(() => {
|
|
859
|
+
const el = wrap.current;
|
|
860
|
+
const cv = canvas.current;
|
|
861
|
+
if (!el || !cv) return;
|
|
862
|
+
const ctx = cv.getContext("2d");
|
|
863
|
+
if (!ctx) return;
|
|
864
|
+
const t = tone ?? portraitTone();
|
|
865
|
+
const still = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
866
|
+
let size = 0;
|
|
867
|
+
let dots = new Float32Array(0);
|
|
868
|
+
let count = 0;
|
|
869
|
+
const pointer = { x: 0, y: 0, tx: 0, ty: 0, k: 0, on: false };
|
|
870
|
+
let start = 0;
|
|
871
|
+
let raf = 0;
|
|
872
|
+
let visible = true;
|
|
873
|
+
function layout() {
|
|
874
|
+
const s = el.clientWidth;
|
|
875
|
+
if (!s || s === size) return;
|
|
876
|
+
size = s;
|
|
877
|
+
const dpr = Math.min(2, window.devicePixelRatio || 1);
|
|
878
|
+
cv.width = Math.round(s * dpr);
|
|
879
|
+
cv.height = Math.round(s * dpr);
|
|
880
|
+
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
|
|
881
|
+
const pitch = s / density;
|
|
882
|
+
const c = s / 2;
|
|
883
|
+
const ca = Math.SQRT1_2;
|
|
884
|
+
const span = Math.ceil(s * 0.75 / pitch) + 1;
|
|
885
|
+
const out = [];
|
|
886
|
+
for (let i = -span; i <= span; i++) {
|
|
887
|
+
for (let j = -span; j <= span; j++) {
|
|
888
|
+
const u = i * pitch;
|
|
889
|
+
const v = j * pitch;
|
|
890
|
+
const x = c + (u - v) * ca;
|
|
891
|
+
const y = c + (u + v) * ca;
|
|
892
|
+
const dc = Math.hypot(x - c, y - c);
|
|
893
|
+
if (dc > c - pitch * 0.6) continue;
|
|
894
|
+
const inkv = sample(t, x / s, y / s);
|
|
895
|
+
if (inkv < 0.1) continue;
|
|
896
|
+
const r = pitch * Math.sqrt(inkv / Math.PI) * 1.1;
|
|
897
|
+
out.push(x, y, r, dc / c * 1100);
|
|
898
|
+
}
|
|
899
|
+
}
|
|
900
|
+
dots = Float32Array.from(out);
|
|
901
|
+
count = out.length / 4;
|
|
902
|
+
}
|
|
903
|
+
function frame(now) {
|
|
904
|
+
if (!start) start = now;
|
|
905
|
+
const el2 = now - start;
|
|
906
|
+
pointer.x += (pointer.tx - pointer.x) * 0.18;
|
|
907
|
+
pointer.y += (pointer.ty - pointer.y) * 0.18;
|
|
908
|
+
pointer.k += ((pointer.on ? 1 : 0) - pointer.k) * 0.12;
|
|
909
|
+
const L = size * 0.22;
|
|
910
|
+
ctx.clearRect(0, 0, size, size);
|
|
911
|
+
ctx.fillStyle = ink;
|
|
912
|
+
ctx.beginPath();
|
|
913
|
+
const wave = breathe && !still;
|
|
914
|
+
const sec = now / 1e3;
|
|
915
|
+
for (let n = 0; n < count; n++) {
|
|
916
|
+
let x = dots[n * 4];
|
|
917
|
+
let y = dots[n * 4 + 1];
|
|
918
|
+
let r = dots[n * 4 + 2];
|
|
919
|
+
if (intro && !still) {
|
|
920
|
+
const k = Math.min(1, Math.max(0, (el2 - dots[n * 4 + 3]) / 650));
|
|
921
|
+
if (k <= 0) continue;
|
|
922
|
+
r *= easeOut(k);
|
|
923
|
+
}
|
|
924
|
+
if (wave) r *= 1 + 0.05 * Math.sin(sec * 1.1 + (x + y) / size * 6);
|
|
925
|
+
if (pointer.k > 0.01) {
|
|
926
|
+
const dx = x - pointer.x;
|
|
927
|
+
const dy = y - pointer.y;
|
|
928
|
+
const d = Math.hypot(dx, dy);
|
|
929
|
+
if (d < L) {
|
|
930
|
+
const f = (1 - d / L) * pointer.k;
|
|
931
|
+
r *= 1 - 0.75 * f * f;
|
|
932
|
+
if (d > 1e-3) {
|
|
933
|
+
const push = f * (size / density) * 2.6;
|
|
934
|
+
x += dx / d * push;
|
|
935
|
+
y += dy / d * push;
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
}
|
|
939
|
+
ctx.moveTo(x + r, y);
|
|
940
|
+
ctx.arc(x, y, r, 0, Math.PI * 2);
|
|
941
|
+
}
|
|
942
|
+
ctx.fill();
|
|
943
|
+
const introDone = !intro || still || el2 > 1900;
|
|
944
|
+
const busy = wave || pointer.k > 0.01 || !introDone;
|
|
945
|
+
raf = busy && visible && !document.hidden ? requestAnimationFrame(frame) : 0;
|
|
946
|
+
}
|
|
947
|
+
const kick = () => {
|
|
948
|
+
if (!raf && visible && !document.hidden) raf = requestAnimationFrame(frame);
|
|
949
|
+
};
|
|
950
|
+
layout();
|
|
951
|
+
setLive(true);
|
|
952
|
+
kick();
|
|
953
|
+
const ro = typeof ResizeObserver !== "undefined" ? new ResizeObserver(() => (layout(), kick())) : null;
|
|
954
|
+
ro?.observe(el);
|
|
955
|
+
const io = typeof IntersectionObserver !== "undefined" ? new IntersectionObserver(([e]) => {
|
|
956
|
+
visible = Boolean(e?.isIntersecting);
|
|
957
|
+
kick();
|
|
958
|
+
}) : null;
|
|
959
|
+
io?.observe(el);
|
|
960
|
+
const onVis = () => kick();
|
|
961
|
+
document.addEventListener("visibilitychange", onVis);
|
|
962
|
+
const move = (e) => {
|
|
963
|
+
const b = el.getBoundingClientRect();
|
|
964
|
+
pointer.tx = e.clientX - b.left;
|
|
965
|
+
pointer.ty = e.clientY - b.top;
|
|
966
|
+
if (!pointer.on) {
|
|
967
|
+
pointer.x = pointer.tx;
|
|
968
|
+
pointer.y = pointer.ty;
|
|
969
|
+
}
|
|
970
|
+
pointer.on = true;
|
|
971
|
+
kick();
|
|
972
|
+
};
|
|
973
|
+
const leave = () => {
|
|
974
|
+
pointer.on = false;
|
|
975
|
+
kick();
|
|
976
|
+
};
|
|
977
|
+
if (lens && !still) {
|
|
978
|
+
el.addEventListener("pointermove", move);
|
|
979
|
+
el.addEventListener("pointerleave", leave);
|
|
980
|
+
}
|
|
981
|
+
return () => {
|
|
982
|
+
cancelAnimationFrame(raf);
|
|
983
|
+
ro?.disconnect();
|
|
984
|
+
io?.disconnect();
|
|
985
|
+
document.removeEventListener("visibilitychange", onVis);
|
|
986
|
+
el.removeEventListener("pointermove", move);
|
|
987
|
+
el.removeEventListener("pointerleave", leave);
|
|
988
|
+
};
|
|
989
|
+
}, [tone, density, lens, intro, breathe, ink]);
|
|
990
|
+
return /* @__PURE__ */ jsxs("div", { ref: wrap, className: cn("relative aspect-square w-full", className), style, "data-live": live || void 0, children: [
|
|
991
|
+
fallbackSrc ? (
|
|
992
|
+
// eslint-disable-next-line @next/next/no-img-element -- the still screen, until the live one draws
|
|
993
|
+
/* @__PURE__ */ jsx(
|
|
994
|
+
"img",
|
|
995
|
+
{
|
|
996
|
+
src: fallbackSrc,
|
|
997
|
+
alt: "",
|
|
998
|
+
"aria-hidden": true,
|
|
999
|
+
className: cn("absolute inset-0 size-full select-none transition-opacity duration-300", live && "opacity-0"),
|
|
1000
|
+
draggable: false
|
|
1001
|
+
}
|
|
1002
|
+
)
|
|
1003
|
+
) : null,
|
|
1004
|
+
/* @__PURE__ */ jsx("canvas", { ref: canvas, role: "img", "aria-label": alt, className: "absolute inset-0 size-full" })
|
|
1005
|
+
] });
|
|
1006
|
+
}
|
|
815
1007
|
var SPHERE_GRADIENT = "radial-gradient(86% 86% at 36% 32%, #fff7f0 0%, #ffdec8 14%, #ffa069 34%, #ff7030 56%, #f65210 78%, #de4006 100%)";
|
|
816
1008
|
var SPHERE_DEPTH = "inset -14px -22px 44px rgb(150 40 0 / 0.16), 0 36px 70px -34px rgb(234 88 11 / 0.45)";
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
1009
|
+
var SPHERE_GLOSS = "radial-gradient(38% 30% at 33% 22%, rgb(255 255 255 / 0.55), transparent 72%)";
|
|
1010
|
+
function Ball({ src, alt, float, live }) {
|
|
1011
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("relative size-full", float && "oca-animate-float"), children: [
|
|
1012
|
+
/* @__PURE__ */ jsx(
|
|
1013
|
+
"div",
|
|
1014
|
+
{
|
|
1015
|
+
"aria-hidden": true,
|
|
1016
|
+
className: "absolute inset-x-[14%] -bottom-[7%] h-[10%] rounded-[50%] bg-[rgb(234_88_11/0.28)] blur-2xl"
|
|
1017
|
+
}
|
|
1018
|
+
),
|
|
1019
|
+
/* @__PURE__ */ jsxs(
|
|
1020
|
+
"div",
|
|
1021
|
+
{
|
|
1022
|
+
className: "relative size-full overflow-hidden rounded-full",
|
|
1023
|
+
style: { background: SPHERE_GRADIENT, boxShadow: SPHERE_DEPTH },
|
|
1024
|
+
children: [
|
|
1025
|
+
live ? /* @__PURE__ */ jsx(HalftoneCanvas, { fallbackSrc: src, alt }) : (
|
|
1026
|
+
// eslint-disable-next-line @next/next/no-img-element -- a static dot layer, sized by CSS
|
|
1027
|
+
/* @__PURE__ */ jsx("img", { src, alt, className: "absolute inset-0 size-full select-none", draggable: false })
|
|
1028
|
+
),
|
|
1029
|
+
/* @__PURE__ */ jsx(
|
|
1030
|
+
"div",
|
|
1031
|
+
{
|
|
1032
|
+
"aria-hidden": true,
|
|
1033
|
+
className: "pointer-events-none absolute inset-0 rounded-full mix-blend-soft-light",
|
|
1034
|
+
style: { background: SPHERE_GLOSS }
|
|
1035
|
+
}
|
|
1036
|
+
)
|
|
1037
|
+
]
|
|
1038
|
+
}
|
|
1039
|
+
)
|
|
1040
|
+
] });
|
|
826
1041
|
}
|
|
827
|
-
function HalftoneSphere({
|
|
1042
|
+
function HalftoneSphere({
|
|
1043
|
+
src,
|
|
1044
|
+
alt,
|
|
1045
|
+
stadium = false,
|
|
1046
|
+
float = false,
|
|
1047
|
+
live = false,
|
|
1048
|
+
className,
|
|
1049
|
+
style
|
|
1050
|
+
}) {
|
|
828
1051
|
if (!stadium) {
|
|
829
|
-
return /* @__PURE__ */ jsx("div", { className: cn("relative aspect-square w-full", className), style, children: /* @__PURE__ */ jsx(Ball, { src, alt, float }) });
|
|
1052
|
+
return /* @__PURE__ */ jsx("div", { className: cn("relative aspect-square w-full", className), style, children: /* @__PURE__ */ jsx(Ball, { src, alt, float, live }) });
|
|
830
1053
|
}
|
|
831
1054
|
return /* @__PURE__ */ jsxs("div", { className: cn("relative aspect-[1.255/1.127] w-full", className), style, children: [
|
|
832
1055
|
/* @__PURE__ */ jsx("div", { "aria-hidden": true, className: "oca-stadium pointer-events-none absolute left-0 top-0 h-full w-[88.4%] rounded-[32%]" }),
|
|
833
|
-
/* @__PURE__ */ jsx("div", { className: "absolute bottom-0 right-0 aspect-square w-[79.7%]", children: /* @__PURE__ */ jsx(Ball, { src, alt, float }) })
|
|
1056
|
+
/* @__PURE__ */ jsx("div", { className: "absolute bottom-0 right-0 aspect-square w-[79.7%]", children: /* @__PURE__ */ jsx(Ball, { src, alt, float, live }) })
|
|
834
1057
|
] });
|
|
835
1058
|
}
|
|
836
|
-
function IsoCheck({ size = 360, settle = false, shadow = true, title, className }) {
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
)
|
|
847
|
-
|
|
1059
|
+
function IsoCheck({ size = 360, settle = false, shadow = true, tilt = false, title, className }) {
|
|
1060
|
+
const ref = useRef(null);
|
|
1061
|
+
useEffect(() => {
|
|
1062
|
+
const el = ref.current;
|
|
1063
|
+
if (!el || !tilt || window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
|
|
1064
|
+
let raf = 0;
|
|
1065
|
+
let tx = 0;
|
|
1066
|
+
let ty = 0;
|
|
1067
|
+
let x = 0;
|
|
1068
|
+
let y = 0;
|
|
1069
|
+
const step = () => {
|
|
1070
|
+
x += (tx - x) * 0.08;
|
|
1071
|
+
y += (ty - y) * 0.08;
|
|
1072
|
+
el.style.setProperty("--rx", `${(-y * 10).toFixed(2)}deg`);
|
|
1073
|
+
el.style.setProperty("--ry", `${(x * 14).toFixed(2)}deg`);
|
|
1074
|
+
raf = Math.abs(tx - x) + Math.abs(ty - y) > 1e-3 ? requestAnimationFrame(step) : 0;
|
|
1075
|
+
};
|
|
1076
|
+
const move = (e) => {
|
|
1077
|
+
const b = el.getBoundingClientRect();
|
|
1078
|
+
tx = Math.max(-1, Math.min(1, (e.clientX - (b.left + b.width / 2)) / (window.innerWidth / 2)));
|
|
1079
|
+
ty = Math.max(-1, Math.min(1, (e.clientY - (b.top + b.height / 2)) / (window.innerHeight / 2)));
|
|
1080
|
+
if (!raf) raf = requestAnimationFrame(step);
|
|
1081
|
+
};
|
|
1082
|
+
window.addEventListener("pointermove", move, { passive: true });
|
|
1083
|
+
return () => {
|
|
1084
|
+
cancelAnimationFrame(raf);
|
|
1085
|
+
window.removeEventListener("pointermove", move);
|
|
1086
|
+
};
|
|
1087
|
+
}, [tilt]);
|
|
1088
|
+
return /* @__PURE__ */ jsxs(
|
|
1089
|
+
"div",
|
|
1090
|
+
{
|
|
1091
|
+
ref,
|
|
1092
|
+
className: cn("relative inline-block", settle && "oca-animate-settle", className),
|
|
1093
|
+
style: { width: size, perspective: tilt ? 900 : void 0 },
|
|
1094
|
+
children: [
|
|
1095
|
+
tilt ? /* @__PURE__ */ jsx(
|
|
1096
|
+
"div",
|
|
1097
|
+
{
|
|
1098
|
+
"aria-hidden": true,
|
|
1099
|
+
className: "absolute left-1/2 top-1/2 -z-0 aspect-square w-[120%] -translate-x-1/2 -translate-y-1/2 rounded-full opacity-70 blur-3xl",
|
|
1100
|
+
style: { background: "radial-gradient(closest-side, rgb(255 140 70 / 0.35), transparent)" }
|
|
1101
|
+
}
|
|
1102
|
+
) : null,
|
|
1103
|
+
/* @__PURE__ */ jsx(
|
|
1104
|
+
"div",
|
|
1105
|
+
{
|
|
1106
|
+
className: "relative z-10 transition-transform duration-300 ease-out",
|
|
1107
|
+
style: tilt ? { transform: "rotateX(var(--rx, 0deg)) rotateY(var(--ry, 0deg))", transformStyle: "preserve-3d" } : void 0,
|
|
1108
|
+
children: /* @__PURE__ */ jsx(Mark, { size, title, className: "block" })
|
|
1109
|
+
}
|
|
1110
|
+
),
|
|
1111
|
+
shadow ? /* @__PURE__ */ jsx(
|
|
1112
|
+
"div",
|
|
1113
|
+
{
|
|
1114
|
+
"aria-hidden": true,
|
|
1115
|
+
className: "absolute left-[8%] right-[8%] rounded-[50%] opacity-60 blur-xl",
|
|
1116
|
+
style: { height: size * 0.08, bottom: -size * 0.04, background: "rgb(234 88 11 / 0.18)" }
|
|
1117
|
+
}
|
|
1118
|
+
) : null
|
|
1119
|
+
]
|
|
1120
|
+
}
|
|
1121
|
+
);
|
|
848
1122
|
}
|
|
849
1123
|
var CELL_W = 22;
|
|
850
1124
|
var CELL_H = 27;
|
|
@@ -864,6 +1138,7 @@ function Crowd({
|
|
|
864
1138
|
seed = 21,
|
|
865
1139
|
tone = "ink",
|
|
866
1140
|
label = "A crowd of identical accounts. Only a few are real.",
|
|
1141
|
+
story = false,
|
|
867
1142
|
className
|
|
868
1143
|
}) {
|
|
869
1144
|
const width = cols * CELL_W;
|
|
@@ -872,37 +1147,52 @@ function Crowd({
|
|
|
872
1147
|
const nearFrom = Math.floor(rows / 2) * cols;
|
|
873
1148
|
const realSet = new Set([...picks(real, rows * cols - nearFrom, seed)].map((i) => i + nearFrom));
|
|
874
1149
|
const bot = tone === "ink" ? "#ffffff" : "#0a0a0a";
|
|
1150
|
+
let lcg = seed * 7919 >>> 0;
|
|
1151
|
+
const leaveAt = () => {
|
|
1152
|
+
lcg = Math.imul(lcg, 1664525) + 1013904223 >>> 0;
|
|
1153
|
+
return 0.12 + lcg / 2 ** 32 * 0.6;
|
|
1154
|
+
};
|
|
875
1155
|
let y = 0;
|
|
876
|
-
return /* @__PURE__ */
|
|
1156
|
+
return /* @__PURE__ */ jsxs(
|
|
877
1157
|
"svg",
|
|
878
1158
|
{
|
|
879
1159
|
role: "img",
|
|
880
1160
|
"aria-label": label,
|
|
881
1161
|
viewBox: `0 0 ${width} ${Math.ceil(height)}`,
|
|
882
|
-
className: cn("block h-auto w-full", className),
|
|
883
|
-
children:
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
const
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
1162
|
+
className: cn("block h-auto w-full overflow-visible", className),
|
|
1163
|
+
children: [
|
|
1164
|
+
story ? /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsxs("radialGradient", { id: "oca-crowd-glow", children: [
|
|
1165
|
+
/* @__PURE__ */ jsx("stop", { offset: "0", stopColor: "#ff7a3d", stopOpacity: "0.55" }),
|
|
1166
|
+
/* @__PURE__ */ jsx("stop", { offset: "1", stopColor: "#ff7a3d", stopOpacity: "0" })
|
|
1167
|
+
] }) }) : null,
|
|
1168
|
+
scales.map((s, r) => {
|
|
1169
|
+
const rowY = y;
|
|
1170
|
+
y += CELL_H * s;
|
|
1171
|
+
const rowW = cols * CELL_W * s;
|
|
1172
|
+
const x0 = (width - rowW) / 2;
|
|
1173
|
+
return Array.from({ length: cols }, (_, c) => {
|
|
1174
|
+
const i = r * cols + c;
|
|
1175
|
+
const isReal = realSet.has(i);
|
|
1176
|
+
const t = leaveAt();
|
|
1177
|
+
return /* @__PURE__ */ jsxs("g", { transform: `translate(${x0 + c * CELL_W * s} ${rowY}) scale(${s})`, children: [
|
|
1178
|
+
isReal && story ? /* @__PURE__ */ jsx("circle", { className: "oca-crowd-halo", cx: 11, cy: 14, r: 13, fill: "url(#oca-crowd-glow)" }) : null,
|
|
1179
|
+
/* @__PURE__ */ jsxs(
|
|
1180
|
+
"g",
|
|
1181
|
+
{
|
|
1182
|
+
className: story ? isReal ? "oca-crowd-real" : "oca-crowd-bot" : void 0,
|
|
1183
|
+
style: story && !isReal ? { "--t": t.toFixed(3) } : void 0,
|
|
1184
|
+
fill: isReal ? "var(--oca-orange)" : bot,
|
|
1185
|
+
fillOpacity: isReal ? 1 : 0.1 + 0.16 * s,
|
|
1186
|
+
children: [
|
|
1187
|
+
/* @__PURE__ */ jsx("circle", { cx: 11, cy: 8, r: 4.4 }),
|
|
1188
|
+
/* @__PURE__ */ jsx("path", { d: "M3 25a8 8.5 0 0 1 16 0Z" })
|
|
1189
|
+
]
|
|
1190
|
+
}
|
|
1191
|
+
)
|
|
1192
|
+
] }, i);
|
|
1193
|
+
});
|
|
1194
|
+
})
|
|
1195
|
+
]
|
|
906
1196
|
}
|
|
907
1197
|
);
|
|
908
1198
|
}
|
|
@@ -1767,6 +2057,205 @@ function SatsFigure({
|
|
|
1767
2057
|
hint ? /* @__PURE__ */ jsx("span", { className: "text-[0.875rem] text-muted-foreground", children: hint }) : null
|
|
1768
2058
|
] });
|
|
1769
2059
|
}
|
|
2060
|
+
function prefersStill() {
|
|
2061
|
+
return typeof window !== "undefined" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
2062
|
+
}
|
|
2063
|
+
function useInView(rootMargin = "0px 0px -12% 0px") {
|
|
2064
|
+
const ref = useRef(null);
|
|
2065
|
+
const [seen, setSeen] = useState(false);
|
|
2066
|
+
useEffect(() => {
|
|
2067
|
+
const el = ref.current;
|
|
2068
|
+
if (!el || seen) return;
|
|
2069
|
+
if (typeof IntersectionObserver === "undefined") {
|
|
2070
|
+
setSeen(true);
|
|
2071
|
+
return;
|
|
2072
|
+
}
|
|
2073
|
+
const io = new IntersectionObserver(
|
|
2074
|
+
([e]) => {
|
|
2075
|
+
if (e?.isIntersecting) {
|
|
2076
|
+
setSeen(true);
|
|
2077
|
+
io.disconnect();
|
|
2078
|
+
}
|
|
2079
|
+
},
|
|
2080
|
+
{ rootMargin }
|
|
2081
|
+
);
|
|
2082
|
+
io.observe(el);
|
|
2083
|
+
return () => io.disconnect();
|
|
2084
|
+
}, [rootMargin, seen]);
|
|
2085
|
+
return [ref, seen];
|
|
2086
|
+
}
|
|
2087
|
+
function Reveal({
|
|
2088
|
+
as = "div",
|
|
2089
|
+
delay = 0,
|
|
2090
|
+
className,
|
|
2091
|
+
style,
|
|
2092
|
+
children
|
|
2093
|
+
}) {
|
|
2094
|
+
const ref = useRef(null);
|
|
2095
|
+
useEffect(() => {
|
|
2096
|
+
const el = ref.current;
|
|
2097
|
+
if (!el || prefersStill() || typeof IntersectionObserver === "undefined") return;
|
|
2098
|
+
if (el.getBoundingClientRect().top < window.innerHeight * 0.92) return;
|
|
2099
|
+
el.dataset.reveal = "pending";
|
|
2100
|
+
const io = new IntersectionObserver(
|
|
2101
|
+
([e]) => {
|
|
2102
|
+
if (e?.isIntersecting) {
|
|
2103
|
+
el.dataset.reveal = "shown";
|
|
2104
|
+
io.disconnect();
|
|
2105
|
+
}
|
|
2106
|
+
},
|
|
2107
|
+
{ rootMargin: "0px 0px -10% 0px" }
|
|
2108
|
+
);
|
|
2109
|
+
io.observe(el);
|
|
2110
|
+
return () => io.disconnect();
|
|
2111
|
+
}, []);
|
|
2112
|
+
return createElement(
|
|
2113
|
+
as,
|
|
2114
|
+
{ ref, className, style: { ...style, "--reveal-delay": `${delay}ms` } },
|
|
2115
|
+
children
|
|
2116
|
+
);
|
|
2117
|
+
}
|
|
2118
|
+
function ScrollStory({
|
|
2119
|
+
length = 2,
|
|
2120
|
+
className,
|
|
2121
|
+
innerClassName,
|
|
2122
|
+
children
|
|
2123
|
+
}) {
|
|
2124
|
+
const ref = useRef(null);
|
|
2125
|
+
const [pinned, setPinned] = useState(false);
|
|
2126
|
+
useEffect(() => {
|
|
2127
|
+
const el = ref.current;
|
|
2128
|
+
if (!el || prefersStill()) return;
|
|
2129
|
+
setPinned(true);
|
|
2130
|
+
let raf = 0;
|
|
2131
|
+
const update = () => {
|
|
2132
|
+
raf = 0;
|
|
2133
|
+
const r = el.getBoundingClientRect();
|
|
2134
|
+
const travel = r.height - window.innerHeight;
|
|
2135
|
+
const p = travel > 0 ? Math.min(1, Math.max(0, -r.top / travel)) : 0;
|
|
2136
|
+
el.style.setProperty("--p", p.toFixed(4));
|
|
2137
|
+
};
|
|
2138
|
+
const on = () => {
|
|
2139
|
+
if (!raf) raf = requestAnimationFrame(update);
|
|
2140
|
+
};
|
|
2141
|
+
update();
|
|
2142
|
+
window.addEventListener("scroll", on, { passive: true });
|
|
2143
|
+
window.addEventListener("resize", on);
|
|
2144
|
+
return () => {
|
|
2145
|
+
cancelAnimationFrame(raf);
|
|
2146
|
+
window.removeEventListener("scroll", on);
|
|
2147
|
+
window.removeEventListener("resize", on);
|
|
2148
|
+
};
|
|
2149
|
+
}, []);
|
|
2150
|
+
return /* @__PURE__ */ jsx("div", { ref, className: cn("relative", className), style: pinned ? { height: `${length * 100}svh` } : void 0, children: /* @__PURE__ */ jsx("div", { className: cn(pinned && "sticky top-0 flex min-h-svh items-center", innerClassName), children }) });
|
|
2151
|
+
}
|
|
2152
|
+
function Ticker({
|
|
2153
|
+
value,
|
|
2154
|
+
duration = 1200,
|
|
2155
|
+
format = (n) => Math.round(n).toLocaleString("en-US"),
|
|
2156
|
+
className
|
|
2157
|
+
}) {
|
|
2158
|
+
const [ref, seen] = useInView();
|
|
2159
|
+
const [shown, setShown] = useState(value);
|
|
2160
|
+
const animate = useRef(null);
|
|
2161
|
+
useEffect(() => {
|
|
2162
|
+
const el = ref.current;
|
|
2163
|
+
if (!el || animate.current !== null) return;
|
|
2164
|
+
animate.current = !prefersStill() && el.getBoundingClientRect().top > window.innerHeight * 0.9;
|
|
2165
|
+
if (animate.current) setShown(0);
|
|
2166
|
+
}, [ref]);
|
|
2167
|
+
useEffect(() => {
|
|
2168
|
+
if (!seen) return;
|
|
2169
|
+
if (!animate.current) {
|
|
2170
|
+
setShown(value);
|
|
2171
|
+
return;
|
|
2172
|
+
}
|
|
2173
|
+
let raf = 0;
|
|
2174
|
+
const t0 = performance.now();
|
|
2175
|
+
const step = (now) => {
|
|
2176
|
+
const k = Math.min(1, (now - t0) / duration);
|
|
2177
|
+
setShown(value * (1 - Math.pow(1 - k, 3)));
|
|
2178
|
+
if (k < 1) raf = requestAnimationFrame(step);
|
|
2179
|
+
};
|
|
2180
|
+
raf = requestAnimationFrame(step);
|
|
2181
|
+
return () => cancelAnimationFrame(raf);
|
|
2182
|
+
}, [seen, value, duration]);
|
|
2183
|
+
return /* @__PURE__ */ jsx("span", { ref, className: cn("oca-tabular", className), children: format(shown) });
|
|
2184
|
+
}
|
|
2185
|
+
function PhoneFrame({ className, style, children }) {
|
|
2186
|
+
return /* @__PURE__ */ jsx(
|
|
2187
|
+
"div",
|
|
2188
|
+
{
|
|
2189
|
+
className: cn(
|
|
2190
|
+
"relative w-[17.5rem] shrink-0 rounded-[2.9rem] bg-[#0b0b0c] p-[0.6rem]",
|
|
2191
|
+
"shadow-[0_50px_100px_-40px_rgb(10_10_10/0.55),0_0_0_1px_rgb(255_255_255/0.06)_inset]",
|
|
2192
|
+
className
|
|
2193
|
+
),
|
|
2194
|
+
style,
|
|
2195
|
+
children: /* @__PURE__ */ jsxs("div", { className: "relative aspect-[9/19.2] overflow-hidden rounded-[2.35rem] bg-background", children: [
|
|
2196
|
+
/* @__PURE__ */ jsx("div", { "aria-hidden": true, className: "absolute left-1/2 top-2.5 z-10 h-[1.35rem] w-[5.6rem] -translate-x-1/2 rounded-full bg-[#0b0b0c]" }),
|
|
2197
|
+
children
|
|
2198
|
+
] })
|
|
2199
|
+
}
|
|
2200
|
+
);
|
|
2201
|
+
}
|
|
2202
|
+
function BrowserFrame({
|
|
2203
|
+
url = "ochk.app",
|
|
2204
|
+
className,
|
|
2205
|
+
style,
|
|
2206
|
+
children
|
|
2207
|
+
}) {
|
|
2208
|
+
return /* @__PURE__ */ jsxs(
|
|
2209
|
+
"div",
|
|
2210
|
+
{
|
|
2211
|
+
className: cn(
|
|
2212
|
+
"overflow-hidden rounded-[1.1rem] border border-border bg-card",
|
|
2213
|
+
"shadow-[0_40px_90px_-40px_rgb(10_10_10/0.45)]",
|
|
2214
|
+
className
|
|
2215
|
+
),
|
|
2216
|
+
style,
|
|
2217
|
+
children: [
|
|
2218
|
+
/* @__PURE__ */ jsxs("div", { className: "flex h-10 items-center gap-3 border-b border-border px-4", children: [
|
|
2219
|
+
/* @__PURE__ */ jsxs("div", { "aria-hidden": true, className: "flex gap-1.5", children: [
|
|
2220
|
+
/* @__PURE__ */ jsx("span", { className: "size-2.5 rounded-full bg-[#ff5f57]" }),
|
|
2221
|
+
/* @__PURE__ */ jsx("span", { className: "size-2.5 rounded-full bg-[#febc2e]" }),
|
|
2222
|
+
/* @__PURE__ */ jsx("span", { className: "size-2.5 rounded-full bg-[#28c840]" })
|
|
2223
|
+
] }),
|
|
2224
|
+
/* @__PURE__ */ jsx("div", { className: "mx-auto flex h-6 min-w-0 max-w-[60%] flex-1 items-center justify-center rounded-md bg-muted px-3 text-[0.75rem] text-muted-foreground", children: /* @__PURE__ */ jsx("span", { className: "truncate", children: url }) }),
|
|
2225
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "w-[2.6rem]" })
|
|
2226
|
+
] }),
|
|
2227
|
+
/* @__PURE__ */ jsx("div", { className: "relative", children })
|
|
2228
|
+
]
|
|
2229
|
+
}
|
|
2230
|
+
);
|
|
2231
|
+
}
|
|
2232
|
+
function FloatChip({
|
|
2233
|
+
icon,
|
|
2234
|
+
title,
|
|
2235
|
+
detail,
|
|
2236
|
+
delay = 0,
|
|
2237
|
+
className,
|
|
2238
|
+
style
|
|
2239
|
+
}) {
|
|
2240
|
+
return /* @__PURE__ */ jsxs(
|
|
2241
|
+
"div",
|
|
2242
|
+
{
|
|
2243
|
+
className: cn(
|
|
2244
|
+
"oca-animate-drift flex items-center gap-3 rounded-2xl border border-border bg-card/90 py-2.5 pl-2.5 pr-4 backdrop-blur-md",
|
|
2245
|
+
"shadow-[0_24px_50px_-24px_rgb(10_10_10/0.35)]",
|
|
2246
|
+
className
|
|
2247
|
+
),
|
|
2248
|
+
style: { animationDelay: `${-delay}s`, ...style },
|
|
2249
|
+
children: [
|
|
2250
|
+
icon ? /* @__PURE__ */ jsx("span", { className: "flex size-9 shrink-0 items-center justify-center rounded-xl bg-muted text-foreground [&_svg]:size-4", children: icon }) : null,
|
|
2251
|
+
/* @__PURE__ */ jsxs("span", { className: "flex min-w-0 flex-col", children: [
|
|
2252
|
+
/* @__PURE__ */ jsx("span", { className: "text-[0.875rem] font-medium leading-tight", children: title }),
|
|
2253
|
+
detail ? /* @__PURE__ */ jsx("span", { className: "text-[0.8125rem] leading-tight text-muted-foreground", children: detail }) : null
|
|
2254
|
+
] })
|
|
2255
|
+
]
|
|
2256
|
+
}
|
|
2257
|
+
);
|
|
2258
|
+
}
|
|
1770
2259
|
function NavLink({ item, className, onNavigate }) {
|
|
1771
2260
|
const cls = cn(
|
|
1772
2261
|
"rounded-full px-3 py-2 text-[0.9375rem] transition-colors",
|
|
@@ -2047,6 +2536,6 @@ function ThemeToggle({ className }) {
|
|
|
2047
2536
|
);
|
|
2048
2537
|
}
|
|
2049
2538
|
|
|
2050
|
-
export { APP_ATTRIBUTE, APP_ID, Accent, AccountMenu, ActivityList, AppIcon, AppShell, Badge, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardNumeral, CardTitle, Checkbox, CodeBlock, Container, CopyButton, Crowd, DataTable, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Display, DocHeader, DocLayout, DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, EmptyLine, EmptyState, Eyebrow, Field, Footnote, HalftoneSphere, HashChip, Input, IsoCheck, Kbd, KeyValueList, Label, Lead, LoadingBlock, Lockup, MARK_FACES, Mark, Notice, PackageCard, PageHeader, PageHero, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, ProgressSteps, Prose, RadioGroup, RadioGroupItem, SPHERE_GRADIENT, Sats, SatsFigure, ScrollFade, Section, SectionIntro, Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetTitle, SheetTrigger, ShellContext, SiteFooter, SiteHeader, Skeleton, Spinner, SplitBar, StatCard, StatGrid, StatusDot, StatusPill, StepGrid, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeToggle, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TruthTable, UsdApprox, appColors, appFonts, badgeVariants, buttonVariants, cardVariants, cn, satsText, sectionVariants, useCopy, useShellPlace, useTimedOut };
|
|
2539
|
+
export { APP_ATTRIBUTE, APP_ID, Accent, AccountMenu, ActivityList, AppIcon, AppShell, Badge, BrowserFrame, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardNumeral, CardTitle, Checkbox, CodeBlock, Container, CopyButton, Crowd, DataTable, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Display, DocHeader, DocLayout, DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, EmptyLine, EmptyState, Eyebrow, Field, FloatChip, Footnote, HalftoneCanvas, HalftoneSphere, HashChip, Input, IsoCheck, Kbd, KeyValueList, Label, Lead, LoadingBlock, Lockup, MARK_FACES, Mark, Notice, PackageCard, PageHeader, PageHero, PhoneFrame, Popover, PopoverAnchor, PopoverContent, PopoverTrigger, ProgressSteps, Prose, RadioGroup, RadioGroupItem, Reveal, SPHERE_GRADIENT, Sats, SatsFigure, ScrollFade, ScrollStory, Section, SectionIntro, Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetTitle, SheetTrigger, ShellContext, SiteFooter, SiteHeader, Skeleton, Spinner, SplitBar, StatCard, StatGrid, StatusDot, StatusPill, StepGrid, Switch, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeToggle, Ticker, Toaster, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TruthTable, UsdApprox, appColors, appFonts, badgeVariants, buttonVariants, cardVariants, cn, portraitTone, satsText, sectionVariants, useCopy, useInView, useShellPlace, useTimedOut };
|
|
2051
2540
|
//# sourceMappingURL=index.mjs.map
|
|
2052
2541
|
//# sourceMappingURL=index.mjs.map
|