ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Astryx Input Field Family 契约指南:13 个输入组件的统一状态、尺寸与交互规范

Astryx Input Field Family 契约指南:13 个输入组件的统一状态、尺寸与交互规范 Astryx Input Field Family 契约指南13 个输入组件的统一状态、尺寸与交互规范【免费下载链接】astryxAn open source design system thats fully customizable and agent ready项目地址: https://gitcode.com/GitHub_Trending/as/astryx导读本指南以 Astryx 设计系统仓库中的 docs/families/input-fields.md 家族契约为核心系统讲解 TextInput、Selector、Typeahead、Tokenizer 等 13 个输入组件的统一设计规则。你将掌握组件如何被判定为 input-field 家族成员、Field / FormLayout / InputGroup / FieldStatus 的职责边界、FR1–FR8 八条跨组件不变量及其在源码中的落地方式以及 DEC-1 至 DEC-5 五条关键决策的来龙去脉。读完即可依据契约判断任意输入组件是否符合规范并在集成时正确选择尺寸、状态位、禁用原因与 InputGroup 组合方式。家族契约是什么Astryx 把行为共享的兄弟组件收敛为组件族family由一份家族契约统一约束。docs/families/README.md中说明家族契约拥有兄弟组件共享的行为例如输入尺寸、端部通道end lane、遮罩关闭或状态展示组件自身的 spec 只链接到家族契约而不重复复制共享规则。新记录从draft开始只有在所有者明确批准后才变为current归档记录保留上下文并说明其不再管辖的原因。模板见 docs/templates/knowledge/family-contract.md。input-field 家族契约kind 为familyid 为family:input-fields由cixzhang与imdreamrunner共同维护已批准的负责人为cixzhang批准于 2026-09-09触发复审的条件包括行为behavior、布局layout、主题theming与无障碍accessibility四类变更。家族意图契约开篇即定义了家族的意图使用者应当遇到一个连贯的输入系统状态展示、行为、外观和尺寸在各成员组件间使用一致的处理方式和 API 契约。每个组件仍拥有其编辑的值所对应的专属交互模型。这份记录将规范性家族要求与已交付事实分离frontmatter 中的verified_by列表只点名代表性证据锚点Field、InputGroup、TextInput、Selector、Typeahead、Tokenizer 的测试套件而非每个成员的完整测试成员列表与采用表对当前家族而言是穷尽的任何成员的变更仍需其聚焦证据。成员判定规则一个组件是否属于 input-field 家族取决于其首要公共职责是否是通过带标签的字段表面与内容通道content lane收集或编辑表单值成员13 个TextInput、TextArea、NumberInput、DateInput、DateRangeInput、DateTimeInput、TimeInput、FileInput、Selector、MultiSelector、ComplexSelector、Typeahead、Tokenizer。它们使用Field语义或拥有等价的字段外壳并能参与FormLayout布局。协作方非成员Field与FieldStatus提供共享字段外壳FormLayout负责字段排布InputGroup组合显式采用其能力契约的成员InputClearButton、Spinner、Tooltip、BaseTypeahead提供共享的附属或交互行为。排除项CheckboxInput、RadioList、Switch、Slider 属于带标签控件模型没有 content/end-lane 几何PowerSearch 与 ChatComposer 是消费成员行为的更上层组合而非新的字段原语BaseTypeahead是没有字段表面的 combobox 引擎。判定依据的是公共责任而非是否使用了inputWrapperStyles之类的实现辅助函数——即使某个组件复用了共享样式也不因此自动获得成员资格。共享所有权谁拥有什么契约对家族的共享所有权做了精确划分这是理解整套规范的关键本家族拥有输入状态展示、行为、外观与尺寸的一致跨组件处理与 API 契约。尺寸与端部控件几何是这一更大目标的组成部分invariant而非目标本身。Field拥有独立的标签label、描述description、状态位status placement与显式width接缝。当受支持的InputGroup拥有组标签与辅助文本时成员应省略其内嵌的 Field。FormLayout拥有外部排布、间距、方向与表单级可选性不重新定义成员的内部控制几何。从 FormLayout.doc.mjs 可见它支持vertical默认、horizontal、horizontal-labels三种方向可嵌套混用且只负责字段去向不负责状态与提交。InputGroup拥有固定行高、连接的表面、边缘对齐与组级焦点呈现。准入遵循 FR3 的能力契约而非永久组件白名单仅属于输入家族不代表必然被 InputGroup 支持。每个被准入的成员拥有满足 FR3 的组内适配未分组时的呈现与行为仍归组件所有不因准入而改变。端部控件可以是普通 flex 项目或组件局部的通道lane家族不要求统一的 wrapper、测量 hook、target、自定义属性或新的公共 prop。共享原语保留各自的视觉与无障碍所有权InputClearButton、Spinner、Tooltip、FieldStatus、Icon 在组合进字段后不变成成员专属 API。FieldStatus拥有attached/detached的直接消息框呈现Field拥有与输入的组合权它在渲染 FieldStatus 之前消费tooltip并应用成员支持的 placement 契约。规范概念Canonical concepts契约用一张表格定义了家族的规范化概念、取值/状态、默认语义与稳定性等级这是所有成员 API 对齐的基准概念取值/状态默认语义稳定性field shell独立 Field 或受支持的 InputGroup 路径一个 label/status 所有者包围控件shipped patternfield size受支持处为sm、md、lg同尺寸单行控件对齐且单一状态变化不改变行高approved family ruleinline sizeintrinsic、显式Field.width或包含布局成员在值与 busy 状态变化间保持可用内联尺寸approved ruleSelector 例外见下end controls无、clear、busy、status、disclosure 或组件内容每个渲染出的控件都有不重叠空间不存在的控件不得留下无解释的预留approved family rulegrouped rowstandalone 或受准入的 InputGroup 子项InputGroup 拥有固定高度、连接边缘与组焦点子项拥有其组内适配approved capability contract采用情况见下disabled reason无或组件支持的disabledMessage原因保持键盘与辅助技术可达同时变更保持被阻止在暴露处为 approved family ruleinput busy显式isLoading或暴露处的 pendingchangeAction字段值正在解析或保存由 DEC-2 与 AST-001 批准source busy组件自有的异步搜索或选项加载支撑数据工作与输入isLoading分离component/system-spec 所有Transition Action无或组件支持的changeAction回调优先、乐观值次之、Action 处于 transition、单一 busy 呈现在暴露处为 approved family rulestatus placementinput-family 层的attached、detached或tooltip在成员支持安全重叠处默认 attacheddetached 与 tooltip 对所有输入保持可用approved family ruleInputSize类型sm | md | lg在 Field/types.ts 中定义被 TextInput、TextArea、DateInput、TimeInput 等组件共享引用。八条跨组件不变量FR1–FR8家族契约的核心是八条功能要求FR。它们是可观察的行为约束不是对测量手段或共享原语的强制。以下结合源码逐条展开。FR1 — 普通字段状态之间内联尺寸必须稳定在同一包含布局中成员不得仅因为占位内容变成值、或因为 busy/status/clear 控件出现就改变其外部可用内联尺寸。显式width、父布局与响应式约束仍然适用。独立使用的 Selector 是 DEC-1 例外可以跟随其展示的内容伸缩。这解释了一个常见 UI 缺陷输入框从占位符切换到值时整个字段宽度跳动会破坏布局稳定。FR1 要求成员除 Selector 例外保持宽度稳定。Field的width属性Field.tsx以数字按像素、字符串原样使用如100%作用于整个字段标签、控件、状态从而让控件与其外部 chrome 保持对齐——这比用xstyle/className/style只设置内部控件盒更正确因为后者会让标签与状态停留在自然宽度。FR2 — 渲染出的端部控件拥有不重叠空间文本、token、光标与选中内容不得绘制或接收指针输入于 clear 动作、Spinner、状态控件、disclosure 或组件自有端部内容之下。不存在的通道不得留下过期或无解释的空间。这是一条可观察要求而非对测量或共享通道原语的强制。当前实现缺口记录也指出Tokenizer 在现有 main 上把endContent与 clear 控件放在流外out of flow且未预留其渲染宽度窄输入内容可能从其下方穿过token 数量变化还会改变 intrinsic 内联尺寸。这正是 FR2 要治理的领域。FR3 — InputGroup 准入要求完整的组内适配任何输入成员可以参与 InputGroup前提是其所属组件显式采用组模式并证明以下全部能力从组中解析出兼容的控件高度与尺寸移除或抑制竞争的外部 Field、边框、圆角与表面几何连贯地委托连接的外部边框、圆角与组级焦点呈现通过组件自有的截断、折叠、裁剪或溢出把内容保持在单行组几何内保持输入的可访问名称与描述、值语义、键盘行为、焦点行为与编辑/选择模型。准入跟随能力而非永久白名单仅凭家族成员身份或上下文消费不足够。在源码层面InputGroup.tsx 通过InputGroupContext与SizeProvider实现这套机制它向子项提供{isInGroup: true, labelID, describedByIDs}InputGroupContext.ts子组件如 TextInput通过useInputGroup()检测组上下文并叠加groupStyles.inGroup来去除自身边框/圆角使组容器提供统一的边框处理TextInput.tsx。组的尺寸由SizeProvider下发sm/md/lg对应--size-element-sm/md/lg的固定高度InputGroup.tsx。组根元素带rolegroup、aria-labelledby与aria-describedby保证组级语义正确。FR4 — 受支持的禁用原因保持可达当成员暴露disabledMessage时非活跃字段仍需保持足够的可聚焦性以暴露原因同时编辑、选择与激活保持被阻止。不提供该公共概念的组件无需补加。TextInput.tsx 的实现注释解释了关键设计禁用控件会吞掉指针事件因此 tooltip 监听器挂在已存在的输入容器上输入通过aria-disabled保持可感知而非原生disabled属性字段被置为只读以防止输入值变更被handleChange中的isDisabled守卫阻止。这样禁用原因对键盘与辅助技术始终可达而编辑被彻底封锁。FR5 — 输入加载描述值而非支撑数据暴露isLoading的成员其含义是字段值正在解析或保存它不得使独立提供的选项不可用也不得改变数据源 prop 的契约。初始选项源 pending 是 AST-001 要求的另一个显式状态。DEC-2 与spec:AST-001/DEC-1、spec:AST-001/DEC-2将此区分应用于 Selector 与 MultiSelector提供的选项在输入 busy 时保持可用零选项是无选择状态而初始选项源 pending 必须显式化。当前实现缺口指出Selector/MultiSelector 虽在isLoading为真时保持已提供选项可用但空/无结果呈现仍将该标志当作选项源 pending且两者都缺少 AST-001 要求的显式 source-pending API。FR6 — Transition Action 保持即时反馈暴露changeAction的成员其每条文档化的值变更路径都必须先运行onChange乐观地呈现提议的受控值在 React transition 中运行changeAction并贡献到同一 busy 呈现直到受控值接受或替换它。TextInput.tsx 正是该契约的参考实现handleChange先调用onChange?.(newValue, e)若设置了changeAction且事件未被preventDefault则用startTransition包裹先setOptimisticValue(newValue)React 19 的useOptimistic再await changeAction(newValue, e)。isBusy isLoading || optimisticValue ! valueTextInput.tsx将乐观值与受控值不同步的状态并入同一 busy 呈现。这样用户键入后立即看到提议值异步提交期间的反馈由单一 busy 状态表达。当前实现缺口也点名TextInput 与 FileInput 的 clear 路径只调用onChange而不走changeActionFileInput 在 Action pending 期间未显式持有提议的受控文件作为乐观值——这些是 FR6 下的符合性缺口而非替代语义。FR7 — 组件自有的源工作保持家族几何与无障碍Typeahead 与 Tokenizer 通过BaseTypeahead拥有异步搜索状态而不是借用家族的isLoading语义。它们的可见 source-busy 反馈仍必须被命名、在 combobox 上暴露 busy 语义并在分组时满足 FR1、FR2、FR3。BaseTypeahead的实现在 Typeahead/BaseTypeahead.tsx它是没有字段表面的 combobox 引擎。当前缺口Typeahead 的 source-busy 反馈是流内静态时钟且缺少aria-busyselected/source-busy/grouped 组合缺少 FR1–FR3 要求的聚焦几何覆盖。FR8 — 状态位跟随成员能力每个输入必须提供detached与tooltip。成员仅在以下条件成立时才支持attached直接控件是不透明、有边框、固定高度的且其根能可靠反映用于重叠的解析尺寸。在受支持处attached是默认值。包裹式、自定义、高型或半透明表面通常使用detached或组件自有位置。直接FieldStatus继续只支持attached与detachedField在渲染它之前消费tooltip。Field.tsx 的statusVariant文档明确了三种模式attached状态紧贴输入下方默认适用于有边框输入、detached独立元素适用于 checkbox/switch/slider、tooltip无消息框状态通过字段图标上的 tooltip 呈现。实现中tooltip变体不渲染消息框Field.tsxattached变体通过--_field-status-overlap把 FieldStatus 延伸到控件下半部后方Field.tsx并利用z-index: -1的负层保证重叠背景位于输入之下。DEC-4 明确拒绝了从任意后代data-size推导通用重叠的做法。允许的组件差异AV1–AV6契约在强约束之外保留了六类刻意差异AV1 — 原生控件 vs 组合控件文本字段可使用原生 input选择控件可使用 button/listbox 或 dialog 组合。AV2 — 端部控件机制与含义成员可用流内 flex 项目或组件局部的流外通道渲染 clear、busy、status、disclosure、stepper 或文档化自定义内容机制不得削弱 FR1/FR2。AV3 — 块轴增长与组内适配TextArea 与 Tokenizer 在未分组时可因多行/多 token 内容在块轴增长InputGroup 准入不改变这些独立默认值。组模式下被准入组件拥有满足 FR3 的呈现Tokenizer 在该基础上被准入且当调用方未选其他受支持溢出模式时必须默认组件自有的溢出处理以保持组单行外观——此默认不需要新公共 prop 或主题 target。AV4 — 动作回调形状文本编辑成员可把变更事件传给changeAction结构化值成员可只传提议值。组件文档拥有精确回调类型。AV5 — 支持的概念可变成员不必仅为加入家族而添加size、isLoading、changeAction、disabledMessage、clear 或 InputGroup 支持一旦暴露其中某个概念对应家族规则即适用。AV6 — attached 状态支持不能满足 FR8 的成员让 attached 保持不可用而非近似重叠它仍通过家族状态契约提供 detached 与 tooltip。代表性矩阵与采用现状代表性矩阵契约以成员 × 状态 → 共享不变量 / 刻意差异的矩阵示范了不变量的应用方式成员与状态共享不变量刻意差异TextInput / 空、有值或 input-busy稳定内联尺寸流内端部控件不与文本重叠原生 input 与可选 clear/status 控件Selector / placeholder 或已选择端部控件与组行保持有界独立内联尺寸可跟随展示内容DEC-1Typeahead / 空、已选或 source-busy稳定内联尺寸与单一不重叠端部区域独立与分组可编辑输入变为已选 Tokensource busy 归 BaseTypeaheadTokenizer / 独立 tokens、source-busy 与 endContent稳定内联尺寸与 clear 内容/端部控件分离独立 tokens 可换行并在块轴增长字段Tokenizer / 准入 InputGroup 模式组高度、连接表面、语义与键盘行为保持连贯组默认单行溢出处理调用方选择的其他受支持溢出可在 FR3 内变化ComplexSelector / placeholder、已选或 input-busy稳定字段表面与不重叠的 Spinner/disclosure调用方拥有富弹层内容无交付的 InputGroup 支持被准入成员 / InputGroup兼容尺寸/高度、单一外部表面/焦点所有者、单行几何与保持的语义组件拥有其内部组内截断、折叠、裁剪或溢出暴露disabledMessage的成员原因可达变更保持被阻止组件拥有焦点目标与 Tooltip 组合成员 / 校验状态detached 与 tooltip 可用attached 仅在受支持时默认组件拥有其控件是否安全满足 attached 资格当前交付事实Adoption 表契约给出了每个成员当前的采用情况与记录在案的例外这是判断契约要求 vs 实际交付的权威快照组件当前采用记录例外TextInputField、FormLayout、InputGroup、size、width、isLoading、changeAction、clear、status、禁用原因无TextAreaField、FormLayout、size、width、isLoading、changeAction、status、禁用原因块轴增长不兼容 InputGroupNumberInputField、FormLayout、InputGroup、size、width、clear、status、禁用原因无交付的isLoading/changeActionDateInputField、FormLayout、InputGroup、size、width、isLoading、changeAction、clear、status、禁用原因无DateRangeInputField、FormLayout、size、width、isLoading、changeAction、clear、status、禁用原因不兼容 InputGroupDateTimeInputField、FormLayout、size、width、isLoading、changeAction、clear、status、禁用原因不兼容 InputGroupTimeInputField、FormLayout、InputGroup、size、width、isLoading、changeAction、clear、status、禁用原因无FileInputField、FormLayout、width、isLoading、changeAction、clear、status、禁用原因无公共sizecompact 与 dropzone 模式为组件自有SelectorField、FormLayout、InputGroup、size、width、isLoading、changeAction、clear、status、禁用原因DEC-1 允许独立内容尺寸宽度MultiSelectorField、FormLayout、InputGroup、size、width、isLoading、changeAction、clear、status、禁用原因trigger-display 模式为组件自有ComplexSelectorField、FormLayout、size、width、isLoading、changeAction、status无 InputGroup 或禁用原因 APITypeaheadField、FormLayout、InputGroup、size、width、clear、status、禁用原因、BaseTypeahead 源加载无家族isLoading/changeAction搜索生命周期为组件自有TokenizerField、FormLayout、size、width、clear、status、禁用原因、BaseTypeahead 源加载、多 token 块增长当前 main 不兼容 InputGroupDEC-5 在组内适配落地后批准准入无家族isLoading/changeAction实现缺口契约诚实地列出了当前 main 上尚未符合的领域这为贡献者提供了明确的改进清单Typeahead 状态几何当前 main 在展示已选 Token 时把 intrinsic 宽度输入移出布局内容尺寸父级可能把字段折叠到值上clear 控件独立定位source-busy 反馈是流内静态时钟且无aria-busy。selected、source-busy、grouped 组合缺少 FR1–FR3、FR7 要求的聚焦几何覆盖。Tokenizer 状态几何与组准入endContent与 clear 控件在流外未预留宽度token 数量可改变 intrinsic 内联尺寸当前 main 不兼容 InputGroupDEC-5 在满足 FR3 并默认单行溢出处理后方可准入。Selector 源状态语义空/无结果呈现仍把isLoading当作选项源 pending缺少 AST-001 要求的显式 source-pending API。Transition Action 覆盖TextInput 与 FileInput 的 clear 路径调用onChange而未走changeActionFileInput 未在 Action pending 期间显式持有乐观受控文件。状态位符合性当前 Field 对任意子项默认 attached 而未证明控件满足 FR8TextArea、Tokenizer、FileInput 的 dropzone 是典型的包裹/高型/自定义表面不能仅从共享默认继承 attached。Attached FieldStatus 重叠仅限直接控件与根可靠暴露解析尺寸的合格成员不合格表面保留组件自有位置通常 detached。验证覆盖当前单元测试证明了组合、语义与单状态行为但尚未提供下文验证映射要求的完整真实浏览器内联尺寸/端部重叠矩阵。这些缺口被如实记录而非声称已修复——这正是知识契约的价值所在。验证映射契约将每条 FR 与具体的验证方式、代表性成员/状态及失败预期绑定形成可执行的验收清单契约验证代表性成员与状态变更或失败预期FR1真实 Chromium 下 block、flex-item、inline-block、grid auto-track、显式宽度容器中的前后内联尺寸测量TextInput 基线Selector 例外Typeahead 空/已选/source-busyTokenizer 零/一/多 token记录例外之外值或 busy 状态改变字段外部内联尺寸FR2窄支持宽度与 LTR/RTL 下的 content-box/control-box 重叠矩阵clear、Spinner、status、disclosure、TokenizerendContent单独与组合内容、光标或指针命中区与已渲染端部控件相交或控件卸载后残留过期预留FR3InputGroup 单元测试加渲染尺寸/高度、表面/焦点所有权、溢出与交互检查每个被准入成员Tokenizer 零/一/多 token、聚焦/未聚焦、显式/默认溢出子项与组尺寸不匹配子项保留竞争外部几何、扩张或增加行、失去连接焦点/边框所有权或改变命名、键盘、焦点、编辑、选择语义FR4键盘、指针与无障碍树测试每个暴露disabledMessage的成员原因不可达或禁用控件变更/激活FR5AST-001 的 Selector/MultiSelector 交互与播报测试输入 busy 时已填充选项显式 source-pending完成空输入 busy 抑制已提供选项或替代源状态FR6每条 Action 能力变更路径的聚焦回调/顺序/乐观/busy 测试键入、选择、日历/预设、文件选择与暴露处的 clear回调/Action 顺序变化、乐观反馈消失、或 clear 路径绕过 Action 契约FR7Typeahead/Tokenizer source-busy 测试与真实浏览器几何检查直接 BaseTypeahead、独立 wrapper、分组 Typeahead、已选/tokenized 值busy 反馈未命名/重复、缺aria-busy、或源加载改变行/内联几何FR8代表性成员测试加真实浏览器重叠/不透明度/高度检查合格单行直接控件包裹、自定义、高型、半透明控件全部三种位置attached 在受支持处缺失、在不安全处出现、或 tooltip 到达直接 FieldStatus验证映射点名的是代表性证据而非每个成员套件穷尽覆盖义务跟随成员表与采用表。五条决策记录DEC-1 至 DEC-5契约把关键分歧固化为带决策者与日期的决策记录是理解为什么这样定的第一手材料DEC-1 — Selector 是独立内联尺寸例外决策者cixzhang2026-08-30Selector 属于 input-field 家族但独立 Selector 可以随其展示的 placeholder 或已选值调整尺寸。此例外不解除 FormLayout、受支持 InputGroup 或显式产品布局施加的约束。DEC-2 — 输入加载描述值解析或保存决策者cixzhang2026-08-30对暴露isLoading的成员它描述字段值正在解析或保存而非选项或支撑数据加载中值 busy 时数据源 prop 保持正常契约。spec:AST-001/DEC-1与spec:AST-001/DEC-2将此区分应用于 Selector 与 MultiSelector。DEC-3 — Transition Action 是输入家族契约决策者cixzhang2026-08-30可选的changeActionAPI 及其乐观/pending 行为属于输入家族。组件文档拥有每个值与事件类型但成员不得独立重新定义回调顺序、乐观反馈或 busy 状态语义。公共 API 准入仍归spec:AST-002/DEC-1所有。DEC-4 — Attached 状态是条件能力而非通用几何决策者cixzhang2026-08-31每个输入提供 detached 与 tooltip 状态位仅当直接控件不透明、有边框、固定高度且根可靠反映用于重叠的解析尺寸时成员才提供 attached受支持时 attached 为默认。包裹、自定义、高型或半透明表面通常用 detached 或保留组件自有位置。已拒绝从任何后代data-size推导通用 attached 重叠因为后代元数据不能证明直接表面不透明、有边框、固定高度或拥有该解析尺寸。DEC-5 — InputGroup 准入基于能力决策者cixzhang2026-09-09InputGroup 兼容性不是封闭组件白名单。任何输入家族成员在其组件契约与实现显式采用组模式并满足 FR3 时即可参与。Tokenizer 依此规则被准入未分组换行与溢出默认不变组模式下调用方未选受支持溢出模式时默认组件自有处理以保持单行外观可复用现有溢出表面不新增公共 prop、回调、主题 target 或通用 InputGroup 分支。已拒绝永久硬编码白名单、Tokenizer 专属例外、无完整组适配的上下文消费、以及强制独立多行/多 token 输入进入单行呈现。契约内容边界这份记录只拥有跨组件的字段行为。组件 props、选择/搜索算法、视觉目标映射、实现机制、当前审计结果与产品专属组合分别归组件、架构、设计、审计或调用点所有者。相关架构文档包括 public-component-api.md、component-theming-surface.md 与 interaction-modality.md决策依据的规格在 AST-001 与 AST-002。从实现角度看共享的inputWrapperStylesinputStyles.stylex.ts正是外观一致的落地点它以主题 token 统一边框色、:focus-within强调色、hover 内阴影、--radius-element圆角与 disabled 半透明被 TextInput、TextArea、NumberInput、DateInput、TimeInput、Selector、Typeahead、Tokenizer 共同消费各组件再通过 stylex.props 组合叠加自己的 padding、对齐等覆盖。这解释了契约外观一致如何在实现层面被保证——不是靠复制样式而是靠一个共享源加局部覆盖。总而言之input-field 家族契约的价值在于把 13 个输入组件的状态展示、行为、外观与尺寸收敛为一套可判定的规则用 FR1–FR8 定义不可违背的不变量用 AV1–AV6 保留必要的组件差异用采用表与实现缺口如实记录交付现状再用 DEC-1 至 DEC-5 固化关键决策。对使用 Astryx 的开发者而言它是集成任意输入组件前必读的行为手册对贡献者而言它是新增输入组件或修改现有成员时必须通过的能力门槛。【免费下载链接】astryxAn open source design system thats fully customizable and agent ready项目地址: https://gitcode.com/GitHub_Trending/as/astryx创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表