
Security News
Feross on TBPN: How North Korea Hijacked Axios
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.
slightstack
Advanced tools
Интуитивный JavaScript-фреймворк для быстрого UI, основанный на компоновке через stack и row.
SlightStack — это легковесный JavaScript-фреймворк, который объединяет простоту HTML-компонентов с мощью декларативного JS API. Забудьте о сложных CSS-in-JS библиотеках. Вместо этого описывайте стили, состояния и адаптивность прямо в свойствах компонентов, используя интуитивный синтаксис, вдохновленный Tailwind CSS и CSS-псевдоклассами.
Он сочетает простоту классических шаблонов, удобный JS Builder API для их сборки и высокопроизводительный "keyed" Virtual DOM для молниеносных обновлений.
Ключевые особенности:
component.html и component.css — и новый компонент готов.:hover) и адаптивностью (sm:) прямо в JavaScript. Декларативно, интуитивно и в одном месте.data- атрибутов, предотвращая глобальные конфликты..model() для легкой синхронизации состояния с полями ввода (input, checkbox).SlightStack спроектирован для легкой интеграции.
npm install slightstack
Создайте в вашем проекте следующую структуру:
my-project/
├── hybrid-components/ # Здесь будут жить ваши HTML/CSS компоненты
│ └── button/
│ ├── component.html
│ └── component.css
├── public/
│ ├── index.html
│ └── bundle.js # Сюда будет собран ваш код
├── src/
│ └── app.js # Ваш основной файл приложения
├── package.json
└── server.js # Простой DevServer для разработки
Создайте файл server.js (или используйте любой другой сборщик, например, Vite или Webpack, настроив его соответствующим образом).
// server.js
const express = require('express');
const browserify = require('browserify');
const path = require('path');
const stream = require('stream');
const slightUI = require('slightstack'); // Установленный пакет
const app = express();
const PORT = 3000;
function escapePath(p) { return p.replace(/\\/g, '\\\\'); }
// Роут для сборки вашего JS-кода на лету
app.get('/bundle.js', (req, res) => {
res.setHeader('Content-Type', 'application/javascript; charset=utf-8');
// 1. Получаем пути к файлам ядра SlightStack
const coreFiles = slightUI.builderAPI.getCoreFilePaths();
// 2. Указываем путь к вашим гибридным компонентам
const componentsPath = path.resolve(__dirname, 'hybrid-components');
const hybridData = slightUI.builderAPI.getHybridComponentData(componentsPath);
// 3. Создаем точку входа для Browserify
const entryPointContent = `
const { createReactive } = require('${escapePath(coreFiles.reactivityReactive)}');
const { createEffect } = require('${escapePath(coreFiles.reactivityEffect)}');
const { createUI } = require('${escapePath(coreFiles.api)}');
const hybridComponentData = ${JSON.stringify(hybridData, null, 2)};
const UI = createUI(hybridComponentData, { createReactive, createEffect });
const appCode = require('${escapePath(path.resolve(__dirname, 'src', 'app.js'))}');
appCode(UI);
`;
const b = browserify();
const readable = new stream.Readable();
readable._read = () => {};
readable.push(entryPointContent);
readable.push(null);
b.add(readable, { basedir: __dirname });
b.bundle().pipe(res);
});
// Роут для отдачи HTML
app.use(express.static(path.join(__dirname, 'public')));
app.listen(PORT, () => {
console.log(`Сервер запущен на http://localhost:${PORT}`);
});
public/index.html
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>My SlightStack App</title>
</head>
<body>
<div id="app"></div>
<script src="/bundle.js"></script>
</body>
</html>
src/app.js
// Ваш код приложения
module.exports = function(UI) {
const AppView = () =>
UI.stack({ padding: 20, gap: 10 }).children(
UI.text({ tag: 'h1', text: 'Привет, SlightStack!' }),
UI.button({ text: 'Нажми меня', onclick: () => alert('Работает!') })
);
UI.create({
target: document.getElementById('app'),
view: AppView
});
};
node server.js
Откройте http://localhost:3000 и наслаждайтесь результатом!
(Этот раздел остается прежним)
Описывайте внешний вид и поведение компонентов прямо в их свойствах.
UI.button({
text: 'Кнопка',
id: 'my-button',
background: '#6366f1', // Будет применен как инлайн-стиль
padding: '10px 20px',
color: 'white',
onclick: () => console.log('Клик!')
})
sm:, md:, lg:)Настройте брейкпойнты один раз и используйте префиксы.
UI.config({
breakpoints: { sm: 768, md: 1024 }
});
UI.stack({
flexDirection: 'column',
'sm:flexDirection': 'row' // На экранах > 768px станет рядом
})
:hover:, :focus:)UI.input({
border: '1px solid #ccc',
':focus:borderColor': '#6366f1'
})
Используйте всю мощь CSS декларативно!
UI.item({
borderBottom: '1px solid #eee',
':last:borderBottom': 'none' // Убираем рамку у последнего
})
UI.label({
text: 'Имя',
':after:content': '"*"' // Добавляем звездочку
})
UI.row({ group: true }).children( // Помечаем родителя
UI.text({ text: 'Наведи на меня' }),
UI.icon({
opacity: 0,
':group-hover:opacity': 1 // Иконка появляется при ховере на весь row
})
)
classNameclassName принимает строки, массивы и объекты для удобного управления классами.
const isActive = true;
UI.button({
className: [
'base-class',
{ 'active-class': isActive },
!isActive && 'inactive-class'
]
})
(Этот раздел остается прежним)
UI.for)(Этот раздел остается прежним)
.model())(Этот раздел остается прежним)
SlightStack спроектирован для простоты и ясности. Ядро фреймворка полностью модульное.
core/
├── dom/ # - Взаимодействие с DOM (создание, патчинг)
├── reactivity/ # - Реактивность (Proxy, эффекты)
├── renderer/ # - Логика VDOM (mount, unmount, patch)
├── vdom/ # - Структура VNode (создание, нормализация)
├── api.js # - Публичный JS Builder API (UI.button и т.д.)
├── create-app.js # - Главная функция сборки приложения
└── state-manager.js # - Управление состоянием окна и брейкпойнтами
SlightStack доказывает, что современные, реактивные интерфейсы можно создавать, не отказываясь от простоты и мощи чистого HTML. Он создан для быстрой разработки, прототипирования и для тех, кто ценит прозрачность и контроль над своим кодом.
Вы можете легко расширять библиотеку, создавая новые компоненты в hybrid-components/, или исследовать ядро, чтобы понять, как работают современные фреймворки "под капотом".
FAQs
Интуитивный JavaScript-фреймворк для быстрого UI, основанный на компоновке через stack и row.
The npm package slightstack receives a total of 0 weekly downloads. As such, slightstack popularity was classified as not popular.
We found that slightstack demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Socket CEO Feross Aboukhadijeh breaks down how North Korea hijacked Axios and what it means for the future of software supply chain security.

Security News
OpenSSF has issued a high-severity advisory warning open source developers of an active Slack-based campaign using impersonation to deliver malware.

Research
/Security News
Malicious packages published to npm, PyPI, Go Modules, crates.io, and Packagist impersonate developer tooling to fetch staged malware, steal credentials and wallets, and enable remote access.