/** * 「将图元名作为资源标题」开关:通用读写 + 标题解析。 * * - 持久化在 `sceneElement.extensions[NAME_AS_TITLE_EXT_KEY]`,避免污染顶层 schema、 * 不影响未启用该能力的旧 / 新 kind。 * - 是否在编辑面板「显示」该选项,由 `FloorMapElementKindConfig.nameAsTitleConfigurable` * 控制;展示侧(业务卡片渲染)只读 extensions,不依赖 kindConfig,确保即便业务方 * 后续撤回 kindConfig 开关,已落库的偏好仍生效。 */ /** 持久化字段名:固定字符串,跨包共用,勿改 */ export declare const NAME_AS_TITLE_EXT_KEY: "nameAsTitle"; interface ElementWithExtensions { name?: string; extensions?: Record; } /** 安全读取「图元名作为标题」开关 */ export declare function isElementNameAsTitleEnabled(el: ElementWithExtensions | null | undefined): boolean; /** * 计算 `extensions` patch:返回值供调用方写入 `sceneElement.extensions`。 * * - `enabled === true` 时写入 `true`; * - `enabled === false` 时**移除**该 key(而非写 `false`),避免持久化里残留无意义字段; * - 返回 `undefined` 表示「extensions 整体可清空」(仅当结果是空对象时)。 * * @example * const nextExt = buildNameAsTitleExtensionsPatch(el.extensions, true); * onUpdate({ extensions: nextExt }); */ export declare function buildNameAsTitleExtensionsPatch(prev: Record | undefined, enabled: boolean): Record | undefined; /** * 通用图元标题解析:业务展示层(卡片标题、占位标题等)统一调用本函数, * 让「图元名作为资源标题」这一偏好对所有接入方一致生效。 * * 优先级: * 1. 启用了 nameAsTitle 且 `el.name` 非空 → `el.name` * 2. `recordTitle`(业务侧按自己规则算出来的,如预约页 `row.main_field` / `row.code`) * 3. `el.name`(业务字段缺失时的兜底,与历史行为一致) * 4. `fallback`(如 kindLabel) * 5. 空串 * * 不更改 `displayRoomTitleFromRow` / `record.name` 等业务函数本身, * 业务方只需把"按业务字段"算出来的结果以 `recordTitle` 传入即可, * `bookingDetailModal` 等下游不会被联动改坏。 */ export declare function resolveSceneElementDisplayTitle(opts: { sceneElement?: ElementWithExtensions | null; recordTitle?: string; fallback?: string; }): string; export {};