框键 在 TypeScript 中反应样式。 每个CSS财产都是一个道具 Box,每个值都是类型,CSS是
在运行时为您编写 —— 每个值共享一个类, 不导入样式表, 不创建类名, 没有构建插件 .
它的建造是 由大赦国际撰写: 从包件内的发动机船测量的规则和参考文献, MCP 服务器对照真实的引擎检查道具包,编译器拒绝库不会渲染的值.
import Button from '@box-kite/react/components/button';
import Flex from '@box-kite/react/components/flex';
import { H2, P } from '@box-kite/react/components/semantics';
export function PlanCard() {
return (
<Flex d="column" gap={3} p={6} md={{ p: 8 }} borderRadius={3} shadow="md"
bgColor="white" theme={{ dark: { bgColor: 'slate-900' } }}>
<H2 fontSize={20} fontWeight={600}>Pro plan</H2>
<P color="slate-600">Every value on this card is checked by the compiler.</P>
<Button hover={{ bgColor: 'indigo-600' }}>Upgrade</Button>
</Flex>
);
}
每个道具成为一个共享的类: p={6} 实值 padding: 1.5rem, (中文(简体) ), md 在媒体查询中包裹它, theme 把它放大到黑暗中
子树,和应用程序中其它任何地方的同值重用相同的规则.
快速启动
启动一个新的 Vite + React app , 并附带一个设计, 样本页和其中已经设置的代理 :
npm create @box-kite@latest
或者把它添加到你的应用程序中:
npm install @box-kite/react
反应 18 或更新,以及 无第三方依赖关系:安装是Box Kite和自己的引擎,别无其他. 类型脚本 可选的,但它是图书馆发光的地方.
为什么是黑盒基特
* AI-First包装的是自己的 |
键入到值每个道具都接受一个已关闭的集:调色板符号,比例阶,关键词. typo 是一个编译错误 “你是说”而不是默默缺失的风格. |
零配置,零依赖没有 CSS 文件, 没有 PostCSS , 没有捆绑插件, 没有提供者 —— 也没有在您的锁文件中的第三方包 。 样式是 按要求生成,并因内容而繁复. |
XQ 服务器组件在反演服务器组件中的渲染器没有 |
• 无障碍组件对话框、 菜单、 Tabs、 Combobox、 DatePicker、 DataGrid 等, 每个都带有 ARIA 和 APG 模式的键盘 用斧头在CI. |
作为道具的现代CSSOKLCH调色板,主题,容器查询, |
🤖为AI代理所建
一个模型对一个CSS-in-JS API的记忆通常是对一个 不同 API — 这里的道具名称与 Tailwind 相撞 和查克拉的 而数字意味着别的东西。 所以Box Kite并不依赖于模型所记得的:
| 什麽 | 或т |
|---|---|
AGENTS.md + 键 docs/ npm 包内 | 自动 - node_modules/@box-kite/react/AGENTS.md,每道道具 和CSS 它写 |
项目线路 (单位:千美元)AGENTS.md, (中文(简体) ), CLAUDE.md, MCP) (中文(简体) ) | npm create @box-kite@latest -- --agents-only ——合并到已有的重播,并在重播时更新 |
| 技能 克劳德代码,光标,代码,副驾驶.. | npx skills add box-kite/box-kite |
| MCP 服务器 - 没有钥匙,没有网络 | claude mcp add box-kite -- npx -y @box-kite/mcp (或你的编辑所接受的stdio配置) |
| 页:1 和下标记文件 | box-kite.dev/llms.txt (英语) — 附录 .md 到任何文件 URL |
check_styles 通过真正的引擎运行你的道具. 库不接受的值不写规则和类
名称——通过设计,所以一个打字机从不发出破损的宣告. MCP工具使这一点在任何事情之前变得明显:
✅ p → .p-4{padding:1rem}
❌ bgColor does not accept "blue-550" — no rule and no class name were written.
✅ fontSize → .fontSize-14{font-size:0.875rem}
⚠️ href an HTML attribute, not a style prop. Written at the top level it typechecks
and is then dropped — it goes in props={{ "href": … }}.
Dev控制台被写成快取. 每条警告都写了什么 写什么的台词 测试运行修正自身 :
[box-kite] bgColor="bleu-500" wrote no CSS: bgColor does not take that value, so the prop
was dropped along with its class. Did you mean "blue-500"?
[box-kite] fontSize={4} is 4px text: fontSize's divider is 16, not the spacing scale's 4,
so the number is the pixel size. For 16px write fontSize={16}.
一个UI在跑步时间写作是一等公民. catalog() 转换每个组件和每个值的道具
加入JSON Schema——形状结构输出,json-render和A2UI想要——和 <SpecRenderer> 使什么回来,
检查每个节点和您控制的允许列表. toolPart() 财务报告和审定财务报表 a2uiToSpec() 读取AI SDK,助理-i,副驾驶Kit,
AG-UI和A2UI,以及 <ToolCallCard>, (中文(简体) ), <ApprovalCard>, (中文(简体) ), <Reasoning> 财务报告和审定财务报表 <StreamingText> 画出一个代理.
→ 遗传性UI • 妇女 代理组件 • 妇女
间接
键入到值
道具没有 string颜色为调色板符号(带有可选的符号) /opacity),相距是尺度,关键词是结合——所以
编辑器自动完成它们,而编译器抓住其余的:
<Box bgColor="bleu-500" />
// ~~~~~~~ ts(2820): Type '"bleu-500"' is not assignable… Did you mean '"blue-500"'?
<Box display="flexx" />
// ~~~~~~~ ts(2820): … Did you mean '"flex"'?
<Box opacity={50} />
// ~~~~~~~ ts(2322): Type '50' is not assignable to type '0 | 1 | 0.1 | 0.2 | …'
<Button variant="primaryy">Save</Button>
// ~~~~~~~ ts(2322): a component's variants are typed too
<Box css={{ mixBlendMod: 'multiply' }} />
// ~~~~~~~~~~~ ts(2561): … Did you mean to write 'mixBlendMode'?
- 过道具,看看它的CSS. 每个道具的JSDoc都有一个例子,比如:
p={4} → padding: 1rem——通过运行生成 引擎,所以编辑器永远不能教授库停止使用的大小. - 你自己的信物也加入了这些类型.
Box.extend()添加变量、道具和值; 1declare module让他们 自动完成像内置.Box.components()变体的打法相同. - 逃生舱口也是打字的.
css={{ … }}检查对象csstype并且仍然编译为共享的类——从不style属性.
* 比例表
值得从心底中吸取教训的一件事——划分者是每个道克:
| Prop | 缩放 | 示例 |
|---|---|---|
p, (中文(简体) ), m, (中文(简体) ), gap, (中文(简体) ), width, (中文(简体) ), borderRadius | 4(季度雷姆) | p={4} → 1rem (16px) (英语) |
fontSize | 页:1 | fontSize={14} → 0.875rem (14px) (中文(简体) ) |
b (边界宽度), lineHeight | ưμ㼯a | b={1} → 1px |
animationDuration, (中文(简体) ), transitionDelay. | 分钟 | transitionDuration={150} → 150ms |
| 颜色 | 符号 + /opacity | bgColor="blue-500/40" → color-mix(…) |
3个常规从"每个视觉值都是道具"中遵循: 元素来自元件 (<Flex>, (中文(简体) ), <Button>, (中文(简体) ),
<H1>, (中文(简体) ), <Path>, HTML 属性进入 props (单位:千美元)<Link props={{ href: '/about' }}>),没有 style={{ }}。 。 。 .
组件
每个组件都是 Box 下同道具, 相同的主题,相同的 variants——每个入口都是自己的,所以
Textbox 从不拉 DataGrid 在你的捆绑.
| 区域 | 构成部分 |
|---|---|
| 版图内容( C) | Flex, (中文(简体) ), Grid, (中文(简体) ), H1– 说吧 –H6, (中文(简体) ), P, (中文(简体) ), Link, (中文(简体) ), Nav. List, (中文(简体) ), Svg + 每个 SVG 元素, (中文(简体) ), Icon, (中文(简体) ), Skeleton |
| 表单 | Button, (中文(简体) ), Textbox, (中文(简体) ), Checkbox, (中文(简体) ), Switch, (中文(简体) ), RadioGroup, (中文(简体) ), Combobox, (中文(简体) ), Slider, (中文(简体) ), Form |
| 日期 | DateField, (中文(简体) ), Calendar, (中文(简体) ), DatePicker, (中文(简体) ), TimeZoneSelect 安全地带 日期模块 |
| 重叠 | Dialog, (中文(简体) ), Popover, (中文(简体) ), Menu, (中文(简体) ), Tooltip, (中文(简体) ), Toaster 在顶层,没有传送门,没有 z-index |
| 披露 | Tabs, (中文(简体) ), Accordion, (中文(简体) ), Progress |
| 数据仪表板( T) | DataGrid (类型、过滤器、组、编辑、粘贴、虚拟化), DashboardGrid, (中文(简体) ), Sparkline, (中文(简体) ), Gauge, (中文(简体) ), ChartContainer |
| 大赦国际 | ToolCallCard, (中文(简体) ), ApprovalCard, (中文(简体) ), Reasoning, (中文(简体) ), StreamingText, (中文(简体) ), markdownComponents, (中文(简体) ), SpecRenderer |
舰只背后的行为 @box-kite/react/a11y ——重点回放,巡回重点回放,解聘和可控
状态——用于您自己构建的部件.
XQ 服务器组件
// app/page.tsx — a Server Component. No 'use client', no provider, no CSS import.
import Flex from '@box-kite/react/components/flex';
import { H1 } from '@box-kite/react/components/semantics';
export default function Page() {
return (
<Flex d="column" gap={2} p={6}>
<H1 fontSize={24}>Rendered on the server</H1>
</Flex>
);
}
这个 react-server 导出条件决定了“框”的无钩构建; 每项规则都作为 <style href precedence>
将19个吊杆重置到 <head> 和装饰,所以它是安全的,级联由 @layer,而不是按元素
命令 —— 如何运作 • 妇女
根据中央支助系统模块计量 • 妇女
一个完整的 Next.js app
• 软件包
| 软件包 | 这是什么 |
|---|---|
@box-kite/react | Box,每个组件和钩;取决于 @box-kite/core 没有别的了 |
@box-kite/core | 没有框架和依赖性的造型引擎—— createStyleEngine().classNames(props) (单位:千美元)实例(中文(简体) ) |
@box-kite/mcp | mCP 服务器: Docs 搜索、道具、组件、规则和 check_styles |
@box-kite/create | npm create @box-kite – 一个Vite + React app 有设计和代理设置的应用程序 |
{\fn华文楷体\fs16\1cHE0E0E0}学习更多
- 文档 ——每个道具和组件,有活地演示
- 从AI开始 ——用 Claude Code, Cursor, Codex 或 Copilot 三个提示构建一个应用程序
- 为AI所建 - 是什么船给特工的,为什么
- 他们, (中文(简体) ), 扩展, (中文(简体) ), 逃逸舱门
BOX_KITE_AI_CONTEXT.md——一页上整个地表
捐款
欢迎提出问题和拉动请求——首先 捐款额,涵盖建筑和 框架无核心边界。 问: 支助脆弱性 警卫。 。 。 .
如果Box Kite能节省你的时间, 打开一个QQ GitHub 图像 帮助其他人找到它.
许可证
麻省理工学院 马克西姆·普罗开科