@nastechai-research/ui 0.18.2
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/CHANGELOG.md +5 -0
- package/README.md +21 -0
- package/dist/assets/filler-bg0.webp +0 -0
- package/dist/assets.d.ts +38 -0
- package/dist/fonts/Collapse-Bold.woff2 +0 -0
- package/dist/fonts/Collapse-BoldItalic.woff2 +0 -0
- package/dist/fonts/Collapse-Italic.woff2 +0 -0
- package/dist/fonts/Collapse-Light.woff2 +0 -0
- package/dist/fonts/Collapse-LightItalic.woff2 +0 -0
- package/dist/fonts/Collapse-Regular.woff2 +0 -0
- package/dist/fonts/Collapse-Thin.woff2 +0 -0
- package/dist/fonts/Collapse-ThinItalic.woff2 +0 -0
- package/dist/fonts/Mondwest-Regular.woff2 +0 -0
- package/dist/fonts/Neuebit-Bold.woff2 +0 -0
- package/dist/fonts/RulesCompressed-Medium.woff2 +0 -0
- package/dist/fonts/RulesCompressed-Regular.woff2 +0 -0
- package/dist/fonts/RulesExpanded-Bold.woff2 +0 -0
- package/dist/fonts/RulesExpanded-Regular.woff2 +0 -0
- package/dist/fonts.d.ts +6 -0
- package/dist/fonts.js +6 -0
- package/dist/hooks/use-below-breakpoint.d.ts +2 -0
- package/dist/hooks/use-below-breakpoint.js +17 -0
- package/dist/hooks/use-capped-frame.d.ts +2 -0
- package/dist/hooks/use-capped-frame.js +15 -0
- package/dist/hooks/use-confirm-delete.d.ts +10 -0
- package/dist/hooks/use-confirm-delete.js +35 -0
- package/dist/hooks/use-css-var-dims.d.ts +1 -0
- package/dist/hooks/use-css-var-dims.js +29 -0
- package/dist/hooks/use-gpu-tier.d.ts +34 -0
- package/dist/hooks/use-gpu-tier.js +111 -0
- package/dist/hooks/use-render-loop.d.ts +41 -0
- package/dist/hooks/use-render-loop.js +63 -0
- package/dist/hooks/use-smooth-controls.d.ts +16 -0
- package/dist/hooks/use-smooth-controls.js +217 -0
- package/dist/hooks/use-toast.d.ts +7 -0
- package/dist/hooks/use-toast.js +21 -0
- package/dist/index.d.ts +79 -0
- package/dist/index.js +107 -0
- package/dist/ui/basic-page.d.ts +7 -0
- package/dist/ui/basic-page.js +18 -0
- package/dist/ui/build.css +4 -0
- package/dist/ui/components/animated-count.d.ts +10 -0
- package/dist/ui/components/animated-count.js +113 -0
- package/dist/ui/components/ascii.d.ts +10 -0
- package/dist/ui/components/ascii.js +79 -0
- package/dist/ui/components/badge.d.ts +6 -0
- package/dist/ui/components/badge.js +40 -0
- package/dist/ui/components/badges/nous-girl.d.ts +2 -0
- package/dist/ui/components/badges/nous-girl.js +83 -0
- package/dist/ui/components/blend-mode.d.ts +28 -0
- package/dist/ui/components/blend-mode.js +69 -0
- package/dist/ui/components/blink.d.ts +6 -0
- package/dist/ui/components/blink.js +17 -0
- package/dist/ui/components/bottom-sheet.d.ts +15 -0
- package/dist/ui/components/bottom-sheet.js +192 -0
- package/dist/ui/components/button.d.ts +14 -0
- package/dist/ui/components/button.js +147 -0
- package/dist/ui/components/card.d.ts +5 -0
- package/dist/ui/components/card.js +74 -0
- package/dist/ui/components/checkbox.d.ts +2 -0
- package/dist/ui/components/checkbox.js +27 -0
- package/dist/ui/components/command-block.d.ts +24 -0
- package/dist/ui/components/command-block.js +56 -0
- package/dist/ui/components/confirm-dialog.d.ts +13 -0
- package/dist/ui/components/confirm-dialog.js +113 -0
- package/dist/ui/components/cursor.d.ts +3 -0
- package/dist/ui/components/cursor.js +97 -0
- package/dist/ui/components/dialog.d.ts +15 -0
- package/dist/ui/components/dialog.js +171 -0
- package/dist/ui/components/dropdown-menu.d.ts +12 -0
- package/dist/ui/components/dropdown-menu.js +102 -0
- package/dist/ui/components/fit-text/fit-text.css +42 -0
- package/dist/ui/components/fit-text/index.d.ts +9 -0
- package/dist/ui/components/fit-text/index.js +25 -0
- package/dist/ui/components/graphs/bar-chart.d.ts +12 -0
- package/dist/ui/components/graphs/bar-chart.js +129 -0
- package/dist/ui/components/graphs/index.d.ts +3 -0
- package/dist/ui/components/graphs/index.js +4 -0
- package/dist/ui/components/graphs/line-chart.d.ts +14 -0
- package/dist/ui/components/graphs/line-chart.js +175 -0
- package/dist/ui/components/graphs/utils.d.ts +52 -0
- package/dist/ui/components/graphs/utils.js +162 -0
- package/dist/ui/components/grid/grid.css +79 -0
- package/dist/ui/components/grid/index.d.ts +2 -0
- package/dist/ui/components/grid/index.js +17 -0
- package/dist/ui/components/hover-bg.d.ts +1 -0
- package/dist/ui/components/hover-bg.js +14 -0
- package/dist/ui/components/icons/arrow.d.ts +6 -0
- package/dist/ui/components/icons/arrow.js +44 -0
- package/dist/ui/components/icons/check.d.ts +2 -0
- package/dist/ui/components/icons/check.js +13 -0
- package/dist/ui/components/icons/chevron.d.ts +6 -0
- package/dist/ui/components/icons/chevron.js +51 -0
- package/dist/ui/components/icons/discord.d.ts +2 -0
- package/dist/ui/components/icons/discord.js +15 -0
- package/dist/ui/components/icons/eye.d.ts +2 -0
- package/dist/ui/components/icons/eye.js +8 -0
- package/dist/ui/components/icons/gear.d.ts +6 -0
- package/dist/ui/components/icons/gear.js +30 -0
- package/dist/ui/components/icons/github.d.ts +2 -0
- package/dist/ui/components/icons/github.js +15 -0
- package/dist/ui/components/icons/hamburger.d.ts +6 -0
- package/dist/ui/components/icons/hamburger.js +56 -0
- package/dist/ui/components/icons/heart.d.ts +2 -0
- package/dist/ui/components/icons/heart.js +11 -0
- package/dist/ui/components/icons/index.d.ts +12 -0
- package/dist/ui/components/icons/index.js +13 -0
- package/dist/ui/components/icons/link.d.ts +2 -0
- package/dist/ui/components/icons/link.js +13 -0
- package/dist/ui/components/icons/minus.d.ts +2 -0
- package/dist/ui/components/icons/minus.js +13 -0
- package/dist/ui/components/icons/search.d.ts +2 -0
- package/dist/ui/components/icons/search.js +33 -0
- package/dist/ui/components/image-distortion.d.ts +21 -0
- package/dist/ui/components/image-distortion.js +398 -0
- package/dist/ui/components/input.d.ts +1 -0
- package/dist/ui/components/input.js +21 -0
- package/dist/ui/components/label.d.ts +1 -0
- package/dist/ui/components/label.js +18 -0
- package/dist/ui/components/leva-client.d.ts +1 -0
- package/dist/ui/components/leva-client.js +12 -0
- package/dist/ui/components/list-item.d.ts +6 -0
- package/dist/ui/components/list-item.js +27 -0
- package/dist/ui/components/overlays/blend-modes.d.ts +1 -0
- package/dist/ui/components/overlays/blend-modes.js +14 -0
- package/dist/ui/components/overlays/glitch.d.ts +6 -0
- package/dist/ui/components/overlays/glitch.js +209 -0
- package/dist/ui/components/overlays/greys.d.ts +6 -0
- package/dist/ui/components/overlays/greys.js +339 -0
- package/dist/ui/components/overlays/index.d.ts +14 -0
- package/dist/ui/components/overlays/index.js +34 -0
- package/dist/ui/components/overlays/lens-layers.d.ts +14 -0
- package/dist/ui/components/overlays/lens-layers.js +95 -0
- package/dist/ui/components/overlays/lens.d.ts +44 -0
- package/dist/ui/components/overlays/lens.js +60 -0
- package/dist/ui/components/overlays/noise.d.ts +6 -0
- package/dist/ui/components/overlays/noise.js +136 -0
- package/dist/ui/components/overlays/vignette.d.ts +6 -0
- package/dist/ui/components/overlays/vignette.js +47 -0
- package/dist/ui/components/poster.d.ts +62 -0
- package/dist/ui/components/poster.js +256 -0
- package/dist/ui/components/progress.d.ts +9 -0
- package/dist/ui/components/progress.js +53 -0
- package/dist/ui/components/scene-canvas.d.ts +23 -0
- package/dist/ui/components/scene-canvas.js +179 -0
- package/dist/ui/components/scramble.d.ts +9 -0
- package/dist/ui/components/scramble.js +63 -0
- package/dist/ui/components/segmented.d.ts +20 -0
- package/dist/ui/components/segmented.js +51 -0
- package/dist/ui/components/select.d.ts +18 -0
- package/dist/ui/components/select.js +215 -0
- package/dist/ui/components/selection-switcher.d.ts +1 -0
- package/dist/ui/components/selection-switcher.js +34 -0
- package/dist/ui/components/separator.d.ts +5 -0
- package/dist/ui/components/separator.js +22 -0
- package/dist/ui/components/shader.d.ts +7 -0
- package/dist/ui/components/shader.js +60 -0
- package/dist/ui/components/socials.d.ts +20 -0
- package/dist/ui/components/socials.js +21 -0
- package/dist/ui/components/spinner.d.ts +20 -0
- package/dist/ui/components/spinner.js +38 -0
- package/dist/ui/components/stats.d.ts +16 -0
- package/dist/ui/components/stats.js +36 -0
- package/dist/ui/components/switch.d.ts +7 -0
- package/dist/ui/components/switch.js +37 -0
- package/dist/ui/components/tabs.d.ts +14 -0
- package/dist/ui/components/tabs.js +44 -0
- package/dist/ui/components/terminal-demo.d.ts +32 -0
- package/dist/ui/components/terminal-demo.js +125 -0
- package/dist/ui/components/theme-toggle.d.ts +6 -0
- package/dist/ui/components/theme-toggle.js +66 -0
- package/dist/ui/components/tier-card.d.ts +53 -0
- package/dist/ui/components/tier-card.js +146 -0
- package/dist/ui/components/toast.d.ts +8 -0
- package/dist/ui/components/toast.js +39 -0
- package/dist/ui/components/tv.d.ts +3 -0
- package/dist/ui/components/tv.js +239 -0
- package/dist/ui/components/typography/h1.d.ts +11 -0
- package/dist/ui/components/typography/h1.js +18 -0
- package/dist/ui/components/typography/h2.d.ts +11 -0
- package/dist/ui/components/typography/h2.js +18 -0
- package/dist/ui/components/typography/index.d.ts +15 -0
- package/dist/ui/components/typography/index.js +41 -0
- package/dist/ui/components/typography/legend.d.ts +6 -0
- package/dist/ui/components/typography/legend.js +20 -0
- package/dist/ui/components/typography/small.d.ts +2 -0
- package/dist/ui/components/typography/small.js +9 -0
- package/dist/ui/components/watchlist.d.ts +11 -0
- package/dist/ui/components/watchlist.js +80 -0
- package/dist/ui/fonts.css +63 -0
- package/dist/ui/footer.d.ts +20 -0
- package/dist/ui/footer.js +65 -0
- package/dist/ui/globals.css +395 -0
- package/dist/ui/header.d.ts +41 -0
- package/dist/ui/header.js +270 -0
- package/dist/ui/layout-wrapper.d.ts +1 -0
- package/dist/ui/layout-wrapper.js +7 -0
- package/dist/utils/color.d.ts +4 -0
- package/dist/utils/color.js +14 -0
- package/dist/utils/index.d.ts +15 -0
- package/dist/utils/index.js +48 -0
- package/dist/utils/poly.d.ts +8 -0
- package/dist/utils/poly.js +3 -0
- package/package.json +120 -0
- package/src/assets/filler-bg0.webp +0 -0
- package/src/assets.d.ts +38 -0
- package/src/fonts/Collapse-Bold.woff2 +0 -0
- package/src/fonts/Collapse-BoldItalic.woff2 +0 -0
- package/src/fonts/Collapse-Italic.woff2 +0 -0
- package/src/fonts/Collapse-Light.woff2 +0 -0
- package/src/fonts/Collapse-LightItalic.woff2 +0 -0
- package/src/fonts/Collapse-Regular.woff2 +0 -0
- package/src/fonts/Collapse-Thin.woff2 +0 -0
- package/src/fonts/Collapse-ThinItalic.woff2 +0 -0
- package/src/fonts/Mondwest-Regular.woff2 +0 -0
- package/src/fonts/Neuebit-Bold.woff2 +0 -0
- package/src/fonts/RulesCompressed-Medium.woff2 +0 -0
- package/src/fonts/RulesCompressed-Regular.woff2 +0 -0
- package/src/fonts/RulesExpanded-Bold.woff2 +0 -0
- package/src/fonts/RulesExpanded-Regular.woff2 +0 -0
- package/src/fonts.ts +6 -0
- package/src/hooks/use-below-breakpoint.ts +21 -0
- package/src/hooks/use-capped-frame.ts +18 -0
- package/src/hooks/use-confirm-delete.ts +43 -0
- package/src/hooks/use-css-var-dims.ts +39 -0
- package/src/hooks/use-gpu-tier.ts +190 -0
- package/src/hooks/use-render-loop.ts +121 -0
- package/src/hooks/use-smooth-controls.ts +318 -0
- package/src/hooks/use-toast.ts +29 -0
- package/src/index.ts +130 -0
- package/src/ui/basic-page.tsx +34 -0
- package/src/ui/build.css +4 -0
- package/src/ui/components/animated-count.stories.tsx +67 -0
- package/src/ui/components/animated-count.tsx +168 -0
- package/src/ui/components/ascii.stories.tsx +30 -0
- package/src/ui/components/ascii.tsx +110 -0
- package/src/ui/components/badge.stories.tsx +31 -0
- package/src/ui/components/badge.tsx +60 -0
- package/src/ui/components/badges/nous-girl.tsx +52 -0
- package/src/ui/components/blend-mode.stories.tsx +33 -0
- package/src/ui/components/blend-mode.tsx +129 -0
- package/src/ui/components/blink.stories.tsx +32 -0
- package/src/ui/components/blink.tsx +21 -0
- package/src/ui/components/bottom-sheet.stories.tsx +43 -0
- package/src/ui/components/bottom-sheet.tsx +227 -0
- package/src/ui/components/button.stories.tsx +68 -0
- package/src/ui/components/button.tsx +170 -0
- package/src/ui/components/card.stories.tsx +63 -0
- package/src/ui/components/card.tsx +85 -0
- package/src/ui/components/checkbox.stories.tsx +113 -0
- package/src/ui/components/checkbox.tsx +36 -0
- package/src/ui/components/command-block.stories.tsx +52 -0
- package/src/ui/components/command-block.tsx +86 -0
- package/src/ui/components/confirm-dialog.stories.tsx +91 -0
- package/src/ui/components/confirm-dialog.tsx +130 -0
- package/src/ui/components/cursor.tsx +115 -0
- package/src/ui/components/dialog.stories.tsx +169 -0
- package/src/ui/components/dialog.tsx +177 -0
- package/src/ui/components/dropdown-menu.stories.tsx +52 -0
- package/src/ui/components/dropdown-menu.tsx +117 -0
- package/src/ui/components/fit-text/fit-text.css +42 -0
- package/src/ui/components/fit-text/index.stories.tsx +33 -0
- package/src/ui/components/fit-text/index.tsx +45 -0
- package/src/ui/components/forms.stories.tsx +173 -0
- package/src/ui/components/graphs/bar-chart.tsx +153 -0
- package/src/ui/components/graphs/index.stories.tsx +64 -0
- package/src/ui/components/graphs/index.tsx +4 -0
- package/src/ui/components/graphs/line-chart.tsx +213 -0
- package/src/ui/components/graphs/utils.tsx +265 -0
- package/src/ui/components/grid/grid.css +79 -0
- package/src/ui/components/grid/index.tsx +19 -0
- package/src/ui/components/hover-bg.stories.tsx +29 -0
- package/src/ui/components/hover-bg.tsx +15 -0
- package/src/ui/components/icons/arrow.tsx +42 -0
- package/src/ui/components/icons/check.tsx +14 -0
- package/src/ui/components/icons/chevron.tsx +45 -0
- package/src/ui/components/icons/discord.tsx +16 -0
- package/src/ui/components/icons/eye.tsx +12 -0
- package/src/ui/components/icons/gear.tsx +51 -0
- package/src/ui/components/icons/github.tsx +16 -0
- package/src/ui/components/icons/hamburger.tsx +52 -0
- package/src/ui/components/icons/heart.tsx +12 -0
- package/src/ui/components/icons/index.ts +12 -0
- package/src/ui/components/icons/link.tsx +14 -0
- package/src/ui/components/icons/minus.tsx +14 -0
- package/src/ui/components/icons/search.tsx +28 -0
- package/src/ui/components/image-distortion.stories.tsx +120 -0
- package/src/ui/components/image-distortion.tsx +499 -0
- package/src/ui/components/input.stories.tsx +39 -0
- package/src/ui/components/input.tsx +20 -0
- package/src/ui/components/label.stories.tsx +26 -0
- package/src/ui/components/label.tsx +16 -0
- package/src/ui/components/leva-client.tsx +14 -0
- package/src/ui/components/list-item.stories.tsx +83 -0
- package/src/ui/components/list-item.tsx +37 -0
- package/src/ui/components/overlays/blend-modes.ts +13 -0
- package/src/ui/components/overlays/glitch.tsx +243 -0
- package/src/ui/components/overlays/greys.tsx +386 -0
- package/src/ui/components/overlays/index.tsx +47 -0
- package/src/ui/components/overlays/lens-layers.tsx +121 -0
- package/src/ui/components/overlays/lens.ts +91 -0
- package/src/ui/components/overlays/noise.tsx +174 -0
- package/src/ui/components/overlays/vignette.tsx +60 -0
- package/src/ui/components/poster.stories.tsx +513 -0
- package/src/ui/components/poster.tsx +411 -0
- package/src/ui/components/progress.stories.tsx +48 -0
- package/src/ui/components/progress.tsx +56 -0
- package/src/ui/components/scene-canvas.tsx +254 -0
- package/src/ui/components/scramble.stories.tsx +49 -0
- package/src/ui/components/scramble.tsx +95 -0
- package/src/ui/components/segmented.stories.tsx +101 -0
- package/src/ui/components/segmented.tsx +81 -0
- package/src/ui/components/select.stories.tsx +88 -0
- package/src/ui/components/select.tsx +267 -0
- package/src/ui/components/selection-switcher.tsx +44 -0
- package/src/ui/components/separator.stories.tsx +33 -0
- package/src/ui/components/separator.tsx +24 -0
- package/src/ui/components/shader.tsx +83 -0
- package/src/ui/components/socials.tsx +42 -0
- package/src/ui/components/spinner.stories.tsx +101 -0
- package/src/ui/components/spinner.tsx +60 -0
- package/src/ui/components/stats.stories.tsx +24 -0
- package/src/ui/components/stats.tsx +53 -0
- package/src/ui/components/switch.stories.tsx +77 -0
- package/src/ui/components/switch.tsx +48 -0
- package/src/ui/components/tabs.stories.tsx +101 -0
- package/src/ui/components/tabs.tsx +66 -0
- package/src/ui/components/terminal-demo.stories.tsx +67 -0
- package/src/ui/components/terminal-demo.tsx +189 -0
- package/src/ui/components/theme-toggle.stories.tsx +47 -0
- package/src/ui/components/theme-toggle.tsx +66 -0
- package/src/ui/components/tier-card.stories.tsx +217 -0
- package/src/ui/components/tier-card.tsx +190 -0
- package/src/ui/components/toast.stories.tsx +55 -0
- package/src/ui/components/toast.tsx +49 -0
- package/src/ui/components/tv.stories.tsx +37 -0
- package/src/ui/components/tv.tsx +257 -0
- package/src/ui/components/typography/h1.tsx +18 -0
- package/src/ui/components/typography/h2.tsx +18 -0
- package/src/ui/components/typography/index.tsx +54 -0
- package/src/ui/components/typography/legend.tsx +24 -0
- package/src/ui/components/typography/small.tsx +11 -0
- package/src/ui/components/watchlist.stories.tsx +33 -0
- package/src/ui/components/watchlist.tsx +105 -0
- package/src/ui/fonts.css +63 -0
- package/src/ui/footer.tsx +111 -0
- package/src/ui/globals.css +395 -0
- package/src/ui/header.tsx +398 -0
- package/src/ui/layout-wrapper.tsx +11 -0
- package/src/utils/color.ts +21 -0
- package/src/utils/index.ts +62 -0
- package/src/utils/poly.ts +26 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { atom } from "nanostores";
|
|
3
|
+
import { setControlValue } from "../../../hooks/use-smooth-controls.js";
|
|
4
|
+
export const LENS_0 = {
|
|
5
|
+
Globe: { innerColor: "#170d02", innerOpacity: 0.1, outerColor: "#FFAC02" },
|
|
6
|
+
Lens: {
|
|
7
|
+
bgBlend: "difference",
|
|
8
|
+
bgColor: "#041C1C",
|
|
9
|
+
bgOpacity: 1,
|
|
10
|
+
fgColor: "#FFFFFF",
|
|
11
|
+
fgOpacity: 0,
|
|
12
|
+
fillerOpacity: 0.033,
|
|
13
|
+
mgColor: "#ffe6cb",
|
|
14
|
+
mgOpacity: 1
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
export const LENS_5I = {
|
|
18
|
+
Globe: { innerColor: "#170d02", innerOpacity: 0.3, outerColor: "#FFAC02" },
|
|
19
|
+
Lens: {
|
|
20
|
+
bgBlend: "multiply",
|
|
21
|
+
bgColor: "#170d02",
|
|
22
|
+
bgOpacity: 1,
|
|
23
|
+
fgColor: "#FFFFFF",
|
|
24
|
+
fgOpacity: 1,
|
|
25
|
+
fillerOpacity: 0.06,
|
|
26
|
+
mgColor: "#FFAC02",
|
|
27
|
+
mgOpacity: 1
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
export const lens0 = (l, g) => ({
|
|
31
|
+
Globe: { ...LENS_0.Globe, ...g },
|
|
32
|
+
Lens: { ...LENS_0.Lens, ...l }
|
|
33
|
+
});
|
|
34
|
+
export const lens5i = (l, g) => ({
|
|
35
|
+
Globe: { ...LENS_5I.Globe, ...g },
|
|
36
|
+
Lens: { ...LENS_5I.Lens, ...l }
|
|
37
|
+
});
|
|
38
|
+
export const LENSES = [
|
|
39
|
+
["0", LENS_0],
|
|
40
|
+
["1", lens0({ bgColor: "#0A1F1F" })],
|
|
41
|
+
["2", lens0({ bgColor: "#0E0313", mgColor: "#e6cbff" })],
|
|
42
|
+
["3", lens5i({ mgColor: "#FFAC02" })],
|
|
43
|
+
["4", lens5i({ bgColor: "#0E0313", mgColor: "#FF5500" })],
|
|
44
|
+
["5", lens0({ bgColor: "#1540B1", bgOpacity: 0.7 })],
|
|
45
|
+
["5i", LENS_5I],
|
|
46
|
+
["6", lens5i({ bgColor: "#170D02", mgColor: "#00E5FF" })]
|
|
47
|
+
];
|
|
48
|
+
export const applyLens = (preset, animate = false) => Object.entries(preset).forEach(
|
|
49
|
+
([g, v]) => Object.entries(v).forEach(
|
|
50
|
+
([k, val]) => setControlValue(g, k, val, { animate })
|
|
51
|
+
)
|
|
52
|
+
);
|
|
53
|
+
export const $lightMode = atom(true);
|
|
54
|
+
export const toggleLens = () => {
|
|
55
|
+
const isLight = $lightMode.get();
|
|
56
|
+
const next = isLight ? LENS_0 : LENS_5I;
|
|
57
|
+
$lightMode.set(!isLight);
|
|
58
|
+
applyLens(next, true);
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IGF0b20gfSBmcm9tICduYW5vc3RvcmVzJ1xuXG5pbXBvcnQgeyBzZXRDb250cm9sVmFsdWUgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2Utc21vb3RoLWNvbnRyb2xzJ1xuXG5leHBvcnQgY29uc3QgTEVOU18wID0ge1xuICBHbG9iZTogeyBpbm5lckNvbG9yOiAnIzE3MGQwMicsIGlubmVyT3BhY2l0eTogMC4xLCBvdXRlckNvbG9yOiAnI0ZGQUMwMicgfSxcbiAgTGVuczoge1xuICAgIGJnQmxlbmQ6ICdkaWZmZXJlbmNlJyxcbiAgICBiZ0NvbG9yOiAnIzA0MUMxQycsXG4gICAgYmdPcGFjaXR5OiAxLFxuICAgIGZnQ29sb3I6ICcjRkZGRkZGJyxcbiAgICBmZ09wYWNpdHk6IDAsXG4gICAgZmlsbGVyT3BhY2l0eTogMC4wMzMsXG4gICAgbWdDb2xvcjogJyNmZmU2Y2InLFxuICAgIG1nT3BhY2l0eTogMVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBMRU5TXzVJID0ge1xuICBHbG9iZTogeyBpbm5lckNvbG9yOiAnIzE3MGQwMicsIGlubmVyT3BhY2l0eTogMC4zLCBvdXRlckNvbG9yOiAnI0ZGQUMwMicgfSxcbiAgTGVuczoge1xuICAgIGJnQmxlbmQ6ICdtdWx0aXBseScsXG4gICAgYmdDb2xvcjogJyMxNzBkMDInLFxuICAgIGJnT3BhY2l0eTogMSxcbiAgICBmZ0NvbG9yOiAnI0ZGRkZGRicsXG4gICAgZmdPcGFjaXR5OiAxLFxuICAgIGZpbGxlck9wYWNpdHk6IDAuMDYsXG4gICAgbWdDb2xvcjogJyNGRkFDMDInLFxuICAgIG1nT3BhY2l0eTogMVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBsZW5zMCA9IChcbiAgbD86IFBhcnRpYWw8dHlwZW9mIExFTlNfMC5MZW5zPixcbiAgZz86IFBhcnRpYWw8dHlwZW9mIExFTlNfMC5HbG9iZT5cbik6IExlbnNQcmVzZXQgPT4gKHtcbiAgR2xvYmU6IHsgLi4uTEVOU18wLkdsb2JlLCAuLi5nIH0sXG4gIExlbnM6IHsgLi4uTEVOU18wLkxlbnMsIC4uLmwgfVxufSlcblxuLy8gVGhlIEhlcm1lcyBsaWdodC1tb2RlIGxvb2sgaXMgcHJvZHVjZWQgYnkgYSBmdWxsc2NyZWVuIG9wYXF1ZS13aGl0ZVxuLy8gYG1peC1ibGVuZC1tb2RlOiBkaWZmZXJlbmNlYCBmb3JlZ3JvdW5kIGxheWVyIHRoYXQgaW52ZXJ0cyBldmVyeXRoaW5nLlxuLy8gQ29sb3JlZCBsZW5zZXMgdGhhdCB3YW50IGEgXCJ3aGl0ZSArIGFjY2VudFwiIGxvb2sgTVVTVCBiZSBidWlsdCBmcm9tXG4vLyBMRU5TXzVJLCBub3QgTEVOU18wIFx1MjAxNCBvdGhlcndpc2UgYGJnQmxlbmQ6ICdkaWZmZXJlbmNlJ2AgKyBhbiBvcGFxdWVcbi8vIGNvbG9yZWQgYmcgKyBhY3RpdmUgZmcgaW52ZXJzaW9uIGxhbmQgaGFsZndheSBiZXR3ZWVuIGRhcmsgYW5kIGxpZ2h0XG4vLyBtb2RlIGFuZCBwcm9kdWNlIGEgbXVkZHkgd2FybSB3YXNoIGluc3RlYWQgb2YgYSBjbGVhbiBpbnZlcnNpb24uXG5leHBvcnQgY29uc3QgbGVuczVpID0gKFxuICBsPzogUGFydGlhbDx0eXBlb2YgTEVOU181SS5MZW5zPixcbiAgZz86IFBhcnRpYWw8dHlwZW9mIExFTlNfNUkuR2xvYmU+XG4pOiBMZW5zUHJlc2V0ID0+ICh7XG4gIEdsb2JlOiB7IC4uLkxFTlNfNUkuR2xvYmUsIC4uLmcgfSxcbiAgTGVuczogeyAuLi5MRU5TXzVJLkxlbnMsIC4uLmwgfVxufSlcblxuLy8gQWNjZW50IGNvbG9ycyBhcmUgdGhlICpwcmUtaW52ZXJzaW9uKiBzb3VyY2U7IGFmdGVyIHRoZSBkaWZmZXJlbmNlIEZHXG4vLyBsYXllciB0aGV5IHJlYWQgYXMgdGhlaXIgdmlzdWFsIGNvbXBsZW1lbnQuIGUuZy4gYCNGRkFDMDJgIChvcmFuZ2UpXG4vLyByZW5kZXJzIGFzIGJsdWUgIzAwNTNGRCBvbiBzY3JlZW4gXHUyMDE0IHRoYXQncyB0aGUgZGVmYXVsdCBMRU5TXzVJIGFjY2VudC5cbmV4cG9ydCBjb25zdCBMRU5TRVM6IFtzdHJpbmcsIExlbnNQcmVzZXRdW10gPSBbXG4gIFsnMCcsIExFTlNfMF0sXG4gIFsnMScsIGxlbnMwKHsgYmdDb2xvcjogJyMwQTFGMUYnIH0pXSxcbiAgWycyJywgbGVuczAoeyBiZ0NvbG9yOiAnIzBFMDMxMycsIG1nQ29sb3I6ICcjZTZjYmZmJyB9KV0sXG4gIFsnMycsIGxlbnM1aSh7IG1nQ29sb3I6ICcjRkZBQzAyJyB9KV0sXG4gIFsnNCcsIGxlbnM1aSh7IGJnQ29sb3I6ICcjMEUwMzEzJywgbWdDb2xvcjogJyNGRjU1MDAnIH0pXSxcbiAgWyc1JywgbGVuczAoeyBiZ0NvbG9yOiAnIzE1NDBCMScsIGJnT3BhY2l0eTogMC43IH0pXSxcbiAgWyc1aScsIExFTlNfNUldLFxuICBbJzYnLCBsZW5zNWkoeyBiZ0NvbG9yOiAnIzE3MEQwMicsIG1nQ29sb3I6ICcjMDBFNUZGJyB9KV1cbl1cblxuZXhwb3J0IGNvbnN0IGFwcGx5TGVucyA9IChwcmVzZXQ6IExlbnNQcmVzZXQsIGFuaW1hdGUgPSBmYWxzZSkgPT5cbiAgT2JqZWN0LmVudHJpZXMocHJlc2V0KS5mb3JFYWNoKChbZywgdl0pID0+XG4gICAgT2JqZWN0LmVudHJpZXModikuZm9yRWFjaCgoW2ssIHZhbF0pID0+XG4gICAgICBzZXRDb250cm9sVmFsdWUoZywgaywgdmFsLCB7IGFuaW1hdGUgfSlcbiAgICApXG4gIClcblxuZXhwb3J0IGNvbnN0ICRsaWdodE1vZGUgPSBhdG9tKHRydWUpXG5cbmV4cG9ydCBjb25zdCB0b2dnbGVMZW5zID0gKCkgPT4ge1xuICBjb25zdCBpc0xpZ2h0ID0gJGxpZ2h0TW9kZS5nZXQoKVxuICBjb25zdCBuZXh0ID0gaXNMaWdodCA/IExFTlNfMCA6IExFTlNfNUlcblxuICAkbGlnaHRNb2RlLnNldCghaXNMaWdodClcbiAgYXBwbHlMZW5zKG5leHQsIHRydWUpXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGVuc1ByZXNldCB7XG4gIEdsb2JlOiB0eXBlb2YgTEVOU18wLkdsb2JlXG4gIExlbnM6IHR5cGVvZiBMRU5TXzAuTGVuc1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUVBLFNBQVMsWUFBWTtBQUVyQixTQUFTLHVCQUF1QjtBQUV6QixhQUFNLFNBQVM7QUFBQSxFQUNwQixPQUFPLEVBQUUsWUFBWSxXQUFXLGNBQWMsS0FBSyxZQUFZLFVBQVU7QUFBQSxFQUN6RSxNQUFNO0FBQUEsSUFDSixTQUFTO0FBQUEsSUFDVCxTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsSUFDWCxlQUFlO0FBQUEsSUFDZixTQUFTO0FBQUEsSUFDVCxXQUFXO0FBQUEsRUFDYjtBQUNGO0FBRU8sYUFBTSxVQUFVO0FBQUEsRUFDckIsT0FBTyxFQUFFLFlBQVksV0FBVyxjQUFjLEtBQUssWUFBWSxVQUFVO0FBQUEsRUFDekUsTUFBTTtBQUFBLElBQ0osU0FBUztBQUFBLElBQ1QsU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLElBQ1gsZUFBZTtBQUFBLElBQ2YsU0FBUztBQUFBLElBQ1QsV0FBVztBQUFBLEVBQ2I7QUFDRjtBQUVPLGFBQU0sUUFBUSxDQUNuQixHQUNBLE9BQ2dCO0FBQUEsRUFDaEIsT0FBTyxFQUFFLEdBQUcsT0FBTyxPQUFPLEdBQUcsRUFBRTtBQUFBLEVBQy9CLE1BQU0sRUFBRSxHQUFHLE9BQU8sTUFBTSxHQUFHLEVBQUU7QUFDL0I7QUFRTyxhQUFNLFNBQVMsQ0FDcEIsR0FDQSxPQUNnQjtBQUFBLEVBQ2hCLE9BQU8sRUFBRSxHQUFHLFFBQVEsT0FBTyxHQUFHLEVBQUU7QUFBQSxFQUNoQyxNQUFNLEVBQUUsR0FBRyxRQUFRLE1BQU0sR0FBRyxFQUFFO0FBQ2hDO0FBS08sYUFBTSxTQUFpQztBQUFBLEVBQzVDLENBQUMsS0FBSyxNQUFNO0FBQUEsRUFDWixDQUFDLEtBQUssTUFBTSxFQUFFLFNBQVMsVUFBVSxDQUFDLENBQUM7QUFBQSxFQUNuQyxDQUFDLEtBQUssTUFBTSxFQUFFLFNBQVMsV0FBVyxTQUFTLFVBQVUsQ0FBQyxDQUFDO0FBQUEsRUFDdkQsQ0FBQyxLQUFLLE9BQU8sRUFBRSxTQUFTLFVBQVUsQ0FBQyxDQUFDO0FBQUEsRUFDcEMsQ0FBQyxLQUFLLE9BQU8sRUFBRSxTQUFTLFdBQVcsU0FBUyxVQUFVLENBQUMsQ0FBQztBQUFBLEVBQ3hELENBQUMsS0FBSyxNQUFNLEVBQUUsU0FBUyxXQUFXLFdBQVcsSUFBSSxDQUFDLENBQUM7QUFBQSxFQUNuRCxDQUFDLE1BQU0sT0FBTztBQUFBLEVBQ2QsQ0FBQyxLQUFLLE9BQU8sRUFBRSxTQUFTLFdBQVcsU0FBUyxVQUFVLENBQUMsQ0FBQztBQUMxRDtBQUVPLGFBQU0sWUFBWSxDQUFDLFFBQW9CLFVBQVUsVUFDdEQsT0FBTyxRQUFRLE1BQU0sRUFBRTtBQUFBLEVBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUNuQyxPQUFPLFFBQVEsQ0FBQyxFQUFFO0FBQUEsSUFBUSxDQUFDLENBQUMsR0FBRyxHQUFHLE1BQ2hDLGdCQUFnQixHQUFHLEdBQUcsS0FBSyxFQUFFLFFBQVEsQ0FBQztBQUFBLEVBQ3hDO0FBQ0Y7QUFFSyxhQUFNLGFBQWEsS0FBSyxJQUFJO0FBRTVCLGFBQU0sYUFBYSxNQUFNO0FBQzlCLFFBQU0sVUFBVSxXQUFXLElBQUk7QUFDL0IsUUFBTSxPQUFPLFVBQVUsU0FBUztBQUVoQyxhQUFXLElBQUksQ0FBQyxPQUFPO0FBQ3ZCLFlBQVUsTUFBTSxJQUFJO0FBQ3RCOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useRef } from "react";
|
|
4
|
+
import * as THREE from "three";
|
|
5
|
+
import { $gpuTier, useGpuTier } from "../../../hooks/use-gpu-tier.js";
|
|
6
|
+
import { useSmoothControls } from "../../../hooks/use-smooth-controls.js";
|
|
7
|
+
import { cn, hexToVec3 } from "../../../utils/index.js";
|
|
8
|
+
import { BLEND_MODES } from "./blend-modes.js";
|
|
9
|
+
const vert = (
|
|
10
|
+
/*glsl*/
|
|
11
|
+
`
|
|
12
|
+
varying vec2 vUv;
|
|
13
|
+
void main() {
|
|
14
|
+
vUv = uv;
|
|
15
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
16
|
+
}
|
|
17
|
+
`
|
|
18
|
+
);
|
|
19
|
+
const frag = (
|
|
20
|
+
/*glsl*/
|
|
21
|
+
`
|
|
22
|
+
uniform vec2 uRes;
|
|
23
|
+
uniform float uDpr, uSize, uDensity, uOpacity;
|
|
24
|
+
uniform vec3 uColor;
|
|
25
|
+
varying vec2 vUv;
|
|
26
|
+
|
|
27
|
+
float hash(vec2 p) {
|
|
28
|
+
vec3 p3 = fract(vec3(p.xyx) * 0.1031);
|
|
29
|
+
p3 += dot(p3, p3.yzx + 33.33);
|
|
30
|
+
return fract((p3.x + p3.y) * p3.z);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
void main() {
|
|
34
|
+
float n = hash(floor(vUv * uRes / (uSize * uDpr)));
|
|
35
|
+
gl_FragColor = vec4(uColor, step(1.0 - uDensity, n)) * uOpacity;
|
|
36
|
+
}
|
|
37
|
+
`
|
|
38
|
+
);
|
|
39
|
+
export function Noise({ className, style }) {
|
|
40
|
+
const gpuTier = useGpuTier();
|
|
41
|
+
const c = useSmoothControls(
|
|
42
|
+
"Effects/Noise",
|
|
43
|
+
{
|
|
44
|
+
blend: { options: BLEND_MODES, value: "color-dodge" },
|
|
45
|
+
color: { value: "#eaeaea" },
|
|
46
|
+
density: { max: 1, min: 0, step: 0.01, value: 0.11 },
|
|
47
|
+
enabled: { value: true },
|
|
48
|
+
opacity: { max: 1, min: 0, step: 0.01, value: 0.55 },
|
|
49
|
+
size: { max: 10, min: 0.1, step: 0.1, value: 1 }
|
|
50
|
+
},
|
|
51
|
+
{ collapsed: true }
|
|
52
|
+
);
|
|
53
|
+
const canvasRef = useRef(null);
|
|
54
|
+
const enabled = c.enabled && gpuTier > 0;
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
if (!canvasRef.current || !enabled) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
let renderer;
|
|
60
|
+
try {
|
|
61
|
+
renderer = new THREE.WebGLRenderer({
|
|
62
|
+
alpha: true,
|
|
63
|
+
canvas: canvasRef.current,
|
|
64
|
+
premultipliedAlpha: false
|
|
65
|
+
});
|
|
66
|
+
} catch {
|
|
67
|
+
$gpuTier.set(0);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
renderer.setClearColor(0, 0);
|
|
71
|
+
const scene = new THREE.Scene();
|
|
72
|
+
const camera = new THREE.OrthographicCamera(-1, 1, 1, -1, 0, 1);
|
|
73
|
+
const geo = new THREE.PlaneGeometry(2, 2);
|
|
74
|
+
const mat = new THREE.ShaderMaterial({
|
|
75
|
+
fragmentShader: frag,
|
|
76
|
+
transparent: true,
|
|
77
|
+
uniforms: {
|
|
78
|
+
uColor: { value: hexToVec3(c.color) },
|
|
79
|
+
uDensity: { value: c.density },
|
|
80
|
+
uDpr: { value: 1 },
|
|
81
|
+
uOpacity: { value: c.opacity },
|
|
82
|
+
uRes: { value: new THREE.Vector2() },
|
|
83
|
+
uSize: { value: c.size }
|
|
84
|
+
},
|
|
85
|
+
vertexShader: vert
|
|
86
|
+
});
|
|
87
|
+
scene.add(new THREE.Mesh(geo, mat));
|
|
88
|
+
const dpr = Math.min(devicePixelRatio, 1.5);
|
|
89
|
+
const render = () => {
|
|
90
|
+
mat.uniforms.uColor.value = hexToVec3(c.color);
|
|
91
|
+
mat.uniforms.uDensity.value = c.density;
|
|
92
|
+
mat.uniforms.uOpacity.value = c.opacity;
|
|
93
|
+
mat.uniforms.uSize.value = c.size;
|
|
94
|
+
mat.uniforms.uDpr.value = dpr;
|
|
95
|
+
renderer.render(scene, camera);
|
|
96
|
+
};
|
|
97
|
+
const resize = () => {
|
|
98
|
+
renderer.setSize(innerWidth, innerHeight);
|
|
99
|
+
renderer.setPixelRatio(dpr);
|
|
100
|
+
mat.uniforms.uRes.value.set(innerWidth * dpr, innerHeight * dpr);
|
|
101
|
+
render();
|
|
102
|
+
};
|
|
103
|
+
resize();
|
|
104
|
+
window.addEventListener("resize", resize);
|
|
105
|
+
const onVisibility = () => {
|
|
106
|
+
if (!document.hidden) render();
|
|
107
|
+
};
|
|
108
|
+
document.addEventListener("visibilitychange", onVisibility);
|
|
109
|
+
return () => {
|
|
110
|
+
window.removeEventListener("resize", resize);
|
|
111
|
+
document.removeEventListener("visibilitychange", onVisibility);
|
|
112
|
+
mat.dispose();
|
|
113
|
+
geo.dispose();
|
|
114
|
+
renderer.dispose();
|
|
115
|
+
};
|
|
116
|
+
}, [
|
|
117
|
+
enabled,
|
|
118
|
+
gpuTier,
|
|
119
|
+
c.color,
|
|
120
|
+
c.density,
|
|
121
|
+
c.opacity,
|
|
122
|
+
c.size
|
|
123
|
+
]);
|
|
124
|
+
if (!enabled) {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
127
|
+
return /* @__PURE__ */ jsx(
|
|
128
|
+
"canvas",
|
|
129
|
+
{
|
|
130
|
+
className: cn("h-full w-full", className),
|
|
131
|
+
ref: canvasRef,
|
|
132
|
+
style: { mixBlendMode: c.blend, ...style }
|
|
133
|
+
}
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSdcblxuaW1wb3J0IHsgJGdwdVRpZXIsIHVzZUdwdVRpZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2UtZ3B1LXRpZXInXG5pbXBvcnQgeyB1c2VTbW9vdGhDb250cm9scyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZS1zbW9vdGgtY29udHJvbHMnXG5pbXBvcnQgeyBjbiwgaGV4VG9WZWMzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnXG5cbmltcG9ydCB7IEJMRU5EX01PREVTIH0gZnJvbSAnLi9ibGVuZC1tb2RlcydcblxuY29uc3QgdmVydCA9IC8qZ2xzbCovIGBcbiAgdmFyeWluZyB2ZWMyIHZVdjtcbiAgdm9pZCBtYWluKCkge1xuICAgIHZVdiA9IHV2O1xuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gIH1cbmBcblxuY29uc3QgZnJhZyA9IC8qZ2xzbCovIGBcbiAgdW5pZm9ybSB2ZWMyIHVSZXM7XG4gIHVuaWZvcm0gZmxvYXQgdURwciwgdVNpemUsIHVEZW5zaXR5LCB1T3BhY2l0eTtcbiAgdW5pZm9ybSB2ZWMzIHVDb2xvcjtcbiAgdmFyeWluZyB2ZWMyIHZVdjtcblxuICBmbG9hdCBoYXNoKHZlYzIgcCkge1xuICAgIHZlYzMgcDMgPSBmcmFjdCh2ZWMzKHAueHl4KSAqIDAuMTAzMSk7XG4gICAgcDMgKz0gZG90KHAzLCBwMy55enggKyAzMy4zMyk7XG4gICAgcmV0dXJuIGZyYWN0KChwMy54ICsgcDMueSkgKiBwMy56KTtcbiAgfVxuXG4gIHZvaWQgbWFpbigpIHtcbiAgICBmbG9hdCBuID0gaGFzaChmbG9vcih2VXYgKiB1UmVzIC8gKHVTaXplICogdURwcikpKTtcbiAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KHVDb2xvciwgc3RlcCgxLjAgLSB1RGVuc2l0eSwgbikpICogdU9wYWNpdHk7XG4gIH1cbmBcblxuZXhwb3J0IGZ1bmN0aW9uIE5vaXNlKHsgY2xhc3NOYW1lLCBzdHlsZSB9OiBOb2lzZVByb3BzKSB7XG4gIGNvbnN0IGdwdVRpZXIgPSB1c2VHcHVUaWVyKClcblxuICBjb25zdCBjID0gdXNlU21vb3RoQ29udHJvbHMoXG4gICAgJ0VmZmVjdHMvTm9pc2UnLFxuICAgIHtcbiAgICAgIGJsZW5kOiB7IG9wdGlvbnM6IEJMRU5EX01PREVTLCB2YWx1ZTogJ2NvbG9yLWRvZGdlJyBhcyBjb25zdCB9LFxuICAgICAgY29sb3I6IHsgdmFsdWU6ICcjZWFlYWVhJyB9LFxuICAgICAgZGVuc2l0eTogeyBtYXg6IDEsIG1pbjogMCwgc3RlcDogMC4wMSwgdmFsdWU6IDAuMTEgfSxcbiAgICAgIGVuYWJsZWQ6IHsgdmFsdWU6IHRydWUgfSxcbiAgICAgIG9wYWNpdHk6IHsgbWF4OiAxLCBtaW46IDAsIHN0ZXA6IDAuMDEsIHZhbHVlOiAwLjU1IH0sXG4gICAgICBzaXplOiB7IG1heDogMTAsIG1pbjogMC4xLCBzdGVwOiAwLjEsIHZhbHVlOiAxIH1cbiAgICB9LFxuICAgIHsgY29sbGFwc2VkOiB0cnVlIH1cbiAgKVxuXG4gIGNvbnN0IGNhbnZhc1JlZiA9IHVzZVJlZjxIVE1MQ2FudmFzRWxlbWVudD4obnVsbClcblxuICBjb25zdCBlbmFibGVkID0gYy5lbmFibGVkICYmIGdwdVRpZXIgPiAwXG5cbiAgLy8gVGhlIG5vaXNlIHNoYWRlciBpcyBmdWxseSBkZXRlcm1pbmlzdGljOiBnaXZlbiB0aGUgc2FtZSB1bmlmb3JtcyBpdFxuICAvLyBwcm9kdWNlcyBhbiBpZGVudGljYWwgb3V0cHV0IGV2ZXJ5IGZyYW1lLiBUaGUgcHJldmlvdXMgdmVyc2lvbiByYW5cbiAgLy8gaXQgYXQgNjBmcHMgZm9yZXZlciwgd2hpY2ggb24gYSByZXRpbmEgZGlzcGxheSB3aXRoIG1peC1ibGVuZC1tb2RlXG4gIC8vIGlzIGVub3VnaCB0byBwZWcgdGhlIEdQVS9jb21wb3NpdG9yIGZvciB0aGUgZW50aXJlIGxpZmV0aW1lIG9mIHRoZVxuICAvLyBwYWdlICh0aGlzIGlzIHRoZSBkb21pbmFudCBjb250cmlidXRvciB0byB0aGUgXCJmYW5zIGdvIGNyYXp5IGFmdGVyXG4gIC8vIGEgZmV3IGhvdXJzIG9mIGlkbGVcIiBzeW1wdG9tKS5cbiAgLy9cbiAgLy8gSW5zdGVhZCB3ZSByZW5kZXIgZXhhY3RseSBvbmNlIG9uIG1vdW50LCBhbmQgcmUtcmVuZGVyIG9ubHkgd2hlblxuICAvLyB0aGUgdXNlci1jb250cm9sbGFibGUgdW5pZm9ybXMgY2hhbmdlIG9yIHRoZSB2aWV3cG9ydCByZXNpemVzLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY2FudmFzUmVmLmN1cnJlbnQgfHwgIWVuYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCByZW5kZXJlcjogVEhSRUUuV2ViR0xSZW5kZXJlclxuXG4gICAgdHJ5IHtcbiAgICAgIHJlbmRlcmVyID0gbmV3IFRIUkVFLldlYkdMUmVuZGVyZXIoe1xuICAgICAgICBhbHBoYTogdHJ1ZSxcbiAgICAgICAgY2FudmFzOiBjYW52YXNSZWYuY3VycmVudCxcbiAgICAgICAgcHJlbXVsdGlwbGllZEFscGhhOiBmYWxzZVxuICAgICAgfSlcbiAgICB9IGNhdGNoIHtcbiAgICAgICRncHVUaWVyLnNldCgwKVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICByZW5kZXJlci5zZXRDbGVhckNvbG9yKDB4MDAwMDAwLCAwKVxuXG4gICAgY29uc3Qgc2NlbmUgPSBuZXcgVEhSRUUuU2NlbmUoKVxuICAgIGNvbnN0IGNhbWVyYSA9IG5ldyBUSFJFRS5PcnRob2dyYXBoaWNDYW1lcmEoLTEsIDEsIDEsIC0xLCAwLCAxKVxuICAgIGNvbnN0IGdlbyA9IG5ldyBUSFJFRS5QbGFuZUdlb21ldHJ5KDIsIDIpXG5cbiAgICBjb25zdCBtYXQgPSBuZXcgVEhSRUUuU2hhZGVyTWF0ZXJpYWwoe1xuICAgICAgZnJhZ21lbnRTaGFkZXI6IGZyYWcsXG4gICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICAgIHVuaWZvcm1zOiB7XG4gICAgICAgIHVDb2xvcjogeyB2YWx1ZTogaGV4VG9WZWMzKGMuY29sb3IpIH0sXG4gICAgICAgIHVEZW5zaXR5OiB7IHZhbHVlOiBjLmRlbnNpdHkgfSxcbiAgICAgICAgdURwcjogeyB2YWx1ZTogMSB9LFxuICAgICAgICB1T3BhY2l0eTogeyB2YWx1ZTogYy5vcGFjaXR5IH0sXG4gICAgICAgIHVSZXM6IHsgdmFsdWU6IG5ldyBUSFJFRS5WZWN0b3IyKCkgfSxcbiAgICAgICAgdVNpemU6IHsgdmFsdWU6IGMuc2l6ZSB9XG4gICAgICB9LFxuICAgICAgdmVydGV4U2hhZGVyOiB2ZXJ0XG4gICAgfSlcblxuICAgIHNjZW5lLmFkZChuZXcgVEhSRUUuTWVzaChnZW8sIG1hdCkpXG5cbiAgICAvLyBDYXAgcGl4ZWwgcmF0aW8gYXQgMS41IFx1MjAxNCBub2lzZSBpcyBpbnRlbnRpb25hbGx5IHBpeGVsYXRlZCwgc28gdGhlXG4gICAgLy8gZXh0cmEgcmV0aW5hIHNhbXBsZXMgYXJlIHdhc3RlZCBmaWxscmF0ZS5cbiAgICBjb25zdCBkcHIgPSBNYXRoLm1pbihkZXZpY2VQaXhlbFJhdGlvLCAxLjUpXG5cbiAgICBjb25zdCByZW5kZXIgPSAoKSA9PiB7XG4gICAgICBtYXQudW5pZm9ybXMudUNvbG9yLnZhbHVlID0gaGV4VG9WZWMzKGMuY29sb3IpXG4gICAgICBtYXQudW5pZm9ybXMudURlbnNpdHkudmFsdWUgPSBjLmRlbnNpdHlcbiAgICAgIG1hdC51bmlmb3Jtcy51T3BhY2l0eS52YWx1ZSA9IGMub3BhY2l0eVxuICAgICAgbWF0LnVuaWZvcm1zLnVTaXplLnZhbHVlID0gYy5zaXplXG4gICAgICBtYXQudW5pZm9ybXMudURwci52YWx1ZSA9IGRwclxuICAgICAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpXG4gICAgfVxuXG4gICAgY29uc3QgcmVzaXplID0gKCkgPT4ge1xuICAgICAgcmVuZGVyZXIuc2V0U2l6ZShpbm5lcldpZHRoLCBpbm5lckhlaWdodClcbiAgICAgIHJlbmRlcmVyLnNldFBpeGVsUmF0aW8oZHByKVxuICAgICAgbWF0LnVuaWZvcm1zLnVSZXMudmFsdWUuc2V0KGlubmVyV2lkdGggKiBkcHIsIGlubmVySGVpZ2h0ICogZHByKVxuICAgICAgcmVuZGVyKClcbiAgICB9XG5cbiAgICByZXNpemUoKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZXNpemUpXG5cbiAgICAvLyBSZS1yZW5kZXIgd2hlbiB0aGUgdGFiIGJlY29tZXMgdmlzaWJsZSBhZ2FpbiwgaW4gY2FzZSB0aGUgR0xcbiAgICAvLyBjb250ZXh0IHdhcyBkaXNjYXJkZWQgYnkgdGhlIGJyb3dzZXIgd2hpbGUgdGhlIHBhZ2Ugd2FzXG4gICAgLy8gYmFja2dyb3VuZGVkIFx1MjAxNCBvdGhlcndpc2Ugd2UgY2FuIGNvbWUgYmFjayB0byBhIHRyYW5zcGFyZW50IGNhbnZhcy5cbiAgICBjb25zdCBvblZpc2liaWxpdHkgPSAoKSA9PiB7XG4gICAgICBpZiAoIWRvY3VtZW50LmhpZGRlbikgcmVuZGVyKClcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25WaXNpYmlsaXR5KVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCByZXNpemUpXG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25WaXNpYmlsaXR5KVxuXG4gICAgICBtYXQuZGlzcG9zZSgpXG4gICAgICBnZW8uZGlzcG9zZSgpXG4gICAgICByZW5kZXJlci5kaXNwb3NlKClcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbXG4gICAgZW5hYmxlZCxcbiAgICBncHVUaWVyLFxuICAgIGMuY29sb3IsXG4gICAgYy5kZW5zaXR5LFxuICAgIGMub3BhY2l0eSxcbiAgICBjLnNpemVcbiAgXSlcblxuICBpZiAoIWVuYWJsZWQpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Y2FudmFzXG4gICAgICBjbGFzc05hbWU9e2NuKCdoLWZ1bGwgdy1mdWxsJywgY2xhc3NOYW1lKX1cbiAgICAgIHJlZj17Y2FudmFzUmVmfVxuICAgICAgc3R5bGU9e3sgbWl4QmxlbmRNb2RlOiBjLmJsZW5kLCAuLi5zdHlsZSB9fVxuICAgIC8+XG4gIClcbn1cblxuaW50ZXJmYWNlIE5vaXNlUHJvcHMge1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgc3R5bGU/OiBSZWFjdC5DU1NQcm9wZXJ0aWVzXG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBa0tJO0FBaEtKLFNBQVMsV0FBVyxjQUFjO0FBQ2xDLFlBQVksV0FBVztBQUV2QixTQUFTLFVBQVUsa0JBQWtCO0FBQ3JDLFNBQVMseUJBQXlCO0FBQ2xDLFNBQVMsSUFBSSxpQkFBaUI7QUFFOUIsU0FBUyxtQkFBbUI7QUFFNUIsTUFBTTtBQUFBO0FBQUEsRUFBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVF0QixNQUFNO0FBQUE7QUFBQSxFQUFnQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQmYsZ0JBQVMsTUFBTSxFQUFFLFdBQVcsTUFBTSxHQUFlO0FBQ3RELFFBQU0sVUFBVSxXQUFXO0FBRTNCLFFBQU0sSUFBSTtBQUFBLElBQ1I7QUFBQSxJQUNBO0FBQUEsTUFDRSxPQUFPLEVBQUUsU0FBUyxhQUFhLE9B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
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useSmoothControls } from "../../../hooks/use-smooth-controls.js";
|
|
4
|
+
import { cn } from "../../../utils/index.js";
|
|
5
|
+
import { hexToRgb } from "../../../utils/color.js";
|
|
6
|
+
import { BLEND_MODES } from "./blend-modes.js";
|
|
7
|
+
export function Vignette({ className, style }) {
|
|
8
|
+
const c = useSmoothControls(
|
|
9
|
+
"Effects/Vignette",
|
|
10
|
+
{
|
|
11
|
+
blend: { options: BLEND_MODES, value: "lighten" },
|
|
12
|
+
bottomLeft: { max: 1, min: 0, step: 0.01, value: 0 },
|
|
13
|
+
bottomRight: { max: 1, min: 0, step: 0.01, value: 0 },
|
|
14
|
+
color: { value: "#ffbd38" },
|
|
15
|
+
enabled: { value: true },
|
|
16
|
+
opacity: { max: 1, min: 0, step: 0.01, value: 0.22 },
|
|
17
|
+
size: { max: 1, min: 0, step: 0.01, value: 1 },
|
|
18
|
+
topLeft: { max: 1, min: 0, step: 0.01, value: 0.35 },
|
|
19
|
+
topRight: { max: 1, min: 0, step: 0.01, value: 0 }
|
|
20
|
+
},
|
|
21
|
+
{ collapsed: true }
|
|
22
|
+
);
|
|
23
|
+
if (!c.enabled) return null;
|
|
24
|
+
const rgb = hexToRgb(c.color);
|
|
25
|
+
const s = c.size * 60;
|
|
26
|
+
const grad = (x, y, i) => i > 0 && `radial-gradient(ellipse at ${x}% ${y}%, rgba(${rgb},0) ${s}%, rgba(${rgb},${i}) 100%)`;
|
|
27
|
+
const bg = [
|
|
28
|
+
grad(0, 0, c.topLeft),
|
|
29
|
+
grad(100, 0, c.topRight),
|
|
30
|
+
grad(0, 100, c.bottomLeft),
|
|
31
|
+
grad(100, 100, c.bottomRight)
|
|
32
|
+
].filter(Boolean);
|
|
33
|
+
if (!bg.length) return null;
|
|
34
|
+
return /* @__PURE__ */ jsx(
|
|
35
|
+
"div",
|
|
36
|
+
{
|
|
37
|
+
className: cn("h-full w-full", className),
|
|
38
|
+
style: {
|
|
39
|
+
background: bg.join(", "),
|
|
40
|
+
mixBlendMode: c.blend,
|
|
41
|
+
opacity: c.opacity,
|
|
42
|
+
...style
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IHVzZVNtb290aENvbnRyb2xzIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlLXNtb290aC1jb250cm9scydcbmltcG9ydCB7IGNuIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBoZXhUb1JnYiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvbG9yJ1xuXG5pbXBvcnQgeyBCTEVORF9NT0RFUyB9IGZyb20gJy4vYmxlbmQtbW9kZXMnXG5cbmV4cG9ydCBmdW5jdGlvbiBWaWduZXR0ZSh7IGNsYXNzTmFtZSwgc3R5bGUgfTogVmlnbmV0dGVQcm9wcykge1xuICBjb25zdCBjID0gdXNlU21vb3RoQ29udHJvbHMoXG4gICAgJ0VmZmVjdHMvVmlnbmV0dGUnLFxuICAgIHtcbiAgICAgIGJsZW5kOiB7IG9wdGlvbnM6IEJMRU5EX01PREVTLCB2YWx1ZTogJ2xpZ2h0ZW4nIGFzIGNvbnN0IH0sXG4gICAgICBib3R0b21MZWZ0OiB7IG1heDogMSwgbWluOiAwLCBzdGVwOiAwLjAxLCB2YWx1ZTogMCB9LFxuICAgICAgYm90dG9tUmlnaHQ6IHsgbWF4OiAxLCBtaW46IDAsIHN0ZXA6IDAuMDEsIHZhbHVlOiAwIH0sXG4gICAgICBjb2xvcjogeyB2YWx1ZTogJyNmZmJkMzgnIH0sXG4gICAgICBlbmFibGVkOiB7IHZhbHVlOiB0cnVlIH0sXG4gICAgICBvcGFjaXR5OiB7IG1heDogMSwgbWluOiAwLCBzdGVwOiAwLjAxLCB2YWx1ZTogMC4yMiB9LFxuICAgICAgc2l6ZTogeyBtYXg6IDEsIG1pbjogMCwgc3RlcDogMC4wMSwgdmFsdWU6IDEgfSxcbiAgICAgIHRvcExlZnQ6IHsgbWF4OiAxLCBtaW46IDAsIHN0ZXA6IDAuMDEsIHZhbHVlOiAwLjM1IH0sXG4gICAgICB0b3BSaWdodDogeyBtYXg6IDEsIG1pbjogMCwgc3RlcDogMC4wMSwgdmFsdWU6IDAgfVxuICAgIH0sXG4gICAgeyBjb2xsYXBzZWQ6IHRydWUgfVxuICApXG5cbiAgaWYgKCFjLmVuYWJsZWQpIHJldHVybiBudWxsXG5cbiAgY29uc3QgcmdiID0gaGV4VG9SZ2IoYy5jb2xvcilcbiAgY29uc3QgcyA9IGMuc2l6ZSAqIDYwXG5cbiAgY29uc3QgZ3JhZCA9ICh4OiBudW1iZXIsIHk6IG51bWJlciwgaTogbnVtYmVyKSA9PlxuICAgIGkgPiAwICYmXG4gICAgYHJhZGlhbC1ncmFkaWVudChlbGxpcHNlIGF0ICR7eH0lICR7eX0lLCByZ2JhKCR7cmdifSwwKSAke3N9JSwgcmdiYSgke3JnYn0sJHtpfSkgMTAwJSlgXG5cbiAgY29uc3QgYmcgPSBbXG4gICAgZ3JhZCgwLCAwLCBjLnRvcExlZnQpLFxuICAgIGdyYWQoMTAwLCAwLCBjLnRvcFJpZ2h0KSxcbiAgICBncmFkKDAsIDEwMCwgYy5ib3R0b21MZWZ0KSxcbiAgICBncmFkKDEwMCwgMTAwLCBjLmJvdHRvbVJpZ2h0KVxuICBdLmZpbHRlcihCb29sZWFuKVxuXG4gIGlmICghYmcubGVuZ3RoKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbignaC1mdWxsIHctZnVsbCcsIGNsYXNzTmFtZSl9XG4gICAgICBzdHlsZT17e1xuICAgICAgICBiYWNrZ3JvdW5kOiBiZy5qb2luKCcsICcpLFxuICAgICAgICBtaXhCbGVuZE1vZGU6IGMuYmxlbmQsXG4gICAgICAgIG9wYWNpdHk6IGMub3BhY2l0eSxcbiAgICAgICAgLi4uc3R5bGVcbiAgICAgIH19XG4gICAgLz5cbiAgKVxufVxuXG5pbnRlcmZhY2UgVmlnbmV0dGVQcm9wcyB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUE0Q0k7QUExQ0osU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxVQUFVO0FBQ25CLFNBQVMsZ0JBQWdCO0FBRXpCLFNBQVMsbUJBQW1CO0FBRXJCLGdCQUFTLFNBQVMsRUFBRSxXQUFXLE1BQU0sR0FBa0I7QUFDNUQsUUFBTSxJQUFJO0FBQUEsSUFDUjtBQUFBLElBQ0E7QUFBQSxNQUNFLE9BQU8sRUFBRSxTQUFTLGFBQWEsT0FBTyxVQUFtQjtBQUFBLE1BQ3pELFlBQVksRUFBRSxLQUFLLEdBQUcsS0FBSyxHQUFHLE1BQU0sTUFBTSxPQUFPLEVBQUU7QUFBQSxNQUNuRCxhQUFhLEVBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxNQUFNLE1BQU0sT0FBTyxFQUFFO0FBQUEsTUFDcEQsT0FBTyxFQUFFLE9BQU8sVUFBVTtBQUFBLE1BQzFCLFNBQVMsRUFBRSxPQUFPLEtBQUs7QUFBQSxNQUN2QixTQUFTLEVBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxNQUFNLE1BQU0sT0FBTyxLQUFLO0FBQUEsTUFDbkQsTUFBTSxFQUFFLEtBQUssR0FBRyxLQUFLLEdBQUcsTUFBTSxNQUFNLE9BQU8sRUFBRTtBQUFBLE1BQzdDLFNBQVMsRUFBRSxLQUFLLEdBQUcsS0FBSyxHQUFHLE1BQU0sTUFBTSxPQUFPLEtBQUs7QUFBQSxNQUNuRCxVQUFVLEVBQUUsS0FBSyxHQUFHLEtBQUssR0FBRyxNQUFNLE1BQU0sT0FBTyxFQUFFO0FBQUEsSUFDbkQ7QUFBQSxJQUNBLEVBQUUsV0FBVyxLQUFLO0FBQUEsRUFDcEI7QUFFQSxNQUFJLENBQUMsRUFBRSxRQUFTLFFBQU87QUFFdkIsUUFBTSxNQUFNLFNBQVMsRUFBRSxLQUFLO0FBQzVCLFFBQU0sSUFBSSxFQUFFLE9BQU87QUFFbkIsUUFBTSxPQUFPLENBQUMsR0FBVyxHQUFXLE1BQ2xDLElBQUksS0FDSiw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBRWhGLFFBQU0sS0FBSztBQUFBLElBQ1QsS0FBSyxHQUFHLEdBQUcsRUFBRSxPQUFPO0FBQUEsSUFDcEIsS0FBSyxLQUFLLEdBQUcsRUFBRSxRQUFRO0FBQUEsSUFDdkIsS0FBSyxHQUFHLEtBQUssRUFBRSxVQUFVO0FBQUEsSUFDekIsS0FBSyxLQUFLLEtBQUssRUFBRSxXQUFXO0FBQUEsRUFDOUIsRUFBRSxPQUFPLE9BQU87QUFFaEIsTUFBSSxDQUFDLEdBQUcsT0FBUSxRQUFPO0FBRXZCLFNBQ0U7QUFBQSxJQUFDO0FBQUE7QUFBQSxNQUNDLFdBQVcsR0FBRyxpQkFBaUIsU0FBUztBQUFBLE1BQ3hDLE9BQU87QUFBQSxRQUNMLFlBQVksR0FBRyxLQUFLLElBQUk7QUFBQSxRQUN4QixjQUFjLEVBQUU7QUFBQSxRQUNoQixTQUFTLEVBQUU7QUFBQSxRQUNYLEdBQUc7QUFBQSxNQUNMO0FBQUE7QUFBQSxFQUNGO0FBRUo7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { AutoPlayPattern } from './image-distortion';
|
|
2
|
+
/**
|
|
3
|
+
* Social-ready glitchy card built around the haptic-distortion image
|
|
4
|
+
* component. The poster runs the sword-guy distortion on an auto-animated
|
|
5
|
+
* slash pattern so it can be screen-recorded as a GIF without a human
|
|
6
|
+
* moving a cursor.
|
|
7
|
+
*
|
|
8
|
+
* Two variants, matching actual use cases:
|
|
9
|
+
* - `'vibe'` (default): full-bleed distorted image with just registration
|
|
10
|
+
* marks and a tiny "Hermes Agent" mark in the corner — mirrors the
|
|
11
|
+
* overlay on the Hermes agent website.
|
|
12
|
+
* - `'dispatch'`: broadcast-card layout with sidebar copy, numbered tags,
|
|
13
|
+
* and chrome — for when the poster needs to carry information.
|
|
14
|
+
*/
|
|
15
|
+
export declare function Poster({ aspect, autoPlay, body, border, channel, children, className, cornerMarks, eyebrow, headline, layout, scale, seal, signature, src, tags, tint, tintStrength, variant, ...rest }: PosterProps): import("react").JSX.Element;
|
|
16
|
+
export type PosterAspect = 'landscape' | 'portrait' | 'square' | 'story' | 'wide';
|
|
17
|
+
export type PosterVariant = 'dispatch' | 'vibe';
|
|
18
|
+
export interface PosterProps {
|
|
19
|
+
/** Output aspect ratio. Picks sensible defaults for common social formats. */
|
|
20
|
+
aspect?: PosterAspect;
|
|
21
|
+
/** Distortion choreography pattern. Default: `'slash'`. */
|
|
22
|
+
autoPlay?: AutoPlayPattern;
|
|
23
|
+
/** (`dispatch` only) Descriptive copy under the headline. */
|
|
24
|
+
body?: React.ReactNode;
|
|
25
|
+
/** Show the thin outer frame around the poster. Default `true`. */
|
|
26
|
+
border?: boolean;
|
|
27
|
+
/** Tiny broadcast-station label. Optional in `vibe`; shown in header in `dispatch`. */
|
|
28
|
+
channel?: React.ReactNode;
|
|
29
|
+
/** (`dispatch` only) Override the sidebar content (takes precedence over headline/body). */
|
|
30
|
+
children?: React.ReactNode;
|
|
31
|
+
className?: string;
|
|
32
|
+
/** Show the small `+` die-line registration marks in the image corners. Default `true`. */
|
|
33
|
+
cornerMarks?: boolean;
|
|
34
|
+
/** (`dispatch` only) Small tagline above the headline. */
|
|
35
|
+
eyebrow?: React.ReactNode;
|
|
36
|
+
/** (`dispatch` only) Big expanded-typography headline. Pass an array of strings to stack lines. */
|
|
37
|
+
headline?: string[] | string;
|
|
38
|
+
/** (`dispatch` only) Force stacked vs split layout. Default inferred from `aspect`. */
|
|
39
|
+
layout?: 'split' | 'stacked';
|
|
40
|
+
/** Render scale. 1 = full canvas (1080px+ base width). */
|
|
41
|
+
scale?: number;
|
|
42
|
+
/** (`dispatch` only) Small legal / signature line at the bottom-right. */
|
|
43
|
+
seal?: React.ReactNode;
|
|
44
|
+
/**
|
|
45
|
+
* Signature mark. In `vibe` this is the small "Hermes Agent" overlay in the
|
|
46
|
+
* bottom-right. In `dispatch` this is the URL / CTA in the footer.
|
|
47
|
+
*/
|
|
48
|
+
signature?: React.ReactNode;
|
|
49
|
+
/** Override the poster image. Defaults to the Hermes "filler-bg0" asset. */
|
|
50
|
+
src?: string;
|
|
51
|
+
/** (`dispatch` only) Ranked list of features / pricing tiers rendered as a numbered sidebar list. */
|
|
52
|
+
tags?: string[];
|
|
53
|
+
/** Shader tint overlay. Great for tier-colored variants. */
|
|
54
|
+
tint?: string;
|
|
55
|
+
/** Active / inactive tint strength — defaults match `ImageDistortion`. */
|
|
56
|
+
tintStrength?: {
|
|
57
|
+
active: number;
|
|
58
|
+
inactive: number;
|
|
59
|
+
};
|
|
60
|
+
/** Layout variant. `'vibe'` (default) is full-bleed image; `'dispatch'` is the broadcast-card with sidebar copy. */
|
|
61
|
+
variant?: PosterVariant;
|
|
62
|
+
}
|