Archived
芯片类型是人在件上现造的,写死在模版里等于「只能选出包那天就有的那几种」。 与 data-rows 同一层机制:只取值不判断,选中哪一个仍由 selectCurrent 按行内的值定。 空选项一律留着 ——「还没选」得说得出来。 brief 给的实现有两处会让测试落空,已按 TDD 修正并留痕在代码注释里: ①产出的 <select> 若留着 data-slot,renderTemplate 的 SLOT 规则会把整段 <option> 当文本槽冲掉(<select>2</select>)—— fillOptions 需要把 data-slot 一并摘掉; ②selectCurrent 只在 renderRows 的逐行流程里被调用,不在任何 data-rows 里的下拉 永远等不到人给它标 selected —— renderView 收尾再兜底调一遍(用外层作用域), 已经被行内定过的整块原样放过(靠判断块内是否已有 selected,不靠字符串层面 分不清的「是不是在行里」)。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
/**
|
|
* module: interaction —— 唯一出口。只做 re-export,不写逻辑(编码规范 §10.1)。
|
|
*/
|
|
export type {
|
|
ChatMessage,
|
|
ControlHolder,
|
|
InteractionPhase,
|
|
InteractionService,
|
|
PushEnvelope,
|
|
Subscription,
|
|
TemplateViolation,
|
|
ViewBlock,
|
|
} from './contract.ts';
|
|
export { TemplateRejectedError } from './contract.ts';
|
|
|
|
export type { Audience, Clock, HumanEventPublisher, IdGenerator, InteractionStore, MemoryRecorder } from './port.ts';
|
|
|
|
export type { InteractionServiceDeps } from './internal/usecase/interaction-service.ts';
|
|
export { createInteractionService, visibleTo } from './internal/usecase/interaction-service.ts';
|
|
|
|
export {
|
|
CONTROL_HOLDERS,
|
|
checkTemplate,
|
|
handoverHappens,
|
|
inputControl,
|
|
INTERACTION_PHASES,
|
|
outputControl,
|
|
templateIsSafe,
|
|
} from './internal/domain/control-handover.ts';
|
|
export { renderView, renderTemplate, renderRows, fillOptions, escapeHtml, displayValue } from './internal/domain/view-render.ts';
|
|
|
|
export { createInteractionStore } from './internal/adapter/interaction-store.ts';
|
|
export { chatMessageTable, taskViewTable } from './internal/adapter/interaction-schema.ts';
|