@nastechai-research/ui 0.13.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,256 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useState } from "react";
|
|
4
|
+
import fillerBg from "../../assets/filler-bg0.webp";
|
|
5
|
+
import { cn } from "../../utils/index.js";
|
|
6
|
+
import { Blink } from "./blink.js";
|
|
7
|
+
import { ImageDistortion } from "./image-distortion.js";
|
|
8
|
+
import { Typography } from "./typography/index.js";
|
|
9
|
+
import { Small } from "./typography/small.js";
|
|
10
|
+
const ASPECT_CONFIG = {
|
|
11
|
+
landscape: { defaultLayout: "split", height: 1080, width: 1920 },
|
|
12
|
+
portrait: { defaultLayout: "split", height: 1350, width: 1080 },
|
|
13
|
+
square: { defaultLayout: "split", height: 1080, width: 1080 },
|
|
14
|
+
story: { defaultLayout: "stacked", height: 1920, width: 1080 },
|
|
15
|
+
wide: { defaultLayout: "split", height: 900, width: 1600 }
|
|
16
|
+
};
|
|
17
|
+
const DEFAULT_SRC = fillerBg.src ?? fillerBg;
|
|
18
|
+
function useUtcClock() {
|
|
19
|
+
const [now, setNow] = useState(null);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
setNow(/* @__PURE__ */ new Date());
|
|
22
|
+
const id = setInterval(() => setNow(/* @__PURE__ */ new Date()), 1e3);
|
|
23
|
+
return () => clearInterval(id);
|
|
24
|
+
}, []);
|
|
25
|
+
return now ? now.toISOString().slice(11, 19) : "--:--:--";
|
|
26
|
+
}
|
|
27
|
+
function CornerMark({ className }) {
|
|
28
|
+
return /* @__PURE__ */ jsxs(
|
|
29
|
+
"span",
|
|
30
|
+
{
|
|
31
|
+
"aria-hidden": true,
|
|
32
|
+
className: cn(
|
|
33
|
+
"pointer-events-none absolute block size-4 opacity-50",
|
|
34
|
+
className
|
|
35
|
+
),
|
|
36
|
+
children: [
|
|
37
|
+
/* @__PURE__ */ jsx("span", { className: "absolute top-1/2 left-0 h-px w-full -translate-y-1/2 bg-current" }),
|
|
38
|
+
/* @__PURE__ */ jsx("span", { className: "absolute top-0 left-1/2 h-full w-px -translate-x-1/2 bg-current" })
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
function ChannelDot() {
|
|
44
|
+
return /* @__PURE__ */ jsxs("span", { className: "flex items-center gap-1.5", children: [
|
|
45
|
+
/* @__PURE__ */ jsx("span", { className: "bg-midground size-1.5 animate-pulse rounded-full" }),
|
|
46
|
+
/* @__PURE__ */ jsx(Small, { className: "opacity-70", children: "REC" })
|
|
47
|
+
] });
|
|
48
|
+
}
|
|
49
|
+
function ScanlineOverlay() {
|
|
50
|
+
return /* @__PURE__ */ jsx(
|
|
51
|
+
"div",
|
|
52
|
+
{
|
|
53
|
+
"aria-hidden": true,
|
|
54
|
+
className: "pointer-events-none absolute inset-0 opacity-20 mix-blend-overlay",
|
|
55
|
+
style: {
|
|
56
|
+
backgroundImage: "repeating-linear-gradient(0deg, transparent 0, transparent 2px, rgba(255,255,255,0.08) 2px, rgba(255,255,255,0.08) 3px)"
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
export function Poster({
|
|
62
|
+
aspect = "square",
|
|
63
|
+
autoPlay = "slash",
|
|
64
|
+
body,
|
|
65
|
+
border = true,
|
|
66
|
+
channel,
|
|
67
|
+
children,
|
|
68
|
+
className,
|
|
69
|
+
cornerMarks = true,
|
|
70
|
+
eyebrow,
|
|
71
|
+
headline = ["An Agent", "That Grows", "With You."],
|
|
72
|
+
layout,
|
|
73
|
+
scale = 1,
|
|
74
|
+
seal = "MIT \xB7 2026",
|
|
75
|
+
signature,
|
|
76
|
+
src = DEFAULT_SRC,
|
|
77
|
+
tags,
|
|
78
|
+
tint,
|
|
79
|
+
tintStrength,
|
|
80
|
+
variant = "vibe",
|
|
81
|
+
...rest
|
|
82
|
+
}) {
|
|
83
|
+
const config = ASPECT_CONFIG[aspect];
|
|
84
|
+
const resolvedLayout = layout ?? config.defaultLayout;
|
|
85
|
+
const outerProps = {
|
|
86
|
+
// `text-midground` (not `text-foreground`) is the readable on-canvas
|
|
87
|
+
// color across every lens. `--foreground` is really the lens's inversion
|
|
88
|
+
// layer color: on dark lenses it has `fgOpacity: 0` and resolves to
|
|
89
|
+
// fully-transparent via `color-mix`, which would make text invisible.
|
|
90
|
+
// `--midground` always has opacity 1 and picks up each lens's accent.
|
|
91
|
+
className: cn(
|
|
92
|
+
"text-midground relative overflow-hidden font-sans",
|
|
93
|
+
border && "border border-current/25",
|
|
94
|
+
className
|
|
95
|
+
),
|
|
96
|
+
style: {
|
|
97
|
+
aspectRatio: `${config.width} / ${config.height}`,
|
|
98
|
+
background: "var(--background)",
|
|
99
|
+
containerType: "inline-size",
|
|
100
|
+
fontSize: `${16 / config.width * 100}cqi`,
|
|
101
|
+
maxHeight: "calc(100dvh - 8rem)",
|
|
102
|
+
maxWidth: "100%",
|
|
103
|
+
width: `${config.width * scale}px`
|
|
104
|
+
},
|
|
105
|
+
...rest
|
|
106
|
+
};
|
|
107
|
+
if (variant === "vibe") {
|
|
108
|
+
return /* @__PURE__ */ jsx("div", { ...outerProps, children: /* @__PURE__ */ jsx(
|
|
109
|
+
VibeContent,
|
|
110
|
+
{
|
|
111
|
+
autoPlay,
|
|
112
|
+
channel,
|
|
113
|
+
cornerMarks,
|
|
114
|
+
signature,
|
|
115
|
+
src,
|
|
116
|
+
tint,
|
|
117
|
+
tintStrength
|
|
118
|
+
}
|
|
119
|
+
) });
|
|
120
|
+
}
|
|
121
|
+
const headlineLines = Array.isArray(headline) ? headline : [headline];
|
|
122
|
+
return /* @__PURE__ */ jsxs("div", { ...outerProps, className: cn("flex flex-col", outerProps.className), children: [
|
|
123
|
+
/* @__PURE__ */ jsx(DispatchHeader, { channel }),
|
|
124
|
+
/* @__PURE__ */ jsxs(
|
|
125
|
+
"div",
|
|
126
|
+
{
|
|
127
|
+
className: cn(
|
|
128
|
+
"relative min-h-0 min-w-0 flex-1",
|
|
129
|
+
resolvedLayout === "split" ? "grid grid-cols-[3fr_2fr]" : "grid grid-rows-[3fr_2fr]"
|
|
130
|
+
),
|
|
131
|
+
children: [
|
|
132
|
+
/* @__PURE__ */ jsxs(
|
|
133
|
+
"div",
|
|
134
|
+
{
|
|
135
|
+
className: cn(
|
|
136
|
+
"relative overflow-hidden border-current/20",
|
|
137
|
+
resolvedLayout === "split" ? "border-r" : "border-b"
|
|
138
|
+
),
|
|
139
|
+
style: { backgroundColor: "var(--background)" },
|
|
140
|
+
children: [
|
|
141
|
+
/* @__PURE__ */ jsx(
|
|
142
|
+
ImageDistortion,
|
|
143
|
+
{
|
|
144
|
+
autoPlay,
|
|
145
|
+
src,
|
|
146
|
+
tint,
|
|
147
|
+
tintStrength
|
|
148
|
+
}
|
|
149
|
+
),
|
|
150
|
+
cornerMarks && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
151
|
+
/* @__PURE__ */ jsx(CornerMark, { className: "top-3 left-3" }),
|
|
152
|
+
/* @__PURE__ */ jsx(CornerMark, { className: "top-3 right-3" }),
|
|
153
|
+
/* @__PURE__ */ jsx(CornerMark, { className: "bottom-3 left-3" }),
|
|
154
|
+
/* @__PURE__ */ jsx(CornerMark, { className: "right-3 bottom-3" })
|
|
155
|
+
] }),
|
|
156
|
+
/* @__PURE__ */ jsx(ScanlineOverlay, {}),
|
|
157
|
+
/* @__PURE__ */ jsx(Small, { className: "absolute bottom-4 left-4 z-1 opacity-80", children: "Hermes Agent" })
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
),
|
|
161
|
+
/* @__PURE__ */ jsxs("aside", { className: "relative flex min-w-0 flex-col justify-between gap-8 p-8", children: [
|
|
162
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-5", children: [
|
|
163
|
+
eyebrow && /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
164
|
+
/* @__PURE__ */ jsx("span", { className: "bg-midground/80 h-px flex-1" }),
|
|
165
|
+
/* @__PURE__ */ jsx(Small, { className: "opacity-80", children: eyebrow })
|
|
166
|
+
] }),
|
|
167
|
+
children ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
168
|
+
/* @__PURE__ */ jsx(
|
|
169
|
+
Typography,
|
|
170
|
+
{
|
|
171
|
+
as: "h1",
|
|
172
|
+
className: "text-[2.75em] leading-[0.95] font-bold tracking-[-0.01em]",
|
|
173
|
+
expanded: true,
|
|
174
|
+
children: headlineLines.map((line, i) => /* @__PURE__ */ jsx("span", { className: "block", children: line }, `${line}-${i}`))
|
|
175
|
+
}
|
|
176
|
+
),
|
|
177
|
+
body && /* @__PURE__ */ jsx("p", { className: "text-[1.0625em] leading-[1.5] tracking-normal normal-case opacity-60", children: body })
|
|
178
|
+
] })
|
|
179
|
+
] }),
|
|
180
|
+
tags && tags.length > 0 && /* @__PURE__ */ jsx("ul", { className: "flex flex-col gap-2 border-t border-current/15 pt-4", children: tags.map((tag, i) => /* @__PURE__ */ jsxs(
|
|
181
|
+
"li",
|
|
182
|
+
{
|
|
183
|
+
className: "flex items-baseline justify-between gap-3",
|
|
184
|
+
children: [
|
|
185
|
+
/* @__PURE__ */ jsx(Small, { className: "font-courier opacity-40", children: String(i + 1).padStart(3, "0") }),
|
|
186
|
+
/* @__PURE__ */ jsx(Small, { className: "opacity-80", children: tag }),
|
|
187
|
+
/* @__PURE__ */ jsx("span", { className: "mx-1 h-px flex-1 translate-y-[-3px] border-b border-dotted border-current/25" }),
|
|
188
|
+
/* @__PURE__ */ jsxs(Small, { className: "font-courier opacity-40", children: [
|
|
189
|
+
String(i + 1).padStart(2, "0"),
|
|
190
|
+
"/",
|
|
191
|
+
String(tags.length).padStart(2, "0")
|
|
192
|
+
] })
|
|
193
|
+
]
|
|
194
|
+
},
|
|
195
|
+
`${tag}-${i}`
|
|
196
|
+
)) })
|
|
197
|
+
] })
|
|
198
|
+
]
|
|
199
|
+
}
|
|
200
|
+
),
|
|
201
|
+
/* @__PURE__ */ jsxs("footer", { className: "flex items-center justify-between gap-4 border-t border-current/20 px-6 py-3", children: [
|
|
202
|
+
/* @__PURE__ */ jsxs(Small, { className: "opacity-70", children: [
|
|
203
|
+
signature,
|
|
204
|
+
/* @__PURE__ */ jsx(Blink, {})
|
|
205
|
+
] }),
|
|
206
|
+
/* @__PURE__ */ jsx(Small, { className: "font-courier opacity-40", children: seal })
|
|
207
|
+
] })
|
|
208
|
+
] });
|
|
209
|
+
}
|
|
210
|
+
function DispatchHeader({ channel }) {
|
|
211
|
+
const clock = useUtcClock();
|
|
212
|
+
return /* @__PURE__ */ jsxs("header", { className: "flex items-center justify-between gap-4 border-b border-current/20 px-6 py-3", children: [
|
|
213
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
214
|
+
/* @__PURE__ */ jsx("span", { className: "bg-midground size-2 rounded-sm opacity-70" }),
|
|
215
|
+
/* @__PURE__ */ jsx(Small, { className: "opacity-70", children: channel })
|
|
216
|
+
] }),
|
|
217
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-4", children: [
|
|
218
|
+
/* @__PURE__ */ jsx(ChannelDot, {}),
|
|
219
|
+
/* @__PURE__ */ jsxs(Small, { className: "font-courier opacity-50", children: [
|
|
220
|
+
clock,
|
|
221
|
+
" UTC"
|
|
222
|
+
] })
|
|
223
|
+
] })
|
|
224
|
+
] });
|
|
225
|
+
}
|
|
226
|
+
function VibeContent({
|
|
227
|
+
autoPlay,
|
|
228
|
+
channel,
|
|
229
|
+
cornerMarks,
|
|
230
|
+
signature,
|
|
231
|
+
src,
|
|
232
|
+
tint,
|
|
233
|
+
tintStrength
|
|
234
|
+
}) {
|
|
235
|
+
return /* @__PURE__ */ jsxs("div", { className: "absolute inset-0", children: [
|
|
236
|
+
/* @__PURE__ */ jsx(
|
|
237
|
+
ImageDistortion,
|
|
238
|
+
{
|
|
239
|
+
autoPlay,
|
|
240
|
+
src,
|
|
241
|
+
tint,
|
|
242
|
+
tintStrength
|
|
243
|
+
}
|
|
244
|
+
),
|
|
245
|
+
cornerMarks && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
246
|
+
/* @__PURE__ */ jsx(CornerMark, { className: "top-5 left-5" }),
|
|
247
|
+
/* @__PURE__ */ jsx(CornerMark, { className: "top-5 right-5" }),
|
|
248
|
+
/* @__PURE__ */ jsx(CornerMark, { className: "bottom-5 left-5" }),
|
|
249
|
+
/* @__PURE__ */ jsx(CornerMark, { className: "right-5 bottom-5" })
|
|
250
|
+
] }),
|
|
251
|
+
/* @__PURE__ */ jsx(ScanlineOverlay, {}),
|
|
252
|
+
channel && /* @__PURE__ */ jsx(Small, { className: "absolute top-5 left-10 z-1 text-[0.75em] opacity-70", children: channel }),
|
|
253
|
+
/* @__PURE__ */ jsx(Small, { className: "absolute right-10 bottom-5 z-1 text-[0.75em] opacity-80", children: signature })
|
|
254
|
+
] });
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IGZpbGxlckJnIGZyb20gJy4uLy4uL2Fzc2V0cy9maWxsZXItYmcwLndlYnAnXG5pbXBvcnQgeyBjbiB9IGZyb20gJy4uLy4uL3V0aWxzJ1xuXG5pbXBvcnQgeyBCbGluayB9IGZyb20gJy4vYmxpbmsnXG5pbXBvcnQgeyBJbWFnZURpc3RvcnRpb24gfSBmcm9tICcuL2ltYWdlLWRpc3RvcnRpb24nXG5pbXBvcnQgeyBUeXBvZ3JhcGh5IH0gZnJvbSAnLi90eXBvZ3JhcGh5J1xuaW1wb3J0IHsgU21hbGwgfSBmcm9tICcuL3R5cG9ncmFwaHkvc21hbGwnXG5cbmltcG9ydCB0eXBlIHsgQXV0b1BsYXlQYXR0ZXJuIH0gZnJvbSAnLi9pbWFnZS1kaXN0b3J0aW9uJ1xuXG5jb25zdCBBU1BFQ1RfQ09ORklHOiBSZWNvcmQ8XG4gIFBvc3RlckFzcGVjdCxcbiAgeyBkZWZhdWx0TGF5b3V0OiAnc3BsaXQnIHwgJ3N0YWNrZWQnOyBoZWlnaHQ6IG51bWJlcjsgd2lkdGg6IG51bWJlciB9XG4+ID0ge1xuICBsYW5kc2NhcGU6IHsgZGVmYXVsdExheW91dDogJ3NwbGl0JywgaGVpZ2h0OiAxMDgwLCB3aWR0aDogMTkyMCB9LFxuICBwb3J0cmFpdDogeyBkZWZhdWx0TGF5b3V0OiAnc3BsaXQnLCBoZWlnaHQ6IDEzNTAsIHdpZHRoOiAxMDgwIH0sXG4gIHNxdWFyZTogeyBkZWZhdWx0TGF5b3V0OiAnc3BsaXQnLCBoZWlnaHQ6IDEwODAsIHdpZHRoOiAxMDgwIH0sXG4gIHN0b3J5OiB7IGRlZmF1bHRMYXlvdXQ6ICdzdGFja2VkJywgaGVpZ2h0OiAxOTIwLCB3aWR0aDogMTA4MCB9LFxuICB3aWRlOiB7IGRlZmF1bHRMYXlvdXQ6ICdzcGxpdCcsIGhlaWdodDogOTAwLCB3aWR0aDogMTYwMCB9XG59XG5cbmNvbnN0IERFRkFVTFRfU1JDID1cbiAgKGZpbGxlckJnIGFzIHsgc3JjPzogc3RyaW5nIH0pLnNyYyA/PyAoZmlsbGVyQmcgYXMgdW5rbm93biBhcyBzdHJpbmcpXG5cbmZ1bmN0aW9uIHVzZVV0Y0Nsb2NrKCkge1xuICBjb25zdCBbbm93LCBzZXROb3ddID0gdXNlU3RhdGU8RGF0ZSB8IG51bGw+KG51bGwpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXROb3cobmV3IERhdGUoKSlcbiAgICBjb25zdCBpZCA9IHNldEludGVydmFsKCgpID0+IHNldE5vdyhuZXcgRGF0ZSgpKSwgMTAwMClcblxuICAgIHJldHVybiAoKSA9PiBjbGVhckludGVydmFsKGlkKVxuICB9LCBbXSlcblxuICByZXR1cm4gbm93ID8gbm93LnRvSVNPU3RyaW5nKCkuc2xpY2UoMTEsIDE5KSA6ICctLTotLTotLSdcbn1cblxuZnVuY3Rpb24gQ29ybmVyTWFyayh7IGNsYXNzTmFtZSB9OiB7IGNsYXNzTmFtZT86IHN0cmluZyB9KSB7XG4gIHJldHVybiAoXG4gICAgPHNwYW5cbiAgICAgIGFyaWEtaGlkZGVuXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAncG9pbnRlci1ldmVudHMtbm9uZSBhYnNvbHV0ZSBibG9jayBzaXplLTQgb3BhY2l0eS01MCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMS8yIGxlZnQtMCBoLXB4IHctZnVsbCAtdHJhbnNsYXRlLXktMS8yIGJnLWN1cnJlbnRcIiAvPlxuXG4gICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTEvMiBoLWZ1bGwgdy1weCAtdHJhbnNsYXRlLXgtMS8yIGJnLWN1cnJlbnRcIiAvPlxuICAgIDwvc3Bhbj5cbiAgKVxufVxuXG5mdW5jdGlvbiBDaGFubmVsRG90KCkge1xuICByZXR1cm4gKFxuICAgIDxzcGFuIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xLjVcIj5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJnLW1pZGdyb3VuZCBzaXplLTEuNSBhbmltYXRlLXB1bHNlIHJvdW5kZWQtZnVsbFwiIC8+XG5cbiAgICAgIDxTbWFsbCBjbGFzc05hbWU9XCJvcGFjaXR5LTcwXCI+UkVDPC9TbWFsbD5cbiAgICA8L3NwYW4+XG4gIClcbn1cblxuZnVuY3Rpb24gU2NhbmxpbmVPdmVybGF5KCkge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGFyaWEtaGlkZGVuXG4gICAgICBjbGFzc05hbWU9XCJwb2ludGVyLWV2ZW50cy1ub25lIGFic29sdXRlIGluc2V0LTAgb3BhY2l0eS0yMCBtaXgtYmxlbmQtb3ZlcmxheVwiXG4gICAgICBzdHlsZT17e1xuICAgICAgICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgICAgICAgJ3JlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoMGRlZywgdHJhbnNwYXJlbnQgMCwgdHJhbnNwYXJlbnQgMnB4LCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpIDJweCwgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KSAzcHgpJ1xuICAgICAgfX1cbiAgICAvPlxuICApXG59XG5cbi8qKlxuICogU29jaWFsLXJlYWR5IGdsaXRjaHkgY2FyZCBidWlsdCBhcm91bmQgdGhlIGhhcHRpYy1kaXN0b3J0aW9uIGltYWdlXG4gKiBjb21wb25lbnQuIFRoZSBwb3N0ZXIgcnVucyB0aGUgc3dvcmQtZ3V5IGRpc3RvcnRpb24gb24gYW4gYXV0by1hbmltYXRlZFxuICogc2xhc2ggcGF0dGVybiBzbyBpdCBjYW4gYmUgc2NyZWVuLXJlY29yZGVkIGFzIGEgR0lGIHdpdGhvdXQgYSBodW1hblxuICogbW92aW5nIGEgY3Vyc29yLlxuICpcbiAqIFR3byB2YXJpYW50cywgbWF0Y2hpbmcgYWN0dWFsIHVzZSBjYXNlczpcbiAqIC0gYCd2aWJlJ2AgKGRlZmF1bHQpOiBmdWxsLWJsZWVkIGRpc3RvcnRlZCBpbWFnZSB3aXRoIGp1c3QgcmVnaXN0cmF0aW9uXG4gKiAgIG1hcmtzIGFuZCBhIHRpbnkgXCJIZXJtZXMgQWdlbnRcIiBtYXJrIGluIHRoZSBjb3JuZXIgXHUyMDE0IG1pcnJvcnMgdGhlXG4gKiAgIG92ZXJsYXkgb24gdGhlIEhlcm1lcyBhZ2VudCB3ZWJzaXRlLlxuICogLSBgJ2Rpc3BhdGNoJ2A6IGJyb2FkY2FzdC1jYXJkIGxheW91dCB3aXRoIHNpZGViYXIgY29weSwgbnVtYmVyZWQgdGFncyxcbiAqICAgYW5kIGNocm9tZSBcdTIwMTQgZm9yIHdoZW4gdGhlIHBvc3RlciBuZWVkcyB0byBjYXJyeSBpbmZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFBvc3Rlcih7XG4gIGFzcGVjdCA9ICdzcXVhcmUnLFxuICBhdXRvUGxheSA9ICdzbGFzaCcsXG4gIGJvZHksXG4gIGJvcmRlciA9IHRydWUsXG4gIGNoYW5uZWwsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGNvcm5lck1hcmtzID0gdHJ1ZSxcbiAgZXllYnJvdyxcbiAgaGVhZGxpbmUgPSBbJ0FuIEFnZW50JywgJ1RoYXQgR3Jvd3MnLCAnV2l0aCBZb3UuJ10sXG4gIGxheW91dCxcbiAgc2NhbGUgPSAxLFxuICBzZWFsID0gJ01JVCBcdTAwQjcgMjAyNicsXG4gIHNpZ25hdHVyZSxcbiAgc3JjID0gREVGQVVMVF9TUkMsXG4gIHRhZ3MsXG4gIHRpbnQsXG4gIHRpbnRTdHJlbmd0aCxcbiAgdmFyaWFudCA9ICd2aWJlJyxcbiAgLi4ucmVzdFxufTogUG9zdGVyUHJvcHMpIHtcbiAgY29uc3QgY29uZmlnID0gQVNQRUNUX0NPTkZJR1thc3BlY3RdXG4gIGNvbnN0IHJlc29sdmVkTGF5b3V0ID0gbGF5b3V0ID8/IGNvbmZpZy5kZWZhdWx0TGF5b3V0XG5cbiAgLy8gVXNlIGFzcGVjdC1yYXRpbyArIG1heC13aWR0aC9oZWlnaHQgc28gdGhlIHBvc3RlciBmbHVpZGx5IGZpdHMgYW55IHBhcmVudFxuICAvLyAoc3Rvcnlib29rIGlmcmFtZSwgYSB0d2VldCBwcmV2aWV3LCBhbiBlbWJlZCkgd2l0aG91dCBnZXR0aW5nIGNsaXBwZWQsXG4gIC8vIGJ1dCBjYXBzIGF0IHRoZSBpbnRlbmRlZCBleHBvcnQgd2lkdGggZm9yIHNjcmVlbi1yZWNvcmRpbmcuIGBtYXhIZWlnaHRgXG4gIC8vIHVzZXMgYW4gYWJzb2x1dGUgYGR2aGAtYmFzZWQgdmFsdWUgcmF0aGVyIHRoYW4gYCVgIGJlY2F1c2UgYCVgIGluc2lkZSBhXG4gIC8vIGZsZXggY29udGFpbmVyIGNhbiBjYXVzZSB0aGUgYnJvd3NlciB0byBjbGFtcCBoZWlnaHQgd2l0aG91dCByZS1ydW5uaW5nXG4gIC8vIGFzcGVjdC1yYXRpbyBvbiB3aWR0aCwgcHJvZHVjaW5nIGEgc3VidGx5IHdyb25nIHNoYXBlLiBBbiBhYnNvbHV0ZSBjYXBcbiAgLy8gbGVhdmVzIGFzcGVjdC1yYXRpbyBmdWxseSBpbiBjaGFyZ2U6IG9uY2UgdGhlIGhlaWdodCBiaW5kcywgd2lkdGggaXNcbiAgLy8gcmUtZGVyaXZlZCBjb3JyZWN0bHkuIGBjYWxjKDEwMGR2aCAtIDhyZW0pYCA9IHZpZXdwb3J0IG1pbnVzIGEgdHlwaWNhbFxuICAvLyBob3N0J3MgdmVydGljYWwgcGFkZGluZyAoZS5nLiBTdG9yeWJvb2sncyBgcC04YCA9IDRyZW0gb24gZWFjaCBzaWRlKSxcbiAgLy8gc28gdGhlIHBvc3RlciArIHBhZGRpbmcgZml0IHdpdGhpbiB0aGUgdmlld3BvcnQgd2l0aG91dCBldmVyIHByb2R1Y2luZ1xuICAvLyBzY3JvbGxiYXJzLiBDb250YWluZXIgcXVlcmllcyB0aWUgYWxsIGludGVybmFsIHR5cG9ncmFwaHkgdG8gdGhlXG4gIC8vIGFjdHVhbCByZW5kZXJlZCB3aWR0aCBzbyBoZWFkbGluZS9tZXRhZGF0YSBzY2FsZXMgYWxvbmcgd2l0aCB0aGUgY2FudmFzLlxuICBjb25zdCBvdXRlclByb3BzID0ge1xuICAgIC8vIGB0ZXh0LW1pZGdyb3VuZGAgKG5vdCBgdGV4dC1mb3JlZ3JvdW5kYCkgaXMgdGhlIHJlYWRhYmxlIG9uLWNhbnZhc1xuICAgIC8vIGNvbG9yIGFjcm9zcyBldmVyeSBsZW5zLiBgLS1mb3JlZ3JvdW5kYCBpcyByZWFsbHkgdGhlIGxlbnMncyBpbnZlcnNpb25cbiAgICAvLyBsYXllciBjb2xvcjogb24gZGFyayBsZW5zZXMgaXQgaGFzIGBmZ09wYWNpdHk6IDBgIGFuZCByZXNvbHZlcyB0b1xuICAgIC8vIGZ1bGx5LXRyYW5zcGFyZW50IHZpYSBgY29sb3ItbWl4YCwgd2hpY2ggd291bGQgbWFrZSB0ZXh0IGludmlzaWJsZS5cbiAgICAvLyBgLS1taWRncm91bmRgIGFsd2F5cyBoYXMgb3BhY2l0eSAxIGFuZCBwaWNrcyB1cCBlYWNoIGxlbnMncyBhY2NlbnQuXG4gICAgY2xhc3NOYW1lOiBjbihcbiAgICAgICd0ZXh0LW1pZGdyb3VuZCByZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW4gZm9udC1zYW5zJyxcbiAgICAgIGJvcmRlciAmJiAnYm9yZGVyIGJvcmRlci1jdXJyZW50LzI1JyxcbiAgICAgIGNsYXNzTmFtZVxuICAgICksXG4gICAgc3R5bGU6IHtcbiAgICAgIGFzcGVjdFJhdGlvOiBgJHtjb25maWcud2lkdGh9IC8gJHtjb25maWcuaGVpZ2h0fWAsXG4gICAgICBiYWNrZ3JvdW5kOiAndmFyKC0tYmFja2dyb3VuZCknLFxuICAgICAgY29udGFpbmVyVHlwZTogJ2lubGluZS1zaXplJyBhcyBjb25zdCxcbiAgICAgIGZvbnRTaXplOiBgJHsoMTYgLyBjb25maWcud2lkdGgpICogMTAwfWNxaWAsXG4gICAgICBtYXhIZWlnaHQ6ICdjYWxjKDEwMGR2aCAtIDhyZW0pJyxcbiAgICAgIG1heFdpZHRoOiAnMTAwJScsXG4gICAgICB3aWR0aDogYCR7Y29uZmlnLndpZHRoICogc2NhbGV9cHhgXG4gICAgfSxcbiAgICAuLi5yZXN0XG4gIH1cblxuICBpZiAodmFyaWFudCA9PT0gJ3ZpYmUnKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgey4uLm91dGVyUHJvcHN9PlxuICAgICAgICA8VmliZUNvbnRlbnRcbiAgICAgICAgICBhdXRvUGxheT17YXV0b1BsYXl9XG4gICAgICAgICAgY2hhbm5lbD17Y2hhbm5lbH1cbiAgICAgICAgICBjb3JuZXJNYXJrcz17Y29ybmVyTWFya3N9XG4gICAgICAgICAgc2lnbmF0dXJlPXtzaWduYXR1cmV9XG4gICAgICAgICAgc3JjPXtzcmN9XG4gICAgICAgICAgdGludD17dGludH1cbiAgICAgICAgICB0aW50U3RyZW5ndGg9e3RpbnRTdHJlbmd0aH1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGhlYWRsaW5lTGluZXMgPSBBcnJheS5pc0FycmF5KGhlYWRsaW5lKSA/IGhlYWRsaW5lIDogW2hlYWRsaW5lXVxuXG4gIHJldHVybiAoXG4gICAgPGRpdiB7Li4ub3V0ZXJQcm9wc30gY2xhc3NOYW1lPXtjbignZmxleCBmbGV4LWNvbCcsIG91dGVyUHJvcHMuY2xhc3NOYW1lKX0+XG4gICAgICA8RGlzcGF0Y2hIZWFkZXIgY2hhbm5lbD17Y2hhbm5lbH0gLz5cblxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdyZWxhdGl2ZSBtaW4taC0wIG1pbi13LTAgZmxleC0xJyxcbiAgICAgICAgICByZXNvbHZlZExheW91dCA9PT0gJ3NwbGl0J1xuICAgICAgICAgICAgPyAnZ3JpZCBncmlkLWNvbHMtWzNmcl8yZnJdJ1xuICAgICAgICAgICAgOiAnZ3JpZCBncmlkLXJvd3MtWzNmcl8yZnJdJ1xuICAgICAgICApfVxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICdyZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyLWN1cnJlbnQvMjAnLFxuICAgICAgICAgICAgcmVzb2x2ZWRMYXlvdXQgPT09ICdzcGxpdCcgPyAnYm9yZGVyLXInIDogJ2JvcmRlci1iJ1xuICAgICAgICAgICl9XG4gICAgICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiAndmFyKC0tYmFja2dyb3VuZCknIH19XG4gICAgICAgID5cbiAgICAgICAgICA8SW1hZ2VEaXN0b3J0aW9uXG4gICAgICAgICAgICBhdXRvUGxheT17YXV0b1BsYXl9XG4gICAgICAgICAgICBzcmM9e3NyY31cbiAgICAgICAgICAgIHRpbnQ9e3RpbnR9XG4gICAgICAgICAgICB0aW50U3RyZW5ndGg9e3RpbnRTdHJlbmd0aH1cbiAgICAgICAgICAvPlxuXG4gICAgICAgICAge2Nvcm5lck1hcmtzICYmIChcbiAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgIDxDb3JuZXJNYXJrIGNsYXNzTmFtZT1cInRvcC0zIGxlZnQtM1wiIC8+XG4gICAgICAgICAgICAgIDxDb3JuZXJNYXJrIGNsYXNzTmFtZT1cInRvcC0zIHJpZ2h0LTNcIiAvPlxuICAgICAgICAgICAgICA8Q29ybmVyTWFyayBjbGFzc05hbWU9XCJib3R0b20tMyBsZWZ0LTNcIiAvPlxuICAgICAgICAgICAgICA8Q29ybmVyTWFyayBjbGFzc05hbWU9XCJyaWdodC0zIGJvdHRvbS0zXCIgLz5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG5cbiAgICAgICAgICA8U2NhbmxpbmVPdmVybGF5IC8+XG5cbiAgICAgICAgICA8U21hbGwgY2xhc3NOYW1lPVwiYWJzb2x1dGUgYm90dG9tLTQgbGVmdC00IHotMSBvcGFjaXR5LTgwXCI+XG4gICAgICAgICAgICBIZXJtZXMgQWdlbnRcbiAgICAgICAgICA8L1NtYWxsPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8YXNpZGUgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleCBtaW4tdy0wIGZsZXgtY29sIGp1c3RpZnktYmV0d2VlbiBnYXAtOCBwLThcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2wgZ2FwLTVcIj5cbiAgICAgICAgICAgIHtleWVicm93ICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJnLW1pZGdyb3VuZC84MCBoLXB4IGZsZXgtMVwiIC8+XG5cbiAgICAgICAgICAgICAgICA8U21hbGwgY2xhc3NOYW1lPVwib3BhY2l0eS04MFwiPntleWVicm93fTwvU21hbGw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cblxuICAgICAgICAgICAge2NoaWxkcmVuID8/IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8VHlwb2dyYXBoeVxuICAgICAgICAgICAgICAgICAgYXM9XCJoMVwiXG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ0ZXh0LVsyLjc1ZW1dIGxlYWRpbmctWzAuOTVdIGZvbnQtYm9sZCB0cmFja2luZy1bLTAuMDFlbV1cIlxuICAgICAgICAgICAgICAgICAgZXhwYW5kZWRcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7aGVhZGxpbmVMaW5lcy5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiYmxvY2tcIiBrZXk9e2Ake2xpbmV9LSR7aX1gfT5cbiAgICAgICAgICAgICAgICAgICAgICB7bGluZX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9UeXBvZ3JhcGh5PlxuXG4gICAgICAgICAgICAgICAge2JvZHkgJiYgKFxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPVwidGV4dC1bMS4wNjI1ZW1dIGxlYWRpbmctWzEuNV0gdHJhY2tpbmctbm9ybWFsIG5vcm1hbC1jYXNlIG9wYWNpdHktNjBcIj5cbiAgICAgICAgICAgICAgICAgICAge2JvZHl9XG4gICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAge3RhZ3MgJiYgdGFncy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJmbGV4IGZsZXgtY29sIGdhcC0yIGJvcmRlci10IGJvcmRlci1jdXJyZW50LzE1IHB0LTRcIj5cbiAgICAgICAgICAgICAge3RhZ3MubWFwKCh0YWcsIGkpID0+IChcbiAgICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtYmFzZWxpbmUganVzdGlmeS1iZXR3ZWVuIGdhcC0zXCJcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7dGFnfS0ke2l9YH1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8U21hbGwgY2xhc3NOYW1lPVwiZm9udC1jb3VyaWVyIG9wYWNpdHktNDBcIj5cbiAgICAgICAgICAgICAgICAgICAge1N0cmluZyhpICsgMSkucGFkU3RhcnQoMywgJzAnKX1cbiAgICAgICAgICAgICAgICAgIDwvU21hbGw+XG5cbiAgICAgICAgICAgICAgICAgIDxTbWFsbCBjbGFzc05hbWU9XCJvcGFjaXR5LTgwXCI+e3RhZ308L1NtYWxsPlxuXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJteC0xIGgtcHggZmxleC0xIHRyYW5zbGF0ZS15LVstM3B4XSBib3JkZXItYiBib3JkZXItZG90dGVkIGJvcmRlci1jdXJyZW50LzI1XCIgLz5cblxuICAgICAgICAgICAgICAgICAgPFNtYWxsIGNsYXNzTmFtZT1cImZvbnQtY291cmllciBvcGFjaXR5LTQwXCI+XG4gICAgICAgICAgICAgICAgICAgIHtTdHJpbmcoaSArIDEpLnBhZFN0YXJ0KDIsICcwJyl9L1xuICAgICAgICAgICAgICAgICAgICB7U3RyaW5nKHRhZ3MubGVuZ3RoKS5wYWRTdGFydCgyLCAnMCcpfVxuICAgICAgICAgICAgICAgICAgPC9TbWFsbD5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9hc2lkZT5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8Zm9vdGVyIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBnYXAtNCBib3JkZXItdCBib3JkZXItY3VycmVudC8yMCBweC02IHB5LTNcIj5cbiAgICAgICAgPFNtYWxsIGNsYXNzTmFtZT1cIm9wYWNpdHktNzBcIj5cbiAgICAgICAgICB7c2lnbmF0dXJlfVxuXG4gICAgICAgICAgPEJsaW5rIC8+XG4gICAgICAgIDwvU21hbGw+XG5cbiAgICAgICAgPFNtYWxsIGNsYXNzTmFtZT1cImZvbnQtY291cmllciBvcGFjaXR5LTQwXCI+e3NlYWx9PC9TbWFsbD5cbiAgICAgIDwvZm9vdGVyPlxuICAgIDwvZGl2PlxuICApXG59XG5cbmZ1bmN0aW9uIERpc3BhdGNoSGVhZGVyKHsgY2hhbm5lbCB9OiB7IGNoYW5uZWw6IFJlYWN0LlJlYWN0Tm9kZSB9KSB7XG4gIGNvbnN0IGNsb2NrID0gdXNlVXRjQ2xvY2soKVxuXG4gIHJldHVybiAoXG4gICAgPGhlYWRlciBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gZ2FwLTQgYm9yZGVyLWIgYm9yZGVyLWN1cnJlbnQvMjAgcHgtNiBweS0zXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImJnLW1pZGdyb3VuZCBzaXplLTIgcm91bmRlZC1zbSBvcGFjaXR5LTcwXCIgLz5cblxuICAgICAgICA8U21hbGwgY2xhc3NOYW1lPVwib3BhY2l0eS03MFwiPntjaGFubmVsfTwvU21hbGw+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICA8Q2hhbm5lbERvdCAvPlxuXG4gICAgICAgIDxTbWFsbCBjbGFzc05hbWU9XCJmb250LWNvdXJpZXIgb3BhY2l0eS01MFwiPntjbG9ja30gVVRDPC9TbWFsbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvaGVhZGVyPlxuICApXG59XG5cbmludGVyZmFjZSBWaWJlQ29udGVudFByb3BzIHtcbiAgYXV0b1BsYXk6IEF1dG9QbGF5UGF0dGVyblxuICBjaGFubmVsOiBSZWFjdC5SZWFjdE5vZGVcbiAgY29ybmVyTWFya3M6IGJvb2xlYW5cbiAgc2lnbmF0dXJlOiBSZWFjdC5SZWFjdE5vZGVcbiAgc3JjOiBzdHJpbmdcbiAgdGludD86IHN0cmluZ1xuICB0aW50U3RyZW5ndGg/OiB7IGFjdGl2ZTogbnVtYmVyOyBpbmFjdGl2ZTogbnVtYmVyIH1cbn1cblxuZnVuY3Rpb24gVmliZUNvbnRlbnQoe1xuICBhdXRvUGxheSxcbiAgY2hhbm5lbCxcbiAgY29ybmVyTWFya3MsXG4gIHNpZ25hdHVyZSxcbiAgc3JjLFxuICB0aW50LFxuICB0aW50U3RyZW5ndGhcbn06IFZpYmVDb250ZW50UHJvcHMpIHtcbiAgLy8gQWJzb2x1dGUtaW5zZXQtMCBndWFyYW50ZWVzIHRoaXMgZmlsbHMgdGhlIHBvc3RlciBldmVuIHdoZW4gdGhlIG91dGVyXG4gIC8vIGNvbnRhaW5lciB1c2VzIGFzcGVjdC1yYXRpby1kZXJpdmVkIGhlaWdodCBpbiBhIGJyb3dzZXIgdGhhdCBkb2Vzbid0XG4gIC8vIHByb3BhZ2F0ZSB0aGF0IGFzIGEgZGVmaW5pdGUgaGVpZ2h0IGZvciBwZXJjZW50YWdlLWJhc2VkIGNoaWxkcmVuLlxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiYWJzb2x1dGUgaW5zZXQtMFwiPlxuICAgICAgPEltYWdlRGlzdG9ydGlvblxuICAgICAgICBhdXRvUGxheT17YXV0b1BsYXl9XG4gICAgICAgIHNyYz17c3JjfVxuICAgICAgICB0aW50PXt0aW50fVxuICAgICAgICB0aW50U3RyZW5ndGg9e3RpbnRTdHJlbmd0aH1cbiAgICAgIC8+XG5cbiAgICAgIHtjb3JuZXJNYXJrcyAmJiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgPENvcm5lck1hcmsgY2xhc3NOYW1lPVwidG9wLTUgbGVmdC01XCIgLz5cbiAgICAgICAgICA8Q29ybmVyTWFyayBjbGFzc05hbWU9XCJ0b3AtNSByaWdodC01XCIgLz5cbiAgICAgICAgICA8Q29ybmVyTWFyayBjbGFzc05hbWU9XCJib3R0b20tNSBsZWZ0LTVcIiAvPlxuICAgICAgICAgIDxDb3JuZXJNYXJrIGNsYXNzTmFtZT1cInJpZ2h0LTUgYm90dG9tLTVcIiAvPlxuICAgICAgICA8Lz5cbiAgICAgICl9XG5cbiAgICAgIDxTY2FubGluZU92ZXJsYXkgLz5cblxuICAgICAge2NoYW5uZWwgJiYgKFxuICAgICAgICA8U21hbGwgY2xhc3NOYW1lPVwiYWJzb2x1dGUgdG9wLTUgbGVmdC0xMCB6LTEgdGV4dC1bMC43NWVtXSBvcGFjaXR5LTcwXCI+XG4gICAgICAgICAge2NoYW5uZWx9XG4gICAgICAgIDwvU21hbGw+XG4gICAgICApfVxuXG4gICAgICA8U21hbGwgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMTAgYm90dG9tLTUgei0xIHRleHQtWzAuNzVlbV0gb3BhY2l0eS04MFwiPlxuICAgICAgICB7c2lnbmF0dXJlfVxuICAgICAgPC9TbWFsbD5cbiAgICA8L2Rpdj5cbiAgKVxufVxuXG5leHBvcnQgdHlwZSBQb3N0ZXJBc3BlY3QgPVxuICB8ICdsYW5kc2NhcGUnXG4gIHwgJ3BvcnRyYWl0J1xuICB8ICdzcXVhcmUnXG4gIHwgJ3N0b3J5J1xuICB8ICd3aWRlJ1xuXG5leHBvcnQgdHlwZSBQb3N0ZXJWYXJpYW50ID0gJ2Rpc3BhdGNoJyB8ICd2aWJlJ1xuXG5leHBvcnQgaW50ZXJmYWNlIFBvc3RlclByb3BzIHtcbiAgLyoqIE91dHB1dCBhc3BlY3QgcmF0aW8uIFBpY2tzIHNlbnNpYmxlIGRlZmF1bHRzIGZvciBjb21tb24gc29jaWFsIGZvcm1hdHMuICovXG4gIGFzcGVjdD86IFBvc3RlckFzcGVjdFxuICAvKiogRGlzdG9ydGlvbiBjaG9yZW9ncmFwaHkgcGF0dGVybi4gRGVmYXVsdDogYCdzbGFzaCdgLiAqL1xuICBhdXRvUGxheT86IEF1dG9QbGF5UGF0dGVyblxuICAvKiogKGBkaXNwYXRjaGAgb25seSkgRGVzY3JpcHRpdmUgY29weSB1bmRlciB0aGUgaGVhZGxpbmUuICovXG4gIGJvZHk/OiBSZWFjdC5SZWFjdE5vZGVcbiAgLyoqIFNob3cgdGhlIHRoaW4gb3V0ZXIgZnJhbWUgYXJvdW5kIHRoZSBwb3N0ZXIuIERlZmF1bHQgYHRydWVgLiAqL1xuICBib3JkZXI/OiBib29sZWFuXG4gIC8qKiBUaW55IGJyb2FkY2FzdC1zdGF0aW9uIGxhYmVsLiBPcHRpb25hbCBpbiBgdmliZWA7IHNob3duIGluIGhlYWRlciBpbiBgZGlzcGF0Y2hgLiAqL1xuICBjaGFubmVsPzogUmVhY3QuUmVhY3ROb2RlXG4gIC8qKiAoYGRpc3BhdGNoYCBvbmx5KSBPdmVycmlkZSB0aGUgc2lkZWJhciBjb250ZW50ICh0YWtlcyBwcmVjZWRlbmNlIG92ZXIgaGVhZGxpbmUvYm9keSkuICovXG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKiogU2hvdyB0aGUgc21hbGwgYCtgIGRpZS1saW5lIHJlZ2lzdHJhdGlvbiBtYXJrcyBpbiB0aGUgaW1hZ2UgY29ybmVycy4gRGVmYXVsdCBgdHJ1ZWAuICovXG4gIGNvcm5lck1hcmtzPzogYm9vbGVhblxuICAvKiogKGBkaXNwYXRjaGAgb25seSkgU21hbGwgdGFnbGluZSBhYm92ZSB0aGUgaGVhZGxpbmUuICovXG4gIGV5ZWJyb3c/OiBSZWFjdC5SZWFjdE5vZGVcbiAgLyoqIChgZGlzcGF0Y2hgIG9ubHkpIEJpZyBleHBhbmRlZC10eXBvZ3JhcGh5IGhlYWRsaW5lLiBQYXNzIGFuIGFycmF5IG9mIHN0cmluZ3MgdG8gc3RhY2sgbGluZXMuICovXG4gIGhlYWRsaW5lPzogc3RyaW5nW10gfCBzdHJpbmdcbiAgLyoqIChgZGlzcGF0Y2hgIG9ubHkpIEZvcmNlIHN0YWNrZWQgdnMgc3BsaXQgbGF5b3V0LiBEZWZhdWx0IGluZmVycmVkIGZyb20gYGFzcGVjdGAuICovXG4gIGxheW91dD86ICdzcGxpdCcgfCAnc3RhY2tlZCdcbiAgLyoqIFJlbmRlciBzY2FsZS4gMSA9IGZ1bGwgY2FudmFzICgxMDgwcHgrIGJhc2Ugd2lkdGgpLiAqL1xuICBzY2FsZT86IG51bWJlclxuICAvKiogKGBkaXNwYXRjaGAgb25seSkgU21hbGwgbGVnYWwgLyBzaWduYXR1cmUgbGluZSBhdCB0aGUgYm90dG9tLXJpZ2h0LiAqL1xuICBzZWFsPzogUmVhY3QuUmVhY3ROb2RlXG4gIC8qKlxuICAgKiBTaWduYXR1cmUgbWFyay4gSW4gYHZpYmVgIHRoaXMgaXMgdGhlIHNtYWxsIFwiSGVybWVzIEFnZW50XCIgb3ZlcmxheSBpbiB0aGVcbiAgICogYm90dG9tLXJpZ2h0LiBJbiBgZGlzcGF0Y2hgIHRoaXMgaXMgdGhlIFVSTCAvIENUQSBpbiB0aGUgZm9vdGVyLlxuICAgKi9cbiAgc2lnbmF0dXJlPzogUmVhY3QuUmVhY3ROb2RlXG4gIC8qKiBPdmVycmlkZSB0aGUgcG9zdGVyIGltYWdlLiBEZWZhdWx0cyB0byB0aGUgSGVybWVzIFwiZmlsbGVyLWJnMFwiIGFzc2V0LiAqL1xuICBzcmM/OiBzdHJpbmdcbiAgLyoqIChgZGlzcGF0Y2hgIG9ubHkpIFJhbmtlZCBsaXN0IG9mIGZlYXR1cmVzIC8gcHJpY2luZyB0aWVycyByZW5kZXJlZCBhcyBhIG51bWJlcmVkIHNpZGViYXIgbGlzdC4gKi9cbiAgdGFncz86IHN0cmluZ1tdXG4gIC8qKiBTaGFkZXIgdGludCBvdmVybGF5LiBHcmVhdCBmb3IgdGllci1jb2xvcmVkIHZhcmlhbnRzLiAqL1xuICB0aW50Pzogc3RyaW5nXG4gIC8qKiBBY3RpdmUgLyBpbmFjdGl2ZSB0aW50IHN0cmVuZ3RoIFx1MjAxNCBkZWZhdWx0cyBtYXRjaCBgSW1hZ2VEaXN0b3J0aW9uYC4gKi9cbiAgdGludFN0cmVuZ3RoPzogeyBhY3RpdmU6IG51bWJlcjsgaW5hY3RpdmU6IG51bWJlciB9XG4gIC8qKiBMYXlvdXQgdmFyaWFudC4gYCd2aWJlJ2AgKGRlZmF1bHQpIGlzIGZ1bGwtYmxlZWQgaW1hZ2U7IGAnZGlzcGF0Y2gnYCBpcyB0aGUgYnJvYWRjYXN0LWNhcmQgd2l0aCBzaWRlYmFyIGNvcHkuICovXG4gIHZhcmlhbnQ/OiBQb3N0ZXJWYXJpYW50XG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBMkNJLFNBMkpRLFVBcEpOLEtBUEY7QUF6Q0osU0FBUyxXQUFXLGdCQUFnQjtBQUVwQyxPQUFPLGNBQWM7QUFDckIsU0FBUyxVQUFVO0FBRW5CLFNBQVMsYUFBYTtBQUN0QixTQUFTLHVCQUF1QjtBQUNoQyxTQUFTLGtCQUFrQjtBQUMzQixTQUFTLGFBQWE7QUFJdEIsTUFBTSxnQkFHRjtBQUFBLEVBQ0YsV0FBVyxFQUFFLGVBQWUsU0FBUyxRQUFRLE1BQU0sT0FBTyxLQUFLO0FBQUEsRUFDL0QsVUFBVSxFQUFFLGVBQWUsU0FBUyxRQUFRLE1BQU0sT0FBTyxLQUFLO0FBQUEsRUFDOUQsUUFBUSxFQUFFLGVBQWUsU0FBUyxRQUFRLE1BQU0sT0FBTyxLQUFLO0FBQUEsRUFDNUQsT0FBTyxFQUFFLGVBQWUsV0FBVyxRQUFRLE1BQU0sT0FBTyxLQUFLO0FBQUEsRUFDN0QsTUFBTSxFQUFFLGVBQWUsU0FBUyxRQUFRLEtBQUssT0FBTyxLQUFLO0FBQzNEO0FBRUEsTUFBTSxjQUNILFNBQThCLE9BQVE7QUFFekMsU0FBUyxjQUFjO0FBQ3JCLFFBQU0sQ0FBQyxLQUFLLE1BQU0sSUFBSSxTQUFzQixJQUFJO0FBRWhELFlBQVUsTUFBTTtBQUNkLFdBQU8sb0JBQUksS0FBSyxDQUFDO0FBQ2pCLFVBQU0sS0FBSyxZQUFZLE1BQU0sT0FBTyxvQkFBSSxLQUFLLENBQUMsR0FBRyxHQUFJO0FBRXJELFdBQU8sTUFBTSxjQUFjLEVBQUU7QUFBQSxF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
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type TypographyProps } from './typography';
|
|
2
|
+
export declare const Progress: ({ animate, barProps, children, className, speed, value, ...props }: ProgressProps) => import("react").JSX.Element;
|
|
3
|
+
interface ProgressProps extends React.ComponentProps<'div'> {
|
|
4
|
+
animate?: boolean;
|
|
5
|
+
barProps?: TypographyProps<'span'>;
|
|
6
|
+
speed?: number;
|
|
7
|
+
value: number;
|
|
8
|
+
}
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../utils/index.js";
|
|
3
|
+
import { Typography } from "./typography/index.js";
|
|
4
|
+
export const Progress = ({
|
|
5
|
+
animate = true,
|
|
6
|
+
barProps,
|
|
7
|
+
children,
|
|
8
|
+
className,
|
|
9
|
+
speed = 0.4,
|
|
10
|
+
value,
|
|
11
|
+
...props
|
|
12
|
+
}) => /* @__PURE__ */ jsxs(
|
|
13
|
+
"div",
|
|
14
|
+
{
|
|
15
|
+
className: cn(
|
|
16
|
+
"relative flex min-h-[2.3rem] min-w-0 flex-1 items-stretch overflow-hidden",
|
|
17
|
+
className
|
|
18
|
+
),
|
|
19
|
+
...props,
|
|
20
|
+
children: [
|
|
21
|
+
/* @__PURE__ */ jsx(
|
|
22
|
+
Typography,
|
|
23
|
+
{
|
|
24
|
+
...barProps,
|
|
25
|
+
className: cn(
|
|
26
|
+
"shrink-0 translate-y-0.5 truncate py-2",
|
|
27
|
+
"bg-midground/20",
|
|
28
|
+
children ? "px-2" : "px-0",
|
|
29
|
+
barProps?.className
|
|
30
|
+
),
|
|
31
|
+
mono: true,
|
|
32
|
+
style: {
|
|
33
|
+
...animate && { transition: `width ${speed}s steps(10, end)` },
|
|
34
|
+
width: `${value}%`,
|
|
35
|
+
...barProps?.style
|
|
36
|
+
},
|
|
37
|
+
children
|
|
38
|
+
}
|
|
39
|
+
),
|
|
40
|
+
/* @__PURE__ */ jsx(
|
|
41
|
+
"div",
|
|
42
|
+
{
|
|
43
|
+
className: "flex-1",
|
|
44
|
+
style: {
|
|
45
|
+
"--x": ".5rem",
|
|
46
|
+
backgroundImage: `repeating-linear-gradient(to right, transparent 0 var(--x), color-mix(in srgb, var(--color-midground) 17%, transparent) var(--x) calc(var(--x) + 1px))`
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
)
|
|
50
|
+
]
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi91dGlscydcblxuaW1wb3J0IHsgVHlwb2dyYXBoeSwgdHlwZSBUeXBvZ3JhcGh5UHJvcHMgfSBmcm9tICcuL3R5cG9ncmFwaHknXG5cbmV4cG9ydCBjb25zdCBQcm9ncmVzcyA9ICh7XG4gIGFuaW1hdGUgPSB0cnVlLFxuICBiYXJQcm9wcyxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc3BlZWQgPSAwLjQsXG4gIHZhbHVlLFxuICAuLi5wcm9wc1xufTogUHJvZ3Jlc3NQcm9wcykgPT4gKFxuICA8ZGl2XG4gICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICdyZWxhdGl2ZSBmbGV4IG1pbi1oLVsyLjNyZW1dIG1pbi13LTAgZmxleC0xIGl0ZW1zLXN0cmV0Y2ggb3ZlcmZsb3ctaGlkZGVuJyxcbiAgICAgIGNsYXNzTmFtZVxuICAgICl9XG4gICAgey4uLnByb3BzfVxuICA+XG4gICAgPFR5cG9ncmFwaHlcbiAgICAgIHsuLi5iYXJQcm9wc31cbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICdzaHJpbmstMCB0cmFuc2xhdGUteS0wLjUgdHJ1bmNhdGUgcHktMicsXG4gICAgICAgICdiZy1taWRncm91bmQvMjAnLFxuICAgICAgICBjaGlsZHJlbiA/ICdweC0yJyA6ICdweC0wJyxcbiAgICAgICAgYmFyUHJvcHM/LmNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIG1vbm9cbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIC4uLihhbmltYXRlICYmIHsgdHJhbnNpdGlvbjogYHdpZHRoICR7c3BlZWR9cyBzdGVwcygxMCwgZW5kKWAgfSksXG4gICAgICAgIHdpZHRoOiBgJHt2YWx1ZX0lYCxcbiAgICAgICAgLi4uYmFyUHJvcHM/LnN0eWxlXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1R5cG9ncmFwaHk+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9XCJmbGV4LTFcIlxuICAgICAgc3R5bGU9e1xuICAgICAgICB7XG4gICAgICAgICAgJy0teCc6ICcuNXJlbScsXG4gICAgICAgICAgYmFja2dyb3VuZEltYWdlOiBgcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQgMCB2YXIoLS14KSwgY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvbG9yLW1pZGdyb3VuZCkgMTclLCB0cmFuc3BhcmVudCkgdmFyKC0teCkgY2FsYyh2YXIoLS14KSArIDFweCkpYFxuICAgICAgICB9IGFzIFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgICAgIH1cbiAgICAvPlxuICA8L2Rpdj5cbilcblxuaW50ZXJmYWNlIFByb2dyZXNzUHJvcHMgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnRQcm9wczwnZGl2Jz4ge1xuICBhbmltYXRlPzogYm9vbGVhblxuICBiYXJQcm9wcz86IFR5cG9ncmFwaHlQcm9wczwnc3Bhbic+XG4gIHNwZWVkPzogbnVtYmVyXG4gIHZhbHVlOiBudW1iZXJcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQWFFLFNBT0UsS0FQRjtBQWJGLFNBQVMsVUFBVTtBQUVuQixTQUFTLGtCQUF3QztBQUUxQyxhQUFNLFdBQVcsQ0FBQztBQUFBLEVBQ3ZCLFVBQVU7QUFBQSxFQUNWO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBLFFBQVE7QUFBQSxFQUNSO0FBQUEsRUFDQSxHQUFHO0FBQ0wsTUFDRTtBQUFBLEVBQUM7QUFBQTtBQUFBLElBQ0MsV0FBVztBQUFBLE1BQ1Q7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBLElBQ0MsR0FBRztBQUFBLElBRUo7QUFBQTtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0UsR0FBRztBQUFBLFVBQ0osV0FBVztBQUFBLFlBQ1Q7QUFBQSxZQUNBO0FBQUEsWUFDQSxXQUFXLFNBQVM7QUFBQSxZQUNwQixVQUFVO0FBQUEsVUFDWjtBQUFBLFVBQ0EsTUFBSTtBQUFBLFVBQ0osT0FBTztBQUFBLFlBQ0wsR0FBSSxXQUFXLEVBQUUsWUFBWSxTQUFTLEtBQUssbUJBQW1CO0FBQUEsWUFDOUQsT0FBTyxHQUFHLEtBQUs7QUFBQSxZQUNmLEdBQUcsVUFBVTtBQUFBLFVBQ2Y7QUFBQSxVQUVDO0FBQUE7QUFBQSxNQUNIO0FBQUEsTUFFQTtBQUFBLFFBQUM7QUFBQTtBQUFBLFVBQ0MsV0FBVTtBQUFBLFVBQ1YsT0FDRTtBQUFBLFlBQ0UsT0FBTztBQUFBLFlBQ1AsaUJBQWlCO0FBQUEsVUFDbkI7QUFBQTtBQUFBLE1BRUo7QUFBQTtBQUFBO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export declare function SceneCanvas({ camera, children, className, contained, frameloop, noEvents, style }: SceneCanvasProps): import("react").JSX.Element;
|
|
2
|
+
interface SceneCanvasProps {
|
|
3
|
+
camera?: {
|
|
4
|
+
far?: number;
|
|
5
|
+
near?: number;
|
|
6
|
+
position?: [number, number, number];
|
|
7
|
+
zoom?: number;
|
|
8
|
+
};
|
|
9
|
+
children: () => React.ReactNode;
|
|
10
|
+
className?: string;
|
|
11
|
+
contained?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* R3F frame-loop mode. Defaults to `'always'` for backwards
|
|
14
|
+
* compatibility, but `'demand'` is strongly preferred for static
|
|
15
|
+
* scenes (use `invalidate()` from `useThree` to request frames). The
|
|
16
|
+
* canvas additionally pauses (forces `'never'`) while the document
|
|
17
|
+
* is hidden, regardless of this setting.
|
|
18
|
+
*/
|
|
19
|
+
frameloop?: 'always' | 'demand' | 'never';
|
|
20
|
+
noEvents?: boolean;
|
|
21
|
+
style?: React.CSSProperties;
|
|
22
|
+
}
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Canvas, useFrame, useThree } from "@react-three/fiber";
|
|
4
|
+
import {
|
|
5
|
+
Suspense,
|
|
6
|
+
useEffect,
|
|
7
|
+
useLayoutEffect,
|
|
8
|
+
useMemo,
|
|
9
|
+
useRef,
|
|
10
|
+
useState
|
|
11
|
+
} from "react";
|
|
12
|
+
import * as THREE from "three";
|
|
13
|
+
const GL = {
|
|
14
|
+
alpha: true,
|
|
15
|
+
antialias: true,
|
|
16
|
+
depth: true,
|
|
17
|
+
outputColorSpace: "srgb",
|
|
18
|
+
powerPreference: "high-performance",
|
|
19
|
+
stencil: false
|
|
20
|
+
};
|
|
21
|
+
const tmp = {
|
|
22
|
+
camDir: new THREE.Vector3(),
|
|
23
|
+
hit: new THREE.Vector3(),
|
|
24
|
+
ndc: new THREE.Vector2(),
|
|
25
|
+
origin: new THREE.Vector3(0, 0, 0),
|
|
26
|
+
plane: new THREE.Plane(),
|
|
27
|
+
ray: new THREE.Raycaster()
|
|
28
|
+
};
|
|
29
|
+
function useBounds(target) {
|
|
30
|
+
const bounds = useRef(null);
|
|
31
|
+
useLayoutEffect(() => {
|
|
32
|
+
if (!target) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const measure = () => {
|
|
36
|
+
const b = target.getBoundingClientRect();
|
|
37
|
+
bounds.current = {
|
|
38
|
+
height: b.height,
|
|
39
|
+
pageX: b.left + window.scrollX,
|
|
40
|
+
pageY: b.top + window.scrollY,
|
|
41
|
+
width: b.width
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
measure();
|
|
45
|
+
const ro = new ResizeObserver(measure);
|
|
46
|
+
ro.observe(target);
|
|
47
|
+
ro.observe(document.body);
|
|
48
|
+
window.addEventListener("resize", measure, { passive: true });
|
|
49
|
+
return () => {
|
|
50
|
+
ro.disconnect();
|
|
51
|
+
window.removeEventListener("resize", measure);
|
|
52
|
+
};
|
|
53
|
+
}, [target]);
|
|
54
|
+
return bounds;
|
|
55
|
+
}
|
|
56
|
+
function PositionedGroup({
|
|
57
|
+
baseZoom,
|
|
58
|
+
bounds,
|
|
59
|
+
children
|
|
60
|
+
}) {
|
|
61
|
+
const ref = useRef(null);
|
|
62
|
+
const { camera, size, viewport } = useThree();
|
|
63
|
+
useFrame(() => {
|
|
64
|
+
const g = ref.current;
|
|
65
|
+
const b = bounds.current;
|
|
66
|
+
if (!g || !b) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const left = b.pageX - window.scrollX;
|
|
70
|
+
const top = b.pageY - window.scrollY;
|
|
71
|
+
tmp.ndc.set(
|
|
72
|
+
(left + b.width / 2) / size.width * 2 - 1,
|
|
73
|
+
1 - (top + b.height / 2) / size.height * 2
|
|
74
|
+
);
|
|
75
|
+
camera.getWorldDirection(tmp.camDir);
|
|
76
|
+
tmp.plane.setFromNormalAndCoplanarPoint(tmp.camDir, tmp.origin);
|
|
77
|
+
tmp.ray.setFromCamera(tmp.ndc, camera);
|
|
78
|
+
const hit = tmp.ray.ray.intersectPlane(tmp.plane, tmp.hit);
|
|
79
|
+
if (hit) {
|
|
80
|
+
g.position.copy(hit);
|
|
81
|
+
}
|
|
82
|
+
const zoom = camera.zoom ?? 1;
|
|
83
|
+
g.scale.setScalar(
|
|
84
|
+
Math.min(
|
|
85
|
+
b.width / size.width * viewport.width,
|
|
86
|
+
b.height / size.height * viewport.height
|
|
87
|
+
) * (baseZoom > 0 ? zoom / baseZoom : 1)
|
|
88
|
+
);
|
|
89
|
+
});
|
|
90
|
+
return /* @__PURE__ */ jsx("group", { ref, children });
|
|
91
|
+
}
|
|
92
|
+
export function SceneCanvas({
|
|
93
|
+
camera,
|
|
94
|
+
children,
|
|
95
|
+
className,
|
|
96
|
+
contained,
|
|
97
|
+
frameloop = "always",
|
|
98
|
+
noEvents,
|
|
99
|
+
style
|
|
100
|
+
}) {
|
|
101
|
+
const [container, setContainer] = useState(null);
|
|
102
|
+
const baseZoom = camera?.zoom ?? 150;
|
|
103
|
+
const bounds = useBounds(
|
|
104
|
+
contained ? container?.parentElement ?? null : null
|
|
105
|
+
);
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
const el = contained && !noEvents ? container : null;
|
|
108
|
+
if (!el) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const lock = () => document.body.style.userSelect = "none";
|
|
112
|
+
const unlock = () => document.body.style.userSelect = "";
|
|
113
|
+
el.addEventListener("pointerdown", lock);
|
|
114
|
+
window.addEventListener("pointerup", unlock);
|
|
115
|
+
return () => {
|
|
116
|
+
el.removeEventListener("pointerdown", lock);
|
|
117
|
+
window.removeEventListener("pointerup", unlock);
|
|
118
|
+
};
|
|
119
|
+
}, [container, contained, noEvents]);
|
|
120
|
+
const [pageHidden, setPageHidden] = useState(
|
|
121
|
+
typeof document !== "undefined" && document.hidden
|
|
122
|
+
);
|
|
123
|
+
useEffect(() => {
|
|
124
|
+
const onVisibility = () => setPageHidden(document.hidden);
|
|
125
|
+
document.addEventListener("visibilitychange", onVisibility);
|
|
126
|
+
return () => document.removeEventListener("visibilitychange", onVisibility);
|
|
127
|
+
}, []);
|
|
128
|
+
const effectiveFrameloop = pageHidden ? "never" : frameloop;
|
|
129
|
+
const cam = useMemo(
|
|
130
|
+
() => ({
|
|
131
|
+
far: camera?.far ?? 100,
|
|
132
|
+
near: camera?.near ?? -100,
|
|
133
|
+
position: camera?.position ?? [0, 0, 10],
|
|
134
|
+
zoom: baseZoom * (contained ? 1 : 2)
|
|
135
|
+
}),
|
|
136
|
+
[baseZoom, camera, contained]
|
|
137
|
+
);
|
|
138
|
+
const canvas = /* @__PURE__ */ jsx(
|
|
139
|
+
Canvas,
|
|
140
|
+
{
|
|
141
|
+
camera: cam,
|
|
142
|
+
className,
|
|
143
|
+
dpr: [1, 2],
|
|
144
|
+
eventPrefix: contained ? "client" : "offset",
|
|
145
|
+
eventSource: contained ? container ?? void 0 : void 0,
|
|
146
|
+
frameloop: effectiveFrameloop,
|
|
147
|
+
gl: GL,
|
|
148
|
+
orthographic: true,
|
|
149
|
+
style: contained ? {
|
|
150
|
+
height: "100dvh",
|
|
151
|
+
inset: 0,
|
|
152
|
+
pointerEvents: "none",
|
|
153
|
+
position: "fixed",
|
|
154
|
+
width: "100dvw",
|
|
155
|
+
zIndex: 0,
|
|
156
|
+
...style
|
|
157
|
+
} : { height: "100%", width: "100%", ...style },
|
|
158
|
+
children: contained ? /* @__PURE__ */ jsx(PositionedGroup, { baseZoom, bounds, children: children() }) : children()
|
|
159
|
+
}
|
|
160
|
+
);
|
|
161
|
+
return contained ? /* @__PURE__ */ jsxs(Suspense, { children: [
|
|
162
|
+
/* @__PURE__ */ jsx(
|
|
163
|
+
"div",
|
|
164
|
+
{
|
|
165
|
+
ref: setContainer,
|
|
166
|
+
style: {
|
|
167
|
+
height: "100%",
|
|
168
|
+
inset: 0,
|
|
169
|
+
pointerEvents: noEvents ? "none" : "auto",
|
|
170
|
+
position: "absolute",
|
|
171
|
+
width: "100%",
|
|
172
|
+
zIndex: 1
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
),
|
|
176
|
+
canvas
|
|
177
|
+
] }) : canvas;
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IENhbnZhcywgdXNlRnJhbWUsIHVzZVRocmVlIH0gZnJvbSAnQHJlYWN0LXRocmVlL2ZpYmVyJ1xuaW1wb3J0IHtcbiAgU3VzcGVuc2UsXG4gIHVzZUVmZmVjdCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnXG5cbmNvbnN0IEdMID0ge1xuICBhbHBoYTogdHJ1ZSxcbiAgYW50aWFsaWFzOiB0cnVlLFxuICBkZXB0aDogdHJ1ZSxcbiAgb3V0cHV0Q29sb3JTcGFjZTogJ3NyZ2InLFxuICBwb3dlclByZWZlcmVuY2U6ICdoaWdoLXBlcmZvcm1hbmNlJyxcbiAgc3RlbmNpbDogZmFsc2Vcbn0gYXMgY29uc3RcblxuY29uc3QgdG1wID0ge1xuICBjYW1EaXI6IG5ldyBUSFJFRS5WZWN0b3IzKCksXG4gIGhpdDogbmV3IFRIUkVFLlZlY3RvcjMoKSxcbiAgbmRjOiBuZXcgVEhSRUUuVmVjdG9yMigpLFxuICBvcmlnaW46IG5ldyBUSFJFRS5WZWN0b3IzKDAsIDAsIDApLFxuICBwbGFuZTogbmV3IFRIUkVFLlBsYW5lKCksXG4gIHJheTogbmV3IFRIUkVFLlJheWNhc3RlcigpXG59XG5cbnR5cGUgQm91bmRzID0geyBoZWlnaHQ6IG51bWJlcjsgcGFnZVg6IG51bWJlcjsgcGFnZVk6IG51bWJlcjsgd2lkdGg6IG51bWJlciB9XG5cbmZ1bmN0aW9uIHVzZUJvdW5kcyh0YXJnZXQ6IEhUTUxFbGVtZW50IHwgbnVsbCkge1xuICBjb25zdCBib3VuZHMgPSB1c2VSZWY8Qm91bmRzIHwgbnVsbD4obnVsbClcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBtZWFzdXJlID0gKCkgPT4ge1xuICAgICAgY29uc3QgYiA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgYm91bmRzLmN1cnJlbnQgPSB7XG4gICAgICAgIGhlaWdodDogYi5oZWlnaHQsXG4gICAgICAgIHBhZ2VYOiBiLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWCxcbiAgICAgICAgcGFnZVk6IGIudG9wICsgd2luZG93LnNjcm9sbFksXG4gICAgICAgIHdpZHRoOiBiLndpZHRoXG4gICAgICB9XG4gICAgfVxuXG4gICAgbWVhc3VyZSgpXG5cbiAgICBjb25zdCBybyA9IG5ldyBSZXNpemVPYnNlcnZlcihtZWFzdXJlKVxuICAgIHJvLm9ic2VydmUodGFyZ2V0KVxuICAgIHJvLm9ic2VydmUoZG9jdW1lbnQuYm9keSlcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgbWVhc3VyZSwgeyBwYXNzaXZlOiB0cnVlIH0pXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcm8uZGlzY29ubmVjdCgpXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgbWVhc3VyZSlcbiAgICB9XG4gIH0sIFt0YXJnZXRdKVxuXG4gIHJldHVybiBib3VuZHNcbn1cblxuZnVuY3Rpb24gUG9zaXRpb25lZEdyb3VwKHtcbiAgYmFzZVpvb20sXG4gIGJvdW5kcyxcbiAgY2hpbGRyZW5cbn06IFJlYWN0LlByb3BzV2l0aENoaWxkcmVuPHtcbiAgYmFzZVpvb206IG51bWJlclxuICBib3VuZHM6IFJlYWN0LlJlZk9iamVjdDxCb3VuZHMgfCBudWxsPlxufT4pIHtcbiAgY29uc3QgcmVmID0gdXNlUmVmPFRIUkVFLkdyb3VwPihudWxsKVxuICBjb25zdCB7IGNhbWVyYSwgc2l6ZSwgdmlld3BvcnQgfSA9IHVzZVRocmVlKClcblxuICB1c2VGcmFtZSgoKSA9PiB7XG4gICAgY29uc3QgZyA9IHJlZi5jdXJyZW50XG4gICAgY29uc3QgYiA9IGJvdW5kcy5jdXJyZW50XG5cbiAgICBpZiAoIWcgfHwgIWIpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGxlZnQgPSBiLnBhZ2VYIC0gd2luZG93LnNjcm9sbFhcbiAgICBjb25zdCB0b3AgPSBiLnBhZ2VZIC0gd2luZG93LnNjcm9sbFlcblxuICAgIHRtcC5uZGMuc2V0KFxuICAgICAgKChsZWZ0ICsgYi53aWR0aCAvIDIpIC8gc2l6ZS53aWR0aCkgKiAyIC0gMSxcbiAgICAgIDEgLSAoKHRvcCArIGIuaGVpZ2h0IC8gMikgLyBzaXplLmhlaWdodCkgKiAyXG4gICAgKVxuXG4gICAgY2FtZXJhLmdldFdvcmxkRGlyZWN0aW9uKHRtcC5jYW1EaXIpXG4gICAgdG1wLnBsYW5lLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHRtcC5jYW1EaXIsIHRtcC5vcmlnaW4pXG4gICAgdG1wLnJheS5zZXRGcm9tQ2FtZXJhKHRtcC5uZGMsIGNhbWVyYSlcblxuICAgIGNvbnN0IGhpdCA9IHRtcC5yYXkucmF5LmludGVyc2VjdFBsYW5lKHRtcC5wbGFuZSwgdG1wLmhpdClcblxuICAgIGlmIChoaXQpIHtcbiAgICAgIGcucG9zaXRpb24uY29weShoaXQpXG4gICAgfVxuXG4gICAgY29uc3Qgem9vbSA9IChjYW1lcmEgYXMgVEhSRUUuQ2FtZXJhICYgeyB6b29tPzogbnVtYmVyIH0pLnpvb20gPz8gMVxuXG4gICAgZy5zY2FsZS5zZXRTY2FsYXIoXG4gICAgICBNYXRoLm1pbihcbiAgICAgICAgKGIud2lkdGggLyBzaXplLndpZHRoKSAqIHZpZXdwb3J0LndpZHRoLFxuICAgICAgICAoYi5oZWlnaHQgLyBzaXplLmhlaWdodCkgKiB2aWV3cG9ydC5oZWlnaHRcbiAgICAgICkgKiAoYmFzZVpvb20gPiAwID8gem9vbSAvIGJhc2Vab29tIDogMSlcbiAgICApXG4gIH0pXG5cbiAgcmV0dXJuIDxncm91cCByZWY9e3JlZn0+e2NoaWxkcmVufTwvZ3JvdXA+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBTY2VuZUNhbnZhcyh7XG4gIGNhbWVyYSxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgY29udGFpbmVkLFxuICBmcmFtZWxvb3AgPSAnYWx3YXlzJyxcbiAgbm9FdmVudHMsXG4gIHN0eWxlXG59OiBTY2VuZUNhbnZhc1Byb3BzKSB7XG4gIGNvbnN0IFtjb250YWluZXIsIHNldENvbnRhaW5lcl0gPSB1c2VTdGF0ZTxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGJhc2Vab29tID0gY2FtZXJhPy56b29tID8/IDE1MFxuXG4gIGNvbnN0IGJvdW5kcyA9IHVzZUJvdW5kcyhcbiAgICBjb250YWluZWQgPyAoY29udGFpbmVyPy5wYXJlbnRFbGVtZW50ID8/IG51bGwpIDogbnVsbFxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBlbCA9IGNvbnRhaW5lZCAmJiAhbm9FdmVudHMgPyBjb250YWluZXIgOiBudWxsXG5cbiAgICBpZiAoIWVsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBsb2NrID0gKCkgPT4gKGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9ICdub25lJylcbiAgICBjb25zdCB1bmxvY2sgPSAoKSA9PiAoZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJycpXG5cbiAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIGxvY2spXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHVubG9jaylcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIGxvY2spXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdW5sb2NrKVxuICAgIH1cbiAgfSwgW2NvbnRhaW5lciwgY29udGFpbmVkLCBub0V2ZW50c10pXG5cbiAgLy8gUGF1c2UgdGhlIFIzRiByZW5kZXIgbG9vcCB3aGVuIHRoZSB0YWIgaXMgaGlkZGVuLiBFdmVuIG9uXG4gIC8vIGBmcmFtZWxvb3A9XCJhbHdheXNcImAgc2NlbmVzIHdlIGRvbid0IHdhbnQgdGhlIEdQVSBydW5uaW5nIHdoaWxlIHRoZVxuICAvLyB1c2VyIGNhbid0IHNlZSBhbnl0aGluZyBcdTIwMTQgdGhpcyBpcyB0aGUgZG9taW5hbnQgZml4IGZvciB0aGUgXCJmYW5zXG4gIC8vIGNyYW5rIHVwIGFmdGVyIGhvdXJzIG9mIGlkbGVcIiBzeW1wdG9tLlxuICBjb25zdCBbcGFnZUhpZGRlbiwgc2V0UGFnZUhpZGRlbl0gPSB1c2VTdGF0ZShcbiAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmhpZGRlblxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvblZpc2liaWxpdHkgPSAoKSA9PiBzZXRQYWdlSGlkZGVuKGRvY3VtZW50LmhpZGRlbilcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25WaXNpYmlsaXR5KVxuXG4gICAgcmV0dXJuICgpID0+IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2liaWxpdHkpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGVmZmVjdGl2ZUZyYW1lbG9vcCA9IHBhZ2VIaWRkZW4gPyAnbmV2ZXInIDogZnJhbWVsb29wXG5cbiAgY29uc3QgY2FtID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoe1xuICAgICAgZmFyOiBjYW1lcmE/LmZhciA/PyAxMDAsXG4gICAgICBuZWFyOiBjYW1lcmE/Lm5lYXIgPz8gLTEwMCxcbiAgICAgIHBvc2l0aW9uOiBjYW1lcmE/LnBvc2l0aW9uID8/IChbMCwgMCwgMTBdIGFzIFtudW1iZXIsIG51bWJlciwgbnVtYmVyXSksXG4gICAgICB6b29tOiBiYXNlWm9vbSAqIChjb250YWluZWQgPyAxIDogMilcbiAgICB9KSxcbiAgICBbYmFzZVpvb20sIGNhbWVyYSwgY29udGFpbmVkXVxuICApXG5cbiAgY29uc3QgY2FudmFzID0gKFxuICAgIDxDYW52YXNcbiAgICAgIGNhbWVyYT17Y2FtfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICBkcHI9e1sxLCAyXX1cbiAgICAgIGV2ZW50UHJlZml4PXtjb250YWluZWQgPyAnY2xpZW50JyA6ICdvZmZzZXQnfVxuICAgICAgZXZlbnRTb3VyY2U9e2NvbnRhaW5lZCA/IChjb250YWluZXIgPz8gdW5kZWZpbmVkKSA6IHVuZGVmaW5lZH1cbiAgICAgIGZyYW1lbG9vcD17ZWZmZWN0aXZlRnJhbWVsb29wfVxuICAgICAgZ2w9e0dMfVxuICAgICAgb3J0aG9ncmFwaGljXG4gICAgICBzdHlsZT17XG4gICAgICAgIGNvbnRhaW5lZFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBoZWlnaHQ6ICcxMDBkdmgnLFxuICAgICAgICAgICAgICBpbnNldDogMCxcbiAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgICAgICAgICAgICAgd2lkdGg6ICcxMDBkdncnLFxuICAgICAgICAgICAgICB6SW5kZXg6IDAsXG4gICAgICAgICAgICAgIC4uLnN0eWxlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7IGhlaWdodDogJzEwMCUnLCB3aWR0aDogJzEwMCUnLCAuLi5zdHlsZSB9XG4gICAgICB9XG4gICAgPlxuICAgICAge2NvbnRhaW5lZCA/IChcbiAgICAgICAgPFBvc2l0aW9uZWRHcm91cCBiYXNlWm9vbT17YmFzZVpvb219IGJvdW5kcz17Ym91bmRzfT5cbiAgICAgICAgICB7Y2hpbGRyZW4oKX1cbiAgICAgICAgPC9Qb3NpdGlvbmVkR3JvdXA+XG4gICAgICApIDogKFxuICAgICAgICBjaGlsZHJlbigpXG4gICAgICApfVxuICAgIDwvQ2FudmFzPlxuICApXG5cbiAgcmV0dXJuIGNvbnRhaW5lZCA/IChcbiAgICA8U3VzcGVuc2U+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17c2V0Q29udGFpbmVyfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgICAgIGluc2V0OiAwLFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6IG5vRXZlbnRzID8gJ25vbmUnIDogJ2F1dG8nLFxuICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgekluZGV4OiAxXG4gICAgICAgIH19XG4gICAgICAvPlxuICAgICAge2NhbnZhc31cbiAgICA8L1N1c3BlbnNlPlxuICApIDogKFxuICAgIGNhbnZhc1xuICApXG59XG5cbmludGVyZmFjZSBTY2VuZUNhbnZhc1Byb3BzIHtcbiAgY2FtZXJhPzoge1xuICAgIGZhcj86IG51bWJlclxuICAgIG5lYXI/OiBudW1iZXJcbiAgICBwb3NpdGlvbj86IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXVxuICAgIHpvb20/OiBudW1iZXJcbiAgfVxuICBjaGlsZHJlbjogKCkgPT4gUmVhY3QuUmVhY3ROb2RlXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBjb250YWluZWQ/OiBib29sZWFuXG4gIC8qKlxuICAgKiBSM0YgZnJhbWUtbG9vcCBtb2RlLiBEZWZhdWx0cyB0byBgJ2Fsd2F5cydgIGZvciBiYWNrd2FyZHNcbiAgICogY29tcGF0aWJpbGl0eSwgYnV0IGAnZGVtYW5kJ2AgaXMgc3Ryb25nbHkgcHJlZmVycmVkIGZvciBzdGF0aWNcbiAgICogc2NlbmVzICh1c2UgYGludmFsaWRhdGUoKWAgZnJvbSBgdXNlVGhyZWVgIHRvIHJlcXVlc3QgZnJhbWVzKS4gVGhlXG4gICAqIGNhbnZhcyBhZGRpdGlvbmFsbHkgcGF1c2VzIChmb3JjZXMgYCduZXZlcidgKSB3aGlsZSB0aGUgZG9jdW1lbnRcbiAgICogaXMgaGlkZGVuLCByZWdhcmRsZXNzIG9mIHRoaXMgc2V0dGluZy5cbiAgICovXG4gIGZyYW1lbG9vcD86ICdhbHdheXMnIHwgJ2RlbWFuZCcgfCAnbmV2ZXInXG4gIG5vRXZlbnRzPzogYm9vbGVhblxuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFrSFMsY0FvR0wsWUFwR0s7QUFoSFQsU0FBUyxRQUFRLFVBQVUsZ0JBQWdCO0FBQzNDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFlBQVksV0FBVztBQUV2QixNQUFNLEtBQUs7QUFBQSxFQUNULE9BQU87QUFBQSxFQUNQLFdBQVc7QUFBQSxFQUNYLE9BQU87QUFBQSxFQUNQLGtCQUFrQjtBQUFBLEVBQ2xCLGlCQUFpQjtBQUFBLEVBQ2pCLFNBQVM7QUFDWDtBQUVBLE1BQU0sTUFBTTtBQUFBLEVBQ1YsUUFBUSxJQUFJLE1BQU0sUUFBUTtBQUFBLEVBQzFCLEtBQUssSUFBSSxNQUFNLFFBQVE7QUFBQSxFQUN2QixLQUFLLElBQUksTUFBTSxRQUFRO0FBQUEsRUFDdkIsUUFBUSxJQUFJLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUFBLEVBQ2pDLE9BQU8sSUFBSSxNQUFNLE1BQU07QUFBQSxFQUN2QixLQUFLLElBQUksTUFBTSxVQUFVO0FBQzNCO0FBSUEsU0FBUyxVQUFVLFFBQTRCO0FBQzdDLFFBQU0sU0FBUyxPQUFzQixJQUFJO0FBRXpDLGtCQUFnQixNQUFNO0FBQ3BCLFFBQUksQ0FBQyxRQUFRO0FBQ1g7QUFBQSxJQUNGO0FBRUEsVUFBTSxVQUFVLE1BQU07QUFDcEIsWUFBTSxJQUFJLE9BQU8sc0JBQXNCO0FBQ3ZDLGFBQU8sVUFBVTtBQUFBLFFBQ2YsUUFBUSxFQUFFO0FBQUEsUUFDVixPQUFPLEVBQUUsT0FBTyxPQUFPO0FBQUEsUUFDdkIsT0FBTyxFQUFFLE1BQU0sT0FBTztBQUFBLFFBQ3RCLE9BQU8sRUFBRTtBQUFBLE1B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
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RefObject } from 'react';
|
|
2
|
+
export declare function Scramble({ children, dur, spread, target }: ScrambleProps): import("react").JSX.Element;
|
|
3
|
+
interface ScrambleProps {
|
|
4
|
+
children: string;
|
|
5
|
+
dur?: number;
|
|
6
|
+
spread?: number;
|
|
7
|
+
target?: RefObject<HTMLElement | null>;
|
|
8
|
+
}
|
|
9
|
+
export {};
|