neuron-explorer
Steering-first neuron explorer for Qwen3.5-4B: push every MLP neuron, keep every rollout, browse the results
翻译准备中
UECA-React Showcase - 大约五十个基于 UECA-React 构建的组件,使用纯 HTML 和 CSS:一个实时展示和一个练习场,提供浅色和深色主题。
AI 翻译
UECA-React Showcase - some fifty components built on UECA-React with plain HTML and CSS: a live Showcase and a Playground, in light and dark themes.
开发工具TypeScript · CSSGitHub @nekutuzov在线运营者未确认
试用过了吗? 点一下就好,无需登录。
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证UECA-React 2.0 演示:框架取代 React hooks,使用消息总线、自动事件、属性绑定和黑箱组件。Vite + TypeScript + React + MobX。
AI 翻译
UECA-React 2.0 demo: Framework replacing React hooks with message bus, automatic events, property bindings, and black-box components. Vite + TypeScript + React + MobX.
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A working application built with UECA-React: a component library of some fifty components on plain HTML, CSS and SVG, a live Showcase of every one of them, and a Playground where a component's properties and its source change together. It runs in a light and a dark theme, and every screen, service and control in it follows the same UECA component shape.查看完整 README ↗A working application built with UECA-React: a component library of some fifty components on plain HTML, CSS and SVG, a live Showcase of every one of them, and a Playground where a component's properties and its source change together. It runs in a light and a dark theme, and every screen, service and control in it follows the same UECA component shape.
Live demo: https://nekutuzov.github.io/ueca-react-app-demo2/
UECA-React gives every React component the same explicit structure: props, children, methods, events, messages and a View, in that order. On top of that it adds stable component IDs, automatic change events for every property, one- and two-way property bindings, lifecycle hooks and a typed message bus. State is reactive (MobX, abstracted away): you assign to a property and the views that read it update.
node_modules/ueca-react/docs/raw/index.mdnpm install
npm run dev
Then open http://localhost:5001/ueca-react-app-demo2/.
| Script | What it does |
|---|---|
npm run dev | Vite dev server on port 5001 |
npm run build | Type-check and production build into dist/ |
npm run lint | ESLint |
npm test | Run the test suite once |
npm run test:watch | Run the tests in watch mode |
npm run coverage | Run the tests with a coverage report in coverage/ |
npm run preview | Serve the production build |
npm run deploy | Build, then publish dist/ to the gh-pages branch with the gh-pages package |
The UECA agent skills shipped with ueca-react are installed by npx ueca-react-skills. A plain npm install runs it through the postinstall; a targeted npm install ueca-react@… does not, so run it yourself after an upgrade.
src/
├── main.tsx # Entry point: global settings, error handler, render
├── tokens.css # Non-colour design tokens: type, spacing, radii, motion, z-index
├── themes.css # Colour tokens per theme (ueca-light, ueca-dark) and the control voice
├── theme.css # Page surface, markdown and code highlighting
├── test/ # Test setup and helpers (mount, settle, stubMessages, browser stubs)
├── integration/ # Whole-application tests: sign-in, routing, history, theme, services
├── api/ # REST client and MSW mocks
├── components/ # The component library
│ ├── base/ # useBase → useUIBase → useEditBase / useScreenBase
│ ├── buttons/ # Button, IconButton, toolbar shorthands
│ ├── data/ # Table, VirtualList, FilterableList
│ ├── flyouts/ # Alert, Snackbar, AlertToast, Drawer, EditDrawer, AlertDrawer
│ ├── inputs/ # TextField, NumberField, SearchField, Select, Checkbox, Switch, RadioGroup
│ ├── layout/ # Block, Row, Col, Grid, GridCell, Card
│ ├── menus/ # Menu, MenuItem
│ ├── misc/ # Icon, StatusLabel, ProgressBar, Spinner, MarkdownPreview, DropZone, …
│ ├── navigation/ # Router, NavLink, NavItem, NavItemExpandable, Breadcrumbs
│ ├── panels/ # Panel
│ ├── popups/ # Dialog, AlertDialog, Popover
│ └── tabs/ # TabsContainer, Tab
├── core/ # The application shell and its services
│ ├── infrastructure/ # Application, AppUI, router, routes, browsing history, security,
│ │ # dialogs, alerts, tooltip, busy display, theme manager, message contract
│ ├── appLayout/ # Sidebar, menu, layouts
│ ├── screenLayout/ # Screen frame: top bar, breadcrumbs, CRUD and tabbed screens
│ ├── appComponents/ # CodeSample, ThemeToggle, UECAContacts
│ └── misc/ # Icon set and role registry, overlay positioning and stacking
└── screens/
├── home/ # Landing page
├── common/ # ScreenPage: the shared eyebrow / title / lead / pager frame
├── showcase/ # One screen per topic; showcaseTopics.tsx lists them
└── playground/ # Button, Text field and Table editors; playgroundTopics.tsx lists them
showcaseTopics.tsx and playgroundTopics.tsx are the single source for each page's route, menu entry, title, lead and previous/next links. Adding a page means adding an entry there and a route in appRoutes.tsx.
Tests run on Vitest with jsdom and Testing Library. Each component, service and screen has its tests beside it (button.tsx → button.test.tsx), and src/integration/ drives the whole application: signing in, deep links, navigation, Back and Forward, the theme and the app services.
A UECA component draws nothing on its first render, so a test mounts it and waits:
const { model } = await mount(Button, { id: "save", contentView: "Save", onClick });
await userEvent.click(screen.getByRole("button", { name: "Save" }));
expect(onClick).toHaveBeenCalledWith(model);
model.disabled = true;
await settle();
expect(screen.getByRole("button")).toBeDisabled();
stubMessages stands in for a service on the message bus, and any error UECA would otherwise swallow — a View that throws, a failing hook — fails the test. Known defects are recorded as it.fails tests marked // BUG:.
tokens.css holds everything that is not colour; themes.css holds one colour block per theme, selected by <html data-theme>. A theme is added by adding a block there and an entry in core/infrastructure/appTheme.ts.themes.css, so every control in a form changes together.<Icon name="delete" />); core/misc/iconRegistry.ts decides which glyph backs it.import * as UECA from "ueca-react";
import { UIBaseModel, UIBaseParams, UIBaseStruct, useUIBase } from "@components";
type CounterStruct = UIBaseStruct<{
props: { count: number };
methods: { increment: () => void };
}>;
type CounterParams = UIBaseParams<CounterStruct>;
type CounterModel = UIBaseModel<CounterStruct>;
function useCounter(params?: CounterParams): CounterModel {
const struct: CounterStruct = {
props: {
id: useCounter.name,
count: 0
},
methods: {
increment: () => {
model.count++;
}
},
View: () => (
<button id={model.htmlId()} onClick={() => model.increment()}>
Clicked {model.count} times
</button>
)
};
const model = useUIBase(struct, params);
return model;
}
const Counter = UECA.getFC(useCounter);
export { CounterParams, CounterModel, useCounter, Counter };
Services are components too: they declare messages handlers and render nothing, and the rest of the app reaches them over the bus.
await model.bus.unicast("Alert.Success", { message: "Saved" });
const ok = await model.bus.unicast("Dialog.Confirmation", { title: "Delete", message: "Are you sure?" });
await model.bus.unicast("App.Router.GoToRoute", { path: "/playground/table" });
Every message is declared in core/infrastructure/appMessage.ts.
@components → src/components@core → src/core@api → src/api@screens → src/screensISC