@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,11 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
export function HeartIcon(props) {
|
|
3
|
+
return /* @__PURE__ */ jsx("svg", { fill: "none", viewBox: "0 0 14 12", ...props, children: /* @__PURE__ */ jsx(
|
|
4
|
+
"path",
|
|
5
|
+
{
|
|
6
|
+
d: "M13.2 0v5.65714h-1.8857v1.88572H9.42857v1.88571H7.54286v1.88573H5.65714V9.42857H3.77143V7.54286H1.88571V5.65714H0V0h5.65714v1.88571h1.88572V0z",
|
|
7
|
+
fill: "currentColor"
|
|
8
|
+
}
|
|
9
|
+
) });
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgeyBTVkdQcm9wcyB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgZnVuY3Rpb24gSGVhcnRJY29uKHByb3BzOiBTVkdQcm9wczxTVkdTVkdFbGVtZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxzdmcgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDE0IDEyXCIgey4uLnByb3BzfT5cbiAgICAgIDxwYXRoXG4gICAgICAgIGQ9XCJNMTMuMiAwdjUuNjU3MTRoLTEuODg1N3YxLjg4NTcySDkuNDI4NTd2MS44ODU3MUg3LjU0Mjg2djEuODg1NzNINS42NTcxNFY5LjQyODU3SDMuNzcxNDNWNy41NDI4NkgxLjg4NTcxVjUuNjU3MTRIMFYwaDUuNjU3MTR2MS44ODU3MWgxLjg4NTcyVjB6XCJcbiAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgICAvPlxuICAgIDwvc3ZnPlxuICApXG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFLTTtBQUhDLGdCQUFTLFVBQVUsT0FBZ0M7QUFDeEQsU0FDRSxvQkFBQyxTQUFJLE1BQUssUUFBTyxTQUFRLGFBQWEsR0FBRyxPQUN2QztBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0MsR0FBRTtBQUFBLE1BQ0YsTUFBSztBQUFBO0FBQUEsRUFDUCxHQUNGO0FBRUo7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from './arrow';
|
|
2
|
+
export * from './check';
|
|
3
|
+
export * from './chevron';
|
|
4
|
+
export * from './discord';
|
|
5
|
+
export * from './eye';
|
|
6
|
+
export * from './gear';
|
|
7
|
+
export * from './github';
|
|
8
|
+
export * from './hamburger';
|
|
9
|
+
export * from './heart';
|
|
10
|
+
export * from './link';
|
|
11
|
+
export * from './minus';
|
|
12
|
+
export * from './search';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from "./arrow.js";
|
|
2
|
+
export * from "./check.js";
|
|
3
|
+
export * from "./chevron.js";
|
|
4
|
+
export * from "./discord.js";
|
|
5
|
+
export * from "./eye.js";
|
|
6
|
+
export * from "./gear.js";
|
|
7
|
+
export * from "./github.js";
|
|
8
|
+
export * from "./hamburger.js";
|
|
9
|
+
export * from "./heart.js";
|
|
10
|
+
export * from "./link.js";
|
|
11
|
+
export * from "./minus.js";
|
|
12
|
+
export * from "./search.js";
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0ICogZnJvbSAnLi9hcnJvdydcbmV4cG9ydCAqIGZyb20gJy4vY2hlY2snXG5leHBvcnQgKiBmcm9tICcuL2NoZXZyb24nXG5leHBvcnQgKiBmcm9tICcuL2Rpc2NvcmQnXG5leHBvcnQgKiBmcm9tICcuL2V5ZSdcbmV4cG9ydCAqIGZyb20gJy4vZ2VhcidcbmV4cG9ydCAqIGZyb20gJy4vZ2l0aHViJ1xuZXhwb3J0ICogZnJvbSAnLi9oYW1idXJnZXInXG5leHBvcnQgKiBmcm9tICcuL2hlYXJ0J1xuZXhwb3J0ICogZnJvbSAnLi9saW5rJ1xuZXhwb3J0ICogZnJvbSAnLi9taW51cydcbmV4cG9ydCAqIGZyb20gJy4vc2VhcmNoJ1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBQUEsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjO0FBQ2QsY0FBYztBQUNkLGNBQWM7QUFDZCxjQUFjOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
export function LinkIcon(props) {
|
|
3
|
+
return /* @__PURE__ */ jsx("svg", { fill: "none", viewBox: "0 0 17 7", ...props, children: /* @__PURE__ */ jsx(
|
|
4
|
+
"path",
|
|
5
|
+
{
|
|
6
|
+
d: "M.264191.25061 6.27068.265071V2.26334h3.96512v1.99578l4.0238.00091.043-2.06986-4.0381.07302-.0142-2.01254L16.271.250649l-.0144 6.006381h-5.992l-.0287-1.9981-3.96528-.0002v1.99826l-6.02085-.0001zM6.24063 2.26197l-3.97944-.01436v1.99827l3.97954.01446z",
|
|
7
|
+
fill: "currentColor",
|
|
8
|
+
stroke: "currentColor",
|
|
9
|
+
strokeWidth: ".5"
|
|
10
|
+
}
|
|
11
|
+
) });
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgeyBTVkdQcm9wcyB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgZnVuY3Rpb24gTGlua0ljb24ocHJvcHM6IFNWR1Byb3BzPFNWR1NWR0VsZW1lbnQ+KSB7XG4gIHJldHVybiAoXG4gICAgPHN2ZyBmaWxsPVwibm9uZVwiIHZpZXdCb3g9XCIwIDAgMTcgN1wiIHsuLi5wcm9wc30+XG4gICAgICA8cGF0aFxuICAgICAgICBkPVwiTS4yNjQxOTEuMjUwNjEgNi4yNzA2OC4yNjUwNzFWMi4yNjMzNGgzLjk2NTEydjEuOTk1NzhsNC4wMjM4LjAwMDkxLjA0My0yLjA2OTg2LTQuMDM4MS4wNzMwMi0uMDE0Mi0yLjAxMjU0TDE2LjI3MS4yNTA2NDlsLS4wMTQ0IDYuMDA2MzgxaC01Ljk5MmwtLjAyODctMS45OTgxLTMuOTY1MjgtLjAwMDJ2MS45OTgyNmwtNi4wMjA4NS0uMDAwMXpNNi4yNDA2MyAyLjI2MTk3bC0zLjk3OTQ0LS4wMTQzNnYxLjk5ODI3bDMuOTc5NTQuMDE0NDZ6XCJcbiAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgIHN0cm9rZVdpZHRoPVwiLjVcIlxuICAgICAgLz5cbiAgICA8L3N2Zz5cbiAgKVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBS007QUFIQyxnQkFBUyxTQUFTLE9BQWdDO0FBQ3ZELFNBQ0Usb0JBQUMsU0FBSSxNQUFLLFFBQU8sU0FBUSxZQUFZLEdBQUcsT0FDdEM7QUFBQSxJQUFDO0FBQUE7QUFBQSxNQUNDLEdBQUU7QUFBQSxNQUNGLE1BQUs7QUFBQSxNQUNMLFFBQU87QUFBQSxNQUNQLGFBQVk7QUFBQTtBQUFBLEVBQ2QsR0FDRjtBQUVKOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
export function MinusIcon(props) {
|
|
3
|
+
return /* @__PURE__ */ jsx("svg", { fill: "none", viewBox: "0 0 12 3", ...props, children: /* @__PURE__ */ jsx(
|
|
4
|
+
"path",
|
|
5
|
+
{
|
|
6
|
+
clipRule: "evenodd",
|
|
7
|
+
d: "M12 0 0-5.2e-7-1e-7 2.50075H12z",
|
|
8
|
+
fill: "currentColor",
|
|
9
|
+
fillRule: "evenodd"
|
|
10
|
+
}
|
|
11
|
+
) });
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgeyBTVkdQcm9wcyB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgZnVuY3Rpb24gTWludXNJY29uKHByb3BzOiBTVkdQcm9wczxTVkdTVkdFbGVtZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxzdmcgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDEyIDNcIiB7Li4ucHJvcHN9PlxuICAgICAgPHBhdGhcbiAgICAgICAgY2xpcFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgZD1cIk0xMiAwIDAtNS4yZS03LTFlLTcgMi41MDA3NUgxMnpcIlxuICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgIC8+XG4gICAgPC9zdmc+XG4gIClcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUtNO0FBSEMsZ0JBQVMsVUFBVSxPQUFnQztBQUN4RCxTQUNFLG9CQUFDLFNBQUksTUFBSyxRQUFPLFNBQVEsWUFBWSxHQUFHLE9BQ3RDO0FBQUEsSUFBQztBQUFBO0FBQUEsTUFDQyxVQUFTO0FBQUEsTUFDVCxHQUFFO0FBQUEsTUFDRixNQUFLO0FBQUEsTUFDTCxVQUFTO0FBQUE7QUFBQSxFQUNYLEdBQ0Y7QUFFSjsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function SearchIcon(props) {
|
|
3
|
+
return /* @__PURE__ */ jsxs("svg", { fill: "none", viewBox: "0 0 20 21", ...props, children: [
|
|
4
|
+
/* @__PURE__ */ jsx(
|
|
5
|
+
"path",
|
|
6
|
+
{
|
|
7
|
+
clipRule: "evenodd",
|
|
8
|
+
d: "M7.49773 1.6664h6.66637V0H7.49773zM14.1641 15.0001H7.49773v1.6664h6.66637z",
|
|
9
|
+
fill: "currentColor",
|
|
10
|
+
fillRule: "evenodd"
|
|
11
|
+
}
|
|
12
|
+
),
|
|
13
|
+
/* @__PURE__ */ jsx(
|
|
14
|
+
"path",
|
|
15
|
+
{
|
|
16
|
+
clipRule: "evenodd",
|
|
17
|
+
d: "M5.8336 3.33278H7.5v-1.6664H5.8336zM15.8359 13.3329h-1.6671v1.6672h1.6671zM4.16877 5.00017h1.66717V3.33301H4.16877zM17.5 11.6665h-1.6664v1.6664H17.5zM4.16406 11.6665V5.00012h-1.6664v6.66638zM17.4977 5.00012v6.66638h1.6664V5.00012z",
|
|
18
|
+
fill: "currentColor",
|
|
19
|
+
fillRule: "evenodd"
|
|
20
|
+
}
|
|
21
|
+
),
|
|
22
|
+
/* @__PURE__ */ jsx(
|
|
23
|
+
"path",
|
|
24
|
+
{
|
|
25
|
+
clipRule: "evenodd",
|
|
26
|
+
d: "M17.5 5.00017V3.33301h-1.6664v1.66716zM15.8359 3.33278v-1.6664h-1.6671v1.6664zM15.8359 10.0002V6.6665h-1.6671v3.3337zM14.1641 6.6664V5h-1.6664v1.6664zM5.8335 13.3328v-1.6664H4.16633V15H7.5v-1.6671zM4.16406 16.6664V15h-1.6664v1.6664zM2.5 18.3331v-1.6664H.8336v1.6664z",
|
|
27
|
+
fill: "currentColor",
|
|
28
|
+
fillRule: "evenodd"
|
|
29
|
+
}
|
|
30
|
+
)
|
|
31
|
+
] });
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgeyBTVkdQcm9wcyB9IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgZnVuY3Rpb24gU2VhcmNoSWNvbihwcm9wczogU1ZHUHJvcHM8U1ZHU1ZHRWxlbWVudD4pIHtcbiAgcmV0dXJuIChcbiAgICA8c3ZnIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyMCAyMVwiIHsuLi5wcm9wc30+XG4gICAgICA8cGF0aFxuICAgICAgICBjbGlwUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICBkPVwiTTcuNDk3NzMgMS42NjY0aDYuNjY2MzdWMEg3LjQ5Nzczek0xNC4xNjQxIDE1LjAwMDFINy40OTc3M3YxLjY2NjRoNi42NjYzN3pcIlxuICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCJcbiAgICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgIC8+XG5cbiAgICAgIDxwYXRoXG4gICAgICAgIGNsaXBSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgIGQ9XCJNNS44MzM2IDMuMzMyNzhINy41di0xLjY2NjRINS44MzM2ek0xNS44MzU5IDEzLjMzMjloLTEuNjY3MXYxLjY2NzJoMS42Njcxek00LjE2ODc3IDUuMDAwMTdoMS42NjcxN1YzLjMzMzAxSDQuMTY4Nzd6TTE3LjUgMTEuNjY2NWgtMS42NjY0djEuNjY2NEgxNy41ek00LjE2NDA2IDExLjY2NjVWNS4wMDAxMmgtMS42NjY0djYuNjY2Mzh6TTE3LjQ5NzcgNS4wMDAxMnY2LjY2NjM4aDEuNjY2NFY1LjAwMDEyelwiXG4gICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgLz5cblxuICAgICAgPHBhdGhcbiAgICAgICAgY2xpcFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgZD1cIk0xNy41IDUuMDAwMTdWMy4zMzMwMWgtMS42NjY0djEuNjY3MTZ6TTE1LjgzNTkgMy4zMzI3OHYtMS42NjY0aC0xLjY2NzF2MS42NjY0ek0xNS44MzU5IDEwLjAwMDJWNi42NjY1aC0xLjY2NzF2My4zMzM3ek0xNC4xNjQxIDYuNjY2NFY1aC0xLjY2NjR2MS42NjY0ek01LjgzMzUgMTMuMzMyOHYtMS42NjY0SDQuMTY2MzNWMTVINy41di0xLjY2NzF6TTQuMTY0MDYgMTYuNjY2NFYxNWgtMS42NjY0djEuNjY2NHpNMi41IDE4LjMzMzF2LTEuNjY2NEguODMzNnYxLjY2NjR6XCJcbiAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiXG4gICAgICAgIGZpbGxSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAvPlxuICAgIDwvc3ZnPlxuICApXG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFJSSxTQUNFLEtBREY7QUFGRyxnQkFBUyxXQUFXLE9BQWdDO0FBQ3pELFNBQ0UscUJBQUMsU0FBSSxNQUFLLFFBQU8sU0FBUSxhQUFhLEdBQUcsT0FDdkM7QUFBQTtBQUFBLE1BQUM7QUFBQTtBQUFBLFFBQ0MsVUFBUztBQUFBLFFBQ1QsR0FBRTtBQUFBLFFBQ0YsTUFBSztBQUFBLFFBQ0wsVUFBUztBQUFBO0FBQUEsSUFDWDtBQUFBLElBRUE7QUFBQSxNQUFDO0FBQUE7QUFBQSxRQUNDLFVBQVM7QUFBQSxRQUNULEdBQUU7QUFBQSxRQUNGLE1BQUs7QUFBQSxRQUNMLFVBQVM7QUFBQTtBQUFBLElBQ1g7QUFBQSxJQUVBO0FBQUEsTUFBQztBQUFBO0FBQUEsUUFDQyxVQUFTO0FBQUEsUUFDVCxHQUFFO0FBQUEsUUFDRixNQUFLO0FBQUEsUUFDTCxVQUFTO0FBQUE7QUFBQSxJQUNYO0FBQUEsS0FDRjtBQUVKOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare function ImageDistortion({ active, autoPlay, className, fallbackClassName, src, style, tint, tintStrength }: ImageDistortionProps): import("react").JSX.Element;
|
|
2
|
+
export type AutoPlayPattern = 'aggressive' | 'gentle' | 'slash';
|
|
3
|
+
interface ImageDistortionProps {
|
|
4
|
+
active?: boolean;
|
|
5
|
+
/**
|
|
6
|
+
* Drive the distortion with a choreographed motion pattern instead of
|
|
7
|
+
* waiting for a real pointer. Useful for posters, social clips, and any
|
|
8
|
+
* context where the image needs to feel alive on its own.
|
|
9
|
+
*/
|
|
10
|
+
autoPlay?: AutoPlayPattern;
|
|
11
|
+
className?: string;
|
|
12
|
+
fallbackClassName?: string;
|
|
13
|
+
src: string;
|
|
14
|
+
style?: React.CSSProperties;
|
|
15
|
+
tint?: string;
|
|
16
|
+
tintStrength?: {
|
|
17
|
+
active: number;
|
|
18
|
+
inactive: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useRef, useState } from "react";
|
|
4
|
+
import { useGpuTier } from "../../hooks/use-gpu-tier.js";
|
|
5
|
+
import { cn, hexToRgb } from "../../utils/index.js";
|
|
6
|
+
const NUM_BANDS = 12;
|
|
7
|
+
const VERT = `attribute vec2 a;varying vec2 vUv;void main(){vUv=vec2(a.x*.5+.5,.5-a.y*.5);gl_Position=vec4(a,0,1);}`;
|
|
8
|
+
const FRAG = `precision highp float;
|
|
9
|
+
uniform float t;
|
|
10
|
+
uniform vec2 r,imgSize,vel;
|
|
11
|
+
uniform sampler2D tex;
|
|
12
|
+
uniform float bands[${NUM_BANDS}];
|
|
13
|
+
uniform vec3 tint;
|
|
14
|
+
uniform float tintStrength;
|
|
15
|
+
varying vec2 vUv;
|
|
16
|
+
|
|
17
|
+
float h(vec2 p){return fract(sin(dot(p,vec2(127.1,311.7)))*43758.5453);}
|
|
18
|
+
|
|
19
|
+
// cover-style UV: crops the image to fill the canvas, centered
|
|
20
|
+
vec2 coverUV(vec2 uv){
|
|
21
|
+
float canvasAspect=r.x/r.y;
|
|
22
|
+
float imgAspect=imgSize.x/imgSize.y;
|
|
23
|
+
vec2 scale=canvasAspect>imgAspect
|
|
24
|
+
?vec2(1.0,imgAspect/canvasAspect)
|
|
25
|
+
:vec2(canvasAspect/imgAspect,1.0);
|
|
26
|
+
return(uv-0.5)*scale+0.5;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
void main(){
|
|
30
|
+
vec2 uv=coverUV(vUv);
|
|
31
|
+
float scanY=floor(vUv.y*r.y);
|
|
32
|
+
|
|
33
|
+
float bandF=vUv.y*${NUM_BANDS}.0;
|
|
34
|
+
int bandIdx=int(floor(bandF));
|
|
35
|
+
float bandFrac=fract(bandF);
|
|
36
|
+
|
|
37
|
+
float strength=0.0;
|
|
38
|
+
for(int i=0;i<${NUM_BANDS};i++){
|
|
39
|
+
if(i==bandIdx) strength=bands[i];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
float neighborStr=0.0;
|
|
43
|
+
int neighborIdx=bandFrac>.5?bandIdx+1:bandIdx-1;
|
|
44
|
+
for(int i=0;i<${NUM_BANDS};i++){
|
|
45
|
+
if(i==neighborIdx) neighborStr=bands[i];
|
|
46
|
+
}
|
|
47
|
+
float edgeBlend=abs(bandFrac-.5)*2.0;
|
|
48
|
+
edgeBlend*=edgeBlend;
|
|
49
|
+
strength=mix(strength,neighborStr,edgeBlend*.3);
|
|
50
|
+
|
|
51
|
+
float speed=length(vel);
|
|
52
|
+
float dirBlend=smoothstep(0.0,0.02,speed);
|
|
53
|
+
vec2 dir=speed>.0001?vel/speed:vec2(0);
|
|
54
|
+
dir*=dirBlend;
|
|
55
|
+
|
|
56
|
+
float rowSeed=h(vec2(scanY,floor(t*3.)+float(bandIdx)*7.));
|
|
57
|
+
float rowVar=mix(.4,1.0,rowSeed);
|
|
58
|
+
|
|
59
|
+
float ySmooth=vUv.y*6.0+t*0.7;
|
|
60
|
+
float yNoise=mix(h(vec2(floor(ySmooth),13.)),h(vec2(floor(ySmooth)+1.0,13.)),smoothstep(0.0,1.0,fract(ySmooth)));
|
|
61
|
+
float colVar=mix(.4,1.0,yNoise);
|
|
62
|
+
|
|
63
|
+
float tearShiftX=dir.x*strength*rowVar*0.15;
|
|
64
|
+
float tearShiftY=dir.y*strength*colVar*0.10;
|
|
65
|
+
|
|
66
|
+
float bandSeed=h(vec2(float(bandIdx),42.));
|
|
67
|
+
tearShiftX+=strength*(.5-bandSeed)*0.05;
|
|
68
|
+
|
|
69
|
+
float yJitter=mix(h(vec2(floor(ySmooth),73.)),h(vec2(floor(ySmooth)+1.0,73.)),smoothstep(0.0,1.0,fract(ySmooth)));
|
|
70
|
+
tearShiftY+=strength*(.5-yJitter)*0.035;
|
|
71
|
+
|
|
72
|
+
uv.x+=tearShiftX;
|
|
73
|
+
uv.y+=tearShiftY;
|
|
74
|
+
|
|
75
|
+
float sortGate=step(.5,strength)*step(.4,rowSeed);
|
|
76
|
+
uv.x+=dir.x*sortGate*strength*0.03;
|
|
77
|
+
uv.y+=dir.y*sortGate*strength*0.02;
|
|
78
|
+
|
|
79
|
+
float caX=abs(tearShiftX)*2.5+sortGate*strength*0.01;
|
|
80
|
+
float caY=abs(tearShiftY)*2.5+sortGate*strength*0.01;
|
|
81
|
+
float cr=texture2D(tex,vec2(uv.x+caX,uv.y+caY)).r;
|
|
82
|
+
float cg=texture2D(tex,uv).g;
|
|
83
|
+
float cb=texture2D(tex,vec2(uv.x-caX,uv.y-caY)).b;
|
|
84
|
+
|
|
85
|
+
vec3 col=vec3(cr,cg,cb);
|
|
86
|
+
|
|
87
|
+
col*=.97+.03*sin(vUv.y*r.y*3.14159);
|
|
88
|
+
|
|
89
|
+
float bandEdge=smoothstep(.02,.0,min(bandFrac,1.0-bandFrac));
|
|
90
|
+
col+=vec3(bandEdge*strength*.1);
|
|
91
|
+
|
|
92
|
+
col=mix(col,col*tint,tintStrength);
|
|
93
|
+
|
|
94
|
+
gl_FragColor=vec4(col,1.0);
|
|
95
|
+
}`;
|
|
96
|
+
const AUTOPLAY_PATTERNS = {
|
|
97
|
+
aggressive: (t) => {
|
|
98
|
+
const cycle = 1.4;
|
|
99
|
+
const phase = t % cycle / cycle;
|
|
100
|
+
const stab = Math.exp(-((phase - 0.15) ** 2) * 260);
|
|
101
|
+
const angle = Math.floor(t / cycle) * 1.37;
|
|
102
|
+
const mx = 0.5 + Math.cos(angle) * 0.42 * (stab + 0.15);
|
|
103
|
+
const my = 0.5 + Math.sin(angle) * 0.38 * (stab + 0.15);
|
|
104
|
+
return { hover: 0.55 + stab * 0.45, mx, my };
|
|
105
|
+
},
|
|
106
|
+
gentle: (t) => ({
|
|
107
|
+
hover: 0.45 + Math.sin(t * 0.9) * 0.1,
|
|
108
|
+
mx: 0.5 + Math.sin(t * 0.5) * 0.28,
|
|
109
|
+
my: 0.5 + Math.cos(t * 0.37) * 0.22
|
|
110
|
+
}),
|
|
111
|
+
slash: (t) => {
|
|
112
|
+
const cycle = 3.6;
|
|
113
|
+
const phase = t % cycle / cycle;
|
|
114
|
+
const slash = Math.exp(-((phase - 0.28) ** 2) * 180);
|
|
115
|
+
const micro = Math.exp(-((phase - 0.7) ** 2) * 340);
|
|
116
|
+
const driftX = 0.5 + Math.sin(t * 0.7) * 0.16;
|
|
117
|
+
const driftY = 0.55 + Math.cos(t * 0.5) * 0.14;
|
|
118
|
+
const slashX = -0.15 + phase * 1.55;
|
|
119
|
+
const slashY = 0.95 - phase * 1.35;
|
|
120
|
+
const mx = driftX * (1 - slash) + slashX * slash;
|
|
121
|
+
const my = driftY * (1 - slash) + slashY * slash;
|
|
122
|
+
return { hover: 0.5 + slash * 0.5 + micro * 0.35, mx, my };
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
export function ImageDistortion({
|
|
126
|
+
active = true,
|
|
127
|
+
autoPlay,
|
|
128
|
+
className,
|
|
129
|
+
fallbackClassName,
|
|
130
|
+
src,
|
|
131
|
+
style,
|
|
132
|
+
tint,
|
|
133
|
+
tintStrength
|
|
134
|
+
}) {
|
|
135
|
+
const canvasRef = useRef(null);
|
|
136
|
+
const tier = useGpuTier();
|
|
137
|
+
const [loaded, setLoaded] = useState(false);
|
|
138
|
+
const activeRef = useRef(active);
|
|
139
|
+
activeRef.current = active;
|
|
140
|
+
const tintStrengthRef = useRef(tintStrength);
|
|
141
|
+
tintStrengthRef.current = tintStrength;
|
|
142
|
+
const autoPlayRef = useRef(autoPlay);
|
|
143
|
+
autoPlayRef.current = autoPlay;
|
|
144
|
+
const state = useRef({
|
|
145
|
+
bandTargets: new Float32Array(NUM_BANDS),
|
|
146
|
+
bands: new Float32Array(NUM_BANDS),
|
|
147
|
+
hoverTarget: 0,
|
|
148
|
+
imgH: 1,
|
|
149
|
+
imgW: 1,
|
|
150
|
+
mx: 0.5,
|
|
151
|
+
my: 0.5,
|
|
152
|
+
prevMx: 0.5,
|
|
153
|
+
prevMy: 0.5,
|
|
154
|
+
vx: 0,
|
|
155
|
+
vy: 0
|
|
156
|
+
});
|
|
157
|
+
useEffect(() => {
|
|
158
|
+
if (tier === 0) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const c = canvasRef.current;
|
|
162
|
+
if (!c) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
const gl = c.getContext("webgl");
|
|
166
|
+
if (!gl) {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
const compile = (type, source) => {
|
|
170
|
+
const s = gl.createShader(type);
|
|
171
|
+
gl.shaderSource(s, source);
|
|
172
|
+
gl.compileShader(s);
|
|
173
|
+
return s;
|
|
174
|
+
};
|
|
175
|
+
const prog = gl.createProgram();
|
|
176
|
+
gl.attachShader(prog, compile(gl.VERTEX_SHADER, VERT));
|
|
177
|
+
gl.attachShader(prog, compile(gl.FRAGMENT_SHADER, FRAG));
|
|
178
|
+
gl.linkProgram(prog);
|
|
179
|
+
gl.useProgram(prog);
|
|
180
|
+
gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());
|
|
181
|
+
gl.bufferData(
|
|
182
|
+
gl.ARRAY_BUFFER,
|
|
183
|
+
new Float32Array([-1, -1, 1, -1, -1, 1, 1, 1]),
|
|
184
|
+
gl.STATIC_DRAW
|
|
185
|
+
);
|
|
186
|
+
const a = gl.getAttribLocation(prog, "a");
|
|
187
|
+
gl.enableVertexAttribArray(a);
|
|
188
|
+
gl.vertexAttribPointer(a, 2, gl.FLOAT, false, 0, 0);
|
|
189
|
+
const uT = gl.getUniformLocation(prog, "t");
|
|
190
|
+
const uR = gl.getUniformLocation(prog, "r");
|
|
191
|
+
const uImgSize = gl.getUniformLocation(prog, "imgSize");
|
|
192
|
+
const uVel = gl.getUniformLocation(prog, "vel");
|
|
193
|
+
const uTex = gl.getUniformLocation(prog, "tex");
|
|
194
|
+
const uTint = gl.getUniformLocation(prog, "tint");
|
|
195
|
+
const uTintStrength = gl.getUniformLocation(prog, "tintStrength");
|
|
196
|
+
const uBands = [];
|
|
197
|
+
for (let i = 0; i < NUM_BANDS; i++) {
|
|
198
|
+
uBands.push(gl.getUniformLocation(prog, `bands[${i}]`));
|
|
199
|
+
}
|
|
200
|
+
const texture = gl.createTexture();
|
|
201
|
+
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
202
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
|
|
203
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
|
|
204
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
|
|
205
|
+
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
|
|
206
|
+
gl.texImage2D(
|
|
207
|
+
gl.TEXTURE_2D,
|
|
208
|
+
0,
|
|
209
|
+
gl.RGBA,
|
|
210
|
+
1,
|
|
211
|
+
1,
|
|
212
|
+
0,
|
|
213
|
+
gl.RGBA,
|
|
214
|
+
gl.UNSIGNED_BYTE,
|
|
215
|
+
new Uint8Array([0, 0, 0, 255])
|
|
216
|
+
);
|
|
217
|
+
const img = new Image();
|
|
218
|
+
img.crossOrigin = "anonymous";
|
|
219
|
+
img.onload = () => {
|
|
220
|
+
state.current.imgW = img.naturalWidth;
|
|
221
|
+
state.current.imgH = img.naturalHeight;
|
|
222
|
+
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
223
|
+
gl.texImage2D(
|
|
224
|
+
gl.TEXTURE_2D,
|
|
225
|
+
0,
|
|
226
|
+
gl.RGBA,
|
|
227
|
+
gl.RGBA,
|
|
228
|
+
gl.UNSIGNED_BYTE,
|
|
229
|
+
img
|
|
230
|
+
);
|
|
231
|
+
setLoaded(true);
|
|
232
|
+
};
|
|
233
|
+
img.src = src;
|
|
234
|
+
gl.activeTexture(gl.TEXTURE0);
|
|
235
|
+
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
236
|
+
gl.uniform1i(uTex, 0);
|
|
237
|
+
const resize = () => {
|
|
238
|
+
const rect = c.getBoundingClientRect();
|
|
239
|
+
const dpr = Math.min(devicePixelRatio, 2);
|
|
240
|
+
c.width = rect.width * dpr;
|
|
241
|
+
c.height = rect.height * dpr;
|
|
242
|
+
gl.viewport(0, 0, c.width, c.height);
|
|
243
|
+
};
|
|
244
|
+
resize();
|
|
245
|
+
const ro = new ResizeObserver(resize);
|
|
246
|
+
ro.observe(c);
|
|
247
|
+
const onMove = (e) => {
|
|
248
|
+
const rect = c.getBoundingClientRect();
|
|
249
|
+
state.current.mx = (e.clientX - rect.left) / rect.width;
|
|
250
|
+
state.current.my = (e.clientY - rect.top) / rect.height;
|
|
251
|
+
};
|
|
252
|
+
const onEnter = () => {
|
|
253
|
+
state.current.hoverTarget = 1;
|
|
254
|
+
};
|
|
255
|
+
const onLeave = () => {
|
|
256
|
+
state.current.hoverTarget = 0;
|
|
257
|
+
};
|
|
258
|
+
if (!autoPlayRef.current) {
|
|
259
|
+
c.addEventListener("pointermove", onMove);
|
|
260
|
+
c.addEventListener("pointerenter", onEnter);
|
|
261
|
+
c.addEventListener("pointerleave", onLeave);
|
|
262
|
+
}
|
|
263
|
+
const bandEaseRates = new Float32Array(NUM_BANDS);
|
|
264
|
+
for (let i = 0; i < NUM_BANDS; i++) {
|
|
265
|
+
bandEaseRates[i] = 0.02 + Math.random() * 0.06;
|
|
266
|
+
}
|
|
267
|
+
const tintVec = tint ? (() => {
|
|
268
|
+
const [tr, tg, tb] = hexToRgb(tint);
|
|
269
|
+
return [tr / 255, tg / 255, tb / 255];
|
|
270
|
+
})() : [1, 1, 1];
|
|
271
|
+
const t0 = performance.now();
|
|
272
|
+
let raf = 0;
|
|
273
|
+
let visible = !document.hidden;
|
|
274
|
+
let inView = true;
|
|
275
|
+
const loop = () => {
|
|
276
|
+
raf = requestAnimationFrame(loop);
|
|
277
|
+
const s = state.current;
|
|
278
|
+
const pattern = autoPlayRef.current ? AUTOPLAY_PATTERNS[autoPlayRef.current] : null;
|
|
279
|
+
if (pattern) {
|
|
280
|
+
const driven = pattern((performance.now() - t0) / 1e3);
|
|
281
|
+
s.mx = driven.mx;
|
|
282
|
+
s.my = driven.my;
|
|
283
|
+
s.hoverTarget = driven.hover;
|
|
284
|
+
}
|
|
285
|
+
const dvx = s.mx - s.prevMx;
|
|
286
|
+
const dvy = s.my - s.prevMy;
|
|
287
|
+
s.vx += (dvx * 8 - s.vx) * 0.1;
|
|
288
|
+
s.vy += (dvy * 8 - s.vy) * 0.1;
|
|
289
|
+
s.prevMx = s.mx;
|
|
290
|
+
s.prevMy = s.my;
|
|
291
|
+
const speed = Math.sqrt(s.vx * s.vx + s.vy * s.vy);
|
|
292
|
+
for (let i = 0; i < NUM_BANDS; i++) {
|
|
293
|
+
const bandCenter = (i + 0.5) / NUM_BANDS;
|
|
294
|
+
const dist = Math.abs(s.my - bandCenter);
|
|
295
|
+
const proximity = Math.max(0, 1 - dist / 0.3);
|
|
296
|
+
const activation = s.hoverTarget * proximity * (0.4 + Math.min(speed, 1) * 0.6);
|
|
297
|
+
s.bandTargets[i] = activation;
|
|
298
|
+
}
|
|
299
|
+
for (let i = 0; i < NUM_BANDS; i++) {
|
|
300
|
+
const rate = bandEaseRates[i];
|
|
301
|
+
const current = s.bands[i] ?? 0;
|
|
302
|
+
const target = s.bandTargets[i] ?? 0;
|
|
303
|
+
s.bands[i] = current + (target - current) * rate;
|
|
304
|
+
if (s.bands[i] < 1e-3) {
|
|
305
|
+
s.bands[i] = 0;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
gl.uniform1f(uT, (performance.now() - t0) / 1e3);
|
|
309
|
+
gl.uniform2f(uR, c.width, c.height);
|
|
310
|
+
gl.uniform2f(uImgSize, s.imgW, s.imgH);
|
|
311
|
+
gl.uniform2f(uVel, s.vx, s.vy);
|
|
312
|
+
gl.uniform3f(uTint, tintVec[0], tintVec[1], tintVec[2]);
|
|
313
|
+
const ts = tintStrengthRef.current;
|
|
314
|
+
const defaultStrength = tint ? 0.35 : 0;
|
|
315
|
+
const defaultInactive = tint ? 0.15 : 0;
|
|
316
|
+
gl.uniform1f(
|
|
317
|
+
uTintStrength,
|
|
318
|
+
activeRef.current ? ts?.active ?? defaultStrength : ts?.inactive ?? defaultInactive
|
|
319
|
+
);
|
|
320
|
+
for (let i = 0; i < NUM_BANDS; i++) {
|
|
321
|
+
gl.uniform1f(uBands[i], s.bands[i]);
|
|
322
|
+
}
|
|
323
|
+
gl.bindTexture(gl.TEXTURE_2D, texture);
|
|
324
|
+
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
|
|
325
|
+
};
|
|
326
|
+
const start = () => {
|
|
327
|
+
if (visible && inView && !raf) {
|
|
328
|
+
raf = requestAnimationFrame(loop);
|
|
329
|
+
}
|
|
330
|
+
};
|
|
331
|
+
const stop = () => {
|
|
332
|
+
if (raf) {
|
|
333
|
+
cancelAnimationFrame(raf);
|
|
334
|
+
raf = 0;
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
const onVisibility = () => {
|
|
338
|
+
visible = !document.hidden;
|
|
339
|
+
visible ? start() : stop();
|
|
340
|
+
};
|
|
341
|
+
const io = new IntersectionObserver(
|
|
342
|
+
(entries) => {
|
|
343
|
+
inView = entries.some((e) => e.isIntersecting);
|
|
344
|
+
inView ? start() : stop();
|
|
345
|
+
},
|
|
346
|
+
{ threshold: 0 }
|
|
347
|
+
);
|
|
348
|
+
io.observe(c);
|
|
349
|
+
document.addEventListener("visibilitychange", onVisibility);
|
|
350
|
+
start();
|
|
351
|
+
return () => {
|
|
352
|
+
stop();
|
|
353
|
+
io.disconnect();
|
|
354
|
+
document.removeEventListener("visibilitychange", onVisibility);
|
|
355
|
+
ro.disconnect();
|
|
356
|
+
c.removeEventListener("pointermove", onMove);
|
|
357
|
+
c.removeEventListener("pointerenter", onEnter);
|
|
358
|
+
c.removeEventListener("pointerleave", onLeave);
|
|
359
|
+
gl.deleteTexture(texture);
|
|
360
|
+
gl.deleteProgram(prog);
|
|
361
|
+
setLoaded(false);
|
|
362
|
+
};
|
|
363
|
+
}, [src, tier, tint]);
|
|
364
|
+
if (tier === 0) {
|
|
365
|
+
return (
|
|
366
|
+
// eslint-disable-next-line @next/next/no-img-element
|
|
367
|
+
/* @__PURE__ */ jsx(
|
|
368
|
+
"img",
|
|
369
|
+
{
|
|
370
|
+
alt: "",
|
|
371
|
+
className: cn(
|
|
372
|
+
"absolute inset-0 h-full w-full object-cover",
|
|
373
|
+
fallbackClassName ?? className
|
|
374
|
+
),
|
|
375
|
+
fetchPriority: "high",
|
|
376
|
+
src,
|
|
377
|
+
style: { mixBlendMode: "overlay", ...style }
|
|
378
|
+
}
|
|
379
|
+
)
|
|
380
|
+
);
|
|
381
|
+
}
|
|
382
|
+
return /* @__PURE__ */ jsx(
|
|
383
|
+
"canvas",
|
|
384
|
+
{
|
|
385
|
+
className: cn(
|
|
386
|
+
"absolute inset-0 h-full w-full transition-opacity duration-500",
|
|
387
|
+
className
|
|
388
|
+
),
|
|
389
|
+
ref: canvasRef,
|
|
390
|
+
style: {
|
|
391
|
+
mixBlendMode: "overlay",
|
|
392
|
+
opacity: loaded ? 1 : 0,
|
|
393
|
+
...style
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
);
|
|
397
|
+
}
|
|
398
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyB1c2VHcHVUaWVyIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlLWdwdS10aWVyJ1xuaW1wb3J0IHsgY24sIGhleFRvUmdiIH0gZnJvbSAnLi4vLi4vdXRpbHMnXG5cbmNvbnN0IE5VTV9CQU5EUyA9IDEyXG5cbmNvbnN0IFZFUlQgPSBgYXR0cmlidXRlIHZlYzIgYTt2YXJ5aW5nIHZlYzIgdlV2O3ZvaWQgbWFpbigpe3ZVdj12ZWMyKGEueCouNSsuNSwuNS1hLnkqLjUpO2dsX1Bvc2l0aW9uPXZlYzQoYSwwLDEpO31gXG5cbmNvbnN0IEZSQUcgPSBgcHJlY2lzaW9uIGhpZ2hwIGZsb2F0O1xudW5pZm9ybSBmbG9hdCB0O1xudW5pZm9ybSB2ZWMyIHIsaW1nU2l6ZSx2ZWw7XG51bmlmb3JtIHNhbXBsZXIyRCB0ZXg7XG51bmlmb3JtIGZsb2F0IGJhbmRzWyR7TlVNX0JBTkRTfV07XG51bmlmb3JtIHZlYzMgdGludDtcbnVuaWZvcm0gZmxvYXQgdGludFN0cmVuZ3RoO1xudmFyeWluZyB2ZWMyIHZVdjtcblxuZmxvYXQgaCh2ZWMyIHApe3JldHVybiBmcmFjdChzaW4oZG90KHAsdmVjMigxMjcuMSwzMTEuNykpKSo0Mzc1OC41NDUzKTt9XG5cbi8vIGNvdmVyLXN0eWxlIFVWOiBjcm9wcyB0aGUgaW1hZ2UgdG8gZmlsbCB0aGUgY2FudmFzLCBjZW50ZXJlZFxudmVjMiBjb3ZlclVWKHZlYzIgdXYpe1xuICBmbG9hdCBjYW52YXNBc3BlY3Q9ci54L3IueTtcbiAgZmxvYXQgaW1nQXNwZWN0PWltZ1NpemUueC9pbWdTaXplLnk7XG4gIHZlYzIgc2NhbGU9Y2FudmFzQXNwZWN0PmltZ0FzcGVjdFxuICAgID92ZWMyKDEuMCxpbWdBc3BlY3QvY2FudmFzQXNwZWN0KVxuICAgIDp2ZWMyKGNhbnZhc0FzcGVjdC9pbWdBc3BlY3QsMS4wKTtcbiAgcmV0dXJuKHV2LTAuNSkqc2NhbGUrMC41O1xufVxuXG52b2lkIG1haW4oKXtcbiAgdmVjMiB1dj1jb3ZlclVWKHZVdik7XG4gIGZsb2F0IHNjYW5ZPWZsb29yKHZVdi55KnIueSk7XG5cbiAgZmxvYXQgYmFuZEY9dlV2LnkqJHtOVU1fQkFORFN9LjA7XG4gIGludCBiYW5kSWR4PWludChmbG9vcihiYW5kRikpO1xuICBmbG9hdCBiYW5kRnJhYz1mcmFjdChiYW5kRik7XG5cbiAgZmxvYXQgc3RyZW5ndGg9MC4wO1xuICBmb3IoaW50IGk9MDtpPCR7TlVNX0JBTkRTfTtpKyspe1xuICAgIGlmKGk9PWJhbmRJZHgpIHN0cmVuZ3RoPWJhbmRzW2ldO1xuICB9XG5cbiAgZmxvYXQgbmVpZ2hib3JTdHI9MC4wO1xuICBpbnQgbmVpZ2hib3JJZHg9YmFuZEZyYWM+LjU/YmFuZElkeCsxOmJhbmRJZHgtMTtcbiAgZm9yKGludCBpPTA7aTwke05VTV9CQU5EU307aSsrKXtcbiAgICBpZihpPT1uZWlnaGJvcklkeCkgbmVpZ2hib3JTdHI9YmFuZHNbaV07XG4gIH1cbiAgZmxvYXQgZWRnZUJsZW5kPWFicyhiYW5kRnJhYy0uNSkqMi4wO1xuICBlZGdlQmxlbmQqPWVkZ2VCbGVuZDtcbiAgc3RyZW5ndGg9bWl4KHN0cmVuZ3RoLG5laWdoYm9yU3RyLGVkZ2VCbGVuZCouMyk7XG5cbiAgZmxvYXQgc3BlZWQ9bGVuZ3RoKHZlbCk7XG4gIGZsb2F0IGRpckJsZW5kPXNtb290aHN0ZXAoMC4wLDAuMDIsc3BlZWQpO1xuICB2ZWMyIGRpcj1zcGVlZD4uMDAwMT92ZWwvc3BlZWQ6dmVjMigwKTtcbiAgZGlyKj1kaXJCbGVuZDtcblxuICBmbG9hdCByb3dTZWVkPWgodmVjMihzY2FuWSxmbG9vcih0KjMuKStmbG9hdChiYW5kSWR4KSo3LikpO1xuICBmbG9hdCByb3dWYXI9bWl4KC40LDEuMCxyb3dTZWVkKTtcblxuICBmbG9hdCB5U21vb3RoPXZVdi55KjYuMCt0KjAuNztcbiAgZmxvYXQgeU5vaXNlPW1peChoKHZlYzIoZmxvb3IoeVNtb290aCksMTMuKSksaCh2ZWMyKGZsb29yKHlTbW9vdGgpKzEuMCwxMy4pKSxzbW9vdGhzdGVwKDAuMCwxLjAsZnJhY3QoeVNtb290aCkpKTtcbiAgZmxvYXQgY29sVmFyPW1peCguNCwxLjAseU5vaXNlKTtcblxuICBmbG9hdCB0ZWFyU2hpZnRYPWRpci54KnN0cmVuZ3RoKnJvd1ZhciowLjE1O1xuICBmbG9hdCB0ZWFyU2hpZnRZPWRpci55KnN0cmVuZ3RoKmNvbFZhciowLjEwO1xuXG4gIGZsb2F0IGJhbmRTZWVkPWgodmVjMihmbG9hdChiYW5kSWR4KSw0Mi4pKTtcbiAgdGVhclNoaWZ0WCs9c3RyZW5ndGgqKC41LWJhbmRTZWVkKSowLjA1O1xuXG4gIGZsb2F0IHlKaXR0ZXI9bWl4KGgodmVjMihmbG9vcih5U21vb3RoKSw3My4pKSxoKHZlYzIoZmxvb3IoeVNtb290aCkrMS4wLDczLikpLHNtb290aHN0ZXAoMC4wLDEuMCxmcmFjdCh5U21vb3RoKSkpO1xuICB0ZWFyU2hpZnRZKz1zdHJlbmd0aCooLjUteUppdHRlcikqMC4wMzU7XG5cbiAgdXYueCs9dGVhclNoaWZ0WDtcbiAgdXYueSs9dGVhclNoaWZ0WTtcblxuICBmbG9hdCBzb3J0R2F0ZT1zdGVwKC41LHN0cmVuZ3RoKSpzdGVwKC40LHJvd1NlZWQpO1xuICB1di54Kz1kaXIueCpzb3J0R2F0ZSpzdHJlbmd0aCowLjAzO1xuICB1di55Kz1kaXIueSpzb3J0R2F0ZSpzdHJlbmd0aCowLjAyO1xuXG4gIGZsb2F0IGNhWD1hYnModGVhclNoaWZ0WCkqMi41K3NvcnRHYXRlKnN0cmVuZ3RoKjAuMDE7XG4gIGZsb2F0IGNhWT1hYnModGVhclNoaWZ0WSkqMi41K3NvcnRHYXRlKnN0cmVuZ3RoKjAuMDE7XG4gIGZsb2F0IGNyPXRleHR1cmUyRCh0ZXgsdmVjMih1di54K2NhWCx1di55K2NhWSkpLnI7XG4gIGZsb2F0IGNnPXRleHR1cmUyRCh0ZXgsdXYpLmc7XG4gIGZsb2F0IGNiPXRleHR1cmUyRCh0ZXgsdmVjMih1di54LWNhWCx1di55LWNhWSkpLmI7XG5cbiAgdmVjMyBjb2w9dmVjMyhjcixjZyxjYik7XG5cbiAgY29sKj0uOTcrLjAzKnNpbih2VXYueSpyLnkqMy4xNDE1OSk7XG5cbiAgZmxvYXQgYmFuZEVkZ2U9c21vb3Roc3RlcCguMDIsLjAsbWluKGJhbmRGcmFjLDEuMC1iYW5kRnJhYykpO1xuICBjb2wrPXZlYzMoYmFuZEVkZ2Uqc3RyZW5ndGgqLjEpO1xuXG4gIGNvbD1taXgoY29sLGNvbCp0aW50LHRpbnRTdHJlbmd0aCk7XG5cbiAgZ2xfRnJhZ0NvbG9yPXZlYzQoY29sLDEuMCk7XG59YFxuXG4vKipcbiAqIENob3Jlb2dyYXBoZWQgbW90aW9uIHBhdHRlcm5zIHVzZWQgd2hlbiBgYXV0b1BsYXlgIGlzIHNldC4gRWFjaCBwYXR0ZXJuXG4gKiByZXR1cm5zIGEgc3ludGhldGljIHBvaW50ZXIgcG9zaXRpb24gaW4gWzAsMV0gYW5kIGEgaG92ZXIgaW50ZW5zaXR5IGluXG4gKiBbMCwxXSBmb3IgdGhlIGN1cnJlbnQgdGltZSAoc2Vjb25kcykuIFRoZXkgZHJpdmUgdGhlIHNoYWRlciB3aXRob3V0XG4gKiByZXF1aXJpbmcgYSByZWFsIHBvaW50ZXIsIHdoaWNoIGlzIHdoYXQgbGV0cyB1cyByZWNvcmQgdGhlIGRpc3RvcnRpb25cbiAqIGFzIGEgR0lGIC8gc2NyZWVuc2hvdCAvIHBvc3Rlci5cbiAqL1xuY29uc3QgQVVUT1BMQVlfUEFUVEVSTlM6IFJlY29yZDxcbiAgQXV0b1BsYXlQYXR0ZXJuLFxuICAodDogbnVtYmVyKSA9PiB7IGhvdmVyOiBudW1iZXI7IG14OiBudW1iZXI7IG15OiBudW1iZXIgfVxuPiA9IHtcbiAgYWdncmVzc2l2ZTogdCA9PiB7XG4gICAgY29uc3QgY3ljbGUgPSAxLjRcbiAgICBjb25zdCBwaGFzZSA9ICh0ICUgY3ljbGUpIC8gY3ljbGVcbiAgICBjb25zdCBzdGFiID0gTWF0aC5leHAoLSgocGhhc2UgLSAwLjE1KSAqKiAyKSAqIDI2MClcbiAgICBjb25zdCBhbmdsZSA9IE1hdGguZmxvb3IodCAvIGN5Y2xlKSAqIDEuMzdcbiAgICBjb25zdCBteCA9IDAuNSArIE1hdGguY29zKGFuZ2xlKSAqIDAuNDIgKiAoc3RhYiArIDAuMTUpXG4gICAgY29uc3QgbXkgPSAwLjUgKyBNYXRoLnNpbihhbmdsZSkgKiAwLjM4ICogKHN0YWIgKyAwLjE1KVxuXG4gICAgcmV0dXJuIHsgaG92ZXI6IDAuNTUgKyBzdGFiICogMC40NSwgbXgsIG15IH1cbiAgfSxcbiAgZ2VudGxlOiB0ID0+ICh7XG4gICAgaG92ZXI6IDAuNDUgKyBNYXRoLnNpbih0ICogMC45KSAqIDAuMSxcbiAgICBteDogMC41ICsgTWF0aC5zaW4odCAqIDAuNSkgKiAwLjI4LFxuICAgIG15OiAwLjUgKyBNYXRoLmNvcyh0ICogMC4zNykgKiAwLjIyXG4gIH0pLFxuICBzbGFzaDogdCA9PiB7XG4gICAgLy8gTG9uZyBicmVhdGggLT4gc3dvcmQgc2xhc2ggLT4gcmVjb2lsIHR3aXRjaCwgcmVwZWF0aW5nLlxuICAgIGNvbnN0IGN5Y2xlID0gMy42XG4gICAgY29uc3QgcGhhc2UgPSAodCAlIGN5Y2xlKSAvIGN5Y2xlXG4gICAgY29uc3Qgc2xhc2ggPSBNYXRoLmV4cCgtKChwaGFzZSAtIDAuMjgpICoqIDIpICogMTgwKVxuICAgIGNvbnN0IG1pY3JvID0gTWF0aC5leHAoLSgocGhhc2UgLSAwLjcpICoqIDIpICogMzQwKVxuXG4gICAgY29uc3QgZHJpZnRYID0gMC41ICsgTWF0aC5zaW4odCAqIDAuNykgKiAwLjE2XG4gICAgY29uc3QgZHJpZnRZID0gMC41NSArIE1hdGguY29zKHQgKiAwLjUpICogMC4xNFxuXG4gICAgLy8gU2xhc2ggdHJhamVjdG9yeTogYm90dG9tLWxlZnQgdXAgaW50byB0aGUgZ2lhbnQncyBjaGVzdCAodG9wLXJpZ2h0KS5cbiAgICBjb25zdCBzbGFzaFggPSAtMC4xNSArIHBoYXNlICogMS41NVxuICAgIGNvbnN0IHNsYXNoWSA9IDAuOTUgLSBwaGFzZSAqIDEuMzVcblxuICAgIGNvbnN0IG14ID0gZHJpZnRYICogKDEgLSBzbGFzaCkgKyBzbGFzaFggKiBzbGFzaFxuICAgIGNvbnN0IG15ID0gZHJpZnRZICogKDEgLSBzbGFzaCkgKyBzbGFzaFkgKiBzbGFzaFxuXG4gICAgcmV0dXJuIHsgaG92ZXI6IDAuNSArIHNsYXNoICogMC41ICsgbWljcm8gKiAwLjM1LCBteCwgbXkgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBJbWFnZURpc3RvcnRpb24oe1xuICBhY3RpdmUgPSB0cnVlLFxuICBhdXRvUGxheSxcbiAgY2xhc3NOYW1lLFxuICBmYWxsYmFja0NsYXNzTmFtZSxcbiAgc3JjLFxuICBzdHlsZSxcbiAgdGludCxcbiAgdGludFN0cmVuZ3RoXG59OiBJbWFnZURpc3RvcnRpb25Qcm9wcykge1xuICBjb25zdCBjYW52YXNSZWYgPSB1c2VSZWY8SFRNTENhbnZhc0VsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHRpZXIgPSB1c2VHcHVUaWVyKClcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IGFjdGl2ZVJlZiA9IHVzZVJlZihhY3RpdmUpXG4gIGFjdGl2ZVJlZi5jdXJyZW50ID0gYWN0aXZlXG4gIGNvbnN0IHRpbnRTdHJlbmd0aFJlZiA9IHVzZVJlZih0aW50U3RyZW5ndGgpXG4gIHRpbnRTdHJlbmd0aFJlZi5jdXJyZW50ID0gdGludFN0cmVuZ3RoXG4gIGNvbnN0IGF1dG9QbGF5UmVmID0gdXNlUmVmKGF1dG9QbGF5KVxuICBhdXRvUGxheVJlZi5jdXJyZW50ID0gYXV0b1BsYXlcblxuICBjb25zdCBzdGF0ZSA9IHVzZVJlZih7XG4gICAgYmFuZFRhcmdldHM6IG5ldyBGbG9hdDMyQXJyYXkoTlVNX0JBTkRTKSxcbiAgICBiYW5kczogbmV3IEZsb2F0MzJBcnJheShOVU1fQkFORFMpLFxuICAgIGhvdmVyVGFyZ2V0OiAwLFxuICAgIGltZ0g6IDEsXG4gICAgaW1nVzogMSxcbiAgICBteDogMC41LFxuICAgIG15OiAwLjUsXG4gICAgcHJldk14OiAwLjUsXG4gICAgcHJldk15OiAwLjUsXG4gICAgdng6IDAsXG4gICAgdnk6IDBcbiAgfSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh0aWVyID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjID0gY2FudmFzUmVmLmN1cnJlbnRcblxuICAgIGlmICghYykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZ2wgPSBjLmdldENvbnRleHQoJ3dlYmdsJylcblxuICAgIGlmICghZ2wpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvbXBpbGUgPSAodHlwZTogbnVtYmVyLCBzb3VyY2U6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgcyA9IGdsLmNyZWF0ZVNoYWRlcih0eXBlKSFcbiAgICAgIGdsLnNoYWRlclNvdXJjZShzLCBzb3VyY2UpXG4gICAgICBnbC5jb21waWxlU2hhZGVyKHMpXG5cbiAgICAgIHJldHVybiBzXG4gICAgfVxuXG4gICAgY29uc3QgcHJvZyA9IGdsLmNyZWF0ZVByb2dyYW0oKSFcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZywgY29tcGlsZShnbC5WRVJURVhfU0hBREVSLCBWRVJUKSlcbiAgICBnbC5hdHRhY2hTaGFkZXIocHJvZywgY29tcGlsZShnbC5GUkFHTUVOVF9TSEFERVIsIEZSQUcpKVxuICAgIGdsLmxpbmtQcm9ncmFtKHByb2cpXG4gICAgZ2wudXNlUHJvZ3JhbShwcm9nKVxuXG4gICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIGdsLmNyZWF0ZUJ1ZmZlcigpKVxuICAgIGdsLmJ1ZmZlckRhdGEoXG4gICAgICBnbC5BUlJBWV9CVUZGRVIsXG4gICAgICBuZXcgRmxvYXQzMkFycmF5KFstMSwgLTEsIDEsIC0xLCAtMSwgMSwgMSwgMV0pLFxuICAgICAgZ2wuU1RBVElDX0RSQVdcbiAgICApXG5cbiAgICBjb25zdCBhID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZywgJ2EnKVxuICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGEpXG4gICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcihhLCAyLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApXG5cbiAgICBjb25zdCB1VCA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9nLCAndCcpXG4gICAgY29uc3QgdVIgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZywgJ3InKVxuICAgIGNvbnN0IHVJbWdTaXplID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2csICdpbWdTaXplJylcbiAgICBjb25zdCB1VmVsID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2csICd2ZWwnKVxuICAgIGNvbnN0IHVUZXggPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZywgJ3RleCcpXG4gICAgY29uc3QgdVRpbnQgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZywgJ3RpbnQnKVxuICAgIGNvbnN0IHVUaW50U3RyZW5ndGggPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZywgJ3RpbnRTdHJlbmd0aCcpXG4gICAgY29uc3QgdUJhbmRzOiAobnVsbCB8IFdlYkdMVW5pZm9ybUxvY2F0aW9uKVtdID0gW11cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTlVNX0JBTkRTOyBpKyspIHtcbiAgICAgIHVCYW5kcy5wdXNoKGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9nLCBgYmFuZHNbJHtpfV1gKSlcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpIVxuICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpXG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9fRURHRSlcbiAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfV1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKVxuICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5MSU5FQVIpXG4gICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLkxJTkVBUilcbiAgICBnbC50ZXhJbWFnZTJEKFxuICAgICAgZ2wuVEVYVFVSRV8yRCxcbiAgICAgIDAsXG4gICAgICBnbC5SR0JBLFxuICAgICAgMSxcbiAgICAgIDEsXG4gICAgICAwLFxuICAgICAgZ2wuUkdCQSxcbiAgICAgIGdsLlVOU0lHTkVEX0JZVEUsXG4gICAgICBuZXcgVWludDhBcnJheShbMCwgMCwgMCwgMjU1XSlcbiAgICApXG5cbiAgICBjb25zdCBpbWcgPSBuZXcgSW1hZ2UoKVxuICAgIGltZy5jcm9zc09yaWdpbiA9ICdhbm9ueW1vdXMnXG5cbiAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgc3RhdGUuY3VycmVudC5pbWdXID0gaW1nLm5hdHVyYWxXaWR0aFxuICAgICAgc3RhdGUuY3VycmVudC5pbWdIID0gaW1nLm5hdHVyYWxIZWlnaHRcbiAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpXG4gICAgICBnbC50ZXhJbWFnZTJEKFxuICAgICAgICBnbC5URVhUVVJFXzJELFxuICAgICAgICAwLFxuICAgICAgICBnbC5SR0JBLFxuICAgICAgICBnbC5SR0JBLFxuICAgICAgICBnbC5VTlNJR05FRF9CWVRFLFxuICAgICAgICBpbWdcbiAgICAgIClcbiAgICAgIHNldExvYWRlZCh0cnVlKVxuICAgIH1cblxuICAgIGltZy5zcmMgPSBzcmNcblxuICAgIGdsLmFjdGl2ZVRleHR1cmUoZ2wuVEVYVFVSRTApXG4gICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4dHVyZSlcbiAgICBnbC51bmlmb3JtMWkodVRleCwgMClcblxuICAgIGNvbnN0IHJlc2l6ZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHJlY3QgPSBjLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBjb25zdCBkcHIgPSBNYXRoLm1pbihkZXZpY2VQaXhlbFJhdGlvLCAyKVxuICAgICAgYy53aWR0aCA9IHJlY3Qud2lkdGggKiBkcHJcbiAgICAgIGMuaGVpZ2h0ID0gcmVjdC5oZWlnaHQgKiBkcHJcbiAgICAgIGdsLnZpZXdwb3J0KDAsIDAsIGMud2lkdGgsIGMuaGVpZ2h0KVxuICAgIH1cblxuICAgIHJlc2l6ZSgpXG4gICAgY29uc3Qgcm8gPSBuZXcgUmVzaXplT2JzZXJ2ZXIocmVzaXplKVxuICAgIHJvLm9ic2VydmUoYylcblxuICAgIGNvbnN0IG9uTW92ZSA9IChlOiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHJlY3QgPSBjLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgICBzdGF0ZS5jdXJyZW50Lm14ID0gKGUuY2xpZW50WCAtIHJlY3QubGVmdCkgLyByZWN0LndpZHRoXG4gICAgICBzdGF0ZS5jdXJyZW50Lm15ID0gKGUuY2xpZW50WSAtIHJlY3QudG9wKSAvIHJlY3QuaGVpZ2h0XG4gICAgfVxuXG4gICAgY29uc3Qgb25FbnRlciA9ICgpID0+IHtcbiAgICAgIHN0YXRlLmN1cnJlbnQuaG92ZXJUYXJnZXQgPSAxXG4gICAgfVxuXG4gICAgY29uc3Qgb25MZWF2ZSA9ICgpID0+IHtcbiAgICAgIHN0YXRlLmN1cnJlbnQuaG92ZXJUYXJnZXQgPSAwXG4gICAgfVxuXG4gICAgLy8gV2hlbiBhdXRvUGxheSBkcml2ZXMgdGhlIGRpc3RvcnRpb24gd2Ugd2FudCB0aGUgcG9zdGVyIHRvIGxvb2tcbiAgICAvLyBhbGl2ZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBwb2ludGVyIGlzIG5lYXIgdGhlIGNhbnZhcywgc28gd2VcbiAgICAvLyBza2lwIHRoZSByZWFsIHBvaW50ZXIgbGlzdGVuZXJzIGVudGlyZWx5LlxuICAgIGlmICghYXV0b1BsYXlSZWYuY3VycmVudCkge1xuICAgICAgYy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIG9uTW92ZSlcbiAgICAgIGMuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmVudGVyJywgb25FbnRlcilcbiAgICAgIGMuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmxlYXZlJywgb25MZWF2ZSlcbiAgICB9XG5cbiAgICBjb25zdCBiYW5kRWFzZVJhdGVzID0gbmV3IEZsb2F0MzJBcnJheShOVU1fQkFORFMpXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IE5VTV9CQU5EUzsgaSsrKSB7XG4gICAgICBiYW5kRWFzZVJhdGVzW2ldID0gMC4wMiArIE1hdGgucmFuZG9tKCkgKiAwLjA2XG4gICAgfVxuXG4gICAgY29uc3QgdGludFZlYzogcmVhZG9ubHkgW251bWJlciwgbnVtYmVyLCBudW1iZXJdID0gdGludFxuICAgICAgPyAoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IFt0ciwgdGcsIHRiXSA9IGhleFRvUmdiKHRpbnQpXG5cbiAgICAgICAgICByZXR1cm4gW3RyIC8gMjU1LCB0ZyAvIDI1NSwgdGIgLyAyNTVdIGFzIGNvbnN0XG4gICAgICAgIH0pKClcbiAgICAgIDogKFsxLCAxLCAxXSBhcyBjb25zdClcblxuICAgIGNvbnN0IHQwID0gcGVyZm9ybWFuY2Uubm93KClcbiAgICBsZXQgcmFmID0gMFxuICAgIGxldCB2aXNpYmxlID0gIWRvY3VtZW50LmhpZGRlblxuICAgIGxldCBpblZpZXcgPSB0cnVlXG5cbiAgICBjb25zdCBsb29wID0gKCkgPT4ge1xuICAgICAgcmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGxvb3ApXG4gICAgICBjb25zdCBzID0gc3RhdGUuY3VycmVudFxuXG4gICAgICBjb25zdCBwYXR0ZXJuID0gYXV0b1BsYXlSZWYuY3VycmVudFxuICAgICAgICA/IEFVVE9QTEFZX1BBVFRFUk5TW2F1dG9QbGF5UmVmLmN1cnJlbnRdXG4gICAgICAgIDogbnVsbFxuXG4gICAgICBpZiAocGF0dGVybikge1xuICAgICAgICBjb25zdCBkcml2ZW4gPSBwYXR0ZXJuKChwZXJmb3JtYW5jZS5ub3coKSAtIHQwKSAvIDFlMylcbiAgICAgICAgcy5teCA9IGRyaXZlbi5teFxuICAgICAgICBzLm15ID0gZHJpdmVuLm15XG4gICAgICAgIHMuaG92ZXJUYXJnZXQgPSBkcml2ZW4uaG92ZXJcbiAgICAgIH1cblxuICAgICAgY29uc3QgZHZ4ID0gcy5teCAtIHMucHJldk14XG4gICAgICBjb25zdCBkdnkgPSBzLm15IC0gcy5wcmV2TXlcbiAgICAgIHMudnggKz0gKGR2eCAqIDggLSBzLnZ4KSAqIDAuMVxuICAgICAgcy52eSArPSAoZHZ5ICogOCAtIHMudnkpICogMC4xXG4gICAgICBzLnByZXZNeCA9IHMubXhcbiAgICAgIHMucHJldk15ID0gcy5teVxuXG4gICAgICBjb25zdCBzcGVlZCA9IE1hdGguc3FydChzLnZ4ICogcy52eCArIHMudnkgKiBzLnZ5KVxuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IE5VTV9CQU5EUzsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGJhbmRDZW50ZXIgPSAoaSArIDAuNSkgLyBOVU1fQkFORFNcbiAgICAgICAgY29uc3QgZGlzdCA9IE1hdGguYWJzKHMubXkgLSBiYW5kQ2VudGVyKVxuICAgICAgICBjb25zdCBwcm94aW1pdHkgPSBNYXRoLm1heCgwLCAxIC0gZGlzdCAvIDAuMylcbiAgICAgICAgY29uc3QgYWN0aXZhdGlvbiA9XG4gICAgICAgICAgcy5ob3ZlclRhcmdldCAqIHByb3hpbWl0eSAqICgwLjQgKyBNYXRoLm1pbihzcGVlZCwgMSkgKiAwLjYpXG4gICAgICAgIHMuYmFuZFRhcmdldHNbaV0gPSBhY3RpdmF0aW9uXG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgTlVNX0JBTkRTOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmF0ZSA9IGJhbmRFYXNlUmF0ZXNbaV0hXG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBzLmJhbmRzW2ldID8/IDBcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gcy5iYW5kVGFyZ2V0c1tpXSA/PyAwXG4gICAgICAgIHMuYmFuZHNbaV0gPSBjdXJyZW50ICsgKHRhcmdldCAtIGN1cnJlbnQpICogcmF0ZVxuXG4gICAgICAgIGlmIChzLmJhbmRzW2ldISA8IDAuMDAxKSB7XG4gICAgICAgICAgcy5iYW5kc1tpXSA9IDBcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBnbC51bmlmb3JtMWYodVQsIChwZXJmb3JtYW5jZS5ub3coKSAtIHQwKSAvIDFlMylcbiAgICAgIGdsLnVuaWZvcm0yZih1UiwgYy53aWR0aCwgYy5oZWlnaHQpXG4gICAgICBnbC51bmlmb3JtMmYodUltZ1NpemUsIHMuaW1nVywgcy5pbWdIKVxuICAgICAgZ2wudW5pZm9ybTJmKHVWZWwsIHMudngsIHMudnkpXG4gICAgICBnbC51bmlmb3JtM2YodVRpbnQsIHRpbnRWZWNbMF0sIHRpbnRWZWNbMV0sIHRpbnRWZWNbMl0pXG5cbiAgICAgIGNvbnN0IHRzID0gdGludFN0cmVuZ3RoUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IGRlZmF1bHRTdHJlbmd0aCA9IHRpbnQgPyAwLjM1IDogMFxuICAgICAgY29uc3QgZGVmYXVsdEluYWN0aXZlID0gdGludCA/IDAuMTUgOiAwXG4gICAgICBnbC51bmlmb3JtMWYoXG4gICAgICAgIHVUaW50U3RyZW5ndGgsXG4gICAgICAgIGFjdGl2ZVJlZi5jdXJyZW50XG4gICAgICAgICAgPyAodHM/LmFjdGl2ZSA/PyBkZWZhdWx0U3RyZW5ndGgpXG4gICAgICAgICAgOiAodHM/LmluYWN0aXZlID8/IGRlZmF1bHRJbmFjdGl2ZSlcbiAgICAgIClcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBOVU1fQkFORFM7IGkrKykge1xuICAgICAgICBnbC51bmlmb3JtMWYodUJhbmRzW2ldISwgcy5iYW5kc1tpXSEpXG4gICAgICB9XG5cbiAgICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpXG4gICAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFX1NUUklQLCAwLCA0KVxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuICAgICAgaWYgKHZpc2libGUgJiYgaW5WaWV3ICYmICFyYWYpIHtcbiAgICAgICAgcmFmID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGxvb3ApXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcCA9ICgpID0+IHtcbiAgICAgIGlmIChyYWYpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmKVxuICAgICAgICByYWYgPSAwXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25WaXNpYmlsaXR5ID0gKCkgPT4ge1xuICAgICAgdmlzaWJsZSA9ICFkb2N1bWVudC5oaWRkZW5cbiAgICAgIHZpc2libGUgPyBzdGFydCgpIDogc3RvcCgpXG4gICAgfVxuXG4gICAgY29uc3QgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICBlbnRyaWVzID0+IHtcbiAgICAgICAgaW5WaWV3ID0gZW50cmllcy5zb21lKGUgPT4gZS5pc0ludGVyc2VjdGluZylcbiAgICAgICAgaW5WaWV3ID8gc3RhcnQoKSA6IHN0b3AoKVxuICAgICAgfSxcbiAgICAgIHsgdGhyZXNob2xkOiAwIH1cbiAgICApXG5cbiAgICBpby5vYnNlcnZlKGMpXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uVmlzaWJpbGl0eSlcblxuICAgIHN0YXJ0KClcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBzdG9wKClcbiAgICAgIGlvLmRpc2Nvbm5lY3QoKVxuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uVmlzaWJpbGl0eSlcbiAgICAgIHJvLmRpc2Nvbm5lY3QoKVxuICAgICAgYy5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIG9uTW92ZSlcbiAgICAgIGMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmVudGVyJywgb25FbnRlcilcbiAgICAgIGMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcmxlYXZlJywgb25MZWF2ZSlcbiAgICAgIGdsLmRlbGV0ZVRleHR1cmUodGV4dHVyZSlcbiAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZylcbiAgICAgIHNldExvYWRlZChmYWxzZSlcbiAgICB9XG4gICAgLy8gYXV0b1BsYXkgaXMgaW50ZW50aW9uYWxseSBvbWl0dGVkIHNvIHRvZ2dsaW5nIGl0IGF0IHJ1bnRpbWUgZG9lc24ndFxuICAgIC8vIHRlYXIgZG93biB0aGUgc2hhZGVyIHBpcGVsaW5lLiBUaGUgcmVmLWRyaXZlbiBsb29wIHJlYWRzIHRoZSBsaXZlXG4gICAgLy8gdmFsdWUgZWFjaCBmcmFtZSwgc28gbGlzdGVuZXIgYXR0YWNoL2RldGFjaCBpcyBoYW5kbGVkIG9uY2Ugb24gbW91bnQuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB9LCBbc3JjLCB0aWVyLCB0aW50XSlcblxuICBpZiAodGllciA9PT0gMCkge1xuICAgIHJldHVybiAoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQG5leHQvbmV4dC9uby1pbWctZWxlbWVudFxuICAgICAgPGltZ1xuICAgICAgICBhbHQ9XCJcIlxuICAgICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICAgICdhYnNvbHV0ZSBpbnNldC0wIGgtZnVsbCB3LWZ1bGwgb2JqZWN0LWNvdmVyJyxcbiAgICAgICAgICBmYWxsYmFja0NsYXNzTmFtZSA/PyBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgZmV0Y2hQcmlvcml0eT1cImhpZ2hcIlxuICAgICAgICBzcmM9e3NyY31cbiAgICAgICAgc3R5bGU9e3sgbWl4QmxlbmRNb2RlOiAnb3ZlcmxheScsIC4uLnN0eWxlIH19XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGNhbnZhc1xuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2Fic29sdXRlIGluc2V0LTAgaC1mdWxsIHctZnVsbCB0cmFuc2l0aW9uLW9wYWNpdHkgZHVyYXRpb24tNTAwJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgcmVmPXtjYW52YXNSZWZ9XG4gICAgICBzdHlsZT17e1xuICAgICAgICBtaXhCbGVuZE1vZGU6ICdvdmVybGF5JyxcbiAgICAgICAgb3BhY2l0eTogbG9hZGVkID8gMSA6IDAsXG4gICAgICAgIC4uLnN0eWxlXG4gICAgICB9fVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHR5cGUgQXV0b1BsYXlQYXR0ZXJuID0gJ2FnZ3Jlc3NpdmUnIHwgJ2dlbnRsZScgfCAnc2xhc2gnXG5cbmludGVyZmFjZSBJbWFnZURpc3RvcnRpb25Qcm9wcyB7XG4gIGFjdGl2ZT86IGJvb2xlYW5cbiAgLyoqXG4gICAqIERyaXZlIHRoZSBkaXN0b3J0aW9uIHdpdGggYSBjaG9yZW9ncmFwaGVkIG1vdGlvbiBwYXR0ZXJuIGluc3RlYWQgb2ZcbiAgICogd2FpdGluZyBmb3IgYSByZWFsIHBvaW50ZXIuIFVzZWZ1bCBmb3IgcG9zdGVycywgc29jaWFsIGNsaXBzLCBhbmQgYW55XG4gICAqIGNvbnRleHQgd2hlcmUgdGhlIGltYWdlIG5lZWRzIHRvIGZlZWwgYWxpdmUgb24gaXRzIG93bi5cbiAgICovXG4gIGF1dG9QbGF5PzogQXV0b1BsYXlQYXR0ZXJuXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBmYWxsYmFja0NsYXNzTmFtZT86IHN0cmluZ1xuICBzcmM6IHN0cmluZ1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXNcbiAgdGludD86IHN0cmluZ1xuICB0aW50U3RyZW5ndGg/OiB7IGFjdGl2ZTogbnVtYmVyOyBpbmFjdGl2ZTogbnVtYmVyIH1cbn1cbiJd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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function Input({ className, ...props }: React.InputHTMLAttributes<HTMLInputElement>): import("react").JSX.Element;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../utils/index.js";
|
|
3
|
+
export function Input({
|
|
4
|
+
className,
|
|
5
|
+
...props
|
|
6
|
+
}) {
|
|
7
|
+
return /* @__PURE__ */ jsx(
|
|
8
|
+
"input",
|
|
9
|
+
{
|
|
10
|
+
className: cn(
|
|
11
|
+
"flex h-9 w-full border border-midground/15 bg-background/40 px-3 py-1 font-courier text-sm transition-colors",
|
|
12
|
+
"placeholder:text-midground/50",
|
|
13
|
+
"focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-midground/30 focus-visible:border-midground/25",
|
|
14
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
15
|
+
className
|
|
16
|
+
),
|
|
17
|
+
...props
|
|
18
|
+
}
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIElucHV0KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuSW5wdXRIVE1MQXR0cmlidXRlczxIVE1MSW5wdXRFbGVtZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxpbnB1dFxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZsZXggaC05IHctZnVsbCBib3JkZXIgYm9yZGVyLW1pZGdyb3VuZC8xNSBiZy1iYWNrZ3JvdW5kLzQwIHB4LTMgcHktMSBmb250LWNvdXJpZXIgdGV4dC1zbSB0cmFuc2l0aW9uLWNvbG9ycycsXG4gICAgICAgICdwbGFjZWhvbGRlcjp0ZXh0LW1pZGdyb3VuZC81MCcsXG4gICAgICAgICdmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMSBmb2N1cy12aXNpYmxlOnJpbmctbWlkZ3JvdW5kLzMwIGZvY3VzLXZpc2libGU6Ym9yZGVyLW1pZGdyb3VuZC8yNScsXG4gICAgICAgICdkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGlzYWJsZWQ6b3BhY2l0eS01MCcsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbiJdLAogICJtYXBwaW5ncyI6ICJBQU9JO0FBUEosU0FBUyxVQUFVO0FBRVosZ0JBQVMsTUFBTTtBQUFBLEVBQ3BCO0FBQUEsRUFDQSxHQUFHO0FBQ0wsR0FBZ0Q7QUFDOUMsU0FDRTtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0MsV0FBVztBQUFBLFFBQ1Q7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLE1BQ0MsR0FBRztBQUFBO0FBQUEsRUFDTjtBQUVKOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function Label({ className, ...props }: React.LabelHTMLAttributes<HTMLLabelElement>): import("react").JSX.Element;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "../../utils/index.js";
|
|
3
|
+
export function Label({
|
|
4
|
+
className,
|
|
5
|
+
...props
|
|
6
|
+
}) {
|
|
7
|
+
return /* @__PURE__ */ jsx(
|
|
8
|
+
"label",
|
|
9
|
+
{
|
|
10
|
+
className: cn(
|
|
11
|
+
"font-mondwest text-xs tracking-[0.1em] uppercase leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70",
|
|
12
|
+
className
|
|
13
|
+
),
|
|
14
|
+
...props
|
|
15
|
+
}
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiPHN0ZGluPiJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgY24gfSBmcm9tICcuLi8uLi91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIExhYmVsKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogUmVhY3QuTGFiZWxIVE1MQXR0cmlidXRlczxIVE1MTGFiZWxFbGVtZW50Pikge1xuICByZXR1cm4gKFxuICAgIDxsYWJlbFxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgJ2ZvbnQtbW9uZHdlc3QgdGV4dC14cyB0cmFja2luZy1bMC4xZW1dIHVwcGVyY2FzZSBsZWFkaW5nLW5vbmUgcGVlci1kaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgcGVlci1kaXNhYmxlZDpvcGFjaXR5LTcwJyxcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQU9JO0FBUEosU0FBUyxVQUFVO0FBRVosZ0JBQVMsTUFBTTtBQUFBLEVBQ3BCO0FBQUEsRUFDQSxHQUFHO0FBQ0wsR0FBZ0Q7QUFDOUMsU0FDRTtBQUFBLElBQUM7QUFBQTtBQUFBLE1BQ0MsV0FBVztBQUFBLFFBQ1Q7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLE1BQ0MsR0FBRztBQUFBO0FBQUEsRUFDTjtBQUVKOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function LevaClient(): import("react").JSX.Element;
|