Об этом проекте

Freya — это кроссплатформенная, нативная, декларативная GUI-библиотека для Rust. Она ориентирована на разработчиков, создающих настольные приложения на Rust, которые хотят использовать компонентную модель UI без опоры на веб-технологии. Основная модель: компоненты — это переиспользуемые элементы UI, которые перерисовываются при изменении состояния, от которого они зависят. Компоненты могут хранить внутреннее состояние или подписываться на общее состояние; любой тип, реализующий трейт Component, может выступать в роли компонента; корневой компонент приложения может быть обычной функцией. Встроенные примеры включают Button и Switch. Готовые компоненты варьируются от простых элементов управления, таких как Button, Switch и Slider, до более сложных, например VirtualScrollView, Calendar и ColorPicker. Примеры файлов с префиксом component_ в папке examples демонстрируют их. Области функций, описанные в README: - Анимации: переходы для цветов, размеров и позиций с контролем времени, easing-функций и последовательностей. - Редактирование форматированного текста: управление курсором, выделение, сочетания клавиш, настраиваемое форматирование и виртуализация. - Редактор кода: независимый от состояния редактор, использующий Rope для текста и tree-sitter для подсветки синтаксиса; вы предоставляете грамматику и запросы подсветки. Включается через функцию code-editor. - Рендеринг Markdown через компонент MarkdownViewer (функция markdown). - Маршрутизация и навигация с помощью derive Routable, макетов, ссылок и контекста роутера (функция router). - Глобальное управление состоянием через freya-radio — систему на основе каналов, где компоненты подписываются на каналы и получают обновления только при изменении релевантных данных (функция radio). - Интеграция библиотеки иконок, в настоящее время поддерживается Lucide. - Headless-тестирование с помощью freya-testing, которое может имитировать взаимодействия и сохранять состояние UI в файлы; используется самой Freya для тестирования встроенных компонентов. - Графики и построение диаграмм через библиотеку Plotters (функция ploters). - Интернационализация с использованием системы локализации Fluent, включая переводы, плюрализацию и переключение локалей (функция i18n). - Модификаторы стиля, вдохновленные Material Design, такие как ripple-эффекты (функция material-design). - Интеграция WebView для встраивания веб-контента рядом с нативным UI (функция webview). - Эмуляция терминала с поддержкой PTY для встроенных терминалов или SSH-клиентов (функция terminal-pty). - Инструменты разработчика для просмотра дерева компонентов в реальном времени (функция devtools). Использование: последний стабильный релиз указывается как freya = "0.4", доступны предрелиз 0.5.0-rc.7 и вариант с веткой main. Репозиторий использует git-подмодули, поэтому клонирование требует --recurse-submodules или последующего git submodule update --init --recursive. Примеры можно запускать с помощью cargo run --example counter. Руководство по настройке среды разработки приведено в документации. В README отмечается возможная проблема компиляции на Windows с windows-gnu. Проект ссылается на веб-сайт, документацию docs.rs, Discord-сервер, руководство по внесению вклада и страницу спонсорства, а также упоминает Dioxus, rust-skia и других участников.