diff --git a/.llms-snapshots/llms-full.txt b/.llms-snapshots/llms-full.txt index ba7dd15f..db3162f5 100644 --- a/.llms-snapshots/llms-full.txt +++ b/.llms-snapshots/llms-full.txt @@ -3241,6 +3241,16 @@ It’s a great reference for more advanced setups and multi-collection coordinat * [Configuration Reference](/docs/reference/configuration.md) * [Datastore Collections](/docs/build/datastore/collections.md) +--- + +## Crate Docs + +These crates are used to build and extend serverless functions in Rust with Juno: + +* [junobuild-satellite](https://docs.rs/junobuild-satellite): Core features and runtime for building a Satellite in Rust, including hooks, assertions, and datastore integration. +* [junobuild-macros](https://docs.rs/junobuild-macros): Procedural macros for declaratively attaching hooks and assertions (e.g., `#[assert_set_doc]`, `#[on_delete_doc]`). +* [junobuild-utils](https://docs.rs/junobuild-utils): Utility helpers for working with documents, including data encoding, decoding, and assertion context handling. + # Using Juno with AI If you're using AI to build with Juno, you can use our `llms.txt` files to help AI tools better understand the platform. diff --git a/src/components/Features/index.tsx b/src/components/Features/index.tsx index 540f3f0c..5dafdae5 100644 --- a/src/components/Features/index.tsx +++ b/src/components/Features/index.tsx @@ -1,5 +1,5 @@ import Snippets from "@site/src/components/Snippets"; -import CloudIllustration from "@site/static/img/cloud.svg"; +import { CloudIllustration } from "@site/src/icons/CloudIllustration"; import styles from "./styles.module.scss"; export default function Features(): JSX.Element { diff --git a/src/icons/CloudIllustration/index.tsx b/src/icons/CloudIllustration/index.tsx new file mode 100644 index 00000000..7e87a650 --- /dev/null +++ b/src/icons/CloudIllustration/index.tsx @@ -0,0 +1,232 @@ +import styles from "./styles.module.scss"; + +export const CloudIllustration = (): JSX.Element => { + return ( +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ); +}; diff --git a/src/icons/CloudIllustration/styles.module.scss b/src/icons/CloudIllustration/styles.module.scss new file mode 100644 index 00000000..65807b96 --- /dev/null +++ b/src/icons/CloudIllustration/styles.module.scss @@ -0,0 +1,78 @@ +.uuid-2a92185e-e4be-4c64-83e8-ac632198b475, +.uuid-45633947-3064-4a5e-8700-5bc49a02d2c8, +.uuid-49c0131b-3ba9-4faf-8aa6-2777ee50f622, +.uuid-daa43f00-42fc-452b-8a11-00b73aacecba { + stroke-width: 0; +} +.uuid-2a92185e-e4be-4c64-83e8-ac632198b475 { + fill: #7888ff; +} +.uuid-49c0131b-3ba9-4faf-8aa6-2777ee50f622 { + fill: #c9cfff; +} +.uuid-45633947-3064-4a5e-8700-5bc49a02d2c8 { + fill: #fff; +} + +.astronaut-in-clouds { + transform-origin: center; + transform-box: content-box; + opacity: 0; + transform: translateY(100px); + transition: + opacity 0.5s ease-in-out, + transform 0.5s cubic-bezier(0.3, 0.7, 0, 1); +} + +.cloud, +.body, +.pc, +.backpack, +.head { + transform: translateY(calc(var(--anim, 0) * -10px)); + animation: updown 1.5s ease-in-out infinite alternate; + transition: transform 0.3s cubic-bezier(0.3, 0.7, 0, 1); +} + +.cloud--left { + animation-delay: 0.25s; +} + +.cloud--right { + animation-delay: 0.5s; +} + +.cloud--large { + animation-delay: 0.1s; +} + +.head { + animation-delay: 0.15s; +} + +.loaded { + .astronaut-in-clouds { + opacity: 1; + transform: translateY(0); + } + + svg { + overflow: visible; + } +} + +@property --anim { + syntax: ""; + inherits: true; + initial-value: 0; +} + +@keyframes updown { + 0% { + --anim: 0; + } + + 100% { + --anim: 1; + } +}