@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/brand.d.mts
CHANGED
|
@@ -29,19 +29,21 @@ interface HalftoneSphereProps {
|
|
|
29
29
|
alt: string;
|
|
30
30
|
stadium?: boolean;
|
|
31
31
|
float?: boolean;
|
|
32
|
+
live?: boolean;
|
|
32
33
|
className?: string;
|
|
33
34
|
style?: CSSProperties;
|
|
34
35
|
}
|
|
35
|
-
declare function HalftoneSphere({ src, alt, stadium, float, className, style }: HalftoneSphereProps): react.JSX.Element;
|
|
36
|
+
declare function HalftoneSphere({ src, alt, stadium, float, live, className, style, }: HalftoneSphereProps): react.JSX.Element;
|
|
36
37
|
|
|
37
38
|
interface IsoCheckProps {
|
|
38
39
|
size?: number;
|
|
39
40
|
settle?: boolean;
|
|
40
41
|
shadow?: boolean;
|
|
42
|
+
tilt?: boolean;
|
|
41
43
|
title?: string;
|
|
42
44
|
className?: string;
|
|
43
45
|
}
|
|
44
|
-
declare function IsoCheck({ size, settle, shadow, title, className }: IsoCheckProps): react.JSX.Element;
|
|
46
|
+
declare function IsoCheck({ size, settle, shadow, tilt, title, className }: IsoCheckProps): react.JSX.Element;
|
|
45
47
|
|
|
46
48
|
interface CrowdProps {
|
|
47
49
|
cols?: number;
|
|
@@ -50,8 +52,28 @@ interface CrowdProps {
|
|
|
50
52
|
seed?: number;
|
|
51
53
|
tone?: 'ink' | 'canvas';
|
|
52
54
|
label?: string;
|
|
55
|
+
story?: boolean;
|
|
53
56
|
className?: string;
|
|
54
57
|
}
|
|
55
|
-
declare function Crowd({ cols, rows, real, seed, tone, label, className, }: CrowdProps): react.JSX.Element;
|
|
58
|
+
declare function Crowd({ cols, rows, real, seed, tone, label, story, className, }: CrowdProps): react.JSX.Element;
|
|
56
59
|
|
|
57
|
-
|
|
60
|
+
interface Tone {
|
|
61
|
+
size: number;
|
|
62
|
+
data: Uint8Array;
|
|
63
|
+
}
|
|
64
|
+
declare function portraitTone(): Tone;
|
|
65
|
+
interface HalftoneCanvasProps {
|
|
66
|
+
tone?: Tone;
|
|
67
|
+
density?: number;
|
|
68
|
+
lens?: boolean;
|
|
69
|
+
intro?: boolean;
|
|
70
|
+
breathe?: boolean;
|
|
71
|
+
ink?: string;
|
|
72
|
+
fallbackSrc?: string;
|
|
73
|
+
alt: string;
|
|
74
|
+
className?: string;
|
|
75
|
+
style?: CSSProperties;
|
|
76
|
+
}
|
|
77
|
+
declare function HalftoneCanvas({ tone, density, lens, intro, breathe, ink, fallbackSrc, alt, className, style, }: HalftoneCanvasProps): react.JSX.Element;
|
|
78
|
+
|
|
79
|
+
export { AppIcon, type AppIconProps, Crowd, type CrowdProps, HalftoneCanvas, type HalftoneCanvasProps, HalftoneSphere, type HalftoneSphereProps, IsoCheck, type IsoCheckProps, Lockup, type LockupProps, MARK_FACES, Mark, type MarkProps, SPHERE_GRADIENT, type Tone, portraitTone };
|
package/dist/brand.d.ts
CHANGED
|
@@ -29,19 +29,21 @@ interface HalftoneSphereProps {
|
|
|
29
29
|
alt: string;
|
|
30
30
|
stadium?: boolean;
|
|
31
31
|
float?: boolean;
|
|
32
|
+
live?: boolean;
|
|
32
33
|
className?: string;
|
|
33
34
|
style?: CSSProperties;
|
|
34
35
|
}
|
|
35
|
-
declare function HalftoneSphere({ src, alt, stadium, float, className, style }: HalftoneSphereProps): react.JSX.Element;
|
|
36
|
+
declare function HalftoneSphere({ src, alt, stadium, float, live, className, style, }: HalftoneSphereProps): react.JSX.Element;
|
|
36
37
|
|
|
37
38
|
interface IsoCheckProps {
|
|
38
39
|
size?: number;
|
|
39
40
|
settle?: boolean;
|
|
40
41
|
shadow?: boolean;
|
|
42
|
+
tilt?: boolean;
|
|
41
43
|
title?: string;
|
|
42
44
|
className?: string;
|
|
43
45
|
}
|
|
44
|
-
declare function IsoCheck({ size, settle, shadow, title, className }: IsoCheckProps): react.JSX.Element;
|
|
46
|
+
declare function IsoCheck({ size, settle, shadow, tilt, title, className }: IsoCheckProps): react.JSX.Element;
|
|
45
47
|
|
|
46
48
|
interface CrowdProps {
|
|
47
49
|
cols?: number;
|
|
@@ -50,8 +52,28 @@ interface CrowdProps {
|
|
|
50
52
|
seed?: number;
|
|
51
53
|
tone?: 'ink' | 'canvas';
|
|
52
54
|
label?: string;
|
|
55
|
+
story?: boolean;
|
|
53
56
|
className?: string;
|
|
54
57
|
}
|
|
55
|
-
declare function Crowd({ cols, rows, real, seed, tone, label, className, }: CrowdProps): react.JSX.Element;
|
|
58
|
+
declare function Crowd({ cols, rows, real, seed, tone, label, story, className, }: CrowdProps): react.JSX.Element;
|
|
56
59
|
|
|
57
|
-
|
|
60
|
+
interface Tone {
|
|
61
|
+
size: number;
|
|
62
|
+
data: Uint8Array;
|
|
63
|
+
}
|
|
64
|
+
declare function portraitTone(): Tone;
|
|
65
|
+
interface HalftoneCanvasProps {
|
|
66
|
+
tone?: Tone;
|
|
67
|
+
density?: number;
|
|
68
|
+
lens?: boolean;
|
|
69
|
+
intro?: boolean;
|
|
70
|
+
breathe?: boolean;
|
|
71
|
+
ink?: string;
|
|
72
|
+
fallbackSrc?: string;
|
|
73
|
+
alt: string;
|
|
74
|
+
className?: string;
|
|
75
|
+
style?: CSSProperties;
|
|
76
|
+
}
|
|
77
|
+
declare function HalftoneCanvas({ tone, density, lens, intro, breathe, ink, fallbackSrc, alt, className, style, }: HalftoneCanvasProps): react.JSX.Element;
|
|
78
|
+
|
|
79
|
+
export { AppIcon, type AppIconProps, Crowd, type CrowdProps, HalftoneCanvas, type HalftoneCanvasProps, HalftoneSphere, type HalftoneSphereProps, IsoCheck, type IsoCheckProps, Lockup, type LockupProps, MARK_FACES, Mark, type MarkProps, SPHERE_GRADIENT, type Tone, portraitTone };
|
package/dist/brand.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var clsx = require('clsx');
|
|
4
4
|
var tailwindMerge = require('tailwind-merge');
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var react = require('react');
|
|
6
7
|
|
|
7
8
|
var merge = tailwindMerge.extendTailwindMerge({
|
|
8
9
|
extend: {
|
|
@@ -93,39 +94,313 @@ function Lockup({ name = "orangecheck", size = 28, className }) {
|
|
|
93
94
|
}
|
|
94
95
|
);
|
|
95
96
|
}
|
|
97
|
+
|
|
98
|
+
// src/brand/portrait-tone.ts
|
|
99
|
+
var PORTRAIT_TONE_SIZE = 128;
|
|
100
|
+
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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";
|
|
101
|
+
var portrait = null;
|
|
102
|
+
function portraitTone() {
|
|
103
|
+
if (!portrait) {
|
|
104
|
+
const bin = atob(PORTRAIT_TONE_B64);
|
|
105
|
+
const data = new Uint8Array(bin.length);
|
|
106
|
+
for (let i = 0; i < bin.length; i++) data[i] = bin.charCodeAt(i);
|
|
107
|
+
portrait = { size: PORTRAIT_TONE_SIZE, data };
|
|
108
|
+
}
|
|
109
|
+
return portrait;
|
|
110
|
+
}
|
|
111
|
+
function sample(tone, u, v) {
|
|
112
|
+
const n = tone.size;
|
|
113
|
+
const x = Math.min(n - 1.001, Math.max(0, u * n - 0.5));
|
|
114
|
+
const y = Math.min(n - 1.001, Math.max(0, v * n - 0.5));
|
|
115
|
+
const x0 = Math.floor(x);
|
|
116
|
+
const y0 = Math.floor(y);
|
|
117
|
+
const fx = x - x0;
|
|
118
|
+
const fy = y - y0;
|
|
119
|
+
const d = tone.data;
|
|
120
|
+
const a = d[y0 * n + x0] * (1 - fx) + d[y0 * n + x0 + 1] * fx;
|
|
121
|
+
const b = d[(y0 + 1) * n + x0] * (1 - fx) + d[(y0 + 1) * n + x0 + 1] * fx;
|
|
122
|
+
return (a * (1 - fy) + b * fy) / 255;
|
|
123
|
+
}
|
|
124
|
+
var easeOut = (k) => 1 - Math.pow(1 - k, 3);
|
|
125
|
+
function HalftoneCanvas({
|
|
126
|
+
tone,
|
|
127
|
+
density = 86,
|
|
128
|
+
lens = true,
|
|
129
|
+
intro = true,
|
|
130
|
+
breathe = true,
|
|
131
|
+
ink = "#0d0a08",
|
|
132
|
+
fallbackSrc,
|
|
133
|
+
alt,
|
|
134
|
+
className,
|
|
135
|
+
style
|
|
136
|
+
}) {
|
|
137
|
+
const wrap = react.useRef(null);
|
|
138
|
+
const canvas = react.useRef(null);
|
|
139
|
+
const [live, setLive] = react.useState(false);
|
|
140
|
+
react.useEffect(() => {
|
|
141
|
+
const el = wrap.current;
|
|
142
|
+
const cv = canvas.current;
|
|
143
|
+
if (!el || !cv) return;
|
|
144
|
+
const ctx = cv.getContext("2d");
|
|
145
|
+
if (!ctx) return;
|
|
146
|
+
const t = tone ?? portraitTone();
|
|
147
|
+
const still = window.matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
148
|
+
let size = 0;
|
|
149
|
+
let dots = new Float32Array(0);
|
|
150
|
+
let count = 0;
|
|
151
|
+
const pointer = { x: 0, y: 0, tx: 0, ty: 0, k: 0, on: false };
|
|
152
|
+
let start = 0;
|
|
153
|
+
let raf = 0;
|
|
154
|
+
let visible = true;
|
|
155
|
+
function layout() {
|
|
156
|
+
const s = el.clientWidth;
|
|
157
|
+
if (!s || s === size) return;
|
|
158
|
+
size = s;
|
|
159
|
+
const dpr = Math.min(2, window.devicePixelRatio || 1);
|
|
160
|
+
cv.width = Math.round(s * dpr);
|
|
161
|
+
cv.height = Math.round(s * dpr);
|
|
162
|
+
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
|
|
163
|
+
const pitch = s / density;
|
|
164
|
+
const c = s / 2;
|
|
165
|
+
const ca = Math.SQRT1_2;
|
|
166
|
+
const span = Math.ceil(s * 0.75 / pitch) + 1;
|
|
167
|
+
const out = [];
|
|
168
|
+
for (let i = -span; i <= span; i++) {
|
|
169
|
+
for (let j = -span; j <= span; j++) {
|
|
170
|
+
const u = i * pitch;
|
|
171
|
+
const v = j * pitch;
|
|
172
|
+
const x = c + (u - v) * ca;
|
|
173
|
+
const y = c + (u + v) * ca;
|
|
174
|
+
const dc = Math.hypot(x - c, y - c);
|
|
175
|
+
if (dc > c - pitch * 0.6) continue;
|
|
176
|
+
const inkv = sample(t, x / s, y / s);
|
|
177
|
+
if (inkv < 0.1) continue;
|
|
178
|
+
const r = pitch * Math.sqrt(inkv / Math.PI) * 1.1;
|
|
179
|
+
out.push(x, y, r, dc / c * 1100);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
dots = Float32Array.from(out);
|
|
183
|
+
count = out.length / 4;
|
|
184
|
+
}
|
|
185
|
+
function frame(now) {
|
|
186
|
+
if (!start) start = now;
|
|
187
|
+
const el2 = now - start;
|
|
188
|
+
pointer.x += (pointer.tx - pointer.x) * 0.18;
|
|
189
|
+
pointer.y += (pointer.ty - pointer.y) * 0.18;
|
|
190
|
+
pointer.k += ((pointer.on ? 1 : 0) - pointer.k) * 0.12;
|
|
191
|
+
const L = size * 0.22;
|
|
192
|
+
ctx.clearRect(0, 0, size, size);
|
|
193
|
+
ctx.fillStyle = ink;
|
|
194
|
+
ctx.beginPath();
|
|
195
|
+
const wave = breathe && !still;
|
|
196
|
+
const sec = now / 1e3;
|
|
197
|
+
for (let n = 0; n < count; n++) {
|
|
198
|
+
let x = dots[n * 4];
|
|
199
|
+
let y = dots[n * 4 + 1];
|
|
200
|
+
let r = dots[n * 4 + 2];
|
|
201
|
+
if (intro && !still) {
|
|
202
|
+
const k = Math.min(1, Math.max(0, (el2 - dots[n * 4 + 3]) / 650));
|
|
203
|
+
if (k <= 0) continue;
|
|
204
|
+
r *= easeOut(k);
|
|
205
|
+
}
|
|
206
|
+
if (wave) r *= 1 + 0.05 * Math.sin(sec * 1.1 + (x + y) / size * 6);
|
|
207
|
+
if (pointer.k > 0.01) {
|
|
208
|
+
const dx = x - pointer.x;
|
|
209
|
+
const dy = y - pointer.y;
|
|
210
|
+
const d = Math.hypot(dx, dy);
|
|
211
|
+
if (d < L) {
|
|
212
|
+
const f = (1 - d / L) * pointer.k;
|
|
213
|
+
r *= 1 - 0.75 * f * f;
|
|
214
|
+
if (d > 1e-3) {
|
|
215
|
+
const push = f * (size / density) * 2.6;
|
|
216
|
+
x += dx / d * push;
|
|
217
|
+
y += dy / d * push;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
ctx.moveTo(x + r, y);
|
|
222
|
+
ctx.arc(x, y, r, 0, Math.PI * 2);
|
|
223
|
+
}
|
|
224
|
+
ctx.fill();
|
|
225
|
+
const introDone = !intro || still || el2 > 1900;
|
|
226
|
+
const busy = wave || pointer.k > 0.01 || !introDone;
|
|
227
|
+
raf = busy && visible && !document.hidden ? requestAnimationFrame(frame) : 0;
|
|
228
|
+
}
|
|
229
|
+
const kick = () => {
|
|
230
|
+
if (!raf && visible && !document.hidden) raf = requestAnimationFrame(frame);
|
|
231
|
+
};
|
|
232
|
+
layout();
|
|
233
|
+
setLive(true);
|
|
234
|
+
kick();
|
|
235
|
+
const ro = typeof ResizeObserver !== "undefined" ? new ResizeObserver(() => (layout(), kick())) : null;
|
|
236
|
+
ro?.observe(el);
|
|
237
|
+
const io = typeof IntersectionObserver !== "undefined" ? new IntersectionObserver(([e]) => {
|
|
238
|
+
visible = Boolean(e?.isIntersecting);
|
|
239
|
+
kick();
|
|
240
|
+
}) : null;
|
|
241
|
+
io?.observe(el);
|
|
242
|
+
const onVis = () => kick();
|
|
243
|
+
document.addEventListener("visibilitychange", onVis);
|
|
244
|
+
const move = (e) => {
|
|
245
|
+
const b = el.getBoundingClientRect();
|
|
246
|
+
pointer.tx = e.clientX - b.left;
|
|
247
|
+
pointer.ty = e.clientY - b.top;
|
|
248
|
+
if (!pointer.on) {
|
|
249
|
+
pointer.x = pointer.tx;
|
|
250
|
+
pointer.y = pointer.ty;
|
|
251
|
+
}
|
|
252
|
+
pointer.on = true;
|
|
253
|
+
kick();
|
|
254
|
+
};
|
|
255
|
+
const leave = () => {
|
|
256
|
+
pointer.on = false;
|
|
257
|
+
kick();
|
|
258
|
+
};
|
|
259
|
+
if (lens && !still) {
|
|
260
|
+
el.addEventListener("pointermove", move);
|
|
261
|
+
el.addEventListener("pointerleave", leave);
|
|
262
|
+
}
|
|
263
|
+
return () => {
|
|
264
|
+
cancelAnimationFrame(raf);
|
|
265
|
+
ro?.disconnect();
|
|
266
|
+
io?.disconnect();
|
|
267
|
+
document.removeEventListener("visibilitychange", onVis);
|
|
268
|
+
el.removeEventListener("pointermove", move);
|
|
269
|
+
el.removeEventListener("pointerleave", leave);
|
|
270
|
+
};
|
|
271
|
+
}, [tone, density, lens, intro, breathe, ink]);
|
|
272
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: wrap, className: cn("relative aspect-square w-full", className), style, "data-live": live || void 0, children: [
|
|
273
|
+
fallbackSrc ? (
|
|
274
|
+
// eslint-disable-next-line @next/next/no-img-element -- the still screen, until the live one draws
|
|
275
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
276
|
+
"img",
|
|
277
|
+
{
|
|
278
|
+
src: fallbackSrc,
|
|
279
|
+
alt: "",
|
|
280
|
+
"aria-hidden": true,
|
|
281
|
+
className: cn("absolute inset-0 size-full select-none transition-opacity duration-300", live && "opacity-0"),
|
|
282
|
+
draggable: false
|
|
283
|
+
}
|
|
284
|
+
)
|
|
285
|
+
) : null,
|
|
286
|
+
/* @__PURE__ */ jsxRuntime.jsx("canvas", { ref: canvas, role: "img", "aria-label": alt, className: "absolute inset-0 size-full" })
|
|
287
|
+
] });
|
|
288
|
+
}
|
|
96
289
|
var SPHERE_GRADIENT = "radial-gradient(86% 86% at 36% 32%, #fff7f0 0%, #ffdec8 14%, #ffa069 34%, #ff7030 56%, #f65210 78%, #de4006 100%)";
|
|
97
290
|
var SPHERE_DEPTH = "inset -14px -22px 44px rgb(150 40 0 / 0.16), 0 36px 70px -34px rgb(234 88 11 / 0.45)";
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
291
|
+
var SPHERE_GLOSS = "radial-gradient(38% 30% at 33% 22%, rgb(255 255 255 / 0.55), transparent 72%)";
|
|
292
|
+
function Ball({ src, alt, float, live }) {
|
|
293
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative size-full", float && "oca-animate-float"), children: [
|
|
294
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
295
|
+
"div",
|
|
296
|
+
{
|
|
297
|
+
"aria-hidden": true,
|
|
298
|
+
className: "absolute inset-x-[14%] -bottom-[7%] h-[10%] rounded-[50%] bg-[rgb(234_88_11/0.28)] blur-2xl"
|
|
299
|
+
}
|
|
300
|
+
),
|
|
301
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
302
|
+
"div",
|
|
303
|
+
{
|
|
304
|
+
className: "relative size-full overflow-hidden rounded-full",
|
|
305
|
+
style: { background: SPHERE_GRADIENT, boxShadow: SPHERE_DEPTH },
|
|
306
|
+
children: [
|
|
307
|
+
live ? /* @__PURE__ */ jsxRuntime.jsx(HalftoneCanvas, { fallbackSrc: src, alt }) : (
|
|
308
|
+
// eslint-disable-next-line @next/next/no-img-element -- a static dot layer, sized by CSS
|
|
309
|
+
/* @__PURE__ */ jsxRuntime.jsx("img", { src, alt, className: "absolute inset-0 size-full select-none", draggable: false })
|
|
310
|
+
),
|
|
311
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
312
|
+
"div",
|
|
313
|
+
{
|
|
314
|
+
"aria-hidden": true,
|
|
315
|
+
className: "pointer-events-none absolute inset-0 rounded-full mix-blend-soft-light",
|
|
316
|
+
style: { background: SPHERE_GLOSS }
|
|
317
|
+
}
|
|
318
|
+
)
|
|
319
|
+
]
|
|
320
|
+
}
|
|
321
|
+
)
|
|
322
|
+
] });
|
|
107
323
|
}
|
|
108
|
-
function HalftoneSphere({
|
|
324
|
+
function HalftoneSphere({
|
|
325
|
+
src,
|
|
326
|
+
alt,
|
|
327
|
+
stadium = false,
|
|
328
|
+
float = false,
|
|
329
|
+
live = false,
|
|
330
|
+
className,
|
|
331
|
+
style
|
|
332
|
+
}) {
|
|
109
333
|
if (!stadium) {
|
|
110
|
-
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("relative aspect-square w-full", className), style, children: /* @__PURE__ */ jsxRuntime.jsx(Ball, { src, alt, float }) });
|
|
334
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("relative aspect-square w-full", className), style, children: /* @__PURE__ */ jsxRuntime.jsx(Ball, { src, alt, float, live }) });
|
|
111
335
|
}
|
|
112
336
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative aspect-[1.255/1.127] w-full", className), style, children: [
|
|
113
337
|
/* @__PURE__ */ jsxRuntime.jsx("div", { "aria-hidden": true, className: "oca-stadium pointer-events-none absolute left-0 top-0 h-full w-[88.4%] rounded-[32%]" }),
|
|
114
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-0 right-0 aspect-square w-[79.7%]", children: /* @__PURE__ */ jsxRuntime.jsx(Ball, { src, alt, float }) })
|
|
338
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute bottom-0 right-0 aspect-square w-[79.7%]", children: /* @__PURE__ */ jsxRuntime.jsx(Ball, { src, alt, float, live }) })
|
|
115
339
|
] });
|
|
116
340
|
}
|
|
117
|
-
function IsoCheck({ size = 360, settle = false, shadow = true, title, className }) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
)
|
|
128
|
-
|
|
341
|
+
function IsoCheck({ size = 360, settle = false, shadow = true, tilt = false, title, className }) {
|
|
342
|
+
const ref = react.useRef(null);
|
|
343
|
+
react.useEffect(() => {
|
|
344
|
+
const el = ref.current;
|
|
345
|
+
if (!el || !tilt || window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
|
|
346
|
+
let raf = 0;
|
|
347
|
+
let tx = 0;
|
|
348
|
+
let ty = 0;
|
|
349
|
+
let x = 0;
|
|
350
|
+
let y = 0;
|
|
351
|
+
const step = () => {
|
|
352
|
+
x += (tx - x) * 0.08;
|
|
353
|
+
y += (ty - y) * 0.08;
|
|
354
|
+
el.style.setProperty("--rx", `${(-y * 10).toFixed(2)}deg`);
|
|
355
|
+
el.style.setProperty("--ry", `${(x * 14).toFixed(2)}deg`);
|
|
356
|
+
raf = Math.abs(tx - x) + Math.abs(ty - y) > 1e-3 ? requestAnimationFrame(step) : 0;
|
|
357
|
+
};
|
|
358
|
+
const move = (e) => {
|
|
359
|
+
const b = el.getBoundingClientRect();
|
|
360
|
+
tx = Math.max(-1, Math.min(1, (e.clientX - (b.left + b.width / 2)) / (window.innerWidth / 2)));
|
|
361
|
+
ty = Math.max(-1, Math.min(1, (e.clientY - (b.top + b.height / 2)) / (window.innerHeight / 2)));
|
|
362
|
+
if (!raf) raf = requestAnimationFrame(step);
|
|
363
|
+
};
|
|
364
|
+
window.addEventListener("pointermove", move, { passive: true });
|
|
365
|
+
return () => {
|
|
366
|
+
cancelAnimationFrame(raf);
|
|
367
|
+
window.removeEventListener("pointermove", move);
|
|
368
|
+
};
|
|
369
|
+
}, [tilt]);
|
|
370
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
371
|
+
"div",
|
|
372
|
+
{
|
|
373
|
+
ref,
|
|
374
|
+
className: cn("relative inline-block", settle && "oca-animate-settle", className),
|
|
375
|
+
style: { width: size, perspective: tilt ? 900 : void 0 },
|
|
376
|
+
children: [
|
|
377
|
+
tilt ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
378
|
+
"div",
|
|
379
|
+
{
|
|
380
|
+
"aria-hidden": true,
|
|
381
|
+
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",
|
|
382
|
+
style: { background: "radial-gradient(closest-side, rgb(255 140 70 / 0.35), transparent)" }
|
|
383
|
+
}
|
|
384
|
+
) : null,
|
|
385
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
386
|
+
"div",
|
|
387
|
+
{
|
|
388
|
+
className: "relative z-10 transition-transform duration-300 ease-out",
|
|
389
|
+
style: tilt ? { transform: "rotateX(var(--rx, 0deg)) rotateY(var(--ry, 0deg))", transformStyle: "preserve-3d" } : void 0,
|
|
390
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(Mark, { size, title, className: "block" })
|
|
391
|
+
}
|
|
392
|
+
),
|
|
393
|
+
shadow ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
394
|
+
"div",
|
|
395
|
+
{
|
|
396
|
+
"aria-hidden": true,
|
|
397
|
+
className: "absolute left-[8%] right-[8%] rounded-[50%] opacity-60 blur-xl",
|
|
398
|
+
style: { height: size * 0.08, bottom: -size * 0.04, background: "rgb(234 88 11 / 0.18)" }
|
|
399
|
+
}
|
|
400
|
+
) : null
|
|
401
|
+
]
|
|
402
|
+
}
|
|
403
|
+
);
|
|
129
404
|
}
|
|
130
405
|
var CELL_W = 22;
|
|
131
406
|
var CELL_H = 27;
|
|
@@ -145,6 +420,7 @@ function Crowd({
|
|
|
145
420
|
seed = 21,
|
|
146
421
|
tone = "ink",
|
|
147
422
|
label = "A crowd of identical accounts. Only a few are real.",
|
|
423
|
+
story = false,
|
|
148
424
|
className
|
|
149
425
|
}) {
|
|
150
426
|
const width = cols * CELL_W;
|
|
@@ -153,48 +429,65 @@ function Crowd({
|
|
|
153
429
|
const nearFrom = Math.floor(rows / 2) * cols;
|
|
154
430
|
const realSet = new Set([...picks(real, rows * cols - nearFrom, seed)].map((i) => i + nearFrom));
|
|
155
431
|
const bot = tone === "ink" ? "#ffffff" : "#0a0a0a";
|
|
432
|
+
let lcg = seed * 7919 >>> 0;
|
|
433
|
+
const leaveAt = () => {
|
|
434
|
+
lcg = Math.imul(lcg, 1664525) + 1013904223 >>> 0;
|
|
435
|
+
return 0.12 + lcg / 2 ** 32 * 0.6;
|
|
436
|
+
};
|
|
156
437
|
let y = 0;
|
|
157
|
-
return /* @__PURE__ */ jsxRuntime.
|
|
438
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
158
439
|
"svg",
|
|
159
440
|
{
|
|
160
441
|
role: "img",
|
|
161
442
|
"aria-label": label,
|
|
162
443
|
viewBox: `0 0 ${width} ${Math.ceil(height)}`,
|
|
163
|
-
className: cn("block h-auto w-full", className),
|
|
164
|
-
children:
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
const
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
444
|
+
className: cn("block h-auto w-full overflow-visible", className),
|
|
445
|
+
children: [
|
|
446
|
+
story ? /* @__PURE__ */ jsxRuntime.jsx("defs", { children: /* @__PURE__ */ jsxRuntime.jsxs("radialGradient", { id: "oca-crowd-glow", children: [
|
|
447
|
+
/* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "0", stopColor: "#ff7a3d", stopOpacity: "0.55" }),
|
|
448
|
+
/* @__PURE__ */ jsxRuntime.jsx("stop", { offset: "1", stopColor: "#ff7a3d", stopOpacity: "0" })
|
|
449
|
+
] }) }) : null,
|
|
450
|
+
scales.map((s, r) => {
|
|
451
|
+
const rowY = y;
|
|
452
|
+
y += CELL_H * s;
|
|
453
|
+
const rowW = cols * CELL_W * s;
|
|
454
|
+
const x0 = (width - rowW) / 2;
|
|
455
|
+
return Array.from({ length: cols }, (_, c) => {
|
|
456
|
+
const i = r * cols + c;
|
|
457
|
+
const isReal = realSet.has(i);
|
|
458
|
+
const t = leaveAt();
|
|
459
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("g", { transform: `translate(${x0 + c * CELL_W * s} ${rowY}) scale(${s})`, children: [
|
|
460
|
+
isReal && story ? /* @__PURE__ */ jsxRuntime.jsx("circle", { className: "oca-crowd-halo", cx: 11, cy: 14, r: 13, fill: "url(#oca-crowd-glow)" }) : null,
|
|
461
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
462
|
+
"g",
|
|
463
|
+
{
|
|
464
|
+
className: story ? isReal ? "oca-crowd-real" : "oca-crowd-bot" : void 0,
|
|
465
|
+
style: story && !isReal ? { "--t": t.toFixed(3) } : void 0,
|
|
466
|
+
fill: isReal ? "var(--oca-orange)" : bot,
|
|
467
|
+
fillOpacity: isReal ? 1 : 0.1 + 0.16 * s,
|
|
468
|
+
children: [
|
|
469
|
+
/* @__PURE__ */ jsxRuntime.jsx("circle", { cx: 11, cy: 8, r: 4.4 }),
|
|
470
|
+
/* @__PURE__ */ jsxRuntime.jsx("path", { d: "M3 25a8 8.5 0 0 1 16 0Z" })
|
|
471
|
+
]
|
|
472
|
+
}
|
|
473
|
+
)
|
|
474
|
+
] }, i);
|
|
475
|
+
});
|
|
476
|
+
})
|
|
477
|
+
]
|
|
187
478
|
}
|
|
188
479
|
);
|
|
189
480
|
}
|
|
190
481
|
|
|
191
482
|
exports.AppIcon = AppIcon;
|
|
192
483
|
exports.Crowd = Crowd;
|
|
484
|
+
exports.HalftoneCanvas = HalftoneCanvas;
|
|
193
485
|
exports.HalftoneSphere = HalftoneSphere;
|
|
194
486
|
exports.IsoCheck = IsoCheck;
|
|
195
487
|
exports.Lockup = Lockup;
|
|
196
488
|
exports.MARK_FACES = MARK_FACES;
|
|
197
489
|
exports.Mark = Mark;
|
|
198
490
|
exports.SPHERE_GRADIENT = SPHERE_GRADIENT;
|
|
491
|
+
exports.portraitTone = portraitTone;
|
|
199
492
|
//# sourceMappingURL=brand.js.map
|
|
200
493
|
//# sourceMappingURL=brand.js.map
|