From def80b2816105794d467d7155baa5981a59f61f4 Mon Sep 17 00:00:00 2001 From: Riddhiman007 <91105040+Ridhiman007@users.noreply.github.com> Date: Thu, 6 Mar 2025 09:41:16 +0530 Subject: [PATCH 1/2] default --- .eslintrc.json | 8 + .gitignore | 40 + .vercelignore | 1 + CONTRIBUTING.md | 78 + LICENCE.md | 22 + README.md | 21 + app/docs/accordion/accordion-basic.tsx | 69 + app/docs/accordion/accordion-icons.tsx | 85 + app/docs/accordion/accordion-variant.tsx | 98 + app/docs/accordion/page.mdx | 109 + .../animated-card-background-hover.tsx | 63 + .../animated-tabs-hover.tsx | 31 + .../animated-background/animated-tabs.tsx | 50 + app/docs/animated-background/page.mdx | 87 + .../animated-background/segmented-control.tsx | 30 + .../animated-group-custom-variants-2.tsx | 63 + .../animated-group-custom-variants.tsx | 54 + .../animated-group/animated-group-preset.tsx | 31 + app/docs/animated-group/page.mdx | 87 + .../animated-number/animated-number-basic.tsx | 33 + .../animated-number-counter.tsx | 33 + .../animated-number-in-view.tsx | 27 + app/docs/animated-number/page.mdx | 80 + app/docs/border-trail/border-trail-card-1.tsx | 26 + app/docs/border-trail/border-trail-card-2.tsx | 49 + .../border-trail/border-trail-textarea.tsx | 13 + app/docs/border-trail/page.mdx | 79 + app/docs/carousel/carousel-basic.tsx | 40 + .../carousel/carousel-custom-indicator.tsx | 46 + app/docs/carousel/carousel-custom-sizes.tsx | 53 + app/docs/carousel/carousel-spacing.tsx | 57 + app/docs/carousel/page.mdx | 136 + app/docs/cursor/cursor-1.tsx | 70 + app/docs/cursor/cursor-2.tsx | 65 + app/docs/cursor/cursor-3.tsx | 34 + app/docs/cursor/page.mdx | 80 + app/docs/dialog/dialog-basic.tsx | 47 + app/docs/dialog/dialog-controlled.tsx | 52 + app/docs/dialog/dialog-custom-backdrop.tsx | 47 + app/docs/dialog/dialog-custom-exit.tsx | 72 + .../dialog-custom-variants-transtion.tsx | 67 + app/docs/dialog/page.mdx | 149 + app/docs/disclosure/disclosure-basic.tsx | 30 + app/docs/disclosure/disclosure-card.tsx | 81 + app/docs/disclosure/page.mdx | 92 + app/docs/dock/apple-style-dock.tsx | 81 + app/docs/dock/page.mdx | 91 + app/docs/glow-effect/glow-effect-button.tsx | 19 + .../glow-effect-card-background.tsx | 32 + .../glow-effect/glow-effect-card-mode.tsx | 50 + app/docs/glow-effect/page.mdx | 85 + .../image-comparison-basic.tsx | 23 + .../image-comparison-custom-slider.tsx | 25 + .../image-comparison-hover.tsx | 26 + .../image-comparison-spring.tsx | 29 + app/docs/image-comparison/page.mdx | 105 + app/docs/in-view/in-view-basic-multiple.tsx | 85 + app/docs/in-view/in-view-basic.tsx | 31 + app/docs/in-view/in-view-images-grid.tsx | 63 + app/docs/in-view/page.mdx | 89 + .../infinite-slider/infinite-slider-basic.tsx | 38 + .../infinite-slider-hover-speed.tsx | 38 + .../infinite-slider-vertical.tsx | 72 + app/docs/infinite-slider/page.mdx | 82 + app/docs/installation/page.mdx | 44 + app/docs/layout.tsx | 153 + app/docs/magnetic/magnetic-basic.tsx | 14 + app/docs/magnetic/magnetic-nested.tsx | 28 + app/docs/magnetic/page.mdx | 74 + .../morphing-dialog-basic-1.tsx | 104 + .../morphing-dialog-basic-2.tsx | 109 + .../morphing-dialog/morphing-dialog-image.tsx | 50 + app/docs/morphing-dialog/page.mdx | 136 + .../morphing-popover-basic.tsx | 77 + ...ing-popover-custom-transition-variants.tsx | 88 + .../morphing-popover-textarea.tsx | 87 + app/docs/morphing-popover/page.mdx | 99 + app/docs/navigation.ts | 196 + app/docs/page.mdx | 23 + app/docs/progressive-blur/page.mdx | 81 + .../progressive-blur-basic.tsx | 24 + .../progressive-blur-hover.tsx | 47 + .../progressive-blur-slider.tsx | 48 + app/docs/scroll-progress/page.mdx | 82 + .../scroll-progress-basic-1.tsx | 35 + .../scroll-progress-basic-2.tsx | 50 + .../scroll-progress-basic-3.tsx | 40 + app/docs/sliding-number/clock.tsx | 28 + app/docs/sliding-number/page.mdx | 82 + app/docs/sliding-number/sliding-basic.tsx | 35 + app/docs/sliding-number/sliding-slider.tsx | 26 + app/docs/spinning-text/page.mdx | 90 + .../spinning-text/spinning-text-basic.tsx | 13 + .../spinning-text-custom-transition.tsx | 18 + .../spinning-text-custom-variants.tsx | 42 + app/docs/spotlight/page.mdx | 88 + app/docs/spotlight/spotlight-basic.tsx | 35 + app/docs/spotlight/spotlight-border.tsx | 13 + app/docs/spotlight/spotlight-custom-color.tsx | 42 + app/docs/text-effect/page.mdx | 140 + .../text-effect/text-effect-custom-delay.tsx | 53 + app/docs/text-effect/text-effect-exit.tsx | 61 + app/docs/text-effect/text-effect-line.tsx | 37 + app/docs/text-effect/text-effect-per-char.tsx | 9 + app/docs/text-effect/text-effect-per-word.tsx | 9 + app/docs/text-effect/text-effect-preset.tsx | 9 + app/docs/text-effect/text-effect-speed.tsx | 9 + app/docs/text-effect/text-effect-variants.tsx | 52 + app/docs/text-loop/page.mdx | 88 + app/docs/text-loop/text-loop-basic.tsx | 12 + .../text-loop-custom-variants-transition.tsx | 43 + app/docs/text-loop/text-loop-on-index.tsx | 50 + app/docs/text-morph/page.mdx | 77 + app/docs/text-morph/text-morph-button.tsx | 16 + app/docs/text-morph/text-morph-input.tsx | 22 + app/docs/text-roll/page.mdx | 90 + app/docs/text-roll/text-roll-basic.tsx | 9 + .../text-roll-custom-transition-delay.tsx | 28 + .../text-roll/text-roll-custom-variants.tsx | 21 + app/docs/text-scramble/page.mdx | 88 + .../text-scramble/text-scramble-basic.tsx | 9 + .../text-scramble-custom-char-duration.tsx | 13 + .../text-scramble-custom-trigger.tsx | 25 + app/docs/text-shimmer-wave/page.mdx | 73 + .../text-shimmer-wave-basic.tsx | 9 + .../text-shimmer-wave-color.tsx | 16 + app/docs/text-shimmer/page.mdx | 78 + app/docs/text-shimmer/text-shimmer-basic.tsx | 9 + app/docs/text-shimmer/text-shimmer-color.tsx | 12 + app/docs/tilt/page.mdx | 79 + app/docs/tilt/tilt-card-1.tsx | 26 + app/docs/tilt/tilt-spotlight.tsx | 44 + app/docs/toolbar-dynamic/page.mdx | 21 + app/docs/toolbar-expandable/page.mdx | 22 + app/docs/transition-panel/page.mdx | 74 + .../transition-panel-card.tsx | 145 + .../transition-panel-tabs.tsx | 68 + app/globals.css | 179 + app/icon.ico | Bin 0 -> 7170 bytes app/layout.tsx | 44 + app/opengraph-image.alt | 1 + app/opengraph-image.jpg | Bin 0 -> 35379 bytes app/page.tsx | 229 + app/showcase/page.tsx | 63 + app/twitter-image.alt | 1 + app/twitter-image.jpg | Bin 0 -> 35379 bytes bun.lockb | Bin 0 -> 284872 bytes cli/.gitignore | 2 + cli/README.md | 75 + cli/package-lock.json | 699 ++ cli/package.json | 39 + cli/src/index.ts | 258 + cli/tsconfig.json | 13 + components.json | 21 + components/core/accordion.tsx | 197 + components/core/animated-background.tsx | 90 + components/core/animated-group.tsx | 142 + components/core/animated-number.tsx | 35 + components/core/border-trail.tsx | 43 + components/core/carousel.tsx | 351 + components/core/cursor.tsx | 134 + components/core/dialog.tsx | 335 + components/core/disclosure.tsx | 191 + components/core/dock.tsx | 224 + components/core/glow-effect.tsx | 151 + components/core/image-comparison.tsx | 147 + components/core/in-view.tsx | 50 + components/core/infinite-slider.tsx | 112 + components/core/magnetic.tsx | 112 + components/core/morphing-dialog.tsx | 423 + components/core/morphing-popover.tsx | 224 + components/core/progressive-blur.tsx | 62 + components/core/scroll-progress.tsx | 42 + components/core/sliding-number.tsx | 122 + components/core/spinning-text.tsx | 104 + components/core/spotlight.tsx | 85 + components/core/text-effect.tsx | 291 + components/core/text-loop.tsx | 72 + components/core/text-morph.tsx | 73 + components/core/text-roll.tsx | 102 + components/core/text-scramble.tsx | 85 + components/core/text-shimmer-wave.tsx | 89 + components/core/text-shimmer.tsx | 55 + components/core/tilt.tsx | 92 + components/core/toolbar-dynamic.tsx | 90 + components/core/toolbar-expandable.tsx | 186 + components/core/transition-panel.tsx | 48 + components/ui/button.tsx | 58 + components/ui/input.tsx | 22 + components/ui/label.tsx | 26 + components/ui/tooltip.tsx | 61 + components/website/card-example-landing.tsx | 46 + components/website/code-block.tsx | 33 + components/website/code-preview.tsx | 50 + components/website/code-renderer.tsx | 19 + components/website/component-code-preview.tsx | 51 + components/website/component-preview.tsx | 62 + components/website/dropdown-menu.tsx | 198 + components/website/header.tsx | 86 + components/website/icons/github.tsx | 13 + .../website/icons/motion-primitives-logo.tsx | 26 + components/website/icons/shadcn-logo.tsx | 39 + components/website/icons/x.tsx | 13 + components/website/installation-cli.tsx | 122 + components/website/launch-banner.tsx | 14 + components/website/open-in-v0.tsx | 38 + components/website/scroll-area.tsx | 46 + components/website/table-of-contents.tsx | 79 + components/website/tabs.tsx | 115 + components/website/theme-provider.tsx | 9 + components/website/theme-switch.tsx | 44 + hooks/useClickOutside.tsx | 26 + hooks/usePreventScroll.tsx | 362 + lib/browser.ts | 38 + lib/code.ts | 7 + lib/custom-theme.ts | 9 + lib/shiki.ts | 20 + lib/theme-css-variables.ts | 276 + lib/utils.ts | 6 + mdx-components.tsx | 141 + next.config.mjs | 18 + package-lock.json | 9558 +++++++++++++++++ package.json | 55 + postcss.config.mjs | 8 + prettier.config.js | 9 + public/apple_music_logo.svg | 11 + public/c/accordion.json | 21 + public/c/animated-background.json | 21 + public/c/animated-group.json | 21 + public/c/animated-number.json | 21 + public/c/border-trail.json | 21 + public/c/carousel.json | 21 + public/c/cursor.json | 21 + public/c/dialog.json | 26 + public/c/disclosure.json | 21 + public/c/dock.json | 21 + public/c/glow-effect.json | 21 + public/c/image-comparison.json | 21 + public/c/in-view.json | 21 + public/c/infinite-slider.json | 21 + public/c/magnetic.json | 21 + public/c/morphing-dialog.json | 26 + public/c/morphing-popover.json | 26 + public/c/progressive-blur.json | 21 + public/c/registry.json | 555 + public/c/scroll-progress.json | 21 + public/c/sliding-number.json | 21 + public/c/spinning-text.json | 21 + public/c/spotlight.json | 21 + public/c/text-effect.json | 21 + public/c/text-loop.json | 21 + public/c/text-morph.json | 21 + public/c/text-roll.json | 21 + public/c/text-scramble.json | 21 + public/c/text-shimmer-wave.json | 21 + public/c/text-shimmer.json | 21 + public/c/tilt.json | 21 + public/c/toolbar-dynamic.json | 26 + public/c/toolbar-expandable.json | 26 + public/c/transition-panel.json | 21 + public/chrome_logo.svg | 47 + public/e/accordion-basic.json | 18 + public/e/accordion-icons.json | 18 + public/e/accordion-variant.json | 18 + public/e/animated-card-background-hover.json | 18 + .../e/animated-group-custom-variants-2.json | 18 + public/e/animated-group-custom-variants.json | 18 + public/e/animated-group-preset.json | 18 + public/e/animated-number-basic.json | 18 + public/e/animated-number-counter.json | 18 + public/e/animated-number-in-view.json | 18 + public/e/animated-tabs-hover.json | 18 + public/e/animated-tabs.json | 18 + public/e/apple-style-dock.json | 18 + public/e/border-trail-card-1.json | 18 + public/e/border-trail-card-2.json | 18 + public/e/border-trail-textarea.json | 18 + public/e/carousel-basic.json | 18 + public/e/carousel-custom-indicator.json | 18 + public/e/carousel-custom-sizes.json | 18 + public/e/carousel-spacing.json | 18 + public/e/clock.json | 18 + public/e/cursor-1.json | 18 + public/e/cursor-2.json | 18 + public/e/cursor-3.json | 18 + public/e/dialog-basic.json | 23 + public/e/dialog-controlled.json | 23 + public/e/dialog-custom-backdrop.json | 23 + public/e/dialog-custom-exit.json | 23 + .../e/dialog-custom-variants-transtion.json | 23 + public/e/disclosure-basic.json | 18 + public/e/disclosure-card.json | 18 + public/e/glow-effect-button.json | 13 + public/e/glow-effect-card-background.json | 18 + public/e/glow-effect-card-mode.json | 23 + public/e/image-comparison-basic.json | 18 + public/e/image-comparison-custom-slider.json | 18 + public/e/image-comparison-hover.json | 18 + public/e/image-comparison-spring.json | 18 + public/e/in-view-basic-multiple.json | 18 + public/e/in-view-basic.json | 18 + public/e/in-view-images-grid.json | 18 + public/e/infinite-slider-basic.json | 18 + public/e/infinite-slider-hover-speed.json | 18 + public/e/infinite-slider-vertical.json | 18 + public/e/magnetic-basic.json | 18 + public/e/magnetic-nested.json | 18 + public/e/morphing-dialog-basic-1.json | 23 + public/e/morphing-dialog-basic-2.json | 23 + public/e/morphing-dialog-image.json | 23 + public/e/morphing-popover-basic.json | 23 + ...ng-popover-custom-transition-variants.json | 23 + public/e/morphing-popover-textarea.json | 23 + public/e/progressive-blur-basic.json | 18 + public/e/progressive-blur-hover.json | 18 + public/e/progressive-blur-slider.json | 18 + public/e/scroll-progress-basic-1.json | 18 + public/e/scroll-progress-basic-2.json | 18 + public/e/scroll-progress-basic-3.json | 18 + public/e/segmented-control.json | 18 + public/e/sliding-basic.json | 18 + public/e/sliding-slider.json | 18 + public/e/spinning-text-basic.json | 18 + public/e/spinning-text-custom-transition.json | 18 + public/e/spinning-text-custom-variants.json | 18 + public/e/spotlight-basic.json | 18 + public/e/spotlight-border.json | 18 + public/e/spotlight-custom-color.json | 18 + public/e/text-effect-custom-delay.json | 18 + public/e/text-effect-exit.json | 18 + public/e/text-effect-line.json | 18 + public/e/text-effect-per-char.json | 18 + public/e/text-effect-per-word.json | 18 + public/e/text-effect-preset.json | 18 + public/e/text-effect-speed.json | 18 + public/e/text-effect-variants.json | 18 + public/e/text-loop-basic.json | 18 + .../text-loop-custom-variants-transition.json | 18 + public/e/text-loop-on-index.json | 18 + public/e/text-morph-button.json | 18 + public/e/text-morph-input.json | 18 + public/e/text-roll-basic.json | 18 + .../e/text-roll-custom-transition-delay.json | 18 + public/e/text-roll-custom-variants.json | 18 + public/e/text-scramble-basic.json | 18 + .../e/text-scramble-custom-char-duration.json | 18 + public/e/text-scramble-custom-trigger.json | 18 + public/e/text-shimmer-basic.json | 18 + public/e/text-shimmer-color.json | 18 + public/e/text-shimmer-wave-basic.json | 18 + public/e/text-shimmer-wave-color.json | 18 + public/e/tilt-card-1.json | 18 + public/e/tilt-spotlight.json | 23 + public/e/transition-panel-card.json | 18 + public/e/transition-panel-tabs.json | 18 + public/eb-27-lamp-edouard-wilfrid-buquet.jpg | Bin 0 -> 35667 bytes public/gucci_logo.svg | 7 + public/h/useClickOutside.json | 11 + public/h/usePreventScroll.json | 11 + public/jquery_logo.svg | 12 + public/mp_dark.png | Bin 0 -> 84305 bytes public/mp_light.png | Bin 0 -> 80325 bytes public/national_geographic_logo.svg | 8 + public/nintendo_logo.svg | 10 + public/prada_logo.svg | 7 + public/sony_logo.svg | 8 + public/strava_logo.svg | 4 + scripts/registry-build.ts | 194 + scripts/registry-components.ts | 320 + scripts/registry-examples.ts | 1521 +++ scripts/registry-hooks.ts | 12 + scripts/registry-schema.ts | 36 + tsconfig.json | 26 + 373 files changed, 30752 insertions(+) create mode 100644 .eslintrc.json create mode 100644 .gitignore create mode 100644 .vercelignore create mode 100644 CONTRIBUTING.md create mode 100644 LICENCE.md create mode 100644 README.md create mode 100644 app/docs/accordion/accordion-basic.tsx create mode 100644 app/docs/accordion/accordion-icons.tsx create mode 100644 app/docs/accordion/accordion-variant.tsx create mode 100644 app/docs/accordion/page.mdx create mode 100644 app/docs/animated-background/animated-card-background-hover.tsx create mode 100644 app/docs/animated-background/animated-tabs-hover.tsx create mode 100644 app/docs/animated-background/animated-tabs.tsx create mode 100644 app/docs/animated-background/page.mdx create mode 100644 app/docs/animated-background/segmented-control.tsx create mode 100644 app/docs/animated-group/animated-group-custom-variants-2.tsx create mode 100644 app/docs/animated-group/animated-group-custom-variants.tsx create mode 100644 app/docs/animated-group/animated-group-preset.tsx create mode 100644 app/docs/animated-group/page.mdx create mode 100644 app/docs/animated-number/animated-number-basic.tsx create mode 100644 app/docs/animated-number/animated-number-counter.tsx create mode 100644 app/docs/animated-number/animated-number-in-view.tsx create mode 100644 app/docs/animated-number/page.mdx create mode 100644 app/docs/border-trail/border-trail-card-1.tsx create mode 100644 app/docs/border-trail/border-trail-card-2.tsx create mode 100644 app/docs/border-trail/border-trail-textarea.tsx create mode 100644 app/docs/border-trail/page.mdx create mode 100644 app/docs/carousel/carousel-basic.tsx create mode 100644 app/docs/carousel/carousel-custom-indicator.tsx create mode 100644 app/docs/carousel/carousel-custom-sizes.tsx create mode 100644 app/docs/carousel/carousel-spacing.tsx create mode 100644 app/docs/carousel/page.mdx create mode 100644 app/docs/cursor/cursor-1.tsx create mode 100644 app/docs/cursor/cursor-2.tsx create mode 100644 app/docs/cursor/cursor-3.tsx create mode 100644 app/docs/cursor/page.mdx create mode 100644 app/docs/dialog/dialog-basic.tsx create mode 100644 app/docs/dialog/dialog-controlled.tsx create mode 100644 app/docs/dialog/dialog-custom-backdrop.tsx create mode 100644 app/docs/dialog/dialog-custom-exit.tsx create mode 100644 app/docs/dialog/dialog-custom-variants-transtion.tsx create mode 100644 app/docs/dialog/page.mdx create mode 100644 app/docs/disclosure/disclosure-basic.tsx create mode 100644 app/docs/disclosure/disclosure-card.tsx create mode 100644 app/docs/disclosure/page.mdx create mode 100644 app/docs/dock/apple-style-dock.tsx create mode 100644 app/docs/dock/page.mdx create mode 100644 app/docs/glow-effect/glow-effect-button.tsx create mode 100644 app/docs/glow-effect/glow-effect-card-background.tsx create mode 100644 app/docs/glow-effect/glow-effect-card-mode.tsx create mode 100644 app/docs/glow-effect/page.mdx create mode 100644 app/docs/image-comparison/image-comparison-basic.tsx create mode 100644 app/docs/image-comparison/image-comparison-custom-slider.tsx create mode 100644 app/docs/image-comparison/image-comparison-hover.tsx create mode 100644 app/docs/image-comparison/image-comparison-spring.tsx create mode 100644 app/docs/image-comparison/page.mdx create mode 100644 app/docs/in-view/in-view-basic-multiple.tsx create mode 100644 app/docs/in-view/in-view-basic.tsx create mode 100644 app/docs/in-view/in-view-images-grid.tsx create mode 100644 app/docs/in-view/page.mdx create mode 100644 app/docs/infinite-slider/infinite-slider-basic.tsx create mode 100644 app/docs/infinite-slider/infinite-slider-hover-speed.tsx create mode 100644 app/docs/infinite-slider/infinite-slider-vertical.tsx create mode 100644 app/docs/infinite-slider/page.mdx create mode 100644 app/docs/installation/page.mdx create mode 100644 app/docs/layout.tsx create mode 100644 app/docs/magnetic/magnetic-basic.tsx create mode 100644 app/docs/magnetic/magnetic-nested.tsx create mode 100644 app/docs/magnetic/page.mdx create mode 100644 app/docs/morphing-dialog/morphing-dialog-basic-1.tsx create mode 100644 app/docs/morphing-dialog/morphing-dialog-basic-2.tsx create mode 100644 app/docs/morphing-dialog/morphing-dialog-image.tsx create mode 100644 app/docs/morphing-dialog/page.mdx create mode 100644 app/docs/morphing-popover/morphing-popover-basic.tsx create mode 100644 app/docs/morphing-popover/morphing-popover-custom-transition-variants.tsx create mode 100644 app/docs/morphing-popover/morphing-popover-textarea.tsx create mode 100644 app/docs/morphing-popover/page.mdx create mode 100644 app/docs/navigation.ts create mode 100644 app/docs/page.mdx create mode 100644 app/docs/progressive-blur/page.mdx create mode 100644 app/docs/progressive-blur/progressive-blur-basic.tsx create mode 100644 app/docs/progressive-blur/progressive-blur-hover.tsx create mode 100644 app/docs/progressive-blur/progressive-blur-slider.tsx create mode 100644 app/docs/scroll-progress/page.mdx create mode 100644 app/docs/scroll-progress/scroll-progress-basic-1.tsx create mode 100644 app/docs/scroll-progress/scroll-progress-basic-2.tsx create mode 100644 app/docs/scroll-progress/scroll-progress-basic-3.tsx create mode 100644 app/docs/sliding-number/clock.tsx create mode 100644 app/docs/sliding-number/page.mdx create mode 100644 app/docs/sliding-number/sliding-basic.tsx create mode 100644 app/docs/sliding-number/sliding-slider.tsx create mode 100644 app/docs/spinning-text/page.mdx create mode 100644 app/docs/spinning-text/spinning-text-basic.tsx create mode 100644 app/docs/spinning-text/spinning-text-custom-transition.tsx create mode 100644 app/docs/spinning-text/spinning-text-custom-variants.tsx create mode 100644 app/docs/spotlight/page.mdx create mode 100644 app/docs/spotlight/spotlight-basic.tsx create mode 100644 app/docs/spotlight/spotlight-border.tsx create mode 100644 app/docs/spotlight/spotlight-custom-color.tsx create mode 100644 app/docs/text-effect/page.mdx create mode 100644 app/docs/text-effect/text-effect-custom-delay.tsx create mode 100644 app/docs/text-effect/text-effect-exit.tsx create mode 100644 app/docs/text-effect/text-effect-line.tsx create mode 100644 app/docs/text-effect/text-effect-per-char.tsx create mode 100644 app/docs/text-effect/text-effect-per-word.tsx create mode 100644 app/docs/text-effect/text-effect-preset.tsx create mode 100644 app/docs/text-effect/text-effect-speed.tsx create mode 100644 app/docs/text-effect/text-effect-variants.tsx create mode 100644 app/docs/text-loop/page.mdx create mode 100644 app/docs/text-loop/text-loop-basic.tsx create mode 100644 app/docs/text-loop/text-loop-custom-variants-transition.tsx create mode 100644 app/docs/text-loop/text-loop-on-index.tsx create mode 100644 app/docs/text-morph/page.mdx create mode 100644 app/docs/text-morph/text-morph-button.tsx create mode 100644 app/docs/text-morph/text-morph-input.tsx create mode 100644 app/docs/text-roll/page.mdx create mode 100644 app/docs/text-roll/text-roll-basic.tsx create mode 100644 app/docs/text-roll/text-roll-custom-transition-delay.tsx create mode 100644 app/docs/text-roll/text-roll-custom-variants.tsx create mode 100644 app/docs/text-scramble/page.mdx create mode 100644 app/docs/text-scramble/text-scramble-basic.tsx create mode 100644 app/docs/text-scramble/text-scramble-custom-char-duration.tsx create mode 100644 app/docs/text-scramble/text-scramble-custom-trigger.tsx create mode 100644 app/docs/text-shimmer-wave/page.mdx create mode 100644 app/docs/text-shimmer-wave/text-shimmer-wave-basic.tsx create mode 100644 app/docs/text-shimmer-wave/text-shimmer-wave-color.tsx create mode 100644 app/docs/text-shimmer/page.mdx create mode 100644 app/docs/text-shimmer/text-shimmer-basic.tsx create mode 100644 app/docs/text-shimmer/text-shimmer-color.tsx create mode 100644 app/docs/tilt/page.mdx create mode 100644 app/docs/tilt/tilt-card-1.tsx create mode 100644 app/docs/tilt/tilt-spotlight.tsx create mode 100644 app/docs/toolbar-dynamic/page.mdx create mode 100644 app/docs/toolbar-expandable/page.mdx create mode 100644 app/docs/transition-panel/page.mdx create mode 100644 app/docs/transition-panel/transition-panel-card.tsx create mode 100644 app/docs/transition-panel/transition-panel-tabs.tsx create mode 100644 app/globals.css create mode 100644 app/icon.ico create mode 100644 app/layout.tsx create mode 100644 app/opengraph-image.alt create mode 100644 app/opengraph-image.jpg create mode 100644 app/page.tsx create mode 100644 app/showcase/page.tsx create mode 100644 app/twitter-image.alt create mode 100644 app/twitter-image.jpg create mode 100644 bun.lockb create mode 100644 cli/.gitignore create mode 100644 cli/README.md create mode 100644 cli/package-lock.json create mode 100644 cli/package.json create mode 100644 cli/src/index.ts create mode 100644 cli/tsconfig.json create mode 100644 components.json create mode 100644 components/core/accordion.tsx create mode 100644 components/core/animated-background.tsx create mode 100644 components/core/animated-group.tsx create mode 100644 components/core/animated-number.tsx create mode 100644 components/core/border-trail.tsx create mode 100644 components/core/carousel.tsx create mode 100644 components/core/cursor.tsx create mode 100644 components/core/dialog.tsx create mode 100644 components/core/disclosure.tsx create mode 100644 components/core/dock.tsx create mode 100644 components/core/glow-effect.tsx create mode 100644 components/core/image-comparison.tsx create mode 100644 components/core/in-view.tsx create mode 100644 components/core/infinite-slider.tsx create mode 100644 components/core/magnetic.tsx create mode 100644 components/core/morphing-dialog.tsx create mode 100644 components/core/morphing-popover.tsx create mode 100644 components/core/progressive-blur.tsx create mode 100644 components/core/scroll-progress.tsx create mode 100644 components/core/sliding-number.tsx create mode 100644 components/core/spinning-text.tsx create mode 100644 components/core/spotlight.tsx create mode 100644 components/core/text-effect.tsx create mode 100644 components/core/text-loop.tsx create mode 100644 components/core/text-morph.tsx create mode 100644 components/core/text-roll.tsx create mode 100644 components/core/text-scramble.tsx create mode 100644 components/core/text-shimmer-wave.tsx create mode 100644 components/core/text-shimmer.tsx create mode 100644 components/core/tilt.tsx create mode 100644 components/core/toolbar-dynamic.tsx create mode 100644 components/core/toolbar-expandable.tsx create mode 100644 components/core/transition-panel.tsx create mode 100644 components/ui/button.tsx create mode 100644 components/ui/input.tsx create mode 100644 components/ui/label.tsx create mode 100644 components/ui/tooltip.tsx create mode 100644 components/website/card-example-landing.tsx create mode 100644 components/website/code-block.tsx create mode 100644 components/website/code-preview.tsx create mode 100644 components/website/code-renderer.tsx create mode 100644 components/website/component-code-preview.tsx create mode 100644 components/website/component-preview.tsx create mode 100644 components/website/dropdown-menu.tsx create mode 100644 components/website/header.tsx create mode 100644 components/website/icons/github.tsx create mode 100644 components/website/icons/motion-primitives-logo.tsx create mode 100644 components/website/icons/shadcn-logo.tsx create mode 100644 components/website/icons/x.tsx create mode 100644 components/website/installation-cli.tsx create mode 100644 components/website/launch-banner.tsx create mode 100644 components/website/open-in-v0.tsx create mode 100644 components/website/scroll-area.tsx create mode 100644 components/website/table-of-contents.tsx create mode 100644 components/website/tabs.tsx create mode 100644 components/website/theme-provider.tsx create mode 100644 components/website/theme-switch.tsx create mode 100644 hooks/useClickOutside.tsx create mode 100644 hooks/usePreventScroll.tsx create mode 100644 lib/browser.ts create mode 100644 lib/code.ts create mode 100644 lib/custom-theme.ts create mode 100644 lib/shiki.ts create mode 100644 lib/theme-css-variables.ts create mode 100644 lib/utils.ts create mode 100644 mdx-components.tsx create mode 100644 next.config.mjs create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 postcss.config.mjs create mode 100644 prettier.config.js create mode 100644 public/apple_music_logo.svg create mode 100644 public/c/accordion.json create mode 100644 public/c/animated-background.json create mode 100644 public/c/animated-group.json create mode 100644 public/c/animated-number.json create mode 100644 public/c/border-trail.json create mode 100644 public/c/carousel.json create mode 100644 public/c/cursor.json create mode 100644 public/c/dialog.json create mode 100644 public/c/disclosure.json create mode 100644 public/c/dock.json create mode 100644 public/c/glow-effect.json create mode 100644 public/c/image-comparison.json create mode 100644 public/c/in-view.json create mode 100644 public/c/infinite-slider.json create mode 100644 public/c/magnetic.json create mode 100644 public/c/morphing-dialog.json create mode 100644 public/c/morphing-popover.json create mode 100644 public/c/progressive-blur.json create mode 100644 public/c/registry.json create mode 100644 public/c/scroll-progress.json create mode 100644 public/c/sliding-number.json create mode 100644 public/c/spinning-text.json create mode 100644 public/c/spotlight.json create mode 100644 public/c/text-effect.json create mode 100644 public/c/text-loop.json create mode 100644 public/c/text-morph.json create mode 100644 public/c/text-roll.json create mode 100644 public/c/text-scramble.json create mode 100644 public/c/text-shimmer-wave.json create mode 100644 public/c/text-shimmer.json create mode 100644 public/c/tilt.json create mode 100644 public/c/toolbar-dynamic.json create mode 100644 public/c/toolbar-expandable.json create mode 100644 public/c/transition-panel.json create mode 100644 public/chrome_logo.svg create mode 100644 public/e/accordion-basic.json create mode 100644 public/e/accordion-icons.json create mode 100644 public/e/accordion-variant.json create mode 100644 public/e/animated-card-background-hover.json create mode 100644 public/e/animated-group-custom-variants-2.json create mode 100644 public/e/animated-group-custom-variants.json create mode 100644 public/e/animated-group-preset.json create mode 100644 public/e/animated-number-basic.json create mode 100644 public/e/animated-number-counter.json create mode 100644 public/e/animated-number-in-view.json create mode 100644 public/e/animated-tabs-hover.json create mode 100644 public/e/animated-tabs.json create mode 100644 public/e/apple-style-dock.json create mode 100644 public/e/border-trail-card-1.json create mode 100644 public/e/border-trail-card-2.json create mode 100644 public/e/border-trail-textarea.json create mode 100644 public/e/carousel-basic.json create mode 100644 public/e/carousel-custom-indicator.json create mode 100644 public/e/carousel-custom-sizes.json create mode 100644 public/e/carousel-spacing.json create mode 100644 public/e/clock.json create mode 100644 public/e/cursor-1.json create mode 100644 public/e/cursor-2.json create mode 100644 public/e/cursor-3.json create mode 100644 public/e/dialog-basic.json create mode 100644 public/e/dialog-controlled.json create mode 100644 public/e/dialog-custom-backdrop.json create mode 100644 public/e/dialog-custom-exit.json create mode 100644 public/e/dialog-custom-variants-transtion.json create mode 100644 public/e/disclosure-basic.json create mode 100644 public/e/disclosure-card.json create mode 100644 public/e/glow-effect-button.json create mode 100644 public/e/glow-effect-card-background.json create mode 100644 public/e/glow-effect-card-mode.json create mode 100644 public/e/image-comparison-basic.json create mode 100644 public/e/image-comparison-custom-slider.json create mode 100644 public/e/image-comparison-hover.json create mode 100644 public/e/image-comparison-spring.json create mode 100644 public/e/in-view-basic-multiple.json create mode 100644 public/e/in-view-basic.json create mode 100644 public/e/in-view-images-grid.json create mode 100644 public/e/infinite-slider-basic.json create mode 100644 public/e/infinite-slider-hover-speed.json create mode 100644 public/e/infinite-slider-vertical.json create mode 100644 public/e/magnetic-basic.json create mode 100644 public/e/magnetic-nested.json create mode 100644 public/e/morphing-dialog-basic-1.json create mode 100644 public/e/morphing-dialog-basic-2.json create mode 100644 public/e/morphing-dialog-image.json create mode 100644 public/e/morphing-popover-basic.json create mode 100644 public/e/morphing-popover-custom-transition-variants.json create mode 100644 public/e/morphing-popover-textarea.json create mode 100644 public/e/progressive-blur-basic.json create mode 100644 public/e/progressive-blur-hover.json create mode 100644 public/e/progressive-blur-slider.json create mode 100644 public/e/scroll-progress-basic-1.json create mode 100644 public/e/scroll-progress-basic-2.json create mode 100644 public/e/scroll-progress-basic-3.json create mode 100644 public/e/segmented-control.json create mode 100644 public/e/sliding-basic.json create mode 100644 public/e/sliding-slider.json create mode 100644 public/e/spinning-text-basic.json create mode 100644 public/e/spinning-text-custom-transition.json create mode 100644 public/e/spinning-text-custom-variants.json create mode 100644 public/e/spotlight-basic.json create mode 100644 public/e/spotlight-border.json create mode 100644 public/e/spotlight-custom-color.json create mode 100644 public/e/text-effect-custom-delay.json create mode 100644 public/e/text-effect-exit.json create mode 100644 public/e/text-effect-line.json create mode 100644 public/e/text-effect-per-char.json create mode 100644 public/e/text-effect-per-word.json create mode 100644 public/e/text-effect-preset.json create mode 100644 public/e/text-effect-speed.json create mode 100644 public/e/text-effect-variants.json create mode 100644 public/e/text-loop-basic.json create mode 100644 public/e/text-loop-custom-variants-transition.json create mode 100644 public/e/text-loop-on-index.json create mode 100644 public/e/text-morph-button.json create mode 100644 public/e/text-morph-input.json create mode 100644 public/e/text-roll-basic.json create mode 100644 public/e/text-roll-custom-transition-delay.json create mode 100644 public/e/text-roll-custom-variants.json create mode 100644 public/e/text-scramble-basic.json create mode 100644 public/e/text-scramble-custom-char-duration.json create mode 100644 public/e/text-scramble-custom-trigger.json create mode 100644 public/e/text-shimmer-basic.json create mode 100644 public/e/text-shimmer-color.json create mode 100644 public/e/text-shimmer-wave-basic.json create mode 100644 public/e/text-shimmer-wave-color.json create mode 100644 public/e/tilt-card-1.json create mode 100644 public/e/tilt-spotlight.json create mode 100644 public/e/transition-panel-card.json create mode 100644 public/e/transition-panel-tabs.json create mode 100644 public/eb-27-lamp-edouard-wilfrid-buquet.jpg create mode 100644 public/gucci_logo.svg create mode 100644 public/h/useClickOutside.json create mode 100644 public/h/usePreventScroll.json create mode 100644 public/jquery_logo.svg create mode 100644 public/mp_dark.png create mode 100644 public/mp_light.png create mode 100644 public/national_geographic_logo.svg create mode 100644 public/nintendo_logo.svg create mode 100644 public/prada_logo.svg create mode 100644 public/sony_logo.svg create mode 100644 public/strava_logo.svg create mode 100644 scripts/registry-build.ts create mode 100644 scripts/registry-components.ts create mode 100644 scripts/registry-examples.ts create mode 100644 scripts/registry-hooks.ts create mode 100644 scripts/registry-schema.ts create mode 100644 tsconfig.json diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..0a76b3ac --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,8 @@ +{ + "extends": [ + "next/core-web-vitals", + "prettier", + "plugin:tailwindcss/recommended" + ], + "plugins": ["tailwindcss"] +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..8dbbacaf --- /dev/null +++ b/.gitignore @@ -0,0 +1,40 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts + +# cli +cli/dist +cli/node_modules diff --git a/.vercelignore b/.vercelignore new file mode 100644 index 00000000..3864e878 --- /dev/null +++ b/.vercelignore @@ -0,0 +1 @@ +/cli diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000..c21e1e07 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,78 @@ +# Contributing + +Thanks for your interest in contributing to motion-primitive. We're happy to have you here. + +Please take a moment to review this document before submitting your first pull request. We also strongly recommend that you check for open issues and pull request to see if someone else is working on something similar. + +If you need any help, feel free to reach out to [@ibelick](https://x.com/Ibelick). + +## About this repository + +- We use [npm](https://docs.npmjs.com). +- For animation [framer](https://www.framer.com/motion) +- For custom icons [lucid react](https://lucide.dev/guide/) + +## Development + +### Fork this repo + +You can fork this repo by clicking the fork button in the top right corner of this page. + +### Clone on your local machine + +```bash +git clone https://github.com/ibelick/motion-primitives.git +``` + +### Navigate to project directory + +```bash +cd motion-primitives +``` + +### Create a new Branch + +```bash +git checkout -b my-new-branch +``` + +### Install dependencies + +```bash +npm install +``` + +## Commit Convention + +Before you create a Pull Request, please check whether your commits comply with +the commit conventions used in this repository. + +When you create a commit we kindly ask you to follow the convention +`category(scope or module): message` in your commit message while using one of +the following categories: + +- `feat / feature`: all changes that introduce completely new code or new + features +- `fix`: changes that fix a bug (ideally you will additionally reference an + issue if present) +- `refactor`: any code related change that is not a fix nor a feature +- `docs`: changing existing or creating new documentation (i.e. README, docs for + usage of a lib or cli usage) +- `build`: all changes regarding the build of the software, changes to + dependencies or the addition of new dependencies +- `test`: all changes regarding tests (adding new tests or changing existing + ones) +- `ci`: all changes regarding the configuration of continuous integration (i.e. + github actions, ci system) +- `chore`: all changes to the repository that do not fit into any of the above + categories + + e.g. `feat(components): add new prop to the avatar component` + +If you are interested in the detailed specification you can visit +https://www.conventionalcommits.org/ or check out the +[Angular Commit Message Guidelines](https://github.com/angular/angular/blob/22b96b9/CONTRIBUTING.md#-commit-message-guidelines). + +## Requests for new components + +If you have a request for a new component, please open a discussion on GitHub. We'll be happy to help you out. diff --git a/LICENCE.md b/LICENCE.md new file mode 100644 index 00000000..1a911b3b --- /dev/null +++ b/LICENCE.md @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2024 ibelick + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +app/page.tsx diff --git a/README.md b/README.md new file mode 100644 index 00000000..cbbeeee2 --- /dev/null +++ b/README.md @@ -0,0 +1,21 @@ +# Motion-Primitives + +Beautifully designed, easy-to-integrate motion components for engineers and designers, built with [motion](https://motion.dev/) and [Tailwind CSS](https://tailwindcss.com/). + +**This project is in beta. Expect new components to be released regularly and significant updates to the code.** + +
+
+
+ Discover the fundamental concepts of Motion-Primitives. This section + guides you through the installation process and provides an overview + of how to integrate these components into your projects. Learn about + the core functionalities and how to set up your first animation + effectively. +
++ Explore the comprehensive range of animation properties available in + Motion-Primitives. Understand how to manipulate timing, easing, and + delays to create smooth, dynamic animations. This segment also + covers the customization of animations to fit the flow and style of + your web applications. +
++ Dive deeper into advanced techniques and features of + Motion-Primitives. Learn about chaining animations, creating complex + sequences, and utilizing motion sensors for interactive animations. + Gain insights on how to leverage these advanced features to enhance + user experience and engagement. +
++ Engage with the Motion-Primitives community to gain additional + support and insight. Find out how to participate in discussions, + contribute to the project, and access a wealth of shared knowledge + and resources. Learn about upcoming features, best practices, and + how to get help with your specific use cases. +
++ Discover the fundamental concepts of Motion-Primitives. This section + guides you through the installation process and provides an overview + of how to integrate these components into your projects. Learn about + the core functionalities and how to set up your first animation + effectively. +
++ Explore the comprehensive range of animation properties available in + Motion-Primitives. Understand how to manipulate timing, easing, and + delays to create smooth, dynamic animations. This segment also + covers the customization of animations to fit the flow and style of + your web applications. +
++ Dive deeper into advanced techniques and features of + Motion-Primitives. Learn about chaining animations, creating complex + sequences, and utilizing motion sensors for interactive animations. + Gain insights on how to leverage these advanced features to enhance + user experience and engagement. +
++ Engage with the Motion-Primitives community to gain additional + support and insight. Find out how to participate in discussions, + contribute to the project, and access a wealth of shared knowledge + and resources. Learn about upcoming features, best practices, and + how to get help with your specific use cases. +
++ Kick off your experience by setting up Motion-Primitives. This + section covers the basics of installation and how to add animations + to your projects. You’ll get familiar with the initial setup and the + core features quickly. +
++ Discover a variety of properties to customize your animations. Learn + to adjust timing, easing, and delays for smoother effects. This + guide will help you tailor these settings to your app’s needs. +
++ Advance your skills by using more complex functions of + Motion-Primitives. Explore how to link animations together, create + intricate sequences, and interact with motion sensors for dynamic + effects. +
++ Connect with the Motion-Primitives community for support and + collaboration. Learn how to contribute, share knowledge, and access + helpful resources. Stay updated on new updates and collective + insights. +
++ {item.description} +
+
+
+
+ + This example demonstrates how you can use{' '} + Disclosure component. +
+
+ {`function DisclosureBasic() {\n return (\n \n \n \n \n \n hey\n \n \n );`}
+
+ How beautiful the mountain is 🗻
++ The “This is trail running” campaign highlights the new trail + collection from @salomon, + trying to touch the (strong) sensations experienced by runners. + With each model, its natural environment. To capture the Pulsar + Trail Pro 2 in real conditions, we chose to take the athletes + trudging in the French Alps, at 2,000 meters altitude. +
+ ++ Athletics.{' '} + Watch running, jumping, and throwing events. Athletes compete in + many different activities. +
++ Swimming.{' '} + See swimmers race in water. They use different styles to swim fast + and win medals. +
++ Gymnastics. Gymnasts + perform amazing flips and jumps. They show strength and balance in + their routines. +
++ + Craft beautiful animated components with Motion-Primitives. + {' '} + Designed for developers and designers. The library leverages the + power of Motion, with intuitive APIs that simplifies creating + complex animations for any project. Start building more dynamic + interfaces today. +
++ Little is known about the life of Édouard-Wilfrid Buquet. He was + born in France in 1866, but the time and place of his death is + unfortunately a mystery. +
++ Research conducted in the 1970s revealed that he’d designed the + “EB 27” double-arm desk lamp in 1925, handcrafting it from + nickel-plated brass, aluminium and varnished wood. +
+ + Are.na block + ++ In 1982, having sold his jazz bar to devote himself to + writing, Murakami began running to keep fit. A year later, + he’d completed a solo course from Athens to Marathon, and + now, after dozens of such races, not to mention triathlons + and a dozen critically acclaimed books, he reflects upon the + influence the sport has had on his life and—even more + important—on his writing. +
++ Equal parts training log, travelogue, and reminiscence, this + revealing memoir covers his four-month preparation for the + 2005 New York City Marathon and takes us to places ranging + from Tokyo’s Jingu Gaien gardens, where he once shared the + course with an Olympian, to the Charles River in Boston + among young women who outpace him. Through this marvelous + lens of sport emerges a panorama of memories and insights: + the eureka moment when he decided to become a writer, his + greatest triumphs and disappointments, his passion for + vintage LPs, and the experience, after fifty, of seeing his + race times improve and then fall back. +
++ By turns funny and sobering, playful and philosophical, What + I Talk About When I Talk About Running is rich and + revelatory, both for fans of this masterful yet guardedly + private writer and for the exploding population of athletes + who find similar satisfaction in running. +
++ Set the dimensions for the layer. +
++ Set the dimensions for the layer. +
+Benjamin Spiers
+ Moonlight 2023 +Oil on linen. 40cm by 30cm
+John Martin
+ Pandemonium ++ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam + lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra + nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget + libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut + porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies + a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. +
+)); + +export function ScrollProgressBasic1() { + const containerRef = useRef+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam + lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra + nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget + libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut + porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies + a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. +
+)); + +export function ScrollProgressBasic2() { + const containerRef = useRef+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam + lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra + nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget + libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut + porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies + a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. +
+)); + +export function ScrollProgressBasic3() { + const containerRef = useRef
+ Beautiful templates for{' '}
+
Kôkaku kidôtai
+Stanley Kubrick
++ {feature.description} +
+{item.content}
+D1MljiO{t2JQh107=CFb zcQK0P4G=k&gK-$X#d2`_t7{@MdKCAC+Wu~bAPFA6KToYt3;*mVvssadX_E$5GXMuc z4qnUaF%X3btDIM@c^iryMVVGrRwx)2Oy~R?sNh}1NA<|?;&aE)?_2F?@}`ppn-l;* zkx<5&QL$nqc-&&y`=;3bIp!V~AYgx0E(_^#_1-sXja>g{QC$e||03i;8iUIgm&D`! SQ(pgFz{K#bL4}@6?Ee63+N`Po literal 0 HcmV?d00001 diff --git a/app/layout.tsx b/app/layout.tsx new file mode 100644 index 00000000..eaa2ee06 --- /dev/null +++ b/app/layout.tsx @@ -0,0 +1,44 @@ +import './globals.css'; +import type { Metadata } from 'next'; +import { Inter } from 'next/font/google'; +import Script from 'next/script'; +import { ThemeProvider } from '@/components/website/theme-provider'; +import { GeistMono } from 'geist/font/mono'; +import { TooltipProvider } from '@/components/ui/tooltip'; +const inter = Inter({ subsets: ['latin'] }); +const geistMono = GeistMono; + +export const metadata: Metadata = { + title: 'Motion-Primitives', + description: + 'UI kit to make beautiful, animated interfaces, faster. Open-source and customizable.', +}; + +export default function RootLayout({ + children, +}: { + children: React.ReactNode; +}) { + const isDev = process.env.NODE_ENV === 'development'; + + return ( + + {!isDev ? ( + + ) : null} + ++ + + + ); +} diff --git a/app/opengraph-image.alt b/app/opengraph-image.alt new file mode 100644 index 00000000..0b386ebe --- /dev/null +++ b/app/opengraph-image.alt @@ -0,0 +1 @@ +UI kit to make beautiful, animated interfaces, faster. Open-source and customizable. diff --git a/app/opengraph-image.jpg b/app/opengraph-image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..95437e293f8dce5a79e8e23975eededbc5bdd65d GIT binary patch literal 35379 zcmeFY1#le8vLHHQX0TWmS_~s*W@ct)mW39R#Y`46Gg{0ni_x-}Ww9;xAKT}gd)~YE z?YlpABX(nBvwLc)va*u8GP}B_=g0DoO#rI2xRf{m3=9AO108@LYk*(?GzegzVPIil z;1NIv3Nj)hG72^-8tA|##lpn`ouowML+ +{children}+=`o3<3@8#{husr-Cq`&p!YR90C#wq$x;$2rv-*Q_qi803rk! z02~zp71Vbt`458sSNne+_}}IMWSiMYJ< +?k7b1pK}x0X{HA-`yJg8 z0KnX3n~<_ACETQ!({cHiit<(+C&CQLDJ=9y<99J_xUo!pcKr&`w~@`w0l}^Qm90R! zm3gJ1&=~`FU4i}~>fqx_Z@Xt3GR!+3E0f--{`wE WL6ulg8KWrw=Ar@6~{qi8y|Q_kI@f8@QLyHa1SsRJMI=) z-p~-mU3(t>05B1?5FqfI-6rOEIbO9?AZeszIfP^vUafrQn(49$W4;yI`=U&wb0akR zvGiYw1>60ig%``h+6@xx#DDCDB9QF8;=$W;EHd^|%4wj$u8-+PgzV)qZsD>Ct>Mk7 zFL`?&EuX=2rV`+m$a4Vk!L6>F;N7RMyt=m>$qItkbIwchcE=*)L?ygshu4X375|k` zh^baGj1!Eht`vgYbq}XCF3%QAiTp66k2HrNIpwgI1$mc=pSs+56f)m;+Ri+#98`Up zsZ>xyrY=aEmLllZBJ|&KhsnE3*Y3G}6^|ljjD#{%f^|?_chZommG!T^`=8W+n3l*B z{7<<5A5FuCTo5%B{0^jrAON5^7rhB;LSP$z^9OzZGe8i(qo8+?^W&94mo79^Y~>PA zp;<|FBF}fRFJz*0R}L8+^UC9k_aLDj|DMPZ1vHix>#6M`iv !3;)m$meP6*v#z~cGf=C-Sh90hfW~)KH ziG4oFg_=o~k`IX$1pPi#ND4&+Uuf(;T&&$TaM^OyQfwb+&QD|mMi;0orrZ{$^l}*4 zAnexvStN9l=E)oJYF#5a2UC`Ir%!DGb6j;ICQO99JL%WNjjwdj#<|n>p;x&40@=Q1 zJ9XR}b!RNzxKxK*xkER!XR_UGQSJ#I>aKSm3UUR^-QP3d96cS5ITQyZvp&^%hI4!T zvq)zbhl3Kyzl-cR5_J)$HDh`;L|jOaXwGKe1+r3u;X<6)imf9) p`vyxbUN{4z4nVvI>Wt{m^t=0AxA10TEd7Yvpv zqD;z|ui|WCI30f<+z3Ax0ER17np_!~;V;EBgv%LMs2&hI66NV>Y|I`9-gl8nU@#@c zIgI=Bw)j5;Fj)WpVgLVaoqt GqX(y;#y5diMrqJsSQs1oA; zqyvNVM^-Q~-}9T!N?P%**9BVX5%Ce#6{n7XC?L|){Qo2bM0{!nmp3%|0|9;6l(hd> zA1WzC-@{bhs#j{}oUd>eJEt8>*ERcx hzEk(| zzWmXKnr=m$FtW2$uA;$;aE?p+lgz_Kdy$(^p4h^3eJ4zRZlQDMdr?^HL*0-w%7 ?uKU`200D$$n*(msf{m-vUhPFyq-Njcq5R)_A z=EckWgw^UqtA_`J&JJ16;K+>Drm|PUjc5#eEBkIOGw+;0201G2C1BdYI*pCfG@k zXVgEsAO^Mf>ps1$mX9QS%hjDncR-M-^{7*mh&B4+eIB>{?N}IN6uwZZ-OaO8@5V0+ z=7Yzn|6iktrg^_l{@L>Sv_bY~9rS(a{;|* mUv zCH0S?e1VSg&Ww`&zcBEaFy(SnO#kRbA+mYEwYEtv89iAV_(CV!`A%fn&G`Op*tdf> zb+~!3l$P;p&DZUThx`EE$5B%NApFl1b9>Z#|EZJoH!CV7qCyVb+<)-J^NmU#eM5m6 z{5H*+pnK?1C2={b57GpKu)kpHX!`ADkpGnx>1)vF*QAh;g0BIfI>eF$%t8J|_-`h8 zqF(;%f4{1Wr=QZ281lc(WN54yuZA&SzDzL~Xkq3jLGN^D%@G~+K_~C`tpWvMdq77p zEQk%r*n8JK0b;uU8laf3qzRj4eUx`nv uUA*2uev5&yzstB*h_E3MeejI zpv=l~2o$P+dT)f*d46ysQE?@htMiwIkTRDC{C*T$zuf^Q?te4dJoHyD0Bq0u ROSrZ68qAh{`-UWx+{oc NV*5&d0_ A||c&pT_-S>3JfOaQcT63q-v{SN|T&*U+R+AE&Rq zUTKTDMo$~0=PcHqmK;5|*=#mf-V|w9Yh*}kM{}mv@0(fv!xjLFfMtEi-;}g!{JWC- zvMhAPZ&T+om7A#7UGL|Q61)pNZ`3H6 z`H+h9h0j68WOcy24!6<-3USGeYybF*%(g|Qf_izA5pS)3xtQ3F|KY6OAK4z$GFCK` z*YLMm0jL02GysuBUwwO5@s-JbMOzg-h87=dQ*->xhq~GNNd&nPqzVxvi^&3Dr_iKX zp7x1!6E}0Tyv=M1rR6shJA<%-8SdsP{dZqIYYK{ky_`$mOGWN=xt}20bt~@QxJH&O zzWe~-bahQBR?ekpS=r!9wL5KQutnB_{Y(sC=wRs4XooHqQS=w)BfoS)W%>?mDwW|x z8|`}yF|qux_*L4$&*)WmP4=Ru?_J(e KE^4)w+N(lAm<(F8q9SX1 z;bK}@%lSD32iXam^@0kTIfoBT^+h&r8r&y#Z3pj4w~t`>Q^=@eR-0m$H#Tgh1DiXh z9h%5f6aA!Yux%0_R#eNR7s`gKCT>pZ`fsm4TlgH?;dOG%pIg}+ky Pck~moXA!GZJ1~dXM)-TSL#c`N+y)~7p w~ zZv1Q;5}EclplP!$O3{B%(R|ReGl_A~tdUGaMf*a_7d_d^RXG%?JeCysKDmkpn4+0Z zQTgyj^QgGf<@j=adUB1GzA;sGr?dI$;gUn=(L04Fr@wF8YQaiDR*f+k-~Rp5$Evc~ zh$9ZoVThT*nLndG?uP5vGu9t!5C|aW`iG}86P-3^4xOWE=b-_<7<;qO3l*s^6A*cu zlsQbt7e{7VRkq0-WEX5d^6_YV_sMcUSlR7t-=1yc>ipo-`J%7ilBuIjKrGUvWiYzr zw60_(v#=kjM_1;iLW0N^LhXjo#kJ|h`FB593jXDXpB1j}IGt!sh8XC1g!gM=JS?Kw0YW z(P+gEcPm}d>2ZY(p3bng!EC>za;I14K~@RK1Ixb!VwT2=WO9RM2?A-Llx&vdZ>-}4 zCjf9Bnm)uRMVT=P4l74O6qr3*?7uG_uW!MTIL2Bv%Q|G!zy^G{)-eWtnb98B=ic+v zfKRRpHK5+r&qhGeuUhhh(wX98ywp4@Us-EjmG7|9zHw1%o1;lkHY@VFJ?W;khb#Ca zPyp0QL}Bcpxd4tmkTe#Tyzqw}o }=sd^&3! wvqw+H}C-eex=@t(YjCdtUc$g;ECK)gYWrq2Io zH%#h9AEYoi+1$P*+g!GJ)Yl1J0Khsihi~9q_v Q{V9Jb5_&D=K{Bi?Aoe~BK(6_f>x9~Ah3>#8wGzCGw5Jpeh8$>x#$+T2 zfGL^yG~Y_6FQdI`7kK}c_YQzSa1y+qx*MaSzn(H3 dS)Rm4#I?TWg#p!6$KiUD zSK;ogY1ejR3%A)YV(>mX>%7jSBYV=DuwMu9Z5#H?jbmGdKJH8~Nkf^QN7oYMOu`?k zp@?J(!(v`yVBgp4GKWp$dYK_PPUyc%8REgS 6bZL~3y%2F^;+vJ@y=ntaR-HUieG6NIj ziYOB(JK9z^LP(|9q>x}&$*`@8+bjemK*{UxnxGr+Q|*mbNvn;giLR-nMfa+Uu8u{P z7lm?8MX9-vS!
fIi90&yM4#!zj5Q;q2^8>YuPCm zC*a8beTM`9h~n5qf3ha|J=-BB?hFB7M?oxN_OB9lzB?`^Mzy66D~;UTZzRYGf+F$f ztri40fwH|7ry-hY_E>bVzfq9#nM+2XjeKqpCuq>tJv0O~G&pE?9t6KO^3kBtQ8Cys zv9Mp0u);7al9Dm8unUq?0EI*hUny}o)(V4m^M7vjgTaFR0PG4C-zqy0rUYV`x^n{e zh%)D;I^JLJC|M`X2w)X#`8lg5f38%UI)}fjztfadr9v+(kvO(`Yn8f6xguCC{E8ky zCR}=^cMzjkdMIPJt?V6R^w=LfIf0Q@oIXny;L|iunEYB-30hAG{CO>2>}w!khAP zgOtVO&UhE?GITcaA~8(!Z%WH2RxCU2Q!Kx=$mpbPWsqXLH3-eVS_}CB5N;+$d{CXa zr2VqsbQkg9VdXH_WPG5qILAH5@U26LOa5qWnFEo(HDgJ+zsasO>XVK3kxfmNpp)sE zjn=W94D!ZMmkg^{AJqJyn6c?{92xyRqmN95Oqz9~s_J_7BB%a_cwu-1 a7i7sO*kH|D*bK;_$}lc1d3v=>%yRfqSl=ro2XKoAL!G z`r 7leA%gWmK6NHDNK6NqTAxN3R)z+41E0*p?Bbc za({6=R#?pgR_&e5r@|kA3Ln<*DeH_s+ZMCMu@U+&6|n;fbNvHnb5>p{>9eawi+VgZ zHu9OAKEQA6WZNos`CZ7XL+Lb!l)7v?cEwjo2`Os|wQ(?ij$(UMl)U%$^=j5hj$KyOwIy>1Wz2lJu7;Ji8 zakx-6SIPP2IC>jACx*tgh@Wm|F0eEns)%JiQz HW;_Y zCdV==HqLyrUm5^}D)OSs6+m; z(y88?Pi(R?Ymy#ro;+AMGmWvglF^Nilx<1(gKn;CO?HMRlmF|eBPzV1C6Mk z{m7C*8P!l>qna3RgxtbWq?`mU#%Z;y7`-0dk=Vuen{B90qg9(W#nJtu!_0y9HT0Ea z!jk2NGIRTn?+9w{rb_*W+=N0SQgAK92D)Mq6-Pwo-6BO>(C`RSQ!jc8DCr5&N()x3 zA2oqL06W~d21wT7S8O3`^S8W fE+0jQxmeX@=1#&N4ZCk3_1b4B_ zlJj3m&LsM?{p%`z0OYiy!5-}5FHtI#FBT0fG?j2;!)Yaa=9)GBa#<65axE><_hRw3 z`S|fv>U}ozO3%X4s+w3mxbP?+p_&{9JFB6s>g};)vGLgARksY9#m@_PUat6*)mE7) zw;>2$X}5N{; P&^uf@6t=SWiRx9m=+mML=Qk3v4%Xq$8rv-GPRMEABZn{yb2v%9p&zp z?KT_Dg6gy?-O5eR7$B4>t4vE|2^*kt-dhk8wVbl%qZt>Sf7DYdn^iQKnQu_go@c*R z&&W6(sybGwc34rMkyA6z|JZIlJFTWnvtK03W>CRcR=@#mw#p`+8`!2`C7vByQnBi- zqO{)g@w~ja3AwRJ!7R4KvUte`MF+=>9kR4Uk5To=-iM@g_NkMFE^`J^GE#6(;iMF! zNNb*fbMe7mtN>9e3`5O^m0d}!6Y2-RwkDbKsHr+-viSy5%Za*> z#SehArilBvfhgGzz~>M +D{TB^HC4fmdL8UVNoMcJBM^ryKf6_l_t)e#z6_ZK zTS`&zfS;AsT&cX&nu}_&G*y%Jh(uSB7jo{{k OA*?LC}E;8v{C zHYoFcPRhwvE`p4=WN$Dw&@F;FhpwI|8IQ~NgdH_oeR1$ S zQwJZRp~g-}b*_p#YqCsAT25NFwRomoRxXn4?Hk3hm=osN`8PIj&3Kj*;q|@;x{1Bb zJN6|mMn`A`h8xDNZ(?nPWTerpm9&@enqzaImIbXebrkBa-m(qa2%}r;WzHD1Mj7*5 zd{9b6(8ibF%b)$oBLvF-an4hnO?D~_jmK{}xOI?##~LLEz%>+?*}^jN!uCf*Y&~Pw zSIJGa&SZJBR`SceR+Et+$G3#=n^fh&&E1wdz#yjTxUES402Fo5oJgCRuP53`_M=US zT6@wagEdtVmxmS}^)=_A?=(Jrl;m4{L?;t1H2M~C?_BU*?t>d}|3&-Wi3 T(zO9+^6Y%C|-&T4Q^UO^sMBf))MT>aEzI|iHfDhs_o?U1S8Q7N6p!E zsba2i+Y=tLts&hTZ@ul}xhTS@DOs;s*t1-Vu=t#&g(F6iFO4!LGgl95KlL_X=Ogf@ z#yi3H8E1${ fn6lHYKlL{8-GC#~*l3|VjUnhsV+z)9<{SeMAv zJ}w+ROzFc1ENP`vqJy6JwWH=NBZLe_Y}aFzCLYmK(IJ&g 5l*>y{0&Ny1-9xWJ@&*$G=p~gKrY3huNg{(h)&~jwpp&d^w zZug8 -5%}uyXw6XSI<3@a|!->V?{b0U<{sW*~%lM$v7k8 >h=4qR(boQ&hs47nHHq%wD$J~p@j?Bk; zmF{#6&Wm=IH7w&}jWL`@G}7`YV9{%FO`ZCtDu-HE$$O)d%LlJ7B9*|mU!gQddXk`H z5WP(pzQvSBw>RsgR?2nf6Fquv7oT642wgA&E1Pg$OnY_FN!Hil-H2&b-&wIE^XLho z=sLKK=shTEx${j=nugY_-*d0i f~AdyNUf@~O;qZ) z@_7cq_vr@n3OD+F8Jf64*$A+5+iLWrlBtU;HewWpoQjs@^<=8WlAdquGL1hqH=kt- z-^n~n_xyRK{%~Wu%bi6cG>B7CqrRwb%W8H%cMSL^@tqdsqA{!T`_J5pb3~J0@k*}p zL;Wb~OxmGl%}PN=a3majBt52`(j1_6TsKu;b4TY)d~*yfmuOF6ZAMD!Eqp)UOzRq} zxM+*ja4?n8lsw+BQyWIcTw1ZXf}f~=?s-be61lv(=++#<#ZVC)drb9#q)Uw*h(_{R z2nzNwgWthNVDe)kKM>!YM?17lF1~6otFwYPOsTU3RSlbd3IBA|v-zNxHQ6oUcv6W{ zYThwn<;p56`^Lpt4a6+xD28>dba}_k?X1FCp4Y`C&BhLye72DUsW2gg1VO4u(ylnM zsY~>o1uN&A{2QAHVZ{V#J) OCJL&gf1@JO`c`Bi)?5Oo775XjmW zI+wYItgg{oHD(oxL&r)O)qm7K(HBOjlR=3i654pdc{w>{RMp6tDE%pzJwX~XxQa5F zq&Y)=aUy(VWGw_K`5GUg(tqo#iY(KpQ4x8PcryDqJvKgaeSe|o!3aI96J>I;nTz#$ zGBd%VJe2@8YwV;sBs*4HZefuXYel<_OI%VBxoF&;nRBdjhFOYA(?<&~xB4hWmeFeA z*ua9?61YK_9SNV>6GbDYs!0q)l78)XMsCSNp6shug=e;W@U#c1%1L?TNu7jY VdzPD)Y5);0jB>BSWMDtE{Z2yBV0~O#`-~hi`({Iee>;n z#J_qwv&@#^8!6(bWLtP)YwlY`$$Emt1-aHn;uvdDE!afd)R{-b2(RXB;3UK_mdG#` z*?&Ain7wlGkO`VbfHqgEJ1yIyfQf10)Aw0CJ z`kZA%|K(Z!s|!^AK0%bfF~5iWh5S2*e;~1z+!pzxARf$?G-@|LCv0nIpyPUm6xJ(k zS3VP%z_M5c({)WmB4FoHK!#t%T{Cb;ygQbF*N@i+a^yM)ZUl5fctPJF9pcaaY?6`P zd$MIEMlsEccO}A`Tog7x(($G)Tg{*7yy0kqBJMU@!gWJ#(PC-tiGEEClSP@K6B=Q; zOEH-5BA!e&L!L_LfZ+l+w4!)cNpy<2=xJ9uDrzcjAl!ERjet}#YMO4tuAf7>vCjBP zTNryRYwg<-y)9k1KCK@`U$yHa4Xn&}g^S`Nw(VzWDofHQ8Yp5LH-0^b^BrG?oWdTw z?#h}&Zk;?4m_8BSZD9!$ZA|l36aK^vd?Tx<=BTab9R$klR^7tVt&gEWR?DjxH$2%@ zM!l`ay6zBYW|?KuU!;`+W2_SFX_?oZ#O0(~{7<6lM(o;@Rz$3mzZz`G&Dsq905myV z9QvMQ>)HI0S|o_~@uyS+kkp&;m@0ulqzzdW5ec%UX1d+Z)=cuNs0b*XRoustH@3?& z6i^?nXf)dWLIkAz89OWd!ovZUn_{5fJ0lfJz;f|ajD}*GqPU`fi~0sd=x5REio% z>$q%o7!gz0dU|*wJ;FiC1(ak-MU3c^-tBwT(Q-%EdGxJ{4knHpOE8TcDm!u%uQ)z_ zK+ZUf2YUv7DVN_;x88jn&=^cFE!3Rad@kzBdW5GO+&uO+{dw&@n?3tLtmAk1>{Lko zNA({7K AXtN97dn_pDM%j5GnB> zGJFuREk0NZ=TUVeD)AhBd*N5K&o*%z+R0etR&3q)sR6i7YrJ6xOeeuY&MQDcjvd t0gT=17o~7Sta1F6XlFs04~7 z^D7gsvRwLAcluQ~8=sA^5&E0Nt}dR ^b$Ges8 z{-W Lh>Tk^7SNJm~rssm1%H@a?nY`EmT0Te9wB3BUOe z-NnLsU(n(P{-N|m?^+uU6ondp^4d@*xErin)H5>= !UhfZn5IA$EvU9+Hmknn#sGPgjSF%?N> z0qb$kY3`X6 Z{x5{p8@9uRixkU~AWb2R7`%&!V!77}uFi!l ^D&N zF>|le>98CW!il|;qGB#IsU2|6kp12*3g(az^f=^p`Q|}$9l?;Ze!B)f#1tG`KVP+e za!vap2Vy rU2E;JqUd>O4RXJQzg4+YNg^mFOP;!wK_R%&L%J(F6Q3wtItw zak%j?2gopALBd;op5u m0Ozxi|55Ay6s5@q9k&p~4t~z&p!EwLq zZ;>Eu<~*w#wlj1eg0Te^V9VmK)9I<|b-!KrE@fKrq;5FDcnlJDF;Pe1oY8}OLUTnB z%p*I)Z~;=pIZ_G5=959!EB{ETE7RC-cpMk0)e7p(BVP7&9@Uj$J-+RtwBo9_oCq&% zXRwf|pL2W;%`OFhglRTwk>wdO+U5f5+_M-}5*e?II`2~3emz!CxGmHn$HmKL5|ZcU zm)nAn_!kXycqzN}9FjDphw$;69_?P@Tu?p>0EdHPN`%a{N9tLGGjT_Ud*>hfsnwdO zFfTr5W!ECc;~=orRLQmUNzaX*y#));SzRafF~;V@DQzQK0ysquRZ`ddyS9Uxw4}sy z`WF0NN#4>hE2XM>%A&l%1exid#vnG^w Z^Sqfy!$8`rap*eR4A%y?E3l6n{5^jepR z36YA4=;cG;J!;EKXaHnz;A?68p{-WDe(SNoMUDqZ;uQrXk@@61+^bzvi_!RO+?^as z;ZP5d={sb+cvkfG 704)-5%RV+oN@Y2 zJ&ffMX+RuKC(5BWZhwm+dhpoD-eOn5&_OCiCPNF;;>md8mrlA}JN8XY6&A2vGh@|0 zU2A30iK~*9B!L3)y&mH;^VCFP6F}%A#30zGfv8C0OV4oB9>>5S_`bkMa)e!afxKK% z^f*x|=(-Mj$lRhJP16f4{3{a=+m|y4GR0dg#20pP50FoCxMM@bUP;FQ|4U%GOUL~Q z*!(Yw>p&o?coVv`I7(b_%^4NGT^?opY8u%n?-3q)An0OK&A)jf6Cope2fb-Cvj3Xe z?70P8D|KX^^&z&Y6@(`vBi$X(_{0l&hD;%_Jc5=EDWxq-qpk6*JB0Ykj7c&iN7=m5 znf5BH4O?J)Q(rcaNgPw_^)Zu?08 GKzvz^7zKjJiEC{fCczP!*x#9@K{Oc=sVx_RuwgqtD|a zWQsZ0ScsR?1ot5IS%!I8_C`RUbTI VNMReegU Zf$6hgt`H1Yz~5y`I*@x+;c z#P_J0ifo8cL7*bo3zZE*Q8@_aI}&0vC<=$kc!4Z?)0@8n5f>MJM{Ks>*+MDj!VWR& zVq|0# nsMTwpd zs~E2*tw!p808n3xqZ`pcGRGYYd4(>-3SGZWgw`deOGrR)4NO52A$vU!#5gu_99c)~ zCyrYJWdya|>BOJ2gqNkCU-zD6P!~wmuId#3H;8MIqZH*)F==Y#(IIPQyM{FRIeY&V zkoJA;#UK{(eYWO#n16d)dVZqxWwD^UO2SV&=B0`77h23?BdWio^f^<6jEq;->tdY) ziR=8sudsU6{b8gxa2;QJ;gBG@vm;38yeG7JEYV3BX@!;r!OBWNeMLFYh`S~+&WyYs z4w+)$fOPmtFaR-7)6Nr;fG+Ny7_!o09_=8w@T;_NI+Gn09-O#>Ld55!j)w*O*8b@_ElA%0)FLK~bxp(_VLses=)M zm298+UuPnfMO`gz6~lzC5aAhmSjBHOOMt5QrXEh9Dop4y)~#%x_F@iwZz^*hSlZY0 zuNiZ4UKlo3Fl{nf-Fp-C_Z-C({jcZK L*AsFk@Ba~dkV($XL zp*f&+Z(;cn7!}11u?|hRB!ydLT&$J32Dr+YzscgkQiDn2LxTnF5MSYLl`7o75B0Do zX${@R5C3<+;Q3j783cARM#7kSIpMUPKc_0D?oIy;;P+p1FurLRWPFOGT5*h$j&tCP zZ=uAEN`{M W!TBQ(}9R13Bv2Kb%B8r>6MNQGy|6~{d1p!2=fk)zGIm8BK2BCpq zS{Q$cpe<7m5yN?oG?{(D9FmSGB51I<9wr~M7ZF`H6eSJBduNv2X#$YUsHh9j lAG5u}puup~3Be)G=4KzVS1%e}Y)Bn4}ZFnW)a2V`(Hh zrma^KlPxlq$zb!o`CpDgFsKw|DTqha9D)L`_ }QThzfr6iS+zYCB!ChsUtSDuaPC^Cyckp2`nBJ}`8 z`v~)eQmOR{y&5_nwDuMkzk 54HXPqz-^?R*QTwTxZG# zp5jecn3&>0(A%+)Zr|*C^;Mw9c<1*zeqD#Cs4ya70x25L!kM^wDIDQX_?|F_=u$|P zv-%Bq@6XFIlV1 ICiYG{7vaGpK8lcnbRjVCV;z zG%007y56qNaYXJW`_FMrJ`<$kd$^Fqh<{iX70Hmt80wRLwe)LhkUkn`+Xm{W_vC{f z{hRGym8?pv=%4Nir %Tk_dX~s z$S}7a=Fe(7?KZ=%8qgJato7PJOerP9dn9BPlcZ%;&awM%umN eyTXa+d zGEyeF+*q>L7k(^O4TLFNF~d0SI0YZKV$MT(x^TYUnbe9BhQ2;!1`~cSk&TNNR$4Kc zjk^_}&2?=t2`abZLAQweEXx#4_GR*l*PXD$r9dDKV;bqUsgGnUu0;Tv*A_(#G8wrQ ztC+C5H2DLRSCD1BIlhCv2UP%j0&jxM#i>_tcYoE P%bG0S@lj83ji zi9_Rn$=j-DVBh6DcX2^qr*}q@WF|ct4u@*R%6><(U4)$Nb-&^*g)cNHQm=PLV;Ojt zuS{Zi)1G9A@)$2p+I{5VdC4a*#BY*ul<}185Nx1Lz2S-ztW+wdz|*u+#1U1bWRO{6 zi#kH;D5Uf;AMeCYXgTH5F@j~QAQV`;Or|d9qp4YxyL0DRiz`eh3}owUAAR!16!%J< zlenx2nvk_(l*6b+lJdqCtG}Ufay=u!Tj_ogiLN83BRgZIOOR#{$G1p;qj2uj6^>ql zvc_67j(=v5#i_5Gj5a`L-UIEp_LgUK%B-WV;!BYbQ1+Rd@V2~B>qPR @UQG^Uq_R%lr=ww8Q9ze|0kdL2u3_jpa)2P3+?bdf7xC^twDaI3zR*G$bS> z6cp%f6VTs5AvjGY4F^Xg}XRr7miwxGxaoiSMqFGNfN z8^|4N`>sSyU4jxX|9AlfP5|@*N}-VGvOBJ~TM2(}Kyot NSM*VuhcVnOq8vo7R*j2~JE1+!P|tZfT|YAT?iNxyAbhNn6U+ zkyj>Elhqh7X !tTS3nHcA#;AsDrH(l!I;!rI#^PfkO9R#6;~ytJrm{A>;^wKc 8;lQOwJu!9)k~5zCDHN|7cz!B};f26XlI`c%pbb^3PjAjLbvDCa zM+CkSc!cY%vdsKo51^qZnY4gs^*2p2?+;x!Q#?X(py|m+!-Q+cICUrXCQ_~#jDEsI z88@dNVne1Nddu~#2_Mr4DXl&+4obKX+qqK7&H*03(nAygRm4vJI@am~@>M2!jNIT8 z@?{{R5;m0A6tLVH*D&anx#@RzwOTo$_r^m7nwK;mo4|QKH*j5>7CBg(WWkCc)4v)W zLs)?dc#HtNC6q=~Z$^RTS6^e3h#AIC Kcw-d%cZNfW?qV9(9FJv}^9O1)>&LaIvA`0S2j5CB5ttUk>X7AiG&RF5C4_&2 zjiRp{CwLPNhDR+h>CuQ7ARh1}LvCar;yJbJmvT_+1|H>KDfI(zsA2{cc5S?OAn-b! zGIEN8ph&DtBB=jsrL-AgTu=KnmQrxH`;Z> %Y 0aRE3f3%x-Dc>qPddgCYNTz@H|A%dD$m6-KL9QVI06$_l}S`tG5vFlv4+X{h6CmA9`AH{H+-;ROPu|Dc$ggX zm30_;YF==&Nj>;(vn3c^L-w>x{8rnL=G%!}!QPWEDkSaQRcgn3Aa+d(@$+m0iFP{| z<(&s9a>DaZy~%< tZH8eQO9d^_nZ-XLE;6{Ybr^u*)-{t}T%Rmi9queTC8eUD3J1Jhsh#LmgYq zxm)0o;19rC(699^P2=kY_we7B?(v`LjwG@y`d>{`83f6{IrYZG5YLB^UrgZ`4pv+j zK___HQ`{LsGATBy?NYxs3P7j*=8hL-<#eIAKHLmIwh0bb%r?+>BI(D9wyhs=DkryO z){_WFd{rB!o G+O @`iyNX9;2qovU#sVFWDx#fba)~PLH@(R{1c)ob}kZR>VQ!CO2*BhxR45K6VPu(y+ z>LQ!?5(AX*xn0qs!K>S-kX -f6G79hW#h2-yjzdeX%)IQkz7yDS3Fpm{ z&Ja9Ln2Wfi&5dOXXQ`({)VC7c3qK*9zvpY?O1z+s&6_cDG-Jngb(+}gmx#peOMpXN z)i+b!RpppHWHxHLl|2#m#LqJuzgSY*OuP?W@hcm|jklG!%62NC(dAONpwaAm0^4UA z{%8>#=ZlBPB~4gKj$(=!9)J~#Mlww`& LIZ}@AD63P@G=Ym3&tUYYRS&XB`LJ#BzC5_yrHtAkS zT`F{lwB9roPy>~g@lK-7kCifxOleqf7wwd^Un u?a&x^O3L3@z01$`(zb*Yy#i`?(iYFKHj@;p{RvK+EiN>^MzTK+loLKzI)t-MXb zBr6Vgv#>u$+gleH#A*sir{Q5|U)JNnRD5U|6}R~=ZirhNXCo;I{)QK`)a6708CNJ9 zcG5vhX?Z8XebW(OLX(WrjYLWCFfZQWf_p{)A+}o@ Xl5AyHwv0pGIm}T4kY?P{{O={6fqy+}`#~H5A75 zCDL0I#pYOrU}ua$fc(lx^ga?>{Y0J;-+WmX+oV&ji4kKU<|I%-dCYH3Ybal@EfJRs z@acnK)-W1uJGo|lU9)nAQ|ZoI)-!muy|%15c?OnN{7-Z)kb7K#QR|d_&ZDgF=dv1P zNoL2{O!6H+I?+tKYmM@zDbxm)7PKK&EoNI!38H-6( XGz)L3>31*+2!~-NarQZyF e33wqkY$7Ic?#L+Nxjq7Ku?V;<04+k1N zaY4c2Yw9i;CYhMHxH|_56%rxO-; oCbGbE+;@So;^7gV0I9ak4i`|oF zvqSVD^TQRk#Z6S5$&oi*VUHqBP&q@C_h5`deia=4reZ4O)&Pauh1*S~3tWW0P166q z P=&M@*YNik0AR-KwwEj-0#CU91{qi)Nfr5k!|@VR_H1gUl< z^#|a%_$!3DHe8GHRPyY-p`)$bq_CfH5l8oF0do)Tmv6e1eW55u2(%?%0?#L|jSlIm z7TfjBGHE&YrfVRAjI|VVmdoVMAE_oBq2E3ypXH-^<27{C5tJ}UDpm|Wl%9sIvr(;) zjitKg-cf2tOc_Q%+ay> XL2)cWLkyBq?y;(BeIx1yu3PEkD4JpU_mHf{X62szg41ja|Qe$xn9 zHd ;x{xPQ+*=GD<>ATRFiy z3vI~Uqb(7xVBqDk&- t&YhXmjmo^jw 8 cAYTHML9#9D6FyZvk}yIptUZ3}C`0dt(^Aa51FY`$2S=?ii_f{ylRZ$ =6Sb%6AYLz%5Vr>@S8+Gu>e76$3|0P|WhkZ$~Voxd#Jfpjaf3C4eXA0sP2 zclIr%F7`tbyn3XsB (CC+Vr Oadu%2$DV#%l$;|vKPntHrTYA-UzJc8Q zfC2jZHe4^L>Rz2P4tfK9E%ANU8`kepA-dmSkk^zFt(PLE FuIc7JK` zv46fncAF^Y!xm4*oVyOjS6}xq*)?k15@6TJfs52=Uqi*(V`7oI+Axi<)MObV>WaQO zg*6>T?XkXK+_3Qg;On-4M??((zc`QwlL_p#tn?swLp2PlYN^|my6kgJ_aJn;LPk(~ zrQ~p#1z`=$PkG(+=RmjUYLkP(cjqX|lMUfs?_37EE;00B#uNwNlNF9zq|ASZUenfG z!0aZEdha?>Wp^vVrQEcL?D=Md757`^4#>A2UMVhno%`~2O%pzMHJ?|?%vT2Z1h}@p zfV6?ot81%*99L#^ESH@O;6!z>Vqb}e_m9BG-UJE~nC?+cH2aV_$v4}ixcvu4Pydn8 zyAF&OgB9?V$hu(jlU27o8xnk^lxrzHZRhcL$IqV0Bj5J4hHZMkp3XPq{5HwrpsQ}k z0oiRic19@cW1gz?YD21_VvCE>Cc9?IwPHxHMj8MM-VQkx`U1A)Bf43Xw@kDmTpT>X zkaS?bg;%f#rFVRcG~%|7>apw=#%WAaQ>kD^b4LEVMgHCK2Y|6->ib~&LogDD)diGQ zo^*B2x@6c_l8>aqSLB%_EVLX?{cLn=9$_U1ygE7WI bid%4ZShxpwcXxMpcY+0XcMt9) zxVyW%Tae%o2%2w^eeSvE-fy4t#{2QccukGfUDe%H)938&s)>sLKkWpI@?^86l0+}( z10~_XgXQb|X5oW^d)y}9ntA&&(bEl}WJxg>EkeI4#&C24( zdM_nrCp7&ja?4v)kVkEB7|JN~5AR}uyaSS)aZ-kT3vlu{jd`^F6`qo-jx!n6Hl-gm zsHGh>(2O^TB+N2n%^auPf?sFL@&}&o^mODc{6f9myVPFWBCLM}3{XMKmO;ywi2eq- za}Ivxpb)K0GIdSnIB69D&a%)+hPFxpIRTbdSP(L>DWB$!)g|`UuXz~Xamvlt|47Z6 zAR<--TDfu;mM;eFuE(r$XjICd{XZM{QOgZJbVVjzwI7#*w-hp}zf0d#ZR49QkJj`= zy7q4PwTz4*B3j)oJWkU!lEQ>%Gw-V>M4cQ<>jy+o mBFz {^r~ayClOTp0EZ9+1dP zdmFbuFHvlaChC>PKPM|H$W!l%T`5rpQU1&MbHr`tNf{ba5OM1PCAB0Kj79gU#E2bL zk%E5~m8l3N#0VuMCna8VkquP?u!1%FdeB6t3wgfLE!cnk8*W8+ 8}w5Ena&&=dSE#f-6R-W13WW%F1f*&c} z@1TEV>gQsW9mSISJ`~C==r;cIV`W=yk*0(;KFRJzx+g{$Z!)D8^%?_}ELMvL1AMmL zN{HP?Cba7O#~gbrfbY^J&XJAgY@Kt4(9kOT!1RPabh-&GHf1foN@W> P9h^&3DSQ} >Y7HzUvr{a+zLk=vd`9-8YPv zu=(r0cOTJA`3Vvd$ck43V#5QD@K5?CgWoFIrWv42a0`EhNL<6k?O_lN& ^wGqes?k=uVC5MePW9%uo*VqZYz zU;|hwkQR^fzIp@ogiMD~xJaN?nP{UN=|VN^fkxyx1@Jl+|8^+p@BG(^+#}8iog}+a zja}Ps!1cDyk&X&V+PMl(Nkr7!eu%!$49_F>RrsNA$(K1F|58D(RO?qPax?MCFG 7B&G!HvA7~t8COoRlg%}a7)*r 8CEie@Ks=*N~Hmd=(;> JgW`AGQ*I2ESa%At*rvF@J6mPV}fsm2lq8?acB>G=s}L8 zWSC5!rxRWW-T5}l^m6BStxANNMC(-0``*Z5_ J!+l4I|hX&)UxUh(&vmG~Z8Y+?5G`&<`a4VCyXmzw+Jnwf|tqgal u?DT%thW$a=9=&oHh`-* c*4WL^fup~NFI;1Gv%|Y3u44{Cfla%`2AC^D64WWSWHskx6(3h@BP0g zey@4X<;QB6ewL!Ucb&;|;F%;KwIsp&>bjOxXUWl=a$r*Sb2(4WfqgFZni_2zvb7oS zqxDl&n;y2H#v9yW?R>g;UtLopgK=ra ~cuO(`IP>mmNZ{6e0I$A_mRp7bxQDfQ*%H)iTwkHs7A23= zitL9ix8!~_0Km;u n{#At6nn+I<^ZoyO*|aec+39l>*B*V}Y!{}i@-Gv|@j g>UtPZ5N$ w27(RA7xoz+oWzeMIYx+TCg}d_(`GD@|h@)2z=|ciwn@ z%{kvqUA4n;yOtsFB2j0He-k hSl)8qDN_xT|@bADfEL6_-s)%NI6f5x^Bi zuU k-EBMVr-r|Nqz>Q#?kG4zIb3yY9FvZBIobsD8zP3dYcAhflqD0T z$O>d6ycuFtS9F5?8C2(G<(&OCteRkpWE4;V0^SJiuH*$r_wpm`s*M&yXOgNuTt&C0 z6$QH=eofTOU1)j5b|r+FG<(6)E{@%+D(3c$(b}nT!@Bqhge3W&OP;s2>`Rk1h`Ush zejADAqhDt&H^?II$W$Dwc^YH+xhVQ%UJ^LW>gRzwY}~fkEm4XUytEjez5E*lb= FRUTc zN9-7woB;Du-p;FnBaZp(>%Pog5K1L`tq`qaYA#tKW)Dx}yphlOY^$_oWqg{M|BHI< z;Wp1Nf!9WD;QIlcXENrsI$bYo8wX`>$KdUszRM_0_cHAS^=397pDDT3bwK4p&*r84 zzstgqrP%EPUN6_u+VHo|?&20v%2UcQaCt6i^<_mojK~B;?+oILV{T=aTbb2qB{Zs_ zU|wmpkT=VgMqZ%N$vc-i?nKXEt-6J{@*0x7C<{-tKh>qeUXq(wHn_{S7b_Tjh@P_= zrnA-<83yKnE%1X}bh6FGWw#YCQ7=-pyzHp -ST&BU^U@VB+Q+cA%I{PR&~G zwR%XGehcWg5&%PQG8#x6w>7H-XnKzcsLysrO7Z@5+__GvBfuKz8Aw!X5>Oa~t?^A% za4WDT9Fuz_twk`s`{W>OPL`Hs45oko)rmEtB-6U2!Ctk!SY;)Z!@cYZu(w1aX@Wtf z+^9aA5#Pwec8oXQ-bvXGDBg6`Khvk6$#i2Y1T)*D$sLwBLPd^fq!W)9?<|z!;#PuF zAwIRL$V6Aooz(9&+N=}tlR7~lRh4rOAFGZ1p%5l;ZL@WtIe!{kYW@jn4f*PZoCw{4 z)pr{O?=X_YdeA3_qrM|$Qbd8RqvR$l)4Um0eFej?bj5T0t _bP149D*^LSS7|5 zHc2V&RkP1v;Oy4)M}+`ZkB{7WUn3hc$-PE4oJEG-y<2w3PH3MY*-q$|(lti#gkS z7Xj{4sUr6%8;|{V7Xw?FfP;h#>~T8hdN_I=BrH}bMtRLyTa;;&-7zG2h|pp>4F}Uh zWE+p@O*u=WoNDB`eG~!XugwOK!0Djbj-vI}=9@zrvualisa`WDL`u#E!G`8PUNB%d zaI0eWYjvSS%N p9-&%Ib}cYca^;3$3?hkW8@6&VH`NweR^c6lS^T4m=UECS4m07=7iM z+!l?$IJA;}q@!utOgHC@e|kgtCBTPJKx!Ix+Gq4h!RC$tXW30vYkTYT?zYJ{^DmNm zp&cy5{MyEhe)|Ox|Eei-6fxl!kWb0srd5CIPat;x0*Ah8ZAV#4)@*8Ju4Qy?(%m_< z^^C#3S(iu~cRx5kC3=fNM@b>oZhn$i2~}*cwLW4tNu%KQp-0-%2rZb?X)I;SQM&Bn<=_RS7M8^*C5;;<>yx101jKwEx0nZ>~t5`(A` z)>g*rP+{~@;5wtmRGunlHhR v)0cSK+Cp~W3=H%xkS|(rjTrM` W2l?{96P?-XxDBK7Aool2m7ib3iVDLQqj>z)LL%PI)vxG*iN?D zsqJ|%`WpHk 8CbX9w?EICfR?_*J6kc_D_*noyjnZN$z)RhJ{h=Cn76o zDTvCbyz!I61m +$`| zV!1ws6}nY=kv)bgj;ozb+Bp2Z6<32ons|Cay}GmGOI{K%E8xh`CK;MWWqD&*OEH^- z@f7$oth(vhWZP9k99anNai&$xNyaogM3Is^^i(^T+7gpuCID5JEF=)ODC4F8 z3{^@rbrf&SkBEFWzvM^ymK}@`v)5a1WR#)yGr%*wP)-$?7iD2_Uz}pHU5hUagR)Jd zU5tz&LScqQoa~@eOKP3<=d!lirfNyqnO2X#5zRzSMzcOq z1B1BMC86$m5hY)7c^Z7zqRyCpCeU;YX_3HXdRmombrV=t`V1Bb!5^627f7K>ktItZ zedW-WxF9Rkuu=D-P#9Q^VviGzkX$WqJeXR*(myKLWwn$OU>#iO39UvY(Po)(B7!y| z>6FL$u0f-2k?*cOEv`zp#$FR)C1X23vOhU#Gg_C_Wc8z_p|Vg4*NSz)Dg(H7k{^Pf zN2;JLE8lO|Web2RY@N6!@AV-Z&AcSfrs&R0c(Ty?H^`OPgSTAM6dX(jVgwcN(_@es zwX||_@&8vpG5w9~8YHb4BQ;{qv l2w#=``OO?4by+gc8cpHTf zvmy_}bzLes4Qtj(dsT&y?Oep+RecM;qSQ4KG48N0+lW2Veq1DzQ#Ux%e)oc8w$a_5 z5^n%xV!;3~(Qss9$pA12nD-h9L q<2Dr->k5HcmzVNktofB}3`^SN2 z+y?1`q?F=Iq;j&|u=+B-RWJZX82NwxSiQFp@29o9@xZ^RTzn(mTFB#o`_uZ@#jr(x z_QcsXcDR =9u zzDZAY)CPv{LJV%ZToHMMtwmK@(Wmjioy}z0m}mU082P3#!yt!}51iqlu<3G-As{=L zF}Bhy2sgeBpR<8h1m-c`fQBrVC!Hmu`uc Ll$jS&)&1L%pK2)gyM(2v z8nj8jgpkjkL?##WA9=ll{SGecJ32uA{DVbu0Hm7zqWu4>6-Ex)_EW*X*VNK=7l15D z!)~1(lU>1N6kA@O^vngssXYhN8eNhveSgy>KXTbQtwy@>y;MSo_JwaZ36b5vi~qQ) z5R#F->zwJp7!a&sAXsQpMF8GEfGq(bd =jaV8LSiX=&4n@XVA z{2iJ8YU3}=Kp1f^|4Ke|=BtWGvp9UifXCiQNwd*qyBcSFzVQQIxxGl%HJF2}3pr>r zB{b{I9mj8te?Q_^cl`G#U+y@QvWC;UL22bYkB;CaPxB;6IrAhSa4^E20JdCgj?I&$ znaoMbKp>Rw4LC(}OT!g^uZMq3oNpX6T2-37PBY|K!NxBAvAoh+hC2F9ZM(GvWTfO$ zBZ>_Erdb#)xqg+DaY~jB`;*+t45@X~ aT=H?G~l zjdLv;U>2mYtpb${4edlciWPvI87WFpP3Jev3aNP-x0;wGA>-M8>&W%f*fYDRAv<2* zVf}Lss663z>_Yp_>u|un%;p`rmo?|g6 P}+MpNpsh}ZPNYWjr37K;Z0!<`n3P2 z(bKnAO}{DueWI^Oi(!8ndR{+13dp|6zj$=5EoXPh9C&+T{AZb7y`6OxlS?X>9Gc>z z_|am7MQS19s?*3}HBaTsedBf&TzzPII&*vv|EXRfc`N4bNn!XUs)8sm$CV8zH5%P7 zI
lU2!1QajO5G5XnznpBAdnE9hBup5fg QgyH=6K5n^1Mc#A1Pj#-=+QWn6QrHdA&fszjodmxeZax+@9?$zp0zPfdR;Ai2Xx z4Ul@(njd@#5%CDi{vBI^{BHCZ;fp>GSO>>=B9yR|Um^I0xg_=K&O^)`0d0T##-tZ7 z$Cf;gx8f7}5rbMByO>&*R@T)?{mA<_2!p^ig9k>1WPvbQfx-4ep$5dtPqBZmRun ;Eilmto)u|SVe$-OF zU?;tSOE2%>e%%*P1g4V!0AoOQkvGtfFX &2&gs z?SiXLd+_CMrTCBf56lUHdZ^U&)DN+)jE~dmxElS Hyt9XDZC$7&_ZMsM9K!k%u z=|&}l%D;H-KS;}e6TS=K>&26sliYt~{PTsmcmiIPn7Uq=Y+l$4z7Yu?^K7^15GjT+ zC0TOonrKpS2byxKQPO6>+mR6W*)DMUWF`o;0XwSG6GjBO#+CFYUp30*uYz^r6BL4M zb@F15|Ayf2j=Eq!0--XId-+ceW6l}PP>{1WvE UUp&kvzcvYM&Z87St zNcK%Kqq&0}>VaUpp56R@Sv(;XLX8);Q`!LJUDCe&4MIAvv^YQ{+XB_32ng41;rPB> z41_VY>$s}RW>>2FFlYr=89$hyJJiqcDTMXob>e*jj0bW!n4pO|6EHo<7yLjxgPr$m zR1xXh&;s^juI$;Jpe;-lH6X%1vbs|qOT1YBNkprkVch=#{n<}=Va+R~Czu{THOb|U zc#V-a)UR^Kjz+|eoFu(q{(xyIa7&r$DgIx=GB;{h<>SILJ$SC}WF;T9z?Nw8eis|F zg^RKOA?Z{Zm?9Qa%HPMxP9-e-dm{DQY1Y2lg_e|C_{OBt?WVL8?1(Q>R+(1Z6ls6O zSCdmREMLm3?g)ga?%+ D3EQKCa<+fB^Nx2N7Paao`4*kj(TM4~o)$PtWW4Vvo5v`!@(E z>n7PYxS>2`g7aY-plR~0Pf`Sh;AjLm7Cl bDRrVX|x#c4+0Hz1nHP!4?sj zvd5=8Y*`UYNujWQjySc`U{C1#_=Q2_od^Jo85UI~IgT=;aIR`$h%^O|Z`45E7Bdvj z$`mBG5!s;|O&>HUeKLc*xM=x!0Zf5QoPB|5t$K0O?<$;v>2c7Le&PaUuJvJ04lJD4 zp%uOmxX6a|7bQ`taRwVnCmfAd$muo{TU}@tiNdHlZ(1}`?ExKL=(h1!cSX1PE}m=& zdFGL}@Luf#Jwml^mEzzZ@u}1NRX_Nv3+X 58 zRVa(`ICiRIRj||Xc+viYXDB26#c);ssfCEf&tqULWnvnzvcNBy&0MzPh4YxhUJI3v zO I{( zw<(6V5sn^7zgEO76-Xd5VOI(rOWIi7ik##Q{NO=iLS^@TW(vVw#D?Y&yS7NOA&Vq8 zggB(2oH<-(h_Qiq)-X;--U#IW y6$JM$r ze!pTc1-{?@H-%fp5BW(#Nm}W+gow2KQ;gQS?<)3P#6o+@R4CPcXJxg1XG+PP#sDKd zzdxCt34FmQLv(Q_KT4|+l4GS& gXz;9W?5=z_`Xa5LzsE+RfyJXtu #$;Jj~XX@GLXaq%n=#5RUVJuES5nO%f}V~6XS_k7DBu<1MM&x<)n+pU|v z&p8juBUUs4 z+tv9EI6_u(SSARBp^#ODAwa@WOY6Ny`M{rrE|6#RLd1WX_kSB$Cf{dhuLAV1YzKv1 zi)`GPP@mulfp-Z^_{pV2BSO}qF4z%o{>0E~GCrePV(DcLa1urLdHsZtpC-br=!`=A zJ)fIF+C+>Ou=7;=BS#HiJ&TS3xw#W(m`{QRsHrjqX@AHD lrVqi)rFFI^dAFq$8*l^S$x4S=If^H^y5Cj2%_zfb7 zSJg;#7m95Zs%aD|ZPiZlNMYI}NA)n8B--FL;i9<}IY2T(h2xnEwk>c&6Is)T#=h!q zoX?(tT?9#0WVqUyfO*H%w;}}kSU7<~>%#CvB%mK;sVu9ENPghLX?cQ3Z#xJOt9G|N zN&k{G!)eaWs3C)~Ta2g%lt~~>+Zc+0f|*==1;;-)(+`x`cbY1-Wdiou3u&^tFJAIV zHFfZ{Y%ET MO{r;Ap@v<@XWPU%JHJ`uYf?XSQJxC5sXO)#&B1xYW?>sVE&=URyDa zWoziaz72&17f#R80>r1HCOC(f3$#T{2dRpgtSSIon&ttYUDWJk6=RQWZH |}Lv z20TzUB%BBaJP`MI!Y@c$V*hpbjVH|U0(kDvCA|#7$u0~3g@Xx)g&o3aF!_7L_peA5 z UUxE@N;D$to#VHi+*jN@(W@Nl`6g_3oDW!tZz(oiPQ(S>|KN)E9_rZYl z18SjCchL@T loIg+RnZzn=Z7MZkEySwl+Kt+djSThFZ0nMW<*1rjuzkijx0jLqP zGKFV3gdltCwQc63{pu_kvn5h0&9=|Aa?7)ncb^e+^Wjc{=G6{i?EtT4P >= zShcmWz9sD6qOm1>fX+=;rV{u2`pn{q@*Ll!Jq_}WqK_Dgs4Q0rSJ7Y~Z_^VaM#1Dj zTk *Bhzd<7yTB zZAa)E C z-4CY`(ZM!^>5KV!0W8w~YWa8M3{k+4b@tuXFaT8oDAhAt(9oZE+38a&mW5DlSC$Y& z%~hm07j$=8?9wxIRVxcEly26=?WAWIFA{|ca^MT4^GxrsjlnRvz|zUWCe)-UrBHNe z$hk=(wI+E~21K?Q9fQeZ=(~u(?EycbyyzIDOTvqSRo6aEtbX4RSwmIBp?RET8*IY+ zg*lGMfY&!Vbj;pB`AQ7#D_`&~Bg)Col;Q P<1I@h`RQPHKP)DEY4aLtw&w-Cfu1Sj#g~BBC zGvVQx91f##j!=_t(@d`(&qTAoLFzBwT#o;gA8#(_@5M {YqxcSSH zy_NnW^5 ZJ zN2udViV%gp4!0}wXj7$VbuJH29Xc?4`yY1WkFB8E!V)Hd2@ek^ApyXUyl=$8qM|4$ z$fBa6Lda=%UGr&oZ}Xu!f#wp84xU}2UUG{=_XQ>Nl0U@UN;VI2aLF&Vq%KTj++yH9 zNjkAFANoh@R45psbxk-w4vv$w7j)7~bD`^KSe>@l moOg>Xh+}ynFKCb#nB$BYc`sDjSRGySq>ICYExb&+BxG+(-Ml8(m~Dz zDK&+`&W^}O)!!gPCSd5&yQg8)IWmlf!d7MTt8uYoZJR>sr~uT(b2$l*K@oH9q@39; zg5CdBwh6Ac33h>Hi{ScC`RjOh8#Y#PDs^m{EgU$}haCk36aoYS4Ep_lJp2hc{(IfM z6B-FKi=dDaF{`4XQ2-=5nXqy`X@c{&+CMXXz(7F-K!A&PM5x8xfvZ@tj*RczPg+Kz zDzXbb6Mu{%ON`tg-5i3AlJg*y#30ZXm_=G@sw~B;sZo*$Zd6VF{J`QXJh81<^#D z*bQH-4^Igf--@LZK}Lb=2x-(l+8TWLE8 %IPv0INUlyyfYq;?6X2!llSrl;ohSMoXYr& z`nN 2)$$bC21(1sOxNFm z3WG2dpr!KqeYwFG+zoz6Z+!_03n|57FyHzd!jety&HTCqukLb;iSdQ);!S}fDV1jn z3DDQ58rk;_54;|{Y5N1g!kxY@Vu-L79_{ob3icVCyynHr4L)ta2iQxd+iU1uW-!g~ zL88IL!2h~?SgzPlia&Rx=c@os=i%pth+Y|rwxxBIw0l;mu9jk^J@jxCzpLvQ^b`IO zz6ESXzSJHhsP4V--f`=iNFd&pN4=G;x35=0pgj5$B=spzVt5dq!mM$=ck#D%bgaX} zH*!C1hdsr9xff|{FaHQlPcqv{^3nr%xjR=rRj(|N{8n1T8*=&^>P}lJ{t%hX6eM?k z@q~ 1Ca?M1h^6T!1UU^_5z&BG2q|e zIFGQ_#_ Vo+dCh=)i)(+wbs%bIEhm=4cQWke9@RF4T zs$yAOTLLqaI&=(WEs>kLOnRpeRKZEp$ff=w`vZOsY3A`OY(aoLJBs~}51|gy4=Al7 zt||$tpLf^^A%1!A&`RCGNV>DKLcGo-1o702uE&cV9D)nN6cj)(>a8xnUWLO4u(eec z%v!o9R~i?Yu? d=!BbA`YNCubREe<7#FalO-dhkf<6H1; zo~<5}XAyDENnW*FJu?1^vVQ_Ly5R#EDc&e;p$%lqsuC2Ynmt- }3qZysL(BxfRgI^(7W0Y3aeihvja6`HAGy$0Bh#3;W^F&0l`P<_kyZX= zO&G7>0J1{RI+wbl3k&cYgp@y3(d9D&COa@!kE# >@%;JLNA=qf(W>WzYl2h1wFFdwGghhBw5!*jY=8HDZni#Rpb6jHWtMfOo2=uzj& zxRYYQLW@}y#TcofP3hWxk?uKz*+!`iu`H@rYk$lAR2t5zZkAnBtGW}_FBTsh?WC#y zn&(DpOSdY`@U1vbwpS9~0TD()c>bB3^>a|Qa!e+~^|Dae<&Hv()vR`-^?YntR1*!? zM^R)d&Y*%+E8V_1TW2l((X7>Hxc9DH(a)<@OxxhNT|P)>q}j>2pVLS{4ehBaxW+0C z2nuDEG^({E pvTs{0v=0i@2pPB!x $BUa(+u|y;L*f)l^o^N1WIGT`O4XP8Me5cI96b$_or2gen zJNFQUo6f|Atr#lEjs{EzV6|DJjG(XpXp0OlDCrBNBgHY2^@8IBs_;~&o5n;$69U+L1tsdq9;!KJURy# z5lTSe$VL7onD+t%UkywPcEA0J8lU7wJ=^|-l7=1Z#n{}XSlB?Isyqa>A%rGOzZg>p zBl`KY0GMyWp6<@(ygpJRoqRG|^){oxaT!G(?S8uLeu@|%Qiq3Nc~9x5Xac9w2T0z4 z23zE!0V!h83x@A?A|A6%k3b)!;9d##Om6)BIG3xWg*TA5FQuu+7u|fNR{Tp+VqcJu z;0>6~dD#%0tyOKQdz=86k8A3YvmCnb7fE)sS~N~2N78t)fzKF7qPWm$a65uD9N5oL z$%Q57rx^?An<%NmG&2c1iqw;c5GaNvB6vLXMfkw4nF7w(8DW=ifiJ+hjnhvbZapKb zeuK>X3N7Y@lUv`l7{(%?9W@u~0lli jSw3i%BJ^y9oJAYfp?3_4IS;LzZZ z?~WW43 }o?qOLSNXM{Y>M)`L&KS{N=YQVfz8T;+ZFGa8YS2nVrxvX1nXnD@QcmJJ{%FxJ +(Xw&={v^Oi|t&^^gBKlPivLWJB*us65p8CZ;EJg|WA;SF9`G^zQz zdi%o0f1d`?>QdsHRsJl|!wF5qfaO9;s(6Hxgcr{RW+_|r)C5y&{Nhmgg)ckL+ihDz z)|*4=KJK&2A*ocHRSg+V$#7ilaB@qncuCo+K}HVoc2oo}8tP{W4Z&wF{`=Eb=OdYC z;2kgE@rRCBPZ9t|s4wkOBxdR!ZM)#6eD{=r3Y!X3f7H(1rx8 zH>-`Go|wD{2+a6^w#fBQ*`ugs=zZSlnAiY7xS-_=9Ag3ftlQn!`kzD!pQ)1il!m1e zxMsg%ACFjt;DiW-og$%_TczHb?D{oK!JRTw-|pV=T8P=W{%SBH=mA6nb0-5IJlejw zrpATsRq>G*{swWgc#2JWUCbe`nLn5_6CHsiP3s}R$9f1<2+Yh3h@)r(W>&9SHddd9 z-nH4^7dPW!h0C=@I%4g)Kl%AeQTljv%n#L@RyXd76g(fVd%I`eI2JNQhma~1q$tm; zIdWiL-ee|GQ8&bL>FlRU%7 R|hPlt&?zOg;(t|Q6O z(7 X+%!u5KrxYQ-h>jgj$LJ16 zA2>GalRbjMB^WRn)4BX`gN;rc>Hs)X>`3V8+M~IuheBeZn9J`*ZlRzvH*j8niqjzM zOeGBMQ-OU9YroF-i44kOL_SH2LKwg@{Nj?22c^tdG6TZuSHeK9c($aKyaF7?Kcd`l zHJu8Cp6Y8FOcH=6-yY2qnay)Nd_(Yuk~ueS2KsHd37g=~0Ml~`ia4pz6hHmAF=_mu z?1%=jve$yXF_DKAT#cJMD|+0GHANw62>y@XAkDu)@&!D7zSd*sfA@i=%?zDjPSk0W zAYz%?qi;sG$%tb1Xv-0*gjfx468af7(nkVkwA}81)2ZqB#Uuc6kkl G5hv^UUtJX{u*ruhk^ z7l{)#+-!zuWEY}p?2i41w(vcKLEX<$juP|b-u+*R8=35j)2kG~p+OOWdC%c{DkQ3a zj~^LnEyk>C@cNh(dtcF`SH8pZT26^mrNBndDzwFESnmp#=RaMyXyy?X9pQhPD|S=W zH>rxsGC~Wkr6R&+YT0LgfNx8eTNsU6+~B29IAM`~)&&Oxl_kCu)5kP9K)qm!+DyC1 zWR5PRnyf}g@xaT|a|0c4`|2qnqzi~97axez*s+zPU_2d2YIZ;Yc2=35Wdj?UVKX7S zGP2PnZfq|xW<1^sA-%<5&4%wD(YC{wvBS5s@rp7%gJ3FwZm7eCuL`m;oL&%*1P;7i zb0~V=Y==S={^7OH|0DnW$izoo3UR8cK4N!cZJPcb1;PT~tv`2z4BNO7vfyq`MC~Jr zs{FuKsu)IL_JIGuJjoJI!2xabIF%rm0q%wURkn0ObiKtMlX%|H$)=A#AuZX*mKbU` z__-sZ$u7%$RsS>Z+j@9fQUhi9A$S?ouDOvBf>-)LnLwBeRJ$QQ4D^IBo!GFkHF{{K zt!ZfbMwC`%Rm;L-L|iP}qYSZTL`9*v$$}>GnGqgxOf0ka-mt~(Ax1JHOPEzeoGbUm zlkDJlmd$C$7v&TISN!j6nG+^HbH* P@AD0C4{De6uN@xu`81}ah#;tI7W^p z8l5+nXY0nRS7=a*Ki*(&SlCZ@%#+j9#qmu{ef;Mn(GW`&%FI=LtGGfjSl8@~54-zE z8pmoVJ!OrppHI!B!QRM~H%9>!=rCf8e3mM&(jp0aS_eqXnq@`!n#zNnQDMV+{FpyvnmY3!1GTmg> zo64cQ@YZV`-Ny7L6wg-;*pN(QP?tQ%29(H($_>cReRTEZ+YW~JOq&du$X2~NIzfgh zM1w+SFN2=bP%{2h^%H&-nj-paV?s9ea|oN$tKS2*6VMeKU+sdH^)S`5M+l> bv}V_5T2HevCu_ literal 0 HcmV?d00001 diff --git a/app/page.tsx b/app/page.tsx new file mode 100644 index 00000000..6c58786e --- /dev/null +++ b/app/page.tsx @@ -0,0 +1,229 @@ +import Link from 'next/link'; +import React from 'react'; +import { MorphingDialogBasicOne } from '@/app/docs/morphing-dialog/morphing-dialog-basic-1'; +import XIcon from '@/components/website/icons/x'; +import GitHubIcon from '@/components/website/icons/github'; +import ThemeSwitch from '@/components/website/theme-switch'; +import { MorphingPopoverTextarea } from '@/app/docs/morphing-popover/morphing-popover-textarea'; +import { ChevronRight } from 'lucide-react'; +import { CardExampleLanding } from '@/components/website/card-example-landing'; +import { AnimatedGroupPreset } from '@/app/docs/animated-group/animated-group-preset'; +import { InViewImagesGrid } from '@/app/docs/in-view/in-view-images-grid'; +import { InfiniteSliderHoverSpeed } from '@/app/docs/infinite-slider/infinite-slider-hover-speed'; +import { Cursor1 } from '@/app/docs/cursor/cursor-1'; +import { SegmentedControl } from '@/app/docs/animated-background/segmented-control'; +import { MPLogo } from '@/components/website/icons/motion-primitives-logo'; +import LaunchBanner from '@/components/website/launch-banner'; +import { TextLoopBasic } from './docs/text-loop/text-loop-basic'; +import { TextShimmerBasic } from './docs/text-shimmer/text-shimmer-basic'; +import { BorderTrailCard1 } from './docs/border-trail/border-trail-card-1'; +import { TextEffectSpeed } from './docs/text-effect/text-effect-speed'; +import { TextScrambleBasic } from './docs/text-scramble/text-scramble-basic'; +import { ProBadge } from '@/components/website/header'; + +function Button({ + children, + variant = 'primary', +}: { + children: React.ReactNode; + variant?: 'primary' | 'secondary'; +}) { + const buttonVariants = { + primary: + 'bg-zinc-50 border border-zinc-100 text-zinc-950 hover:bg-zinc-100 dark:bg-zinc-700 dark:hover:bg-zinc-600 dark:text-zinc-50 dark:border-zinc-900', + secondary: + 'bg-zinc-900 text-white hover:bg-zinc-700 dark:bg-zinc-100 dark:hover:bg-zinc-300 dark:text-zinc-950', + }; + + return ( + + ); +} + +function Header() { + return ( + + + ); +} + +export default function Motion() { + return ( + <> ++ +++ + motion-primitives ++ + beta + + + ++ + + +++ + ++ > + ); +} diff --git a/app/showcase/page.tsx b/app/showcase/page.tsx new file mode 100644 index 00000000..41ee444c --- /dev/null +++ b/app/showcase/page.tsx @@ -0,0 +1,63 @@ +import { AnimatedGroup } from '@/components/core/animated-group'; +import { Button } from '@/components/ui/button'; +import { Header } from '@/components/website/header'; +import LaunchBanner from '@/components/website/launch-banner'; +import { ArrowRightIcon } from 'lucide-react'; +import Link from 'next/link'; + +export default function Showcase() { + return ( + <> ++ ++++ UI kit to make beautiful, animated interfaces, faster. +
++ Beautifully designed motions components. Easy copy-paste. + Customizable. Open Source. Built for engineers and designers. +
++ + + + + + ++ + Free updates and new components released regularly. + ++ ++ ++ + ++ ++ + ++ ++ + ++ ++ + ++ ++ + ++ ++ + ++ ++ + ++ ++ + ++ ++ + ++ ++ + ++ ++ + ++ ++ + and more... +++ + ++ > + ); +} diff --git a/app/twitter-image.alt b/app/twitter-image.alt new file mode 100644 index 00000000..0b386ebe --- /dev/null +++ b/app/twitter-image.alt @@ -0,0 +1 @@ +UI kit to make beautiful, animated interfaces, faster. Open-source and customizable. diff --git a/app/twitter-image.jpg b/app/twitter-image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..95437e293f8dce5a79e8e23975eededbc5bdd65d GIT binary patch literal 35379 zcmeFY1#le8vLHHQX0TWmS_~s*W@ct)mW39R#Y`46Gg{0ni_x-}Ww9;xAKT}gd)~YE z?YlpABX(nBvwLc)va*u8GP}B_=g0DoO#rI2xRf{m3=9AO108@LYk*(?GzegzVPIil z;1NIv3Nj)hG72^-8tA|##lpn`ouowML+++ ++++ Showcase +
++ Building something great with motion-primitives? +
+ + + ++ + + + + + + +=`o3<3@8#{husr-Cq`&p!YR90C#wq$x;$2rv-*Q_qi803rk! z02~zp71Vbt`458sSNne+_}}IMWSiMYJ< +?k7b1pK}x0X{HA-`yJg8 z0KnX3n~<_ACETQ!({cHiit<(+C&CQLDJ=9y<99J_xUo!pcKr&`w~@`w0l}^Qm90R! zm3gJ1&=~`FU4i}~>fqx_Z@Xt3GR!+3E0f--{`wE WL6ulg8KWrw=Ar@6~{qi8y|Q_kI@f8@QLyHa1SsRJMI=) z-p~-mU3(t>05B1?5FqfI-6rOEIbO9?AZeszIfP^vUafrQn(49$W4;yI`=U&wb0akR zvGiYw1>60ig%``h+6@xx#DDCDB9QF8;=$W;EHd^|%4wj$u8-+PgzV)qZsD>Ct>Mk7 zFL`?&EuX=2rV`+m$a4Vk!L6>F;N7RMyt=m>$qItkbIwchcE=*)L?ygshu4X375|k` zh^baGj1!Eht`vgYbq}XCF3%QAiTp66k2HrNIpwgI1$mc=pSs+56f)m;+Ri+#98`Up zsZ>xyrY=aEmLllZBJ|&KhsnE3*Y3G}6^|ljjD#{%f^|?_chZommG!T^`=8W+n3l*B z{7<<5A5FuCTo5%B{0^jrAON5^7rhB;LSP$z^9OzZGe8i(qo8+?^W&94mo79^Y~>PA zp;<|FBF}fRFJz*0R}L8+^UC9k_aLDj|DMPZ1vHix>#6M`iv !3;)m$meP6*v#z~cGf=C-Sh90hfW~)KH ziG4oFg_=o~k`IX$1pPi#ND4&+Uuf(;T&&$TaM^OyQfwb+&QD|mMi;0orrZ{$^l}*4 zAnexvStN9l=E)oJYF#5a2UC`Ir%!DGb6j;ICQO99JL%WNjjwdj#<|n>p;x&40@=Q1 zJ9XR}b!RNzxKxK*xkER!XR_UGQSJ#I>aKSm3UUR^-QP3d96cS5ITQyZvp&^%hI4!T zvq)zbhl3Kyzl-cR5_J)$HDh`;L|jOaXwGKe1+r3u;X<6)imf9) p`vyxbUN{4z4nVvI>Wt{m^t=0AxA10TEd7Yvpv zqD;z|ui|WCI30f<+z3Ax0ER17np_!~;V;EBgv%LMs2&hI66NV>Y|I`9-gl8nU@#@c zIgI=Bw)j5;Fj)WpVgLVaoqt GqX(y;#y5diMrqJsSQs1oA; zqyvNVM^-Q~-}9T!N?P%**9BVX5%Ce#6{n7XC?L|){Qo2bM0{!nmp3%|0|9;6l(hd> zA1WzC-@{bhs#j{}oUd>eJEt8>*ERcx hzEk(| zzWmXKnr=m$FtW2$uA;$;aE?p+lgz_Kdy$(^p4h^3eJ4zRZlQDMdr?^HL*0-w%7 ?uKU`200D$$n*(msf{m-vUhPFyq-Njcq5R)_A z=EckWgw^UqtA_`J&JJ16;K+>Drm|PUjc5#eEBkIOGw+;0201G2C1BdYI*pCfG@k zXVgEsAO^Mf>ps1$mX9QS%hjDncR-M-^{7*mh&B4+eIB>{?N}IN6uwZZ-OaO8@5V0+ z=7Yzn|6iktrg^_l{@L>Sv_bY~9rS(a{;|* mUv zCH0S?e1VSg&Ww`&zcBEaFy(SnO#kRbA+mYEwYEtv89iAV_(CV!`A%fn&G`Op*tdf> zb+~!3l$P;p&DZUThx`EE$5B%NApFl1b9>Z#|EZJoH!CV7qCyVb+<)-J^NmU#eM5m6 z{5H*+pnK?1C2={b57GpKu)kpHX!`ADkpGnx>1)vF*QAh;g0BIfI>eF$%t8J|_-`h8 zqF(;%f4{1Wr=QZ281lc(WN54yuZA&SzDzL~Xkq3jLGN^D%@G~+K_~C`tpWvMdq77p zEQk%r*n8JK0b;uU8laf3qzRj4eUx`nv uUA*2uev5&yzstB*h_E3MeejI zpv=l~2o$P+dT)f*d46ysQE?@htMiwIkTRDC{C*T$zuf^Q?te4dJoHyD0Bq0u ROSrZ68qAh{`-UWx+{oc NV*5&d0_ A||c&pT_-S>3JfOaQcT63q-v{SN|T&*U+R+AE&Rq zUTKTDMo$~0=PcHqmK;5|*=#mf-V|w9Yh*}kM{}mv@0(fv!xjLFfMtEi-;}g!{JWC- zvMhAPZ&T+om7A#7UGL|Q61)pNZ`3H6 z`H+h9h0j68WOcy24!6<-3USGeYybF*%(g|Qf_izA5pS)3xtQ3F|KY6OAK4z$GFCK` z*YLMm0jL02GysuBUwwO5@s-JbMOzg-h87=dQ*->xhq~GNNd&nPqzVxvi^&3Dr_iKX zp7x1!6E}0Tyv=M1rR6shJA<%-8SdsP{dZqIYYK{ky_`$mOGWN=xt}20bt~@QxJH&O zzWe~-bahQBR?ekpS=r!9wL5KQutnB_{Y(sC=wRs4XooHqQS=w)BfoS)W%>?mDwW|x z8|`}yF|qux_*L4$&*)WmP4=Ru?_J(e KE^4)w+N(lAm<(F8q9SX1 z;bK}@%lSD32iXam^@0kTIfoBT^+h&r8r&y#Z3pj4w~t`>Q^=@eR-0m$H#Tgh1DiXh z9h%5f6aA!Yux%0_R#eNR7s`gKCT>pZ`fsm4TlgH?;dOG%pIg}+ky Pck~moXA!GZJ1~dXM)-TSL#c`N+y)~7p w~ zZv1Q;5}EclplP!$O3{B%(R|ReGl_A~tdUGaMf*a_7d_d^RXG%?JeCysKDmkpn4+0Z zQTgyj^QgGf<@j=adUB1GzA;sGr?dI$;gUn=(L04Fr@wF8YQaiDR*f+k-~Rp5$Evc~ zh$9ZoVThT*nLndG?uP5vGu9t!5C|aW`iG}86P-3^4xOWE=b-_<7<;qO3l*s^6A*cu zlsQbt7e{7VRkq0-WEX5d^6_YV_sMcUSlR7t-=1yc>ipo-`J%7ilBuIjKrGUvWiYzr zw60_(v#=kjM_1;iLW0N^LhXjo#kJ|h`FB593jXDXpB1j}IGt!sh8XC1g!gM=JS?Kw0YW z(P+gEcPm}d>2ZY(p3bng!EC>za;I14K~@RK1Ixb!VwT2=WO9RM2?A-Llx&vdZ>-}4 zCjf9Bnm)uRMVT=P4l74O6qr3*?7uG_uW!MTIL2Bv%Q|G!zy^G{)-eWtnb98B=ic+v zfKRRpHK5+r&qhGeuUhhh(wX98ywp4@Us-EjmG7|9zHw1%o1;lkHY@VFJ?W;khb#Ca zPyp0QL}Bcpxd4tmkTe#Tyzqw}o }=sd^&3! wvqw+H}C-eex=@t(YjCdtUc$g;ECK)gYWrq2Io zH%#h9AEYoi+1$P*+g!GJ)Yl1J0Khsihi~9q_v Q{V9Jb5_&D=K{Bi?Aoe~BK(6_f>x9~Ah3>#8wGzCGw5Jpeh8$>x#$+T2 zfGL^yG~Y_6FQdI`7kK}c_YQzSa1y+qx*MaSzn(H3 dS)Rm4#I?TWg#p!6$KiUD zSK;ogY1ejR3%A)YV(>mX>%7jSBYV=DuwMu9Z5#H?jbmGdKJH8~Nkf^QN7oYMOu`?k zp@?J(!(v`yVBgp4GKWp$dYK_PPUyc%8REgS 6bZL~3y%2F^;+vJ@y=ntaR-HUieG6NIj ziYOB(JK9z^LP(|9q>x}&$*`@8+bjemK*{UxnxGr+Q|*mbNvn;giLR-nMfa+Uu8u{P z7lm?8MX9-vS!
fIi90&yM4#!zj5Q;q2^8>YuPCm zC*a8beTM`9h~n5qf3ha|J=-BB?hFB7M?oxN_OB9lzB?`^Mzy66D~;UTZzRYGf+F$f ztri40fwH|7ry-hY_E>bVzfq9#nM+2XjeKqpCuq>tJv0O~G&pE?9t6KO^3kBtQ8Cys zv9Mp0u);7al9Dm8unUq?0EI*hUny}o)(V4m^M7vjgTaFR0PG4C-zqy0rUYV`x^n{e zh%)D;I^JLJC|M`X2w)X#`8lg5f38%UI)}fjztfadr9v+(kvO(`Yn8f6xguCC{E8ky zCR}=^cMzjkdMIPJt?V6R^w=LfIf0Q@oIXny;L|iunEYB-30hAG{CO>2>}w!khAP zgOtVO&UhE?GITcaA~8(!Z%WH2RxCU2Q!Kx=$mpbPWsqXLH3-eVS_}CB5N;+$d{CXa zr2VqsbQkg9VdXH_WPG5qILAH5@U26LOa5qWnFEo(HDgJ+zsasO>XVK3kxfmNpp)sE zjn=W94D!ZMmkg^{AJqJyn6c?{92xyRqmN95Oqz9~s_J_7BB%a_cwu-1 a7i7sO*kH|D*bK;_$}lc1d3v=>%yRfqSl=ro2XKoAL!G z`r 7leA%gWmK6NHDNK6NqTAxN3R)z+41E0*p?Bbc za({6=R#?pgR_&e5r@|kA3Ln<*DeH_s+ZMCMu@U+&6|n;fbNvHnb5>p{>9eawi+VgZ zHu9OAKEQA6WZNos`CZ7XL+Lb!l)7v?cEwjo2`Os|wQ(?ij$(UMl)U%$^=j5hj$KyOwIy>1Wz2lJu7;Ji8 zakx-6SIPP2IC>jACx*tgh@Wm|F0eEns)%JiQz HW;_Y zCdV==HqLyrUm5^}D)OSs6+m; z(y88?Pi(R?Ymy#ro;+AMGmWvglF^Nilx<1(gKn;CO?HMRlmF|eBPzV1C6Mk z{m7C*8P!l>qna3RgxtbWq?`mU#%Z;y7`-0dk=Vuen{B90qg9(W#nJtu!_0y9HT0Ea z!jk2NGIRTn?+9w{rb_*W+=N0SQgAK92D)Mq6-Pwo-6BO>(C`RSQ!jc8DCr5&N()x3 zA2oqL06W~d21wT7S8O3`^S8W fE+0jQxmeX@=1#&N4ZCk3_1b4B_ zlJj3m&LsM?{p%`z0OYiy!5-}5FHtI#FBT0fG?j2;!)Yaa=9)GBa#<65axE><_hRw3 z`S|fv>U}ozO3%X4s+w3mxbP?+p_&{9JFB6s>g};)vGLgARksY9#m@_PUat6*)mE7) zw;>2$X}5N{; P&^uf@6t=SWiRx9m=+mML=Qk3v4%Xq$8rv-GPRMEABZn{yb2v%9p&zp z?KT_Dg6gy?-O5eR7$B4>t4vE|2^*kt-dhk8wVbl%qZt>Sf7DYdn^iQKnQu_go@c*R z&&W6(sybGwc34rMkyA6z|JZIlJFTWnvtK03W>CRcR=@#mw#p`+8`!2`C7vByQnBi- zqO{)g@w~ja3AwRJ!7R4KvUte`MF+=>9kR4Uk5To=-iM@g_NkMFE^`J^GE#6(;iMF! zNNb*fbMe7mtN>9e3`5O^m0d}!6Y2-RwkDbKsHr+-viSy5%Za*> z#SehArilBvfhgGzz~>M +D{TB^HC4fmdL8UVNoMcJBM^ryKf6_l_t)e#z6_ZK zTS`&zfS;AsT&cX&nu}_&G*y%Jh(uSB7jo{{k OA*?LC}E;8v{C zHYoFcPRhwvE`p4=WN$Dw&@F;FhpwI|8IQ~NgdH_oeR1$ S zQwJZRp~g-}b*_p#YqCsAT25NFwRomoRxXn4?Hk3hm=osN`8PIj&3Kj*;q|@;x{1Bb zJN6|mMn`A`h8xDNZ(?nPWTerpm9&@enqzaImIbXebrkBa-m(qa2%}r;WzHD1Mj7*5 zd{9b6(8ibF%b)$oBLvF-an4hnO?D~_jmK{}xOI?##~LLEz%>+?*}^jN!uCf*Y&~Pw zSIJGa&SZJBR`SceR+Et+$G3#=n^fh&&E1wdz#yjTxUES402Fo5oJgCRuP53`_M=US zT6@wagEdtVmxmS}^)=_A?=(Jrl;m4{L?;t1H2M~C?_BU*?t>d}|3&-Wi3 T(zO9+^6Y%C|-&T4Q^UO^sMBf))MT>aEzI|iHfDhs_o?U1S8Q7N6p!E zsba2i+Y=tLts&hTZ@ul}xhTS@DOs;s*t1-Vu=t#&g(F6iFO4!LGgl95KlL_X=Ogf@ z#yi3H8E1${ fn6lHYKlL{8-GC#~*l3|VjUnhsV+z)9<{SeMAv zJ}w+ROzFc1ENP`vqJy6JwWH=NBZLe_Y}aFzCLYmK(IJ&g