@yo-yo.art/ui 0.1.1 → 0.2.1

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.
Files changed (41) hide show
  1. package/dist/components/Button/button-classes.cjs +1 -1
  2. package/dist/components/Button/button-classes.cjs.map +1 -1
  3. package/dist/components/Button/button-classes.mjs +1 -1
  4. package/dist/components/Button/button-classes.mjs.map +1 -1
  5. package/dist/components/IconButton/icon-button-classes.cjs +1 -1
  6. package/dist/components/IconButton/icon-button-classes.cjs.map +1 -1
  7. package/dist/components/IconButton/icon-button-classes.mjs +1 -1
  8. package/dist/components/IconButton/icon-button-classes.mjs.map +1 -1
  9. package/dist/components/Link/link-classes.cjs +1 -1
  10. package/dist/components/Link/link-classes.cjs.map +1 -1
  11. package/dist/components/Link/link-classes.mjs +1 -1
  12. package/dist/components/Link/link-classes.mjs.map +1 -1
  13. package/dist/components/Logo3D/Logo3D.cjs +64 -0
  14. package/dist/components/Logo3D/Logo3D.cjs.map +1 -0
  15. package/dist/components/Logo3D/Logo3D.d.cts +13 -0
  16. package/dist/components/Logo3D/Logo3D.d.mts +13 -0
  17. package/dist/components/Logo3D/Logo3D.mjs +64 -0
  18. package/dist/components/Logo3D/Logo3D.mjs.map +1 -0
  19. package/dist/components/Logo3D/index.cjs +2 -0
  20. package/dist/components/Logo3D/index.mjs +1 -0
  21. package/dist/components/Reveal/Reveal.cjs +34 -0
  22. package/dist/components/Reveal/Reveal.cjs.map +1 -0
  23. package/dist/components/Reveal/Reveal.d.cts +10 -0
  24. package/dist/components/Reveal/Reveal.d.mts +10 -0
  25. package/dist/components/Reveal/Reveal.mjs +34 -0
  26. package/dist/components/Reveal/Reveal.mjs.map +1 -0
  27. package/dist/components/Reveal/index.cjs +2 -0
  28. package/dist/components/Reveal/index.d.cts +2 -0
  29. package/dist/components/Reveal/index.d.mts +2 -0
  30. package/dist/components/Reveal/index.mjs +1 -0
  31. package/dist/gallery/HomeButton/HomeButton.cjs +1 -1
  32. package/dist/gallery/HomeButton/HomeButton.cjs.map +1 -1
  33. package/dist/gallery/HomeButton/HomeButton.mjs +1 -1
  34. package/dist/gallery/HomeButton/HomeButton.mjs.map +1 -1
  35. package/dist/index.cjs +6 -0
  36. package/dist/index.d.cts +4 -1
  37. package/dist/index.d.mts +4 -1
  38. package/dist/index.mjs +5 -1
  39. package/dist/scenography.css +79 -0
  40. package/dist/styles.css +92 -0
  41. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  const require_cn = require("../../lib/cn.cjs");
2
2
  // src/components/Button/button-classes.ts
3
- const base = "inline-flex items-center justify-center gap-2 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-50";
3
+ const base = "inline-flex cursor-pointer items-center justify-center gap-2 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-50";
4
4
  const variants = {
5
5
  primary: "bg-primary text-primary-content hover:bg-accent hover:text-accent-content",
6
6
  ghost: "border border-base-content/12 bg-transparent text-base-content hover:bg-base-content/5",
@@ -1 +1 @@
1
- {"version":3,"file":"button-classes.cjs","names":["cn"],"sources":["../../../src/components/Button/button-classes.ts"],"sourcesContent":["import { cn } from \"../../lib/cn\";\n\nexport type ButtonVariant = \"primary\" | \"ghost\" | \"link\";\nexport type ButtonSize = \"sm\" | \"md\";\n\nconst base =\n \"inline-flex items-center justify-center gap-2 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-50\";\n\nconst variants: Record<ButtonVariant, string> = {\n primary: \"bg-primary text-primary-content hover:bg-accent hover:text-accent-content\",\n ghost: \"border border-base-content/12 bg-transparent text-base-content hover:bg-base-content/5\",\n link: \"text-base-content underline-offset-4 hover:underline\",\n};\n\nconst sizes: Record<ButtonSize, string> = {\n sm: \"px-4 py-2 text-sm\",\n md: \"px-6 py-3.5 text-sm\",\n};\n\nexport const buttonClasses = ({\n variant = \"primary\",\n size = \"md\",\n className,\n}: {\n variant?: ButtonVariant;\n size?: ButtonSize;\n className?: string;\n} = {}): string => cn(base, variants[variant], sizes[size], className);\n"],"mappings":";;AAKA,MAAM,OACJ;AAEF,MAAM,WAA0C;CAC9C,SAAS;CACT,OAAO;CACP,MAAM;AACR;AAEA,MAAM,QAAoC;CACxC,IAAI;CACJ,IAAI;AACN;AAEA,MAAa,iBAAiB,EAC5B,UAAU,WACV,OAAO,MACP,cAKE,CAAC,MAAcA,WAAAA,GAAG,MAAM,SAAS,UAAU,MAAM,OAAO,SAAS"}
1
+ {"version":3,"file":"button-classes.cjs","names":["cn"],"sources":["../../../src/components/Button/button-classes.ts"],"sourcesContent":["import { cn } from \"../../lib/cn\";\n\nexport type ButtonVariant = \"primary\" | \"ghost\" | \"link\";\nexport type ButtonSize = \"sm\" | \"md\";\n\nconst base =\n \"inline-flex cursor-pointer items-center justify-center gap-2 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-50\";\n\nconst variants: Record<ButtonVariant, string> = {\n primary: \"bg-primary text-primary-content hover:bg-accent hover:text-accent-content\",\n ghost: \"border border-base-content/12 bg-transparent text-base-content hover:bg-base-content/5\",\n link: \"text-base-content underline-offset-4 hover:underline\",\n};\n\nconst sizes: Record<ButtonSize, string> = {\n sm: \"px-4 py-2 text-sm\",\n md: \"px-6 py-3.5 text-sm\",\n};\n\nexport const buttonClasses = ({\n variant = \"primary\",\n size = \"md\",\n className,\n}: {\n variant?: ButtonVariant;\n size?: ButtonSize;\n className?: string;\n} = {}): string => cn(base, variants[variant], sizes[size], className);\n"],"mappings":";;AAKA,MAAM,OACJ;AAEF,MAAM,WAA0C;CAC9C,SAAS;CACT,OAAO;CACP,MAAM;AACR;AAEA,MAAM,QAAoC;CACxC,IAAI;CACJ,IAAI;AACN;AAEA,MAAa,iBAAiB,EAC5B,UAAU,WACV,OAAO,MACP,cAKE,CAAC,MAAcA,WAAAA,GAAG,MAAM,SAAS,UAAU,MAAM,OAAO,SAAS"}
@@ -1,6 +1,6 @@
1
1
  import { cn } from "../../lib/cn.mjs";
2
2
  // src/components/Button/button-classes.ts
3
- const base = "inline-flex items-center justify-center gap-2 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-50";
3
+ const base = "inline-flex cursor-pointer items-center justify-center gap-2 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-50";
4
4
  const variants = {
5
5
  primary: "bg-primary text-primary-content hover:bg-accent hover:text-accent-content",
6
6
  ghost: "border border-base-content/12 bg-transparent text-base-content hover:bg-base-content/5",
@@ -1 +1 @@
1
- {"version":3,"file":"button-classes.mjs","names":[],"sources":["../../../src/components/Button/button-classes.ts"],"sourcesContent":["import { cn } from \"../../lib/cn\";\n\nexport type ButtonVariant = \"primary\" | \"ghost\" | \"link\";\nexport type ButtonSize = \"sm\" | \"md\";\n\nconst base =\n \"inline-flex items-center justify-center gap-2 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-50\";\n\nconst variants: Record<ButtonVariant, string> = {\n primary: \"bg-primary text-primary-content hover:bg-accent hover:text-accent-content\",\n ghost: \"border border-base-content/12 bg-transparent text-base-content hover:bg-base-content/5\",\n link: \"text-base-content underline-offset-4 hover:underline\",\n};\n\nconst sizes: Record<ButtonSize, string> = {\n sm: \"px-4 py-2 text-sm\",\n md: \"px-6 py-3.5 text-sm\",\n};\n\nexport const buttonClasses = ({\n variant = \"primary\",\n size = \"md\",\n className,\n}: {\n variant?: ButtonVariant;\n size?: ButtonSize;\n className?: string;\n} = {}): string => cn(base, variants[variant], sizes[size], className);\n"],"mappings":";;AAKA,MAAM,OACJ;AAEF,MAAM,WAA0C;CAC9C,SAAS;CACT,OAAO;CACP,MAAM;AACR;AAEA,MAAM,QAAoC;CACxC,IAAI;CACJ,IAAI;AACN;AAEA,MAAa,iBAAiB,EAC5B,UAAU,WACV,OAAO,MACP,cAKE,CAAC,MAAc,GAAG,MAAM,SAAS,UAAU,MAAM,OAAO,SAAS"}
1
+ {"version":3,"file":"button-classes.mjs","names":[],"sources":["../../../src/components/Button/button-classes.ts"],"sourcesContent":["import { cn } from \"../../lib/cn\";\n\nexport type ButtonVariant = \"primary\" | \"ghost\" | \"link\";\nexport type ButtonSize = \"sm\" | \"md\";\n\nconst base =\n \"inline-flex cursor-pointer items-center justify-center gap-2 font-medium transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-50\";\n\nconst variants: Record<ButtonVariant, string> = {\n primary: \"bg-primary text-primary-content hover:bg-accent hover:text-accent-content\",\n ghost: \"border border-base-content/12 bg-transparent text-base-content hover:bg-base-content/5\",\n link: \"text-base-content underline-offset-4 hover:underline\",\n};\n\nconst sizes: Record<ButtonSize, string> = {\n sm: \"px-4 py-2 text-sm\",\n md: \"px-6 py-3.5 text-sm\",\n};\n\nexport const buttonClasses = ({\n variant = \"primary\",\n size = \"md\",\n className,\n}: {\n variant?: ButtonVariant;\n size?: ButtonSize;\n className?: string;\n} = {}): string => cn(base, variants[variant], sizes[size], className);\n"],"mappings":";;AAKA,MAAM,OACJ;AAEF,MAAM,WAA0C;CAC9C,SAAS;CACT,OAAO;CACP,MAAM;AACR;AAEA,MAAM,QAAoC;CACxC,IAAI;CACJ,IAAI;AACN;AAEA,MAAa,iBAAiB,EAC5B,UAAU,WACV,OAAO,MACP,cAKE,CAAC,MAAc,GAAG,MAAM,SAAS,UAAU,MAAM,OAAO,SAAS"}
@@ -1,6 +1,6 @@
1
1
  const require_cn = require("../../lib/cn.cjs");
2
2
  // src/components/IconButton/icon-button-classes.ts
3
- const base = "inline-flex items-center justify-center border transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-50";
3
+ const base = "inline-flex cursor-pointer items-center justify-center border transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-50";
4
4
  const variants = {
5
5
  outline: "border-base-content/12 bg-base-100/85 text-base-content/60 backdrop-blur-md hover:text-base-content",
6
6
  ghost: "border-transparent bg-transparent text-base-content/60 hover:bg-base-content/5 hover:text-base-content"
@@ -1 +1 @@
1
- {"version":3,"file":"icon-button-classes.cjs","names":["cn"],"sources":["../../../src/components/IconButton/icon-button-classes.ts"],"sourcesContent":["import { cn } from \"../../lib/cn\";\n\nexport type IconButtonVariant = \"outline\" | \"ghost\";\nexport type IconButtonSize = \"xs\" | \"sm\" | \"md\";\n\nconst base =\n \"inline-flex items-center justify-center border transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-50\";\n\nconst variants: Record<IconButtonVariant, string> = {\n outline:\n \"border-base-content/12 bg-base-100/85 text-base-content/60 backdrop-blur-md hover:text-base-content\",\n ghost:\n \"border-transparent bg-transparent text-base-content/60 hover:bg-base-content/5 hover:text-base-content\",\n};\n\nconst sizes: Record<IconButtonSize, string> = {\n xs: \"size-6\",\n sm: \"size-8\",\n md: \"size-10\",\n};\n\nexport const iconButtonClasses = ({\n variant = \"outline\",\n size = \"sm\",\n className,\n}: {\n variant?: IconButtonVariant;\n size?: IconButtonSize;\n className?: string;\n} = {}): string => cn(base, variants[variant], sizes[size], className);\n"],"mappings":";;AAKA,MAAM,OACJ;AAEF,MAAM,WAA8C;CAClD,SACE;CACF,OACE;AACJ;AAEA,MAAM,QAAwC;CAC5C,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,MAAa,qBAAqB,EAChC,UAAU,WACV,OAAO,MACP,cAKE,CAAC,MAAcA,WAAAA,GAAG,MAAM,SAAS,UAAU,MAAM,OAAO,SAAS"}
1
+ {"version":3,"file":"icon-button-classes.cjs","names":["cn"],"sources":["../../../src/components/IconButton/icon-button-classes.ts"],"sourcesContent":["import { cn } from \"../../lib/cn\";\n\nexport type IconButtonVariant = \"outline\" | \"ghost\";\nexport type IconButtonSize = \"xs\" | \"sm\" | \"md\";\n\nconst base =\n \"inline-flex cursor-pointer items-center justify-center border transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-50\";\n\nconst variants: Record<IconButtonVariant, string> = {\n outline:\n \"border-base-content/12 bg-base-100/85 text-base-content/60 backdrop-blur-md hover:text-base-content\",\n ghost:\n \"border-transparent bg-transparent text-base-content/60 hover:bg-base-content/5 hover:text-base-content\",\n};\n\nconst sizes: Record<IconButtonSize, string> = {\n xs: \"size-6\",\n sm: \"size-8\",\n md: \"size-10\",\n};\n\nexport const iconButtonClasses = ({\n variant = \"outline\",\n size = \"sm\",\n className,\n}: {\n variant?: IconButtonVariant;\n size?: IconButtonSize;\n className?: string;\n} = {}): string => cn(base, variants[variant], sizes[size], className);\n"],"mappings":";;AAKA,MAAM,OACJ;AAEF,MAAM,WAA8C;CAClD,SACE;CACF,OACE;AACJ;AAEA,MAAM,QAAwC;CAC5C,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,MAAa,qBAAqB,EAChC,UAAU,WACV,OAAO,MACP,cAKE,CAAC,MAAcA,WAAAA,GAAG,MAAM,SAAS,UAAU,MAAM,OAAO,SAAS"}
@@ -1,6 +1,6 @@
1
1
  import { cn } from "../../lib/cn.mjs";
2
2
  // src/components/IconButton/icon-button-classes.ts
3
- const base = "inline-flex items-center justify-center border transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-50";
3
+ const base = "inline-flex cursor-pointer items-center justify-center border transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-50";
4
4
  const variants = {
5
5
  outline: "border-base-content/12 bg-base-100/85 text-base-content/60 backdrop-blur-md hover:text-base-content",
6
6
  ghost: "border-transparent bg-transparent text-base-content/60 hover:bg-base-content/5 hover:text-base-content"
@@ -1 +1 @@
1
- {"version":3,"file":"icon-button-classes.mjs","names":[],"sources":["../../../src/components/IconButton/icon-button-classes.ts"],"sourcesContent":["import { cn } from \"../../lib/cn\";\n\nexport type IconButtonVariant = \"outline\" | \"ghost\";\nexport type IconButtonSize = \"xs\" | \"sm\" | \"md\";\n\nconst base =\n \"inline-flex items-center justify-center border transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-50\";\n\nconst variants: Record<IconButtonVariant, string> = {\n outline:\n \"border-base-content/12 bg-base-100/85 text-base-content/60 backdrop-blur-md hover:text-base-content\",\n ghost:\n \"border-transparent bg-transparent text-base-content/60 hover:bg-base-content/5 hover:text-base-content\",\n};\n\nconst sizes: Record<IconButtonSize, string> = {\n xs: \"size-6\",\n sm: \"size-8\",\n md: \"size-10\",\n};\n\nexport const iconButtonClasses = ({\n variant = \"outline\",\n size = \"sm\",\n className,\n}: {\n variant?: IconButtonVariant;\n size?: IconButtonSize;\n className?: string;\n} = {}): string => cn(base, variants[variant], sizes[size], className);\n"],"mappings":";;AAKA,MAAM,OACJ;AAEF,MAAM,WAA8C;CAClD,SACE;CACF,OACE;AACJ;AAEA,MAAM,QAAwC;CAC5C,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,MAAa,qBAAqB,EAChC,UAAU,WACV,OAAO,MACP,cAKE,CAAC,MAAc,GAAG,MAAM,SAAS,UAAU,MAAM,OAAO,SAAS"}
1
+ {"version":3,"file":"icon-button-classes.mjs","names":[],"sources":["../../../src/components/IconButton/icon-button-classes.ts"],"sourcesContent":["import { cn } from \"../../lib/cn\";\n\nexport type IconButtonVariant = \"outline\" | \"ghost\";\nexport type IconButtonSize = \"xs\" | \"sm\" | \"md\";\n\nconst base =\n \"inline-flex cursor-pointer items-center justify-center border transition-colors focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent disabled:pointer-events-none disabled:opacity-50\";\n\nconst variants: Record<IconButtonVariant, string> = {\n outline:\n \"border-base-content/12 bg-base-100/85 text-base-content/60 backdrop-blur-md hover:text-base-content\",\n ghost:\n \"border-transparent bg-transparent text-base-content/60 hover:bg-base-content/5 hover:text-base-content\",\n};\n\nconst sizes: Record<IconButtonSize, string> = {\n xs: \"size-6\",\n sm: \"size-8\",\n md: \"size-10\",\n};\n\nexport const iconButtonClasses = ({\n variant = \"outline\",\n size = \"sm\",\n className,\n}: {\n variant?: IconButtonVariant;\n size?: IconButtonSize;\n className?: string;\n} = {}): string => cn(base, variants[variant], sizes[size], className);\n"],"mappings":";;AAKA,MAAM,OACJ;AAEF,MAAM,WAA8C;CAClD,SACE;CACF,OACE;AACJ;AAEA,MAAM,QAAwC;CAC5C,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,MAAa,qBAAqB,EAChC,UAAU,WACV,OAAO,MACP,cAKE,CAAC,MAAc,GAAG,MAAM,SAAS,UAAU,MAAM,OAAO,SAAS"}
@@ -1,6 +1,6 @@
1
1
  const require_cn = require("../../lib/cn.cjs");
2
2
  // src/components/Link/link-classes.ts
3
- const base = "inline-flex items-center gap-2 text-sm font-medium underline-offset-4 transition-colors hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent";
3
+ const base = "inline-flex cursor-pointer items-center gap-2 text-sm font-medium underline-offset-4 transition-colors hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent";
4
4
  const tones = {
5
5
  default: "text-base-content",
6
6
  muted: "text-base-content/60 hover:text-base-content"
@@ -1 +1 @@
1
- {"version":3,"file":"link-classes.cjs","names":["cn"],"sources":["../../../src/components/Link/link-classes.ts"],"sourcesContent":["import { cn } from \"../../lib/cn\";\n\nexport type LinkTone = \"default\" | \"muted\";\n\nconst base =\n \"inline-flex items-center gap-2 text-sm font-medium underline-offset-4 transition-colors hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\";\n\nconst tones: Record<LinkTone, string> = {\n default: \"text-base-content\",\n muted: \"text-base-content/60 hover:text-base-content\",\n};\n\nexport const linkClasses = ({\n tone = \"default\",\n className,\n}: {\n tone?: LinkTone;\n className?: string;\n} = {}): string => cn(base, tones[tone], className);\n"],"mappings":";;AAIA,MAAM,OACJ;AAEF,MAAM,QAAkC;CACtC,SAAS;CACT,OAAO;AACT;AAEA,MAAa,eAAe,EAC1B,OAAO,WACP,cAIE,CAAC,MAAcA,WAAAA,GAAG,MAAM,MAAM,OAAO,SAAS"}
1
+ {"version":3,"file":"link-classes.cjs","names":["cn"],"sources":["../../../src/components/Link/link-classes.ts"],"sourcesContent":["import { cn } from \"../../lib/cn\";\n\nexport type LinkTone = \"default\" | \"muted\";\n\nconst base =\n \"inline-flex cursor-pointer items-center gap-2 text-sm font-medium underline-offset-4 transition-colors hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\";\n\nconst tones: Record<LinkTone, string> = {\n default: \"text-base-content\",\n muted: \"text-base-content/60 hover:text-base-content\",\n};\n\nexport const linkClasses = ({\n tone = \"default\",\n className,\n}: {\n tone?: LinkTone;\n className?: string;\n} = {}): string => cn(base, tones[tone], className);\n"],"mappings":";;AAIA,MAAM,OACJ;AAEF,MAAM,QAAkC;CACtC,SAAS;CACT,OAAO;AACT;AAEA,MAAa,eAAe,EAC1B,OAAO,WACP,cAIE,CAAC,MAAcA,WAAAA,GAAG,MAAM,MAAM,OAAO,SAAS"}
@@ -1,6 +1,6 @@
1
1
  import { cn } from "../../lib/cn.mjs";
2
2
  // src/components/Link/link-classes.ts
3
- const base = "inline-flex items-center gap-2 text-sm font-medium underline-offset-4 transition-colors hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent";
3
+ const base = "inline-flex cursor-pointer items-center gap-2 text-sm font-medium underline-offset-4 transition-colors hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent";
4
4
  const tones = {
5
5
  default: "text-base-content",
6
6
  muted: "text-base-content/60 hover:text-base-content"
@@ -1 +1 @@
1
- {"version":3,"file":"link-classes.mjs","names":[],"sources":["../../../src/components/Link/link-classes.ts"],"sourcesContent":["import { cn } from \"../../lib/cn\";\n\nexport type LinkTone = \"default\" | \"muted\";\n\nconst base =\n \"inline-flex items-center gap-2 text-sm font-medium underline-offset-4 transition-colors hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\";\n\nconst tones: Record<LinkTone, string> = {\n default: \"text-base-content\",\n muted: \"text-base-content/60 hover:text-base-content\",\n};\n\nexport const linkClasses = ({\n tone = \"default\",\n className,\n}: {\n tone?: LinkTone;\n className?: string;\n} = {}): string => cn(base, tones[tone], className);\n"],"mappings":";;AAIA,MAAM,OACJ;AAEF,MAAM,QAAkC;CACtC,SAAS;CACT,OAAO;AACT;AAEA,MAAa,eAAe,EAC1B,OAAO,WACP,cAIE,CAAC,MAAc,GAAG,MAAM,MAAM,OAAO,SAAS"}
1
+ {"version":3,"file":"link-classes.mjs","names":[],"sources":["../../../src/components/Link/link-classes.ts"],"sourcesContent":["import { cn } from \"../../lib/cn\";\n\nexport type LinkTone = \"default\" | \"muted\";\n\nconst base =\n \"inline-flex cursor-pointer items-center gap-2 text-sm font-medium underline-offset-4 transition-colors hover:underline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-accent\";\n\nconst tones: Record<LinkTone, string> = {\n default: \"text-base-content\",\n muted: \"text-base-content/60 hover:text-base-content\",\n};\n\nexport const linkClasses = ({\n tone = \"default\",\n className,\n}: {\n tone?: LinkTone;\n className?: string;\n} = {}): string => cn(base, tones[tone], className);\n"],"mappings":";;AAIA,MAAM,OACJ;AAEF,MAAM,QAAkC;CACtC,SAAS;CACT,OAAO;AACT;AAEA,MAAa,eAAe,EAC1B,OAAO,WACP,cAIE,CAAC,MAAc,GAAG,MAAM,MAAM,OAAO,SAAS"}
@@ -0,0 +1,64 @@
1
+ let react_jsx_runtime = require("react/jsx-runtime");
2
+ let react = require("react");
3
+ // src/components/Logo3D/Logo3D.tsx
4
+ const LAYERS = 18;
5
+ const DEPTH = 2.25;
6
+ const MAX_TILT = 16;
7
+ /**
8
+ * The mark built in CSS 3D: the same silhouette stacked on the Z axis, with
9
+ * the front face in ink and the extruded side in the accent green. The whole
10
+ * block tilts towards the pointer.
11
+ */
12
+ const Logo3D = ({ src = "/logo.svg", className = "" }) => {
13
+ const ref = (0, react.useRef)(null);
14
+ (0, react.useEffect)(() => {
15
+ const element = ref.current;
16
+ if (!element) return;
17
+ if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
18
+ let frame = 0;
19
+ const onMove = (event) => {
20
+ if (frame) return;
21
+ const clientX = event.clientX;
22
+ const clientY = event.clientY;
23
+ frame = window.requestAnimationFrame(() => {
24
+ frame = 0;
25
+ const rect = element.getBoundingClientRect();
26
+ const x = clientX - (rect.left + rect.width / 2);
27
+ const y = clientY - (rect.top + rect.height / 2);
28
+ const nx = Math.max(-1, Math.min(1, x / 320));
29
+ const ny = Math.max(-1, Math.min(1, y / 320));
30
+ element.style.setProperty("--logo-rx", `${(-ny * MAX_TILT).toFixed(2)}deg`);
31
+ element.style.setProperty("--logo-ry", `${(nx * MAX_TILT).toFixed(2)}deg`);
32
+ });
33
+ };
34
+ const reset = () => {
35
+ if (frame) window.cancelAnimationFrame(frame);
36
+ frame = 0;
37
+ element.style.removeProperty("--logo-rx");
38
+ element.style.removeProperty("--logo-ry");
39
+ };
40
+ window.addEventListener("pointermove", onMove, { passive: true });
41
+ window.addEventListener("pointerleave", reset);
42
+ return () => {
43
+ if (frame) window.cancelAnimationFrame(frame);
44
+ window.removeEventListener("pointermove", onMove);
45
+ window.removeEventListener("pointerleave", reset);
46
+ };
47
+ }, []);
48
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
49
+ ref,
50
+ className: `logo3d ${className}`,
51
+ "aria-hidden": true,
52
+ style: { "--logo-src": `url("${src}")` },
53
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
54
+ className: "logo3d-inner",
55
+ children: Array.from({ length: LAYERS }, (_, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
56
+ className: `logo3d-layer ${index === 0 ? "logo3d-front" : "logo3d-depth"}`,
57
+ style: { transform: `translateZ(${-index * DEPTH}px)` }
58
+ }, index))
59
+ })
60
+ });
61
+ };
62
+ exports.Logo3D = Logo3D;
63
+
64
+ //# sourceMappingURL=Logo3D.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logo3D.cjs","names":["useRef"],"sources":["../../../src/components/Logo3D/Logo3D.tsx"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport type { CSSProperties } from \"react\";\n\nconst LAYERS = 18;\nconst DEPTH = 2.25;\nconst MAX_TILT = 16;\n\nexport type Logo3DProps = {\n /** Mark URL used as the mask for every layer. */\n src?: string;\n className?: string;\n};\n\n/**\n * The mark built in CSS 3D: the same silhouette stacked on the Z axis, with\n * the front face in ink and the extruded side in the accent green. The whole\n * block tilts towards the pointer.\n */\nexport const Logo3D = ({ src = \"/logo.svg\", className = \"\" }: Logo3DProps) => {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n if (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) return;\n\n let frame = 0;\n\n const onMove = (event: PointerEvent) => {\n if (frame) return;\n const clientX = event.clientX;\n const clientY = event.clientY;\n\n frame = window.requestAnimationFrame(() => {\n frame = 0;\n const rect = element.getBoundingClientRect();\n const x = clientX - (rect.left + rect.width / 2);\n const y = clientY - (rect.top + rect.height / 2);\n const nx = Math.max(-1, Math.min(1, x / 320));\n const ny = Math.max(-1, Math.min(1, y / 320));\n\n element.style.setProperty(\n \"--logo-rx\",\n `${(-ny * MAX_TILT).toFixed(2)}deg`,\n );\n element.style.setProperty(\n \"--logo-ry\",\n `${(nx * MAX_TILT).toFixed(2)}deg`,\n );\n });\n };\n\n const reset = () => {\n if (frame) window.cancelAnimationFrame(frame);\n frame = 0;\n element.style.removeProperty(\"--logo-rx\");\n element.style.removeProperty(\"--logo-ry\");\n };\n\n window.addEventListener(\"pointermove\", onMove, { passive: true });\n window.addEventListener(\"pointerleave\", reset);\n return () => {\n if (frame) window.cancelAnimationFrame(frame);\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerleave\", reset);\n };\n }, []);\n\n return (\n <div\n ref={ref}\n className={`logo3d ${className}`}\n aria-hidden\n style={{ \"--logo-src\": `url(\"${src}\")` } as CSSProperties}\n >\n <div className=\"logo3d-inner\">\n {Array.from({ length: LAYERS }, (_, index) => (\n <div\n key={index}\n className={`logo3d-layer ${index === 0 ? \"logo3d-front\" : \"logo3d-depth\"}`}\n style={{ transform: `translateZ(${-index * DEPTH}px)` }}\n />\n ))}\n </div>\n </div>\n );\n};\n"],"mappings":";;;AAGA,MAAM,SAAS;AACf,MAAM,QAAQ;AACd,MAAM,WAAW;;;;;;AAajB,MAAa,UAAU,EAAE,MAAM,aAAa,YAAY,SAAsB;CAC5E,MAAM,OAAA,GAAMA,MAAAA,OAAAA,CAAuB,IAAI;CAEvC,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,MAAM,UAAU,IAAI;EACpB,IAAI,CAAC,SAAS;EACd,IAAI,OAAO,WAAW,kCAAkC,CAAC,CAAC,SAAS;EAEnE,IAAI,QAAQ;EAEZ,MAAM,UAAU,UAAwB;GACtC,IAAI,OAAO;GACX,MAAM,UAAU,MAAM;GACtB,MAAM,UAAU,MAAM;GAEtB,QAAQ,OAAO,4BAA4B;IACzC,QAAQ;IACR,MAAM,OAAO,QAAQ,sBAAsB;IAC3C,MAAM,IAAI,WAAW,KAAK,OAAO,KAAK,QAAQ;IAC9C,MAAM,IAAI,WAAW,KAAK,MAAM,KAAK,SAAS;IAC9C,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC;IAC5C,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC;IAE5C,QAAQ,MAAM,YACZ,aACA,IAAI,CAAC,KAAK,SAAA,CAAU,QAAQ,CAAC,EAAE,IACjC;IACA,QAAQ,MAAM,YACZ,aACA,IAAI,KAAK,SAAA,CAAU,QAAQ,CAAC,EAAE,IAChC;GACF,CAAC;EACH;EAEA,MAAM,cAAc;GAClB,IAAI,OAAO,OAAO,qBAAqB,KAAK;GAC5C,QAAQ;GACR,QAAQ,MAAM,eAAe,WAAW;GACxC,QAAQ,MAAM,eAAe,WAAW;EAC1C;EAEA,OAAO,iBAAiB,eAAe,QAAQ,EAAE,SAAS,KAAK,CAAC;EAChE,OAAO,iBAAiB,gBAAgB,KAAK;EAC7C,aAAa;GACX,IAAI,OAAO,OAAO,qBAAqB,KAAK;GAC5C,OAAO,oBAAoB,eAAe,MAAM;GAChD,OAAO,oBAAoB,gBAAgB,KAAK;EAClD;CACF,GAAG,CAAC,CAAC;CAEL,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACO;EACL,WAAW,UAAU;EACrB,eAAA;EACA,OAAO,EAAE,cAAc,QAAQ,IAAI,IAAI;EAEvC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;GAAK,WAAU;GACZ,UAAA,MAAM,KAAK,EAAE,QAAQ,OAAO,IAAI,GAAG,UAClC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAEE,WAAW,gBAAgB,UAAU,IAAI,iBAAiB;IAC1D,OAAO,EAAE,WAAW,cAAc,CAAC,QAAQ,MAAM,KAAK;GACvD,GAHM,KAGN,CACF;EACE,CAAA;CACF,CAAA;AAET"}
@@ -0,0 +1,13 @@
1
+ type Logo3DProps = {
2
+ /** Mark URL used as the mask for every layer. */
3
+ src?: string;
4
+ className?: string;
5
+ };
6
+ /**
7
+ * The mark built in CSS 3D: the same silhouette stacked on the Z axis, with
8
+ * the front face in ink and the extruded side in the accent green. The whole
9
+ * block tilts towards the pointer.
10
+ */
11
+ declare const Logo3D: ({ src, className }: Logo3DProps) => import("react").JSX.Element;
12
+ export { Logo3D, Logo3DProps };
13
+ //# sourceMappingURL=Logo3D.d.cts.map
@@ -0,0 +1,13 @@
1
+ type Logo3DProps = {
2
+ /** Mark URL used as the mask for every layer. */
3
+ src?: string;
4
+ className?: string;
5
+ };
6
+ /**
7
+ * The mark built in CSS 3D: the same silhouette stacked on the Z axis, with
8
+ * the front face in ink and the extruded side in the accent green. The whole
9
+ * block tilts towards the pointer.
10
+ */
11
+ declare const Logo3D: ({ src, className }: Logo3DProps) => import("react").JSX.Element;
12
+ export { Logo3D, Logo3DProps };
13
+ //# sourceMappingURL=Logo3D.d.mts.map
@@ -0,0 +1,64 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useEffect, useRef } from "react";
3
+ // src/components/Logo3D/Logo3D.tsx
4
+ const LAYERS = 18;
5
+ const DEPTH = 2.25;
6
+ const MAX_TILT = 16;
7
+ /**
8
+ * The mark built in CSS 3D: the same silhouette stacked on the Z axis, with
9
+ * the front face in ink and the extruded side in the accent green. The whole
10
+ * block tilts towards the pointer.
11
+ */
12
+ const Logo3D = ({ src = "/logo.svg", className = "" }) => {
13
+ const ref = useRef(null);
14
+ useEffect(() => {
15
+ const element = ref.current;
16
+ if (!element) return;
17
+ if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) return;
18
+ let frame = 0;
19
+ const onMove = (event) => {
20
+ if (frame) return;
21
+ const clientX = event.clientX;
22
+ const clientY = event.clientY;
23
+ frame = window.requestAnimationFrame(() => {
24
+ frame = 0;
25
+ const rect = element.getBoundingClientRect();
26
+ const x = clientX - (rect.left + rect.width / 2);
27
+ const y = clientY - (rect.top + rect.height / 2);
28
+ const nx = Math.max(-1, Math.min(1, x / 320));
29
+ const ny = Math.max(-1, Math.min(1, y / 320));
30
+ element.style.setProperty("--logo-rx", `${(-ny * MAX_TILT).toFixed(2)}deg`);
31
+ element.style.setProperty("--logo-ry", `${(nx * MAX_TILT).toFixed(2)}deg`);
32
+ });
33
+ };
34
+ const reset = () => {
35
+ if (frame) window.cancelAnimationFrame(frame);
36
+ frame = 0;
37
+ element.style.removeProperty("--logo-rx");
38
+ element.style.removeProperty("--logo-ry");
39
+ };
40
+ window.addEventListener("pointermove", onMove, { passive: true });
41
+ window.addEventListener("pointerleave", reset);
42
+ return () => {
43
+ if (frame) window.cancelAnimationFrame(frame);
44
+ window.removeEventListener("pointermove", onMove);
45
+ window.removeEventListener("pointerleave", reset);
46
+ };
47
+ }, []);
48
+ return /* @__PURE__ */ jsx("div", {
49
+ ref,
50
+ className: `logo3d ${className}`,
51
+ "aria-hidden": true,
52
+ style: { "--logo-src": `url("${src}")` },
53
+ children: /* @__PURE__ */ jsx("div", {
54
+ className: "logo3d-inner",
55
+ children: Array.from({ length: LAYERS }, (_, index) => /* @__PURE__ */ jsx("div", {
56
+ className: `logo3d-layer ${index === 0 ? "logo3d-front" : "logo3d-depth"}`,
57
+ style: { transform: `translateZ(${-index * DEPTH}px)` }
58
+ }, index))
59
+ })
60
+ });
61
+ };
62
+ export { Logo3D };
63
+
64
+ //# sourceMappingURL=Logo3D.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logo3D.mjs","names":[],"sources":["../../../src/components/Logo3D/Logo3D.tsx"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport type { CSSProperties } from \"react\";\n\nconst LAYERS = 18;\nconst DEPTH = 2.25;\nconst MAX_TILT = 16;\n\nexport type Logo3DProps = {\n /** Mark URL used as the mask for every layer. */\n src?: string;\n className?: string;\n};\n\n/**\n * The mark built in CSS 3D: the same silhouette stacked on the Z axis, with\n * the front face in ink and the extruded side in the accent green. The whole\n * block tilts towards the pointer.\n */\nexport const Logo3D = ({ src = \"/logo.svg\", className = \"\" }: Logo3DProps) => {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const element = ref.current;\n if (!element) return;\n if (window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches) return;\n\n let frame = 0;\n\n const onMove = (event: PointerEvent) => {\n if (frame) return;\n const clientX = event.clientX;\n const clientY = event.clientY;\n\n frame = window.requestAnimationFrame(() => {\n frame = 0;\n const rect = element.getBoundingClientRect();\n const x = clientX - (rect.left + rect.width / 2);\n const y = clientY - (rect.top + rect.height / 2);\n const nx = Math.max(-1, Math.min(1, x / 320));\n const ny = Math.max(-1, Math.min(1, y / 320));\n\n element.style.setProperty(\n \"--logo-rx\",\n `${(-ny * MAX_TILT).toFixed(2)}deg`,\n );\n element.style.setProperty(\n \"--logo-ry\",\n `${(nx * MAX_TILT).toFixed(2)}deg`,\n );\n });\n };\n\n const reset = () => {\n if (frame) window.cancelAnimationFrame(frame);\n frame = 0;\n element.style.removeProperty(\"--logo-rx\");\n element.style.removeProperty(\"--logo-ry\");\n };\n\n window.addEventListener(\"pointermove\", onMove, { passive: true });\n window.addEventListener(\"pointerleave\", reset);\n return () => {\n if (frame) window.cancelAnimationFrame(frame);\n window.removeEventListener(\"pointermove\", onMove);\n window.removeEventListener(\"pointerleave\", reset);\n };\n }, []);\n\n return (\n <div\n ref={ref}\n className={`logo3d ${className}`}\n aria-hidden\n style={{ \"--logo-src\": `url(\"${src}\")` } as CSSProperties}\n >\n <div className=\"logo3d-inner\">\n {Array.from({ length: LAYERS }, (_, index) => (\n <div\n key={index}\n className={`logo3d-layer ${index === 0 ? \"logo3d-front\" : \"logo3d-depth\"}`}\n style={{ transform: `translateZ(${-index * DEPTH}px)` }}\n />\n ))}\n </div>\n </div>\n );\n};\n"],"mappings":";;;AAGA,MAAM,SAAS;AACf,MAAM,QAAQ;AACd,MAAM,WAAW;;;;;;AAajB,MAAa,UAAU,EAAE,MAAM,aAAa,YAAY,SAAsB;CAC5E,MAAM,MAAM,OAAuB,IAAI;CAEvC,gBAAgB;EACd,MAAM,UAAU,IAAI;EACpB,IAAI,CAAC,SAAS;EACd,IAAI,OAAO,WAAW,kCAAkC,CAAC,CAAC,SAAS;EAEnE,IAAI,QAAQ;EAEZ,MAAM,UAAU,UAAwB;GACtC,IAAI,OAAO;GACX,MAAM,UAAU,MAAM;GACtB,MAAM,UAAU,MAAM;GAEtB,QAAQ,OAAO,4BAA4B;IACzC,QAAQ;IACR,MAAM,OAAO,QAAQ,sBAAsB;IAC3C,MAAM,IAAI,WAAW,KAAK,OAAO,KAAK,QAAQ;IAC9C,MAAM,IAAI,WAAW,KAAK,MAAM,KAAK,SAAS;IAC9C,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC;IAC5C,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,CAAC;IAE5C,QAAQ,MAAM,YACZ,aACA,IAAI,CAAC,KAAK,SAAA,CAAU,QAAQ,CAAC,EAAE,IACjC;IACA,QAAQ,MAAM,YACZ,aACA,IAAI,KAAK,SAAA,CAAU,QAAQ,CAAC,EAAE,IAChC;GACF,CAAC;EACH;EAEA,MAAM,cAAc;GAClB,IAAI,OAAO,OAAO,qBAAqB,KAAK;GAC5C,QAAQ;GACR,QAAQ,MAAM,eAAe,WAAW;GACxC,QAAQ,MAAM,eAAe,WAAW;EAC1C;EAEA,OAAO,iBAAiB,eAAe,QAAQ,EAAE,SAAS,KAAK,CAAC;EAChE,OAAO,iBAAiB,gBAAgB,KAAK;EAC7C,aAAa;GACX,IAAI,OAAO,OAAO,qBAAqB,KAAK;GAC5C,OAAO,oBAAoB,eAAe,MAAM;GAChD,OAAO,oBAAoB,gBAAgB,KAAK;EAClD;CACF,GAAG,CAAC,CAAC;CAEL,OACE,oBAAC,OAAD;EACO;EACL,WAAW,UAAU;EACrB,eAAA;EACA,OAAO,EAAE,cAAc,QAAQ,IAAI,IAAI;EAEvC,UAAA,oBAAC,OAAD;GAAK,WAAU;GACZ,UAAA,MAAM,KAAK,EAAE,QAAQ,OAAO,IAAI,GAAG,UAClC,oBAAC,OAAD;IAEE,WAAW,gBAAgB,UAAU,IAAI,iBAAiB;IAC1D,OAAO,EAAE,WAAW,cAAc,CAAC,QAAQ,MAAM,KAAK;GACvD,GAHM,KAGN,CACF;EACE,CAAA;CACF,CAAA;AAET"}
@@ -0,0 +1,2 @@
1
+ const require_Logo3D = require("./Logo3D.cjs");
2
+ exports.Logo3D = require_Logo3D.Logo3D;
@@ -0,0 +1 @@
1
+ export { Logo3D } from "./Logo3D.mjs";
@@ -0,0 +1,34 @@
1
+ let react_jsx_runtime = require("react/jsx-runtime");
2
+ let react = require("react");
3
+ // src/components/Reveal/Reveal.tsx
4
+ /** Fades its content up into place the first time it enters the viewport. */
5
+ const Reveal = ({ children, className, delay = 0 }) => {
6
+ const ref = (0, react.useRef)(null);
7
+ (0, react.useEffect)(() => {
8
+ const node = ref.current;
9
+ if (!node) return;
10
+ if (typeof IntersectionObserver === "undefined" || window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
11
+ node.dataset.shown = "";
12
+ return;
13
+ }
14
+ const observer = new IntersectionObserver(([entry]) => {
15
+ if (!entry?.isIntersecting) return;
16
+ node.dataset.shown = "";
17
+ observer.disconnect();
18
+ }, {
19
+ threshold: .1,
20
+ rootMargin: "0px 0px -10% 0px"
21
+ });
22
+ observer.observe(node);
23
+ return () => observer.disconnect();
24
+ }, []);
25
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
26
+ ref,
27
+ className: className ? `reveal ${className}` : "reveal",
28
+ style: { "--reveal-delay": `${delay}ms` },
29
+ children
30
+ });
31
+ };
32
+ exports.Reveal = Reveal;
33
+
34
+ //# sourceMappingURL=Reveal.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Reveal.cjs","names":["useRef"],"sources":["../../../src/components/Reveal/Reveal.tsx"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport type { CSSProperties, ReactNode } from \"react\";\n\nexport type RevealProps = {\n children: ReactNode;\n className?: string;\n delay?: number;\n};\n\n/** Fades its content up into place the first time it enters the viewport. */\nexport const Reveal = ({ children, className, delay = 0 }: RevealProps) => {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const node = ref.current;\n if (!node) return;\n\n if (\n typeof IntersectionObserver === \"undefined\" ||\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n ) {\n node.dataset.shown = \"\";\n return;\n }\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (!entry?.isIntersecting) return;\n node.dataset.shown = \"\";\n observer.disconnect();\n },\n { threshold: 0.1, rootMargin: \"0px 0px -10% 0px\" },\n );\n\n observer.observe(node);\n return () => observer.disconnect();\n }, []);\n\n return (\n <div\n ref={ref}\n className={className ? `reveal ${className}` : \"reveal\"}\n style={{ \"--reveal-delay\": `${delay}ms` } as CSSProperties}\n >\n {children}\n </div>\n );\n};\n"],"mappings":";;;;AAUA,MAAa,UAAU,EAAE,UAAU,WAAW,QAAQ,QAAqB;CACzE,MAAM,OAAA,GAAMA,MAAAA,OAAAA,CAAuB,IAAI;CAEvC,CAAA,GAAA,MAAA,UAAA,OAAgB;EACd,MAAM,OAAO,IAAI;EACjB,IAAI,CAAC,MAAM;EAEX,IACE,OAAO,yBAAyB,eAChC,OAAO,WAAW,kCAAkC,CAAC,CAAC,SACtD;GACA,KAAK,QAAQ,QAAQ;GACrB;EACF;EAEA,MAAM,WAAW,IAAI,sBAClB,CAAC,WAAW;GACX,IAAI,CAAC,OAAO,gBAAgB;GAC5B,KAAK,QAAQ,QAAQ;GACrB,SAAS,WAAW;EACtB,GACA;GAAE,WAAW;GAAK,YAAY;EAAmB,CACnD;EAEA,SAAS,QAAQ,IAAI;EACrB,aAAa,SAAS,WAAW;CACnC,GAAG,CAAC,CAAC;CAEL,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACO;EACL,WAAW,YAAY,UAAU,cAAc;EAC/C,OAAO,EAAE,kBAAkB,GAAG,MAAM,IAAI;EAEvC;CACE,CAAA;AAET"}
@@ -0,0 +1,10 @@
1
+ import { ReactNode } from "react";
2
+ type RevealProps = {
3
+ children: ReactNode;
4
+ className?: string;
5
+ delay?: number;
6
+ };
7
+ /** Fades its content up into place the first time it enters the viewport. */
8
+ declare const Reveal: ({ children, className, delay }: RevealProps) => import("react").JSX.Element;
9
+ export { Reveal, RevealProps };
10
+ //# sourceMappingURL=Reveal.d.cts.map
@@ -0,0 +1,10 @@
1
+ import { ReactNode } from "react";
2
+ type RevealProps = {
3
+ children: ReactNode;
4
+ className?: string;
5
+ delay?: number;
6
+ };
7
+ /** Fades its content up into place the first time it enters the viewport. */
8
+ declare const Reveal: ({ children, className, delay }: RevealProps) => import("react").JSX.Element;
9
+ export { Reveal, RevealProps };
10
+ //# sourceMappingURL=Reveal.d.mts.map
@@ -0,0 +1,34 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useEffect, useRef } from "react";
3
+ // src/components/Reveal/Reveal.tsx
4
+ /** Fades its content up into place the first time it enters the viewport. */
5
+ const Reveal = ({ children, className, delay = 0 }) => {
6
+ const ref = useRef(null);
7
+ useEffect(() => {
8
+ const node = ref.current;
9
+ if (!node) return;
10
+ if (typeof IntersectionObserver === "undefined" || window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
11
+ node.dataset.shown = "";
12
+ return;
13
+ }
14
+ const observer = new IntersectionObserver(([entry]) => {
15
+ if (!entry?.isIntersecting) return;
16
+ node.dataset.shown = "";
17
+ observer.disconnect();
18
+ }, {
19
+ threshold: .1,
20
+ rootMargin: "0px 0px -10% 0px"
21
+ });
22
+ observer.observe(node);
23
+ return () => observer.disconnect();
24
+ }, []);
25
+ return /* @__PURE__ */ jsx("div", {
26
+ ref,
27
+ className: className ? `reveal ${className}` : "reveal",
28
+ style: { "--reveal-delay": `${delay}ms` },
29
+ children
30
+ });
31
+ };
32
+ export { Reveal };
33
+
34
+ //# sourceMappingURL=Reveal.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Reveal.mjs","names":[],"sources":["../../../src/components/Reveal/Reveal.tsx"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport type { CSSProperties, ReactNode } from \"react\";\n\nexport type RevealProps = {\n children: ReactNode;\n className?: string;\n delay?: number;\n};\n\n/** Fades its content up into place the first time it enters the viewport. */\nexport const Reveal = ({ children, className, delay = 0 }: RevealProps) => {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const node = ref.current;\n if (!node) return;\n\n if (\n typeof IntersectionObserver === \"undefined\" ||\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches\n ) {\n node.dataset.shown = \"\";\n return;\n }\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n if (!entry?.isIntersecting) return;\n node.dataset.shown = \"\";\n observer.disconnect();\n },\n { threshold: 0.1, rootMargin: \"0px 0px -10% 0px\" },\n );\n\n observer.observe(node);\n return () => observer.disconnect();\n }, []);\n\n return (\n <div\n ref={ref}\n className={className ? `reveal ${className}` : \"reveal\"}\n style={{ \"--reveal-delay\": `${delay}ms` } as CSSProperties}\n >\n {children}\n </div>\n );\n};\n"],"mappings":";;;;AAUA,MAAa,UAAU,EAAE,UAAU,WAAW,QAAQ,QAAqB;CACzE,MAAM,MAAM,OAAuB,IAAI;CAEvC,gBAAgB;EACd,MAAM,OAAO,IAAI;EACjB,IAAI,CAAC,MAAM;EAEX,IACE,OAAO,yBAAyB,eAChC,OAAO,WAAW,kCAAkC,CAAC,CAAC,SACtD;GACA,KAAK,QAAQ,QAAQ;GACrB;EACF;EAEA,MAAM,WAAW,IAAI,sBAClB,CAAC,WAAW;GACX,IAAI,CAAC,OAAO,gBAAgB;GAC5B,KAAK,QAAQ,QAAQ;GACrB,SAAS,WAAW;EACtB,GACA;GAAE,WAAW;GAAK,YAAY;EAAmB,CACnD;EAEA,SAAS,QAAQ,IAAI;EACrB,aAAa,SAAS,WAAW;CACnC,GAAG,CAAC,CAAC;CAEL,OACE,oBAAC,OAAD;EACO;EACL,WAAW,YAAY,UAAU,cAAc;EAC/C,OAAO,EAAE,kBAAkB,GAAG,MAAM,IAAI;EAEvC;CACE,CAAA;AAET"}
@@ -0,0 +1,2 @@
1
+ const require_Reveal = require("./Reveal.cjs");
2
+ exports.Reveal = require_Reveal.Reveal;
@@ -0,0 +1,2 @@
1
+ import { Reveal, RevealProps } from "./Reveal.cjs";
2
+ export { Reveal, type RevealProps };
@@ -0,0 +1,2 @@
1
+ import { Reveal, RevealProps } from "./Reveal.mjs";
2
+ export { Reveal, type RevealProps };
@@ -0,0 +1 @@
1
+ export { Reveal } from "./Reveal.mjs";
@@ -8,7 +8,7 @@ const HomeButton = ({ href, label = "Grupo Yo-Yo" }) => {
8
8
  onPointerDown: stop,
9
9
  onTouchStart: stop,
10
10
  "aria-label": `Volver a ${label}`,
11
- className: "fixed left-4 top-4 z-[9999] flex items-center gap-2 border border-base-content/12 bg-base-100/85 px-3 py-2 font-mono text-[0.65rem] uppercase tracking-[0.18em] text-base-content/60 backdrop-blur-md transition-colors [touch-action:manipulation] hover:text-base-content",
11
+ className: "fixed left-4 top-4 z-[9999] flex cursor-pointer items-center gap-2 border border-base-content/12 bg-base-100/85 px-3 py-2 font-mono text-[0.65rem] uppercase tracking-[0.18em] text-base-content/60 backdrop-blur-md transition-colors [touch-action:manipulation] hover:text-base-content",
12
12
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ArrowLeft, { className: "size-3.5" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
13
13
  className: "hidden sm:inline",
14
14
  children: label
@@ -1 +1 @@
1
- {"version":3,"file":"HomeButton.cjs","names":["ArrowLeft"],"sources":["../../../src/gallery/HomeButton/HomeButton.tsx"],"sourcesContent":["import type { SyntheticEvent } from \"react\";\nimport { ArrowLeft } from \"lucide-react\";\n\nexport type HomeButtonProps = {\n href: string;\n /** Group name shown next to the arrow. */\n label?: string;\n};\n\nexport const HomeButton = ({ href, label = \"Grupo Yo-Yo\" }: HomeButtonProps) => {\n const stop = (event: SyntheticEvent) => event.stopPropagation();\n\n return (\n <a\n href={href}\n onPointerDown={stop}\n onTouchStart={stop}\n aria-label={`Volver a ${label}`}\n className=\"fixed left-4 top-4 z-[9999] flex items-center gap-2 border border-base-content/12 bg-base-100/85 px-3 py-2 font-mono text-[0.65rem] uppercase tracking-[0.18em] text-base-content/60 backdrop-blur-md transition-colors [touch-action:manipulation] hover:text-base-content\"\n >\n <ArrowLeft className=\"size-3.5\" />\n <span className=\"hidden sm:inline\">{label}</span>\n </a>\n );\n};\n"],"mappings":";;;AASA,MAAa,cAAc,EAAE,MAAM,QAAQ,oBAAqC;CAC9E,MAAM,QAAQ,UAA0B,MAAM,gBAAgB;CAE9D,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;EACQ;EACN,eAAe;EACf,cAAc;EACd,cAAY,YAAY;EACxB,WAAU;EALZ,UAAA,CAOE,iBAAA,GAAA,kBAAA,IAAA,CAACA,aAAAA,WAAD,EAAW,WAAU,WAAY,CAAA,GACjC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAoB,UAAA;EAAY,CAAA,CAC/C;;AAEP"}
1
+ {"version":3,"file":"HomeButton.cjs","names":["ArrowLeft"],"sources":["../../../src/gallery/HomeButton/HomeButton.tsx"],"sourcesContent":["import type { SyntheticEvent } from \"react\";\nimport { ArrowLeft } from \"lucide-react\";\n\nexport type HomeButtonProps = {\n href: string;\n /** Group name shown next to the arrow. */\n label?: string;\n};\n\nexport const HomeButton = ({ href, label = \"Grupo Yo-Yo\" }: HomeButtonProps) => {\n const stop = (event: SyntheticEvent) => event.stopPropagation();\n\n return (\n <a\n href={href}\n onPointerDown={stop}\n onTouchStart={stop}\n aria-label={`Volver a ${label}`}\n className=\"fixed left-4 top-4 z-[9999] flex cursor-pointer items-center gap-2 border border-base-content/12 bg-base-100/85 px-3 py-2 font-mono text-[0.65rem] uppercase tracking-[0.18em] text-base-content/60 backdrop-blur-md transition-colors [touch-action:manipulation] hover:text-base-content\"\n >\n <ArrowLeft className=\"size-3.5\" />\n <span className=\"hidden sm:inline\">{label}</span>\n </a>\n );\n};\n"],"mappings":";;;AASA,MAAa,cAAc,EAAE,MAAM,QAAQ,oBAAqC;CAC9E,MAAM,QAAQ,UAA0B,MAAM,gBAAgB;CAE9D,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,KAAD;EACQ;EACN,eAAe;EACf,cAAc;EACd,cAAY,YAAY;EACxB,WAAU;EALZ,UAAA,CAOE,iBAAA,GAAA,kBAAA,IAAA,CAACA,aAAAA,WAAD,EAAW,WAAU,WAAY,CAAA,GACjC,iBAAA,GAAA,kBAAA,IAAA,CAAC,QAAD;GAAM,WAAU;GAAoB,UAAA;EAAY,CAAA,CAC/C;;AAEP"}
@@ -8,7 +8,7 @@ const HomeButton = ({ href, label = "Grupo Yo-Yo" }) => {
8
8
  onPointerDown: stop,
9
9
  onTouchStart: stop,
10
10
  "aria-label": `Volver a ${label}`,
11
- className: "fixed left-4 top-4 z-[9999] flex items-center gap-2 border border-base-content/12 bg-base-100/85 px-3 py-2 font-mono text-[0.65rem] uppercase tracking-[0.18em] text-base-content/60 backdrop-blur-md transition-colors [touch-action:manipulation] hover:text-base-content",
11
+ className: "fixed left-4 top-4 z-[9999] flex cursor-pointer items-center gap-2 border border-base-content/12 bg-base-100/85 px-3 py-2 font-mono text-[0.65rem] uppercase tracking-[0.18em] text-base-content/60 backdrop-blur-md transition-colors [touch-action:manipulation] hover:text-base-content",
12
12
  children: [/* @__PURE__ */ jsx(ArrowLeft, { className: "size-3.5" }), /* @__PURE__ */ jsx("span", {
13
13
  className: "hidden sm:inline",
14
14
  children: label
@@ -1 +1 @@
1
- {"version":3,"file":"HomeButton.mjs","names":[],"sources":["../../../src/gallery/HomeButton/HomeButton.tsx"],"sourcesContent":["import type { SyntheticEvent } from \"react\";\nimport { ArrowLeft } from \"lucide-react\";\n\nexport type HomeButtonProps = {\n href: string;\n /** Group name shown next to the arrow. */\n label?: string;\n};\n\nexport const HomeButton = ({ href, label = \"Grupo Yo-Yo\" }: HomeButtonProps) => {\n const stop = (event: SyntheticEvent) => event.stopPropagation();\n\n return (\n <a\n href={href}\n onPointerDown={stop}\n onTouchStart={stop}\n aria-label={`Volver a ${label}`}\n className=\"fixed left-4 top-4 z-[9999] flex items-center gap-2 border border-base-content/12 bg-base-100/85 px-3 py-2 font-mono text-[0.65rem] uppercase tracking-[0.18em] text-base-content/60 backdrop-blur-md transition-colors [touch-action:manipulation] hover:text-base-content\"\n >\n <ArrowLeft className=\"size-3.5\" />\n <span className=\"hidden sm:inline\">{label}</span>\n </a>\n );\n};\n"],"mappings":";;;AASA,MAAa,cAAc,EAAE,MAAM,QAAQ,oBAAqC;CAC9E,MAAM,QAAQ,UAA0B,MAAM,gBAAgB;CAE9D,OACE,qBAAC,KAAD;EACQ;EACN,eAAe;EACf,cAAc;EACd,cAAY,YAAY;EACxB,WAAU;EALZ,UAAA,CAOE,oBAAC,WAAD,EAAW,WAAU,WAAY,CAAA,GACjC,oBAAC,QAAD;GAAM,WAAU;GAAoB,UAAA;EAAY,CAAA,CAC/C;;AAEP"}
1
+ {"version":3,"file":"HomeButton.mjs","names":[],"sources":["../../../src/gallery/HomeButton/HomeButton.tsx"],"sourcesContent":["import type { SyntheticEvent } from \"react\";\nimport { ArrowLeft } from \"lucide-react\";\n\nexport type HomeButtonProps = {\n href: string;\n /** Group name shown next to the arrow. */\n label?: string;\n};\n\nexport const HomeButton = ({ href, label = \"Grupo Yo-Yo\" }: HomeButtonProps) => {\n const stop = (event: SyntheticEvent) => event.stopPropagation();\n\n return (\n <a\n href={href}\n onPointerDown={stop}\n onTouchStart={stop}\n aria-label={`Volver a ${label}`}\n className=\"fixed left-4 top-4 z-[9999] flex cursor-pointer items-center gap-2 border border-base-content/12 bg-base-100/85 px-3 py-2 font-mono text-[0.65rem] uppercase tracking-[0.18em] text-base-content/60 backdrop-blur-md transition-colors [touch-action:manipulation] hover:text-base-content\"\n >\n <ArrowLeft className=\"size-3.5\" />\n <span className=\"hidden sm:inline\">{label}</span>\n </a>\n );\n};\n"],"mappings":";;;AASA,MAAa,cAAc,EAAE,MAAM,QAAQ,oBAAqC;CAC9E,MAAM,QAAQ,UAA0B,MAAM,gBAAgB;CAE9D,OACE,qBAAC,KAAD;EACQ;EACN,eAAe;EACf,cAAc;EACd,cAAY,YAAY;EACxB,WAAU;EALZ,UAAA,CAOE,oBAAC,WAAD,EAAW,WAAU,WAAY,CAAA,GACjC,oBAAC,QAAD;GAAM,WAAU;GAAoB,UAAA;EAAY,CAAA,CAC/C;;AAEP"}
package/dist/index.cjs CHANGED
@@ -16,9 +16,13 @@ const require_Link = require("./components/Link/Link.cjs");
16
16
  require("./components/Link/index.cjs");
17
17
  const require_Logo = require("./components/Logo/Logo.cjs");
18
18
  require("./components/Logo/index.cjs");
19
+ const require_Logo3D = require("./components/Logo3D/Logo3D.cjs");
20
+ require("./components/Logo3D/index.cjs");
19
21
  const require_panel_classes = require("./components/Panel/panel-classes.cjs");
20
22
  const require_Panel = require("./components/Panel/Panel.cjs");
21
23
  require("./components/Panel/index.cjs");
24
+ const require_Reveal = require("./components/Reveal/Reveal.cjs");
25
+ require("./components/Reveal/index.cjs");
22
26
  const require_ThemeToggle = require("./components/ThemeToggle/ThemeToggle.cjs");
23
27
  require("./components/ThemeToggle/index.cjs");
24
28
  exports.Badge = require_Badge.Badge;
@@ -28,7 +32,9 @@ exports.Eyebrow = require_Eyebrow.Eyebrow;
28
32
  exports.IconButton = require_IconButton.IconButton;
29
33
  exports.Link = require_Link.Link;
30
34
  exports.Logo = require_Logo.Logo;
35
+ exports.Logo3D = require_Logo3D.Logo3D;
31
36
  exports.Panel = require_Panel.Panel;
37
+ exports.Reveal = require_Reveal.Reveal;
32
38
  exports.ThemeToggle = require_ThemeToggle.ThemeToggle;
33
39
  exports.badgeClasses = require_badge_classes.badgeClasses;
34
40
  exports.buttonClasses = require_button_classes.buttonClasses;
package/dist/index.d.cts CHANGED
@@ -14,8 +14,11 @@ import { LinkTone, linkClasses } from "./components/Link/link-classes.cjs";
14
14
  import { Link, LinkComponentProps, LinkProps } from "./components/Link/Link.cjs";
15
15
  import "./components/Link/index.cjs";
16
16
  import { Logo, LogoProps } from "./components/Logo/Logo.cjs";
17
+ import { Logo3D, Logo3DProps } from "./components/Logo3D/Logo3D.cjs";
17
18
  import { PanelPadding, PanelTone, panelClasses } from "./components/Panel/panel-classes.cjs";
18
19
  import { Panel, PanelProps } from "./components/Panel/Panel.cjs";
19
20
  import "./components/Panel/index.cjs";
21
+ import { Reveal, RevealProps } from "./components/Reveal/Reveal.cjs";
22
+ import "./components/Reveal/index.cjs";
20
23
  import { ThemeToggle, ThemeToggleProps } from "./components/ThemeToggle/ThemeToggle.cjs";
21
- export { Badge, type BadgeProps, type BadgeTone, Button, ButtonLink, type ButtonLinkProps, type ButtonProps, type ButtonSize, type ButtonVariant, Eyebrow, type EyebrowProps, IconButton, type IconButtonProps, type IconButtonSize, type IconButtonVariant, Link, type LinkComponentProps, type LinkProps, type LinkTone, Logo, type LogoProps, Panel, type PanelPadding, type PanelProps, type PanelTone, ThemeToggle, type ThemeToggleProps, badgeClasses, buttonClasses, iconButtonClasses, linkClasses, panelClasses };
24
+ export { Badge, type BadgeProps, type BadgeTone, Button, ButtonLink, type ButtonLinkProps, type ButtonProps, type ButtonSize, type ButtonVariant, Eyebrow, type EyebrowProps, IconButton, type IconButtonProps, type IconButtonSize, type IconButtonVariant, Link, type LinkComponentProps, type LinkProps, type LinkTone, Logo, Logo3D, type Logo3DProps, type LogoProps, Panel, type PanelPadding, type PanelProps, type PanelTone, Reveal, type RevealProps, ThemeToggle, type ThemeToggleProps, badgeClasses, buttonClasses, iconButtonClasses, linkClasses, panelClasses };
package/dist/index.d.mts CHANGED
@@ -14,8 +14,11 @@ import { LinkTone, linkClasses } from "./components/Link/link-classes.mjs";
14
14
  import { Link, LinkComponentProps, LinkProps } from "./components/Link/Link.mjs";
15
15
  import "./components/Link/index.mjs";
16
16
  import { Logo, LogoProps } from "./components/Logo/Logo.mjs";
17
+ import { Logo3D, Logo3DProps } from "./components/Logo3D/Logo3D.mjs";
17
18
  import { PanelPadding, PanelTone, panelClasses } from "./components/Panel/panel-classes.mjs";
18
19
  import { Panel, PanelProps } from "./components/Panel/Panel.mjs";
19
20
  import "./components/Panel/index.mjs";
21
+ import { Reveal, RevealProps } from "./components/Reveal/Reveal.mjs";
22
+ import "./components/Reveal/index.mjs";
20
23
  import { ThemeToggle, ThemeToggleProps } from "./components/ThemeToggle/ThemeToggle.mjs";
21
- export { Badge, type BadgeProps, type BadgeTone, Button, ButtonLink, type ButtonLinkProps, type ButtonProps, type ButtonSize, type ButtonVariant, Eyebrow, type EyebrowProps, IconButton, type IconButtonProps, type IconButtonSize, type IconButtonVariant, Link, type LinkComponentProps, type LinkProps, type LinkTone, Logo, type LogoProps, Panel, type PanelPadding, type PanelProps, type PanelTone, ThemeToggle, type ThemeToggleProps, badgeClasses, buttonClasses, iconButtonClasses, linkClasses, panelClasses };
24
+ export { Badge, type BadgeProps, type BadgeTone, Button, ButtonLink, type ButtonLinkProps, type ButtonProps, type ButtonSize, type ButtonVariant, Eyebrow, type EyebrowProps, IconButton, type IconButtonProps, type IconButtonSize, type IconButtonVariant, Link, type LinkComponentProps, type LinkProps, type LinkTone, Logo, Logo3D, type Logo3DProps, type LogoProps, Panel, type PanelPadding, type PanelProps, type PanelTone, Reveal, type RevealProps, ThemeToggle, type ThemeToggleProps, badgeClasses, buttonClasses, iconButtonClasses, linkClasses, panelClasses };
package/dist/index.mjs CHANGED
@@ -15,9 +15,13 @@ import { Link } from "./components/Link/Link.mjs";
15
15
  import "./components/Link/index.mjs";
16
16
  import { Logo } from "./components/Logo/Logo.mjs";
17
17
  import "./components/Logo/index.mjs";
18
+ import { Logo3D } from "./components/Logo3D/Logo3D.mjs";
19
+ import "./components/Logo3D/index.mjs";
18
20
  import { panelClasses } from "./components/Panel/panel-classes.mjs";
19
21
  import { Panel } from "./components/Panel/Panel.mjs";
20
22
  import "./components/Panel/index.mjs";
23
+ import { Reveal } from "./components/Reveal/Reveal.mjs";
24
+ import "./components/Reveal/index.mjs";
21
25
  import { ThemeToggle } from "./components/ThemeToggle/ThemeToggle.mjs";
22
26
  import "./components/ThemeToggle/index.mjs";
23
- export { Badge, Button, ButtonLink, Eyebrow, IconButton, Link, Logo, Panel, ThemeToggle, badgeClasses, buttonClasses, iconButtonClasses, linkClasses, panelClasses };
27
+ export { Badge, Button, ButtonLink, Eyebrow, IconButton, Link, Logo, Logo3D, Panel, Reveal, ThemeToggle, badgeClasses, buttonClasses, iconButtonClasses, linkClasses, panelClasses };
@@ -215,6 +215,7 @@
215
215
 
216
216
  .select {
217
217
  width: 100%;
218
+ cursor: pointer;
218
219
  padding: 0.375rem 0.625rem;
219
220
  border: 1px solid color-mix(in oklab, var(--color-base-content) 15%, transparent);
220
221
  background-color: var(--color-base-100);
@@ -319,6 +320,7 @@
319
320
  }
320
321
 
321
322
  .link {
323
+ cursor: pointer;
322
324
  text-decoration-line: underline;
323
325
  }
324
326
 
@@ -329,4 +331,81 @@
329
331
  .link-hover:hover {
330
332
  text-decoration-line: underline;
331
333
  }
334
+
335
+ /*
336
+ * The artwork panel ships its own white-on-black controls. Restyle its
337
+ * navigation and close buttons with the design system's square chips.
338
+ */
339
+ .sg-artwork-panel .sg-artwork-panel__navbtn {
340
+ flex: 1;
341
+ display: inline-flex;
342
+ align-items: center;
343
+ justify-content: center;
344
+ gap: 0.375rem;
345
+ padding: 0.5rem 0.75rem;
346
+ border: 1px solid
347
+ color-mix(in oklab, var(--color-base-content) 12%, transparent);
348
+ border-radius: 0;
349
+ background-color: color-mix(
350
+ in oklab,
351
+ var(--color-base-100) 80%,
352
+ transparent
353
+ );
354
+ color: var(--color-base-content);
355
+ font-family: var(--font-sans);
356
+ font-size: 0.875rem;
357
+ font-weight: 500;
358
+ cursor: pointer;
359
+ backdrop-filter: blur(8px);
360
+ transition:
361
+ background-color 150ms ease,
362
+ color 150ms ease,
363
+ border-color 150ms ease;
364
+ }
365
+
366
+ .sg-artwork-panel .sg-artwork-panel__navbtn:hover {
367
+ background-color: var(--color-base-200);
368
+ }
369
+
370
+ .sg-artwork-panel .sg-artwork-panel__navbtn:focus-visible {
371
+ outline: 2px solid var(--color-accent);
372
+ outline-offset: 2px;
373
+ }
374
+
375
+ .sg-artwork-panel .sg-artwork-panel__close {
376
+ display: inline-flex;
377
+ align-items: center;
378
+ justify-content: center;
379
+ width: 2rem;
380
+ height: 2rem;
381
+ padding: 0;
382
+ border: 1px solid
383
+ color-mix(in oklab, var(--color-base-content) 12%, transparent);
384
+ border-radius: 0;
385
+ background-color: color-mix(
386
+ in oklab,
387
+ var(--color-base-100) 80%,
388
+ transparent
389
+ );
390
+ color: var(--color-base-content);
391
+ font-family: var(--font-sans);
392
+ font-size: 1rem;
393
+ line-height: 1;
394
+ opacity: 1;
395
+ cursor: pointer;
396
+ backdrop-filter: blur(8px);
397
+ transition:
398
+ background-color 150ms ease,
399
+ color 150ms ease,
400
+ border-color 150ms ease;
401
+ }
402
+
403
+ .sg-artwork-panel .sg-artwork-panel__close:hover {
404
+ background-color: var(--color-base-200);
405
+ }
406
+
407
+ .sg-artwork-panel .sg-artwork-panel__close:focus-visible {
408
+ outline: 2px solid var(--color-accent);
409
+ outline-offset: 2px;
410
+ }
332
411
  }
package/dist/styles.css CHANGED
@@ -52,6 +52,26 @@
52
52
  color: var(--color-accent-content);
53
53
  }
54
54
 
55
+ /* Every interactive control gets the same pointer, even when an app uses a
56
+ plain anchor or a native input instead of a package component. */
57
+ a,
58
+ button,
59
+ [role="button"],
60
+ summary,
61
+ label[for],
62
+ select,
63
+ input[type="checkbox"],
64
+ input[type="radio"],
65
+ input[type="range"] {
66
+ cursor: pointer;
67
+ }
68
+
69
+ button:disabled,
70
+ input:disabled,
71
+ [aria-disabled="true"] {
72
+ cursor: not-allowed;
73
+ }
74
+
55
75
  /* The acid green reads on black but disappears on paper, so the letter form
56
76
  uses a deeper green in light mode and the pure accent in dark mode. */
57
77
  .text-accent-ink {
@@ -74,3 +94,75 @@
74
94
  [data-theme="yo-yo-dark"] .logo-inverse {
75
95
  display: block;
76
96
  }
97
+
98
+ /* CSS-only 3D mark: the SVG is stacked on Z to give it thickness, and the
99
+ whole stack tilts towards the pointer. */
100
+ .logo3d {
101
+ perspective: 900px;
102
+ }
103
+
104
+ .logo3d-inner {
105
+ position: relative;
106
+ width: 100%;
107
+ height: 100%;
108
+ transform-style: preserve-3d;
109
+ transform: rotateX(var(--logo-rx, -5deg)) rotateY(var(--logo-ry, 7deg));
110
+ transition: transform 260ms cubic-bezier(0.22, 1, 0.36, 1);
111
+ will-change: transform;
112
+ }
113
+
114
+ .logo3d-layer {
115
+ position: absolute;
116
+ inset: 0;
117
+ -webkit-mask-image: var(--logo-src, url("/logo.svg"));
118
+ mask-image: var(--logo-src, url("/logo.svg"));
119
+ -webkit-mask-position: center;
120
+ mask-position: center;
121
+ -webkit-mask-size: contain;
122
+ mask-size: contain;
123
+ -webkit-mask-repeat: no-repeat;
124
+ mask-repeat: no-repeat;
125
+ mask-mode: alpha;
126
+ }
127
+
128
+ .logo3d-front {
129
+ background: #111111;
130
+ }
131
+
132
+ [data-theme="yo-yo-dark"] .logo3d-front {
133
+ background: #f2f0ea;
134
+ }
135
+
136
+ .logo3d-depth {
137
+ background: var(--color-accent);
138
+ }
139
+
140
+ @media (prefers-reduced-motion: reduce) {
141
+ .logo3d-inner {
142
+ transition: none;
143
+ will-change: auto;
144
+ }
145
+ }
146
+
147
+ /* Content rises into place as it enters the viewport. The root attribute is
148
+ set before paint so nothing flashes; without JS the content stays visible. */
149
+ html[data-reveal="on"] .reveal {
150
+ opacity: 0;
151
+ transform: translateY(1.25rem);
152
+ transition:
153
+ opacity 700ms cubic-bezier(0.22, 1, 0.36, 1) var(--reveal-delay, 0ms),
154
+ transform 700ms cubic-bezier(0.22, 1, 0.36, 1) var(--reveal-delay, 0ms);
155
+ }
156
+
157
+ html[data-reveal="on"] .reveal[data-shown] {
158
+ opacity: 1;
159
+ transform: translateY(0);
160
+ }
161
+
162
+ @media (prefers-reduced-motion: reduce) {
163
+ html[data-reveal="on"] .reveal {
164
+ opacity: 1;
165
+ transform: none;
166
+ transition: none;
167
+ }
168
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yo-yo.art/ui",
3
- "version": "0.1.1",
3
+ "version": "0.2.1",
4
4
  "description": "The Grupo Yo-Yo design system: shared React components and tokens.",
5
5
  "keywords": [
6
6
  "design-system",