@ai-matrx/detail——详细原始
亚鲁曼,2026-09-17: "一个核心组件,然后作为一个Page, 一个灵活的抽屉,和 窗口面板。 默认为窗口. ...你只是做一个核心组件 一些核心 规则,然后把它包裹在这个可重复使用的东西 从包,然后立即给你 全3免费。"
每个记录类型登记一次 —— 三场免费提供,内容一律相同
三个 键盘:越狱关闭,箭头在记录间移动([ 编号 : ] (b) 为别名)和
Cmd/Ctrl+Enter 保存.
| 列报 | 这是什么 | 宿主的束缚 |
|---|---|---|
window (单位:千美元)默认(中文(简体) ) | 浮动、可拖动、可微缩; 手机底页 | shells.Window ——主机窗口管理器 |
docked | 一个可调整的侧面面板对接右侧边缘, 无背景; 手机底页 | shells.Docked ——主机侧平面 |
page | 应用程序标题下的完整路由正文 — 唯一更改 URL 的演示文稿; 向后提供窗口 | shells.Page ——主机路由头+滚动正文 |
冠军:逗号(侧取相/中取相/全页取相,每个数据库"开页入")和线条 (皮克,键盘-第一). 骨头匹配,皮肤我们的.
pnpm add @ai-matrx/detail # every Matrx repo declares it "latest" (THE LATEST LAW)
收养状况
matrx 前端从 npm 安装此软件包 latest (通过2026-09-30)
将两者均匀保存的字节平分守护符删除。 原始的修补
在这里制作,发布,并按版本到达前端. 没有找到的状态使得
设计系统 ErrorActions 槽,所以一个主机的错误动作(前端的Alchemy菜单)
在那里出现时没有特定东道主的身体.
| 条目 | 船舶 | "use client" |
|---|---|---|
@ai-matrx/detail | 记录类型的合同、演示文稿设置形状及其每类型覆盖、带有最后URL字节预算的列表文本修饰、每个演示文稿的深链接拼写、行-字段 | 无——纯正,在服务器组件中合法 |
@ai-matrx/detail/react | 端口和提供者、核心、键盘模型、加载器和保健解析器、一个开口器、头部分、正文、设置面板、三个演示文稿、头几何常数 | 对 |
@ai-matrx/detail/testing | 接地站座椅: makePortsWith(fn), (中文(简体) ), mount, (中文(简体) ), instance, (中文(简体) ), clickByLabel三个弹壳, FILE_TYPE ——该套装的座椅证明了自己,让一个主机证明它的约束性与 | 对 |
合同——每个记录类型登记一次
import type { DetailRecordType } from "@ai-matrx/detail";
const task: DetailRecordType = {
type: "task", label: "Task", icon: TaskIcon, accent: null,
entityToken: "task", // doors · associations · history key off this; null = none
load: (id, signal) => …, // null = no single source → renders from the seed, and says so
title: (row, seed) => …,
fields: (row) => […],
health?: (row, ctx) => …, // the source health strip for a SYNCED record (sync or async)
associationTokens?: […], // null hides the section; omitted → the host default minus self
history?: true, // default: when entityToken is set
extraSections?: (row, ctx) => […],
Frame?: ({ ctx, children }) => …, // wraps the body: surface runtime, right-click menu, …
};
固定部分,顺序: 源健康带 · 大约 字段 • 妇女
协会 (单位:千美元)AssociationCardGrid a 项下 PrimaryEntityProvider从
@ai-matrx/associations· 历史 ^ 额外 ^ “ 如何详细打开” 面板 .
不适用的一节没有,绝不是一个空框.
一个开口者: useOpenDetail()({ type, id, presentation?, seed?, list? })没有
presentation 它问主机 resolvePresentation(type) - 这个人的
ui.detail.default_presentation,与 ui.detail.presentation_by_type 首先读取
类型。 升起的解析器被宣布(主机 notify.error,命名密钥)和
窗口打开。 没有东西可以航行 page。 。 。 .
装订港口
所有应用的形状都通过 DetailHostPorts (单位:千美元)@ai-matrx/detail/react) (中文(简体) ). 供应商
巢并合并:将亮端口 ONCE 绑在后端 useOpenDetail 到处工作,让
每个演示文稿的懒散加载条目在上方添加自己的外壳和记录类型地图
演示文稿,所以窗口外壳 从来没有达到一个靴子捆绑。 少了个口袋,
命名本身.
| 端口 | 主机注入的是什么 | 需求 |
|---|---|---|
resolveType(type) | 记录类型的地图——一个登记册,从来没有第二次 | 每个列报条目 |
usePresentationSetting(type) • 妇女 resolvePresentation(type) • 妇女 warmPresentation(type) | 设置阶梯的答案 ui.detail.default_presentation 财务报告和审定财务报表 ui.detail.presentation_by_type (反应脸,等待脸,缓存温暖) | 对 |
reReadPresentation(type) | 一个写后读取的 FRESH 梯子, 命名现在的答题 | 选项 |
savePresentation({ presentation, forType, clear? }) | 设置及其每类地图条目的一款写入器;拒绝返回为 { ok: false, reason } | 可选的——没有 qq 窗格不存在 |
open • 妇女 close | 在主机上覆盖系统进行现场演示(窗口/对接) | 对 |
navigate.pageHref • 妇女 toPage • 妇女 back • 妇女 canGoBack • 妇女 toRecordHome | 页面路由; canGoBack 回答“此标签是否按下页面”和 toRecordHome 将页面取而代之的是记录的家——从不生动 back() 进入空历史 | 对 |
shells.Window • 妇女 Docked • 妇女 Page | 铬; 包装 title, (中文(简体) ), titleNode, (中文(简体) ), actions, (中文(简体) ), children, (中文(简体) ), onClose (+ 数) onBack 页面,+ list 为窗口的深层链接) | 每个列报条目 |
doors.RecordDoors • 妇女 RefCell • 妇女 tokenFromColumnName • 妇女 isUuidValue • 妇女 hasDoor | a. 主机的实体门(打开/ 新标签/ 偷看); hasDoor 决定缺席状态是否可声称"上面的控制仍在打开" | 对 |
associations.defaultTokens • 妇女 canAnchor | 表示关联部分的显示, 并且可以锁定 | 对 |
history.list(token, id, signal) | 行版本 | 对 |
notify.error • 妇女 success • 妇女 copyText | 主机的土司和剪贴板 | 对 |
reconnectSource(ref, source) | 同样的连接器行提供, 用于同步记录的条 | 选项 |
remedy.typeMap | 开发者去注册一个类型——控制台补救名称 | 选项 |
套接字通过Ports读取,从未解决: ui.detail.default_presentation
(欧元) window|docked|page组织-用户), ui.detail.presentation_by_type (杰森地图,
同样的梯子, ui.detail.list_context_max_ids (组织;主机解决后通过)
数字输入 encodeListQuery 编号 : detailListToUrlArgs,将它夹住
DETAIL_LIST_CONTEXT_MAX_IDS_CEILING) (中文(简体) ). 他们的行由matrx-frontend的迁徙所生.
深层链接
窗口和对接的深层链接在主机的 ONE 面板- URL 机制的键下
detail实例 type.id参数 as数字 : ?panels=detail:task.<uuid>:as-window 编号 : :as-docked, (中文(简体) ),
载有该清单的记录是从(b)l 编号 : i 编号 : lt) (中文(简体) ). 页面是主机的路线
(单位:千美元)/detail/<type>/<id> 在 matrx-前端)与 ?l=type.id,…&i=<n><=<total>两种拼写
由一剪接剪接trimListContext——8 000个字
将 URL 序列化, 加上其余的地址成本 —— 并且记录说
列表已修剪. . : , 在类型符号或id中逃脱, 所以外部的id是这样的
作为 sc-domain:example.com 圆通为同录.
键盘
useDetailKeyboard,将演示文稿填入的每个槽(标题和正文): 越狱关闭
除了打开菜单 / 选择 / 组合框和未承诺的文本字段
编辑; ArowUp/Down/Left/Right 仅在主体不是滚动目标时在记录之间移动,
[ 编号 : ] 总是移动; Cmd/Ctrl+ 输入保存已注册的区段, 并说没有
在什么也没有发生的时候保存.
测试主机绑定
import { makePortsWith, mount, instance, StubPageShell } from "@ai-matrx/detail/testing";
const makePorts = makePortsWith(jest.fn); // or vi.fn — the seat takes the runner's factory
const ports = makePorts({ shells: { Page: StubPageShell } });
const m = mount(<DetailPagePresentation data={instance()} />, ports);
每个端口都是个模拟,所以一个测试就证明了核心 要求HOST去做什么—— 在那里每个人都 记录了这个原始生物的缺陷.
故意不在这里
- 主机的窗口管理器,侧面板和路由头——它们是贝壳,绑定为端口.
- 设置阶梯,土司,剪贴板,路由器,实体注册-端口.
- 图标库:原始画作中的十七格是内嵌的 SVG (Luside- 衍生出, (原始内容存档于2018-09-25). ISC. 一个记录类型自己的图标是其注册上的主机数据.
- Tailwind CSS 生成:组件被命名为通用类. 注册已建
带有消费者Tailwind扫描的软件包(
@source "../node_modules/@ai-matrx/detail/dist";以 matrx 前端为单位globals.css,设计系统先例).
执行真相、文件地图和改变历史: FEATURE.md 除了这个文件。 包装
法律: common-docs/policies/typescript-package-standard.md。 。 。 .